<?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>77504</bug_id>
          
          <creation_ts>2012-01-31 20:06:51 -0800</creation_ts>
          <short_desc>[PerformanceTests] Each Dromaeo test needs its landing html.</short_desc>
          <delta_ts>2012-02-06 15:46:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>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>
          
          <blocked>76156</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>abarth</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>546757</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-01-31 20:06:51 -0800</bug_when>
    <thetext>dom-query has dom-query.html. We need to have such for other tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548350</commentid>
    <comment_count>1</comment_count>
      <attachid>125233</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-02 19:06:34 -0800</bug_when>
    <thetext>Created attachment 125233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548558</commentid>
    <comment_count>2</comment_count>
      <attachid>125284</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-03 01:14:30 -0800</bug_when>
    <thetext>Created attachment 125284
Patch - Uploading manually because it&apos;s too big for webkit-patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550366</commentid>
    <comment_count>3</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-06 15:45:42 -0800</bug_when>
    <thetext>Committed r106865: &lt;http://trac.webkit.org/changeset/106865&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125233</attachid>
            <date>2012-02-02 19:06:34 -0800</date>
            <delta_ts>2012-02-02 23:54:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77504-20120203120629.patch</filename>
            <type>text/plain</type>
            <size>1508078</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NjE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWRjNzEyNDJhMWI3NzQ4MGQzY2I5ZTBmMDNmNjY3NDVl
YzNjMWNhMi4uOTEzYTVmYjQyYzZhOTgxYWNkZTllYjU2ZWE0ODgwNDNkNWRmZGRiNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDEyLTAyLTAyICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtQZXJmb3JtYW5jZVRlc3RzXSBFYWNoIERyb21hZW8gdGVzdCBuZWVkcyBpdHMg
bGFuZGluZyBodG1sLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzc1MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBhbiBpZ25vcmFibGUgcGF0dGVybiB3aGljaCBoYXBwZW5zIGluIHNvbWUgRHJv
bWFlbyB0ZXN0cy4KKyAgICAgICAgCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3Jt
YW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIp
OgorCiAyMDEyLTAyLTAyICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgbnJ3dCBzaG91bGRuJ3QgYmxvdyB1cCB3aGVuIHRoZXJlIGFyZSBlcnJvcnMgaW4gdGVz
dF9leHBlY3RhdGlvbnMudHh0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bl
cmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CmluZGV4IDRkODhkNTZlMjcz
NjhlMDZjMjE5NzM4NmQyMWMzOGU0MDI1Yzc5OTUuLmM3YWJjNWRmMWVkZTM1ZmM5NTM3ODhkMzgy
YjJiODhkNTQ4YjNjNTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9y
bWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CkBAIC0yNDQsNyArMjQ0LDgg
QEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgIHJlLmNvbXBpbGUocide
XGQrKC5cZCspPyQnKSwKICAgICAgICAgIyBGb2xsb3dpbmcgYXJlIGZvciBoYW5kbGUgZXhpc3Rp
bmcgdGVzdCBsaWtlIERyb21hZW8KICAgICAgICAgcmUuY29tcGlsZShyZS5lc2NhcGUoIiIibWFp
biBmcmFtZSAtIGhhcyAxIG9udW5sb2FkIGhhbmRsZXIocykiIiIpKSwKLSAgICAgICAgcmUuY29t
cGlsZShyZS5lc2NhcGUoIiIiZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+
IiAtIGhhcyAxIG9udW5sb2FkIGhhbmRsZXIocykiIiIpKV0KKyAgICAgICAgcmUuY29tcGlsZShy
ZS5lc2NhcGUoIiIiZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+IiAtIGhh
cyAxIG9udW5sb2FkIGhhbmRsZXIocykiIiIpKSwKKyAgICAgICAgcmUucmVtcGlsZShyZS5lc2Nh
cGUoIiIiZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LzwhLS1mcmFtZTAtLT4t
LT4iIC0gaGFzIDEgb251bmxvYWQgaGFuZGxlcihzKSIiIikpXQogCiAgICAgZGVmIF9zaG91bGRf
aWdub3JlX2xpbmVfaW5fcGFyc2VyX3Rlc3RfcmVzdWx0KHNlbGYsIGxpbmUpOgogICAgICAgICBp
ZiBub3QgbGluZToKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVy
Zm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2VmNzMxMWMyOTJjMGExM2RlMTA2ZTVmOWEz
NzY0Zjc5MDExN2FlMC4uMDYyYjRmN2NhNWVkYmJjMzA1NzBmM2YzY2ZhMzFlYjliNmYxMmZmYyAx
MDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OCBAQAorMjAxMi0wMi0wMiAgSGFqaW1lIE1vcnJp
dGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGVyZm9ybWFuY2VUZXN0c10g
RWFjaCBEcm9tYWVvIHRlc3QgbmVlZHMgaXRzIGxhbmRpbmcgaHRtbC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTA0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBsYW5kaW5nIHBhZ2VzIGZv
ciBlYWNoIHRlc3Qgd2hpY2ggYXJlIGxpc3RlZCBpbiBNQU5JRkVTVC5qc29uCisgICAgICAgIC0g
UmVtb3ZlZCBzb21lIHRlc3RzIHdoaWNoIGRlcGVuZHMgb24gdGhlIGxpYnJhcnkgd2hvc2UgbGlj
ZW5zZSBpcyBpbmNvbXBhdGlibGUgdG8gV2ViS2l0LgorICAgICAgICAtIEFkZGVkIGxvY2FsIGNv
cHkgb2YgY29ycmVzcG9uZGluZyBsaWJyYXJ5LiBBbmQgcmVwbGFjZSB0aGUgcmVmZXJlbmNlcyB0
byB0aGUgcmVtb3RlIHNvdXJjZXMKKyAgICAgICAgICB0byB0aGUgbG9jYWwgY29waWVzLgorICAg
ICAgICAtIFNraXBwZWQgU3Vuc3VwaWVyIGFuZCB2OCB0ZXN0LiBTdWNoIEpTIGNlbnRyaWMgdGVz
dCBzaG91bGQgaGF2ZSBpdHMgb3duIHRlc3QgaW5zdGVhZCBvZgorICAgICAgICAgIHJ1bm5pbmcg
YXMgYSBwYXJ0IG9mIERyb21hZW8uCisKKyAgICAgICAgKiBEcm9tYWVvL2Nzc3F1ZXJ5LWRvam8u
aHRtbDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbDogQWRk
ZWQuCisgICAgICAgICogRHJvbWFlby9jc3NxdWVyeS1wcm90b3R5cGUuaHRtbDogQWRkZWQuCisg
ICAgICAgICogRHJvbWFlby9kb20tYXR0ci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVv
L2RvbS1tb2RpZnkuaHRtbDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9kb20tdHJhdmVyc2Uu
aHRtbDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9kcm9tYWVvLTNkLWN1YmUuaHRtbDogQWRk
ZWQuCisgICAgICAgICogRHJvbWFlby9kcm9tYWVvLWNvcmUtZXZhbC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBEcm9tYWVvL2Ryb21hZW8tb2JqZWN0LWFycmF5Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIERyb21hZW8vZHJvbWFlby1vYmplY3QtcmVnZXhwLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IERyb21hZW8vZHJvbWFlby1vYmplY3Qtc3RyaW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIERy
b21hZW8vZHJvbWFlby1zdHJpbmctYmFzZTY0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIERyb21h
ZW8vanNsaWItYXR0ci1qcXVlcnkuaHRtbDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9qc2xp
Yi1hdHRyLXByb3RvdHlwZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL2pzbGliLWV2
ZW50LWpxdWVyeS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL2pzbGliLWV2ZW50LXBy
b3RvdHlwZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL2pzbGliLW1vZGlmeS1qcXVl
cnkuaHRtbDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9qc2xpYi1tb2RpZnktcHJvdG90eXBl
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIERyb21hZW8vanNsaWItc3R5bGUtanF1ZXJ5Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIERyb21hZW8vanNsaWItc3R5bGUtcHJvdG90eXBlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIERyb21hZW8vanNsaWItdHJhdmVyc2UtanF1ZXJ5Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIERyb21hZW8vanNsaWItdHJhdmVyc2UtcHJvdG90eXBlLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIERyb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xpYi9kb2pvLTEuNi4x
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi9saWIv
anF1ZXJ5LTEuNi40LmpzOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3Jlc291cmNlcy9kcm9t
YWVvL3dlYi9saWIvbW9vdG9vbHMuanM6IFJlbW92ZWQuCisgICAgICAgICogRHJvbWFlby9yZXNv
dXJjZXMvZHJvbWFlby93ZWIvbGliL3Byb3RvdHlwZS0xLjcuanM6IEFkZGVkLgorICAgICAgICAq
IERyb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2Nzc3F1ZXJ5LWRvam8uaHRtbDoK
KyAgICAgICAgKiBEcm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9jc3NxdWVyeS1q
cXVlcnkuaHRtbDoKKyAgICAgICAgKiBEcm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0
cy9jc3NxdWVyeS1tb290b29scy5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIERyb21hZW8vcmVz
b3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2Nzc3F1ZXJ5LXByb3RvdHlwZS5odG1sOgorICAgICAg
ICAqIERyb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLWF0dHItanF1ZXJ5
Lmh0bWw6CisgICAgICAgICogRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNs
aWItYXR0ci1wcm90b3R5cGUuaHRtbDoKKyAgICAgICAgKiBEcm9tYWVvL3Jlc291cmNlcy9kcm9t
YWVvL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1qcXVlcnkuaHRtbDoKKyAgICAgICAgKiBEcm9tYWVv
L3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1wcm90b3R5cGUuaHRtbDoK
KyAgICAgICAgKiBEcm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1tb2Rp
ZnktanF1ZXJ5Lmh0bWw6CisgICAgICAgICogRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIv
dGVzdHMvanNsaWItbW9kaWZ5LXByb3RvdHlwZS5odG1sOgorICAgICAgICAqIERyb21hZW8vcmVz
b3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLXN0eWxlLWpxdWVyeS5odG1sOgorICAgICAg
ICAqIERyb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLXN0eWxlLXByb3Rv
dHlwZS5odG1sOgorICAgICAgICAqIERyb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3Rz
L2pzbGliLXRyYXZlcnNlLWpxdWVyeS5odG1sOgorICAgICAgICAqIERyb21hZW8vcmVzb3VyY2Vz
L2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLXRyYXZlcnNlLXByb3RvdHlwZS5odG1sOgorICAgICAg
ICAqIERyb21hZW8vc3Vuc3BpZGVyLTNkLW1vcnBoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIERy
b21hZW8vc3Vuc3BpZGVyLTNkLXJheXRyYWNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIERyb21h
ZW8vc3Vuc3BpZGVyLWFjY2Vzcy1iaW5hcnktdHJlZXMuaHRtbDogQWRkZWQuCisgICAgICAgICog
RHJvbWFlby9zdW5zcGlkZXItYWNjZXNzLWZhbm5rdWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IERyb21hZW8vc3Vuc3BpZGVyLWFjY2Vzcy1uYm9keS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBE
cm9tYWVvL3N1bnNwaWRlci1hY2Nlc3MtbnNpZXZlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIERy
b21hZW8vc3Vuc3BpZGVyLWJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1iaXRvcHMtYml0cy1pbi1ieXRlLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIERyb21hZW8vc3Vuc3BpZGVyLWJpdG9wcy1iaXR3aXNlLWFuZC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1iaXRvcHMtbnNpZXZlLWJpdHMuaHRt
bDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9zdW5zcGlkZXItY29udHJvbGZsb3ctcmVjdXJz
aXZlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIERyb21hZW8vc3Vuc3BpZGVyLWNyeXB0by1hZXMu
aHRtbDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9zdW5zcGlkZXItY3J5cHRvLW1kNS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1jcnlwdG8tc2hhMS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1kYXRlLWZvcm1hdC10b2Z0ZS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1kYXRlLWZvcm1hdC14cGFyYi5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1tYXRoLWNvcmRpYy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1tYXRoLXBhcnRpYWwtc3Vtcy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1tYXRoLXNwZWN0cmFsLW5v
cm0uaHRtbDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9zdW5zcGlkZXItcmVnZXhwLWRuYS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1zdHJpbmctZmFzdGEuaHRt
bDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby9zdW5zcGlkZXItc3RyaW5nLXRhZ2Nsb3VkLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIERyb21hZW8vc3Vuc3BpZGVyLXN0cmluZy11bnBhY2stY29k
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3N1bnNwaWRlci1zdHJpbmctdmFsaWRh
dGUtaW5wdXQuaHRtbDogQWRkZWQuCisgICAgICAgICogRHJvbWFlby92OC1jcnlwdG8uaHRtbDog
QWRkZWQuCisgICAgICAgICogRHJvbWFlby92OC1kZWx0YWJsdWUuaHRtbDogQWRkZWQuCisgICAg
ICAgICogRHJvbWFlby92OC1lYXJsZXktYm95ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogRHJv
bWFlby92OC1yYXl0cmFjZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBEcm9tYWVvL3Y4LXJpY2hh
cmRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNraXBwZWQ6CisKIDIwMTItMDItMDIgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxMDY1NDMuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ry
b21hZW8vY3NzcXVlcnktZG9qby5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1
ZXJ5LWRvam8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWY1MzdjZDkxNmIzZTJmODFjZjI5NTUxNDVkYjM5
NWUzYWFlNjBlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nz
c3F1ZXJ5LWRvam8uaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgiY3Nz
cXVlcnktZG9qbyIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpx
dWVyeS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk2NGY1ZThiM2IxMGM1MTc4NGM0OTdkMzJkMzBjNmU2MDc0OWFkNzgKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRv
Y3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAoImNzc3F1ZXJ5LWpxdWVy
eSIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LXByb3RvdHlwZS5o
dG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LXByb3RvdHlwZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY3YTU5NTFlYzU5YTQ5ZTM1MzQ4ZjJkNmFmZTBkYzg1MzNhZmY2NDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktcHJvdG90eXBl
Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRv
Y3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAoImNzc3F1ZXJ5LXByb3Rv
dHlwZSIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2RvbS1hdHRyLmh0bWwgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vZG9tLWF0dHIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTQ1OTQ3
MDU5NWQwZDFiMTliZDU4NTgxYmMwNmYwYzg4YjFlNDgwCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2RvbS1hdHRyLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9y
dW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9q
cXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVy
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsK
KyAgICBEUlQuc2V0dXAoImRvbS1hdHRyIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21h
ZW8vZG9tLW1vZGlmeS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2RvbS1tb2RpZnku
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41YmYwOGUxOTRhZDM3MjYxZGM0ZDAyMjM5Yjg3YjdiYmQ4YTdkNzlk
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2RvbS1tb2RpZnku
aHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9j
dW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgiZG9tLW1vZGlmeSIpOwor
fSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2RvbS10cmF2ZXJzZS5odG1sIGIvUGVyZm9y
bWFuY2VUZXN0cy9Ecm9tYWVvL2RvbS10cmF2ZXJzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjNjM3NWNj
NzNmYWJhNzRjMzhmNjNhYzdlYzU3NTY3ZTg5NWY0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL0Ryb21hZW8vZG9tLXRyYXZlcnNlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dl
Yi9qcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVu
bmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigp
IHsKKyAgICBEUlQuc2V0dXAoImRvbS10cmF2ZXJzZSIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9Ecm9tYWVvL2Ryb21hZW8tM2QtY3ViZS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Ryb21hZW8tM2QtY3ViZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxZDBjOTY2MjRiNzI2ZTk4MmEzNDk1
NzJlOTlkY2E1M2JjZWRhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ry
b21hZW8vZHJvbWFlby0zZC1jdWJlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQu
c2V0dXAoImRyb21hZW8tM2QtY3ViZSIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Ryb21hZW8tY29yZS1ldmFsLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vZHJvbWFl
by1jb3JlLWV2YWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODczZDE0ZTMzYjRkMjNlZjcxY2I2NGUyN2E4
MjQ5ZmUzMmQwODVjCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Ryb21hZW8tY29yZS1ldmFsLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0
dXAoImRyb21hZW8tY29yZS1ldmFsIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8v
ZHJvbWFlby1vYmplY3QtYXJyYXkuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9kcm9t
YWVvLW9iamVjdC1hcnJheS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlOGM3M2M4OWIzNmVhMGQ3YzE3ZTli
YzY1MzMyODRmYjVmMjNhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ry
b21hZW8vZHJvbWFlby1vYmplY3QtYXJyYXkuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5l
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVy
eS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAg
IERSVC5zZXR1cCgiZHJvbWFlby1vYmplY3QtYXJyYXkiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9kcm9tYWVvLW9iamVjdC1yZWdleHAuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMv
RHJvbWFlby9kcm9tYWVvLW9iamVjdC1yZWdleHAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzc2ZWJjMDYx
ZmQ4YjFlNmUzZTExNTQ3ZTU1MWVkNjQxYzA4NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9Ecm9tYWVvL2Ryb21hZW8tb2JqZWN0LXJlZ2V4cC5odG1sCkBAIC0wLDAgKzEs
MTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJv
bWFlby93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJv
bWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVu
Y3Rpb24oKSB7CisgICAgRFJULnNldHVwKCJkcm9tYWVvLW9iamVjdC1yZWdleHAiKTsKK30pOwor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9kcm9tYWVvLW9iamVjdC1zdHJpbmcuaHRtbCBiL1Bl
cmZvcm1hbmNlVGVzdHMvRHJvbWFlby9kcm9tYWVvLW9iamVjdC1zdHJpbmcuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41ZmZiNzkyMGVkMTllZjVhZjkzN2UyNDQ2YmQ1OTc1YzFhYjgwNWQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Ryb21hZW8tb2JqZWN0LXN0cmluZy5o
dG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1
bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVwKCJkcm9tYWVvLW9iamVjdC1z
dHJpbmciKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9kcm9tYWVvLXN0cmluZy1i
YXNlNjQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9kcm9tYWVvLXN0cmluZy1iYXNl
NjQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MTQ3YTU2Y2Q4ZmZkMjY0NGQ5YzFhNDUzZGZkNzJkNGVhMTBi
Y2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Ryb21hZW8t
c3RyaW5nLWJhc2U2NC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVwKCJk
cm9tYWVvLXN0cmluZy1iYXNlNjQiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9q
c2xpYi1hdHRyLWpxdWVyeS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pzbGliLWF0
dHItanF1ZXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODEyZmM0NWVhMzkwNWJjZTBiZjMwMTE2MDkwYjFl
ODhhMGNjZTI2MgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9q
c2xpYi1hdHRyLWpxdWVyeS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVw
KCJqc2xpYi1hdHRyLWpxdWVyeSIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pz
bGliLWF0dHItcHJvdG90eXBlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vanNsaWIt
YXR0ci1wcm90b3R5cGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMmM3ZmJjNWNhMTY2Yjk2ZGQ3ZTk2MWFi
NzQzYjg1YThhMmEzZDczCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9t
YWVvL2pzbGliLWF0dHItcHJvdG90eXBlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnku
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBE
UlQuc2V0dXAoImpzbGliLWF0dHItcHJvdG90eXBlIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vanNsaWItZXZlbnQtanF1ZXJ5Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21h
ZW8vanNsaWItZXZlbnQtanF1ZXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRkMTc4ODQyOTAxMTAyYmFk
ZDdmMTY4NzQ5NGRmNWE3N2U2NmFmZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9qc2xpYi1ldmVudC1qcXVlcnkuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1
bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2px
dWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewor
ICAgIERSVC5zZXR1cCgianNsaWItZXZlbnQtanF1ZXJ5Iik7Cit9KTsKKzwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL0Ryb21hZW8vanNsaWItZXZlbnQtcHJvdG90eXBlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vanNsaWItZXZlbnQtcHJvdG90eXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVjZjdkOWFl
ZTQ2Y2UxMjgyMmMzMDk5MzAzMGU1NWFhZDAwNTRmMAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9qc2xpYi1ldmVudC1wcm90b3R5cGUuaHRtbApAQCAtMCwwICsx
LDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ry
b21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ry
b21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1
bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgianNsaWItZXZlbnQtcHJvdG90eXBlIik7Cit9KTsK
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vanNsaWItbW9kaWZ5LWpxdWVyeS5odG1sIGIvUGVy
Zm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pzbGliLW1vZGlmeS1qcXVlcnkuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42ZTNjOGQ1YWQzMzA1OTQxYWRmN2FiODI4YmQ5NGQ3YTk2NmQxMTA0Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pzbGliLW1vZGlmeS1qcXVlcnkuaHRtbApA
QCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQp
LnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgianNsaWItbW9kaWZ5LWpxdWVyeSIp
OworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pzbGliLW1vZGlmeS1wcm90b3R5cGUu
aHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9qc2xpYi1tb2RpZnktcHJvdG90eXBlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTZiMmE3ZDdjNDFkM2EzMmQyMGZmMjQ5MjRiOTBiZjFmNzQ3YmU4Ywot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9qc2xpYi1tb2RpZnkt
cHJvdG90eXBlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAoImpzbGli
LW1vZGlmeS1wcm90b3R5cGUiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9qc2xp
Yi1zdHlsZS1qcXVlcnkuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9qc2xpYi1zdHls
ZS1qcXVlcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTZlNjNlYjFlNDQ4ZDJkYTE3ZmY5NjhlNTEwZWRh
MmNkOTlmMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pz
bGliLXN0eWxlLWpxdWVyeS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVw
KCJqc2xpYi1zdHlsZS1qcXVlcnkiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9q
c2xpYi1zdHlsZS1wcm90b3R5cGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9qc2xp
Yi1zdHlsZS1wcm90b3R5cGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWNhMDRhMjA2NzQ4NWNkNTgxM2Jm
YzgyNzAxODgyZDUxOTJiYTBjCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9E
cm9tYWVvL2pzbGliLXN0eWxlLXByb3RvdHlwZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVu
bmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlby93ZWIvanF1
ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlb3J1bm5lci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7Cisg
ICAgRFJULnNldHVwKCJqc2xpYi1zdHlsZS1wcm90b3R5cGUiKTsKK30pOworPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvRHJvbWFlby9qc2xpYi10cmF2ZXJzZS1qcXVlcnkuaHRtbCBiL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9qc2xpYi10cmF2ZXJzZS1qcXVlcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTA3YWYx
YWE3MmU3NGRlMTJjMjQyMjg5M2UyZTBmNDlhZTFlZmFjCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pzbGliLXRyYXZlcnNlLWpxdWVyeS5odG1sCkBAIC0wLDAg
KzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
ZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
ZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHko
ZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVwKCJqc2xpYi10cmF2ZXJzZS1qcXVlcnkiKTsKK30p
OworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9qc2xpYi10cmF2ZXJzZS1wcm90b3R5cGUuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9qc2xpYi10cmF2ZXJzZS1wcm90b3R5cGUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YmFhMzU4ZGYwMDdhMWIxMTFmOTM5MTNmMzEwZDU3OGU1NzM2MmY4Ci0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pzbGliLXRyYXZlcnNl
LXByb3RvdHlwZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVwKCJqc2xp
Yi10cmF2ZXJzZS1wcm90b3R5cGUiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9y
ZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2Rvam8tMS42LjEuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xpYi9kb2pvLTEuNi4xLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY3NGUwYWQ0MjA1NDJmM2YyZjg1ZjIwZjZlYmIzNzVkYmQ2MDJlNmYKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xp
Yi9kb2pvLTEuNi4xLmpzCkBAIC0wLDAgKzEsMTEzNjMgQEAKKy8qCisgICAgICAgIENvcHlyaWdo
dCAoYykgMjAwNC0yMDExLCBUaGUgRG9qbyBGb3VuZGF0aW9uIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgICAgICAgIEF2YWlsYWJsZSB2aWEgQWNhZGVtaWMgRnJlZSBMaWNlbnNlID49IDIuMSBPUiB0
aGUgbW9kaWZpZWQgQlNEIGxpY2Vuc2UuCisgICAgICAgIHNlZTogaHR0cDovL2Rvam90b29sa2l0
Lm9yZy9saWNlbnNlIGZvciBkZXRhaWxzCisqLworCisvKgorICAgICAgICBUaGlzIGlzIGFuIG9w
dGltaXplZCB2ZXJzaW9uIG9mIERvam8sIGJ1aWx0IGZvciBkZXBsb3ltZW50IGFuZCBub3QgZm9y
CisgICAgICAgIGRldmVsb3BtZW50LiBUbyBnZXQgc291cmNlcyBhbmQgZG9jdW1lbnRhdGlvbiwg
cGxlYXNlIHZpc2l0OgorCisgICAgICAgICAgICAgICAgaHR0cDovL2Rvam90b29sa2l0Lm9yZwor
Ki8KKworOyhmdW5jdGlvbigpeworCisgICAgICAgIC8qCisgICAgICAgIGRvam8sIGRpaml0LCBh
bmQgZG9qb3ggbXVzdCBhbHdheXMgYmUgdGhlIGZpcnN0IHRocmVlLCBhbmQgaW4gdGhhdCBvcmRl
ci4KKyAgICAgICAgZGpDb25maWcuc2NvcGVNYXAgPSBbCisgICAgICAgICAgICAgICAgWyJkb2pv
IiwgImZvam8iXSwKKyAgICAgICAgICAgICAgICBbImRpaml0IiwgImZpaml0Il0sCisgICAgICAg
ICAgICAgICAgWyJkb2pveCIsICJmb2pveCJdCisgICAgICAgIAorICAgICAgICBdCisgICAgICAg
ICovCisKKyAgICAgICAgLyoqQnVpbGQgd2lsbCByZXBsYWNlIHRoaXMgY29tbWVudCB3aXRoIGEg
c2NvcGVkIGRqQ29uZmlnICoqLworCisgICAgICAgIC8vVGhlIG51bGwgYmVsb3cgY2FuIGJlIHJl
bGFjZWQgYnkgYSBidWlsZC10aW1lIHZhbHVlIHVzZWQgaW5zdGVhZCBvZiBkakNvbmZpZy5zY29w
ZU1hcC4KKyAgICAgICAgdmFyIHNNYXAgPSBudWxsOworCisgICAgICAgIC8vU2VlIGlmIG5ldyBz
Y29wZXMgbmVlZCB0byBiZSBkZWZpbmVkLgorICAgICAgICBpZigoc01hcCB8fCAodHlwZW9mIGRq
Q29uZmlnICE9ICJ1bmRlZmluZWQiICYmIGRqQ29uZmlnLnNjb3BlTWFwKSkgJiYgKHR5cGVvZiB3
aW5kb3cgIT0gInVuZGVmaW5lZCIpKXsKKyAgICAgICAgICAgICAgICB2YXIgc2NvcGVEZWYgPSAi
Iiwgc2NvcGVQcmVmaXggPSAiIiwgc2NvcGVTdWZmaXggPSAiIiwgc2NvcGVNYXAgPSB7fSwgc2Nv
cGVNYXBSZXYgPSB7fTsKKyAgICAgICAgICAgICAgICBzTWFwID0gc01hcCB8fCBkakNvbmZpZy5z
Y29wZU1hcDsKKyAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgc01hcC5sZW5ndGg7
IGkrKyl7CisgICAgICAgICAgICAgICAgICAgICAgICAvL01ha2UgbG9jYWwgdmFyaWFibGVzLCB0
aGVuIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCB1c2UgdGhlIGxvY2Fscy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBuZXdTY29wZSA9IHNNYXBbaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICBzY29wZURlZiArPSAidmFyICIgKyBuZXdTY29wZVswXSArICIgPSB7fTsgIiArIG5ld1Njb3Bl
WzFdICsgIiA9ICIgKyBuZXdTY29wZVswXSArICI7IiArIG5ld1Njb3BlWzFdICsgIi5fc2NvcGVO
YW1lID0gJyIgKyBuZXdTY29wZVsxXSArICInOyI7CisgICAgICAgICAgICAgICAgICAgICAgICBz
Y29wZVByZWZpeCArPSAoaSA9PSAwID8gIiIgOiAiLCIpICsgbmV3U2NvcGVbMF07CisgICAgICAg
ICAgICAgICAgICAgICAgICBzY29wZVN1ZmZpeCArPSAoaSA9PSAwID8gIiIgOiAiLCIpICsgbmV3
U2NvcGVbMV07CisgICAgICAgICAgICAgICAgICAgICAgICBzY29wZU1hcFtuZXdTY29wZVswXV0g
PSBuZXdTY29wZVsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlTWFwUmV2W25ld1Nj
b3BlWzFdXSA9IG5ld1Njb3BlWzBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGV2YWwoc2NvcGVEZWYgKyAiZG9qby5fc2NvcGVBcmdzID0gWyIgKyBzY29wZVN1ZmZpeCAr
ICJdOyIpOworCisgICAgICAgICAgICAgICAgZG9qby5fc2NvcGVQcmVmaXhBcmdzID0gc2NvcGVQ
cmVmaXg7CisgICAgICAgICAgICAgICAgZG9qby5fc2NvcGVQcmVmaXggPSAiKGZ1bmN0aW9uKCIg
KyBzY29wZVByZWZpeCArICIpeyI7CisgICAgICAgICAgICAgICAgZG9qby5fc2NvcGVTdWZmaXgg
PSAifSkoIiArIHNjb3BlU3VmZml4ICsgIikiOworICAgICAgICAgICAgICAgIGRvam8uX3Njb3Bl
TWFwID0gc2NvcGVNYXA7CisgICAgICAgICAgICAgICAgZG9qby5fc2NvcGVNYXBSZXYgPSBzY29w
ZU1hcFJldjsKKyAgICAgICAgfQorCisvKj09PT09CisvLyBub3RlOgorLy8gICAgICAgICAgICAg
ICdkakNvbmZpZycgZG9lcyBub3QgZXhpc3QgdW5kZXIgJ2Rvam8uKicgc28gdGhhdCBpdCBjYW4g
YmUgc2V0IGJlZm9yZSB0aGUKKy8vICAgICAgICAgICAgICAnZG9qbycgdmFyaWFibGUgZXhpc3Rz
LgorLy8gbm90ZToKKy8vICAgICAgICAgICAgICBTZXR0aW5nIGFueSBvZiB0aGVzZSB2YXJpYWJs
ZXMgKmFmdGVyKiB0aGUgbGlicmFyeSBoYXMgbG9hZGVkIGRvZXMKKy8vICAgICAgICAgICAgICBu
b3RoaW5nIGF0IGFsbC4KKworZGpDb25maWcgPSB7CisgICAgICAgIC8vIHN1bW1hcnk6CisgICAg
ICAgIC8vICAgICAgICAgICAgICBBcHBsaWNhdGlvbiBjb2RlIGNhbiBzZXQgdGhlIGdsb2JhbCAn
ZGpDb25maWcnIHByaW9yIHRvIGxvYWRpbmcKKyAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSBs
aWJyYXJ5IHRvIG92ZXJyaWRlIGNlcnRhaW4gZ2xvYmFsIHNldHRpbmdzIGZvciBob3cgZG9qbyB3
b3Jrcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gaXNEZWJ1ZzogQm9vbGVhbgorICAgICAgICAv
LyAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gYGZhbHNlYC4gSWYgc2V0IHRvIGB0cnVlYCwgZW5z
dXJlcyB0aGF0IERvam8gcHJvdmlkZXMKKyAgICAgICAgLy8gICAgICAgICAgICAgIGV4dGVuZGVk
IGRlYnVnZ2luZyBmZWVkYmFjayB2aWEgRmlyZWJ1Zy4gSWYgRmlyZWJ1ZyBpcyBub3QgYXZhaWxh
YmxlCisgICAgICAgIC8vICAgICAgICAgICAgICBvbiB5b3VyIHBsYXRmb3JtLCBzZXR0aW5nIGBp
c0RlYnVnYCB0byBgdHJ1ZWAgd2lsbCBmb3JjZSBEb2pvIHRvCisgICAgICAgIC8vICAgICAgICAg
ICAgICBwdWxsIGluIChhbmQgZGlzcGxheSkgdGhlIHZlcnNpb24gb2YgRmlyZWJ1ZyBMaXRlIHdo
aWNoIGlzCisgICAgICAgIC8vICAgICAgICAgICAgICBpbnRlZ3JhdGVkIGludG8gdGhlIERvam8g
ZGlzdHJpYnV0aW9uLCB0aGVyZWJ5IGFsd2F5cyBwcm92aWRpbmcgYQorICAgICAgICAvLyAgICAg
ICAgICAgICAgZGVidWdnaW5nL2xvZ2dpbmcgY29uc29sZSB3aGVuIGBpc0RlYnVnYCBpcyBlbmFi
bGVkLiBOb3RlIHRoYXQKKyAgICAgICAgLy8gICAgICAgICAgICAgIEZpcmVidWcncyBgY29uc29s
ZS4qYCBtZXRob2RzIGFyZSBBTFdBWVMgZGVmaW5lZCBieSBEb2pvLiBJZgorICAgICAgICAvLyAg
ICAgICAgICAgICAgYGlzRGVidWdgIGlzIGZhbHNlIGFuZCB5b3UgYXJlIG9uIGEgcGxhdGZvcm0g
d2l0aG91dCBGaXJlYnVnLCB0aGVzZQorICAgICAgICAvLyAgICAgICAgICAgICAgbWV0aG9kcyB3
aWxsIGJlIGRlZmluZWQgYXMgbm8tb3BzLgorICAgICAgICBpc0RlYnVnOiBmYWxzZSwKKyAgICAg
ICAgLy8gZGVidWdBdEFsbENvc3RzOiBCb29sZWFuCisgICAgICAgIC8vICAgICAgICAgICAgICBE
ZWZhdWx0cyB0byBgZmFsc2VgLiBJZiBzZXQgdG8gYHRydWVgLCB0aGlzIHRyaWdnZXJzIGFuIGFs
dGVybmF0ZQorICAgICAgICAvLyAgICAgICAgICAgICAgbW9kZSBvZiB0aGUgcGFja2FnZSBzeXN0
ZW0gaW4gd2hpY2ggZGVwZW5kZW5jaWVzIGFyZSBkZXRlY3RlZCBhbmQKKyAgICAgICAgLy8gICAg
ICAgICAgICAgIG9ubHkgdGhlbiBhcmUgcmVzb3VyY2VzIGV2YWx1YXRlZCBpbiBkZXBlbmRlbmN5
IG9yZGVyIHZpYQorICAgICAgICAvLyAgICAgICAgICAgICAgYDxzY3JpcHQ+YCB0YWcgaW5jbHVz
aW9uLiBUaGlzIG1heSBkb3VibGUtcmVxdWVzdCByZXNvdXJjZXMgYW5kCisgICAgICAgIC8vICAg
ICAgICAgICAgICBjYXVzZSBwcm9ibGVtcyB3aXRoIHNjcmlwdHMgd2hpY2ggZXhwZWN0IGBkb2pv
LnJlcXVpcmUoKWAgdG8KKyAgICAgICAgLy8gICAgICAgICAgICAgIHByZWZvcm0gc3luY2hyb25v
dXNseS4gYGRlYnVnQXRBbGxDb3N0c2AgY2FuIGJlIGFuIGludmFsdWFibGUKKyAgICAgICAgLy8g
ICAgICAgICAgICAgIGRlYnVnZ2luZyBhaWQsIGJ1dCB3aGVuIHVzaW5nIGl0LCBlbnN1cmUgdGhh
dCBhbGwgY29kZSB3aGljaAorICAgICAgICAvLyAgICAgICAgICAgICAgZGVwZW5kcyBvbiBEb2pv
IG1vZHVsZXMgaXMgd3JhcHBlZCBpbiBgZG9qby5hZGRPbkxvYWQoKWAgaGFuZGxlcnMuCisgICAg
ICAgIC8vICAgICAgICAgICAgICBEdWUgdG8gdGhlIHNvbWV3aGF0IHVucHJlZGljdGFibGUgc2lk
ZS1lZmZlY3RzIG9mIHVzaW5nCisgICAgICAgIC8vICAgICAgICAgICAgICBgZGVidWdBdEFsbENv
c3RzYCwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgZW5hYmxlIHRoaXMKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIGZsYWcgYXMgYSBsYXN0IHJlc29ydC4gYGRlYnVnQXRBbGxD
b3N0c2AgaGFzIG5vIGVmZmVjdCB3aGVuIGxvYWRpbmcKKyAgICAgICAgLy8gICAgICAgICAgICAg
IHJlc291cmNlcyBhY3Jvc3MgZG9tYWlucy4gRm9yIHVzYWdlIGluZm9ybWF0aW9uLCBzZWUgdGhl
CisgICAgICAgIC8vICAgICAgICAgICAgICBbRG9qbyBCb29rXShodHRwOi8vZG9qb3Rvb2xraXQu
b3JnL2Jvb2svYm9vay1kb2pvL3BhcnQtNC1tZXRhLWRvam8tbWFraW5nLXlvdXItZG9qby1jb2Rl
LXJ1bi1mYXN0ZXItYW5kLWJldHRlci9kZWJ1Z2dpbmctZmFjaWxpdGllcy9kZWIpCisgICAgICAg
IGRlYnVnQXRBbGxDb3N0czogZmFsc2UsCisgICAgICAgIC8vIGxvY2FsZTogU3RyaW5nCisgICAg
ICAgIC8vICAgICAgICAgICAgICBUaGUgbG9jYWxlIHRvIGFzc3VtZSBmb3IgbG9hZGluZyBsb2Nh
bGl6ZWQgcmVzb3VyY2VzIGluIHRoaXMgcGFnZSwKKyAgICAgICAgLy8gICAgICAgICAgICAgIHNw
ZWNpZmllZCBhY2NvcmRpbmcgdG8gW1JGQyAzMDY2XShodHRwOi8vd3d3LmlldGYub3JnL3JmYy9y
ZmMzMDY2LnR4dCkuCisgICAgICAgIC8vICAgICAgICAgICAgICBNdXN0IGJlIHNwZWNpZmllZCBl
bnRpcmVseSBpbiBsb3dlcmNhc2UsIGUuZy4gYGVuLXVzYCBhbmQgYHpoLWNuYC4KKyAgICAgICAg
Ly8gICAgICAgICAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGRvam8uaTE4bmAgYW5k
IGBkb2pvLnJlcXVpcmVMb2NhbGl6YXRpb25gCisgICAgICAgIC8vICAgICAgICAgICAgICBmb3Ig
ZGV0YWlscyBvbiBsb2FkaW5nIGxvY2FsaXplZCByZXNvdXJjZXMuIElmIG5vIGxvY2FsZSBpcyBz
cGVjaWZpZWQsCisgICAgICAgIC8vICAgICAgICAgICAgICBEb2pvIGFzc3VtZXMgdGhlIGxvY2Fs
ZSBvZiB0aGUgdXNlciBhZ2VudCwgYWNjb3JkaW5nIHRvIGBuYXZpZ2F0b3IudXNlckxhbmd1YWdl
YAorICAgICAgICAvLyAgICAgICAgICAgICAgb3IgYG5hdmlnYXRvci5sYW5ndWFnZWAgcHJvcGVy
dGllcy4KKyAgICAgICAgbG9jYWxlOiB1bmRlZmluZWQsCisgICAgICAgIC8vIGV4dHJhTG9jYWxl
OiBBcnJheQorICAgICAgICAvLyAgICAgICAgICAgICAgTm8gZGVmYXVsdCB2YWx1ZS4gU3BlY2lm
aWVzIGFkZGl0aW9uYWwgbG9jYWxlcyB3aG9zZQorICAgICAgICAvLyAgICAgICAgICAgICAgcmVz
b3VyY2VzIHNob3VsZCBhbHNvIGJlIGxvYWRlZCBhbG9uZ3NpZGUgdGhlIGRlZmF1bHQgbG9jYWxl
IHdoZW4KKyAgICAgICAgLy8gICAgICAgICAgICAgIGNhbGxzIHRvIGBkb2pvLnJlcXVpcmVMb2Nh
bGl6YXRpb24oKWAgYXJlIHByb2Nlc3NlZC4KKyAgICAgICAgZXh0cmFMb2NhbGU6IHVuZGVmaW5l
ZCwKKyAgICAgICAgLy8gYmFzZVVybDogU3RyaW5nCisgICAgICAgIC8vICAgICAgICAgICAgICBU
aGUgZGlyZWN0b3J5IGluIHdoaWNoIGBkb2pvLmpzYCBpcyBsb2NhdGVkLiBVbmRlciBub3JtYWwK
KyAgICAgICAgLy8gICAgICAgICAgICAgIGNvbmRpdGlvbnMsIERvam8gYXV0by1kZXRlY3RzIHRo
ZSBjb3JyZWN0IGxvY2F0aW9uIGZyb20gd2hpY2ggaXQKKyAgICAgICAgLy8gICAgICAgICAgICAg
IHdhcyBsb2FkZWQuIFlvdSBtYXkgbmVlZCB0byBtYW51YWxseSBjb25maWd1cmUgYGJhc2VVcmxg
IGluIGNhc2VzCisgICAgICAgIC8vICAgICAgICAgICAgICB3aGVyZSB5b3UgaGF2ZSByZW5hbWVk
IGBkb2pvLmpzYCBvciBpbiB3aGljaCBgPGJhc2U+YCB0YWdzIGNvbmZ1c2UKKyAgICAgICAgLy8g
ICAgICAgICAgICAgIHNvbWUgYnJvd3NlcnMgKGUuZy4gSUUgNikuIFRoZSB2YXJpYWJsZSBgZG9q
by5iYXNlVXJsYCBpcyBhc3NpZ25lZAorICAgICAgICAvLyAgICAgICAgICAgICAgZWl0aGVyIHRo
ZSB2YWx1ZSBvZiBgZGpDb25maWcuYmFzZVVybGAgaWYgb25lIGlzIHByb3ZpZGVkIG9yIHRoZQor
ICAgICAgICAvLyAgICAgICAgICAgICAgYXV0by1kZXRlY3RlZCByb290IGlmIG5vdC4gT3RoZXIg
bW9kdWxlcyBhcmUgbG9jYXRlZCByZWxhdGl2ZSB0bworICAgICAgICAvLyAgICAgICAgICAgICAg
dGhpcyBwYXRoLiBUaGUgcGF0aCBzaG91bGQgZW5kIGluIGEgc2xhc2guCisgICAgICAgIGJhc2VV
cmw6IHVuZGVmaW5lZCwKKyAgICAgICAgLy8gbW9kdWxlUGF0aHM6IE9iamVjdAorICAgICAgICAv
LyAgICAgICAgICAgICAgQSBtYXAgb2YgbW9kdWxlIG5hbWVzIHRvIHBhdGhzIHJlbGF0aXZlIHRv
IGBkb2pvLmJhc2VVcmxgLiBUaGUKKyAgICAgICAgLy8gICAgICAgICAgICAgIGtleS92YWx1ZSBw
YWlycyBjb3JyZXNwb25kIGRpcmVjdGx5IHRvIHRoZSBhcmd1bWVudHMgd2hpY2gKKyAgICAgICAg
Ly8gICAgICAgICAgICAgIGBkb2pvLnJlZ2lzdGVyTW9kdWxlUGF0aGAgYWNjZXB0cy4gU3BlY2lm
aXlpbmcKKyAgICAgICAgLy8gICAgICAgICAgICAgIGBkakNvbmZpZy5tb2R1bGVQYXRocyA9IHsg
ImZvbyI6ICIuLi8uLi9iYXIiIH1gIGlzIHRoZSBlcXVpdmFsZW50CisgICAgICAgIC8vICAgICAg
ICAgICAgICBvZiBjYWxsaW5nIGBkb2pvLnJlZ2lzdGVyTW9kdWxlUGF0aCgiZm9vIiwgIi4uLy4u
L2JhciIpO2AuIE11bHRpcGxlCisgICAgICAgIC8vICAgICAgICAgICAgICBtb2R1bGVzIG1heSBi
ZSBjb25maWd1cmVkIHZpYSBgZGpDb25maWcubW9kdWxlUGF0aHNgLgorICAgICAgICBtb2R1bGVQ
YXRoczoge30sCisgICAgICAgIC8vIGFmdGVyT25Mb2FkOiBCb29sZWFuCisgICAgICAgIC8vICAg
ICAgICAgICAgICBJbmRpY2F0ZXMgRG9qbyB3YXMgYWRkZWQgdG8gdGhlIHBhZ2UgYWZ0ZXIgdGhl
IHBhZ2UgbG9hZC4gSW4gdGhpcyBjYXNlCisgICAgICAgIC8vICAgICAgICAgICAgICBEb2pvIHdp
bGwgbm90IHdhaXQgZm9yIHRoZSBwYWdlIERPTUNvbnRlbnRMb2FkL2xvYWQgZXZlbnRzIGFuZCBm
aXJlCisgICAgICAgIC8vICAgICAgICAgICAgICBpdHMgZG9qby5hZGRPbkxvYWQgY2FsbGJhY2tz
IGFmdGVyIG1ha2luZyBzdXJlIGFsbCBvdXRzdGFuZGluZworICAgICAgICAvLyAgICAgICAgICAg
ICAgZG9qby5yZXF1aXJlZCBtb2R1bGVzIGhhdmUgbG9hZGVkLiBPbmx5IHdvcmtzIHdpdGggYSBi
dWlsdCBkb2pvLmpzLAorICAgICAgICAvLyAgICAgICAgICAgICAgaXQgZG9lcyBub3Qgd29yayB0
aGUgZG9qby5qcyBkaXJlY3RseSBmcm9tIHNvdXJjZSBjb250cm9sLgorICAgICAgICBhZnRlck9u
TG9hZDogZmFsc2UsCisgICAgICAgIC8vIGFkZE9uTG9hZDogRnVuY3Rpb24gb3IgQXJyYXkKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIEFkZHMgYSBjYWxsYmFjayB2aWEgZG9qby5hZGRPbkxvYWQu
IFVzZWZ1bCB3aGVuIERvam8gaXMgYWRkZWQgYWZ0ZXIKKyAgICAgICAgLy8gICAgICAgICAgICAg
IHRoZSBwYWdlIGxvYWRzIGFuZCBkakNvbmZpZy5hZnRlck9uTG9hZCBpcyB0cnVlLiBTdXBwb3J0
cyB0aGUgc2FtZQorICAgICAgICAvLyAgICAgICAgICAgICAgYXJndW1lbnRzIGFzIGRvam8uYWRk
T25Mb2FkLiBXaGVuIHVzaW5nIGEgZnVuY3Rpb24gcmVmZXJlbmNlLCB1c2UKKyAgICAgICAgLy8g
ICAgICAgICAgICAgIGBkakNvbmZpZy5hZGRPbkxvYWQgPSBmdW5jdGlvbigpe307YC4gRm9yIG9i
amVjdCB3aXRoIGZ1bmN0aW9uIG5hbWUgdXNlCisgICAgICAgIC8vICAgICAgICAgICAgICBgZGpD
b25maWcuYWRkT25Mb2FkID0gW215T2JqZWN0LCAiZnVuY3Rpb25OYW1lIl07YCBhbmQgZm9yIG9i
amVjdCB3aXRoCisgICAgICAgIC8vICAgICAgICAgICAgICBmdW5jdGlvbiByZWZlcmVuY2UgdXNl
CisgICAgICAgIC8vICAgICAgICAgICAgICBgZGpDb25maWcuYWRkT25Mb2FkID0gW215T2JqZWN0
LCBmdW5jdGlvbigpe31dO2AKKyAgICAgICAgYWRkT25Mb2FkOiBudWxsLAorICAgICAgICAvLyBy
ZXF1aXJlOiBBcnJheQorICAgICAgICAvLyAgICAgICAgICAgICAgQW4gYXJyYXkgb2YgbW9kdWxl
IG5hbWVzIHRvIGJlIGxvYWRlZCBpbW1lZGlhdGVseSBhZnRlciBkb2pvLmpzIGhhcyBiZWVuIGlu
Y2x1ZGVkCisgICAgICAgIC8vICAgICAgICAgICAgICBpbiBhIHBhZ2UuCisgICAgICAgIHJlcXVp
cmU6IFtdLAorICAgICAgICAvLyBkZWZhdWx0RHVyYXRpb246IEFycmF5CisgICAgICAgIC8vICAg
ICAgICAgICAgICBEZWZhdWx0IGR1cmF0aW9uLCBpbiBtaWxsaXNlY29uZHMsIGZvciB3aXBlIGFu
ZCBmYWRlIGFuaW1hdGlvbnMgd2l0aGluIGRpaml0cy4KKyAgICAgICAgLy8gICAgICAgICAgICAg
IEFzc2lnbmVkIHRvIGRpaml0LmRlZmF1bHREdXJhdGlvbi4KKyAgICAgICAgZGVmYXVsdER1cmF0
aW9uOiAyMDAsCisgICAgICAgIC8vIGRvam9CbGFua0h0bWxVcmw6IFN0cmluZworICAgICAgICAv
LyAgICAgICAgICAgICAgVXNlZCBieSBzb21lIG1vZHVsZXMgdG8gY29uZmlndXJlIGFuIGVtcHR5
IGlmcmFtZS4gVXNlZCBieSBkb2pvLmlvLmlmcmFtZSBhbmQKKyAgICAgICAgLy8gICAgICAgICAg
ICAgIGRvam8uYmFjaywgYW5kIGRpaml0IHBvcHVwIHN1cHBvcnQgaW4gSUUgd2hlcmUgYW4gaWZy
YW1lIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgbmF0aXZlCisgICAgICAgIC8vICAgICAgICAgICAg
ICBjb250cm9scyBkbyBub3QgYmxlZWQgdGhyb3VnaCB0aGUgcG9wdXBzLiBOb3JtYWxseSB0aGlz
IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgICAgICAgLy8gICAgICAgICAgICAgIGRvZXMgbm90
IG5lZWQgdG8gYmUgc2V0LCBleGNlcHQgd2hlbiB1c2luZyBjcm9zcy1kb21haW4vQ0ROIERvam8g
YnVpbGRzLgorICAgICAgICAvLyAgICAgICAgICAgICAgU2F2ZSBkb2pvL3Jlc291cmNlcy9ibGFu
ay5odG1sIHRvIHlvdXIgZG9tYWluIGFuZCBzZXQgYGRqQ29uZmlnLmRvam9CbGFua0h0bWxVcmxg
CisgICAgICAgIC8vICAgICAgICAgICAgICB0byB0aGUgcGF0aCBvbiB5b3VyIGRvbWFpbiB5b3Vy
IGNvcHkgb2YgYmxhbmsuaHRtbC4KKyAgICAgICAgZG9qb0JsYW5rSHRtbFVybDogdW5kZWZpbmVk
LAorICAgICAgICAvLyAgICAgIGlvUHVibGlzaDogQm9vbGVhbj8KKyAgICAgICAgLy8gICAgICAg
ICAgICAgIFNldCB0aGlzIHRvIHRydWUgdG8gZW5hYmxlIHB1Ymxpc2hpbmcgb2YgdG9waWNzIGZv
ciB0aGUgZGlmZmVyZW50IHBoYXNlcyBvZgorICAgICAgICAvLyAgICAgICAgICAgICAgSU8gb3Bl
cmF0aW9ucy4gUHVibGlzaGluZyBpcyBkb25lIHZpYSBkb2pvLnB1Ymxpc2guIFNlZSBkb2pvLl9f
SW9QdWJsaXNoIGZvciBhIGxpc3QKKyAgICAgICAgLy8gICAgICAgICAgICAgIG9mIHRvcGljcyB0
aGF0IGFyZSBwdWJsaXNoZWQuCisgICAgICAgIGlvUHVibGlzaDogZmFsc2UsCisgICAgICAgIC8v
ICB1c2VDdXN0b21Mb2dnZXI6IEFueXRoaW5nPworICAgICAgICAvLyAgICAgICAgICAgICAgSWYg
c2V0IHRvIGEgdmFsdWUgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSBzdWNoIGFzIGEgc3RyaW5nIG9y
IGFycmF5IGFuZAorICAgICAgICAvLyAgICAgICAgICAgICAgaXNEZWJ1ZyBpcyB0cnVlIGFuZCBG
aXJlYnVnIGlzIG5vdCBhdmFpbGFibGUgb3IgcnVubmluZywgdGhlbiBpdCBieXBhc3NlcworICAg
ICAgICAvLyAgICAgICAgICAgICAgdGhlIGNyZWF0aW9uIG9mIEZpcmVidWcgTGl0ZSBhbGxvd2lu
ZyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIGNvbnNvbGUgb2JqZWN0LgorICAgICAgICB1c2VDdXN0
b21Mb2dnZXI6IHVuZGVmaW5lZCwKKyAgICAgICAgLy8gdHJhbnNwYXJlbnRDb2xvcjogQXJyYXkK
KyAgICAgICAgLy8gICAgICAgICAgICAgIEFycmF5IGNvbnRhaW5pbmcgdGhlIHIsIGcsIGIgY29t
cG9uZW50cyB1c2VkIGFzIHRyYW5zcGFyZW50IGNvbG9yIGluIGRvam8uQ29sb3I7CisgICAgICAg
IC8vICAgICAgICAgICAgICBpZiB1bmRlZmluZWQsIFsyNTUsMjU1LDI1NV0gKHdoaXRlKSB3aWxs
IGJlIHVzZWQuCisgICAgICAgIHRyYW5zcGFyZW50Q29sb3I6IHVuZGVmaW5lZCwKKyAgICAgICAg
Ly8gc2tpcEllRG9tTG9hZGVkOiBCb29sZWFuCisgICAgICAgIC8vICAgICAgICAgICAgICBGb3Ig
SUUgb25seSwgc2tpcCB0aGUgRE9NQ29udGVudExvYWRlZCBoYWNrIHVzZWQuIFNvbWV0aW1lcyBp
dCBjYW4gY2F1c2UgYW4gT3BlcmF0aW9uCisgICAgICAgIC8vICAgICAgICAgICAgICBBYm9ydGVk
IGVycm9yIGlmIHRoZSByZXN0IG9mIHRoZSBwYWdlIHRyaWdnZXJzIHNjcmlwdCBkZWZlcnMgYmVm
b3JlIHRoZSBET00gaXMgcmVhZHkuCisgICAgICAgIC8vICAgICAgICAgICAgICBJZiB0aGlzIGlz
IGNvbmZpZyB2YWx1ZSBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBkb2pvLmFkZE9uTG9hZCBjYWxsYmFj
a3Mgd2lsbCBub3QgYmUKKyAgICAgICAgLy8gICAgICAgICAgICAgIHRyaWdnZXJlZCB1bnRpbCB0
aGUgcGFnZSBsb2FkIGV2ZW50LCB3aGljaCBpcyBhZnRlciBpbWFnZXMgYW5kIGlmcmFtZXMgbG9h
ZC4gSWYgeW91CisgICAgICAgIC8vICAgICAgICAgICAgICB3YW50IHRvIHRyaWdnZXIgdGhlIGNh
bGxiYWNrcyBzb29uZXIsIHlvdSBjYW4gcHV0IGEgc2NyaXB0IGJsb2NrIGluIHRoZSBib3R0b20g
b2YKKyAgICAgICAgLy8gICAgICAgICAgICAgIHlvdXIgSFRNTCB0aGF0IGNhbGxzIGRvam8uX2xv
YWRJbml0KCk7LiBJZiB5b3UgYXJlIHVzaW5nIG11bHRpdmVyc2lvbiBzdXBwb3J0LCBjaGFuZ2UK
KyAgICAgICAgLy8gICAgICAgICAgICAgICJkb2pvLiIgdG8gdGhlIGFwcHJvcHJpYXRlIHNjb3Bl
IG5hbWUgZm9yIGRvam8uCisgICAgICAgIHNraXBJZURvbUxvYWRlZDogZmFsc2UKK30KKz09PT09
Ki8KKworKGZ1bmN0aW9uKCl7CisgICAgICAgIC8vIGZpcmVidWcgc3R1YnMKKworICAgICAgICBp
Zih0eXBlb2YgdGhpc1sibG9hZEZpcmVidWdDb25zb2xlIl0gPT0gImZ1bmN0aW9uIil7CisgICAg
ICAgICAgICAgICAgLy8gZm9yIEZpcmVidWcgMS4yCisgICAgICAgICAgICAgICAgdGhpc1sibG9h
ZEZpcmVidWdDb25zb2xlIl0oKTsKKyAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgdGhp
cy5jb25zb2xlID0gdGhpcy5jb25zb2xlIHx8IHt9OworCisgICAgICAgICAgICAgICAgLy8gICAg
ICBCZSBjYXJlZnVsIHRvIGxlYXZlICdsb2cnIGFsd2F5cyBhdCB0aGUgZW5kCisgICAgICAgICAg
ICAgICAgdmFyIGNuID0gWworICAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydCIsICJjb3Vu
dCIsICJkZWJ1ZyIsICJkaXIiLCAiZGlyeG1sIiwgImVycm9yIiwgImdyb3VwIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICJncm91cEVuZCIsICJpbmZvIiwgInByb2ZpbGUiLCAicHJvZmlsZUVu
ZCIsICJ0aW1lIiwgInRpbWVFbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgInRyYWNlIiwg
Indhcm4iLCAibG9nIgorICAgICAgICAgICAgICAgIF07CisgICAgICAgICAgICAgICAgdmFyIGkg
PSAwLCB0bjsKKyAgICAgICAgICAgICAgICB3aGlsZSgodG49Y25baSsrXSkpeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoIWNvbnNvbGVbdG5dKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHRjbiA9IHRuKyIiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGVbdGNuXSA9ICgnbG9nJyBpbiBjb25zb2xlKSA/IGZ1bmN0aW9uKCl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IEFy
cmF5LmFwcGx5KHt9LCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYS51bnNoaWZ0KHRjbisiOiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVsibG9nIl0oYS5qb2luKCIgIikp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbigp
e30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW3Rjbl0u
X2Zha2UgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vVE9ET0M6ICBIT1cgVE8gRE9DIFRISVM/CisgICAgICAgIC8vIGRvam8gaXMgdGhl
IHJvb3QgdmFyaWFibGUgb2YgKGFsbW9zdCBhbGwpIG91ciBwdWJsaWMgc3ltYm9scyAtLSBtYWtl
IHN1cmUgaXQgaXMgZGVmaW5lZC4KKyAgICAgICAgaWYodHlwZW9mIGRvam8gPT0gInVuZGVmaW5l
ZCIpeworICAgICAgICAgICAgICAgIGRvam8gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBf
c2NvcGVOYW1lOiAiZG9qbyIsCisgICAgICAgICAgICAgICAgICAgICAgICBfc2NvcGVQcmVmaXg6
ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgX3Njb3BlUHJlZml4QXJnczogIiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBfc2NvcGVTdWZmaXg6ICIiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgX3Njb3BlTWFwOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9zY29wZU1hcFJl
djoge30KKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGQgPSBk
b2pvOworCisgICAgICAgIC8vTmVlZCBwbGFjZWhvbGRlcnMgZm9yIGRpaml0IGFuZCBkb2pveCBm
b3Igc2NvcGluZyBjb2RlLgorICAgICAgICBpZih0eXBlb2YgZGlqaXQgPT0gInVuZGVmaW5lZCIp
eworICAgICAgICAgICAgICAgIGRpaml0ID0ge19zY29wZU5hbWU6ICJkaWppdCJ9OworICAgICAg
ICB9CisgICAgICAgIGlmKHR5cGVvZiBkb2pveCA9PSAidW5kZWZpbmVkIil7CisgICAgICAgICAg
ICAgICAgZG9qb3ggPSB7X3Njb3BlTmFtZTogImRvam94In07CisgICAgICAgIH0KKworICAgICAg
ICBpZighZC5fc2NvcGVBcmdzKXsKKyAgICAgICAgICAgICAgICBkLl9zY29wZUFyZ3MgPSBbZG9q
bywgZGlqaXQsIGRvam94XTsKKyAgICAgICAgfQorCisvKj09PT09Citkb2pvLmdsb2JhbCA9IHsK
KyAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAvLyAgICAgICAgICAgICAgQWxpYXMg
Zm9yIHRoZSBnbG9iYWwgc2NvcGUKKyAgICAgICAgLy8gICAgICAgICAgICAgIChlLmcuIHRoZSB3
aW5kb3cgb2JqZWN0IGluIGEgYnJvd3NlcikuCisgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246
CisgICAgICAgIC8vICAgICAgICAgICAgICBSZWZlciB0byAnZG9qby5nbG9iYWwnIHJhdGhlciB0
aGFuIHJlZmVycmluZyB0byB3aW5kb3cgdG8gZW5zdXJlIHlvdXIKKyAgICAgICAgLy8gICAgICAg
ICAgICAgIGNvZGUgcnVucyBjb3JyZWN0bHkgaW4gY29udGV4dHMgb3RoZXIgdGhhbiB3ZWIgYnJv
d3NlcnMgKGUuZy4gUmhpbm8gb24gYSBzZXJ2ZXIpLgorfQorPT09PT0qLworICAgICAgICBkLmds
b2JhbCA9IHRoaXM7CisKKyAgICAgICAgZC5jb25maWcgPS8qPT09PT0gZGpDb25maWcgPSA9PT09
PSoveworICAgICAgICAgICAgICAgIGlzRGVidWc6IGZhbHNlLAorICAgICAgICAgICAgICAgIGRl
YnVnQXRBbGxDb3N0czogZmFsc2UKKyAgICAgICAgfTsKKworICAgICAgICAvLyBGSVhNRTogMi4w
LCBkcm9wIGRqQ29uZmlnIHN1cHBvcnQuIFVzZSBkb2pvQ29uZmlnIGV4Y2x1c2l2ZWx5IGZvciBn
bG9iYWwgY29uZmlnLgorICAgICAgICB2YXIgY2ZnID0gdHlwZW9mIGRqQ29uZmlnICE9ICJ1bmRl
ZmluZWQiID8gZGpDb25maWcgOgorICAgICAgICAgICAgICAgIHR5cGVvZiBkb2pvQ29uZmlnICE9
ICJ1bmRlZmluZWQiID8gZG9qb0NvbmZpZyA6IG51bGw7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIGlmKGNmZyl7CisgICAgICAgICAgICAgICAgZm9yKHZhciBjIGluIGNmZyl7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkLmNvbmZpZ1tjXSA9IGNmZ1tjXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0KKworLyo9PT09PQorICAgICAgICAvLyBPdmVycmlkZSBsb2NhbGUgc2V0dGlu
ZywgaWYgc3BlY2lmaWVkCisgICAgICAgIGRvam8ubG9jYWxlID0geworICAgICAgICAgICAgICAg
IC8vIHN1bW1hcnk6IHRoZSBsb2NhbGUgYXMgZGVmaW5lZCBieSBEb2pvIChyZWFkLW9ubHkpCisg
ICAgICAgIH07Cis9PT09PSovCisgICAgICAgIGRvam8ubG9jYWxlID0gZC5jb25maWcubG9jYWxl
OworCisgICAgICAgIHZhciByZXYgPSAiJFJldjogMjQ1OTUgJCIubWF0Y2goL1xkKy8pOworCisv
Kj09PT09CisgICAgICAgIGRvam8udmVyc2lvbiA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAg
ICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVmVyc2lvbiBu
dW1iZXIgb2YgdGhlIERvam8gVG9vbGtpdAorICAgICAgICAgICAgICAgIC8vIG1ham9yOiBJbnRl
Z2VyCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIE1ham9yIHZlcnNpb24uIElmIHRv
dGFsIHZlcnNpb24gaXMgIjEuMi4wYmV0YTEiLCB3aWxsIGJlIDEKKyAgICAgICAgICAgICAgICAv
LyBtaW5vcjogSW50ZWdlcgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBNaW5vciB2
ZXJzaW9uLiBJZiB0b3RhbCB2ZXJzaW9uIGlzICIxLjIuMGJldGExIiwgd2lsbCBiZSAyCisgICAg
ICAgICAgICAgICAgLy8gcGF0Y2g6IEludGVnZXIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgUGF0Y2ggdmVyc2lvbi4gSWYgdG90YWwgdmVyc2lvbiBpcyAiMS4yLjBiZXRhMSIsIHdp
bGwgYmUgMAorICAgICAgICAgICAgICAgIC8vIGZsYWc6IFN0cmluZworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBEZXNjcmlwdG9yIGZsYWcuIElmIHRvdGFsIHZlcnNpb24gaXMgIjEu
Mi4wYmV0YTEiLCB3aWxsIGJlICJiZXRhMSIKKyAgICAgICAgICAgICAgICAvLyByZXZpc2lvbjog
TnVtYmVyCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSBTVk4gcmV2IGZyb20g
d2hpY2ggZG9qbyB3YXMgcHVsbGVkCisgICAgICAgICAgICAgICAgdGhpcy5tYWpvciA9IDA7Cisg
ICAgICAgICAgICAgICAgdGhpcy5taW5vciA9IDA7CisgICAgICAgICAgICAgICAgdGhpcy5wYXRj
aCA9IDA7CisgICAgICAgICAgICAgICAgdGhpcy5mbGFnID0gIiI7CisgICAgICAgICAgICAgICAg
dGhpcy5yZXZpc2lvbiA9IDA7CisgICAgICAgIH0KKz09PT09Ki8KKyAgICAgICAgZG9qby52ZXJz
aW9uID0geworICAgICAgICAgICAgICAgIG1ham9yOiAxLCBtaW5vcjogNiwgcGF0Y2g6IDEsIGZs
YWc6ICIiLAorICAgICAgICAgICAgICAgIHJldmlzaW9uOiByZXYgPyArcmV2WzBdIDogTmFOLAor
ICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAg
ICAgICAgd2l0aChkLnZlcnNpb24peworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFqb3IgKyAiLiIgKyBtaW5vciArICIuIiArIHBhdGNoICsgZmxhZyArICIgKCIgKyBy
ZXZpc2lvbiArICIpIjsgICAgICAgIC8vIFN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVn
aXN0ZXIgd2l0aCB0aGUgT3BlbkFqYXggaHViCisgICAgICAgIGlmKHR5cGVvZiBPcGVuQWpheCAh
PSAidW5kZWZpbmVkIil7CisgICAgICAgICAgICAgICAgT3BlbkFqYXguaHViLnJlZ2lzdGVyTGli
cmFyeShkb2pvLl9zY29wZU5hbWUsICJodHRwOi8vZG9qb3Rvb2xraXQub3JnIiwgZC52ZXJzaW9u
LnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2YXIgZXh0cmFOYW1l
cywgZXh0cmFMZW4sIGVtcHR5ID0ge307CisgICAgICAgIGZvcih2YXIgaSBpbiB7dG9TdHJpbmc6
IDF9KXsgZXh0cmFOYW1lcyA9IFtdOyBicmVhazsgfQorICAgICAgICBkb2pvLl9leHRyYU5hbWVz
ID0gZXh0cmFOYW1lcyA9IGV4dHJhTmFtZXMgfHwgWyJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZU9m
IiwgImlzUHJvdG90eXBlT2YiLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJs
ZSIsICJ0b0xvY2FsZVN0cmluZyIsICJ0b1N0cmluZyIsICJjb25zdHJ1Y3RvciJdOworICAgICAg
ICBleHRyYUxlbiA9IGV4dHJhTmFtZXMubGVuZ3RoOworCisgICAgICAgIGRvam8uX21peGluID0g
ZnVuY3Rpb24oLypPYmplY3QqLyB0YXJnZXQsIC8qT2JqZWN0Ki8gc291cmNlKXsKKyAgICAgICAg
ICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBZGRz
IGFsbCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIHNvdXJjZSB0byB0YXJnZXQuIFRoaXMgYWRk
aXRpb24KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaXMgInByb3RvdHlwZSBleHRl
bnNpb24gc2FmZSIsIHNvIHRoYXQgaW5zdGFuY2VzIG9mIG9iamVjdHMKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgd2lsbCBub3QgcGFzcyBhbG9uZyBwcm90b3R5cGUgZGVmYXVsdHMu
CisgICAgICAgICAgICAgICAgdmFyIG5hbWUsIHMsIGk7CisgICAgICAgICAgICAgICAgZm9yKG5h
bWUgaW4gc291cmNlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAidG9iaiIgY29u
ZGl0aW9uIGF2b2lkIGNvcHlpbmcgcHJvcGVydGllcyBpbiAic291cmNlIgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaW5oZXJpdGVkIGZyb20gT2JqZWN0LnByb3RvdHlwZS4gIEZvciBleGFt
cGxlLCBpZiB0YXJnZXQgaGFzIGEgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
b1N0cmluZygpIG1ldGhvZCwgZG9uJ3Qgb3ZlcndyaXRlIGl0IHdpdGggdGhlIHRvU3RyaW5nKCkg
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHNvdXJjZSBpbmhlcml0ZWQg
ZnJvbSBPYmplY3QucHJvdG90eXBlCisgICAgICAgICAgICAgICAgICAgICAgICBzID0gc291cmNl
W25hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShuYW1lIGluIHRhcmdldCkgfHwg
KHRhcmdldFtuYW1lXSAhPT0gcyAmJiAoIShuYW1lIGluIGVtcHR5KSB8fCBlbXB0eVtuYW1lXSAh
PT0gcykpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0g
czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGRvZXNuJ3QgcmVjb2duaXplIHNvbWUgY3Vz
dG9tIGZ1bmN0aW9ucyBpbiBmb3IuLmluCisgICAgICAgICAgICAgICAgaWYoZXh0cmFMZW4gJiYg
c291cmNlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGV4dHJhTGVu
OyArK2kpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZXh0cmFOYW1l
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHNvdXJjZVtuYW1lXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShuYW1lIGluIHRhcmdldCkgfHwg
KHRhcmdldFtuYW1lXSAhPT0gcyAmJiAoIShuYW1lIGluIGVtcHR5KSB8fCBlbXB0eVtuYW1lXSAh
PT0gcykpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRb
bmFtZV0gPSBzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGFyZ2V0OyAvLyBPYmplY3QKKyAgICAgICAgfQorCisgICAgICAg
IGRvam8ubWl4aW4gPSBmdW5jdGlvbigvKk9iamVjdCovb2JqLCAvKk9iamVjdC4uLiovcHJvcHMp
eworICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIEFkZHMgYWxsIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgcHJvcHMgdG8gb2JqIGFu
ZCByZXR1cm5zIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAobm93IG1vZGlm
aWVkKSBvYmouCisgICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgYGRvam8ubWl4aW5gIGNhbiBtaXggbXVsdGlwbGUgc291
cmNlIG9iamVjdHMgaW50byBhCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uIG9iamVjdCB3aGljaCBpcyB0aGVuIHJldHVybmVkLiBVbmxpa2UgcmVndWxhcgorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBgZm9yLi4uaW5gIGl0ZXJhdGlvbiwgYGRvam8u
bWl4aW5gIGlzIGFsc28gc21hcnQgYWJvdXQgYXZvaWRpbmcKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgZXh0ZW5zaW9ucyB3aGljaCBvdGhlciB0b29sa2l0cyBtYXkgdW53aXNlbHkg
YWRkIHRvIHRoZSByb290CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG9iamVjdCBw
cm90b3R5cGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIG9iajoKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgVGhlIG9iamVjdCB0byBtaXggcHJvcGVydGllcyBpbnRvLiBBbHNvIHRo
ZSByZXR1cm4gdmFsdWUuCisgICAgICAgICAgICAgICAgLy8gICAgICBwcm9wczoKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgT25lIG9yIG1vcmUgb2JqZWN0cyB3aG9zZSB2YWx1ZXMg
YXJlIHN1Y2Nlc3NpdmVseSBjb3BpZWQgaW50bworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBvYmouIElmIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2Ugb2JqZWN0cyBjb250YWluIHRoZSBz
YW1lIHZhbHVlLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgb25lIHNwZWNp
ZmllZCBsYXN0IGluIHRoZSBmdW5jdGlvbiBjYWxsIHdpbGwgIndpbiIuCisgICAgICAgICAgICAg
ICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBtYWtl
IGEgc2hhbGxvdyBjb3B5IG9mIGFuIG9iamVjdAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICB2YXIgY29weSA9IGRvam8ubWl4aW4oe30sIHNvdXJjZSk7CisgICAgICAgICAgICAgICAg
Ly8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBtYW55IGNs
YXNzIGNvbnN0cnVjdG9ycyBvZnRlbiB0YWtlIGFuIG9iamVjdCB3aGljaCBzcGVjaWZpZXMKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdmFsdWVzIHRvIGJlIGNvbmZpZ3VyZWQgb24g
dGhlIG9iamVjdC4gSW4gdGhpcyBjYXNlLCBpdCBpcworICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBvZnRlbiBzaW1wbGVzdCB0byBjYWxsIGBkb2pvLm1peGluYCBvbiB0aGUgYHRoaXNg
IG9iamVjdDoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5kZWNsYXJlKCJh
Y21lLkJhc2UiLCBudWxsLCB7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAg
ICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uKHByb3BlcnRpZXMpeworICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkgY29uZmlndXJhdGlvbjoK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIGRvam8ubWl4
aW4odGhpcywgcHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8CisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlz
LnF1aXApOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
Ly8gIC4uLgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgcXVpcDogIkkgd2Fzbid0IGJvcm4g
eWVzdGVyZGF5LCB5b3Uga25vdyAtIEkndmUgc2VlbiBtb3ZpZXMuIiwKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgICAgICAgICAvLyAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgfSk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8CisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIC8vIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYW5kIGNv
bmZpZ3VyZSBpdAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgYiA9IG5ldyBh
Y21lLkJhc2Uoe3F1aXA6ICJUaGF0J3Mgd2hhdCBpdCBkb2VzISIgfSk7CisgICAgICAgICAgICAg
ICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjb3B5
IGluIHByb3BlcnRpZXMgZnJvbSBtdWx0aXBsZSBvYmplY3RzCisgICAgICAgICAgICAgICAgLy8g
ICAgICB8ICAgICAgIHZhciBmbGF0dGVuZWQgPSBkb2pvLm1peGluKAorICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6ICJGcnlsb2NrIiwKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlczogdHJ1ZQorICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZTogIkNhcmwgQnJ1dGFuYW5hbmFkaWxld3NraSIKKyAgICAgICAgICAgICAgICAv
LyAgICAgIHwgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAg
ICk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgIC8vIHdpbGwgcHJpbnQgIkNhcmwgQnJ1dGFuYW5hbmFkaWxld3NraSIKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgY29uc29sZS5sb2coZmxhdHRlbmVkLm5hbWUpOworICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyB3aWxsIHByaW50ICJ0cnVlIgorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICBjb25zb2xlLmxvZyhmbGF0dGVuZWQuYnJhY2VzKTsK
KyAgICAgICAgICAgICAgICBpZighb2JqKXsgb2JqID0ge307IH0KKyAgICAgICAgICAgICAgICBm
b3IodmFyIGk9MSwgbD1hcmd1bWVudHMubGVuZ3RoOyBpPGw7IGkrKyl7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkLl9taXhpbihvYmosIGFyZ3VtZW50c1tpXSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBvYmo7IC8vIE9iamVjdAorICAgICAgICB9CisKKyAg
ICAgICAgZG9qby5fZ2V0UHJvcCA9IGZ1bmN0aW9uKC8qQXJyYXkqL3BhcnRzLCAvKkJvb2xlYW4q
L2NyZWF0ZSwgLypPYmplY3QqL2NvbnRleHQpeworICAgICAgICAgICAgICAgIHZhciBvYmo9Y29u
dGV4dCB8fCBkLmdsb2JhbDsKKyAgICAgICAgICAgICAgICBmb3IodmFyIGk9MCwgcDsgb2JqICYm
IChwPXBhcnRzW2ldKTsgaSsrKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gMCAm
JiBkLl9zY29wZU1hcFtwXSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBk
Ll9zY29wZU1hcFtwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9iaiA9IChwIGluIG9iaiA/IG9ialtwXSA6IChjcmVhdGUgPyBvYmpbcF09e30g
OiB1bmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IG9iajsgLy8gbWl4ZWQKKyAgICAgICAgfQorCisgICAgICAgIGRvam8uc2V0T2JqZWN0ID0gZnVu
Y3Rpb24oLypTdHJpbmcqL25hbWUsIC8qT2JqZWN0Ki92YWx1ZSwgLypPYmplY3Q/Ki9jb250ZXh0
KXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBTZXQgYSBwcm9wZXJ0eSBmcm9tIGEgZG90LXNlcGFyYXRlZCBzdHJpbmcsIHN1Y2gg
YXMgIkEuQi5DIgorICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIFVzZWZ1bCBmb3IgbG9uZ2VyIGFwaSBjaGFpbnMgd2hl
cmUgeW91IGhhdmUgdG8gdGVzdCBlYWNoIG9iamVjdCBpbgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICB0aGUgY2hhaW4sIG9yIHdoZW4geW91IGhhdmUgYW4gb2JqZWN0IHJlZmVyZW5j
ZSBpbiBzdHJpbmcgZm9ybWF0LgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBPYmpl
Y3RzIGFyZSBjcmVhdGVkIGFzIG5lZWRlZCBhbG9uZyBgcGF0aGAuIFJldHVybnMgdGhlIHBhc3Nl
ZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB2YWx1ZSBpZiBzZXR0aW5nIGlzIHN1
Y2Nlc3NmdWwgb3IgYHVuZGVmaW5lZGAgaWYgbm90LgorICAgICAgICAgICAgICAgIC8vICAgICAg
bmFtZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUGF0aCB0byBhIHByb3BlcnR5
LCBpbiB0aGUgZm9ybSAiQS5CLkMiLgorICAgICAgICAgICAgICAgIC8vICAgICAgY29udGV4dDoK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgT3B0aW9uYWwuIE9iamVjdCB0byB1c2Ug
YXMgcm9vdCBvZiBwYXRoLiBEZWZhdWx0cyB0bworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBgZG9qby5nbG9iYWxgLgorICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgc2V0IHRoZSB2YWx1ZSBvZiBgZm9vLmJhci5i
YXpgLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgaW50ZXJtZWRpYXRlIG9iamVjdHMgYWxyZWFkeSBleGlzdDoKKyAgICAgICAgICAgICAgICAv
LyAgICAgIHwgICAgICAgZG9qby5zZXRPYmplY3QoImZvby5iYXIuYmF6IiwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgd2l0aG91dCBgZG9qby5zZXRPYmplY3RgLCB3ZSBvZnRlbiBzZWUgY29kZSBsaWtlIHRo
aXM6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIC8vIGVuc3VyZSB0aGF0IGludGVy
bWVkaWF0ZSBvYmplY3RzIGFyZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgaWYoIW9ialsicGFyZW50Il0peyBvYmoucGFyZW50ID0ge307IH0KKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgaWYoIW9iai5wYXJlbnRbImNoaWxkIl0peyBvYmoucGFyZW50
LmNoaWxkPSB7fTsgfQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyBub3cgd2Ug
Y2FuIHNhZmVseSBzZXQgdGhlIHByb3BlcnR5CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAg
ICAgIG9iai5wYXJlbnQuY2hpbGQucHJvcCA9ICJzb21lIHZhbHVlIjsKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgd2hlcmFzIHdpdGggYGRvam8uc2V0T2JqZWN0YCwgd2UgY2FuIHNo
b3J0ZW4gdGhhdCB0bzoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5zZXRP
YmplY3QoInBhcmVudC5jaGlsZC5wcm9wIiwgInNvbWUgdmFsdWUiLCBvYmopOworICAgICAgICAg
ICAgICAgIHZhciBwYXJ0cz1uYW1lLnNwbGl0KCIuIiksIHA9cGFydHMucG9wKCksIG9iaj1kLl9n
ZXRQcm9wKHBhcnRzLCB0cnVlLCBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2Jq
ICYmIHAgPyAob2JqW3BdPXZhbHVlKSA6IHVuZGVmaW5lZDsgLy8gT2JqZWN0CisgICAgICAgIH0K
KworICAgICAgICBkb2pvLmdldE9iamVjdCA9IGZ1bmN0aW9uKC8qU3RyaW5nKi9uYW1lLCAvKkJv
b2xlYW4/Ki9jcmVhdGUsIC8qT2JqZWN0PyovY29udGV4dCl7CisgICAgICAgICAgICAgICAgLy8g
c3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgR2V0IGEgcHJvcGVydHkg
ZnJvbSBhIGRvdC1zZXBhcmF0ZWQgc3RyaW5nLCBzdWNoIGFzICJBLkIuQyIKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBVc2VmdWwgZm9yIGxvbmdlciBhcGkgY2hhaW5zIHdoZXJlIHlvdSBoYXZlIHRvIHRlc3QgZWFj
aCBvYmplY3QgaW4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIGNoYWluLCBv
ciB3aGVuIHlvdSBoYXZlIGFuIG9iamVjdCByZWZlcmVuY2UgaW4gc3RyaW5nIGZvcm1hdC4KKyAg
ICAgICAgICAgICAgICAvLyAgICAgIG5hbWU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIFBhdGggdG8gYW4gcHJvcGVydHksIGluIHRoZSBmb3JtICJBLkIuQyIuCisgICAgICAgICAg
ICAgICAgLy8gICAgICBjcmVhdGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIE9w
dGlvbmFsLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBJZiBgdHJ1ZWAsIE9iamVjdHMgd2lsbCBiZQor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjcmVhdGVkIGF0IGFueSBwb2ludCBhbG9u
ZyB0aGUgJ3BhdGgnIHRoYXQgaXMgdW5kZWZpbmVkLgorICAgICAgICAgICAgICAgIC8vICAgICAg
Y29udGV4dDoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgT3B0aW9uYWwuIE9iamVj
dCB0byB1c2UgYXMgcm9vdCBvZiBwYXRoLiBEZWZhdWx0cyB0bworICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICAnZG9qby5nbG9iYWwnLiBOdWxsIG1heSBiZSBwYXNzZWQuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGQuX2dldFByb3AobmFtZS5zcGxpdCgiLiIpLCBjcmVhdGUsIGNvbnRl
eHQpOyAvLyBPYmplY3QKKyAgICAgICAgfQorCisgICAgICAgIGRvam8uZXhpc3RzID0gZnVuY3Rp
b24oLypTdHJpbmcqL25hbWUsIC8qT2JqZWN0Pyovb2JqKXsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRldGVybWluZSBp
ZiBhbiBvYmplY3Qgc3VwcG9ydHMgYSBnaXZlbiBtZXRob2QKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB1c2VmdWwg
Zm9yIGxvbmdlciBhcGkgY2hhaW5zIHdoZXJlIHlvdSBoYXZlIHRvIHRlc3QgZWFjaCBvYmplY3Qg
aW4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIGNoYWluLiBVc2VmdWwgZm9y
IG9iamVjdCBhbmQgbWV0aG9kIGRldGVjdGlvbi4KKyAgICAgICAgICAgICAgICAvLyAgICAgIG5h
bWU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFBhdGggdG8gYW4gb2JqZWN0LCBp
biB0aGUgZm9ybSAiQS5CLkMiLgorICAgICAgICAgICAgICAgIC8vICAgICAgb2JqOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBPYmplY3QgdG8gdXNlIGFzIHJvb3Qgb2YgcGF0aC4g
RGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgJ2Rvam8uZ2xvYmFs
Jy4gTnVsbCBtYXkgYmUgcGFzc2VkLgorICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gZGVmaW5lIGFuIG9iamVjdAorICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgZm9vID0geworICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICAgICAgICAgIGJhcjogeyB9CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIH07CisgICAgICAgICAgICAgICAgLy8gICAgICB8CisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIC8vIHNlYXJjaCB0aGUgZ2xvYmFsIHNjb3BlCisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIGRvam8uZXhpc3RzKCJmb28uYmFyIik7IC8vIHRydWUKKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5leGlzdHMoImZvby5iYXIuYmF6Iik7IC8v
IGZhbHNlCisgICAgICAgICAgICAgICAgLy8gICAgICB8CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIC8vIHNlYXJjaCBmcm9tIGEgcGFydGljdWxhciBzY29wZQorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICBkb2pvLmV4aXN0cygiYmFyIiwgZm9vKTsgLy8gdHJ1ZQorICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmV4aXN0cygiYmFyLmJheiIsIGZvbyk7
IC8vIGZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGQuZ2V0T2JqZWN0KG5hbWUsIGZhbHNl
LCBvYmopICE9PSB1bmRlZmluZWQ7IC8vIEJvb2xlYW4KKyAgICAgICAgfQorCisgICAgICAgIGRv
am9bImV2YWwiXSA9IGZ1bmN0aW9uKC8qU3RyaW5nKi8gc2NyaXB0RnJhZ21lbnQpeworICAgICAg
ICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgQSBsZWdhY3kgbWV0aG9kIGNyZWF0ZWQgZm9yIHVzZSBleGNsdXNpdmVseSBieSBpbnRlcm5h
bCBEb2pvIG1ldGhvZHMuIERvIG5vdCB1c2UKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgdGhpcyBtZXRob2QgZGlyZWN0bHksIHRoZSBiZWhhdmlvciBvZiB0aGlzIGV2YWwgd2lsbCBk
aWZmZXIgZnJvbSB0aGUgbm9ybWFsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGJy
b3dzZXIgZXZhbC4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBQbGFjZWQgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0
byBtaW5pbWl6ZSBzaXplIG9mIHRyYXBwZWQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgZXhjZXB0aW9ucy4gQ2FsbGluZyBldmFsKCkgZGlyZWN0bHkgZnJvbSBzb21lIG90aGVyIHNj
b3BlIG1heQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjb21wbGljYXRlIHRyYWNl
YmFja3Mgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgICAgICAgICAgICAgLy8gICAgICByZXR1cm5z
OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBldmFs
dWF0aW9uLiBPZnRlbiBgdW5kZWZpbmVkYAorICAgICAgICAgICAgICAgIHJldHVybiBkLmdsb2Jh
bC5ldmFsID8gZC5nbG9iYWwuZXZhbChzY3JpcHRGcmFnbWVudCkgOiBldmFsKHNjcmlwdEZyYWdt
ZW50KTsgICAgLy8gT2JqZWN0CisgICAgICAgIH0KKworICAgICAgICAvKj09PT09CisgICAgICAg
ICAgICAgICAgZG9qby5kZXByZWNhdGVkID0gZnVuY3Rpb24oYmVoYXZpb3VyLCBleHRyYSwgcmVt
b3ZhbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTG9nIGEgZGVidWcgbWVzc2FnZSB0byBp
bmRpY2F0ZSB0aGF0IGEgYmVoYXZpb3IgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBkZXByZWNhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICBiZWhhdmlvdXI6IFN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIFRoZSBBUEkgb3IgYmVoYXZpb3IgYmVpbmcgZGVwcmVjYXRlZC4gVXN1YWxseSBpbiB0
aGUgZm9ybQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG9mICJteUFw
cC5zb21lRnVuY3Rpb24oKSIuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGV4dHJh
OiBTdHJpbmc/CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGV4dCB0
byBhcHBlbmQgdG8gdGhlIG1lc3NhZ2UuIE9mdGVuIHByb3ZpZGVzIGFkdmljZSBvbiBhCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbmV3IGZ1bmN0aW9uIG9yIGZhY2ls
aXR5IHRvIGFjaGlldmUgdGhlIHNhbWUgZ29hbCBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICB0aGUgZGVwcmVjYXRpb24gcGVyaW9kLgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICByZW1vdmFsOiBTdHJpbmc/CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgVGV4dCB0byBpbmRpY2F0ZSB3aGVuIGluIHRoZSBmdXR1cmUg
dGhlIGJlaGF2aW9yIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICByZW1vdmVkLiBVc3VhbGx5IGEgdmVyc2lvbiBudW1iZXIuCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgZG9qby5kZXByZWNhdGVkKCJteUFwcC5nZXRUZW1wKCkiLCAidXNlIG15QXBwLmdl
dExvY2FsZVRlbXAoKSBpbnN0ZWFkIiwgIjEuMCIpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGRvam8uZXhwZXJpbWVudGFsID0gZnVuY3Rpb24obW9kdWxlTmFtZSwgZXh0
cmEpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OiBNYXJrcyBjb2Rl
IGFzIGV4cGVyaW1lbnRhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3Jp
cHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhpcyBjYW4g
YmUgdXNlZCB0byBtYXJrIGEgZnVuY3Rpb24sIGZpbGUsIG9yIG1vZHVsZSBhcworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGV4cGVyaW1lbnRhbC4gIEV4cGVyaW1lbnRh
bCBjb2RlIGlzIG5vdCByZWFkeSB0byBiZSB1c2VkLCBhbmQgdGhlCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgQVBJcyBhcmUgc3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91
dCBub3RpY2UuICBFeHBlcmltZW50YWwgY29kZSBtYXkgYmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBjb21wbGV0ZWQgZGVsZXRlZCB3aXRob3V0IGdvaW5nIHRocm91
Z2ggdGhlIG5vcm1hbCBkZXByZWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIG1vZHVs
ZU5hbWU6IFN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRo
ZSBuYW1lIG9mIGEgbW9kdWxlLCBvciB0aGUgbmFtZSBvZiBhIG1vZHVsZSBmaWxlIG9yIGEgc3Bl
Y2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBmdW5jdGlvbgor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBleHRyYTogU3RyaW5nPworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNvbWUgYWRkaXRpb25hbCBtZXNzYWdlIGZv
ciB0aGUgdXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uZXhwZXJpbWVudGFsKCJk
b2pvLmRhdGEuUmVzdWx0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1w
bGU6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5leHBlcmlt
ZW50YWwoImRvam8ud2VhdGhlci50b0tlbHZpbigpIiwgIlBFTkRJTkcgYXBwcm92YWwgZnJvbSBO
T0FBIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICA9PT09PSovCisKKyAgICAgICAgLy9S
ZWFsIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiBkb2pvLl9maXJlYnVnLmZpcmVidWcuCisgICAgICAg
IGQuZGVwcmVjYXRlZCA9IGQuZXhwZXJpbWVudGFsID0gZnVuY3Rpb24oKXt9OworCit9KSgpOwor
Ly8gdmltOmFpOnRzPTQ6bm9ldAorCisvKgorICogbG9hZGVyLmpzIC0gQSBib290c3RyYXAgbW9k
dWxlLiAgUnVucyBiZWZvcmUgdGhlIGhvc3RlbnZfKi5qcyBmaWxlLiBDb250YWlucworICogYWxs
IG9mIHRoZSBwYWNrYWdlIGxvYWRpbmcgbWV0aG9kcy4KKyAqLworKGZ1bmN0aW9uKCl7CisgICAg
ICAgIHZhciBkID0gZG9qbywgY3VycmVudE1vZHVsZTsKKworICAgICAgICBkLm1peGluKGQsIHsK
KyAgICAgICAgICAgICAgICBfbG9hZGVkTW9kdWxlczoge30sCisgICAgICAgICAgICAgICAgX2lu
RmxpZ2h0Q291bnQ6IDAsCisgICAgICAgICAgICAgICAgX2hhc1Jlc291cmNlOiB7fSwKKworICAg
ICAgICAgICAgICAgIF9tb2R1bGVQcmVmaXhlczogeworICAgICAgICAgICAgICAgICAgICAgICAg
ZG9qbzogICB7ICAgICAgIG5hbWU6ICJkb2pvIiwgdmFsdWU6ICIuIiB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZG9qb3g6ICAgICAgIHsgICAgICAgbmFtZTogImRvam94IiwgdmFsdWU6
ICIuLi9kb2pveCIgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpaml0OiAgICAgICB7
ICAgICAgIG5hbWU6ICJkaWppdCIsIHZhbHVlOiAiLi4vZGlqaXQiIH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICBkb2g6ICAgIHsgICAgICAgbmFtZTogImRvaCIsIHZhbHVlOiAiLi4vdXRpbC9k
b2giIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0czogIHsgICAgICAgbmFtZTogInRl
c3RzIiwgdmFsdWU6ICJ0ZXN0cyIgfQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
ICAgICBfbW9kdWxlSGFzUHJlZml4OiBmdW5jdGlvbigvKlN0cmluZyovbW9kdWxlKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6IGNoZWNrcyB0byBzZWUgaWYgbW9kdWxlIGhh
cyBiZWVuIGVzdGFibGlzaGVkCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXAgPSBkLl9t
b2R1bGVQcmVmaXhlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIShtcFttb2R1
bGVdICYmIG1wW21vZHVsZV0udmFsdWUpOyAvLyBCb29sZWFuCisgICAgICAgICAgICAgICAgfSwK
KworICAgICAgICAgICAgICAgIF9nZXRNb2R1bGVQcmVmaXg6IGZ1bmN0aW9uKC8qU3RyaW5nKi9t
b2R1bGUpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeTogZ2V0cyB0aGUgcHJl
Zml4IGFzc29jaWF0ZWQgd2l0aCBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBt
cCA9IGQuX21vZHVsZVByZWZpeGVzOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZC5fbW9k
dWxlSGFzUHJlZml4KG1vZHVsZSkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbXBbbW9kdWxlXS52YWx1ZTsgLy8gU3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlOyAvLyBTdHJpbmcKKyAg
ICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgX2xvYWRlZFVybHM6IFtdLAorCisg
ICAgICAgICAgICAgICAgLy9XQVJOSU5HOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBUaGlzIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgYnkgcGFja2FnZXMgb3V0c2lkZSBvZiBib290
c3RyYXA6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEZsb2F0aW5nUGFuZS5qcyBh
bmQgdW5kby9icm93c2VyLmpzCisgICAgICAgICAgICAgICAgX3Bvc3RMb2FkOiBmYWxzZSwKKwor
ICAgICAgICAgICAgICAgIC8vRWdhZCEgTG90cyBvZiB0ZXN0IGZpbGVzIHB1c2ggb24gdGhpcyBk
aXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nIGRvam8uYWRkT25Mb2FkLgorICAgICAgICAgICAgICAg
IF9sb2FkZXJzOiBbXSwKKyAgICAgICAgICAgICAgICBfdW5sb2FkZXJzOiBbXSwKKyAgICAgICAg
ICAgICAgICBfbG9hZE5vdGlmeWluZzogZmFsc2UKKyAgICAgICAgfSk7CisKKworICAgICAgICAg
ICAgICAgIGRvam8uX2xvYWRQYXRoID0gZnVuY3Rpb24oLypTdHJpbmcqL3JlbHBhdGgsIC8qU3Ry
aW5nPyovbW9kdWxlLCAvKkZ1bmN0aW9uPyovY2IpeworICAgICAgICAgICAgICAgIC8vICAgICAg
c3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTG9hZCBhIEphdmFzY3Jp
cHQgbW9kdWxlIGdpdmVuIGEgcmVsYXRpdmUgcGF0aAorICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgTG9hZHMgYW5kIGludGVycHJldHMgdGhlIHNjcmlwdCBsb2NhdGVkIGF0IHJlbHBh
dGgsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHJlbGF0aXZlIHRv
IHRoZSBzY3JpcHQgcm9vdCBkaXJlY3RvcnkuICBJZiB0aGUgc2NyaXB0IGlzIGZvdW5kIGJ1dAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpdHMgaW50ZXJwcmV0YXRpb24gY2F1c2Vz
IGEgcnVudGltZSBleGNlcHRpb24sIHRoYXQgZXhjZXB0aW9uIGlzCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIG5vdCBjYXVnaHQgYnkgdXMsIHNvIHRoZSBjYWxsZXIgd2lsbCBzZWUg
aXQuICBXZSByZXR1cm4gYSB0cnVlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHZh
bHVlIGlmIGFuZCBvbmx5IGlmIHRoZSBzY3JpcHQgaXMgZm91bmQuCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyByZWxwYXRoOgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBBIHJlbGF0aXZlIHBhdGggdG8gYSBzY3JpcHQgKG5vIGxlYWRpbmcgJy8nLCBhbmQg
dHlwaWNhbGx5IGVuZGluZworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpbiAnLmpz
JykuCisgICAgICAgICAgICAgICAgLy8gbW9kdWxlOgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBBIG1vZHVsZSB3aG9zZSBleGlzdGFuY2UgdG8gY2hlY2sgZm9yIGFmdGVyIGxvYWRp
bmcgYSBwYXRoLiAgQ2FuIGJlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHVzZWQg
dG8gZGV0ZXJtaW5lIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgbG9hZC4KKyAgICAgICAgICAg
ICAgICAvLyBjYjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBjYWxsYmFjayBm
dW5jdGlvbiB0byBwYXNzIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgc2NyaXB0CisKKyAg
ICAgICAgICAgICAgICB2YXIgdXJpID0gKChyZWxwYXRoLmNoYXJBdCgwKSA9PSAnLycgfHwgcmVs
cGF0aC5tYXRjaCgvXlx3KzovKSkgPyAiIiA6IGQuYmFzZVVybCkgKyByZWxwYXRoOworICAgICAg
ICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUgPSBt
b2R1bGU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1vZHVsZSA/IGQuX2xvYWRV
cmkodXJpLCBjYikgOiBkLl9sb2FkVXJpQW5kQ2hlY2sodXJpLCBtb2R1bGUsIGNiKTsgLy8gQm9v
bGVhbgorICAgICAgICAgICAgICAgIH1jYXRjaChlKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnNvbGUuZXJyb3IoZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIEJvb2xlYW4KKyAgICAgICAgICAgICAgICB9ZmluYWxseXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRNb2R1bGUgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGRvam8uX2xvYWRVcmkgPSBmdW5jdGlvbigvKlN0cmluZyovdXJpLCAvKkZ1
bmN0aW9uPyovY2IpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgTG9hZHMgSmF2YVNjcmlwdCBmcm9tIGEgVVJJCisgICAg
ICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgUmVhZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBVUkksIGFuZCBldmFsdWF0ZXMgdGhl
IGNvbnRlbnRzLiAgVGhpcyBpcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB1c2Vk
IHRvIGxvYWQgbW9kdWxlcyBhcyB3ZWxsIGFzIHJlc291cmNlIGJ1bmRsZXMuIFJldHVybnMgdHJ1
ZSBpZgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpdCBzdWNjZWVkZWQuIFJldHVy
bnMgZmFsc2UgaWYgdGhlIFVSSSByZWFkaW5nIGZhaWxlZC4gIFRocm93cyBpZgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICB0aGUgZXZhbHVhdGlvbiB0aHJvd3MuCisgICAgICAgICAg
ICAgICAgLy8gICAgICB1cmk6IGEgdXJpIHdoaWNoIHBvaW50cyBhdCB0aGUgc2NyaXB0IHRvIGJl
IGxvYWRlZAorICAgICAgICAgICAgICAgIC8vICAgICAgY2I6CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcmVzdWx0IG9m
IGV2YWx1YXRpbmcgdGhlIHNjcmlwdAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBh
cyBhbiBleHByZXNzaW9uLCB0eXBpY2FsbHkgdXNlZCBieSB0aGUgcmVzb3VyY2UgYnVuZGxlIGxv
YWRlciB0bworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBsb2FkIEpTT04tc3R5bGUg
cmVzb3VyY2VzCisKKyAgICAgICAgICAgICAgICBpZihkLl9sb2FkZWRVcmxzW3VyaV0peworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEJvb2xlYW4KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZC5faW5GbGlnaHRDb3VudCsrOyAvLyBibG9jayBhZGRP
bkxvYWQgY2FsbHMgdGhhdCBhcnJpdmUgd2hpbGUgd2UncmUgYnVzeSBkb3dubG9hZGluZworICAg
ICAgICAgICAgICAgIHZhciBjb250ZW50cyA9IGQuX2dldFRleHQodXJpLCB0cnVlKTsKKyAgICAg
ICAgICAgICAgICBpZihjb250ZW50cyl7IC8vIG5vdCA0MDQsIGV0IGFsCisgICAgICAgICAgICAg
ICAgICAgICAgICBkLl9sb2FkZWRVcmxzW3VyaV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgZC5fbG9hZGVkVXJscy5wdXNoKHVyaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZihjYil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uZGl0aW9uYWwgdG8g
c3VwcG9ydCBzY3JpcHQtaW5qZWN0IGkxOG4gYnVuZGxlIGZvcm1hdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZW50cyA9IC9eZGVmaW5lXCgvLnRlc3QoY29udGVudHMpID8g
Y29udGVudHMgOiAnKCcrY29udGVudHMrJyknOworICAgICAgICAgICAgICAgICAgICAgICAgfWVs
c2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT25seSBkbyB0aGUgc2NvcGlu
ZyBpZiBubyBjYWxsYmFjay4gSWYgYSBjYWxsYmFjayBpcyBzcGVjaWZpZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vaXQgaXMgbW9zdCBsaWtlbHkgdGhlIGkxOG4gYnVuZGxl
IHN0dWZmLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IGQuX3Nj
b3BlUHJlZml4ICsgY29udGVudHMgKyBkLl9zY29wZVN1ZmZpeDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkLmlzSUUpeyBjb250ZW50cyAr
PSAiXHJcbi8vQCBzb3VyY2VVUkw9IiArIHVyaTsgfSAvLyBkZWJ1Z2dpbmcgYXNzaXN0IGZvciBG
aXJlYnVnCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBkWyJldmFsIl0oY29u
dGVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2IpeyBjYih2YWx1ZSk7IH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5l
ZWQgdG8gY2FsbCBfY2FsbExvYWRlZCgpIGR1ZSB0byBhbiBhZGRPbkxvYWQoKSB0aGF0IGFycml2
ZWQgd2hpbGUgd2Ugd2VyZSBidXN5IGRvd25sb2FkaW5nCisgICAgICAgICAgICAgICAgaWYoLS1k
Ll9pbkZsaWdodENvdW50ID09IDAgJiYgZC5fcG9zdExvYWQgJiYgZC5fbG9hZGVycy5sZW5ndGgp
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGJlIGFsbG93ZWQgdG8g
Z2V0IGhlcmUgYnV0IEZpcmVmb3ggYWxsb3dzIGFuIGV2ZW50CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAobW91c2UsIGtleWJkLCBhc3luYyB4aHJHZXQpIHRvIGludGVycnVwdCBhIHN5bmNo
cm9ub3VzIHhockdldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50
IHNjcmlwdCBibG9jayBjb250YWlucyBtdWx0aXBsZSByZXF1aXJlKCkgc3RhdGVtZW50cywgdGhl
biBhZnRlciBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlKCkgcmV0dXJu
cywgaW5GbGlnaHRDb3VudCA9PSAwLCBidXQgd2Ugd2FudCB0byBob2xkIHRoZSBfY2FsbExvYWRl
ZCgpIHVudGlsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGwgcmVxdWlyZSgpcyBhcmUg
ZG9uZSBzaW5jZSB0aGUgb3V0LW9mLXNlcXVlbmNlIGFkZE9uTG9hZCgpIHByZXN1bWFibHkgbmVl
ZHMgdGhlbSBhbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGFsbG93
cyB0aGUgbmV4dCByZXF1aXJlKCkgdG8gc3RhcnQgKGlmIG5lZWRlZCksIGFuZCB0aGVuIHdlIGNo
ZWNrIHRoaXMgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGluRmxpZ2h0Q291
bnQgPiAwLCB0aGVuIG11bHRpcGxlIHJlcXVpcmUoKXMgYXJlIHJ1bm5pbmcgc2VxdWVudGlhbGx5
IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXF1aXJl
KCkgc3RhcnRlZCBhZnRlciBzZXRUaW1lb3V0KCkgd2FzIGV4ZWN1dGVkIGJ1dCBiZWZvcmUgd2Ug
Z290IGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGQuX2luRmxpZ2h0
Q291bnQgPT0gMCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5f
Y2FsbExvYWRlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuICEhY29udGVudHM7IC8vIEJvb2xlYW46IGNvbnRlbnRzPyB0cnVlIDogZmFsc2UK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IHByb2JhYmx5IG5lZWQgdG8g
YWRkIGxvZ2dpbmcgdG8gdGhpcyBtZXRob2QKKyAgICAgICAgZG9qby5fbG9hZFVyaUFuZENoZWNr
ID0gZnVuY3Rpb24oLypTdHJpbmcqL3VyaSwgLypTdHJpbmcqL21vZHVsZU5hbWUsIC8qRnVuY3Rp
b24/Ki9jYil7CisgICAgICAgICAgICAgICAgLy8gc3VtbWFyeTogY2FsbHMgbG9hZFVyaSB0aGVu
IGZpbmRNb2R1bGUgYW5kIHJldHVybnMgdHJ1ZSBpZiBib3RoIHN1Y2NlZWQKKyAgICAgICAgICAg
ICAgICB2YXIgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAg
ICAgICAgICAgICBvayA9IGQuX2xvYWRVcmkodXJpLCBjYik7CisgICAgICAgICAgICAgICAgfWNh
dGNoKGUpeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiZmFpbGVkIGxv
YWRpbmcgIiArIHVyaSArICIgd2l0aCBlcnJvcjogIiArIGUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gISEob2sgJiYgZC5fbG9hZGVkTW9kdWxlc1ttb2R1bGVO
YW1lXSk7IC8vIEJvb2xlYW4KKyAgICAgICAgfQorCisgICAgICAgIGRvam8ubG9hZGVkID0gZnVu
Y3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBzaWduYWwgZmlyZWQgd2hlbiBpbml0aWFsIGVudmlyb25tZW50IGFuZCBw
YWNrYWdlIGxvYWRpbmcgaXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY29tcGxl
dGUuIFlvdSBzaG91bGQgdXNlIGRvam8uYWRkT25Mb2FkKCkgaW5zdGVhZCBvZiBkb2luZyBhCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRpcmVjdCBkb2pvLmNvbm5lY3QoKSB0byB0
aGlzIG1ldGhvZCBpbiBvcmRlciB0byBoYW5kbGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgaW5pdGlhbGl6YXRpb24gdGFza3MgdGhhdCByZXF1aXJlIHRoZSBlbnZpcm9ubWVudCB0
byBiZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpbml0aWFsaXplZC4gSW4gYSBi
cm93c2VyIGhvc3QsIGRlY2xhcmF0aXZlIHdpZGdldHMgd2lsbAorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBiZSBjb25zdHJ1Y3RlZCB3aGVuIHRoaXMgZnVuY3Rpb24gZmluaXNoZXMg
cnVuaW5nLgorICAgICAgICAgICAgICAgIGQuX2xvYWROb3RpZnlpbmcgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGQuX3Bvc3RMb2FkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB2YXIgbWxsID0g
ZC5fbG9hZGVyczsKKworICAgICAgICAgICAgICAgIC8vQ2xlYXIgbGlzdGVuZXJzIHNvIG5ldyBv
bmVzIGNhbiBiZSBhZGRlZAorICAgICAgICAgICAgICAgIC8vRm9yIG90aGVyIHhkb21haW4gcGFj
a2FnZSBsb2FkcyBhZnRlciB0aGUgaW5pdGlhbCBsb2FkLgorICAgICAgICAgICAgICAgIGQuX2xv
YWRlcnMgPSBbXTsKKworICAgICAgICAgICAgICAgIGZvcih2YXIgeCA9IDA7IHggPCBtbGwubGVu
Z3RoOyB4KyspeworICAgICAgICAgICAgICAgICAgICAgICAgbWxsW3hdKCk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgZC5fbG9hZE5vdGlmeWluZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBn
b3QgYWRkZWQgdG8gdGhlIG9ubG9hZCBxdWV1ZQorICAgICAgICAgICAgICAgIC8vYWZ0ZXIgdGhp
cyBmaXJzdCBydW4uIElmIHNvbWV0aGluZyBkaWQsIGFuZCB3ZSBhcmUgbm90IHdhaXRpbmcgZm9y
IGFueQorICAgICAgICAgICAgICAgIC8vbW9yZSBpbmZsaWdodCByZXNvdXJjZXMsIHJ1biBhZ2Fp
bi4KKyAgICAgICAgICAgICAgICBpZihkLl9wb3N0TG9hZCAmJiBkLl9pbkZsaWdodENvdW50ID09
IDAgJiYgbWxsLmxlbmd0aCl7CisgICAgICAgICAgICAgICAgICAgICAgICBkLl9jYWxsTG9hZGVk
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZG9qby51bmxvYWRl
ZCA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgc2lnbmFsIGZpcmVkIGJ5IGltcGVuZGluZyBlbnZpcm9ubWVu
dCBkZXN0cnVjdGlvbi4gWW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgZG9qby5hZGRPblVubG9hZCgpIGluc3RlYWQgb2YgZG9pbmcgYSBkaXJlY3QgZG9qby5j
b25uZWN0KCkgdG8gdGhpcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBtZXRob2Qg
dG8gcGVyZm9ybSBwYWdlL2FwcGxpY2F0aW9uIGNsZWFudXAgbWV0aG9kcy4gU2VlCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8uYWRkT25VbmxvYWQgZm9yIG1vcmUgaW5mby4K
KyAgICAgICAgICAgICAgICB2YXIgbWxsID0gZC5fdW5sb2FkZXJzOworICAgICAgICAgICAgICAg
IHdoaWxlKG1sbC5sZW5ndGgpeworICAgICAgICAgICAgICAgICAgICAgICAgKG1sbC5wb3AoKSko
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkLl9vbnRvID0gZnVu
Y3Rpb24oYXJyLCBvYmosIGZuKXsKKyAgICAgICAgICAgICAgICBpZighZm4peworICAgICAgICAg
ICAgICAgICAgICAgICAgYXJyLnB1c2gob2JqKTsKKyAgICAgICAgICAgICAgICB9ZWxzZSBpZihm
bil7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVuYyA9ICh0eXBlb2YgZm4gPT0gInN0
cmluZyIpID8gb2JqW2ZuXSA6IGZuOworICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2go
ZnVuY3Rpb24oKXsgZnVuYy5jYWxsKG9iaik7IH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGRvam8ucmVhZHkgPSBkb2pvLmFkZE9uTG9hZCA9IGZ1bmN0aW9uKC8q
T2JqZWN0Ki9vYmosIC8qU3RyaW5nfEZ1bmN0aW9uPyovZnVuY3Rpb25OYW1lKXsKKyAgICAgICAg
ICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBSZWdp
c3RlcnMgYSBmdW5jdGlvbiB0byBiZSB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIERPTSBhbmQgZG9qby5y
ZXF1aXJlKCkgY2FsbHMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaGF2ZSBmaW5p
c2hlZCBsb2FkaW5nLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gZGVz
Y3JpcHRpb246CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJlZ2lzdGVycyBhIGZ1
bmN0aW9uIHRvIGJlIHRyaWdnZXJlZCBhZnRlciB0aGUgRE9NIGhhcyBmaW5pc2hlZAorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBsb2FkaW5nIGFuZCBgZG9qby5yZXF1aXJlYCBtb2R1
bGVzIGhhdmUgbG9hZGVkLiBXaWRnZXRzIGRlY2xhcmVkIGluIG1hcmt1cAorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBoYXZlIGJlZW4gaW5zdGFudGlhdGVkIGlmIGBkakNvbmZpZy5w
YXJzZU9uTG9hZGAgaXMgdHJ1ZSB3aGVuIHRoaXMgZmlyZXMuCisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgSW1hZ2VzIGFuZCBDU1MgZmlsZXMgbWF5
IG9yIG1heSBub3QgaGF2ZSBmaW5pc2hlZCBkb3dubG9hZGluZyB3aGVuCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gaXMgY2FsbGVkLiAgKE5v
dGUgdGhhdCB3aWRnZXRzJyBDU1MgYW5kIEhUTUwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgY29kZSBpcyBndWFyYW50ZWVkIHRvIGJlIGRvd25sb2FkZWQgYmVmb3JlIHNhaWQgd2lk
Z2V0cyBhcmUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaW5zdGFudGlhdGVkLCB0
aG91Z2ggaW5jbHVkaW5nIGNzcyByZXNvdWNlcyBCRUZPUkUgYW55IHNjcmlwdCBlbGVtZW50cwor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpcyBoaWdobHkgcmVjb21tZW5kZWQpLgor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIFJlZ2lzdGVyIGFuIGFub255bW91cyBmdW5jdGlvbiB0byBydW4gd2hl
biBldmVyeXRoaW5nIGlzIHJlYWR5CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRv
am8uYWRkT25Mb2FkKGZ1bmN0aW9uKCl7IGRvU3R1ZmYoKTsgfSk7CisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAg
UmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBydW4gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWR5IGJ5IHBv
aW50ZXI6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBpbml0ID0gZnVuY3Rp
b24oKXsgZG9TdHVmZigpOyB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8u
YWRkT25Mb2FkKGluaXQpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
ZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8g
cnVuIHNjb3BlZCB0byBgb2JqZWN0YCwgZWl0aGVyIGJ5IG5hbWUgb3IgYW5vbnltb3VzbHk6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uYWRkT25Mb2FkKG9iamVjdCwgImZ1
bmN0aW9uTmFtZSIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmFkZE9u
TG9hZChvYmplY3QsIGZ1bmN0aW9uKCl7IGRvU3R1ZmYoKTsgfSk7CisKKyAgICAgICAgICAgICAg
ICBkLl9vbnRvKGQuX2xvYWRlcnMsIG9iaiwgZnVuY3Rpb25OYW1lKTsKKworICAgICAgICAgICAg
ICAgIC8vQWRkZWQgZm9yIHhkb21haW4gbG9hZGluZy4gZG9qby5hZGRPbkxvYWQgaXMgdXNlZCB0
bworICAgICAgICAgICAgICAgIC8vaW5kaWNhdGUgY2FsbGJhY2tzIGFmdGVyIGRvaW5nIHNvbWUg
ZG9qby5yZXF1aXJlKCkgc3RhdGVtZW50cy4KKyAgICAgICAgICAgICAgICAvL0luIHRoZSB4ZG9t
YWluIGNhc2UsIGlmIGFsbCB0aGUgcmVxdWlyZXMgYXJlIGxvYWRlZCAoYWZ0ZXIgaW5pdGlhbAor
ICAgICAgICAgICAgICAgIC8vcGFnZSBsb2FkKSwgdGhlbiBpbW1lZGlhdGVseSBjYWxsIGFueSBs
aXN0ZW5lcnMuCisgICAgICAgICAgICAgICAgaWYoZC5fcG9zdExvYWQgJiYgZC5faW5GbGlnaHRD
b3VudCA9PSAwICYmICFkLl9sb2FkTm90aWZ5aW5nKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGQuX2NhbGxMb2FkZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvL1N1cHBvcnQgY2FsbGluZyBkb2pvLmFkZE9uTG9hZCB2aWEgZGpDb25maWcuYWRkT25Mb2Fk
LiBTdXBwb3J0IGFsbCB0aGUKKyAgICAgICAgLy9jYWxsIHBlcm11dGF0aW9ucyBvZiBkb2pvLmFk
ZE9uTG9hZC4gTWFpbmx5IHVzZWZ1bCB3aGVuIGRvam8gaXMgYWRkZWQKKyAgICAgICAgLy90byB0
aGUgcGFnZSBhZnRlciB0aGUgcGFnZSBoYXMgbG9hZGVkLgorICAgICAgICB2YXIgZGNhID0gZC5j
b25maWcuYWRkT25Mb2FkOworICAgICAgICBpZihkY2EpeworICAgICAgICAgICAgICAgIGQuYWRk
T25Mb2FkWyhkY2EgaW5zdGFuY2VvZiBBcnJheSA/ICJhcHBseSIgOiAiY2FsbCIpXShkLCBkY2Ep
OworICAgICAgICB9CisKKyAgICAgICAgZG9qby5fbW9kdWxlc0xvYWRlZCA9IGZ1bmN0aW9uKCl7
CisgICAgICAgICAgICAgICAgaWYoZC5fcG9zdExvYWQpeyByZXR1cm47IH0KKyAgICAgICAgICAg
ICAgICBpZihkLl9pbkZsaWdodENvdW50ID4gMCl7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zb2xlLndhcm4oImZpbGVzIHN0aWxsIGluIGZsaWdodCEiKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZC5fY2Fs
bExvYWRlZCgpOworICAgICAgICB9CisKKyAgICAgICAgZG9qby5fY2FsbExvYWRlZCA9IGZ1bmN0
aW9uKCl7CisKKyAgICAgICAgICAgICAgICAvLyBUaGUgIm9iamVjdCIgY2hlY2sgaXMgZm9yIElF
LCBhbmQgdGhlIG90aGVyIG9wZXJhIGNoZWNrIGZpeGVzIGFuCisgICAgICAgICAgICAgICAgLy8g
aXNzdWUgaW4gT3BlcmEgd2hlcmUgaXQgY291bGQgbm90IGZpbmQgdGhlIGJvZHkgZWxlbWVudCBp
biBzb21lCisgICAgICAgICAgICAgICAgLy8gd2lkZ2V0IHRlc3QgY2FzZXMuICBGb3IgMC45LCBt
YXliZSByb3V0ZSBhbGwgYnJvd3NlcnMgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAvLyBz
ZXRUaW1lb3V0IChuZWVkIHByb3RlY3Rpb24gc3RpbGwgZm9yIG5vbi1icm93c2VyIGVudmlyb25t
ZW50cworICAgICAgICAgICAgICAgIC8vIHRob3VnaCkuIFRoaXMgbWlnaHQgYWxzbyBoZWxwIHRo
ZSBpc3N1ZSB3aXRoIEZGIDIuMCBhbmQgZnJlZXppbmcKKyAgICAgICAgICAgICAgICAvLyBpc3N1
ZXMgd2hlcmUgd2UgdHJ5IHRvIGRvIHN5bmMgeGhyIHdoaWxlIGJhY2tncm91bmQgY3NzIGltYWdl
cyBhcmUKKyAgICAgICAgICAgICAgICAvLyBiZWluZyBsb2FkZWQgKHRyYWMgIzI1NzIpPyBDb25z
aWRlciBmb3IgMC45LgorICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBzZXRUaW1lb3V0ID09ICJv
YmplY3QiIHx8IChkLmNvbmZpZy51c2VYRG9tYWluICYmIGQuaXNPcGVyYSkpeworICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0VGltZW91dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZC5pc0FJUiA/IGZ1bmN0aW9uKCl7IGQubG9hZGVkKCk7IH0gOiBkLl9zY29wZU5hbWUgKyAi
LmxvYWRlZCgpOyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAg
ICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgZC5sb2FkZWQoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkb2pvLl9nZXRNb2R1bGVTeW1i
b2xzID0gZnVuY3Rpb24oLypTdHJpbmcqL21vZHVsZW5hbWUpeworICAgICAgICAgICAgICAgIC8v
IHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIENvbnZlcnRzIGEgbW9k
dWxlIG5hbWUgaW4gZG90dGVkIEpTIG5vdGF0aW9uIHRvIGFuIGFycmF5CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHJlcHJlc2VudGluZyB0aGUgcGF0aCBpbiB0aGUgc291cmNlIHRy
ZWUKKyAgICAgICAgICAgICAgICB2YXIgc3ltcyA9IG1vZHVsZW5hbWUuc3BsaXQoIi4iKTsKKyAg
ICAgICAgICAgICAgICBmb3IodmFyIGkgPSBzeW1zLmxlbmd0aDsgaT4wOyBpLS0peworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudE1vZHVsZSA9IHN5bXMuc2xpY2UoMCwgaSkuam9p
bigiLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSAxICYmICFkLl9tb2R1bGVI
YXNQcmVmaXgocGFyZW50TW9kdWxlKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQgZGVmYXVsdCBtb2R1bGUgZGlyZWN0b3J5IChzaWJsaW5nIG9mIGRvam8pIGZv
ciB0b3AtbGV2ZWwgbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1z
WzBdID0gIi4uLyIgKyBzeW1zWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRNb2R1bGVQYXRoID0gZC5f
Z2V0TW9kdWxlUHJlZml4KHBhcmVudE1vZHVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKHBhcmVudE1vZHVsZVBhdGggIT0gcGFyZW50TW9kdWxlKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zLnNwbGljZSgwLCBpLCBwYXJlbnRNb2R1
bGVQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc3ltczsgLy8g
QXJyYXkKKyAgICAgICAgfQorCisgICAgICAgIGRvam8uX2dsb2JhbF9vbWl0X21vZHVsZV9jaGVj
ayA9IGZhbHNlOworCisgICAgICAgIGRvam8ubG9hZEluaXQgPSBmdW5jdGlvbigvKkZ1bmN0aW9u
Ki9pbml0KXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIEV4ZWN1dGVzIGEgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBl
eGVjdXRlZCBmb3IgdGhlIGxvYWRlcidzIGRvam8ucmVxdWlyZUlmCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHJlc29sdXRpb25zIHRvIHdvcmsuIFRoaXMgaXMgbmVlZGVkIG1vc3Rs
eSBmb3IgdGhlIHhkb21haW4gbG9hZGVyIGNhc2Ugd2hlcmUKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgYSBmdW5jdGlvbiBuZWVkcyB0byBiZSBleGVjdXRlZCB0byBzZXQgdXAgdGhl
IHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBkb2pvLnJlcXVpcmVJZgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBjYWxsLgorICAgICAgICAgICAgICAgIC8vICAgICAgaW5pdDoKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBmdW5jdGlvbiByZWZlcmVuY2UuIEV4ZWN1dGVk
IGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246IFRoaXMg
ZnVuY3Rpb24gaXMgbWFpbmx5IGEgbWFya2VyIGZvciB0aGUgeGRvbWFpbiBsb2FkZXIgdG8ga25v
dyBwYXJ0cyBvZgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjb2RlIHRoYXQgbmVl
ZHMgYmUgZXhlY3V0ZWQgb3V0c2lkZSB0aGUgZnVuY3Rpb24gd3JhcHBwZXIgdGhhdCBpcyBwbGFj
ZWQgYXJvdW5kIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSBp
bml0IGZ1bmN0aW9uIGNvdWxkIGJlIGV4ZWN1dGVkIG1vcmUgdGhhbiBvbmNlLCBhbmQgaXQgc2hv
dWxkIG1ha2Ugbm8gYXNzdW1wdGlvbnMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
b24gd2hhdCBpcyBsb2FkZWQsIG9yIHdoYXQgbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiBPbmx5IHRo
ZSBmdW5jdGlvbmFsaXR5IGluIERvam8gQmFzZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBpcyBhbGxvd2VkIHRvIGJlIHVzZWQuIEF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kLiBGb3Ig
YSB2YWxpZCB1c2UgY2FzZSwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgc2VlIHRo
ZSBzb3VyY2UgZm9yIGRvam94LmdmeC4KKyAgICAgICAgICAgICAgICBpbml0KCk7CisgICAgICAg
IH0KKworICAgICAgICBkb2pvLl9sb2FkTW9kdWxlID0gZG9qby5yZXF1aXJlID0gZnVuY3Rpb24o
LypTdHJpbmcqL21vZHVsZU5hbWUsIC8qQm9vbGVhbj8qL29taXRNb2R1bGVDaGVjayl7CisgICAg
ICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBsb2FkcyBhIEphdmFzY3JpcHQgbW9kdWxlIGZyb20gdGhlIGFwcHJvcHJpYXRlIFVSSQor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICBtb2R1bGVOYW1lOiBT
dHJpbmcKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbW9kdWxlIG5hbWUgdG8gbG9h
ZCwgdXNpbmcgcGVyaW9kcyBmb3Igc2VwYXJhdG9ycywKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgIGUuZy4gImRvam8uZGF0ZS5sb2NhbGUiLiAgTW9kdWxlIHBhdGhzIGFyZSBkZS1y
ZWZlcmVuY2VkIGJ5IGRvam8ncworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpbnRl
cm5hbCBtYXBwaW5nIG9mIGxvY2F0aW9ucyB0byBuYW1lcyBhbmQgYXJlIGRpc2FtYmlndWF0ZWQg
YnkKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbG9uZ2VzdCBwcmVmaXguIFNlZSBg
ZG9qby5yZWdpc3Rlck1vZHVsZVBhdGgoKWAgZm9yIGRldGFpbHMgb24KKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgcmVnaXN0ZXJpbmcgbmV3IG1vZHVsZXMuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIG9taXRNb2R1bGVDaGVjazogQm9vbGVhbj8K
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaWYgYHRydWVgLCBvbWl0TW9kdWxlQ2hl
Y2sgc2tpcHMgdGhlIHN0ZXAgb2YgZW5zdXJpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgbG9hZGVkIGZpbGUgYWN0dWFsbHkgZGVmaW5lcyB0aGUgc3ltYm9sIGl0
IGlzIHJlZmVyZW5jZWQgYnkuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEZvciBl
eGFtcGxlIGlmIGl0IGNhbGxlZCBhcyBgZG9qby5yZXF1aXJlKCJhLmIuYyIpYCBhbmQgdGhlCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZpbGUgbG9jYXRlZCBhdCBgYS9iL2MuanNg
IGRvZXMgbm90IGRlZmluZSBhbiBvYmplY3QgYGEuYi5jYCwKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgYW5kIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93cyB3aGVyZWFzIG5vIGV4Y2Vw
dGlvbiBpcyByYWlzZWQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgd2hlbiBjYWxs
ZWQgYXMgYGRvam8ucmVxdWlyZSgiYS5iLmMiLCB0cnVlKWAKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIE1vZHVsZXMgYXJlIGxvYWRlZCB2aWEgZG9qby5yZXF1aXJlIGJ5IHVzaW5n
IG9uZSBvZiB0d28gbG9hZGVyczogdGhlIG5vcm1hbCBsb2FkZXIKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgYW5kIHRoZSB4ZG9tYWluIGxvYWRlci4gVGhlIHhkb21haW4gbG9hZGVy
IGlzIHVzZWQgd2hlbiBkb2pvIHdhcyBidWlsdCB3aXRoIGEKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgY3VzdG9tIGJ1aWxkIHRoYXQgc3BlY2lmaWVkIGxvYWRlcj14ZG9tYWluIGFu
ZCB0aGUgbW9kdWxlIGxpdmVzIG9uIGEgbW9kdWxlUGF0aAorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICB0aGF0IGlzIGEgd2hvbGUgVVJMLCB3aXRoIHByb3RvY29sIGFuZCBhIGRvbWFp
bi4gVGhlIHZlcnNpb25zIG9mIERvam8gdGhhdCBhcmUgb24KKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgdGhlIEdvb2dsZSBhbmQgQU9MIENETnMgdXNlIHRoZSB4ZG9tYWluIGxvYWRl
ci4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJ
ZiB0aGUgbW9kdWxlIGlzIGxvYWRlZCB2aWEgdGhlIHhkb21haW4gbG9hZGVyLCBpdCBpcyBhbiBh
c3luY2hyb25vdXMgbG9hZCwgc2luY2UKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
dGhlIG1vZHVsZSBpcyBhZGRlZCB2aWEgYSBkeW5hbWljYWxseSBjcmVhdGVkIHNjcmlwdCB0YWcu
IFRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbWVhbnMgdGhhdCBkb2pvLnJl
cXVpcmUoKSBjYW4gcmV0dXJuIGJlZm9yZSB0aGUgbW9kdWxlIGhhcyBsb2FkZWQuIEhvd2V2ZXIs
IHRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgc2hvdWxkIG9ubHkgaGFwcGVu
IGluIHRoZSBjYXNlIHdoZXJlIHlvdSBkbyBkb2pvLnJlcXVpcmUgY2FsbHMgaW4gdGhlIHRvcC1s
ZXZlbAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBIVE1MIHBhZ2UsIG9yIGlmIHlv
dSBwdXJwb3NlbHkgYXZvaWQgdGhlIGxvYWRlciBjaGVja2luZyBmb3IgZG9qby5yZXF1aXJlCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBpbiB5b3VyIG1vZHVs
ZSBieSB1c2luZyBhIHN5bnRheCBsaWtlIGRvam9bInJlcXVpcmUiXSB0byBsb2FkIHRoZSBtb2R1
bGUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
U29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBub3QgaGF2ZSB0aGUgbG9hZGVyIGRldGVjdCB0aGUg
ZG9qby5yZXF1aXJlIGNhbGxzIGluIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBtb2R1bGUgc28gdGhhdCB5b3UgY2FuIGR5bmFtaWNhbGx5IGxvYWQgdGhlIG1vZHVsZXMgYXMg
YSByZXN1bHQgb2YgYW4gYWN0aW9uIG9uIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBwYWdlLCBpbnN0ZWFkIG9mIHJpZ2h0IGF0IG1vZHVsZSBsb2FkIHRpbWUuCisgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQWxzbywgZm9yIHNj
cmlwdCBibG9ja3MgaW4gYW4gSFRNTCBwYWdlLCB0aGUgbG9hZGVyIGRvZXMgbm90IHByZS1wcm9j
ZXNzIHRoZW0sIHNvCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGl0IGRvZXMgbm90
IGtub3cgdG8gZG93bmxvYWQgdGhlIG1vZHVsZXMgYmVmb3JlIHRoZSBkb2pvLnJlcXVpcmUgY2Fs
bHMgb2NjdXIuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgU28sIGluIHRob3NlIHR3byBjYXNlcywgd2hlbiB5b3Ugd2FudCBvbi10aGUtZmx5IG1v
ZHVsZSBsb2FkaW5nIG9yIGZvciBzY3JpcHQgYmxvY2tzCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGluIHRoZSBIVE1MIHBhZ2UsIHNwZWNpYWwgY2FyZSBtdXN0IGJlIHRha2VuIGlm
IHRoZSBkb2pvLnJlcXVpcmVkIGNvZGUgaXMgbG9hZGVkCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGFzeW5jaHJvbm91c2x5LiBUbyBtYWtlIHN1cmUgeW91IGNhbiBleGVjdXRlIGNv
ZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSBkb2pvLnJlcXVpcmVkCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIG1vZHVsZXMsIGJlIHN1cmUgdG8gYWRkIHRoZSBjb2RlIHRoYXQgZGVwZW5k
cyBvbiB0aGUgbW9kdWxlcyBpbiBhIGRvam8uYWRkT25Mb2FkKCkKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgY2FsbGJhY2suIGRvam8uYWRkT25Mb2FkIHdhaXRzIGZvciBhbGwgb3V0
c3RhbmRpbmcgbW9kdWxlcyB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgZXhlY3V0aW5nLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBzeW50YXggd29ya3Mgd2l0aCBi
b3RoIHhkb21haW4gYW5kIG5vcm1hbCBsb2FkZXJzLCBzbyBpdCBpcyBnb29kCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHByYWN0aWNlIHRvIGFsd2F5cyB1c2UgdGhpcyBpZGlvbSBm
b3Igb24tdGhlLWZseSBjb2RlIGxvYWRpbmcgYW5kIGluIEhUTUwgc2NyaXB0CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGJsb2Nrcy4gSWYgYXQgc29tZSBwb2ludCB5b3UgY2hhbmdl
IGxvYWRlcnMgYW5kIHdoZXJlIHRoZSBjb2RlIGlzIGxvYWRlZCBmcm9tLAorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBpdCB3aWxsIGFsbCBzdGlsbCB3b3JrLgorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIE1vcmUgb24gaG93IGRvam8u
cmVxdWlyZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBgZG9qby5yZXF1aXJlKCJB
LkIiKWAgZmlyc3QgY2hlY2tzIHRvIHNlZSBpZiBzeW1ib2wgQS5CIGlzCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIGRlZmluZWQuIElmIGl0IGlzLCBpdCBpcyBzaW1wbHkgcmV0dXJu
ZWQgKG5vdGhpbmcgdG8gZG8pLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIElmIGl0IGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGxvb2sgZm9yIGBB
L0IuanNgIGluIHRoZSBzY3JpcHQgcm9vdAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgYGRvam8ucmVxdWlyZWAgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBpdCBjYW5ub3Qg
ZmluZCBhIGZpbGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdG8gbG9hZCwgb3Ig
aWYgdGhlIHN5bWJvbCBgQS5CYCBpcyBub3QgZGVmaW5lZCBhZnRlciBsb2FkaW5nLgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEl0IHJldHVybnMg
dGhlIG9iamVjdCBgQS5CYCwgYnV0IG5vdGUgdGhlIGNhdmVhdHMgYWJvdmUgYWJvdXQgb24tdGhl
LWZseSBsb2FkaW5nIGFuZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBIVE1MIHNj
cmlwdCBibG9ja3Mgd2hlbiB0aGUgeGRvbWFpbiBsb2FkZXIgaXMgbG9hZGluZyBhIG1vZHVsZS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBgZG9q
by5yZXF1aXJlKClgIGRvZXMgbm90aGluZyBhYm91dCBpbXBvcnRpbmcgc3ltYm9scyBpbnRvCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSBjdXJyZW50IG5hbWVzcGFjZS4gIEl0
IGlzIHByZXN1bWVkIHRoYXQgdGhlIGNhbGxlciB3aWxsCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHRha2UgY2FyZSBvZiB0aGF0LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBUbyB1c2UgZG9qby5yZXF1aXJlIGluIGNvbmp1bmN0aW9uIHdpdGggZG9qby5yZWFkeToKKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAg
IGRvam8ucmVxdWlyZSgiZm9vIik7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwg
ICAgICAgZG9qby5yZXF1aXJlKCJiYXIiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgfCAgICAgICBkb2pvLmFkZE9uTG9hZChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgLy95b3UgY2FuIG5vdyBzYWZlbHkgZG8gc29t
ZXRoaW5nIHdpdGggZm9vIGFuZCBiYXIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
fCAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAg
ZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRv
IGltcG9ydCBhbGwgc3ltYm9scyBpbnRvIGEgbG9jYWwgYmxvY2ssIHlvdSBtaWdodCB3cml0ZToK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAg
ICAgIHdpdGggKGRvam8ucmVxdWlyZSgiQS5CIikpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICB8ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBBbmQgdG8gaW1wb3J0IGp1c3QgdGhlIGxlYWYgc3ltYm9sIHRvIGEgbG9jYWwg
dmFyaWFibGU6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgfCAgICAgICB2YXIgQiA9IGRvam8ucmVxdWlyZSgiQS5CIik7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHwgICAgICAgLi4uCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHJldHVybnM6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIHRoZSByZXF1aXJlZCBuYW1lc3BhY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgb21pdE1v
ZHVsZUNoZWNrID0gZC5fZ2xvYmFsX29taXRfbW9kdWxlX2NoZWNrIHx8IG9taXRNb2R1bGVDaGVj
azsKKworICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgaXQgaXMgYWxyZWFkeSBsb2FkZWQuCisg
ICAgICAgICAgICAgICAgdmFyIG1vZHVsZSA9IGQuX2xvYWRlZE1vZHVsZXNbbW9kdWxlTmFtZV07
CisgICAgICAgICAgICAgICAgaWYobW9kdWxlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtb2R1bGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gY29u
dmVydCBwZXJpb2RzIHRvIHNsYXNoZXMKKyAgICAgICAgICAgICAgICB2YXIgcmVscGF0aCA9IGQu
X2dldE1vZHVsZVN5bWJvbHMobW9kdWxlTmFtZSkuam9pbigiLyIpICsgJy5qcyc7CisgICAgICAg
ICAgICAgICAgdmFyIG1vZEFyZyA9ICFvbWl0TW9kdWxlQ2hlY2sgPyBtb2R1bGVOYW1lIDogbnVs
bDsKKyAgICAgICAgICAgICAgICB2YXIgb2sgPSBkLl9sb2FkUGF0aChyZWxwYXRoLCBtb2RBcmcp
OworICAgICAgICAgICAgICAgIGlmKCFvayAmJiAhb21pdE1vZHVsZUNoZWNrKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgJyIgKyBtb2R1
bGVOYW1lICsgIic7IGxhc3QgdHJpZWQgJyIgKyByZWxwYXRoICsgIiciKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSBzeW1ib2wgd2FzIGRl
ZmluZWQKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBib3RoZXIgaWYgd2UncmUgZG9pbmcgeGRv
bWFpbiAoYXN5bmNocm9ub3VzKSBsb2FkaW5nLgorICAgICAgICAgICAgICAgIGlmKCFvbWl0TW9k
dWxlQ2hlY2sgJiYgIWQuX2lzWERvbWFpbil7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBw
YXNzIGluIGZhbHNlIHNvIHdlIGNhbiBnaXZlIGJldHRlciBlcnJvcgorICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kdWxlID0gZC5fbG9hZGVkTW9kdWxlc1ttb2R1bGVOYW1lXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKCFtb2R1bGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoInN5bWJvbCAnIiArIG1vZHVsZU5hbWUgKyAiJyBpcyBub3Qg
ZGVmaW5lZCBhZnRlciBsb2FkaW5nICciICsgcmVscGF0aCArICInIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1vZHVsZTsKKyAgICAgICAgfQorCisgICAgICAgIGRvam8ucHJvdmlkZSA9IGZ1bmN0aW9uKC8q
U3RyaW5nKi8gcmVzb3VyY2VOYW1lKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJlZ2lzdGVyIGEgcmVzb3VyY2Ugd2l0
aCB0aGUgcGFja2FnZSBzeXN0ZW0uIFdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggYGRvam8ucmVx
dWlyZWAKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3Jp
cHRpb246CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEVhY2ggamF2YXNjcmlwdCBz
b3VyY2UgZmlsZSBpcyBjYWxsZWQgYSByZXNvdXJjZS4gIFdoZW4gYQorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICByZXNvdXJjZSBpcyBsb2FkZWQgYnkgdGhlIGJyb3dzZXIsIGBkb2pv
LnByb3ZpZGUoKWAgcmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRo
YXQgaXQgaGFzIGJlZW4gbG9hZGVkLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIEVhY2ggamF2YXNjcmlwdCBzb3VyY2UgZmlsZSBtdXN0IGhhdmUg
YXQgbGVhc3Qgb25lCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGBkb2pvLnByb3Zp
ZGUoKWAgY2FsbCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLCBjb3JyZXNwb25kaW5nIHRvCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSBmaWxlIG5hbWUuICBGb3IgZXhhbXBsZSwg
YGpzL2Rvam8vZm9vLmpzYCBtdXN0IGhhdmUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgYGRvam8ucHJvdmlkZSgiZG9qby5mb28iKTtgIGJlZm9yZSBhbnkgY2FsbHMgdG8KKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgYGRvam8ucmVxdWlyZSgpYCBhcmUgbWFkZS4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBGb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucywgaW4gYWRkaXRpb24gdG8gcmVnaXN0ZXJpbmcK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIHJlc291cmNlLCBgZG9qby5wcm92
aWRlKClgIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBqYXZhc2NyaXB0CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIG9iamVjdCBmb3IgdGhlIG1vZHVsZSBleGlzdHMuICBGb3IgZXhhbXBs
ZSwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYGRvam8ucHJvdmlkZSgiZG9qb3gu
ZGF0YS5GbGlja3JTdG9yZSIpYCwgaW4gYWRkaXRpb24gdG8KKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgcmVnaXN0ZXJpbmcgdGhhdCBgRmxpY2tyU3RvcmUuanNgIGlzIGEgcmVzb3Vy
Y2UgZm9yIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBgZG9qb3guZGF0YWAg
bW9kdWxlLCB3aWxsIGVuc3VyZSB0aGF0IHRoZSBgZG9qb3guZGF0YWAKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgamF2YXNjcmlwdCBvYmplY3QgZXhpc3RzLCBzbyB0aGF0IGNhbGxz
IGxpa2UKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYGRvam8uZGF0YS5mb28gPSBm
dW5jdGlvbigpeyAuLi4gfWAgZG9uJ3QgZmFpbC4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBJbiB0aGUgY2FzZSBvZiBhIGJ1aWxkIHdoZXJlIG11
bHRpcGxlIGphdmFzY3JpcHQgc291cmNlIGZpbGVzCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGFyZSBjb21iaW5lZCBpbnRvIG9uZSBiaWdnZXIgZmlsZSAoc2ltaWxhciB0byBhIC5s
aWIgb3IgLmphcgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBmaWxlKSwgdGhhdCBm
aWxlIG1heSBjb250YWluIG11bHRpcGxlIGRvam8ucHJvdmlkZSgpIGNhbGxzLCB0bworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBub3RlIHRoYXQgaXQgaW5jbHVkZXMgbXVsdGlwbGUg
cmVzb3VyY2VzLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gcmVzb3Vy
Y2VOYW1lOiBTdHJpbmcKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQSBkb3Qtc3Bl
cmF0ZWQgc3RyaW5nIGlkZW50aWZ5aW5nIGEgcmVzb3VyY2UuCisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgU2Fm
ZWx5IGNyZWF0ZSBhIGBteWAgb2JqZWN0LCBhbmQgbWFrZSBkb2pvLnJlcXVpcmUoIm15LkN1c3Rv
bU1vZHVsZSIpIHdvcmsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5wcm92
aWRlKCJteS5DdXN0b21Nb2R1bGUiKTsKKworICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHdl
IGhhdmUgYSBzdHJpbmcuCisgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lID0gcmVzb3VyY2VO
YW1lICsgIiI7CisgICAgICAgICAgICAgICAgcmV0dXJuIChkLl9sb2FkZWRNb2R1bGVzW3Jlc291
cmNlTmFtZV0gPSBkLmdldE9iamVjdChyZXNvdXJjZU5hbWUsIHRydWUpKTsgLy8gT2JqZWN0Cisg
ICAgICAgIH0KKworICAgICAgICAvL1N0YXJ0IG9mIG9sZCBib290c3RyYXAyOgorCisgICAgICAg
IGRvam8ucGxhdGZvcm1SZXF1aXJlID0gZnVuY3Rpb24oLypPYmplY3QqL21vZE1hcCl7CisgICAg
ICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICByZXF1aXJlIG9uZSBvciBtb3JlIG1vZHVsZXMgYmFzZWQgb24gd2hpY2ggaG9zdCBlbnZp
cm9ubWVudAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBEb2pvIGlzIGN1cnJlbnRs
eSBvcGVyYXRpbmcgaW4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB0YWtlcyBhICJtYXAiIG9m
IGFycmF5cyB3aGljaCBvbmUgY2FuIHVzZSB0bworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBvcHRpb25hbGx5IGxvYWQgZG9qbyBtb2R1bGVzLiBUaGUgbWFwIGlzIGluZGV4ZWQgYnkg
dGhlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHBvc3NpYmxlIGRvam8ubmFtZV8g
dmFsdWVzLCB3aXRoIHR3byBhZGRpdGlvbmFsIHZhbHVlczoKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgImRlZmF1bHQiIGFuZCAiY29tbW9uIi4gVGhlIGl0ZW1zIGluIHRoZSAiZGVm
YXVsdCIgYXJyYXkgd2lsbAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBiZSBsb2Fk
ZWQgaWYgbm9uZSBvZiB0aGUgb3RoZXIgaXRlbXMgaGF2ZSBiZWVuIGNob29zZW4gYmFzZWQgb24K
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9qby5uYW1lXywgc2V0IGJ5IHlvdXIg
aG9zdCBlbnZpcm9ubWVudC4gVGhlIGl0ZW1zIGluIHRoZQorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICAiY29tbW9uIiBhcnJheSB3aWxsICphbHdheXMqIGJlIGxvYWRlZCwgcmVnYXJk
bGVzcyBvZiB3aGljaAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBsaXN0IGlzIGNo
b3Nlbi4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHwgICAgICAgZG9qby5wbGF0Zm9ybVJlcXVpcmUoeworICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgYnJvd3NlcjogWworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAiZm9vLnNh
bXBsZSIsIC8vIHNpbXBsZSBtb2R1bGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgImZvby50ZXN0IiwKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgWyJmb28uYmFyLmJheiIsIHRydWVd
IC8vIHNraXAgb2JqZWN0IGNoZWNrIGluIF9sb2FkTW9kdWxlIChkb2pvLnJlcXVpcmUpCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgZGVmYXVsdDogWyAiZm9vLnNh
bXBsZS5fYmFzZSIgXSwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgIGNvbW1vbjogWyAiaW1wb3J0YW50Lm1vZHVsZS5jb21tb24iIF0KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHZhciBj
b21tb24gPSBtb2RNYXAuY29tbW9uIHx8IFtdOworICAgICAgICAgICAgICAgIHZhciByZXN1bHQg
PSBjb21tb24uY29uY2F0KG1vZE1hcFtkLl9uYW1lXSB8fCBtb2RNYXBbImRlZmF1bHQiXSB8fCBb
XSk7CisKKyAgICAgICAgICAgICAgICBmb3IodmFyIHg9MDsgeDxyZXN1bHQubGVuZ3RoOyB4Kysp
eworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnIgPSByZXN1bHRbeF07CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZihjdXJyLmNvbnN0cnVjdG9yID09IEFycmF5KXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZC5fbG9hZE1vZHVsZS5hcHBseShkLCBjdXJyKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkLl9sb2FkTW9kdWxlKGN1cnIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRvam8ucmVxdWlyZUlmID0gZnVu
Y3Rpb24oLypCb29sZWFuKi8gY29uZGl0aW9uLCAvKlN0cmluZyovIHJlc291cmNlTmFtZSl7Cisg
ICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgSWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIHRoZW4gY2FsbCBgZG9qby5yZXF1aXJlKClgIGZv
ciB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHJlc291cmNl
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnJlcXVpcmVJZihkb2pvLmlzQnJvd3Nlciwg
Im15LnNwZWNpYWwuTW9kdWxlIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYoY29uZGl0aW9uID09PSB0cnVlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiB3aHkgZG8gd2Ugc3VwcG9ydCBjaGFpbmVkIHJlcXVpcmUoKSdzIGhlcmU/IGRvZXMgdGhlIGJ1
aWxkIHN5c3RlbT8KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW107CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsg
aSsrKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50
c1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBkLnJlcXVpcmUuYXBwbHkoZCwgYXJncyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZG9qby5yZXF1aXJlQWZ0ZXJJZiA9IGQucmVxdWlyZUlmOworCisgICAgICAg
IGRvam8ucmVnaXN0ZXJNb2R1bGVQYXRoID0gZnVuY3Rpb24oLypTdHJpbmcqL21vZHVsZSwgLypT
dHJpbmcqL3ByZWZpeCl7CisgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBNYXBzIGEgbW9kdWxlIG5hbWUgdG8gYSBwYXRoCisg
ICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgQW4gdW5yZWdpc3RlcmVkIG1vZHVsZSBpcyBnaXZlbiB0aGUgZGVmYXVsdCBw
YXRoIG9mIC4uL1ttb2R1bGVdLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICByZWxh
dGl2ZSB0byBEb2pvIHJvb3QuIEZvciBleGFtcGxlLCBtb2R1bGUgYWNtZSBpcyBtYXBwZWQgdG8K
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgLi4vYWNtZS4gIElmIHlvdSB3YW50IHRv
IHVzZSBhIGRpZmZlcmVudCBtb2R1bGUgbmFtZSwgdXNlCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGRvam8ucmVnaXN0ZXJNb2R1bGVQYXRoLgorICAgICAgICAgICAgICAgIC8vICAg
ICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgSWYgeW91ciBkb2pv
LmpzIGlzIGxvY2F0ZWQgYXQgdGhpcyBsb2NhdGlvbiBpbiB0aGUgd2ViIHJvb3Q6CisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgIC9teWFwcC9qcy9kb2pvL2Rvam8vZG9qby5qcworICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbmQgeW91ciBtb2R1bGVzIGFyZSBsb2NhdGVk
IGF0OgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvbXlhcHAvanMvZm9vL2Jhci5q
cworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvbXlhcHAvanMvZm9vL2Jhei5qcwor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvbXlhcHAvanMvZm9vL3RodWQveHl6enku
anMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWW91ciBhcHBsaWNhdGlvbiBjYW4g
dGVsbCBEb2pvIHRvIGxvY2F0ZSB0aGUgImZvbyIgbmFtZXNwYWNlIGJ5IGNhbGxpbmc6CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8ucmVnaXN0ZXJNb2R1bGVQYXRoKCJmb28i
LCAiLi4vLi4vZm9vIik7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEF0IHdoaWNo
IHBvaW50IHlvdSBjYW4gdGhlbiB1c2UgZG9qby5yZXF1aXJlKCkgdG8gbG9hZCB0aGUKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgbW9kdWxlcyAoYXNzdW1pbmcgdGhleSBwcm92aWRl
KCkgdGhlIHNhbWUgdGhpbmdzIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICByZXF1aXJlZCkuIFRoZSBmdWxsIGNvZGUgbWlnaHQgYmU6CisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IgorICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIHNyYz0iL215YXBwL2pzL2Rvam8vZG9qby9k
b2pvLmpzIj48L3NjcmlwdD4KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICAgICAgICAgIGRvam8ucmVnaXN0ZXJNb2R1bGVQYXRoKCJmb28iLCAiLi4vLi4vZm9vIik7Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgZG9qby5yZXF1aXJlKCJmb28u
YmFyIik7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgZG9qby5yZXF1
aXJlKCJmb28uYmF6Iik7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
ZG9qby5yZXF1aXJlKCJmb28udGh1ZC54eXp6eSIpOworICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgICAgICBkLl9tb2R1bGVQcmVmaXhlc1ttb2R1
bGVdID0geyBuYW1lOiBtb2R1bGUsIHZhbHVlOiBwcmVmaXggfTsKKyAgICAgICAgfTsKKyAgICAg
ICAgCisgICAgICAgIGRvam8ucmVxdWlyZUxvY2FsaXphdGlvbiA9IGZ1bmN0aW9uKC8qU3RyaW5n
Ki9tb2R1bGVOYW1lLCAvKlN0cmluZyovYnVuZGxlTmFtZSwgLypTdHJpbmc/Ki9sb2NhbGUsIC8q
U3RyaW5nPyovYXZhaWxhYmxlRmxhdExvY2FsZXMpeworICAgICAgICAgICAgICAgIC8vIHN1bW1h
cnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIERlY2xhcmVzIHRyYW5zbGF0ZWQg
cmVzb3VyY2VzIGFuZCBsb2FkcyB0aGVtIGlmIG5lY2Vzc2FyeSwgaW4gdGhlCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHNhbWUgc3R5bGUgYXMgZG9qby5yZXF1aXJlLiAgQ29udGVu
dHMgb2YgdGhlIHJlc291cmNlIGJ1bmRsZSBhcmUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgdHlwaWNhbGx5IHN0cmluZ3MsIGJ1dCBtYXkgYmUgYW55IG5hbWUvdmFsdWUgcGFpciwg
cmVwcmVzZW50ZWQgaW4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgSlNPTiBmb3Jt
YXQuICBTZWUgYWxzbyBgZG9qby5pMThuLmdldExvY2FsaXphdGlvbmAuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgTG9hZCB0cmFuc2xhdGVkIHJlc291cmNlIGJ1bmRsZXMgcHJvdmlkZWQg
dW5kZXJuZWF0aCB0aGUgIm5scyIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZGly
ZWN0b3J5IHdpdGhpbiBhIHBhY2thZ2UuICBUcmFuc2xhdGVkIHJlc291cmNlcyBtYXkgYmUgbG9j
YXRlZCBpbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkaWZmZXJlbnQgcGFja2Fn
ZXMgdGhyb3VnaG91dCB0aGUgc291cmNlIHRyZWUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgRWFjaCBkaXJlY3RvcnkgaXMgbmFtZWQgZm9yIGEg
bG9jYWxlIGFzIHNwZWNpZmllZCBieSBSRkMgMzA2NiwKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgKGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMwNjYudHh0KSwgbm9ybWFsaXpl
ZCBpbiBsb3dlcmNhc2UuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIE5vdGUgdGhh
dCB0aGUgdHdvIGJ1bmRsZXMgaW4gdGhlIGV4YW1wbGUgZG8gbm90IGRlZmluZSBhbGwgdGhlCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNhbWUgdmFyaWFudHMuICBGb3IgYSBnaXZl
biBsb2NhbGUsIGJ1bmRsZXMgd2lsbCBiZSBsb2FkZWQgZm9yCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIHRoYXQgbG9jYWxlIGFuZCBhbGwgbW9yZSBnZW5lcmFsIGxvY2FsZXMgYWJv
dmUgaXQsIGluY2x1ZGluZyBhCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZhbGxi
YWNrIGF0IHRoZSByb290IGRpcmVjdG9yeS4gIEZvciBleGFtcGxlLCBhIGRlY2xhcmF0aW9uIGZv
cgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgImRlLWF0IiBsb2NhbGUgd2ls
bCBmaXJzdCBsb2FkIGBubHMvZGUtYXQvYnVuZGxlb25lLmpzYCwKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgdGhlbiBgbmxzL2RlL2J1bmRsZW9uZS5qc2AgYW5kIGZpbmFsbHkgYG5s
cy9idW5kbGVvbmUuanNgLiAgVGhlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRh
dGEgd2lsbCBiZSBmbGF0dGVuZWQgaW50byBhIHNpbmdsZSBPYmplY3Qgc28gdGhhdCBsb29rdXBz
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdpbGwgZm9sbG93IHRoaXMgY2FzY2Fk
aW5nIHBhdHRlcm4uICBBbiBvcHRpb25hbCBidWlsZCBzdGVwIGNhbgorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBwcmVsb2FkIHRoZSBidW5kbGVzIHRvIGF2b2lkIGRhdGEgcmVkdW5k
YW5jeSBhbmQgdGhlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5l
dHdvcmsgaGl0cyBub3JtYWxseSByZXF1aXJlZCB0byBsb2FkIHRoZXNlIHJlc291cmNlcy4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIG1vZHVsZU5hbWU6CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIG5hbWUgb2YgdGhlIHBhY2thZ2UgY29udGFpbmluZyB0
aGUgIm5scyIgZGlyZWN0b3J5IGluIHdoaWNoIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBidW5kbGUgaXMgZm91bmQKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIGJ1bmRsZU5hbWU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGJ1bmRs
ZSBuYW1lLCBpLmUuIHRoZSBmaWxlbmFtZSB3aXRob3V0IHRoZSAnLmpzJyBzdWZmaXguIFVzaW5n
ICJubHMiIGFzIGEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBidW5kbGUgbmFt
ZSBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSAibmxzIiBpcyB0aGUgbmFtZSBvZiB0aGUgZm9sZGVy
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoYXQgaG9sZHMgYnVuZGxlcy4gVXNp
bmcgIm5scyIgYXMgdGhlIGJ1bmRsZSBuYW1lIHdpbGwgY2F1c2UgcHJvYmxlbXMKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgd2l0aCB0aGUgY3VzdG9tIGJ1aWxkLgorICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gbG9jYWxlOgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB0aGUgbG9jYWxlIHRvIGxvYWQgKG9wdGlvbmFsKSAgQnkgZGVmYXVsdCwg
dGhlIGJyb3dzZXIncyB1c2VyCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGxvY2Fs
ZSBhcyBkZWZpbmVkIGJ5IGRvam8ubG9jYWxlCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBhdmFpbGFibGVGbGF0TG9jYWxlczoKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgYXZhaWxhYmxlLCBmbGF0dGVu
ZWQgbG9jYWxlcyBmb3IgdGhpcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBidW5k
bGUuIFRoaXMgYXJndW1lbnQgc2hvdWxkIG9ubHkgYmUgc2V0IGJ5IHRoZSBidWlsZCBwcm9jZXNz
LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBIHBhcnRpY3VsYXIgd2lkZ2V0IG1heSBk
ZWZpbmUgb25lIG9yIG1vcmUgcmVzb3VyY2UgYnVuZGxlcywKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgc3RydWN0dXJlZCBpbiBhIHByb2dyYW0gYXMgZm9sbG93cywgd2hlcmUgbW9k
dWxlTmFtZSBpcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBteWNvZGUubXl3aWRn
ZXQgYW5kIGJ1bmRsZU5hbWVzIGF2YWlsYWJsZSBpbmNsdWRlIGJ1bmRsZW9uZSBhbmQKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgYnVuZGxldHdvOgorICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICBteWNvZGUvCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbXl3aWRn
ZXQvCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBubHMv
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1bmRsZW9uZS5qcyAodGhlIGZhbGxiYWNrIHRyYW5zbGF0aW9uLCBFbmdsaXNoIGluIHRoaXMg
ZXhhbXBsZSkKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnVuZGxldHdvLmpzIChhbHNvIGEgZmFsbGJhY2sgdHJhbnNsYXRpb24pCisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlLwor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1bmRsZW9uZS5qcworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXR3by5qcworICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZS1hdC8KKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dW5kbGVvbmUuanMKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW4vCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGVtcHR5OyB1c2UgdGhlIGZhbGxiYWNrIHRyYW5zbGF0
aW9uKQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbi11cy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidW5kbGVvbmUuanMKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW4tZ2IvCisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlb25l
LmpzCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVzLworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1bmRsZW9uZS5qcworICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXR3by5qcworICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV0
YworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4KKyAgICAgICAgICAgICAgICAvLworCisgICAgICAgICAgICAgICAgZC5yZXF1aXJlKCJk
b2pvLmkxOG4iKTsKKyAgICAgICAgICAgICAgICBkLmkxOG4uX3JlcXVpcmVMb2NhbGl6YXRpb24u
YXBwbHkoZC5ob3N0ZW52LCBhcmd1bWVudHMpOworICAgICAgICB9OworCisKKyAgICAgICAgdmFy
IG9yZSA9IG5ldyBSZWdFeHAoIl4oKFteOi8/I10rKTopPygvLyhbXi8/I10qKSk/KFtePyNdKiko
XFw/KFteI10qKSk/KCMoLiopKT8kIiksCisgICAgICAgICAgICAgICAgaXJlID0gbmV3IFJlZ0V4
cCgiXigoKFteXFxbOl0rKTopPyhbXkBdKylAKT8oXFxbKFteXFxdXSspXFxdfChbXlxcWzpdKikp
KDooWzAtOV0rKSk/JCIpOworCisgICAgICAgIGRvam8uX1VybCA9IGZ1bmN0aW9uKC8qZG9qby5f
VXJsfFN0cmluZy4uLiovKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYW4gb2JqZWN0IHJl
cHJlc2VudGluZyBhIFVSTC4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgSXQgaXMg
bWFya2VkIGFzIHByaXZhdGUsIHNpbmNlIHdlIG1pZ2h0IGNvbnNpZGVyIHJlbW92aW5nCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG9yIHNpbXBsaWZ5aW5nIGl0LgorICAgICAgICAg
ICAgICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBF
YWNoIGFyZ3VtZW50IGlzIGV2YWx1YXRlZCBpbiBvcmRlciByZWxhdGl2ZSB0byB0aGUgbmV4dCB1
bnRpbAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhIGNhbm9uaWNhbCB1cmkgaXMg
cHJvZHVjZWQuIFRvIGdldCBhbiBhYnNvbHV0ZSBVcmkgcmVsYXRpdmUgdG8KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgZG9jdW1lbnQgdXNlOgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBuZXcgZG9qby5fVXJsKGRvY3VtZW50LmJhc2VVUkksIHVy
bCkKKworICAgICAgICAgICAgICAgIHZhciBuID0gbnVsbCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9hID0gYXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgdXJpID0gW19hWzBd
XTsKKyAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHVyaSBjb21wb25lbnRzIHJlbGF0aXZlIHRv
IGVhY2ggb3RoZXIKKyAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAxOyBpPF9hLmxlbmd0aDsg
aSsrKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFfYVtpXSl7IGNvbnRpbnVlOyB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBkb2Vzbid0IHN1cHBvcnQgdGhpcy5j
b25zdHJ1Y3RvciBzbyB3ZSBoYXZlIHRvIGJlIGV4cGxpY2l0CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVHJhY2tlZCAoYW5kIGZpeGVkKSBpbiBXZWJraXQgYnVnIDM1MzcuCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUzNworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJl
bG9iaiA9IG5ldyBkLl9VcmwoX2FbaV0rIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cmlvYmogPSBuZXcgZC5fVXJsKHVyaVswXSsiIik7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxvYmoucGF0aCA9
PSAiIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcmVsb2JqLnNjaGVtZSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcmVsb2JqLmF1dGhvcml0eSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcmVsb2JqLnF1ZXJ5CisgICAgICAgICAg
ICAgICAgICAgICAgICApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZWxv
YmouZnJhZ21lbnQgIT0gbil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJpb2JqLmZyYWdtZW50ID0gcmVsb2JqLmZyYWdtZW50OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbG9iaiA9
IHVyaW9iajsKKyAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKCFyZWxvYmouc2NoZW1l
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsb2JqLnNjaGVtZSA9IHVyaW9i
ai5zY2hlbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXJlbG9iai5h
dXRob3JpdHkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbG9i
ai5hdXRob3JpdHkgPSB1cmlvYmouYXV0aG9yaXR5OworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYocmVsb2JqLnBhdGguY2hhckF0KDApICE9ICIvIil7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IHVy
aW9iai5wYXRoLnN1YnN0cmluZygwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cmlvYmoucGF0aC5sYXN0SW5kZXhPZigiLyIpICsgMSkg
KyByZWxvYmoucGF0aDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHNlZ3MgPSBwYXRoLnNwbGl0KCIvIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgc2Vncy5sZW5n
dGg7IGorKyl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKHNlZ3Nbal0gPT0gIi4iKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbGF0dGVuICIuLyIgcmVm
ZXJlbmNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKGogPT0gc2Vncy5sZW5ndGggLSAxKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlZ3Nbal0gPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ3Muc3BsaWNl
KGosIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgai0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoaiA+IDAgJiYg
IShqID09IDEgJiYgc2Vnc1swXSA9PSAiIikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdzW2pdID09ICIuLiIgJiYg
c2Vnc1tqLTFdICE9ICIuLiIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsYXR0ZW4gIi4uLyIgcmVmZXJlbmNlcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKGogPT0gKHNlZ3MubGVuZ3RoIC0gMSkpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vncy5z
cGxpY2UoaiwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdzW2ogLSAxXSA9ICIiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1l
bHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2Vncy5zcGxpY2UoaiAtIDEsIDIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaiAtPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVsb2JqLnBhdGggPSBzZWdzLmpvaW4oIi8iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
dXJpID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICBpZihyZWxvYmouc2NoZW1lKXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLnB1c2gocmVsb2JqLnNjaGVtZSwgIjoi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
KHJlbG9iai5hdXRob3JpdHkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmku
cHVzaCgiLy8iLCByZWxvYmouYXV0aG9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5wdXNoKHJlbG9iai5wYXRoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKHJlbG9iai5xdWVyeSl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVyaS5wdXNoKCI/IiwgcmVsb2JqLnF1ZXJ5KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlbG9iai5mcmFnbWVudCl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5wdXNoKCIjIiwgcmVsb2JqLmZyYWdt
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB0aGlzLnVyaSA9IHVyaS5qb2luKCIiKTsKKworICAgICAgICAgICAgICAg
IC8vIGJyZWFrIHRoZSB1cmkgaW50byBpdHMgbWFpbiBjb21wb25lbnRzCisgICAgICAgICAgICAg
ICAgdmFyIHIgPSB0aGlzLnVyaS5tYXRjaChvcmUpOworCisgICAgICAgICAgICAgICAgdGhpcy5z
Y2hlbWUgPSByWzJdIHx8IChyWzFdID8gIiIgOiBuKTsKKyAgICAgICAgICAgICAgICB0aGlzLmF1
dGhvcml0eSA9IHJbNF0gfHwgKHJbM10gPyAiIiA6IG4pOworICAgICAgICAgICAgICAgIHRoaXMu
cGF0aCA9IHJbNV07IC8vIGNhbiBuZXZlciBiZSB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICB0
aGlzLnF1ZXJ5ID0gcls3XSB8fCAocls2XSA/ICIiIDogbik7CisgICAgICAgICAgICAgICAgdGhp
cy5mcmFnbWVudCAgPSByWzldIHx8IChyWzhdID8gIiIgOiBuKTsKKworICAgICAgICAgICAgICAg
IGlmKHRoaXMuYXV0aG9yaXR5ICE9IG4peworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2Vy
dmVyIGJhc2VkIG5hbWluZyBhdXRob3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSB0
aGlzLmF1dGhvcml0eS5tYXRjaChpcmUpOworCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnVzZXIgPSByWzNdIHx8IG47CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3Jk
ID0gcls0XSB8fCBuOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3N0ID0gcls2XSB8
fCByWzddOyAvLyBpcHY2IHx8IGlwdjQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9y
dCA9IHJbOV0gfHwgbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBk
b2pvLl9VcmwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMudXJp
OyB9OworCisgICAgICAgIGRvam8ubW9kdWxlVXJsID0gZnVuY3Rpb24oLypTdHJpbmcqL21vZHVs
ZSwgLypkb2pvLl9Vcmx8fFN0cmluZyovdXJsKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1
bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMgYSBgZG9qby5f
VXJsYCBvYmplY3QgcmVsYXRpdmUgdG8gYSBtb2R1bGUuCisgICAgICAgICAgICAgICAgLy8gICAg
ICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgcG5nUGF0aCA9
IGRvam8ubW9kdWxlVXJsKCJhY21lIiwiaW1hZ2VzL3NtYWxsLnBuZyIpOworICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICBjb25zb2xlLmRpcihwbmdQYXRoKTsgLy8gbGlzdCB0aGUgb2Jq
ZWN0IHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gY3JlYXRl
IGFuIGltYWdlIGFuZCBzZXQgaXQncyBzb3VyY2UgdG8gcG5nUGF0aCdzIHZhbHVlOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiaW1nIik7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIC8vIE5PVEU6IHdlIGFz
c2lnbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1cmwgb2JqZWN0CisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgIGltZy5zcmMgPSBwbmdQYXRoLnRvU3RyaW5nKCk7Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIC8vIGFkZCBvdXIgaW1hZ2UgdG8gdGhlIGRv
Y3VtZW50CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uYm9keSgpLmFwcGVu
ZENoaWxkKGltZyk7CisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICB5b3UgbWF5IGRlLXJlZmVyZW5jZSBhcyBmYXIgYXMgeW91
IGxpa2UgZG93biB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBo
aWVyYXJjaHkuICBUaGlzIGlzIHNvbWV0aW1lcyBoYW5keSB0byBhdm9pZCBsZW5naHR5IHJlbGF0
aXZlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHVybHMgb3IgZm9yIGJ1aWxkaW5n
IHBvcnRhYmxlIHN1Yi1wYWNrYWdlcy4gSW4gdGhpcyBleGFtcGxlLAorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICB0aGUgYGFjbWUud2lkZ2V0YCBhbmQgYGFjbWUudXRpbGAgZGlyZWN0
b3JpZXMgbWF5IGJlIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdW5k
ZXIgZGlmZmVyZW50IHJvb3RzIChzZWUgYGRvam8ucmVnaXN0ZXJNb2R1bGVQYXRoYCkgYnV0IHRo
ZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgbW9kdWxlcyB3aGljaCByZWZl
cmVuY2UgdGhlbSBjYW4gYmUgdW5hd2FyZSBvZiB0aGVpcgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICByZWxhdGl2ZSBsb2NhdGlvbnMgb24gdGhlIGZpbGVzeXN0ZW06CisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgIC8vIHNvbWV3aGVyZSBpbiBhIGNvbmZpZ3VyYXRpb24g
YmxvY2sKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5yZWdpc3Rlck1vZHVs
ZVBhdGgoImFjbWUud2lkZ2V0IiwgIi4uLy4uL2FjbWUvd2lkZ2V0Iik7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIGRvam8ucmVnaXN0ZXJNb2R1bGVQYXRoKCJhY21lLnV0aWwiLCAi
Li4vLi4vdXRpbCIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfAorICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICAvLyAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwKKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gY29kZSBpbiBhIG1vZHVsZSB1c2luZyBhY21l
IHJlc291cmNlcworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgdG1wbHRQYXRo
ID0gZG9qby5tb2R1bGVVcmwoImFjbWUud2lkZ2V0IiwidGVtcGxhdGVzL3RlbXBsYXRlLmh0bWwi
KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIGRhdGFQYXRoID0gZG9qby5t
b2R1bGVVcmwoImFjbWUudXRpbCIsInJlc291cmNlcy9kYXRhLmpzb24iKTsKKworICAgICAgICAg
ICAgICAgIHZhciBsb2MgPSBkLl9nZXRNb2R1bGVTeW1ib2xzKG1vZHVsZSkuam9pbignLycpOwor
ICAgICAgICAgICAgICAgIGlmKCFsb2MpeyByZXR1cm4gbnVsbDsgfQorICAgICAgICAgICAgICAg
IGlmKGxvYy5sYXN0SW5kZXhPZigiLyIpICE9IGxvYy5sZW5ndGgtMSl7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2MgKz0gIi8iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvL0lmIHRoZSBwYXRoIGlzIGFuIGFic29sdXRlIHBhdGggKHN0
YXJ0cyB3aXRoIGEgLyBvciBpcyBvbiBhbm90aGVyCisgICAgICAgICAgICAgICAgLy9kb21haW4v
eGRvbWFpbikgdGhlbiBkb24ndCBhZGQgdGhlIGJhc2VVcmwuCisgICAgICAgICAgICAgICAgdmFy
IGNvbG9uSW5kZXggPSBsb2MuaW5kZXhPZigiOiIpOworICAgICAgICAgICAgICAgIGlmKGxvYy5j
aGFyQXQoMCkgIT0gIi8iICYmIChjb2xvbkluZGV4ID09IC0xIHx8IGNvbG9uSW5kZXggPiBsb2Mu
aW5kZXhPZigiLyIpKSl7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2MgPSBkLmJhc2VVcmwg
KyBsb2M7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBk
Ll9VcmwobG9jLCB1cmwpOyAvLyBkb2pvLl9VcmwKKyAgICAgICAgfTsKKworCisKK30pKCk7CisK
Ky8qPT09PT0KK2Rvam8uaXNCcm93c2VyID0geworICAgICAgICAvLyAgICAgIGV4YW1wbGU6Cisg
ICAgICAgIC8vICAgICAgfCAgICAgICBpZihkb2pvLmlzQnJvd3Nlcil7IC4uLiB9Cit9OworCitk
b2pvLmlzRkYgPSB7CisgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgLy8gICAgICB8
ICAgICAgIGlmKGRvam8uaXNGRiA+IDEpeyAuLi4gfQorfTsKKworZG9qby5pc0lFID0geworICAg
ICAgICAvLyBleGFtcGxlOgorICAgICAgICAvLyAgICAgIHwgICAgICAgaWYoZG9qby5pc0lFID4g
Nil7CisgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIC8vIHdlIGFyZSBJRTcKKyAgICAg
ICAgLy8gICAgICB8ICAgICAgIH0KK307CisKK2Rvam8uaXNTYWZhcmkgPSB7CisgICAgICAgIC8v
ICAgICAgZXhhbXBsZToKKyAgICAgICAgLy8gICAgICB8ICAgICAgIGlmKGRvam8uaXNTYWZhcmkp
eyAuLi4gfQorICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgIC8vICAgICAgICAgICAg
ICBEZXRlY3QgaVBob25lOgorICAgICAgICAvLyAgICAgIHwgICAgICAgaWYoZG9qby5pc1NhZmFy
aSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoImlQaG9uZSIpICE9IC0xKXsKKyAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgLy8gd2UgYXJlIGlQaG9uZS4gTm90ZSwgaVBvZCB0
b3VjaCByZXBvcnRzICJpUG9kIiBhYm92ZSBhbmQgZmFpbHMgdGhpcyB0ZXN0LgorICAgICAgICAv
LyAgICAgIHwgICAgICAgfQorfTsKKworZG9qbyA9IHsKKyAgICAgICAgLy8gaXNCcm93c2VyOiBC
b29sZWFuCisgICAgICAgIC8vICAgICAgICAgICAgICBUcnVlIGlmIHRoZSBjbGllbnQgaXMgYSB3
ZWItYnJvd3NlcgorICAgICAgICBpc0Jyb3dzZXI6IHRydWUsCisgICAgICAgIC8vICAgICAgaXNG
RjogTnVtYmVyIHwgdW5kZWZpbmVkCisgICAgICAgIC8vICAgICAgICAgICAgICBWZXJzaW9uIGFz
IGEgTnVtYmVyIGlmIGNsaWVudCBpcyBGaXJlRm94LiB1bmRlZmluZWQgb3RoZXJ3aXNlLiBDb3Jy
ZXNwb25kcyB0bworICAgICAgICAvLyAgICAgICAgICAgICAgbWFqb3IgZGV0ZWN0ZWQgRmlyZUZv
eCB2ZXJzaW9uICgxLjUsIDIsIDMsIGV0Yy4pCisgICAgICAgIGlzRkY6IDIsCisgICAgICAgIC8v
ICAgICAgaXNJRTogTnVtYmVyIHwgdW5kZWZpbmVkCisgICAgICAgIC8vICAgICAgICAgICAgICBW
ZXJzaW9uIGFzIGEgTnVtYmVyIGlmIGNsaWVudCBpcyBNU0lFKFBDKS4gdW5kZWZpbmVkIG90aGVy
d2lzZS4gQ29ycmVzcG9uZHMgdG8KKyAgICAgICAgLy8gICAgICAgICAgICAgIG1ham9yIGRldGVj
dGVkIElFIHZlcnNpb24gKDYsIDcsIDgsIGV0Yy4pCisgICAgICAgIGlzSUU6IDYsCisgICAgICAg
IC8vICAgICAgaXNLaHRtbDogTnVtYmVyIHwgdW5kZWZpbmVkCisgICAgICAgIC8vICAgICAgICAg
ICAgICBWZXJzaW9uIGFzIGEgTnVtYmVyIGlmIGNsaWVudCBpcyBhIEtIVE1MIGJyb3dzZXIuIHVu
ZGVmaW5lZCBvdGhlcndpc2UuIENvcnJlc3BvbmRzIHRvIG1ham9yCisgICAgICAgIC8vICAgICAg
ICAgICAgICBkZXRlY3RlZCB2ZXJzaW9uLgorICAgICAgICBpc0todG1sOiAwLAorICAgICAgICAv
LyAgICAgIGlzV2ViS2l0OiBOdW1iZXIgfCB1bmRlZmluZWQKKyAgICAgICAgLy8gICAgICAgICAg
ICAgIFZlcnNpb24gYXMgYSBOdW1iZXIgaWYgY2xpZW50IGlzIGEgV2ViS2l0LWRlcml2ZWQgYnJv
d3NlciAoS29ucXVlcm9yLAorICAgICAgICAvLyAgICAgICAgICAgICAgU2FmYXJpLCBDaHJvbWUs
IGV0Yy4pLiB1bmRlZmluZWQgb3RoZXJ3aXNlLgorICAgICAgICBpc1dlYktpdDogMCwKKyAgICAg
ICAgLy8gICAgICBpc01vemlsbGE6IE51bWJlciB8IHVuZGVmaW5lZAorICAgICAgICAvLyAgICAg
ICAgICAgICAgVmVyc2lvbiBhcyBhIE51bWJlciBpZiBjbGllbnQgaXMgYSBNb3ppbGxhLWJhc2Vk
IGJyb3dzZXIgKEZpcmVmb3gsCisgICAgICAgIC8vICAgICAgICAgICAgICBTZWFNb25rZXkpLiB1
bmRlZmluZWQgb3RoZXJ3aXNlLiBDb3JyZXNwb25kcyB0byBtYWpvciBkZXRlY3RlZCB2ZXJzaW9u
LgorICAgICAgICBpc01vemlsbGE6IDAsCisgICAgICAgIC8vICAgICAgaXNPcGVyYTogTnVtYmVy
IHwgdW5kZWZpbmVkCisgICAgICAgIC8vICAgICAgICAgICAgICBWZXJzaW9uIGFzIGEgTnVtYmVy
IGlmIGNsaWVudCBpcyBPcGVyYS4gdW5kZWZpbmVkIG90aGVyd2lzZS4gQ29ycmVzcG9uZHMgdG8K
KyAgICAgICAgLy8gICAgICAgICAgICAgIG1ham9yIGRldGVjdGVkIHZlcnNpb24uCisgICAgICAg
IGlzT3BlcmE6IDAsCisgICAgICAgIC8vICAgICAgaXNTYWZhcmk6IE51bWJlciB8IHVuZGVmaW5l
ZAorICAgICAgICAvLyAgICAgICAgICAgICAgVmVyc2lvbiBhcyBhIE51bWJlciBpZiBjbGllbnQg
aXMgU2FmYXJpIG9yIGlQaG9uZS4gdW5kZWZpbmVkIG90aGVyd2lzZS4KKyAgICAgICAgaXNTYWZh
cmk6IDAsCisgICAgICAgIC8vICAgICAgaXNDaHJvbWU6IE51bWJlciB8IHVuZGVmaW5lZAorICAg
ICAgICAvLyAgICAgICAgICAgICAgVmVyc2lvbiBhcyBhIE51bWJlciBpZiBjbGllbnQgaXMgQ2hy
b21lIGJyb3dzZXIuIHVuZGVmaW5lZCBvdGhlcndpc2UuCisgICAgICAgIGlzQ2hyb21lOiAwCisg
ICAgICAgIC8vICAgICAgaXNNYWM6IEJvb2xlYW4KKyAgICAgICAgLy8gICAgICAgICAgICAgIFRy
dWUgaWYgdGhlIGNsaWVudCBydW5zIG9uIE1hYworfQorPT09PT0qLworaWYodHlwZW9mIHdpbmRv
dyAhPSAndW5kZWZpbmVkJyl7CisgICAgICAgIGRvam8uaXNCcm93c2VyID0gdHJ1ZTsKKyAgICAg
ICAgZG9qby5fbmFtZSA9ICJicm93c2VyIjsKKworCisgICAgICAgIC8vIGF0dGVtcHQgdG8gZmln
dXJlIG91dCB0aGUgcGF0aCB0byBkb2pvIGlmIGl0IGlzbid0IHNldCBpbiB0aGUgY29uZmlnCisg
ICAgICAgIChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIHZhciBkID0gZG9qbzsKKworICAg
ICAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBzY29wZSBwcm90ZWN0aW9uIGNsb3N1cmUuIFdlIHNl
dCBicm93c2VyIHZlcnNpb25zIGFuZCBncmFiCisgICAgICAgICAgICAgICAgLy8gdGhlIFVSTCB3
ZSB3ZXJlIGxvYWRlZCBmcm9tIGhlcmUuCisKKyAgICAgICAgICAgICAgICAvLyBncmFiIHRoZSBu
b2RlIHdlIHdlcmUgbG9hZGVkIGZyb20KKyAgICAgICAgICAgICAgICBpZihkb2N1bWVudCAmJiBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSl7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciByZVBrZyA9IC9kb2pvKFwueGQpP1wuanMoXFd8JCkv
aTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxl
bmd0aDsgaSsrKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNj
cmlwdHNbaV0uZ2V0QXR0cmlidXRlKCJzcmMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoIXNyYyl7IGNvbnRpbnVlOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBtID0gc3JjLm1hdGNoKHJlUGtnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYobSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZmluZCBvdXQgd2hlcmUgd2UgY2FtZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYoIWQuY29uZmlnLmJhc2VVcmwpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5jb25maWcuYmFzZVVybCA9IHNyYy5zdWJzdHJp
bmcoMCwgbS5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBmaW5kIG91
dCBpZiB3ZSBuZWVkIHRvIG1vZGlmeSBvdXIgYmVoYXZpb3IKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgY2ZnID0gKHNjcmlwdHNbaV0uZ2V0QXR0cmlidXRlKCJk
akNvbmZpZyIpIHx8IHNjcmlwdHNbaV0uZ2V0QXR0cmlidXRlKCJkYXRhLWRvam8tY29uZmlnIikp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNmZyl7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZnbyA9IGV2
YWwoIih7ICIrY2ZnKyIgfSkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcih2YXIgeCBpbiBjZmdvKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9qby5jb25maWdbeF0gPSBjZmdvW3hd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gImZpcnN0IERvam8gd2lucyIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkLmJhc2VVcmwgPSBkLmNvbmZpZy5i
YXNlVXJsOworCisgICAgICAgICAgICAgICAgLy8gZmlsbCBpbiB0aGUgcmVuZGVyaW5nIHN1cHBv
cnQgaW5mb3JtYXRpb24gaW4gZG9qby5yZW5kZXIuKgorICAgICAgICAgICAgICAgIHZhciBuID0g
bmF2aWdhdG9yOworICAgICAgICAgICAgICAgIHZhciBkdWEgPSBuLnVzZXJBZ2VudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdiA9IG4uYXBwVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR2ID0gcGFyc2VGbG9hdChkYXYpOworCisgICAgICAgICAgICAgICAgaWYoZHVhLmlu
ZGV4T2YoIk9wZXJhIikgPj0gMCl7IGQuaXNPcGVyYSA9IHR2OyB9CisgICAgICAgICAgICAgICAg
aWYoZHVhLmluZGV4T2YoIkFkb2JlQUlSIikgPj0gMCl7IGQuaXNBSVIgPSAxOyB9CisgICAgICAg
ICAgICAgICAgZC5pc0todG1sID0gKGRhdi5pbmRleE9mKCJLb25xdWVyb3IiKSA+PSAwKSA/IHR2
IDogMDsKKyAgICAgICAgICAgICAgICBkLmlzV2ViS2l0ID0gcGFyc2VGbG9hdChkdWEuc3BsaXQo
IldlYktpdC8iKVsxXSkgfHwgdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGQuaXNDaHJvbWUg
PSBwYXJzZUZsb2F0KGR1YS5zcGxpdCgiQ2hyb21lLyIpWzFdKSB8fCB1bmRlZmluZWQ7CisgICAg
ICAgICAgICAgICAgZC5pc01hYyA9IGRhdi5pbmRleE9mKCJNYWNpbnRvc2giKSA+PSAwOworCisg
ICAgICAgICAgICAgICAgLy8gc2FmYXJpIGRldGVjdGlvbiBkZXJpdmVkIGZyb206CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ludGVy
bmV0L3NhZmFyaS9mYXEuaHRtbCNhbmNob3IyCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ludGVybmV0L3NhZmFyaS91YW1hdHJpeC5o
dG1sCisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gTWF0aC5tYXgoZGF2LmluZGV4T2YoIldl
YktpdCIpLCBkYXYuaW5kZXhPZigiU2FmYXJpIiksIDApOworICAgICAgICAgICAgICAgIGlmKGlu
ZGV4ICYmICFkb2pvLmlzQ2hyb21lKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0
byBncmFiIHRoZSBleHBsaWNpdCBTYWZhcmkgdmVyc2lvbiBmaXJzdC4gSWYgd2UgZG9uJ3QgZ2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmUsIGxvb2sgZm9yIGxlc3MgdGhhbiA0MTku
MyBhcyB0aGUgaW5kaWNhdGlvbiB0aGF0IHdlJ3JlIG9uIHNvbWV0aGluZworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gIlNhZmFyaSAyLWlzaCIuCisgICAgICAgICAgICAgICAgICAgICAgICBk
LmlzU2FmYXJpID0gcGFyc2VGbG9hdChkYXYuc3BsaXQoIlZlcnNpb24vIilbMV0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYoIWQuaXNTYWZhcmkgfHwgcGFyc2VGbG9hdChkYXYuc3Vic3Ry
KGluZGV4ICsgNykpIDw9IDQxOS4zKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZC5pc1NhZmFyaSA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGR1YS5pbmRleE9mKCJH
ZWNrbyIpID49IDAgJiYgIWQuaXNLaHRtbCAmJiAhZC5pc1dlYktpdCl7IGQuaXNNb3ppbGxhID0g
ZC5pc01veiA9IHR2OyB9CisgICAgICAgICAgICAgICAgaWYoZC5pc01veil7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvL1dlIHJlYWxseSBuZWVkIHRvIGdldCBhd2F5IGZyb20gdGhpcy4gQ29u
c2lkZXIgYSBzYW5lIGlzR2Vja28gYXBwcm9hY2ggZm9yIHRoZSBmdXR1cmUuCisgICAgICAgICAg
ICAgICAgICAgICAgICBkLmlzRkYgPSBwYXJzZUZsb2F0KGR1YS5zcGxpdCgiRmlyZWZveC8iKVsx
XSB8fCBkdWEuc3BsaXQoIk1pbmVmaWVsZC8iKVsxXSkgfHwgdW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihkb2N1bWVudC5hbGwgJiYgIWQuaXNPcGVyYSl7
CisgICAgICAgICAgICAgICAgICAgICAgICBkLmlzSUUgPSBwYXJzZUZsb2F0KGRhdi5zcGxpdCgi
TVNJRSAiKVsxXSkgfHwgdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgLy9JbiBj
YXNlcyB3aGVyZSB0aGUgcGFnZSBoYXMgYW4gSFRUUCBoZWFkZXIgb3IgTUVUQSB0YWcgd2l0aAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy9YLVVBLUNvbXBhdGlibGUsIHRoZW4gaXQgaXMgaW4g
ZW11bGF0aW9uIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAvL01ha2Ugc3VyZSBpc0lF
IHJlZmxlY3RzIHRoZSBkZXNpcmVkIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAv
L2RvY3VtZW50LmRvY3VtZW50TW9kZSBvZiA1IG1lYW5zIHF1aXJrcyBtb2RlLgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy9Pbmx5IHN3aXRjaCB0aGUgdmFsdWUgaWYgZG9jdW1lbnRNb2RlJ3Mg
bWFqb3IgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyBkaWZmZXJlbnQgZnJv
bSBpc0lFJ3MgbWFqb3IgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2Rl
ID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYobW9k
ZSAmJiBtb2RlICE9IDUgJiYgTWF0aC5mbG9vcihkLmlzSUUpICE9IG1vZGUpeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkLmlzSUUgPSBtb2RlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vV29ya2Fyb3Vu
ZCB0byBnZXQgbG9jYWwgZmlsZSBsb2FkcyBvZiBkb2pvIHRvIHdvcmsgb24gSUUgNworICAgICAg
ICAgICAgICAgIC8vYnkgZm9yY2luZyB0byBub3QgdXNlIG5hdGl2ZSB4aHIuCisgICAgICAgICAg
ICAgICAgaWYoZG9qby5pc0lFICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gImZpbGU6
Iil7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2pvLmNvbmZpZy5pZUZvcmNlQWN0aXZlWFho
cj10cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkLmlzUXVpcmtzID0gZG9jdW1lbnQuY29tcGF0TW9kZSA9PSAiQmFja0NvbXBhdCI7CisK
KyAgICAgICAgICAgICAgICAvLyBUT0RPOiBpcyB0aGUgSFRNTCBMQU5HIGF0dHJpYnV0ZSByZWxl
dmFudD8KKyAgICAgICAgICAgICAgICBkLmxvY2FsZSA9IGRvam8uY29uZmlnLmxvY2FsZSB8fCAo
ZC5pc0lFID8gbi51c2VyTGFuZ3VhZ2UgOiBuLmxhbmd1YWdlKS50b0xvd2VyQ2FzZSgpOworCisg
ICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgbGlrZWxp
aG9vZDsgdGhpcyB3aWxsIGNoYW5nZSBpbiB0aW1lLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkLl9YTUxIVFRQX1BST0dJRFMgPSBbJ01zeG1sMi5YTUxIVFRQJywgJ01pY3Jvc29m
dC5YTUxIVFRQJywgJ01zeG1sMi5YTUxIVFRQLjQuMCddOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGQuX3hock9iaiA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IGRvZXMgdGhlIHdvcmsgb2YgcG9ydGFibHkgZ2VuZXJhdGluZyBhIG5ldyBYTUxIVFRQUmVxdWVz
dCBvYmplY3QuCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHR0cCwgbGFzdF9lOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRvam8uaXNJ
RSB8fCAhZG9qby5jb25maWcuaWVGb3JjZUFjdGl2ZVhYaHIpeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnl7IGh0dHAgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsgfWNhdGNoKGUpe30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFodHRwKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBpPTA7IGk8MzsgKytpKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ2lkID0gZC5f
WE1MSFRUUF9QUk9HSURTW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGh0dHAgPSBuZXcgQWN0aXZlWE9iamVjdChwcm9naWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RfZSA9IGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoaHR0cCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkLl9YTUxIVFRQX1BST0dJRFMgPSBbcHJvZ2lkXTsgIC8vIHNvIGZhc3RlciBuZXh0
IHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZighaHR0cCl7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiWE1MSFRU
UCBub3QgYXZhaWxhYmxlOiAiK2xhc3RfZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodHRwOyAvLyBYTUxIVFRQUmVxdWVzdCBp
bnN0YW5jZQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGQuX2lzRG9jdW1l
bnRPayA9IGZ1bmN0aW9uKGh0dHApeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXQg
PSBodHRwLnN0YXR1cyB8fCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscCA9
IGxvY2F0aW9uLnByb3RvY29sOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0
ID49IDIwMCAmJiBzdGF0IDwgMzAwKSB8fCAgIC8vIEJvb2xlYW4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdCA9PSAzMDQgfHwgICAgICAgICAgICAgICAgICAvLyBhbGxvdyBh
bnkgMlhYIHJlc3BvbnNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dCA9PSAxMjIzIHx8ICAgICAgICAgICAgICAgICAvLyBnZXQgaXQgb3V0IG9mIHRoZSBjYWNoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIG1hbmdsZWQgdGhlIHN0YXR1cyBjb2RlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIG1hbmdsZWQg
dGhlIHN0YXR1cyBjb2RlIE9SIHdlJ3JlIFRpdGFuaXVtL2Jyb3dzZXIgY2hyb21lL2Nocm9tZSBl
eHRlbnNpb24gcmVxdWVzdGluZyBhIGxvY2FsIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCFzdGF0ICYmIChscCA9PSAiZmlsZToiIHx8IGxwID09ICJjaHJvbWU6IiB8fCBs
cCA9PSAiY2hyb21lLWV4dGVuc2lvbjoiIHx8IGxwID09ICJhcHA6IikpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vU2VlIGlmIGJhc2UgdGFnIGlzIGluIHVzZS4KKyAg
ICAgICAgICAgICAgICAvL1RoaXMgaXMgdG8gZml4IGh0dHA6Ly90cmFjLmRvam90b29sa2l0Lm9y
Zy90aWNrZXQvMzk3MywKKyAgICAgICAgICAgICAgICAvL2J1dCByZWFsbHksIHdlIG5lZWQgdG8g
ZmluZCBvdXQgaG93IHRvIGdldCByaWQgb2YgdGhlIGRvam8uX1VybCByZWZlcmVuY2UKKyAgICAg
ICAgICAgICAgICAvL2JlbG93IGFuZCBzdGlsbCBoYXZlIERPSCB3b3JrIHdpdGggdGhlIGRvam8u
aTE4biB0ZXN0IGZvbGxvd2luZyBzb21lIG90aGVyCisgICAgICAgICAgICAgICAgLy90ZXN0IHRo
YXQgdXNlcyB0aGUgdGVzdCBmcmFtZSB0byBsb2FkIGEgZG9jdW1lbnQgKHRyYWMgIzI3NTcpLgor
ICAgICAgICAgICAgICAgIC8vT3BlcmEgc3RpbGwgaGFzIHByb2JsZW1zLCBidXQgcGVyaGFwcyBh
IGxhcmdlciBpc3N1ZSBvZiBiYXNlIHRhZyBzdXBwb3J0CisgICAgICAgICAgICAgICAgLy93aXRo
IFhIUiByZXF1ZXN0cyAoaGFzQmFzZSBpcyB0cnVlLCBidXQgdGhlIHJlcXVlc3QgaXMgc3RpbGwg
bWFkZSB0byBkb2N1bWVudAorICAgICAgICAgICAgICAgIC8vcGF0aCwgbm90IGJhc2UgcGF0aCku
CisgICAgICAgICAgICAgICAgdmFyIG93bG9jID0gd2luZG93LmxvY2F0aW9uKyIiOworICAgICAg
ICAgICAgICAgIHZhciBiYXNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJhc2Ui
KTsKKyAgICAgICAgICAgICAgICB2YXIgaGFzQmFzZSA9IChiYXNlICYmIGJhc2UubGVuZ3RoID4g
MCk7CisKKyAgICAgICAgICAgICAgICBkLl9nZXRUZXh0ID0gZnVuY3Rpb24oLypVUkkqLyB1cmks
IC8qQm9vbGVhbiovIGZhaWxfb2speworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFy
eTogUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCB1cmkgYW5kIHJldHVybiB0aG9z
ZSBjb250ZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVyaToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBIHJlbGF0aXZlIG9yIGFic29sdXRlIHVyaS4g
SWYgYWJzb2x1dGUsIGl0IHN0aWxsIG11c3QgYmUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICB0aGUgc2FtZSAiZG9tYWluIiBhcyB3ZSBhcmUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBmYWlsX29rOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIERlZmF1bHQgZmFsc2UuIElmIGZhaWxfb2sgYW5kIGxvYWRpbmcgZmFpbHMsIHJl
dHVybiBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaW5zdGVh
ZCBvZiB0aHJvd2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnM6IFRoZSBy
ZXNwb25zZSB0ZXh0LiBudWxsIGlzIHJldHVybmVkIHdoZW4gdGhlcmUgaXMgYQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZhaWx1cmUgYW5kIGZhaWx1cmUgaXMgb2th
eSAoYW4gZXhjZXB0aW9uIG90aGVyd2lzZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tk9URTogbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgc2NvcGUgc3dpdGNoZXMgaWUuIHRoaXMuX3ho
ck9iaigpCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHR0cCA9IGQuX3hock9iaigpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZighaGFzQmFzZSAmJiBkb2pvLl9VcmwpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSAobmV3IGRvam8uX1VybChvd2xvYywg
dXJpKSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoZC5jb25maWcuY2FjaGVCdXN0KXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgd2UgaGF2ZSBhIHN0cmluZyBiZWZvcmUgc3RyaW5n
IG1ldGhvZHMgYXJlIHVzZWQgb24gdXJpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVyaSArPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpICs9ICh1cmku
aW5kZXhPZigiPyIpID09IC0xID8gIj8iIDogIiYiKSArIFN0cmluZyhkLmNvbmZpZy5jYWNoZUJ1
c3QpLnJlcGxhY2UoL1xXKy9nLCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgaHR0cC5vcGVuKCdHRVQnLCB1cmksIGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aHR0cC5zZW5kKG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZC5f
aXNEb2N1bWVudE9rKGh0dHApKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZXJyID0gRXJyb3IoIlVuYWJsZSB0byBsb2FkICIrdXJpKyIgc3RhdHVzOiIrIGh0
dHAuc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIu
c3RhdHVzID0gaHR0cC5zdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyLnJlc3BvbnNlVGV4dCA9IGh0dHAucmVzcG9uc2VUZXh0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmYWlsX29rKXsgcmV0dXJuIG51bGw7IH0g
Ly8gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRocm93IHRoZSBl
eGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodHRw
LnJlc3BvbnNlVGV4dDsgLy8gU3RyaW5nCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorCisgICAgICAgICAgICAgICAgdmFyIF93ID0gd2luZG93OworICAgICAgICAgICAgICAg
IHZhciBfaGFuZGxlTm9kZUV2ZW50ID0gZnVuY3Rpb24oLypTdHJpbmcqL2V2dE5hbWUsIC8qRnVu
Y3Rpb24qL2ZwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbm9uLWRlc3RydWN0aXZlbHkgYWRkcyB0
aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHRvIHRoZSBub2RlJ3MKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBldnROYW1lIGhhbmRsZXIuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBldnROYW1lOiBzaG91bGQgYmUgaW4gdGhlIGZvcm0gIm9uY2xpY2siIGZvciAib25j
bGljayIgaGFuZGxlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgeW91
IHBhc3MgaW4gdGhlICJvbiIgcGFydC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSA9
IF93LmF0dGFjaEV2ZW50IHx8IF93LmFkZEV2ZW50TGlzdGVuZXI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBldnROYW1lID0gX3cuYXR0YWNoRXZlbnQgPyBldnROYW1lIDogZXZ0TmFtZS5zdWJz
dHJpbmcoMik7CisgICAgICAgICAgICAgICAgICAgICAgICBfYShldnROYW1lLCBmdW5jdGlvbigp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcC5hcHBseShfdywgYXJndW1lbnRz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9
OworCisKKyAgICAgICAgICAgICAgICBkLl93aW5kb3dVbmxvYWRlcnMgPSBbXTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBkLndpbmRvd1VubG9hZGVkID0gZnVuY3Rpb24oKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgc2lnbmFsIGZpcmVkIGJ5IGltcGVuZGluZyB3aW5kb3cgZGVz
dHJ1Y3Rpb24uIFlvdSBtYXkgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgZG9qby5hZGRPbldpbmRvd1VubG9hZCgpIHRvIHJlZ2lzdGVyIGEgbGlzdGVuZXIgZm9y
IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBldmVudC4gTk9U
RTogaWYgeW91IHdpc2ggdG8gZG9qby5jb25uZWN0KCkgdG8gdGhpcyBtZXRob2QKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0byBwZXJmb3JtIHBhZ2UvYXBwbGljYXRp
b24gY2xlYW51cCwgYmUgYXdhcmUgdGhhdCB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgZXZlbnQgV0lMTCBOT1QgZmlyZSBpZiBubyBoYW5kbGVyIGhhcyBiZWVu
IHJlZ2lzdGVyZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IGRvam8uYWRkT25XaW5kb3dVbmxvYWQuIFRoaXMgYmVoYXZpb3Igc3RhcnRlZCBpbiBEb2pvIDEu
My4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBQcmV2aW91cyB2ZXJz
aW9ucyBhbHdheXMgdHJpZ2dlcmVkIGRvam8ud2luZG93VW5sb2FkZWQuIFNlZQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8uYWRkT25XaW5kb3dVbmxvYWQgZm9y
IG1vcmUgaW5mby4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtbGwgPSBkLl93aW5kb3dV
bmxvYWRlcnM7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShtbGwubGVuZ3RoKXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1sbC5wb3AoKSkoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBudWxsOworICAgICAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICB2YXIgX29uV2luZG93VW5sb2FkQXR0YWNo
ZWQgPSAwOworICAgICAgICAgICAgICAgIGQuYWRkT25XaW5kb3dVbmxvYWQgPSBmdW5jdGlvbigv
Kk9iamVjdD98RnVuY3Rpb24/Ki9vYmosIC8qU3RyaW5nfEZ1bmN0aW9uPyovZnVuY3Rpb25OYW1l
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgcmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgdHJpZ2dl
cmVkIHdoZW4gd2luZG93Lm9udW5sb2FkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgZmlyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0
aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSBmaXJzdCB0
aW1lIHRoYXQgYWRkT25XaW5kb3dVbmxvYWQgaXMgY2FsbGVkIERvam8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICB3aWxsIHJlZ2lzdGVyIGEgcGFnZSBsaXN0ZW5lciB0
byB0cmlnZ2VyIHlvdXIgdW5sb2FkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgaGFuZGxlciB3aXRoLiBOb3RlIHRoYXQgcmVnaXN0ZXJpbmcgdGhlc2UgaGFuZGxlcnMg
bWF5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZGVzdG9yeSAiZmFz
dGJhY2siIHBhZ2UgY2FjaGluZyBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpdC4gQmUgY2FyZWZ1bCB0cnlpbmcgdG8gbW9k
aWZ5IHRoZSBET00gb3IgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgSmF2YVNjcmlwdCBwcm9wZXJ0aWVzIGR1cmluZyB0aGlzIHBoYXNlIG9mIHBhZ2UgdW5s
b2FkaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZXkgbWF5
IG5vdCBhbHdheXMgYmUgYXZhaWxhYmxlLiBDb25zaWRlcgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIGRvam8uYWRkT25VbmxvYWQoKSBpZiB5b3UgbmVlZCB0byBtb2Rp
ZnkgdGhlIERPTSBvciBkbworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IGhlYXZ5IEphdmFTY3JpcHQgd29yayBzaW5jZSBpdCBmaXJlcyBhdCB0aGUgZXFpdmFsZW50IG9m
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIHBhZ2UncyAib25i
ZWZvcmV1bmxvYWQiIGV2ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmFkZE9uV2luZG93
VW5sb2FkKGZ1bmN0aW9uUG9pbnRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICBkb2pvLmFkZE9uV2luZG93VW5sb2FkKG9iamVjdCwgImZ1bmN0aW9uTmFtZSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uYWRkT25XaW5kb3dV
bmxvYWQob2JqZWN0LCBmdW5jdGlvbigpeyAvKiAuLi4gKi99KTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgZC5fb250byhkLl93aW5kb3dVbmxvYWRlcnMsIG9iaiwgZnVuY3Rpb25OYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFfb25XaW5kb3dVbmxvYWRBdHRhY2hlZCl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbldpbmRvd1VubG9hZEF0dGFjaGVkID0g
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2hhbmRsZU5vZGVFdmVudCgib251
bmxvYWQiLCBkLndpbmRvd1VubG9hZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgdmFyIF9vblVubG9hZEF0dGFjaGVk
ID0gMDsKKyAgICAgICAgICAgICAgICBkLmFkZE9uVW5sb2FkID0gZnVuY3Rpb24oLypPYmplY3Q/
fEZ1bmN0aW9uPyovb2JqLCAvKlN0cmluZ3xGdW5jdGlvbj8qL2Z1bmN0aW9uTmFtZSl7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIHRyaWdnZXJlZCB3aGVu
IHRoZSBwYWdlIHVubG9hZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2Ny
aXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSBmaXJz
dCB0aW1lIHRoYXQgYWRkT25VbmxvYWQgaXMgY2FsbGVkIERvam8gd2lsbAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHJlZ2lzdGVyIGEgcGFnZSBsaXN0ZW5lciB0byB0
cmlnZ2VyIHlvdXIgdW5sb2FkIGhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICB3aXRoLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJbiBhIGJyb3dzZXIgZW52aXJvbWVudCwgdGhl
IGZ1bmN0aW9ucyB3aWxsIGJlIHRyaWdnZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGR1cmluZyB0aGUgd2luZG93Lm9uYmVmb3JldW5sb2FkIGV2ZW50LiBCZSBj
YXJlZnVsIG9mIGRvaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
dG9vIG11Y2ggd29yayBpbiBhbiB1bmxvYWQgaGFuZGxlci4gb25iZWZvcmV1bmxvYWQgY2FuIGJl
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdHJpZ2dlcmVkIGlmIGEg
bGluayB0byBkb3dubG9hZCBhIGZpbGUgaXMgY2xpY2tlZCwgb3IgaWYKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgbGluayBpcyBhIGphdmFzY3JpcHQ6IGxpbmsu
IEluIHRoZXNlIGNhc2VzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBvbmJlZm9yZXVubG9hZCBldmVudCBmaXJlcywgYnV0IHRoZSBkb2N1bWVudCBpcyBub3QK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhY3R1YWxseSBkZXN0cm95
ZWQuIFNvIGJlIGNhcmVmdWwgYWJvdXQgZG9pbmcgZGVzdHJ1Y3RpdmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBvcGVyYXRpb25zIGluIGEgZG9qby5hZGRPblVubG9h
ZCBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgRnVydGhlciBub3RlIHRoYXQgY2FsbGluZyBkb2pvLmFk
ZE9uVW5sb2FkIHdpbGwgcHJldmVudAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGJyb3dzZXJzIGZyb20gdXNpbmcgYSAiZmFzdCBiYWNrIiBjYWNoZSB0byBtYWtlIHBh
Z2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBsb2FkaW5nIHZpYSBi
YWNrIGJ1dHRvbiBpbnN0YW50YW5lb3VzLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhh
bXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmFkZE9u
VW5sb2FkKGZ1bmN0aW9uUG9pbnRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICBkb2pvLmFkZE9uVW5sb2FkKG9iamVjdCwgImZ1bmN0aW9uTmFtZSIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5hZGRPblVubG9hZChvYmplY3Qs
IGZ1bmN0aW9uKCl7IC8qIC4uLiAqL30pOworCisgICAgICAgICAgICAgICAgICAgICAgICBkLl9v
bnRvKGQuX3VubG9hZGVycywgb2JqLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoIV9vblVubG9hZEF0dGFjaGVkKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX29uVW5sb2FkQXR0YWNoZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfaGFuZGxlTm9kZUV2ZW50KCJvbmJlZm9yZXVubG9hZCIsIGRvam8udW5sb2FkZWQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAg
fSkoKTsKKworICAgICAgICAvL1NUQVJUIERPTUNvbnRlbnRMb2FkZWQKKyAgICAgICAgZG9qby5f
aW5pdEZpcmVkID0gZmFsc2U7CisgICAgICAgIGRvam8uX2xvYWRJbml0ID0gZnVuY3Rpb24oZSl7
CisgICAgICAgICAgICAgICAgaWYoZG9qby5fc2Nyb2xsSW50ZXJ2YWxJZCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjbGVhckludGVydmFsKGRvam8uX3Njcm9sbEludGVydmFsSWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZG9qby5fc2Nyb2xsSW50ZXJ2YWxJZCA9IDA7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoIWRvam8uX2luaXRGaXJlZCl7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkb2pvLl9pbml0RmlyZWQgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvL0hlbHAgb3V0IElFIHRvIGF2b2lkIG1lbW9yeSBsZWFrLgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYoIWRvam8uY29uZmlnLmFmdGVyT25Mb2FkICYmIHdpbmRvdy5k
ZXRhY2hFdmVudCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kZXRh
Y2hFdmVudCgib25sb2FkIiwgZG9qby5fbG9hZEluaXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZihkb2pvLl9pbkZsaWdodENvdW50ID09
IDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2pvLl9tb2R1bGVzTG9hZGVk
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYoIWRvam8uY29uZmlnLmFmdGVyT25Mb2FkKXsKKyAgICAgICAgICAg
ICAgICBpZihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vU3RhbmRhcmRzLiBIb29yYXkhIEFzc3VtcHRpb24gaGVyZSB0aGF0IGlmIHN0YW5kYXJk
cyBiYXNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vaXQga25vd3MgYWJvdXQgRE9NQ29u
dGVudExvYWRlZC4gSXQgaXMgT0sgaWYgaXQgZG9lcyBub3QsIHRoZSBmYWxsIHRocm91Z2gKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vdG8gd2luZG93IG9ubG9hZCBzaG91bGQgYmUgZ29vZCBl
bm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KCJET01Db250ZW50TG9hZGVkIiwgZG9qby5fbG9hZEluaXQsIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZG9qby5fbG9hZElu
aXQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9ZWxzZSBpZih3aW5kb3cuYXR0YWNoRXZlbnQp
eworICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCJvbmxvYWQiLCBk
b2pvLl9sb2FkSW5pdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRE9NQ29udGVudExv
YWRlZCBhcHByb3hpbWF0aW9uLiBEaWVnbyBQZXJpbmkgZm91bmQgdGhpcyBNU0ROIGFydGljbGUK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhhdCBpbmRpY2F0ZXMgZG9TY3JvbGwgaXMgYXZh
aWxhYmxlIGFmdGVyIERPTSByZWFkeSwgc28gZG8gYSBzZXRUaW1lb3V0CisgICAgICAgICAgICAg
ICAgICAgICAgICAvL3RvIGNoZWNrIHdoZW4gaXQgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy9odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1
MzE0MjYuYXNweAorICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRvam8uY29uZmlnLnNraXBJ
ZURvbUxvYWRlZCAmJiBzZWxmID09PSBzZWxmLnRvcCl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvam8uX3Njcm9sbEludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAo
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1doZW4gZG9qbyBpcyBs
b2FkZWQgaW50byBhbiBpZnJhbWUgaW4gYW4gSUUgSFRNTCBBcHBsaWNhdGlvbgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8oSFRBKSwgc3VjaCBhcyBp
biBhIHNlbGVuaXVtIHRlc3QsIGphdmFzY3JpcHQgaW4gdGhlIGlmcmFtZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYW4ndCBzZWUgYW55dGhpbmcg
b3V0c2lkZSBvZiBpdCwgc28gc2VsZj09PXNlbGYudG9wIGlzIHRydWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2J1dCB0aGUgaWZyYW1lIGlzIG5v
dCB0aGUgdG9wIHdpbmRvdyBhbmQgZG9TY3JvbGwgd2lsbCBiZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgYmVmb3JlIGRvY3VtZW50
LmJvZHkgaXMgc2V0LiBUZXN0IGRvY3VtZW50LmJvZHkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmVmb3JlIHRyeWluZyB0aGUgZG9TY3JvbGwgdHJp
Y2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRv
Y3VtZW50LmJvZHkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9qby5fbG9hZEluaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Y2F0
Y2ggKGUpe30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMzApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYoZG9qby5pc0lFKXsKKyAgICAgICAgICAgICAgICB0cnl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoInYiLCAidXJuOnNjaGVtYXMtbWljcm9zb2Z0
LWNvbTp2bWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZtbEVsZW1z
ID0gWyIqIiwgImdyb3VwIiwgInJvdW5kcmVjdCIsICJvdmFsIiwgInNoYXBlIiwgInJlY3QiLCAi
aW1hZ2VkYXRhIiwgInBhdGgiLCAidGV4dHBhdGgiLCAidGV4dCJdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLCBsID0gMSwgcyA9IGRvY3VtZW50LmNyZWF0
ZVN0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZG9qby5p
c0lFID49IDgpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAx
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB2bWxFbGVtcy5s
ZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yKDsgaSA8IGw7ICsraSl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcy5hZGRSdWxlKCJ2XFw6IiArIHZtbEVsZW1zW2ldLCAiYmVo
YXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7IGRpc3BsYXk6aW5saW5lLWJsb2NrIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pKCk7
CisgICAgICAgICAgICAgICAgfWNhdGNoKGUpe30KKyAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vRU5EIERPTUNvbnRlbnRMb2FkZWQKKworCisgICAgICAgIC8qCisgICAgICAgIE9wZW5BamF4
LnN1YnNjcmliZSgiT3BlbkFqYXgiLCAib25sb2FkIiwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAg
ICAgICBpZihkb2pvLl9pbkZsaWdodENvdW50ID09IDApeworICAgICAgICAgICAgICAgICAgICAg
ICAgZG9qby5fbW9kdWxlc0xvYWRlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisKKyAgICAgICAgT3BlbkFqYXguc3Vic2NyaWJlKCJPcGVuQWpheCIsICJvbnVubG9hZCIsIGZ1
bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgZG9qby51bmxvYWRlZCgpOworICAgICAgICB9KTsK
KyAgICAgICAgKi8KK30gLy9pZiAodHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJykKKworLy9S
ZWdpc3RlciBhbnkgbW9kdWxlIHBhdGhzIHNldCB1cCBpbiBkakNvbmZpZy4gTmVlZCB0byBkbyB0
aGlzCisvL2luIHRoZSBob3N0ZW52cyBzaW5jZSBob3N0ZW52X2Jyb3dzZXIgY2FuIHJlYWQgZGpD
b25maWcgZnJvbSBhCisvL3NjcmlwdCB0YWcncyBhdHRyaWJ1dGUuCisoZnVuY3Rpb24oKXsKKyAg
ICAgICAgdmFyIG1wID0gZG9qby5jb25maWdbIm1vZHVsZVBhdGhzIl07CisgICAgICAgIGlmKG1w
KXsKKyAgICAgICAgICAgICAgICBmb3IodmFyIHBhcmFtIGluIG1wKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRvam8ucmVnaXN0ZXJNb2R1bGVQYXRoKHBhcmFtLCBtcFtwYXJhbV0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfSkoKTsKKworLy9Mb2FkIGRlYnVnIGNvZGUgaWYg
bmVjZXNzYXJ5LgoraWYoZG9qby5jb25maWcuaXNEZWJ1Zyl7CisgICAgICAgIGRvam8ucmVxdWly
ZSgiZG9qby5fZmlyZWJ1Zy5maXJlYnVnIik7Cit9CisKK2lmKGRvam8uY29uZmlnLmRlYnVnQXRB
bGxDb3N0cyl7CisgICAgICAgIC8vIHRoaXMgYnJlYWtzIHRoZSBuZXcgQU1EIGJhc2VkIG1vZHVs
ZSBsb2FkZXIuIFRoZSBYRG9tYWluIHdvbid0IGJlIG5lY2Vzc2FyeQorICAgICAgICAvLyBhbnl3
YXkgaWYgeW91IHN3aXRjaCB0byB0aGUgYXN5bmNocm9ub3VzIGxvYWRlcgorICAgICAgICAvL2Rv
am8uY29uZmlnLnVzZVhEb21haW4gPSB0cnVlOworICAgICAgICAvL2Rvam8ucmVxdWlyZSgiZG9q
by5fYmFzZS5fbG9hZGVyLmxvYWRlcl94ZCIpOworICAgICAgICBkb2pvLnJlcXVpcmUoImRvam8u
X2Jhc2UuX2xvYWRlci5sb2FkZXJfZGVidWciKTsKKyAgICAgICAgZG9qby5yZXF1aXJlKCJkb2pv
LmkxOG4iKTsKK30KKworCitpZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UubGFuZyJd
KXsgLy9faGFzUmVzb3VyY2UgY2hlY2tzIGFkZGVkIGJ5IGJ1aWxkLiBEbyBub3QgdXNlIF9oYXNS
ZXNvdXJjZSBkaXJlY3RseSBpbiB5b3VyIGNvZGUuCitkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5f
YmFzZS5sYW5nIl0gPSB0cnVlOworZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLmxhbmciKTsKKwor
CisoZnVuY3Rpb24oKXsKKyAgICAgICAgdmFyIGQgPSBkb2pvLCBvcHRzID0gT2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZzsKKworICAgICAgICAvLyBDcm9ja2ZvcmQgKGlzaCkgZnVuY3Rpb25zCisK
KyAgICAgICAgZG9qby5pc1N0cmluZyA9IGZ1bmN0aW9uKC8qYW55dGhpbmcqLyBpdCl7CisgICAg
ICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhIFN0cmluZworICAgICAgICAgICAgICAgIHJldHVy
biAodHlwZW9mIGl0ID09ICJzdHJpbmciIHx8IGl0IGluc3RhbmNlb2YgU3RyaW5nKTsgLy8gQm9v
bGVhbgorICAgICAgICB9OworCisgICAgICAgIGRvam8uaXNBcnJheSA9IGZ1bmN0aW9uKC8qYW55
dGhpbmcqLyBpdCl7CisgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbiBBcnJheS4KKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRG9lcyBub3Qgd29yayBvbiBBcnJheXMgY3Jl
YXRlZCBpbiBvdGhlciB3aW5kb3dzLgorICAgICAgICAgICAgICAgIHJldHVybiBpdCAmJiAoaXQg
aW5zdGFuY2VvZiBBcnJheSB8fCB0eXBlb2YgaXQgPT0gImFycmF5Iik7IC8vIEJvb2xlYW4KKyAg
ICAgICAgfTsKKworICAgICAgICBkb2pvLmlzRnVuY3Rpb24gPSBmdW5jdGlvbigvKmFueXRoaW5n
Ki8gaXQpeworICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIFJldHVybiB0cnVlIGlmIGl0IGlzIGEgRnVuY3Rpb24KKyAgICAgICAgICAg
ICAgICByZXR1cm4gb3B0cy5jYWxsKGl0KSA9PT0gIltvYmplY3QgRnVuY3Rpb25dIjsKKyAgICAg
ICAgfTsKKworICAgICAgICBkb2pvLmlzT2JqZWN0ID0gZnVuY3Rpb24oLyphbnl0aGluZyovIGl0
KXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYSBKYXZhU2NyaXB0IG9iamVjdCAob3IgYW4g
QXJyYXksIGEgRnVuY3Rpb24KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb3IgbnVs
bCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgKGl0ID09PSBudWxsIHx8IHR5cGVvZiBpdCA9PSAib2JqZWN0IiB8fCBk
LmlzQXJyYXkoaXQpIHx8IGQuaXNGdW5jdGlvbihpdCkpOyAvLyBCb29sZWFuCisgICAgICAgIH07
CisKKyAgICAgICAgZG9qby5pc0FycmF5TGlrZSA9IGZ1bmN0aW9uKC8qYW55dGhpbmcqLyBpdCl7
CisgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBzaW1pbGFyIHRvIGRvam8uaXNBcnJheSgpIGJ1dCBtb3JlIHBlcm1pc3NpdmUK
KyAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBEb2Vzbid0IHN0cm9uZ2x5IHRlc3QgZm9yICJhcnJheW5lc3MiLiAgSW5z
dGVhZCwgc2V0dGxlcyBmb3IgImlzbid0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IGEgc3RyaW5nIG9yIG51bWJlciBhbmQgaGFzIGEgbGVuZ3RoIHByb3BlcnR5Ii4gQXJndW1lbnRz
IG9iamVjdHMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYW5kIERPTSBjb2xsZWN0
aW9ucyB3aWxsIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIHRvCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGRvam8uaXNBcnJheUxpa2UoKSwgYnV0IHdpbGwgcmV0dXJuIGZhbHNlIHdo
ZW4gcGFzc2VkIHRvCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8uaXNBcnJh
eSgpLgorICAgICAgICAgICAgICAgIC8vICAgICAgcmV0dXJuczoKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgSWYgaXQgd2Fsa3MgbGlrZSBhIGR1Y2sgYW5kIHF1YWNrcyBsaWtlIGEg
ZHVjaywgcmV0dXJuIGB0cnVlYAorICAgICAgICAgICAgICAgIHJldHVybiBpdCAmJiBpdCAhPT0g
dW5kZWZpbmVkICYmIC8vIEJvb2xlYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAg
b3V0IGJ1aWx0LWluIGNvbnN0cnVjdG9ycyAoTnVtYmVyLCBTdHJpbmcsIC4uLikgd2hpY2ggaGF2
ZSBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3BlcnRpZXMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICFkLmlzU3RyaW5nKGl0KSAmJiAhZC5pc0Z1bmN0aW9uKGl0KSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgIShpdC50YWdOYW1lICYmIGl0LnRhZ05hbWUudG9Mb3dl
ckNhc2UoKSA9PSAnZm9ybScpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoZC5pc0FycmF5
KGl0KSB8fCBpc0Zpbml0ZShpdC5sZW5ndGgpKTsKKyAgICAgICAgfTsKKworICAgICAgICBkb2pv
LmlzQWxpZW4gPSBmdW5jdGlvbigvKmFueXRoaW5nKi8gaXQpeworICAgICAgICAgICAgICAgIC8v
IHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMgdHJ1ZSBp
ZiBpdCBpcyBhIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIHNvbWUgb3RoZXIga2luZCBvZgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBvZGRiYWxsIHRoYXQgKnNob3VsZCogcmVwb3J0IGFz
IGEgZnVuY3Rpb24gYnV0IGRvZXNuJ3QKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQgJiYgIWQu
aXNGdW5jdGlvbihpdCkgJiYgL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3QoU3RyaW5n
KGl0KSk7IC8vIEJvb2xlYW4KKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLmV4dGVuZCA9IGZ1
bmN0aW9uKC8qT2JqZWN0Ki8gY29uc3RydWN0b3IsIC8qT2JqZWN0Li4uKi8gcHJvcHMpeworICAg
ICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IEFkZHMgYWxsIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgcHJvcHMgdG8gY29uc3RydWN0b3In
cworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBwcm90b3R5cGUsIG1ha2luZyB0aGVt
IGF2YWlsYWJsZSB0byBhbGwgaW5zdGFuY2VzIGNyZWF0ZWQgd2l0aAorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAgICAgICBmb3IodmFyIGk9
MSwgbD1hcmd1bWVudHMubGVuZ3RoOyBpPGw7IGkrKyl7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkLl9taXhpbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGFyZ3VtZW50c1tpXSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsgLy8gT2JqZWN0
CisgICAgICAgIH07CisKKyAgICAgICAgZG9qby5faGl0Y2hBcmdzID0gZnVuY3Rpb24oc2NvcGUs
IG1ldGhvZCAvKiwuLi4qLyl7CisgICAgICAgICAgICAgICAgdmFyIHByZSA9IGQuX3RvQXJyYXko
YXJndW1lbnRzLCAyKTsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZWQgPSBkLmlzU3RyaW5nKG1l
dGhvZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhcnJheWlmeSBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBhcmdzID0gZC5fdG9BcnJheShhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbG9jYXRlIG91ciBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0g
bmFtZWQgPyAoc2NvcGV8fGQuZ2xvYmFsKVttZXRob2RdIDogbWV0aG9kOworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaW52b2tlIHdpdGggY29sbGVjdGVkIGFyZ3MKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmICYmIGYuYXBwbHkoc2NvcGUgfHwgdGhpcywgcHJlLmNvbmNhdChh
cmdzKSk7IC8vIG1peGVkCisgICAgICAgICAgICAgICAgfTsgLy8gRnVuY3Rpb24KKyAgICAgICAg
fTsKKworICAgICAgICBkb2pvLmhpdGNoID0gZnVuY3Rpb24oLypPYmplY3QqL3Njb3BlLCAvKkZ1
bmN0aW9ufFN0cmluZyovbWV0aG9kIC8qLC4uLiovKXsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMgYSBmdW5j
dGlvbiB0aGF0IHdpbGwgb25seSBldmVyIGV4ZWN1dGUgaW4gdGhlIGEgZ2l2ZW4gc2NvcGUuCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgYWxsb3dzIGZvciBlYXN5IHVzZSBv
ZiBvYmplY3QgbWVtYmVyIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBpbiBjYWxsYmFja3MgYW5kIG90aGVyIHBsYWNlcyBpbiB3aGljaCB0aGUgInRoaXMiIGtleXdv
cmQgbWF5CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG90aGVyd2lzZSBub3QgcmVm
ZXJlbmNlIHRoZSBleHBlY3RlZCBzY29wZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgQW55IG51bWJlciBvZiBkZWZhdWx0IHBvc2l0aW9uYWwgYXJndW1lbnRzIG1heSBiZSBwYXNz
ZWQgYXMgcGFyYW1ldGVycworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBiZXlvbmQg
Im1ldGhvZCIuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2Ug
dmFsdWVzIHdpbGwgYmUgdXNlZCB0byAicGxhY2Vob2xkIiAoc2ltaWxhciB0byBjdXJyeSkKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZm9yIHRoZSBoaXRjaGVkIGZ1bmN0aW9uLgor
ICAgICAgICAgICAgICAgIC8vICAgICAgc2NvcGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIFRoZSBzY29wZSB0byB1c2Ugd2hlbiBtZXRob2QgZXhlY3V0ZXMuIElmIG1ldGhvZCBp
cyBhIHN0cmluZywKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgc2NvcGUgaXMgYWxz
byB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgbWV0aG9kLgorICAgICAgICAgICAgICAgIC8vICAgICAg
bWV0aG9kOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBIGZ1bmN0aW9uIHRvIGJl
IGhpdGNoZWQgdG8gc2NvcGUsIG9yIHRoZSBuYW1lIG9mIHRoZSBtZXRob2QgaW4KKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgc2NvcGUgdG8gYmUgaGl0Y2hlZC4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRv
am8uaGl0Y2goZm9vLCAiYmFyIikoKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
cnVucyBmb28uYmFyKCkgaW4gdGhlIHNjb3BlIG9mIGZvbworICAgICAgICAgICAgICAgIC8vICAg
ICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5oaXRjaChm
b28sIG15RnVuY3Rpb24pOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICByZXR1cm5z
IGEgZnVuY3Rpb24gdGhhdCBydW5zIG15RnVuY3Rpb24gaW4gdGhlIHNjb3BlIG9mIGZvbworICAg
ICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgRXhwYW5zaW9uIG9uIHRoZSBkZWZhdWx0IHBvc2l0aW9uYWwgYXJndW1lbnRzIHBhc3Nl
ZCBhbG9uZyBmcm9tCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGhpdGNoLiBQYXNz
ZWQgYXJncyBhcmUgbWl4ZWQgZmlyc3QsIGFkZGl0aW9uYWwgYXJncyBhZnRlci4KKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIGZvbyA9IHsgYmFyOiBmdW5jdGlvbihhLCBiLCBj
KXsgY29uc29sZS5sb2coYSwgYiwgYyk7IH0gfTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgdmFyIGZuID0gZG9qby5oaXRjaChmb28sICJiYXIiLCAxLCAyKTsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgZm4oMyk7IC8vIGxvZ3MgIjEsIDIsIDMiCisgICAgICAgICAg
ICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2
YXIgZm9vID0geyBiYXI6IDIgfTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9q
by5oaXRjaChmb28sIGZ1bmN0aW9uKCl7IHRoaXMuYmFyID0gMTA7IH0pKCk7CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGV4ZWN1dGUgYW4gYW5vbnltb3VzIGZ1bmN0aW9uIGluIHNj
b3BlIG9mIGZvbworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmKGFyZ3VtZW50
cy5sZW5ndGggPiAyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkLl9oaXRjaEFy
Z3MuYXBwbHkoZCwgYXJndW1lbnRzKTsgLy8gRnVuY3Rpb24KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYoIW1ldGhvZCl7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRo
b2QgPSBzY29wZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlID0gbnVsbDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoZC5pc1N0cmluZyhtZXRob2QpKXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNjb3BlID0gc2NvcGUgfHwgZC5nbG9iYWw7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZighc2NvcGVbbWV0aG9kXSl7IHRocm93KFsnZG9qby5oaXRjaDog
c2NvcGVbIicsIG1ldGhvZCwgJyJdIGlzIG51bGwgKHNjb3BlPSInLCBzY29wZSwgJyIpJ10uam9p
bignJykpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXsgcmV0
dXJuIHNjb3BlW21ldGhvZF0uYXBwbHkoc2NvcGUsIGFyZ3VtZW50cyB8fCBbXSk7IH07IC8vIEZ1
bmN0aW9uCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAhc2NvcGUg
PyBtZXRob2QgOiBmdW5jdGlvbigpeyByZXR1cm4gbWV0aG9kLmFwcGx5KHNjb3BlLCBhcmd1bWVu
dHMgfHwgW10pOyB9OyAvLyBGdW5jdGlvbgorICAgICAgICB9OworCisgICAgICAgIC8qPT09PT0K
KyAgICAgICAgZG9qby5kZWxlZ2F0ZSA9IGZ1bmN0aW9uKG9iaiwgcHJvcHMpeworICAgICAgICAg
ICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
UmV0dXJucyBhIG5ldyBvYmplY3Qgd2hpY2ggImxvb2tzIiB0byBvYmogZm9yIHByb3BlcnRpZXMg
d2hpY2ggaXQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9lcyBub3QgaGF2ZSBh
IHZhbHVlIGZvci4gT3B0aW9uYWxseSB0YWtlcyBhIGJhZyBvZiBwcm9wZXJ0aWVzIHRvCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNlZWQgdGhlIHJldHVybmVkIG9iamVjdCB3aXRo
IGluaXRpYWxseS4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGlzIGlzIGEgc21hbGwgaW1wbGVtZW50YXRvbiBv
ZiB0aGUgQm9vZG1hbi9Dcm9ja2ZvcmQgZGVsZWdhdGlvbgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBwYXR0ZXJuIGluIEphdmFTY3JpcHQuIEFuIGludGVybWVkaWF0ZSBvYmplY3Qg
Y29uc3RydWN0b3IgbWVkaWF0ZXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhl
IHByb3RvdHlwZSBjaGFpbiBmb3IgdGhlIHJldHVybmVkIG9iamVjdCwgdXNpbmcgaXQgdG8gZGVs
ZWdhdGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG93biB0byBvYmogZm9yIHBy
b3BlcnR5IGxvb2t1cCB3aGVuIG9iamVjdC1sb2NhbCBsb29rdXAgZmFpbHMuCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgY2FuIGJlIHRob3VnaHQgb2Ygc2ltaWxhcmx5IHRv
IEVTNCdzICJ3cmFwIiwgc2F2ZSB0aGF0IGl0IGRvZXMKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgbm90IGFjdCBvbiB0eXBlcyBidXQgcmF0aGVyIG9uIHB1cmUgb2JqZWN0cy4KKyAg
ICAgICAgICAgICAgICAvLyAgICAgIG9iajoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgVGhlIG9iamVjdCB0byBkZWxlZ2F0ZSB0byBmb3IgcHJvcGVydGllcyBub3QgZm91bmQgZGly
ZWN0bHkgb24gdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Qgb3IgaW4gcHJvcHMuCisgICAgICAgICAgICAgICAgLy8gICAgICBwcm9wczoKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgYW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyB0
byBhc3NpZ24gdG8gdGhlIHJldHVybmVkIG9iamVjdAorICAgICAgICAgICAgICAgIC8vICAgICAg
cmV0dXJuczoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYW4gT2JqZWN0IG9mIGFu
b255bW91cyB0eXBlCisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgZm9vID0geyBiYXI6ICJiYXoiIH07CisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciB0aGluZ2VyID0gZG9qby5kZWxlZ2F0ZShmb28s
IHsgdGh1ZDogInh5enp5In0pOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB0aGlu
Z2VyLmJhciA9PSAiYmF6IjsgLy8gZGVsZWdhdGVkIHRvIGZvbworICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICBmb28udGh1ZCA9PSB1bmRlZmluZWQ7IC8vIGJ5IGRlZmluaXRpb24KKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdGhpbmdlci50aHVkID09ICJ4eXp6eSI7IC8v
IG1peGVkIGluIGZyb20gcHJvcHMKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZm9v
LmJhciA9ICJ0aG9uayI7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHRoaW5nZXIu
YmFyID09ICJ0aG9uayI7IC8vIHN0aWxsIGRlbGVnYXRlZCB0byBmb28ncyBiYXIKKyAgICAgICAg
fQorICAgICAgICA9PT09PSovCisKKyAgICAgICAgZG9qby5kZWxlZ2F0ZSA9IGRvam8uX2RlbGVn
YXRlID0gKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8gYm9vZG1hbi9jcm9ja2ZvcmQg
ZGVsZWdhdGlvbiB3LyBjb3JuZm9yZCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAgICAgICBmdW5j
dGlvbiBUTVAoKXt9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgcHJvcHMp
eworICAgICAgICAgICAgICAgICAgICAgICAgVE1QLnByb3RvdHlwZSA9IG9iajsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB0bXAgPSBuZXcgVE1QKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBUTVAucHJvdG90eXBlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBy
b3BzKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5fbWl4aW4odG1wLCBwcm9w
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdG1wOyAvLyBPYmplY3QKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9KSgpOwor
CisgICAgICAgIC8qPT09PT0KKyAgICAgICAgZG9qby5fdG9BcnJheSA9IGZ1bmN0aW9uKG9iaiwg
b2Zmc2V0LCBzdGFydFdpdGgpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQ29udmVydHMgYW4gYXJyYXktbGlrZSBvYmpl
Y3QgKGkuZS4gYXJndW1lbnRzLCBET01Db2xsZWN0aW9uKSB0byBhbgorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBhcnJheS4gUmV0dXJucyBhIG5ldyBBcnJheSB3aXRoIHRoZSBlbGVt
ZW50cyBvZiBvYmouCisgICAgICAgICAgICAgICAgLy8gICAgICBvYmo6IE9iamVjdAorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgb2JqZWN0IHRvICJhcnJheWlmeSIuIFdlIGV4
cGVjdCB0aGUgb2JqZWN0IHRvIGhhdmUsIGF0IGEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgbWluaW11bSwgYSBsZW5ndGggcHJvcGVydHkgd2hpY2ggY29ycmVzcG9uZHMgdG8gaW50
ZWdlci1pbmRleGVkCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHByb3BlcnRpZXMu
CisgICAgICAgICAgICAgICAgLy8gICAgICBvZmZzZXQ6IE51bWJlcj8KKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgdGhlIGxvY2F0aW9uIGluIG9iaiB0byBzdGFydCBpdGVyYXRpbmcg
ZnJvbS4gRGVmYXVsdHMgdG8gMC4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgT3B0
aW9uYWwuCisgICAgICAgICAgICAgICAgLy8gICAgICBzdGFydFdpdGg6IEFycmF5PworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBBbiBhcnJheSB0byBwYWNrIHdpdGggdGhlIHByb3Bl
cnRpZXMgb2Ygb2JqLiBJZiBwcm92aWRlZCwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgcHJvcGVydGllcyBpbiBvYmogYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQgb2Ygc3RhcnRXaXRo
IGFuZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzdGFydFdpdGggaXMgdGhlIHJl
dHVybmVkIGFycmF5LgorICAgICAgICB9CisgICAgICAgID09PT09Ki8KKworICAgICAgICB2YXIg
ZWZmaWNpZW50ID0gZnVuY3Rpb24ob2JqLCBvZmZzZXQsIHN0YXJ0V2l0aCl7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIChzdGFydFdpdGh8fFtdKS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwob2JqLCBvZmZzZXR8fDApKTsKKyAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHZh
ciBzbG93ID0gZnVuY3Rpb24ob2JqLCBvZmZzZXQsIHN0YXJ0V2l0aCl7CisgICAgICAgICAgICAg
ICAgdmFyIGFyciA9IHN0YXJ0V2l0aHx8W107CisgICAgICAgICAgICAgICAgZm9yKHZhciB4ID0g
b2Zmc2V0IHx8IDA7IHggPCBvYmoubGVuZ3RoOyB4KyspeworICAgICAgICAgICAgICAgICAgICAg
ICAgYXJyLnB1c2gob2JqW3hdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGFycjsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGRvam8uX3RvQXJyYXkg
PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlzSUUgPyAgZnVuY3Rpb24ob2Jq
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKG9iai5pdGVtKSA/IHNsb3cgOiBl
ZmZpY2llbnQpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgfSA6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmljaWVudDsKKworICAgICAgICBkb2pv
LnBhcnRpYWwgPSBmdW5jdGlvbigvKkZ1bmN0aW9ufFN0cmluZyovbWV0aG9kIC8qLCAuLi4qLyl7
CisgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBzaW1pbGFyIHRvIGhpdGNoKCkgZXhjZXB0IHRoYXQgdGhlIHNjb3BlIG9iamVj
dCBpcyBsZWZ0IHRvIGJlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdoYXRldmVy
IHRoZSBleGVjdXRpb24gY29udGV4dCBldmVudHVhbGx5IGJlY29tZXMuCisgICAgICAgICAgICAg
ICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
Q2FsbGluZyBkb2pvLnBhcnRpYWwgaXMgdGhlIGZ1bmN0aW9uYWwgZXF1aXZhbGVudCBvZiBjYWxs
aW5nOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIGRvam8uaGl0Y2go
bnVsbCwgZnVuY05hbWUsIC4uLik7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsgbnVsbCBd
OworICAgICAgICAgICAgICAgIHJldHVybiBkLmhpdGNoLmFwcGx5KGQsIGFyci5jb25jYXQoZC5f
dG9BcnJheShhcmd1bWVudHMpKSk7IC8vIEZ1bmN0aW9uCisgICAgICAgIH07CisKKyAgICAgICAg
dmFyIGV4dHJhTmFtZXMgPSBkLl9leHRyYU5hbWVzLCBleHRyYUxlbiA9IGV4dHJhTmFtZXMubGVu
Z3RoLCBlbXB0eSA9IHt9OworCisgICAgICAgIGRvam8uY2xvbmUgPSBmdW5jdGlvbigvKmFueXRo
aW5nKi8gbyl7CisgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgQ2xvbmVzIG9iamVjdHMgKGluY2x1ZGluZyBET00gbm9kZXMpIGFuZCBh
bGwgY2hpbGRyZW4uCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFdhcm5pbmc6IGRv
IG5vdCBjbG9uZSBjeWNsaWMgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICBpZighbyB8fCB0
eXBlb2YgbyAhPSAib2JqZWN0IiB8fCBkLmlzRnVuY3Rpb24obykpeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gbnVsbCwgdW5kZWZpbmVkLCBhbnkgbm9uLW9iamVjdCwgb3IgZnVuY3Rpb24K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvOyAgICAgICAvLyBhbnl0aGluZworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihvLm5vZGVUeXBlICYmICJjbG9uZU5v
ZGUiIGluIG8peworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRE9NIE5vZGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBvLmNsb25lTm9kZSh0cnVlKTsgLy8gTm9kZQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihvIGluc3RhbmNlb2YgRGF0ZSl7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBEYXRlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IERhdGUoby5nZXRUaW1lKCkpOyAgIC8vIERhdGUKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYobyBpbnN0YW5jZW9mIFJlZ0V4cCl7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBSZWdFeHAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVn
RXhwKG8pOyAgIC8vIFJlZ0V4cAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2
YXIgciwgaSwgbCwgcywgbmFtZTsKKyAgICAgICAgICAgICAgICBpZihkLmlzQXJyYXkobykpewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHIgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpID0gMCwgbCA9IG8ubGVuZ3Ro
OyBpIDwgbDsgKytpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSBpbiBv
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnB1c2goZC5jbG9u
ZShvW2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKy8vIHdlIGRvbid0IGNsb25lIGZ1bmN0aW9ucyBmb3IgcGVyZm9ybWFu
Y2UgcmVhc29ucworLy8gICAgICAgICAgICAgIH1lbHNlIGlmKGQuaXNGdW5jdGlvbihvKSl7Cisv
LyAgICAgICAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbgorLy8gICAgICAgICAgICAgICAgICAg
ICAgciA9IGZ1bmN0aW9uKCl7IHJldHVybiBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07Cisg
ICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmlj
IG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvLmNvbnN0cnVjdG9yID8gbmV3
IG8uY29uc3RydWN0b3IoKSA6IHt9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBmb3IobmFtZSBpbiBvKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAidG9iaiIg
Y29uZGl0aW9uIGF2b2lkIGNvcHlpbmcgcHJvcGVydGllcyBpbiAic291cmNlIgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW5oZXJpdGVkIGZyb20gT2JqZWN0LnByb3RvdHlwZS4gIEZvciBl
eGFtcGxlLCBpZiB0YXJnZXQgaGFzIGEgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0b1N0cmluZygpIG1ldGhvZCwgZG9uJ3Qgb3ZlcndyaXRlIGl0IHdpdGggdGhlIHRvU3RyaW5n
KCkgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHNvdXJjZSBpbmhlcml0
ZWQgZnJvbSBPYmplY3QucHJvdG90eXBlCisgICAgICAgICAgICAgICAgICAgICAgICBzID0gb1tu
YW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEobmFtZSBpbiByKSB8fCAocltuYW1l
XSAhPT0gcyAmJiAoIShuYW1lIGluIGVtcHR5KSB8fCBlbXB0eVtuYW1lXSAhPT0gcykpKXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltuYW1lXSA9IGQuY2xvbmUocyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJRSBkb2Vzbid0IHJlY29nbml6ZSBzb21lIGN1c3RvbSBmdW5j
dGlvbnMgaW4gZm9yLi5pbgorICAgICAgICAgICAgICAgIGlmKGV4dHJhTGVuKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGV4dHJhTGVuOyArK2kpeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZXh0cmFOYW1lc1tpXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcyA9IG9bbmFtZV07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKCEobmFtZSBpbiByKSB8fCAocltuYW1lXSAhPT0gcyAmJiAoIShuYW1lIGlu
IGVtcHR5KSB8fCBlbXB0eVtuYW1lXSAhPT0gcykpKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByW25hbWVdID0gczsgLy8gZnVuY3Rpb25zIG9ubHksIHdlIGRvbid0
IGNsb25lIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHI7IC8vIE9iamVjdAorICAgICAgICB9OworCisgICAgICAgIC8q
PT09PT0KKyAgICAgICAgZG9qby50cmltID0gZnVuY3Rpb24oc3RyKXsKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRyaW1z
IHdoaXRlc3BhY2UgZnJvbSBib3RoIHNpZGVzIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHN0cjogU3RyaW5nCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFN0
cmluZyB0byBiZSB0cmltbWVkCisgICAgICAgICAgICAgICAgLy8gICAgICByZXR1cm5zOiBTdHJp
bmcKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmV0dXJucyB0aGUgdHJpbW1lZCBz
dHJpbmcKKyAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gb2YgdHJpbSgpIHdhcyBzZWxlY3RlZCBm
b3IgaW5jbHVzaW9uIGludG8gdGhlIGJhc2UgZHVlCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIHRvIGl0cyBjb21wYWN0IHNpemUgYW5kIHJlbGF0aXZlbHkgZ29vZCBwZXJmb3JtYW5j
ZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAoc2VlIFtTdGV2ZW4gTGV2aXRoYW4n
cyBibG9nXShodHRwOi8vYmxvZy5zdGV2ZW5sZXZpdGhhbi5jb20vYXJjaGl2ZXMvZmFzdGVyLXRy
aW0tamF2YXNjcmlwdCkKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVXNlcyBTdHJp
bmcucHJvdG90eXBlLnRyaW0gaW5zdGVhZCwgaWYgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBUaGUgZmFzdGVzdCBidXQgbG9uZ2VzdCB2ZXJzaW9uIG9mIHRoaXMg
ZnVuY3Rpb24gaXMgbG9jYXRlZCBhdAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBk
b2pvLnN0cmluZy50cmltKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7ICAgICAgLy8gU3Ry
aW5nCisgICAgICAgIH0KKyAgICAgICAgPT09PT0qLworCisgICAgICAgIGRvam8udHJpbSA9IFN0
cmluZy5wcm90b3R5cGUudHJpbSA/CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oc3RyKXsgcmV0
dXJuIHN0ci50cmltKCk7IH0gOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHN0cil7IHJldHVy
biBzdHIucmVwbGFjZSgvXlxzXHMqLywgJycpLnJlcGxhY2UoL1xzXHMqJC8sICcnKTsgfTsKKwor
ICAgICAgICAvKj09PT09CisgICAgICAgIGRvam8ucmVwbGFjZSA9IGZ1bmN0aW9uKHRtcGwsIG1h
cCwgcGF0dGVybil7CisgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBQZXJmb3JtcyBwYXJhbWV0ZXJpemVkIHN1YnN0aXR1dGlv
bnMgb24gYSBzdHJpbmcuIFRocm93cyBhbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBleGNlcHRpb24gaWYgYW55IHBhcmFtZXRlciBpcyB1bm1hdGNoZWQuCisgICAgICAgICAgICAg
ICAgLy8gICAgICB0bXBsOiBTdHJpbmcKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
U3RyaW5nIHRvIGJlIHVzZWQgYXMgYSB0ZW1wbGF0ZS4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IG1hcDogT2JqZWN0fEZ1bmN0aW9uCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElm
IGFuIG9iamVjdCwgaXQgaXMgdXNlZCBhcyBhIGRpY3Rpb25hcnkgdG8gbG9vayB1cCBzdWJzdGl0
dXRpb25zLgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJZiBhIGZ1bmN0aW9uLCBp
dCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IHN1YnN0aXR1dGlvbiB3aXRoIGZvbGxvd2luZworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBhIHdob2xlIG1hdGNoLCBhIG5h
bWUsIGFuIG9mZnNldCwgYW5kIHRoZSB3aG9sZSB0ZW1wbGF0ZQorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBzdHJpbmcgKHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvcmVw
bGFjZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzKS4K
KyAgICAgICAgICAgICAgICAvLyAgICAgIHBhdHRlcm46IFJlZ0V4PworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBPcHRpb25hbCByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0cyB0aGF0
IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBwYXR0ZXJuLgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBNdXN0IGJlIGdsb2JhbCBhbmQgbWF0Y2ggb25lIGl0ZW0uIFRoZSBkZWZhdWx0IGlz
OiAvXHsoW15cfV0rKVx9L2csCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdoaWNo
IG1hdGNoZXMgcGF0dGVybnMgbGlrZSB0aGF0OiAie3h4eH0iLCB3aGVyZSAieHh4IiBpcyBhbnkg
c2VxdWVuY2UKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb2YgY2hhcmFjdGVycywg
d2hpY2ggZG9lc24ndCBpbmNsdWRlICJ9Ii4KKyAgICAgICAgICAgICAgICAvLyAgICAgIHJldHVy
bnM6IFN0cmluZworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBz
dWJzdGl0dXRlZCBzdHJpbmcuCisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyB1c2VzIGEgZGljdGlvbmFyeSBmb3Igc3Vi
c3RpdHV0aW9uczoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5yZXBsYWNl
KCJIZWxsbywge25hbWUuZmlyc3R9IHtuYW1lLmxhc3R9IEFLQSB7bmlja30hIiwKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAg
ICAgICAgICBuaWNrOiAiQm9iIiwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAg
IG5hbWU6IHsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgZmlyc3Q6ICAi
Um9iZXJ0IiwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgbWlkZGxlOiAi
WCIsCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgIGxhc3Q6ICAgIkNyaW5n
ZWx5IgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICAvLyByZXR1cm5zOiBIZWxsbywgUm9iZXJ0IENyaW5nZWx5IEFLQSBCb2IhCisgICAgICAgICAg
ICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAv
LyB1c2VzIGFuIGFycmF5IGZvciBzdWJzdGl0dXRpb25zOgorICAgICAgICAgICAgICAgIC8vICAg
ICAgfCAgICAgICBkb2pvLnJlcGxhY2UoIkhlbGxvLCB7MH0gezJ9ISIsCisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgWyJSb2JlcnQiLCAiWCIsICJDcmluZ2VseSJdKTsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gcmV0dXJuczogSGVsbG8sIFJvYmVydCBDcmlu
Z2VseSEKKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIC8vIHVzZXMgYSBmdW5jdGlvbiBmb3Igc3Vic3RpdHV0aW9uczoKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZnVuY3Rpb24gc3VtKGEpeworICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICAgIHZhciB0ID0gMDsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIHwgICAgICAgICBkb2pvLmZvckVhY2goYSwgZnVuY3Rpb24oeCl7IHQgKz0geDsgfSk7Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgcmV0dXJuIHQ7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9q
by5yZXBsYWNlKAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICJ7Y291bnR9IHBh
eW1lbnRzIGF2ZXJhZ2luZyB7YXZnfSBVU0QgcGVyIHBheW1lbnQuIiwKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgICBkb2pvLmhpdGNoKAorICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICAgICAgeyBwYXltZW50czogWzExLCAxNiwgMTJdIH0sCisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgICAgICBmdW5jdGlvbihfLCBrZXkpeworICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICAgICAgICBzd2l0Y2goa2V5KXsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICBjYXNlICJjb3VudCI6IHJldHVybiB0aGlzLnBheW1lbnRzLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBjYXNlICJtaW4iOiAg
IHJldHVybiBNYXRoLm1pbi5hcHBseShNYXRoLCB0aGlzLnBheW1lbnRzKTsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBjYXNlICJtYXgiOiAgIHJldHVybiBNYXRoLm1h
eC5hcHBseShNYXRoLCB0aGlzLnBheW1lbnRzKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgICAgICAgICBjYXNlICJzdW0iOiAgIHJldHVybiBzdW0odGhpcy5wYXltZW50cyk7Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgY2FzZSAiYXZnIjogICByZXR1
cm4gc3VtKHRoaXMucGF5bWVudHMpIC8gdGhpcy5wYXltZW50cy5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICApCisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgICk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAg
ICAgIC8vIHByaW50czogMyBwYXltZW50cyBhdmVyYWdpbmcgMTMgVVNEIHBlciBwYXltZW50Lgor
ICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgLy8gdXNlcyBhbiBhbHRlcm5hdGl2ZSBQSFAtbGlrZSBwYXR0ZXJuIGZvciBzdWJz
dGl0dXRpb25zOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnJlcGxhY2Uo
IkhlbGxvLCAkezB9ICR7Mn0hIiwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICBb
IlJvYmVydCIsICJYIiwgIkNyaW5nZWx5Il0sIC9cJFx7KFteXH1dKylcfS9nKTsKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gcmV0dXJuczogSGVsbG8sIFJvYmVydCBDcmluZ2Vs
eSEKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7ICAgICAgLy8gU3RyaW5nCisgICAgICAgIH0K
KyAgICAgICAgPT09PT0qLworCisgICAgICAgIHZhciBfcGF0dGVybiA9IC9ceyhbXlx9XSspXH0v
ZzsKKyAgICAgICAgZG9qby5yZXBsYWNlID0gZnVuY3Rpb24odG1wbCwgbWFwLCBwYXR0ZXJuKXsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdG1wbC5yZXBsYWNlKHBhdHRlcm4gfHwgX3BhdHRlcm4s
IGQuaXNGdW5jdGlvbihtYXApID8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA6IGZ1bmN0
aW9uKF8sIGspeyByZXR1cm4gZC5nZXRPYmplY3QoaywgZmFsc2UsIG1hcCk7IH0pOworICAgICAg
ICB9OworfSkoKTsKKworfQorCitpZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuYXJy
YXkiXSl7IC8vX2hhc1Jlc291cmNlIGNoZWNrcyBhZGRlZCBieSBidWlsZC4gRG8gbm90IHVzZSBf
aGFzUmVzb3VyY2UgZGlyZWN0bHkgaW4geW91ciBjb2RlLgorZG9qby5faGFzUmVzb3VyY2VbImRv
am8uX2Jhc2UuYXJyYXkiXSA9IHRydWU7Citkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UuYXJyYXki
KTsKKworCisKKyhmdW5jdGlvbigpeworICAgICAgICB2YXIgX2dldFBhcnRzID0gZnVuY3Rpb24o
YXJyLCBvYmosIGNiKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAg
ICAgICAgICAgKHR5cGVvZiBhcnIgPT0gInN0cmluZyIpID8gYXJyLnNwbGl0KCIiKSA6IGFyciwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9iaiB8fCBkb2pvLmdsb2JhbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBjYWNoZSB0aGUgYW5vbnltb3VzIGZ1bmN0aW9ucyB3ZSBj
cmVhdGUgaGVyZT8KKyAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgY2IgPT0gInN0cmlu
ZyIpID8gbmV3IEZ1bmN0aW9uKCJpdGVtIiwgImluZGV4IiwgImFycmF5IiwgY2IpIDogY2IKKyAg
ICAgICAgICAgICAgICBdOworICAgICAgICB9OworCisgICAgICAgIHZhciBldmVyeU9yU29tZSA9
IGZ1bmN0aW9uKC8qQm9vbGVhbiovZXZlcnksIC8qQXJyYXl8U3RyaW5nKi9hcnIsIC8qRnVuY3Rp
b258U3RyaW5nKi9jYWxsYmFjaywgLypPYmplY3Q/Ki90aGlzT2JqZWN0KXsKKyAgICAgICAgICAg
ICAgICB2YXIgX3AgPSBfZ2V0UGFydHMoYXJyLCB0aGlzT2JqZWN0LCBjYWxsYmFjayk7IGFyciA9
IF9wWzBdOworICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wLGw9YXJyLmxlbmd0aDsgaTxsOyAr
K2kpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICEhX3BbMl0uY2FsbChf
cFsxXSwgYXJyW2ldLCBpLCBhcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXZlcnkg
XiByZXN1bHQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OyAvLyBCb29sZWFuCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBldmVyeTsgLy8gQm9vbGVhbgorICAgICAgICB9Owor
CisgICAgICAgIGRvam8ubWl4aW4oZG9qbywgeworICAgICAgICAgICAgICAgIGluZGV4T2Y6IGZ1
bmN0aW9uKCAgICAgIC8qQXJyYXkqLyAgICAgICAgICAgICAgIGFycmF5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9iamVjdCovICAg
ICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypJbnRlZ2VyPyovICAgIGZyb21JbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypCb29sZWFuPyov
ICAgIGZpbmRMYXN0KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbG9jYXRlcyB0aGUgZmlyc3QgaW5k
ZXggb2YgdGhlIHByb3ZpZGVkIHZhbHVlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHBhc3NlZCBhcnJheS4gSWYgdGhlIHZhbHVlIGlzIG5vdCBmb3VuZCwg
LTEgaXMgcmV0dXJuZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNjcmlwdGlvbjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBjb3Jy
ZXNwb25kcyB0byB0aGUgSmF2YVNjcmlwdCAxLjYgQXJyYXkuaW5kZXhPZiBtZXRob2QsIHdpdGgg
b25lIGRpZmZlcmVuY2U6IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBydW4gb3ZlciBzcGFyc2UgYXJyYXlzLCB0aGUgRG9qbyBmdW5jdGlvbiBpbnZva2VzIHRo
ZSBjYWxsYmFjayBmb3IgZXZlcnkgaW5kZXggd2hlcmVhcyBKYXZhU2NyaXB0CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgMS42J3MgaW5kZXhPZiBza2lwcyB0aGUgaG9s
ZXMgaW4gdGhlIHNwYXJzZSBhcnJheS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBGb3IgZGV0YWlscyBvbiB0aGlzIG1ldGhvZCwgc2VlOgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9pbmRl
eE9mCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGVwID0gMSwgZW5kID0gYXJyYXku
bGVuZ3RoIHx8IDAsIGkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmluZExhc3Qp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZW5kIC0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RlcCA9IGVuZCA9IC0xOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYoZnJvbUluZGV4ICE9IHVuZGVm
aW5lZCl7IGkgPSBmcm9tSW5kZXg7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChmaW5k
TGFzdCAmJiBpID4gZW5kKSB8fCBpIDwgZW5kKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yKDsgaSAhPSBlbmQ7IGkgKz0gc3RlcCl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYoYXJyYXlbaV0gPT0gdmFsdWUpeyByZXR1cm4gaTsgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgLy8gTnVtYmVyCisgICAg
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGxhc3RJbmRleE9mOiBmdW5jdGlvbigv
KkFycmF5Ki9hcnJheSwgLypPYmplY3QqL3ZhbHVlLCAvKkludGVnZXI/Ki9mcm9tSW5kZXgpewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBsb2NhdGVzIHRoZSBsYXN0IGluZGV4IG9mIHRoZSBwcm92aWRl
ZCB2YWx1ZSBpbiB0aGUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgYXJyYXkuIElmIHRoZSB2YWx1ZSBpcyBub3QgZm91bmQsIC0xIGlzIHJldHVybmVkLgor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgVGhpcyBtZXRob2QgY29ycmVzcG9uZHMgdG8gdGhlIEph
dmFTY3JpcHQgMS42IEFycmF5Lmxhc3RJbmRleE9mIG1ldGhvZCwgd2l0aCBvbmUgZGlmZmVyZW5j
ZTogd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHJ1biBvdmVy
IHNwYXJzZSBhcnJheXMsIHRoZSBEb2pvIGZ1bmN0aW9uIGludm9rZXMgdGhlIGNhbGxiYWNrIGZv
ciBldmVyeSBpbmRleCB3aGVyZWFzIEphdmFTY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICAxLjYncyBsYXN0SW5kZXhPZiBza2lwcyB0aGUgaG9sZXMgaW4gdGhl
IHNwYXJzZSBhcnJheS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBG
b3IgZGV0YWlscyBvbiB0aGlzIG1ldGhvZCwgc2VlOgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4v
Q29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9sYXN0SW5kZXhPZgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvam8uaW5kZXhPZihhcnJheSwgdmFsdWUs
IGZyb21JbmRleCwgdHJ1ZSk7IC8vIE51bWJlcgorICAgICAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbigvKkFycmF5fFN0cmluZyovYXJyLCAvKkZ1bmN0
aW9ufFN0cmluZyovY2FsbGJhY2ssIC8qT2JqZWN0PyovdGhpc09iamVjdCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgZm9yIGV2ZXJ5IGl0ZW0gaW4gYXJyLCBjYWxsYmFjayBpcyBpbnZva2Vk
LiBSZXR1cm4gdmFsdWVzIGFyZSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCwgY29uc2lk
ZXIgdXNpbmcgZG9qby5ldmVyeSgpIG9yIGRvam8uc29tZSgpLgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGZvckVhY2ggZG9lcyBub3QgYWxsb3cgYnJlYWtpbmcgb3V0
IG9mIHRoZSBsb29wIG92ZXIgdGhlIGl0ZW1zIGluIGFyci4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgYXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IHRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuIElmIGEgc3RyaW5nLCBvcGVyYXRlcyBvbiBpbmRp
dmlkdWFsIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGNhbGxi
YWNrOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGEgZnVuY3Rpb24g
aXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogaXRlbSwgaW5kZXgsIGFuZCBhcnJheQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB0aGlzT2JqZWN0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG1heSBiZSB1c2VkIHRvIHNjb3BlIHRoZSBjYWxs
IHRvIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0aW9u
OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24g
Y29ycmVzcG9uZHMgdG8gdGhlIEphdmFTY3JpcHQgMS42IEFycmF5LmZvckVhY2goKSBtZXRob2Qs
IHdpdGggb25lIGRpZmZlcmVuY2U6IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBydW4gb3ZlciBzcGFyc2UgYXJyYXlzLCB0aGlzIGltcGxlbWVuYXRpb24gcGFz
c2VzIHRoZSAiaG9sZXMiIGluIHRoZSBzcGFyc2UgYXJyYXkgdG8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhIHZhbHVl
IG9mIHVuZGVmaW5lZC4gSmF2YVNjcmlwdCAxLjYncyBmb3JFYWNoIHNraXBzIHRoZSBob2xlcyBp
biB0aGUgc3BhcnNlIGFycmF5LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIEZvciBtb3JlIGRldGFpbHMsIHNlZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVf
SmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvZm9yRWFjaAorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIC8vIGxvZyBvdXQgYWxsIG1lbWJlcnMgb2YgdGhlIGFycmF5OgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIFsgInRoaW5nZXIiLCAi
YmxhaCIsICJob3dkeSIsIDEwIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgICAgICAgICBmdW5jdGlvbihpdGVtKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coaXRlbSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAv
LyBsb2cgb3V0IHRoZSBtZW1iZXJzIGFuZCB0aGVpciBpbmRleGVzCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgWyAidGhpbmdlciIsICJibGFoIiwgImhvd2R5
IiwgMTAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAg
IGZ1bmN0aW9uKGl0ZW0sIGlkeCwgYXJyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coaXRlbSwgImF0IGluZGV4OiIs
IGlkeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICAvLyB1c2UgYSBzY29wZWQgb2JqZWN0IG1lbWJlciBhcyB0aGUgY2FsbGJh
Y2sKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgIHZhciBvYmogPSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgICAgICAgICBwcmVmaXg6ICJsb2dnZWQgdmlhIG9iai5jYWxsYmFj
azoiLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgY2Fs
bGJhY2s6IGZ1bmN0aW9uKGl0ZW0peworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnByZWZpeCwgaXRlbSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIC8v
IHNwZWNpZnlpbmcgdGhlIHNjb3BlIGZ1bmN0aW9uIGV4ZWN1dGVzIHRoZSBjYWxsYmFjayBpbiB0
aGF0IHNjb3BlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5m
b3JFYWNoKAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
WyAidGhpbmdlciIsICJibGFoIiwgImhvd2R5IiwgMTAgXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIG9iai5jYWxsYmFjaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIG9iagorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyBhbHRlcm5hdGVs
eSwgd2UgY2FuIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcgd2l0aCBkb2pvLmhpdGNoKCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmZvckVhY2goCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBbICJ0aGluZ2VyIiwg
ImJsYWgiLCAiaG93ZHkiLCAxMCBdLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgICAgICAgICAgZG9qby5oaXRjaChvYmosICJjYWxsYmFjayIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBidWlsdC1pbiBmb3JFYWNoIFdSVCBlbXB0eSBh
cnJzCisgICAgICAgICAgICAgICAgICAgICAgICBpZighYXJyIHx8ICFhcnIubGVuZ3RoKXsgcmV0
dXJuOyB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGVyZSBhcmUgc2V2
ZXJhbCB3YXlzIG9mIGhhbmRpbG5nIHRoaXNPYmplY3QuIElzCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBkb2pvLmdsb2JhbCBhbHdheXMgdGhlIGRlZmF1bHQgY29udGV4dD8KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBfcCA9IF9nZXRQYXJ0cyhhcnIsIHRoaXNPYmplY3QsIGNhbGxi
YWNrKTsgYXJyID0gX3BbMF07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGk9MCxs
PWFyci5sZW5ndGg7IGk8bDsgKytpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X3BbMl0uY2FsbChfcFsxXSwgYXJyW2ldLCBpLCBhcnIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBldmVyeTogZnVuY3Rp
b24oLypBcnJheXxTdHJpbmcqL2FyciwgLypGdW5jdGlvbnxTdHJpbmcqL2NhbGxiYWNrLCAvKk9i
amVjdD8qL3RoaXNPYmplY3QpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRo
ZXIgb3Igbm90IGV2ZXJ5IGl0ZW0gaW4gYXJyIHNhdGlzZmllcyB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBjb25kaXRpb24gaW1wbGVtZW50ZWQgYnkgY2FsbGJh
Y2suCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcnI6CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgdGhlIGFycmF5IHRvIGl0ZXJhdGUgb24uIElmIGEgc3RyaW5n
LCBvcGVyYXRlcyBvbiBpbmRpdmlkdWFsIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBhIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IGl0ZW0sIGluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuZCBhcnJheSBhbmQg
cmV0dXJucyB0cnVlIGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpc09iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBtYXkgYmUgdXNlZCB0byBzY29wZSB0aGUgY2FsbCB0byBjYWxsYmFjaworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgSmF2YVNjcmlw
dCAxLjYgQXJyYXkuZXZlcnkoKSBtZXRob2QsIHdpdGggb25lIGRpZmZlcmVuY2U6IHdoZW4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBydW4gb3ZlciBzcGFyc2UgYXJy
YXlzLCB0aGlzIGltcGxlbWVuYXRpb24gcGFzc2VzIHRoZSAiaG9sZXMiIGluIHRoZSBzcGFyc2Ug
YXJyYXkgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgY2Fs
bGJhY2sgZnVuY3Rpb24gd2l0aCBhIHZhbHVlIG9mIHVuZGVmaW5lZC4gSmF2YVNjcmlwdCAxLjYn
cyBldmVyeSBza2lwcyB0aGUgaG9sZXMgaW4gdGhlIHNwYXJzZSBhcnJheS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzLCBzZWU6CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3Rz
L0FycmF5L2V2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIC8vIHJldHVybnMgZmFsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmV2ZXJ5KFsxLCAyLCAzLCA0
XSwgZnVuY3Rpb24oaXRlbSl7IHJldHVybiBpdGVtPjE7IH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICAvLyByZXR1cm5zIHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICBkb2pvLmV2ZXJ5KFsxLCAyLCAzLCA0XSwgZnVuY3Rpb24oaXRlbSl7IHJldHVybiBpdGVtPjA7
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZXJ5T3JTb21lKHRydWUsIGFy
ciwgY2FsbGJhY2ssIHRoaXNPYmplY3QpOyAvLyBCb29sZWFuCisgICAgICAgICAgICAgICAgfSwK
KworICAgICAgICAgICAgICAgIHNvbWU6IGZ1bmN0aW9uKC8qQXJyYXl8U3RyaW5nKi9hcnIsIC8q
RnVuY3Rpb258U3RyaW5nKi9jYWxsYmFjaywgLypPYmplY3Q/Ki90aGlzT2JqZWN0KXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhbnkgaXRlbSBpbiBhcnIg
c2F0aXNmaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNv
bmRpdGlvbiBpbXBsZW1lbnRlZCBieSBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgYXJy
YXkgdG8gaXRlcmF0ZSBvdmVyLiBJZiBhIHN0cmluZywgb3BlcmF0ZXMgb24gaW5kaXZpZHVhbCBj
aGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2s6CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBmdW5jdGlvbiBpcyBpbnZva2VkIHdp
dGggdGhyZWUgYXJndW1lbnRzOiBpdGVtLCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBhbmQgYXJyYXkgYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgY29uZGl0
aW9uIGlzIG1ldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXNPYmplY3Q6CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbWF5IGJlIHVzZWQgdG8gc2NvcGUg
dGhlIGNhbGwgdG8gY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0
aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgZnVuY3Rp
b24gY29ycmVzcG9uZHMgdG8gdGhlIEphdmFTY3JpcHQgMS42IEFycmF5LnNvbWUoKSBtZXRob2Qs
IHdpdGggb25lIGRpZmZlcmVuY2U6IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBydW4gb3ZlciBzcGFyc2UgYXJyYXlzLCB0aGlzIGltcGxlbWVuYXRpb24gcGFz
c2VzIHRoZSAiaG9sZXMiIGluIHRoZSBzcGFyc2UgYXJyYXkgdG8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhIHZhbHVl
IG9mIHVuZGVmaW5lZC4gSmF2YVNjcmlwdCAxLjYncyBzb21lIHNraXBzIHRoZSBob2xlcyBpbiB0
aGUgc3BhcnNlIGFycmF5LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IEZvciBtb3JlIGRldGFpbHMsIHNlZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2
YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvc29tZQorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAvLyBpcyB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
ZG9qby5zb21lKFsxLCAyLCAzLCA0XSwgZnVuY3Rpb24oaXRlbSl7IHJldHVybiBpdGVtPjE7IH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICAvLyBpcyBmYWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIGRvam8uc29tZShbMSwgMiwgMywgNF0sIGZ1bmN0aW9uKGl0ZW0p
eyByZXR1cm4gaXRlbTwxOyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVy
eU9yU29tZShmYWxzZSwgYXJyLCBjYWxsYmFjaywgdGhpc09iamVjdCk7IC8vIEJvb2xlYW4KKyAg
ICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgbWFwOiBmdW5jdGlvbigvKkFycmF5
fFN0cmluZyovYXJyLCAvKkZ1bmN0aW9ufFN0cmluZyovY2FsbGJhY2ssIC8qRnVuY3Rpb24/Ki90
aGlzT2JqZWN0KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYXBwbGllcyBjYWxsYmFjayB0byBlYWNo
IGVsZW1lbnQgb2YgYXJyIGFuZCByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgYW4gQXJyYXkgd2l0aCB0aGUgcmVzdWx0cworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRo
ZSBhcnJheSB0byBpdGVyYXRlIG9uLiBJZiBhIHN0cmluZywgb3BlcmF0ZXMgb24KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpbmRpdmlkdWFsIGNoYXJhY3RlcnMuCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBhIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1
bWVudHMsIChpdGVtLCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBhcnJheSksICBhbmQgcmV0dXJucyBhIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGlzT2JqZWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IG1heSBiZSB1c2VkIHRvIHNjb3BlIHRoZSBjYWxsIHRvIGNhbGxiYWNrCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBKYXZhU2NyaXB0IDEu
NiBBcnJheS5tYXAoKSBtZXRob2QsIHdpdGggb25lIGRpZmZlcmVuY2U6IHdoZW4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBydW4gb3ZlciBzcGFyc2UgYXJyYXlzLCB0
aGlzIGltcGxlbWVuYXRpb24gcGFzc2VzIHRoZSAiaG9sZXMiIGluIHRoZSBzcGFyc2UgYXJyYXkg
dG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgY2FsbGJhY2sg
ZnVuY3Rpb24gd2l0aCBhIHZhbHVlIG9mIHVuZGVmaW5lZC4gSmF2YVNjcmlwdCAxLjYncyBtYXAg
c2tpcHMgdGhlIGhvbGVzIGluIHRoZSBzcGFyc2UgYXJyYXkuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlscywgc2VlOgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9t
YXAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gcmV0dXJucyBbMiwgMywgNCwgNV0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLm1hcChbMSwgMiwgMywgNF0sIGZ1
bmN0aW9uKGl0ZW0peyByZXR1cm4gaXRlbSsxIH0pOworCisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgX3AgPSBfZ2V0UGFydHMoYXJyLCB0aGlzT2JqZWN0LCBjYWxsYmFjayk7IGFyciA9IF9w
WzBdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dEFyciA9IChhcmd1bWVudHNbM10g
PyAobmV3IGFyZ3VtZW50c1szXSgpKSA6IFtdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
cih2YXIgaT0wLGw9YXJyLmxlbmd0aDsgaTxsOyArK2kpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRBcnIucHVzaChfcFsyXS5jYWxsKF9wWzFdLCBhcnJbaV0sIGksIGFycikp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG91dEFycjsgLy8gQXJyYXkKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgZmlsdGVyOiBmdW5jdGlvbigvKkFycmF5Ki9hcnIsIC8qRnVuY3Rpb258U3RyaW5nKi9jYWxs
YmFjaywgLypPYmplY3Q/Ki90aGlzT2JqZWN0KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmV0dXJu
cyBhIG5ldyBBcnJheSB3aXRoIHRob3NlIGl0ZW1zIGZyb20gYXJyIHRoYXQgbWF0Y2ggdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY29uZGl0aW9uIGltcGxlbWVu
dGVkIGJ5IGNhbGxiYWNrLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyOgorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSBhcnJheSB0byBpdGVyYXRlIG92
ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFjazoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBhIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCB3aXRo
IHRocmVlIGFyZ3VtZW50cyAoaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBpbmRleCwgYXJyYXkpLiBUaGUgcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXhw
ZWN0ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBiZSBhIGJv
b2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQtaW4gaXRlbQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhl
IHJldHVybmVkIGFycmF5LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpc09iamVjdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBtYXkgYmUgdXNlZCB0byBz
Y29wZSB0aGUgY2FsbCB0byBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVz
Y3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhpcyBm
dW5jdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgSmF2YVNjcmlwdCAxLjYgQXJyYXkuZmlsdGVyKCkg
bWV0aG9kLCB3aXRoIG9uZSBkaWZmZXJlbmNlOiB3aGVuCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgcnVuIG92ZXIgc3BhcnNlIGFycmF5cywgdGhpcyBpbXBsZW1lbmF0
aW9uIHBhc3NlcyB0aGUgImhvbGVzIiBpbiB0aGUgc3BhcnNlIGFycmF5IHRvCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGgg
YSB2YWx1ZSBvZiB1bmRlZmluZWQuIEphdmFTY3JpcHQgMS42J3MgZmlsdGVyIHNraXBzIHRoZSBo
b2xlcyBpbiB0aGUgc3BhcnNlIGFycmF5LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIEZvciBtb3JlIGRldGFpbHMsIHNlZToKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Vu
L0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvZmlsdGVyCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIC8vIHJldHVybnMgWzIsIDMsIDRdCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgZG9qby5maWx0ZXIoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihp
dGVtKXsgcmV0dXJuIGl0ZW0+MTsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBf
cCA9IF9nZXRQYXJ0cyhhcnIsIHRoaXNPYmplY3QsIGNhbGxiYWNrKTsgYXJyID0gX3BbMF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0QXJyID0gW107CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IodmFyIGk9MCxsPWFyci5sZW5ndGg7IGk8bDsgKytpKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoX3BbMl0uY2FsbChfcFsxXSwgYXJyW2ldLCBpLCBhcnIp
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRBcnIucHVzaChh
cnJbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0QXJyOyAvLyBB
cnJheQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cit9KSgpOworLyoKKyovCisKK30K
KworaWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmRlY2xhcmUiXSl7IC8vX2hhc1Jl
c291cmNlIGNoZWNrcyBhZGRlZCBieSBidWlsZC4gRG8gbm90IHVzZSBfaGFzUmVzb3VyY2UgZGly
ZWN0bHkgaW4geW91ciBjb2RlLgorZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuZGVjbGFy
ZSJdID0gdHJ1ZTsKK2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS5kZWNsYXJlIik7CisKKworCisK
KyhmdW5jdGlvbigpeworICAgICAgICB2YXIgZCA9IGRvam8sIG1peCA9IGQuX21peGluLCBvcCA9
IE9iamVjdC5wcm90b3R5cGUsIG9wdHMgPSBvcC50b1N0cmluZywKKyAgICAgICAgICAgICAgICB4
dG9yID0gbmV3IEZ1bmN0aW9uLCBjb3VudGVyID0gMCwgY25hbWUgPSAiY29uc3RydWN0b3IiOwor
CisgICAgICAgIGZ1bmN0aW9uIGVycihtc2csIGNscyl7IHRocm93IG5ldyBFcnJvcigiZGVjbGFy
ZSIgKyAoY2xzID8gIiAiICsgY2xzIDogIiIpICsgIjogIiArIG1zZyk7IH0KKworICAgICAgICAv
LyBDMyBNZXRob2QgUmVzb2x1dGlvbiBPcmRlciAoc2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9k
b3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLykKKyAgICAgICAgZnVuY3Rpb24gYzNtcm8oYmFzZXMs
IGNsYXNzTmFtZSl7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdLCByb290cyA9IFt7
Y2xzOiAwLCByZWZzOiBbXX1dLCBuYW1lTWFwID0ge30sIGNsc0NvdW50ID0gMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGwgPSBiYXNlcy5sZW5ndGgsIGkgPSAwLCBqLCBsaW4sIGJhc2UsIHRv
cCwgcHJvdG8sIHJlYywgbmFtZSwgcmVmczsKKworICAgICAgICAgICAgICAgIC8vIGJ1aWxkIGEg
bGlzdCBvZiBiYXNlcyBuYW1pbmcgdGhlbSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICBmb3Io
OyBpIDwgbDsgKytpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFiYXNlKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyKCJtaXhpbiAjIiArIGkgKyAiIGlzIHVua25vd24uIERpZCB5b3UgdXNl
IGRvam8ucmVxdWlyZSB0byBwdWxsIGl0IGluPyIsIGNsYXNzTmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9ZWxzZSBpZihvcHRzLmNhbGwoYmFzZSkgIT0gIltvYmplY3QgRnVuY3Rpb25d
Iil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycigibWl4aW4gIyIgKyBpICsg
IiBpcyBub3QgYSBjYWxsYWJsZSBjb25zdHJ1Y3Rvci4iLCBjbGFzc05hbWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGluID0gYmFzZS5fbWV0
YSA/IGJhc2UuX21ldGEuYmFzZXMgOiBbYmFzZV07CisgICAgICAgICAgICAgICAgICAgICAgICB0
b3AgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGJhc2VzIHRvIHRoZSBuYW1l
IG1hcAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGogPSBsaW4ubGVuZ3RoIC0gMTsgaiA+
PSAwOyAtLWopeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90byA9IGxpbltq
XS5wcm90b3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFwcm90by5o
YXNPd25Qcm9wZXJ0eSgiZGVjbGFyZWRDbGFzcyIpKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm90by5kZWNsYXJlZENsYXNzID0gInVuaXFOYW1lXyIgKyAoY291
bnRlcisrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lID0gcHJvdG8uZGVjbGFyZWRDbGFzczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW5hbWVNYXAuaGFzT3duUHJvcGVydHkobmFtZSkp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVNYXBbbmFtZV0g
PSB7Y291bnQ6IDAsIHJlZnM6IFtdLCBjbHM6IGxpbltqXX07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKytjbHNDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMgPSBuYW1lTWFw
W25hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0b3AgJiYgdG9wICE9
PSByZWMpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5yZWZz
LnB1c2godG9wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3Rv
cC5jb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b3AgPSByZWM7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICArK3RvcC5jb3VudDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJvb3RzWzBdLnJlZnMucHVzaCh0b3ApOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIHJlbW92ZSBjbGFzc2VzIHdpdGhvdXQgZXh0ZXJuYWwgcmVmZXJlbmNl
cyByZWN1cnNpdmVseQorICAgICAgICAgICAgICAgIHdoaWxlKHJvb3RzLmxlbmd0aCl7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0b3AgPSByb290cy5wb3AoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5wdXNoKHRvcC5jbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgLS1j
bHNDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbjogZm9sbG93
IGEgc2luZ2xlLWxpbmtlZCBjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUocmVm
cyA9IHRvcC5yZWZzLCByZWZzLmxlbmd0aCA9PSAxKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9wID0gcmVmc1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYoIXRvcCB8fCAtLXRvcC5jb3VudCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYnJhbmNoIG9yIGVuZCBvZiBjaGFpbiA9PiBkbyBub3QgZW5kIHRvIHJvb3Rz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQucHVzaCh0b3AuY2xzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1jbHND
b3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmKHRvcCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJyYW5jaAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDAsIGwgPSByZWZzLmxlbmd0aDsg
aSA8IGw7ICsraSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9w
ID0gcmVmc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigh
LS10b3AuY291bnQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcm9vdHMucHVzaCh0b3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihjbHND
b3VudCl7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIoImNhbid0IGJ1aWxkIGNvbnNpc3Rl
bnQgbGluZWFyaXphdGlvbiIsIGNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBzdXBlcmNsYXNzIG9mZnNldAorICAgICAgICAg
ICAgICAgIGJhc2UgPSBiYXNlc1swXTsKKyAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBiYXNl
ID8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UuX21ldGEgJiYgYmFzZSA9PT0gcmVzdWx0
W3Jlc3VsdC5sZW5ndGggLSBiYXNlLl9tZXRhLmJhc2VzLmxlbmd0aF0gPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlLl9tZXRhLmJhc2VzLmxlbmd0aCA6IDEgOiAwOworCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIGluaGVyaXRlZChhcmdzLCBhLCBmKXsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZSwgY2hh
aW5zLCBiYXNlcywgY2FsbGVyLCBtZXRhLCBiYXNlLCBwcm90bywgb3BmLCBwb3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjYWNoZSA9IHRoaXMuX2luaGVyaXRlZCA9IHRoaXMuX2luaGVyaXRl
ZCB8fCB7fTsKKworICAgICAgICAgICAgICAgIC8vIGNyYWNrIGFyZ3VtZW50cworICAgICAgICAg
ICAgICAgIGlmKHR5cGVvZiBhcmdzID09ICJzdHJpbmciKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWUgPSBhcmdzOworICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGE7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhID0gZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZiA9IDA7CisKKyAgICAgICAgICAgICAgICBjYWxsZXIgPSBhcmdzLmNhbGxlZTsKKyAg
ICAgICAgICAgICAgICBuYW1lID0gbmFtZSB8fCBjYWxsZXIubm9tOworICAgICAgICAgICAgICAg
IGlmKCFuYW1lKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycigiY2FuJ3QgZGVkdWNlIGEg
bmFtZSB0byBjYWxsIGluaGVyaXRlZCgpIiwgdGhpcy5kZWNsYXJlZENsYXNzKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtZXRhID0gdGhpcy5jb25zdHJ1Y3Rvci5fbWV0
YTsKKyAgICAgICAgICAgICAgICBiYXNlcyA9IG1ldGEuYmFzZXM7CisKKyAgICAgICAgICAgICAg
ICBwb3MgPSBjYWNoZS5wOworICAgICAgICAgICAgICAgIGlmKG5hbWUgIT0gY25hbWUpeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZihjYWNoZS5jICE9PSBjYWxsZXIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBjYWNoZSBidXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlc1swXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0YSA9IGJhc2UuX21ldGE7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKG1ldGEuaGlkZGVuW25hbWVdICE9PSBjYWxsZXIpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9yIGRldGVjdGlvbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWlucyA9IG1ldGEuY2hh
aW5zOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoYWlucyAm
JiB0eXBlb2YgY2hhaW5zW25hbWVdID09ICJzdHJpbmciKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycigiY2FsbGluZyBjaGFpbmVkIG1ldGhvZCB3
aXRoIGluaGVyaXRlZDogIiArIG5hbWUsIHRoaXMuZGVjbGFyZWRDbGFzcyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGZpbmQgY2FsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG97CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZXRhID0gYmFzZS5fbWV0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3RvID0gYmFzZS5wcm90b3R5cGU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtZXRhICYmIChwcm90b1tu
YW1lXSA9PT0gY2FsbGVyICYmIHByb3RvLmhhc093blByb3BlcnR5KG5hbWUpIHx8IG1ldGEuaGlk
ZGVuW25hbWVdID09PSBjYWxsZXIpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfXdoaWxlKGJhc2UgPSBiYXNlc1srK3Bvc10pOyAvLyBpbnRlbnRpb25hbCBhc3Np
Z25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gYmFz
ZSA/IHBvcyA6IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIG5leHQK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlc1srK3Bvc107CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZihiYXNlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvdG8gPSBiYXNlLnByb3RvdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYoYmFzZS5fbWV0YSAmJiBwcm90by5oYXNPd25Qcm9wZXJ0eShuYW1lKSl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHByb3RvW25hbWVdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGYgPSBvcFtuYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3RvID0gYmFzZS5wcm90b3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gcHJvdG9bbmFtZV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmICYmIChiYXNlLl9tZXRhID8g
cHJvdG8uaGFzT3duUHJvcGVydHkobmFtZSkgOiBmICE9PSBvcGYpKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKGJhc2UgPSBiYXNlc1srK3Bvc10pOyAv
LyBpbnRlbnRpb25hbCBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGYg
PSBiYXNlICYmIGYgfHwgb3BbbmFtZV07CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICAgICAg
aWYoY2FjaGUuYyAhPT0gY2FsbGVyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY2FjaGUgYnVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhID0gYmFzZXNbMF0uX21ldGE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1ldGEgJiYgbWV0YS5jdG9yICE9PSBj
YWxsZXIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9y
IGRldGVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWlu
cyA9IG1ldGEuY2hhaW5zOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmKCFjaGFpbnMgfHwgY2hhaW5zLmNvbnN0cnVjdG9yICE9PSAibWFudWFsIil7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoImNhbGxpbmcgY2hh
aW5lZCBjb25zdHJ1Y3RvciB3aXRoIGluaGVyaXRlZCIsIHRoaXMuZGVjbGFyZWRDbGFzcyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgY2FsbGVyCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoYmFzZSA9IGJhc2VzWysrcG9zXSl7IC8vIGlu
dGVudGlvbmFsIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1ldGEgPSBiYXNlLl9tZXRhOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYobWV0YSAmJiBtZXRhLmN0b3IgPT09IGNhbGxlcil7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBiYXNlID8gcG9zIDogLTE7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgbmV4dAorICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUoYmFzZSA9IGJhc2VzWysrcG9zXSl7ICAgICAvLyBpbnRlbnRpb25hbCBhc3Np
Z25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEgPSBiYXNlLl9tZXRh
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gbWV0YSA/IG1ldGEuY3RvciA6
IGJhc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGYpeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBmID0gYmFzZSAmJiBmOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIGNhY2hlIHRoZSBmb3VuZCBzdXBlciBtZXRob2QKKyAgICAgICAgICAgICAgICBj
YWNoZS5jID0gZjsKKyAgICAgICAgICAgICAgICBjYWNoZS5wID0gcG9zOworCisgICAgICAgICAg
ICAgICAgLy8gbm93IHdlIGhhdmUgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgIGlmKGYpewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPT09IHRydWUgPyBmIDogZi5hcHBseSh0
aGlzLCBhIHx8IGFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBp
bnRlbnRpb25hbGx5IGlmIGEgc3VwZXIgbWV0aG9kIHdhcyBub3QgZm91bmQKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGdldEluaGVyaXRlZChuYW1lLCBhcmdzKXsKKyAgICAgICAgICAg
ICAgICBpZih0eXBlb2YgbmFtZSA9PSAic3RyaW5nIil7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5pbmhlcml0ZWQobmFtZSwgYXJncywgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaGVyaXRlZChuYW1lLCB0cnVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIGVtdWxhdGlvbiBvZiAiaW5zdGFuY2VvZiIKKyAgICAg
ICAgZnVuY3Rpb24gaXNJbnN0YW5jZU9mKGNscyl7CisgICAgICAgICAgICAgICAgdmFyIGJhc2Vz
ID0gdGhpcy5jb25zdHJ1Y3Rvci5fbWV0YS5iYXNlczsKKyAgICAgICAgICAgICAgICBmb3IodmFy
IGkgPSAwLCBsID0gYmFzZXMubGVuZ3RoOyBpIDwgbDsgKytpKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKGJhc2VzW2ldID09PSBjbHMpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBjbHM7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBtaXhPd24odGFyZ2V0LCBzb3VyY2UpeworICAgICAg
ICAgICAgICAgIHZhciBuYW1lLCBpID0gMCwgbCA9IGQuX2V4dHJhTmFtZXMubGVuZ3RoOworICAg
ICAgICAgICAgICAgIC8vIGFkZCBwcm9wcyBhZGRpbmcgbWV0YWRhdGEgZm9yIGluY29taW5nIGZ1
bmN0aW9ucyBza2lwcGluZyBhIGNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgZm9yKG5hbWUg
aW4gc291cmNlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5hbWUgIT0gY25hbWUgJiYg
c291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHVuZW51
bWVyYWJsZSBtZXRob2RzIG9uIElFCisgICAgICAgICAgICAgICAgZm9yKDsgaSA8IGw7ICsraSl7
CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZC5fZXh0cmFOYW1lc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKG5hbWUgIT0gY25hbWUgJiYgc291cmNlLmhhc093blByb3Bl
cnR5KG5hbWUpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVd
ID0gc291cmNlW25hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIHNhZmUgbWl4
aW4gZnVuY3Rpb24KKyAgICAgICAgZnVuY3Rpb24gc2FmZU1peGluKHRhcmdldCwgc291cmNlKXsK
KyAgICAgICAgICAgICAgICB2YXIgbmFtZSwgdCwgaSA9IDAsIGwgPSBkLl9leHRyYU5hbWVzLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICAvLyBhZGQgcHJvcHMgYWRkaW5nIG1ldGFkYXRhIGZvciBp
bmNvbWluZyBmdW5jdGlvbnMgc2tpcHBpbmcgYSBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAg
IGZvcihuYW1lIGluIHNvdXJjZSl7CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc291cmNl
W25hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHQgIT09IG9wW25hbWVdIHx8ICEo
bmFtZSBpbiBvcCkpICYmIG5hbWUgIT0gY25hbWUpeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZihvcHRzLmNhbGwodCkgPT0gIltvYmplY3QgRnVuY3Rpb25dIil7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9uLXRyaXZpYWwgZnVuY3Rpb24g
bWV0aG9kID0+IGF0dGFjaCBpdHMgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHQubm9tID0gbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSB0OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyBwcm9jZXNzIHVuZW51bWVyYWJsZSBtZXRob2RzIG9uIElFCisgICAgICAgICAgICAgICAg
Zm9yKDsgaSA8IGw7ICsraSl7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZC5fZXh0
cmFOYW1lc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBzb3VyY2VbbmFtZV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZigodCAhPT0gb3BbbmFtZV0gfHwgIShuYW1lIGluIG9w
KSkgJiYgbmFtZSAhPSBjbmFtZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
KG9wdHMuY2FsbCh0KSA9PSAiW29iamVjdCBGdW5jdGlvbl0iKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBub24tdHJpdmlhbCBmdW5jdGlvbiBtZXRob2QgPT4g
YXR0YWNoIGl0cyBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dC5ub20gPSBuYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0
YXJnZXQ7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBleHRlbmQoc291cmNlKXsKKyAg
ICAgICAgICAgICAgICBzYWZlTWl4aW4odGhpcy5wcm90b3R5cGUsIHNvdXJjZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGFpbmVkIGNv
bnN0cnVjdG9yIGNvbXBhdGlibGUgd2l0aCB0aGUgbGVnYWN5IGRvam8uZGVjbGFyZSgpCisgICAg
ICAgIGZ1bmN0aW9uIGNoYWluZWRDb25zdHJ1Y3RvcihiYXNlcywgY3RvclNwZWNpYWwpeworICAg
ICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGEgPSBhcmd1bWVudHMsIGFyZ3MgPSBhLCBhMCA9IGFbMF0sIGYsIGksIG0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBiYXNlcy5sZW5ndGgsIHByZUFyZ3M7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmKCEodGhpcyBpbnN0YW5jZW9mIGEuY2FsbGVlKSl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBjYWxsZWQgdmlhIG5ldywgc28g
Zm9yY2UgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5TmV3
KGEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL3RoaXMuX2luaGVyaXRlZCA9IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVy
Zm9ybSB0aGUgc2hhbWFuJ3Mgcml0dWFscyBvZiB0aGUgb3JpZ2luYWwgZG9qby5kZWNsYXJlKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEpIGNhbGwgdHdvIHR5cGVzIG9mIHRoZSBwcmVh
bWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYoY3RvclNwZWNpYWwgJiYgKGEwICYmIGEw
LnByZWFtYmxlIHx8IHRoaXMucHJlYW1ibGUpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZnVsbCBibG93biByaXR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJlQXJncyA9IG5ldyBBcnJheShiYXNlcy5sZW5ndGgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBwcmVwYXJlIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlQXJnc1swXSA9IGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcihpID0gMDs7KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwcm9jZXNzIHRoZSBwcmVhbWJsZSBvZiB0aGUgMXN0IGFyZ3VtZW50CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTAgPSBhWzBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGEwKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBhMC5wcmVhbWJsZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGYpeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gZi5hcHBseSh0aGlz
LCBhKSB8fCBhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHRoZSBwcmVhbWJsZSBv
ZiB0aGlzIGNsYXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9
IGJhc2VzW2ldLnByb3RvdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmID0gZi5oYXNPd25Qcm9wZXJ0eSgicHJlYW1ibGUiKSAmJiBmLnByZWFtYmxlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGYpeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGYuYXBwbHkodGhpcywgYSkg
fHwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25lIHBlY3VsaWFyaXR5IG9mIHRo
ZSBwcmVhbWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
dCBpcyBjYWxsZWQgaWYgaXQgaXMgbm90IG5lZWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBlLmcuLCB0aGVyZSBpcyBubyBjb25zdHJ1Y3RvciB0byBjYWxs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0J3Mgd2F0Y2gg
Zm9yIHRoZSBsYXN0IGNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gKHNlZSB0aWNrZXQgIzk3OTUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoKytpID09IGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZUFyZ3NbaV0gPSBhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAyKSBjYWxsIGFs
bCBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMgdXNpbmcgcHJlcGFyZWQgYXJndW1lbnRzCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IGwgLSAxOyBpID49IDA7IC0taSl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBiYXNlc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbSA9IGYuX21ldGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGYgPSBtID8gbS5jdG9yIDogZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYoZil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5hcHBseSh0
aGlzLCBwcmVBcmdzID8gcHJlQXJnc1tpXSA6IGEpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAzKSBjb250aW51ZSB0aGUgb3JpZ2luYWwgcml0dWFsOiBjYWxsIHRoZSBwb3N0c2Ny
aXB0CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gdGhpcy5wb3N0c2NyaXB0OworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYoZil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGYuYXBwbHkodGhpcywgYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLy8gY2hhaW5lZCBjb25zdHJ1Y3Rv
ciBjb21wYXRpYmxlIHdpdGggdGhlIGxlZ2FjeSBkb2pvLmRlY2xhcmUoKQorICAgICAgICBmdW5j
dGlvbiBzaW5nbGVDb25zdHJ1Y3RvcihjdG9yLCBjdG9yU3BlY2lhbCl7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGFy
Z3VtZW50cywgdCA9IGEsIGEwID0gYVswXSwgZjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
aWYoISh0aGlzIGluc3RhbmNlb2YgYS5jYWxsZWUpKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gbm90IGNhbGxlZCB2aWEgbmV3LCBzbyBmb3JjZSBpdAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlOZXcoYSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5faW5oZXJpdGVkID0g
e307CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIHRoZSBzaGFtYW4ncyByaXR1
YWxzIG9mIHRoZSBvcmlnaW5hbCBkb2pvLmRlY2xhcmUoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gMSkgY2FsbCB0d28gdHlwZXMgb2YgdGhlIHByZWFtYmxlCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZihjdG9yU3BlY2lhbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGZ1bGwgYmxvd24gcml0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
KGEwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNz
IHRoZSBwcmVhbWJsZSBvZiB0aGUgMXN0IGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZiA9IGEwLnByZWFtYmxlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKGYpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdCA9IGYuYXBwbHkodGhpcywgdCkgfHwgdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHRoaXMucHJlYW1i
bGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGYpeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgdGhlIHByZWFtYmxlIG9mIHRo
aXMgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmFwcGx5
KHRoaXMsIHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9u
ZSBwZWN1bGlhcml0eSBvZiB0aGUgcHJlYW1ibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaXQgaXMgY2FsbGVkIGV2ZW4gaWYgaXQgaXMgbm90IG5lZWRlZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlLmcuLCB0aGVyZSBp
cyBubyBjb25zdHJ1Y3RvciB0byBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gbGV0J3Mgd2F0Y2ggZm9yIHRoZSBsYXN0IGNvbnN0cnVjdG9yCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHNlZSB0aWNrZXQgIzk3OTUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIpIGNhbGwgYSBjb25zdHJ1Y3RvcgorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoY3Rvcil7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN0b3IuYXBwbHkodGhpcywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAzKSBjb250aW51ZSB0aGUgb3JpZ2luYWwgcml0dWFs
OiBjYWxsIHRoZSBwb3N0c2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gdGhpcy5w
b3N0c2NyaXB0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZil7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGYuYXBwbHkodGhpcywgYSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHBsYWlu
IHZhbmlsbGEgY29uc3RydWN0b3IgKGNhbiB1c2UgaW5oZXJpdGVkKCkgdG8gY2FsbCBpdHMgYmFz
ZSBjb25zdHJ1Y3RvcikKKyAgICAgICAgZnVuY3Rpb24gc2ltcGxlQ29uc3RydWN0b3IoYmFzZXMp
eworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGEgPSBhcmd1bWVudHMsIGkgPSAwLCBmLCBtOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZighKHRoaXMgaW5zdGFuY2VvZiBhLmNhbGxlZSkpeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBub3QgY2FsbGVkIHZpYSBuZXcsIHNvIGZvcmNlIGl0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHBseU5ldyhhKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLl9pbmhl
cml0ZWQgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlcmZvcm0gdGhlIHNoYW1h
bidzIHJpdHVhbHMgb2YgdGhlIG9yaWdpbmFsIGRvam8uZGVjbGFyZSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAxKSBkbyBub3QgY2FsbCB0aGUgcHJlYW1ibGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIDIpIGNhbGwgdGhlIHRvcCBjb25zdHJ1Y3RvciAoaXQgY2FuIHVzZSB0aGlz
LmluaGVyaXRlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKDsgZiA9IGJhc2VzW2ld
OyArK2kpeyAvLyBpbnRlbnRpb25hbCBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG0gPSBmLl9tZXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
ID0gbSA/IG0uY3RvciA6IGY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGYp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwbHkodGhpcywg
YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMpIGNhbGwgdGhlIHBvc3RzY3JpcHQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGYgPSB0aGlzLnBvc3RzY3JpcHQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZihmKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5hcHBseSh0
aGlzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY2hhaW4obmFtZSwgYmFzZXMsIHJldmVyc2Vk
KXsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBiLCBtLCBmLCBpID0gMCwgc3RlcCA9IDE7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZihyZXZlcnNlZCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBi
YXNlcy5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwID0g
LTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IoOyBiID0gYmFzZXNbaV07IGkgKz0gc3RlcCl7IC8vIGludGVudGlvbmFsIGFzc2lnbm1lbnQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGIuX21ldGE7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGYgPSAobSA/IG0uaGlkZGVuIDogYi5wcm90b3R5cGUpW25h
bWVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gZm9yY2VOZXco
Y3RvcikKKyAgICAgICAgLy8gcmV0dXJuIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20g
Y3Rvci5wcm90b3R5cGUgYnV0CisgICAgICAgIC8vIHdpdGhvdXQgYWN0dWFsbHkgcnVubmluZyBj
dG9yIG9uIHRoZSBvYmplY3QuCisgICAgICAgIGZ1bmN0aW9uIGZvcmNlTmV3KGN0b3IpeworICAg
ICAgICAgICAgICAgIC8vIGNyZWF0ZSBvYmplY3Qgd2l0aCBjb3JyZWN0IHByb3RvdHlwZSB1c2lu
ZyBhIGRvLW5vdGhpbmcKKyAgICAgICAgICAgICAgICAvLyBjb25zdHJ1Y3RvcgorICAgICAgICAg
ICAgICAgIHh0b3IucHJvdG90eXBlID0gY3Rvci5wcm90b3R5cGU7CisgICAgICAgICAgICAgICAg
dmFyIHQgPSBuZXcgeHRvcjsKKyAgICAgICAgICAgICAgICB4dG9yLnByb3RvdHlwZSA9IG51bGw7
ICAvLyBjbGVhbiB1cAorICAgICAgICAgICAgICAgIHJldHVybiB0OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gYXBwbHlOZXcoYXJncykKKyAgICAgICAgLy8ganVzdCBsaWtlICduZXcgY3Rvcigp
JyBleGNlcHQgdGhhdCB0aGUgY29uc3RydWN0b3IgYW5kIGl0cyBhcmd1bWVudHMgY29tZQorICAg
ICAgICAvLyBmcm9tIGFyZ3MsIHdoaWNoIG11c3QgYmUgYW4gYXJyYXkgb3IgYW4gYXJndW1lbnRz
IG9iamVjdAorICAgICAgICBmdW5jdGlvbiBhcHBseU5ldyhhcmdzKXsKKyAgICAgICAgICAgICAg
ICAvLyBjcmVhdGUgYW4gb2JqZWN0IHdpdGggY3RvcidzIHByb3RvdHlwZSBidXQgd2l0aG91dAor
ICAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgY3RvciBvbiBpdC4KKyAgICAgICAgICAgICAgICB2
YXIgY3RvciA9IGFyZ3MuY2FsbGVlLCB0ID0gZm9yY2VOZXcoY3Rvcik7CisgICAgICAgICAgICAg
ICAgLy8gZXhlY3V0ZSB0aGUgcmVhbCBjb25zdHJ1Y3RvciBvbiB0aGUgbmV3IG9iamVjdAorICAg
ICAgICAgICAgICAgIGN0b3IuYXBwbHkodCwgYXJncyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHQ7CisgICAgICAgIH0KKworICAgICAgICBkLmRlY2xhcmUgPSBmdW5jdGlvbihjbGFzc05hbWUs
IHN1cGVyY2xhc3MsIHByb3BzKXsKKyAgICAgICAgICAgICAgICAvLyBjcmFjayBwYXJhbWV0ZXJz
CisgICAgICAgICAgICAgICAgaWYodHlwZW9mIGNsYXNzTmFtZSAhPSAic3RyaW5nIil7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wcyA9IHN1cGVyY2xhc3M7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdXBlcmNsYXNzID0gY2xhc3NOYW1lOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3NOYW1lID0gIiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByb3Bz
ID0gcHJvcHMgfHwge307CisKKyAgICAgICAgICAgICAgICB2YXIgcHJvdG8sIGksIHQsIGN0b3Is
IG5hbWUsIGJhc2VzLCBjaGFpbnMsIG1peGlucyA9IDEsIHBhcmVudHMgPSBzdXBlcmNsYXNzOwor
CisgICAgICAgICAgICAgICAgLy8gYnVpbGQgYSBwcm90b3R5cGUKKyAgICAgICAgICAgICAgICBp
ZihvcHRzLmNhbGwoc3VwZXJjbGFzcykgPT0gIltvYmplY3QgQXJyYXldIil7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDMyBNUk8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VzID0g
YzNtcm8oc3VwZXJjbGFzcywgY2xhc3NOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQg
PSBiYXNlc1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1peGlucyA9IGJhc2VzLmxlbmd0
aCAtIHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcmNsYXNzID0gYmFzZXNbbWl4aW5z
XTsKKyAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Vz
ID0gWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3VwZXJjbGFzcyl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9wdHMuY2FsbChzdXBlcmNsYXNzKSA9PSAiW29i
amVjdCBGdW5jdGlvbl0iKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ID0gc3VwZXJjbGFzcy5fbWV0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlcyA9IGJhc2VzLmNvbmNhdCh0ID8gdC5iYXNlcyA6IHN1cGVyY2xhc3MpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnIoImJhc2UgY2xhc3MgaXMgbm90IGEgY2FsbGFibGUg
Y29uc3RydWN0b3IuIiwgY2xhc3NOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoc3VwZXJjbGFzcyAhPT0gbnVs
bCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycigidW5rbm93biBiYXNlIGNs
YXNzLiBEaWQgeW91IHVzZSBkb2pvLnJlcXVpcmUgdG8gcHVsbCBpdCBpbj8iLCBjbGFzc05hbWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZihzdXBlcmNsYXNzKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpID0g
bWl4aW5zIC0gMTs7IC0taSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Rv
ID0gZm9yY2VOZXcoc3VwZXJjbGFzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmKCFpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9w
IGlmIG5vdGhpbmcgdG8gYWRkICh0aGUgbGFzdCBiYXNlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1peCBpbiBwcm9wZXJ0aWVz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBiYXNlc1tpXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHQuX21ldGEgPyBtaXhPd24gOiBtaXgpKHByb3RvLCB0
LnByb3RvdHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYWluIGlu
IG5ldyBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yID0g
bmV3IEZ1bmN0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yLnN1cGVy
Y2xhc3MgPSBzdXBlcmNsYXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9y
LnByb3RvdHlwZSA9IHByb3RvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBl
cmNsYXNzID0gcHJvdG8uY29uc3RydWN0b3IgPSBjdG9yOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgcHJv
dG8gPSB7fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gYWRkIGFsbCBw
cm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgc2FmZU1peGluKHByb3RvLCBwcm9wcyk7CisgICAg
ICAgICAgICAgICAgLy8gYWRkIGNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgdCA9IHByb3Bz
LmNvbnN0cnVjdG9yOworICAgICAgICAgICAgICAgIGlmKHQgIT09IG9wLmNvbnN0cnVjdG9yKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHQubm9tID0gY25hbWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwcm90by5jb25zdHJ1Y3RvciA9IHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gY29sbGVjdCBjaGFpbnMgYW5kIGZsYWdzCisgICAgICAgICAgICAgICAg
Zm9yKGkgPSBtaXhpbnMgLSAxOyBpOyAtLWkpeyAvLyBpbnRlbnRpb25hbCBhc3NpZ25tZW50Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ID0gYmFzZXNbaV0uX21ldGE7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZih0ICYmIHQuY2hhaW5zKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhaW5zID0gbWl4KGNoYWlucyB8fCB7fSwgdC5jaGFpbnMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihwcm90
b1siLWNoYWlucy0iXSl7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFpbnMgPSBtaXgoY2hh
aW5zIHx8IHt9LCBwcm90b1siLWNoYWlucy0iXSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gYnVpbGQgY3RvcgorICAgICAgICAgICAgICAgIHQgPSAhY2hhaW5zIHx8
ICFjaGFpbnMuaGFzT3duUHJvcGVydHkoY25hbWUpOworICAgICAgICAgICAgICAgIGJhc2VzWzBd
ID0gY3RvciA9IChjaGFpbnMgJiYgY2hhaW5zLmNvbnN0cnVjdG9yID09PSAibWFudWFsIikgPyBz
aW1wbGVDb25zdHJ1Y3RvcihiYXNlcykgOgorICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2Vz
Lmxlbmd0aCA9PSAxID8gc2luZ2xlQ29uc3RydWN0b3IocHJvcHMuY29uc3RydWN0b3IsIHQpIDog
Y2hhaW5lZENvbnN0cnVjdG9yKGJhc2VzLCB0KSk7CisKKyAgICAgICAgICAgICAgICAvLyBhZGQg
bWV0YSBpbmZvcm1hdGlvbiB0byB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgICAgICAgICBjdG9y
Ll9tZXRhICA9IHtiYXNlczogYmFzZXMsIGhpZGRlbjogcHJvcHMsIGNoYWluczogY2hhaW5zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50czogcGFyZW50cywgY3RvcjogcHJvcHMuY29u
c3RydWN0b3J9OworICAgICAgICAgICAgICAgIGN0b3Iuc3VwZXJjbGFzcyA9IHN1cGVyY2xhc3Mg
JiYgc3VwZXJjbGFzcy5wcm90b3R5cGU7CisgICAgICAgICAgICAgICAgY3Rvci5leHRlbmQgPSBl
eHRlbmQ7CisgICAgICAgICAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBwcm90bzsKKyAgICAgICAg
ICAgICAgICBwcm90by5jb25zdHJ1Y3RvciA9IGN0b3I7CisKKyAgICAgICAgICAgICAgICAvLyBh
ZGQgInN0YW5kYXJkIiBtZXRob2RzIHRvIHRoZSBwcm90b3R5cGUKKyAgICAgICAgICAgICAgICBw
cm90by5nZXRJbmhlcml0ZWQgPSBnZXRJbmhlcml0ZWQ7CisgICAgICAgICAgICAgICAgcHJvdG8u
aW5oZXJpdGVkID0gaW5oZXJpdGVkOworICAgICAgICAgICAgICAgIHByb3RvLmlzSW5zdGFuY2VP
ZiA9IGlzSW5zdGFuY2VPZjsKKworICAgICAgICAgICAgICAgIC8vIGFkZCBuYW1lIGlmIHNwZWNp
ZmllZAorICAgICAgICAgICAgICAgIGlmKGNsYXNzTmFtZSl7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm90by5kZWNsYXJlZENsYXNzID0gY2xhc3NOYW1lOworICAgICAgICAgICAgICAgICAg
ICAgICAgZC5zZXRPYmplY3QoY2xhc3NOYW1lLCBjdG9yKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBidWlsZCBjaGFpbnMgYW5kIGFkZCB0aGVtIHRvIHRoZSBwcm90
b3R5cGUKKyAgICAgICAgICAgICAgICBpZihjaGFpbnMpeworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yKG5hbWUgaW4gY2hhaW5zKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYocHJvdG9bbmFtZV0gJiYgdHlwZW9mIGNoYWluc1tuYW1lXSA9PSAic3RyaW5nIiAmJiBuYW1l
ICE9IGNuYW1lKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0g
cHJvdG9bbmFtZV0gPSBjaGFpbihuYW1lLCBiYXNlcywgY2hhaW5zW25hbWVdID09PSAiYWZ0ZXIi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm5vbSA9IG5hbWU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gY2hhaW5lZCBtZXRo
b2RzIGRvIG5vdCByZXR1cm4gdmFsdWVzCisgICAgICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBj
aGFpbiAiaW52aXNpYmxlIiBmdW5jdGlvbnMKKworICAgICAgICAgICAgICAgIHJldHVybiBjdG9y
OyAgICAvLyBGdW5jdGlvbgorICAgICAgICB9OworCisgICAgICAgIGQuc2FmZU1peGluID0gc2Fm
ZU1peGluOworCisgICAgICAgIC8qPT09PT0KKyAgICAgICAgZG9qby5kZWNsYXJlID0gZnVuY3Rp
b24oY2xhc3NOYW1lLCBzdXBlcmNsYXNzLCBwcm9wcyl7CisgICAgICAgICAgICAgICAgLy8gICAg
ICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBDcmVhdGUgYSBmZWF0
dXJlLXJpY2ggY29uc3RydWN0b3IgZnJvbSBjb21wYWN0IG5vdGF0aW9uLgorICAgICAgICAgICAg
ICAgIC8vICAgICAgY2xhc3NOYW1lOiBTdHJpbmc/OgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBUaGUgb3B0aW9uYWwgbmFtZSBvZiB0aGUgY29uc3RydWN0b3IgKGxvb3NlbHksIGEg
ImNsYXNzIikKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgc3RvcmVkIGluIHRoZSAi
ZGVjbGFyZWRDbGFzcyIgcHJvcGVydHkgaW4gdGhlIGNyZWF0ZWQgcHJvdG90eXBlLgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBJdCB3aWxsIGJlIHVzZWQgYXMgYSBnbG9iYWwgbmFt
ZSBmb3IgYSBjcmVhdGVkIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgICAgIC8vICAgICAgc3Vw
ZXJjbGFzczogRnVuY3Rpb258RnVuY3Rpb25bXToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgTWF5IGJlIG51bGwsIGEgRnVuY3Rpb24sIG9yIGFuIEFycmF5IG9mIEZ1bmN0aW9ucy4g
VGhpcyBhcmd1bWVudAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzcGVjaWZpZXMg
YSBsaXN0IG9mIGJhc2VzICh0aGUgbGVmdC1tb3N0IG9uZSBpcyB0aGUgbW9zdCBkZWVwZXN0Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGJhc2UpLgorICAgICAgICAgICAgICAgIC8v
ICAgICAgcHJvcHM6IE9iamVjdDoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQW4g
b2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIGNvcGllZCB0byB0aGUgY3JlYXRlZCBwcm90b3R5
cGUuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEFkZCBhbiBpbnN0YW5jZS1pbml0
aWFsaXphdGlvbiBmdW5jdGlvbiBieSBtYWtpbmcgaXQgYSBwcm9wZXJ0eQorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBuYW1lZCAiY29uc3RydWN0b3IiLgorICAgICAgICAgICAgICAg
IC8vICAgICAgcmV0dXJuczoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTmV3IGNv
bnN0cnVjdG9yIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIENyZWF0ZSBhIGNvbnN0cnVjdG9yIHVz
aW5nIGEgY29tcGFjdCBub3RhdGlvbiBmb3IgaW5oZXJpdGFuY2UgYW5kCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHByb3RvdHlwZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTWl4aW4gYW5jZXN0b3JzIHByb3Zp
ZGUgYSB0eXBlIG9mIG11bHRpcGxlIGluaGVyaXRhbmNlLgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBQcm90b3R5cGVzIG9mIG1peGluIGFuY2VzdG9ycyBhcmUgY29waWVkIHRvIHRo
ZSBuZXcgY2xhc3M6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNoYW5nZXMgdG8g
bWl4aW4gcHJvdG90eXBlcyB3aWxsIG5vdCBhZmZlY3QgY2xhc3NlcyB0byB3aGljaAorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGV5IGhhdmUgYmVlbiBtaXhlZCBpbi4KKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBbmNlc3RvcnMg
Y2FuIGJlIGNvbXBvdW5kIGNsYXNzZXMgY3JlYXRlZCBieSB0aGlzIHZlcnNpb24gb2YKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9qby5kZWNsYXJlLiBJbiBjb21wbGV4IGNhc2Vz
IGFsbCBiYXNlIGNsYXNzZXMgYXJlIGdvaW5nIHRvIGJlCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGxpbmVhcml6ZWQgYWNjb3JkaW5nIHRvIEMzIE1STyBhbGdvcml0aG0KKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgKHNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93
bmxvYWQvcmVsZWFzZXMvMi4zL21yby8gZm9yIG1vcmUKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgZGV0YWlscykuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgImNsYXNzTmFtZSIgaXMgY2FjaGVkIGluICJkZWNsYXJlZENsYXNzIiBw
cm9wZXJ0eSBvZiB0aGUgbmV3IGNsYXNzLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBpZiBpdCB3YXMgc3VwcGxpZWQuIFRoZSBpbW1lZGlhdGUgc3VwZXIgY2xhc3Mgd2lsbCBiZSBj
YWNoZWQgaW4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgInN1cGVyY2xhc3MiIHBy
b3BlcnR5IG9mIHRoZSBuZXcgY2xhc3MuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgTWV0aG9kcyBpbiAicHJvcHMiIHdpbGwgYmUgY29waWVkIGFu
ZCBtb2RpZmllZDogIm5vbSIgcHJvcGVydHkKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgKHRoZSBkZWNsYXJlZCBuYW1lIG9mIHRoZSBtZXRob2QpIHdpbGwgYmUgYWRkZWQgdG8gYWxs
IGNvcGllZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBmdW5jdGlvbnMgdG8gaGVs
cCBpZGVudGlmeSB0aGVtIGZvciB0aGUgaW50ZXJuYWwgbWFjaGluZXJ5LiBCZQorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICB2ZXJ5IGNhcmVmdWwsIHdoaWxlIHJldXNpbmcgbWV0aG9k
czogaWYgeW91IHVzZSB0aGUgc2FtZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBm
dW5jdGlvbiB1bmRlciBkaWZmZXJlbnQgbmFtZXMsIGl0IGNhbiBwcm9kdWNlIGVycm9ycyBpbiBz
b21lCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNhc2VzLgorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRv
IHVzZSBjb25zdHJ1Y3RvcnMgY3JlYXRlZCAibWFudWFsbHkiICh3aXRob3V0CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGRvam8uZGVjbGFyZSkgYXMgYmFzZXMuIFRoZXkgd2lsbCBi
ZSBjYWxsZWQgYXMgdXN1YWwgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBjcmVhdGlvbiBvZiBhbiBpbnN0YW5jZSwgdGhlaXIgbWV0aG9kcyB3aWxsIGJlIGNoYWlu
ZWQsIGFuZCBldmVuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNhbGxlZCBieSAi
dGhpcy5pbmhlcml0ZWQoKSIuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgU3BlY2lhbCBwcm9wZXJ0eSAiLWNoYWlucy0iIGdvdmVybnMgaG93IHRv
IGNoYWluIG1ldGhvZHMuIEl0IGlzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGEg
ZGljdGlvbmFyeSwgd2hpY2ggdXNlcyBtZXRob2QgbmFtZXMgYXMga2V5cywgYW5kIGhpbnQgc3Ry
aW5ncworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhcyB2YWx1ZXMuIElmIGEgaGlu
dCBzdHJpbmcgaXMgImFmdGVyIiwgdGhpcyBtZXRob2Qgd2lsbCBiZQorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgbWV0aG9kcyBvZiBpdHMgYmFzZSBjbGFzc2Vz
LiBJZiBhIGhpbnQgc3RyaW5nIGlzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICJi
ZWZvcmUiLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgbWV0aG9kcyBvZiBpdHMg
YmFzZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjbGFzc2VzLgorICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmICJjb25zdHJ1Y3Rv
ciIgaXMgbm90IG1lbnRpb25lZCBpbiAiLWNoYWlucy0iIHByb3BlcnR5LCBpdCB3aWxsCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGJlIGNoYWluZWQgdXNpbmcgdGhlIGxlZ2FjeSBt
b2RlOiB1c2luZyAiYWZ0ZXIiIGNoYWluaW5nLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBjYWxsaW5nIHByZWFtYmxlKCkgbWV0aG9kIGJlZm9yZSBlYWNoIGNvbnN0cnVjdG9yLCBp
ZiBhdmFpbGFibGUsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuZCBjYWxsaW5n
IHBvc3RzY3JpcHQoKSBhZnRlciBhbGwgY29uc3RydWN0b3JzIHdlcmUgZXhlY3V0ZWQuCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmIHRoZSBoaW50IGlzICJhZnRlciIsIGl0IGlz
IGNoYWluZWQgYXMgYSByZWd1bGFyIG1ldGhvZCwgYnV0CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHBvc3RzY3JpcHQoKSB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgY2hhaW4gb2Yg
Y29uc3RydWN0b3JzLgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAiY29uc3RydWN0
b3IiIGNhbm5vdCBiZSBjaGFpbmVkICJiZWZvcmUiLCBidXQgaXQgYWxsb3dzCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGEgc3BlY2lhbCBoaW50IHN0cmluZzogIm1hbnVhbCIsIHdo
aWNoIG1lYW5zIHRoYXQgY29uc3RydWN0b3JzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIGFyZSBub3QgZ29pbmcgdG8gYmUgY2hhaW5lZCBpbiBhbnkgd2F5LCBhbmQgcHJvZ3JhbW1l
ciB3aWxsIGNhbGwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlbSBtYW51YWxs
eSB1c2luZyB0aGlzLmluaGVyaXRlZCgpLiBJbiB0aGUgbGF0dGVyIGNhc2UKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgcG9zdHNjcmlwdCgpIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRo
ZSBjb25zdHJ1Y3Rpb24uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgQWxsIGNoYWluaW5nIGhpbnRzIGFyZSAiaW5oZXJpdGVkIiBmcm9tIGJhc2Ug
Y2xhc3NlcyBhbmQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcG90ZW50aWFsbHkg
Y2FuIGJlIG92ZXJyaWRkZW4uIEJlIHZlcnkgY2FyZWZ1bCB3aGVuIG92ZXJyaWRpbmcKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgaGludHMhIE1ha2Ugc3VyZSB0aGF0IGFsbCBjaGFp
bmVkIG1ldGhvZHMgY2FuIHdvcmsgaW4gYSBwcm9wb3NlZAorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBtYW5uZXIgb2YgY2hhaW5pbmcuCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgT25jZSBhIG1ldGhvZCB3YXMgY2hhaW5lZCwgaXQg
aXMgaW1wb3NzaWJsZSB0byB1bmNoYWluIGl0LiBUaGUKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgb25seSBleGNlcHRpb24gaXMgImNvbnN0cnVjdG9yIi4gWW91IGRvbid0IG5lZWQg
dG8gZGVmaW5lIGEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbWV0aG9kIGluIG9y
ZGVyIHRvIHN1cHBseSBhIGNoYWluaW5nIGhpbnQuCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgSWYgYSBtZXRob2QgaXMgY2hhaW5lZCwgaXQgY2Fu
bm90IHVzZSB0aGlzLmluaGVyaXRlZCgpIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgYWxsIG90aGVyIG1ldGhvZHMgaW4gdGhlIGhpZXJhcmNoeSB3aWxsIGJlIGNhbGxl
ZCBhdXRvbWF0aWNhbGx5LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIFVzdWFsbHkgY29uc3RydWN0b3JzIGFuZCBpbml0aWFsaXplcnMgb2YgYW55
IGtpbmQgYXJlIGNoYWluZWQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdXNpbmcg
ImFmdGVyIiBhbmQgZGVzdHJ1Y3RvcnMgb2YgYW55IGtpbmQgYXJlIGNoYWluZWQgYXMKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgImJlZm9yZSIuIE5vdGUgdGhhdCBjaGFpbmluZyBh
c3N1bWVzIHRoYXQgY2hhaW5lZCBtZXRob2RzIGRvIG5vdAorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICByZXR1cm4gYW55IHZhbHVlOiBhbnkgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSBk
aXNjYXJkZWQuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4
YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uZGVjbGFyZSgibXku
Y2xhc3Nlcy5iYXIiLCBteS5jbGFzc2VzLmZvbywgeworICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICAgICAgICAgIC8vIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHBy
b3RvdHlwZQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIHNvbWVWYWx1
ZTogMiwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAvLyBpbml0aWFs
aXphdGlvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAg
IGNvbnN0cnVjdG9yOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5teUNvbXBsaWNhdGVkT2JqZWN0ID0gbmV3IFJlYWxseUNv
bXBsaWNhdGVkT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAvLyBvdGhlciBm
dW5jdGlvbnMKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBzb21lTWV0
aG9kOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgZG9TdHVmZigpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIHZhciBNeUJhc2UgPSBkb2pvLmRlY2xhcmUobnVsbCwgeworICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIC8vIGNvbnN0cnVjdG9yLCBwcm9wZXJ0
aWVzLCBhbmQgbWV0aG9kcyBnbyBoZXJlCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAg
ICAgICAgICAgLy8gLi4uCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgTXlDbGFzczEgPSBkb2pvLmRlY2xhcmUo
TXlCYXNlLCB7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgLy8gY29u
c3RydWN0b3IsIHByb3BlcnRpZXMsIGFuZCBtZXRob2RzIGdvIGhlcmUKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgICAgICAgICAvLyAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgfSk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBNeUNsYXNz
MiA9IGRvam8uZGVjbGFyZShNeUJhc2UsIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAg
ICAgICAgICAgICAvLyBjb25zdHJ1Y3RvciwgcHJvcGVydGllcywgYW5kIG1ldGhvZHMgZ28gaGVy
ZQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIC8vIC4uLgorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgdmFyIE15RGlhbW9uZCA9IGRvam8uZGVjbGFyZShbTXlDbGFzczEsIE15Q2xhc3MyXSwg
eworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIC8vIGNvbnN0cnVjdG9y
LCBwcm9wZXJ0aWVzLCBhbmQgbWV0aG9kcyBnbyBoZXJlCisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgICAgICAgICAgLy8gLi4uCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAg
IH0pOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxl
OgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgRiA9IGZ1bmN0aW9uKCl7IGNv
bnNvbGUubG9nKCJyYXcgY29uc3RydWN0b3IiKTsgfTsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgRi5wcm90b3R5cGUubWV0aG9kID0gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgICAgICAgICBjb25zb2xlLmxvZygicmF3IG1ldGhvZCIpOworICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB9OworICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICB2YXIgQSA9IGRvam8uZGVjbGFyZShGLCB7CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiQS5jb25zdHJ1
Y3RvciIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbigpewor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coImJlZm9yZSBjYWxsaW5nIEYubWV0aG9kLi4uIik7CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaGVyaXRlZChhcmd1bWVudHMpOworICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2co
Ii4uLmJhY2sgaW4gQSIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIG5ldyBBKCkubWV0aG9kKCk7CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIC8vIHdpbGwgcHJpbnQ6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAg
IC8vIHJhdyBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyBB
LmNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIC8vIGJlZm9yZSBj
YWxsaW5nIEYubWV0aG9kLi4uCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIC8vIHJh
dyBtZXRob2QKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gLi4uYmFjayBpbiBB
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBBID0gZG9qby5kZWNsYXJlKG51bGws
IHsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAiLWNoYWlucy0iOiB7
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95
OiAiYmVmb3JlIgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfSk7CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIHZhciBCID0gZG9qby5kZWNsYXJlKEEsIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIHwgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24oKXsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJCLmNvbnN0
cnVjdG9yIik7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigp
eworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS5sb2coIkIuZGVzdHJveSIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIHZhciBDID0gZG9qby5kZWNsYXJlKEIsIHsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24oKXsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9n
KCJDLmNvbnN0cnVjdG9yIik7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBkZXN0cm95OiBm
dW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS5sb2coIkMuZGVzdHJveSIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIG5ldyBDKCkuZGVzdHJveSgpOworICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICAvLyBwcmludHM6CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIC8vIEIuY29uc3RydWN0b3IKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAg
ICAgLy8gQy5jb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyBD
LmRlc3Ryb3kKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gQi5kZXN0cm95Cisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBBID0gZG9qby5kZWNsYXJlKG51bGwsIHsK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAiLWNoYWlucy0iOiB7Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rv
cjogIm1hbnVhbCIKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAgICAgICAgICAgICAgIC8vICAg
ICAgfCAgICAgICB2YXIgQiA9IGRvam8uZGVjbGFyZShBLCB7CisgICAgICAgICAgICAgICAgLy8g
ICAgICB8ICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uKCl7CisgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgdGhlIGJhc2UgY29u
c3RydWN0b3Igd2l0aCBuZXcgcGFyYW1ldGVycworICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmhlcml0ZWQoYXJndW1lbnRzLCBbMSwgMiwgM10p
OworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4u
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFy
IEEgPSBkb2pvLmRlY2xhcmUobnVsbCwgeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICAgICAgICAgICItY2hhaW5zLSI6IHsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgIG0xOiAiYmVmb3JlIgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
bTE6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZygiQS5tMSIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
bTI6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZygiQS5tMiIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBCID0gZG9qby5kZWNsYXJlKEEsIHsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAiLWNoYWlucy0iOiB7CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBtMjogImFmdGVyIgor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbTE6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiQi5tMSIpOwor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbTI6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiQi5tMiIpOwor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgfSk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZh
ciB4ID0gbmV3IEIoKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgeC5tMSgpOwor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyBwcmludHM6CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIC8vIEIubTEKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAg
ICAgLy8gQS5tMQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB4Lm0yKCk7CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIC8vIHByaW50czoKKyAgICAgICAgICAgICAgICAv
LyAgICAgIHwgICAgICAgLy8gQS5tMgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAv
LyBCLm0yCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbigpOyAvLyBGdW5jdGlv
bgorICAgICAgICB9OworICAgICAgICA9PT09PSovCisKKyAgICAgICAgLyo9PT09PQorICAgICAg
ICBkb2pvLnNhZmVNaXhpbiA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlKXsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIE1p
eCBpbiBwcm9wZXJ0aWVzIHNraXBwaW5nIGEgY29uc3RydWN0b3IgYW5kIGRlY29yYXRpbmcgZnVu
Y3Rpb25zCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGxpa2UgaXQgaXMgZG9uZSBi
eSBkb2pvLmRlY2xhcmUuCisgICAgICAgICAgICAgICAgLy8gICAgICB0YXJnZXQ6IE9iamVjdAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUYXJnZXQgb2JqZWN0IHRvIGFjY2VwdCBu
ZXcgcHJvcGVydGllcy4KKyAgICAgICAgICAgICAgICAvLyAgICAgIHNvdXJjZTogT2JqZWN0Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFNvdXJjZSBvYmplY3QgZm9yIG5ldyBwcm9w
ZXJ0aWVzLgorICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtaXggaW4gcHJv
cGVydGllcyBsaWtlIGRvam8uX21peGluIGRvZXMsCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGJ1dCBpdCBza2lwcyBhIGNvbnN0cnVjdG9yIHByb3BlcnR5IGFuZCBkZWNvcmF0ZXMg
ZnVuY3Rpb25zIGxpa2UKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9qby5kZWNs
YXJlIGRvZXMuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgSXQgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIGNsYXNzZXMgYW5kIG9iamVjdHMgcHJv
ZHVjZWQgd2l0aAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2pvLmRlY2xhcmUu
IEZ1bmN0aW9ucyBtaXhlZCBpbiB3aXRoIGRvam8uc2FmZU1peGluIGNhbiB1c2UKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgdGhpcy5pbmhlcml0ZWQoKSBsaWtlIG5vcm1hbCBtZXRo
b2RzLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbXBsZW1lbnQgZXh0ZW5kKCkgbWV0aG9kIG9mIGEg
Y29uc3RydWN0b3IKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcHJvZHVjZWQgd2l0
aCBkb2pvLmRlY2xhcmUoKS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
ICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIEEgPSBk
b2pvLmRlY2xhcmUobnVsbCwgeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAg
ICAgIG0xOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIkEubTEiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAg
ICAgIG0yOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIkEubTIiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgQiA9IGRvam8uZGVjbGFyZShBLCB7
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbTE6IGZ1bmN0aW9uKCl7
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlu
aGVyaXRlZChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIkIubTEiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBCLmV4dGVuZCh7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbTI6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaGVyaXRlZChhcmd1bWVu
dHMpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgY29u
c29sZS5sb2coIkIubTIiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICB2YXIgeCA9IG5ldyBCKCk7CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIGRvam8uc2FmZU1peGluKHgsIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgICAgICAgICBtMTogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5oZXJpdGVkKGFyZ3VtZW50cyk7CisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiWC5t
MSIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbTI6IGZ1bmN0aW9uKCl7CisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaGVyaXRlZChh
cmd1bWVudHMpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS5sb2coIlgubTIiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICB4Lm0yKCk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgIC8vIHByaW50czoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gQS5t
MQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyBCLm0xCisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIC8vIFgubTEKKyAgICAgICAgfTsKKyAgICAgICAgPT09PT0qLwor
CisgICAgICAgIC8qPT09PT0KKyAgICAgICAgT2JqZWN0LmluaGVyaXRlZCA9IGZ1bmN0aW9uKG5h
bWUsIGFyZ3MsIG5ld0FyZ3MpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQ2FsbHMgYSBzdXBlciBtZXRob2QuCisgICAg
ICAgICAgICAgICAgLy8gICAgICBuYW1lOiBTdHJpbmc/CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIFRoZSBvcHRpb25hbCBtZXRob2QgbmFtZS4gU2hvdWxkIGJlIHRoZSBzYW1lIGFz
IHRoZSBjYWxsZXIncworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBuYW1lLiBVc3Vh
bGx5ICJuYW1lIiBpcyBzcGVjaWZpZWQgaW4gY29tcGxleCBkeW5hbWljIGNhc2VzLCB3aGVuCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSBjYWxsaW5nIG1ldGhvZCB3YXMgZHlu
YW1pY2FsbHkgYWRkZWQsIHVuZGVjb3JhdGVkIGJ5CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGRvam8uZGVjbGFyZSwgYW5kIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLgorICAgICAg
ICAgICAgICAgIC8vICAgICAgYXJnczogQXJndW1lbnRzCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIFRoZSBjYWxsZXIgc3VwcGx5IHRoaXMgYXJndW1lbnQsIHdoaWNoIHNob3VsZCBi
ZSB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgImFyZ3VtZW50
cyIuCisgICAgICAgICAgICAgICAgLy8gICAgICBuZXdBcmdzOiBPYmplY3Q/CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIElmICJ0cnVlIiwgdGhlIGZvdW5kIGZ1bmN0aW9uIHdpbGwg
YmUgcmV0dXJuZWQgd2l0aG91dAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBleGVj
dXRpbmcgaXQuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmIEFycmF5LCBpdCB3
aWxsIGJlIHVzZWQgdG8gY2FsbCBhIHN1cGVyIG1ldGhvZC4gT3RoZXJ3aXNlCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgICJhcmdzIiB3aWxsIGJlIHVzZWQuCisgICAgICAgICAgICAg
ICAgLy8gICAgICByZXR1cm5zOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBXaGF0
ZXZlciBpcyByZXR1cm5lZCBieSBhIHN1cGVyIG1ldGhvZCwgb3IgYSBzdXBlciBtZXRob2QgaXRz
ZWxmLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZiAidHJ1ZSIgd2FzIHNwZWNp
ZmllZCBhcyBuZXdBcmdzLgorICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW5zaWRl
IG1ldGhvZCBvZiBjbGFzc2VzIHByb2R1Y2VkIHdpdGgKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgZG9qby5kZWNsYXJlIHRvIGNhbGwgYSBzdXBlciBtZXRob2QgKG5leHQgaW4gdGhl
IGNoYWluKS4gSXQgaXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdXNlZCBmb3Ig
bWFudWFsbHkgY29udHJvbGxlZCBjaGFpbmluZy4gQ29uc2lkZXIgdXNpbmcgdGhlIHJlZ3VsYXIK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY2hhaW5pbmcsIGJlY2F1c2UgaXQgaXMg
ZmFzdGVyLiBVc2UgInRoaXMuaW5oZXJpdGVkKCkiIG9ubHkgaW4KKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgY29tcGxleCBjYXNlcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBjYW5ub3QgbWUgY2FsbGVkIGZy
b20gYXV0b21hdGljYWxseSBjaGFpbmVkCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IGNvbnN0cnVjdG9ycyBpbmNsdWRpbmcgdGhlIGNhc2Ugb2YgYSBzcGVjaWFsIChsZWdhY3kpCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNvbnN0cnVjdG9yIGNoYWluaW5nLiBJdCBj
YW5ub3QgYmUgY2FsbGVkIGZyb20gY2hhaW5lZCBtZXRob2RzLgorICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmICJ0aGlzLmluaGVyaXRlZCgpIiBj
YW5ub3QgZmluZCB0aGUgbmV4dC1pbi1jaGFpbiBtZXRob2QsIGl0CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIGRvZXMgbm90aGluZyBhbmQgcmV0dXJucyAidW5kZWZpbmVkIi4gVGhl
IGxhc3QgbWV0aG9kIGluIGNoYWluCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNh
biBiZSBhIGRlZmF1bHQgbWV0aG9kIGltcGxlbWVudGVkIGluIE9iamVjdCwgd2hpY2ggd2lsbCBi
ZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjYWxsZWQgbGFzdC4KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJZiAibmFtZSIgaXMg
c3BlY2lmaWVkLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIG1ldGhvZCB0aGF0CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHJlY2VpdmVkICJhcmdzIiBpcyB0aGUgcGFyZW50IG1ldGhv
ZCBmb3IgdGhpcyBjYWxsLiBJdCBpcyBsb29rZWQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgdXAgaW4gdGhlIGNoYWluIGxpc3QgYW5kIGlmIGl0IGlzIGZvdW5kIHRoZSBuZXh0LWlu
LWNoYWluIG1ldGhvZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpcyBjYWxsZWQu
IElmIGl0IGlzIG5vdCBmb3VuZCwgdGhlIGZpcnN0LWluLWNoYWluIG1ldGhvZCBpcworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBjYWxsZWQuCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgSWYgIm5hbWUiIGlzIG5vdCBzcGVjaWZpZWQs
IGl0IHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBjYWxsaW5nCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIG1ldGhvZCAodXNpbmcgYSBtZXRob2lkIHByb3BlcnR5ICJub20iKS4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIEIgPSBkb2pvLmRlY2xhcmUoQSwgeworICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIG1ldGhvZDE6IGZ1bmN0aW9uKGEs
IGIsIGMpeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5pbmhlcml0ZWQoYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIG1l
dGhvZDI6IGZ1bmN0aW9uKGEsIGIpeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5oZXJpdGVkKGFyZ3VtZW50cywgW2EgKyBiXSk7
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
Ly8gbmV4dCBtZXRob2QgaXMgbm90IGluIHRoZSBjaGFpbiBsaXN0IGJlY2F1c2UgaXQgaXMgYWRk
ZWQKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gbWFudWFsbHkgYWZ0ZXIgdGhl
IGNsYXNzIHdhcyBjcmVhdGVkLgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBCLnBy
b3RvdHlwZS5tZXRob2QzID0gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGhpcyBpcyBhIGR5bmFtaWNhbGx5LWFkZGVkIG1l
dGhvZC4iKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB0aGlzLmlu
aGVyaXRlZCgibWV0aG9kMyIsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgIH07CisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICB2YXIgQiA9IGRvam8uZGVjbGFyZShBLCB7CisgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbihhLCBiKXsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBlciA9
IHRoaXMuaW5oZXJpdGVkKGFyZ3VtZW50cywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgIGlmKCFzdXBlcil7CisgICAgICAgICAgICAgICAgLy8g
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ0aGVyZSBp
cyBubyBzdXBlciBtZXRob2QiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiAge307ICAgICAvLyBP
YmplY3QKKyAgICAgICAgfQorICAgICAgICA9PT09PSovCisKKyAgICAgICAgLyo9PT09PQorICAg
ICAgICBPYmplY3QuZ2V0SW5oZXJpdGVkID0gZnVuY3Rpb24obmFtZSwgYXJncyl7CisgICAgICAg
ICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBSZXR1cm5zIGEgc3VwZXIgbWV0aG9kLgorICAgICAgICAgICAgICAgIC8vICAgICAgbmFtZTog
U3RyaW5nPworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGUgb3B0aW9uYWwgbWV0
aG9kIG5hbWUuIFNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgY2FsbGVyJ3MKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgbmFtZS4gVXN1YWxseSAibmFtZSIgaXMgc3BlY2lmaWVkIGlu
IGNvbXBsZXggZHluYW1pYyBjYXNlcywgd2hlbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICB0aGUgY2FsbGluZyBtZXRob2Qgd2FzIGR5bmFtaWNhbGx5IGFkZGVkLCB1bmRlY29yYXRl
ZCBieQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2pvLmRlY2xhcmUsIGFuZCBp
dCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGFyZ3M6IEFy
Z3VtZW50cworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGUgY2FsbGVyIHN1cHBs
eSB0aGlzIGFyZ3VtZW50LCB3aGljaCBzaG91bGQgYmUgdGhlIG9yaWdpbmFsCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgICJhcmd1bWVudHMiLgorICAgICAgICAgICAgICAgIC8vICAg
ICAgcmV0dXJuczoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmV0dXJucyBhIHN1
cGVyIG1ldGhvZCAoRnVuY3Rpb24pIG9yICJ1bmRlZmluZWQiLgorICAgICAgICAgICAgICAgIC8v
ICAgICAgZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoaXMg
bWV0aG9kIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIGZvciAidGhpcy5pbmhlcml0ZWQoKSIuCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEl0IHVzZXMgdGhlIHNhbWUgYWxnb3JpdGht
IGJ1dCBpbnN0ZWFkIG9mIGV4ZWN1dGluZyBhIHN1cGVyCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIG1ldGhvZCwgaXQgcmV0dXJucyBpdCwgb3IgInVuZGVmaW5lZCIgaWYgbm90IGZv
dW5kLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxl
OgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgQiA9IGRvam8uZGVjbGFyZShB
LCB7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbWV0aG9kOiBmdW5j
dGlvbihhLCBiKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBzdXBlciA9IHRoaXMuZ2V0SW5oZXJpdGVkKGFyZ3VtZW50cyk7CisgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIGlmKCFzdXBlcil7CisgICAgICAg
ICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJ0aGVyZSBpcyBubyBzdXBlciBtZXRob2QiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiAg
e307ICAgICAvLyBPYmplY3QKKyAgICAgICAgfQorICAgICAgICA9PT09PSovCisKKyAgICAgICAg
Lyo9PT09PQorICAgICAgICBPYmplY3QuaXNJbnN0YW5jZU9mID0gZnVuY3Rpb24oY2xzKXsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIENoZWNrcyB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gdG8gc2VlIGlmIGl0IGlzIGluaGVy
aXRlZCBmcm9tIHRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY2xhc3MuCisg
ICAgICAgICAgICAgICAgLy8gICAgICBjbHM6IEZ1bmN0aW9uCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIENsYXNzIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgICAgIC8vICAgICAg
cmV0dXJuczoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgInRydWUiLCBpZiB0aGlz
IG9iamVjdCBpcyBpbmhlcml0ZWQgZnJvbSB0aGlzIGNsYXNzLCAiZmFsc2UiCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGlzIG1ldGhv
ZCBpcyB1c2VkIHdpdGggaW5zdGFuY2VzIG9mIGNsYXNzZXMgcHJvZHVjZWQgd2l0aAorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2pvLmRlY2xhcmUgdG8gZGV0ZXJtaW5lIG9mIHRo
ZXkgc3VwcG9ydCBhIGNlcnRhaW4gaW50ZXJmYWNlIG9yCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIG5vdC4gSXQgbW9kZWxzICJpbnN0YW5jZW9mIiBvcGVyYXRvci4KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgdmFyIEEgPSBkb2pvLmRlY2xhcmUobnVsbCwgeworICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIC8vIGNvbnN0cnVjdG9yLCBwcm9wZXJ0
aWVzLCBhbmQgbWV0aG9kcyBnbyBoZXJlCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAg
ICAgICAgICAgLy8gLi4uCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgQiA9IGRvam8uZGVjbGFyZShudWxsLCB7
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgLy8gY29uc3RydWN0b3Is
IHByb3BlcnRpZXMsIGFuZCBtZXRob2RzIGdvIGhlcmUKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICAvLyAuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBDID0gZG9qby5kZWNsYXJl
KFtBLCBCXSwgeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIC8vIGNv
bnN0cnVjdG9yLCBwcm9wZXJ0aWVzLCBhbmQgbWV0aG9kcyBnbyBoZXJlCisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgICAgICAgICAgLy8gLi4uCisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIH0pOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgRCA9IGRv
am8uZGVjbGFyZShBLCB7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
Ly8gY29uc3RydWN0b3IsIHByb3BlcnRpZXMsIGFuZCBtZXRob2RzIGdvIGhlcmUKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAvLyAuLi4KKyAgICAgICAgICAgICAgICAv
LyAgICAgIHwgICAgICAgfSk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8CisgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgIHZhciBhID0gbmV3IEEoKSwgYiA9IG5ldyBCKCksIGMgPSBu
ZXcgQygpLCBkID0gbmV3IEQoKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgY29uc29sZS5sb2coYS5pc0luc3RhbmNlT2YoQSkpOyAv
LyB0cnVlCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGNvbnNvbGUubG9nKGIuaXNJ
bnN0YW5jZU9mKEEpKTsgLy8gZmFsc2UKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
Y29uc29sZS5sb2coYy5pc0luc3RhbmNlT2YoQSkpOyAvLyB0cnVlCisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIGNvbnNvbGUubG9nKGQuaXNJbnN0YW5jZU9mKEEpKTsgLy8gdHJ1ZQor
ICAgICAgICAgICAgICAgIC8vICAgICAgfAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICBjb25zb2xlLmxvZyhhLmlzSW5zdGFuY2VPZihCKSk7IC8vIGZhbHNlCisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIGNvbnNvbGUubG9nKGIuaXNJbnN0YW5jZU9mKEIpKTsgLy8gdHJ1
ZQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBjb25zb2xlLmxvZyhjLmlzSW5zdGFu
Y2VPZihCKSk7IC8vIHRydWUKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgY29uc29s
ZS5sb2coZC5pc0luc3RhbmNlT2YoQikpOyAvLyBmYWxzZQorICAgICAgICAgICAgICAgIC8vICAg
ICAgfAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBjb25zb2xlLmxvZyhhLmlzSW5z
dGFuY2VPZihDKSk7IC8vIGZhbHNlCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGNv
bnNvbGUubG9nKGIuaXNJbnN0YW5jZU9mKEMpKTsgLy8gZmFsc2UKKyAgICAgICAgICAgICAgICAv
LyAgICAgIHwgICAgICAgY29uc29sZS5sb2coYy5pc0luc3RhbmNlT2YoQykpOyAvLyB0cnVlCisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGNvbnNvbGUubG9nKGQuaXNJbnN0YW5jZU9m
KEMpKTsgLy8gZmFsc2UKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgY29uc29sZS5sb2coYS5pc0luc3RhbmNlT2YoRCkpOyAvLyBmYWxz
ZQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBjb25zb2xlLmxvZyhiLmlzSW5zdGFu
Y2VPZihEKSk7IC8vIGZhbHNlCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGNvbnNv
bGUubG9nKGMuaXNJbnN0YW5jZU9mKEQpKTsgLy8gZmFsc2UKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIHwgICAgICAgY29uc29sZS5sb2coZC5pc0luc3RhbmNlT2YoRCkpOyAvLyB0cnVlCisgICAg
ICAgICAgICAgICAgcmV0dXJuICB7fTsgICAgIC8vIE9iamVjdAorICAgICAgICB9CisgICAgICAg
ID09PT09Ki8KKworICAgICAgICAvKj09PT09CisgICAgICAgIE9iamVjdC5leHRlbmQgPSBmdW5j
dGlvbihzb3VyY2UpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgQWRkcyBhbGwgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBv
ZiBzb3VyY2UgdG8gY29uc3RydWN0b3IncworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBwcm90b3R5cGUsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgaW5zdGFuY2VzIGNyZWF0
ZWQgd2l0aAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci4gVGhp
cyBtZXRob2QgaXMgc3BlY2lmaWMgdG8gY29uc3RydWN0b3JzIGNyZWF0ZWQgd2l0aAorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2pvLmRlY2xhcmUuCisgICAgICAgICAgICAgICAg
Ly8gICAgICBzb3VyY2U6IE9iamVjdAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBT
b3VyY2Ugb2JqZWN0IHdoaWNoIHByb3BlcnRpZXMgYXJlIGdvaW5nIHRvIGJlIGNvcGllZCB0byB0
aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY29uc3RydWN0b3IncyBwcm90b3R5
cGUuCisgICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgQWRkcyBzb3VyY2UgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0
b3IncyBwcm90b3R5cGUuIEl0IGNhbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBv
dmVycmlkZSBleGlzdGluZyBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHNpbWlsYXIgdG8gZG9qby5l
eHRlbmQgZnVuY3Rpb24sIGJ1dCBpdCBpcyBzcGVjaWZpYworICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICB0byBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgZG9qby5kZWNsYXJlLiBJdCBp
cyBpbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB1c2luZyBkb2pv
LnNhZmVNaXhpbiwgYW5kIGl0IHNraXBzIGEgY29uc3RydWN0b3IgcHJvcGVydHksCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGFuZCBwcm9wZXJseSBkZWNvcmF0ZXMgY29waWVkIGZ1
bmN0aW9ucy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgZXhh
bXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIEEgPSBkb2pvLmRlY2xh
cmUobnVsbCwgeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIG0xOiBm
dW5jdGlvbigpe30sCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgczE6
ICJQb3Bva2F0ZXBldGwiCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBBLmV4dGVuZCh7CisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgICAgICAgICAgbTE6IGZ1bmN0aW9uKCl7fSwKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgICAgICAgICBtMjogZnVuY3Rpb24oKXt9LAorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIGYxOiB0cnVlLAorICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICAgICAgICAgIGQxOiA0MgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAgICAgPT09PT0qLworfSkoKTsKKworfQorCitpZigh
ZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuY29ubmVjdCJdKXsgLy9faGFzUmVzb3VyY2Ug
Y2hlY2tzIGFkZGVkIGJ5IGJ1aWxkLiBEbyBub3QgdXNlIF9oYXNSZXNvdXJjZSBkaXJlY3RseSBp
biB5b3VyIGNvZGUuCitkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5jb25uZWN0Il0gPSB0
cnVlOworZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLmNvbm5lY3QiKTsKKworCisKKy8vIHRoaXMg
ZmlsZSBjb3VydGVzeSBvZiB0aGUgVHVyYm9BamF4IEdyb3VwLCBsaWNlbnNlZCB1bmRlciBhIERv
am8gQ0xBCisKKy8vIGxvdy1sZXZlbCBkZWxlZ2F0aW9uIG1hY2hpbmVyeQorZG9qby5fbGlzdGVu
ZXIgPSB7CisgICAgICAgIC8vIGNyZWF0ZSBhIGRpc3BhdGNoZXIgZnVuY3Rpb24KKyAgICAgICAg
Z2V0RGlzcGF0Y2hlcjogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyBmb2xsb3dpbmcg
Y29tbWVudHMgcHVsbGVkIG91dC1vZi1saW5lIHRvIHByZXZlbnQgY2xvbmluZyB0aGVtCisgICAg
ICAgICAgICAgICAgLy8gaW4gdGhlIHJldHVybmVkIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAg
IC8vIC0gaW5kaWNlcyAoaSkgdGhhdCBhcmUgcmVhbGx5IGluIHRoZSBhcnJheSBvZiBsaXN0ZW5l
cnMgKGxzKSB3aWxsCisgICAgICAgICAgICAgICAgLy8gICBub3QgYmUgaW4gQXJyYXkucHJvdG90
eXBlLiBUaGlzIGlzIHRoZSAnc3BhcnNlIGFycmF5JyB0cmljaworICAgICAgICAgICAgICAgIC8v
ICAgdGhhdCBrZWVwcyB1cyBzYWZlIGZyb20gbGlicyB0aGF0IHRha2UgbGliZXJ0aWVzIHdpdGgg
YnVpbHQtaW4KKyAgICAgICAgICAgICAgICAvLyAgIG9iamVjdHMKKyAgICAgICAgICAgICAgICAv
LyAtIGxpc3RlbmVyIGlzIGludm9rZWQgd2l0aCBjdXJyZW50IHNjb3BlICh0aGlzKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGFwID0gQXJyYXkucHJvdG90eXBlLCBjID0gYXJndW1lbnRzLmNhbGxlZSwgbHMgPSBjLl9saXN0
ZW5lcnMsIHQgPSBjLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB2
YWx1ZSBjb21lcyBmcm9tIG9yaWdpbmFsIHRhcmdldCBmdW5jdGlvbgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByID0gdCAmJiB0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIGxvY2FsIGNvcHkgb2YgbGlzdGVuZXIgYXJyYXkg
c28gaXQgaXMgaW1tdXRhYmxlIGR1cmluZyBwcm9jZXNzaW5nCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGksIGxscyA9IFtdLmNvbmNhdChscykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW52b2tlIGxpc3RlbmVycyBhZnRl
ciB0YXJnZXQgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpIGluIGxscyl7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoaSBpbiBhcCkpeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxsc1tpXS5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gdmFsdWUgY29t
ZXMgZnJvbSBvcmlnaW5hbCB0YXJnZXQgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0sCisgICAgICAgIC8vIGFk
ZCBhIGxpc3RlbmVyIHRvIGFuIG9iamVjdAorICAgICAgICBhZGQ6IGZ1bmN0aW9uKC8qT2JqZWN0
Ki8gc291cmNlLCAvKlN0cmluZyovIG1ldGhvZCwgLypGdW5jdGlvbiovIGxpc3RlbmVyKXsKKyAg
ICAgICAgICAgICAgICAvLyBXaGVuZXZlciAnbWV0aG9kJyBpcyBpbnZva2VkLCAnbGlzdGVuZXIn
IHdpbGwgaGF2ZSB0aGUgc2FtZSBzY29wZS4KKyAgICAgICAgICAgICAgICAvLyBUcnlpbmcgdG8g
c3VwcG9ydGluZyBhIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgbGlzdGVuZXIgbGVkIHRvCisgICAg
ICAgICAgICAgICAgLy8gY29tcGxleGl0eS4KKyAgICAgICAgICAgICAgICAvLyBOb24gdHJpdmlh
bCB0byBwcm92aWRlICdvbmNlJyBmdW5jdGlvbmFsaXR5IGhlcmUKKyAgICAgICAgICAgICAgICAv
LyBiZWNhdXNlIGxpc3RlbmVyIGNvdWxkIGJlIHRoZSByZXN1bHQgb2YgYSBkb2pvLmhpdGNoIGNh
bGwsCisgICAgICAgICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0d28gcmVmZXJlbmNlcyB0byB0
aGUgc2FtZSBoaXRjaCB0YXJnZXQgd291bGQgbm90CisgICAgICAgICAgICAgICAgLy8gYmUgZXF1
aXZhbGVudC4KKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UgfHwgZG9qby5nbG9iYWw7
CisgICAgICAgICAgICAgICAgLy8gVGhlIHNvdXJjZSBtZXRob2QgaXMgZWl0aGVyIG51bGwsIGEg
ZGlzcGF0Y2hlciwgb3Igc29tZSBvdGhlciBmdW5jdGlvbgorICAgICAgICAgICAgICAgIHZhciBm
ID0gc291cmNlW21ldGhvZF07CisgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGEgZGlzcGF0Y2hl
cgorICAgICAgICAgICAgICAgIGlmKCFmIHx8ICFmLl9saXN0ZW5lcnMpeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGQgPSBkb2pvLl9saXN0ZW5lci5nZXREaXNwYXRjaGVyKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCB0YXJnZXQgZnVuY3Rpb24gaXMgc3BlY2lh
bAorICAgICAgICAgICAgICAgICAgICAgICAgZC50YXJnZXQgPSBmOworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZGlzcGF0Y2hlciBob2xkcyBhIGxpc3Qgb2YgbGlzdGVuZXJzCisgICAgICAg
ICAgICAgICAgICAgICAgICBkLl9saXN0ZW5lcnMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHJlZGlyZWN0IHNvdXJjZSB0byBkaXNwYXRjaGVyCisgICAgICAgICAgICAgICAgICAg
ICAgICBmID0gc291cmNlW21ldGhvZF0gPSBkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAvLyBUaGUgY29udHJhY3QgaXMgdGhhdCBhIGhhbmRsZSBpcyByZXR1cm5lZCB0aGF0
IGNhbgorICAgICAgICAgICAgICAgIC8vIGlkZW50aWZ5IHRoaXMgbGlzdGVuZXIgZm9yIGRpc2Nv
bm5lY3QuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUaGUgdHlwZSBv
ZiB0aGUgaGFuZGxlIGlzIHByaXZhdGUuIEhlcmUgaXMgaXQgaW1wbGVtZW50ZWQgYXMgSW50ZWdl
ci4KKyAgICAgICAgICAgICAgICAvLyBET00gZXZlbnQgY29kZSBoYXMgdGhpcyBzYW1lIGNvbnRy
YWN0IGJ1dCBoYW5kbGUgaXMgRnVuY3Rpb24KKyAgICAgICAgICAgICAgICAvLyBpbiBub24tSUUg
YnJvd3NlcnMuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBXZSBjb3Vs
ZCBoYXZlIHNlcGFyYXRlIGxpc3RzIG9mIGJlZm9yZSBhbmQgYWZ0ZXIgbGlzdGVuZXJzLgorICAg
ICAgICAgICAgICAgIHJldHVybiBmLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7IC8qSGFuZGxl
Ki8KKyAgICAgICAgfSwKKyAgICAgICAgLy8gcmVtb3ZlIGEgbGlzdGVuZXIgZnJvbSBhbiBvYmpl
Y3QKKyAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigvKk9iamVjdCovIHNvdXJjZSwgLypTdHJpbmcq
LyBtZXRob2QsIC8qSGFuZGxlKi8gaGFuZGxlKXsKKyAgICAgICAgICAgICAgICB2YXIgZiA9IChz
b3VyY2UgfHwgZG9qby5nbG9iYWwpW21ldGhvZF07CisgICAgICAgICAgICAgICAgLy8gcmVtZW1i
ZXIgdGhhdCBoYW5kbGUgaXMgdGhlIGluZGV4KzEgKDAgaXMgbm90IGEgdmFsaWQgaGFuZGxlKQor
ICAgICAgICAgICAgICAgIGlmKGYgJiYgZi5fbGlzdGVuZXJzICYmIGhhbmRsZS0tKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmLl9saXN0ZW5lcnNbaGFuZGxlXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgIH0KK307CisKKy8vIE11bHRpcGxlIGRlbGVnYXRpb24gZm9yIGFy
Yml0cmFyeSBtZXRob2RzLgorCisvLyBUaGlzIHVuaXQga25vd3Mgbm90aGluZyBhYm91dCBET00s
IGJ1dCB3ZSBpbmNsdWRlIERPTSBhd2FyZSBkb2N1bWVudGF0aW9uCisvLyBhbmQgZG9udEZpeCBh
cmd1bWVudCBoZXJlIHRvIGhlbHAgdGhlIGF1dG9kb2NzLiBBY3R1YWwgRE9NIGF3YXJlIGNvZGUg
aXMgaW4KKy8vIGV2ZW50LmpzLgorCitkb2pvLmNvbm5lY3QgPSBmdW5jdGlvbigvKk9iamVjdHxu
dWxsKi8gb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLypTdHJpbmcqLyBldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qT2JqZWN0fG51bGwqLyBjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypTdHJpbmd8RnVuY3Rpb24qLyBtZXRob2Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKkJvb2xl
YW4/Ki8gZG9udEZpeCl7CisgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgIC8vICAgICAgICAg
ICAgICBgZG9qby5jb25uZWN0YCBpcyB0aGUgY29yZSBldmVudCBoYW5kbGluZyBhbmQgZGVsZWdh
dGlvbiBtZXRob2QgaW4KKyAgICAgICAgLy8gICAgICAgICAgICAgIERvam8uIEl0IGFsbG93cyBv
bmUgZnVuY3Rpb24gdG8gImxpc3RlbiBpbiIgb24gdGhlIGV4ZWN1dGlvbiBvZgorICAgICAgICAv
LyAgICAgICAgICAgICAgYW55IG90aGVyLCB0cmlnZ2VyaW5nIHRoZSBzZWNvbmQgd2hlbmV2ZXIg
dGhlIGZpcnN0IGlzIGNhbGxlZC4gTWFueQorICAgICAgICAvLyAgICAgICAgICAgICAgbGlzdGVu
ZXJzIG1heSBiZSBhdHRhY2hlZCB0byBhIGZ1bmN0aW9uLCBhbmQgc291cmNlIGZ1bmN0aW9ucyBt
YXkKKyAgICAgICAgLy8gICAgICAgICAgICAgIGJlIGVpdGhlciByZWd1bGFyIGZ1bmN0aW9uIGNh
bGxzIG9yIERPTSBldmVudHMuCisgICAgICAgIC8vCisgICAgICAgIC8vIGRlc2NyaXB0aW9uOgor
ICAgICAgICAvLyAgICAgICAgICAgICAgQ29ubmVjdHMgbGlzdGVuZXJzIHRvIGFjdGlvbnMsIHNv
IHRoYXQgYWZ0ZXIgZXZlbnQgZmlyZXMsIGEKKyAgICAgICAgLy8gICAgICAgICAgICAgIGxpc3Rl
bmVyIGlzIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIG9yaWdp
bmFsCisgICAgICAgIC8vICAgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gICAgICAgICAgICAgIFNpbmNlIGBkb2pvLmNvbm5lY3RgIGFsbG93cyB0aGUgc291cmNl
IG9mIGV2ZW50cyB0byBiZSBlaXRoZXIgYQorICAgICAgICAvLyAgICAgICAgICAgICAgInJlZ3Vs
YXIiIEphdmFTY3JpcHQgZnVuY3Rpb24gb3IgYSBET00gZXZlbnQsIGl0IHByb3ZpZGVzIGEgdW5p
Zm9ybQorICAgICAgICAvLyAgICAgICAgICAgICAgaW50ZXJmYWNlIGZvciBsaXN0ZW5pbmcgdG8g
YWxsIHRoZSB0eXBlcyBvZiBldmVudHMgdGhhdCBhbgorICAgICAgICAvLyAgICAgICAgICAgICAg
YXBwbGljYXRpb24gaXMgbGlrZWx5IHRvIGRlYWwgd2l0aCB0aG91Z2ggYSBzaW5nbGUsIHVuaWZp
ZWQKKyAgICAgICAgLy8gICAgICAgICAgICAgIGludGVyZmFjZS4gRE9NIHByb2dyYW1tZXJzIG1h
eSB3YW50IHRvIHRoaW5rIG9mIGl0IGFzCisgICAgICAgIC8vICAgICAgICAgICAgICAiYWRkRXZl
bnRMaXN0ZW5lciBmb3IgZXZlcnl0aGluZyBhbmQgYW55dGhpbmciLgorICAgICAgICAvLworICAg
ICAgICAvLyAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHVwIGEgY29ubmVjdGlvbiwgdGhlIGBl
dmVudGAgcGFyYW1ldGVyIG11c3QgYmUgYQorICAgICAgICAvLyAgICAgICAgICAgICAgc3RyaW5n
IHRoYXQgaXMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZC9ldmVudCB0byBiZSBsaXN0ZW5lZCBmb3Iu
IElmCisgICAgICAgIC8vICAgICAgICAgICAgICBgb2JqYCBpcyBudWxsLCBgZG9qby5nbG9iYWxg
IGlzIGFzc3VtZWQsIG1lYW5pbmcgdGhhdCBjb25uZWN0aW9ucworICAgICAgICAvLyAgICAgICAg
ICAgICAgdG8gZ2xvYmFsIG1ldGhvZHMgYXJlIHN1cHBvcnRlZCBidXQgYWxzbyB0aGF0IHlvdSBt
YXkgaW5hZHZlcnRlbnRseQorICAgICAgICAvLyAgICAgICAgICAgICAgY29ubmVjdCB0byBhIGds
b2JhbCBieSBwYXNzaW5nIGFuIGluY29ycmVjdCBvYmplY3QgbmFtZSBvciBpbnZhbGlkCisgICAg
ICAgIC8vICAgICAgICAgICAgICByZWZlcmVuY2UuCisgICAgICAgIC8vCisgICAgICAgIC8vICAg
ICAgICAgICAgICBgZG9qby5jb25uZWN0YCBnZW5lcmFsbHkgaXMgZm9yZ2l2aW5nLiBJZiB5b3Ug
cGFzcyB0aGUgbmFtZSBvZiBhCisgICAgICAgIC8vICAgICAgICAgICAgICBmdW5jdGlvbiBvciBt
ZXRob2QgdGhhdCBkb2VzIG5vdCB5ZXQgZXhpc3Qgb24gYG9iamAsIGNvbm5lY3Qgd2lsbAorICAg
ICAgICAvLyAgICAgICAgICAgICAgbm90IGZhaWwsIGJ1dCB3aWxsIGluc3RlYWQgc2V0IHVwIGEg
c3R1YiBtZXRob2QuIFNpbWlsYXJseSwgbnVsbAorICAgICAgICAvLyAgICAgICAgICAgICAgYXJn
dW1lbnRzIG1heSBzaW1wbHkgYmUgb21pdHRlZCBzdWNoIHRoYXQgZmV3ZXIgdGhhbiA0IGFyZ3Vt
ZW50cworICAgICAgICAvLyAgICAgICAgICAgICAgbWF5IGJlIHJlcXVpcmVkIHRvIHNldCB1cCBh
IGNvbm5lY3Rpb24gU2VlIHRoZSBleGFtcGxlcyBmb3IgZGV0YWlscy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gICAgICAgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBoYW5kbGUgdGhhdCBp
cyBuZWVkZWQgdG8KKyAgICAgICAgLy8gICAgICAgICAgICAgIHJlbW92ZSB0aGlzIGNvbm5lY3Rp
b24gd2l0aCBgZG9qby5kaXNjb25uZWN0YC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gb2JqOgor
ICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIHNvdXJjZSBvYmplY3QgZm9yIHRoZSBldmVudCBm
dW5jdGlvbi4KKyAgICAgICAgLy8gICAgICAgICAgICAgIERlZmF1bHRzIHRvIGBkb2pvLmdsb2Jh
bGAgaWYgbnVsbC4KKyAgICAgICAgLy8gICAgICAgICAgICAgIElmIG9iaiBpcyBhIERPTSBub2Rl
LCB0aGUgY29ubmVjdGlvbiBpcyBkZWxlZ2F0ZWQKKyAgICAgICAgLy8gICAgICAgICAgICAgIHRv
IHRoZSBET00gZXZlbnQgbWFuYWdlciAodW5sZXNzIGRvbnRGaXggaXMgdHJ1ZSkuCisgICAgICAg
IC8vCisgICAgICAgIC8vIGV2ZW50OgorICAgICAgICAvLyAgICAgICAgICAgICAgU3RyaW5nIG5h
bWUgb2YgdGhlIGV2ZW50IGZ1bmN0aW9uIGluIG9iai4KKyAgICAgICAgLy8gICAgICAgICAgICAg
IEkuZS4gaWRlbnRpZmllcyBhIHByb3BlcnR5IGBvYmpbZXZlbnRdYC4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gY29udGV4dDoKKyAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhh
dCBtZXRob2Qgd2lsbCByZWNlaXZlIGFzICJ0aGlzIi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
ICAgICAgICAgICAgIElmIGNvbnRleHQgaXMgbnVsbCBhbmQgbWV0aG9kIGlzIGEgZnVuY3Rpb24s
IHRoZW4gbWV0aG9kCisgICAgICAgIC8vICAgICAgICAgICAgICBpbmhlcml0cyB0aGUgY29udGV4
dCBvZiBldmVudC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgICAgICAgICAgIElmIG1ldGhv
ZCBpcyBhIHN0cmluZyB0aGVuIGNvbnRleHQgbXVzdCBiZSB0aGUgc291cmNlCisgICAgICAgIC8v
ICAgICAgICAgICAgICBvYmplY3Qgb2JqZWN0IGZvciBtZXRob2QgKGNvbnRleHRbbWV0aG9kXSku
IElmIGNvbnRleHQgaXMgbnVsbCwKKyAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8uZ2xvYmFs
IGlzIHVzZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIG1ldGhvZDoKKyAgICAgICAgLy8gICAg
ICAgICAgICAgIEEgZnVuY3Rpb24gcmVmZXJlbmNlLCBvciBuYW1lIG9mIGEgZnVuY3Rpb24gaW4g
Y29udGV4dC4KKyAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBpZGVudGlmaWVk
IGJ5IG1ldGhvZCBmaXJlcyBhZnRlciBldmVudCBkb2VzLgorICAgICAgICAvLyAgICAgICAgICAg
ICAgbWV0aG9kIHJlY2VpdmVzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgZXZlbnQuCisgICAg
ICAgIC8vICAgICAgICAgICAgICBTZWUgY29udGV4dCBhcmd1bWVudCBjb21tZW50cyBmb3IgaW5m
b3JtYXRpb24gb24gbWV0aG9kJ3Mgc2NvcGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIGRvbnRG
aXg6CisgICAgICAgIC8vICAgICAgICAgICAgICBJZiBvYmogaXMgYSBET00gbm9kZSwgc2V0IGRv
bnRGaXggdG8gdHJ1ZSB0byBwcmV2ZW50IGRlbGVnYXRpb24KKyAgICAgICAgLy8gICAgICAgICAg
ICAgIG9mIHRoaXMgY29ubmVjdGlvbiB0byB0aGUgRE9NIGV2ZW50IG1hbmFnZXIuCisgICAgICAg
IC8vCisgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgIC8vICAgICAgICAgICAgICBXaGVuIG9i
ai5vbmNoYW5nZSgpLCBkbyB1aS51cGRhdGUoKToKKyAgICAgICAgLy8gICAgICB8ICAgICAgIGRv
am8uY29ubmVjdChvYmosICJvbmNoYW5nZSIsIHVpLCAidXBkYXRlIik7CisgICAgICAgIC8vICAg
ICAgfCAgICAgICBkb2pvLmNvbm5lY3Qob2JqLCAib25jaGFuZ2UiLCB1aSwgdWkudXBkYXRlKTsg
Ly8gc2FtZQorICAgICAgICAvLworICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAvLyAgICAg
ICAgICAgICAgVXNpbmcgcmV0dXJuIHZhbHVlIGZvciBkaXNjb25uZWN0OgorICAgICAgICAvLyAg
ICAgIHwgICAgICAgdmFyIGxpbmsgPSBkb2pvLmNvbm5lY3Qob2JqLCAib25jaGFuZ2UiLCB1aSwg
InVwZGF0ZSIpOworICAgICAgICAvLyAgICAgIHwgICAgICAgLi4uCisgICAgICAgIC8vICAgICAg
fCAgICAgICBkb2pvLmRpc2Nvbm5lY3QobGluayk7CisgICAgICAgIC8vCisgICAgICAgIC8vIGV4
YW1wbGU6CisgICAgICAgIC8vICAgICAgICAgICAgICBXaGVuIG9uZ2xvYmFsZXZlbnQgZXhlY3V0
ZXMsIHdhdGNoZXIuaGFuZGxlciBpcyBpbnZva2VkOgorICAgICAgICAvLyAgICAgIHwgICAgICAg
ZG9qby5jb25uZWN0KG51bGwsICJvbmdsb2JhbGV2ZW50Iiwgd2F0Y2hlciwgImhhbmRsZXIiKTsK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgLy8gICAgICAgICAgICAg
IFdoZW4gb2Iub25DdXN0b21FdmVudCBleGVjdXRlcywgY3VzdG9tRXZlbnRIYW5kbGVyIGlzIGlu
dm9rZWQ6CisgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmNvbm5lY3Qob2IsICJvbkN1c3Rv
bUV2ZW50IiwgbnVsbCwgImN1c3RvbUV2ZW50SGFuZGxlciIpOworICAgICAgICAvLyAgICAgIHwg
ICAgICAgZG9qby5jb25uZWN0KG9iLCAib25DdXN0b21FdmVudCIsICJjdXN0b21FdmVudEhhbmRs
ZXIiKTsgLy8gc2FtZQorICAgICAgICAvLworICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAv
LyAgICAgICAgICAgICAgV2hlbiBvYi5vbkN1c3RvbUV2ZW50IGV4ZWN1dGVzLCBjdXN0b21FdmVu
dEhhbmRsZXIgaXMgaW52b2tlZAorICAgICAgICAvLyAgICAgICAgICAgICAgd2l0aCB0aGUgc2Ft
ZSBzY29wZSAodGhpcyk6CisgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmNvbm5lY3Qob2Is
ICJvbkN1c3RvbUV2ZW50IiwgbnVsbCwgY3VzdG9tRXZlbnRIYW5kbGVyKTsKKyAgICAgICAgLy8g
ICAgICB8ICAgICAgIGRvam8uY29ubmVjdChvYiwgIm9uQ3VzdG9tRXZlbnQiLCBjdXN0b21FdmVu
dEhhbmRsZXIpOyAvLyBzYW1lCisgICAgICAgIC8vCisgICAgICAgIC8vIGV4YW1wbGU6CisgICAg
ICAgIC8vICAgICAgICAgICAgICBXaGVuIGdsb2JhbEV2ZW50IGV4ZWN1dGVzLCBnbG9iYWxIYW5k
bGVyIGlzIGludm9rZWQKKyAgICAgICAgLy8gICAgICAgICAgICAgIHdpdGggdGhlIHNhbWUgc2Nv
cGUgKHRoaXMpOgorICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5jb25uZWN0KG51bGwsICJn
bG9iYWxFdmVudCIsIG51bGwsIGdsb2JhbEhhbmRsZXIpOworICAgICAgICAvLyAgICAgIHwgICAg
ICAgZG9qby5jb25uZWN0KCJnbG9iYWxFdmVudCIsIGdsb2JhbEhhbmRsZXIpOyAvLyBzYW1lCisK
KyAgICAgICAgLy8gbm9ybWFsaXplIGFyZ3VtZW50cworICAgICAgICB2YXIgYT1hcmd1bWVudHMs
IGFyZ3M9W10sIGk9MDsKKyAgICAgICAgLy8gaWYgYVswXSBpcyBhIFN0cmluZywgb2JqIHdhcyBv
bWl0dGVkCisgICAgICAgIGFyZ3MucHVzaChkb2pvLmlzU3RyaW5nKGFbMF0pID8gbnVsbCA6IGFb
aSsrXSwgYVtpKytdKTsKKyAgICAgICAgLy8gaWYgdGhlIGFyZy1hZnRlci1uZXh0IGlzIGEgU3Ry
aW5nIG9yIEZ1bmN0aW9uLCBjb250ZXh0IHdhcyBOT1Qgb21pdHRlZAorICAgICAgICB2YXIgYTEg
PSBhW2krMV07CisgICAgICAgIGFyZ3MucHVzaChkb2pvLmlzU3RyaW5nKGExKXx8ZG9qby5pc0Z1
bmN0aW9uKGExKSA/IGFbaSsrXSA6IG51bGwsIGFbaSsrXSk7CisgICAgICAgIC8vIGFic29yYiBh
bnkgYWRkaXRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgZm9yKHZhciBsPWEubGVuZ3RoOyBpPGw7
IGkrKyl7ICBhcmdzLnB1c2goYVtpXSk7IH0KKyAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB3b3Jr
CisgICAgICAgIHJldHVybiBkb2pvLl9jb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3MpOyAvKkhhbmRs
ZSovCit9CisKKy8vIHVzZWQgYnkgbm9uLWJyb3dzZXIgaG9zdGVudnMuIGFsd2F5cyBvdmVycmlk
ZW4gYnkgZXZlbnQuanMKK2Rvam8uX2Nvbm5lY3QgPSBmdW5jdGlvbihvYmosIGV2ZW50LCBjb250
ZXh0LCBtZXRob2QpeworICAgICAgICB2YXIgbD1kb2pvLl9saXN0ZW5lciwgaD1sLmFkZChvYmos
IGV2ZW50LCBkb2pvLmhpdGNoKGNvbnRleHQsIG1ldGhvZCkpOworICAgICAgICByZXR1cm4gW29i
aiwgZXZlbnQsIGgsIGxdOyAvLyBIYW5kbGUKK307CisKK2Rvam8uZGlzY29ubmVjdCA9IGZ1bmN0
aW9uKC8qSGFuZGxlKi8gaGFuZGxlKXsKKyAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgLy8g
ICAgICAgICAgICAgIFJlbW92ZSBhIGxpbmsgY3JlYXRlZCBieSBkb2pvLmNvbm5lY3QuCisgICAg
ICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAvLyAgICAgICAgICAgICAgUmVtb3ZlcyB0aGUg
Y29ubmVjdGlvbiBiZXR3ZWVuIGV2ZW50IGFuZCB0aGUgbWV0aG9kIHJlZmVyZW5jZWQgYnkgaGFu
ZGxlLgorICAgICAgICAvLyBoYW5kbGU6CisgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgcmV0
dXJuIHZhbHVlIG9mIHRoZSBkb2pvLmNvbm5lY3QgY2FsbCB0aGF0IGNyZWF0ZWQgdGhlIGNvbm5l
Y3Rpb24uCisgICAgICAgIGlmKGhhbmRsZSAmJiBoYW5kbGVbMF0gIT09IHVuZGVmaW5lZCl7Cisg
ICAgICAgICAgICAgICAgZG9qby5fZGlzY29ubmVjdC5hcHBseSh0aGlzLCBoYW5kbGUpOworICAg
ICAgICAgICAgICAgIC8vIGxldCdzIG5vdCBrZWVwIHRoaXMgcmVmZXJlbmNlCisgICAgICAgICAg
ICAgICAgZGVsZXRlIGhhbmRsZVswXTsKKyAgICAgICAgfQorfTsKKworZG9qby5fZGlzY29ubmVj
dCA9IGZ1bmN0aW9uKG9iaiwgZXZlbnQsIGhhbmRsZSwgbGlzdGVuZXIpeworICAgICAgICBsaXN0
ZW5lci5yZW1vdmUob2JqLCBldmVudCwgaGFuZGxlKTsKK307CisKKy8vIHRvcGljIHB1Ymxpc2gv
c3Vic2NyaWJlCisKK2Rvam8uX3RvcGljcyA9IHt9OworCitkb2pvLnN1YnNjcmliZSA9IGZ1bmN0
aW9uKC8qU3RyaW5nKi8gdG9waWMsIC8qT2JqZWN0fG51bGwqLyBjb250ZXh0LCAvKlN0cmluZ3xG
dW5jdGlvbiovIG1ldGhvZCl7CisgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgLy8g
ICAgICAgICAgICAgIEF0dGFjaCBhIGxpc3RlbmVyIHRvIGEgbmFtZWQgdG9waWMuIFRoZSBsaXN0
ZW5lciBmdW5jdGlvbiBpcyBpbnZva2VkIHdoZW5ldmVyIHRoZQorICAgICAgICAvLyAgICAgICAg
ICAgICAgbmFtZWQgdG9waWMgaXMgcHVibGlzaGVkIChzZWU6IGRvam8ucHVibGlzaCkuCisgICAg
ICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIGEgaGFuZGxlIHdoaWNoIGlzIG5lZWRlZCB0byB1
bnN1YnNjcmliZSB0aGlzIGxpc3RlbmVyLgorICAgICAgICAvLyAgICAgIGNvbnRleHQ6CisgICAg
ICAgIC8vICAgICAgICAgICAgICBTY29wZSBpbiB3aGljaCBtZXRob2Qgd2lsbCBiZSBpbnZva2Vk
LCBvciBudWxsIGZvciBkZWZhdWx0IHNjb3BlLgorICAgICAgICAvLyAgICAgIG1ldGhvZDoKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIFRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gY29udGV4dCwg
b3IgYSBmdW5jdGlvbiByZWZlcmVuY2UuIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQKKyAgICAg
ICAgLy8gICAgICAgICAgICAgIGlzIGludm9rZWQgd2hlbiB0b3BpYyBpcyBwdWJsaXNoZWQuCisg
ICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uc3Vi
c2NyaWJlKCJhbGVydHMiLCBudWxsLCBmdW5jdGlvbihjYXB0aW9uLCBtZXNzYWdlKXsgYWxlcnQo
Y2FwdGlvbiArICJcbiIgKyBtZXNzYWdlKTsgfSk7CisgICAgICAgIC8vICAgICAgfCAgICAgICBk
b2pvLnB1Ymxpc2goImFsZXJ0cyIsIFsgInJlYWQgdGhpcyIsICJoZWxsbyB3b3JsZCIgXSk7CisK
KyAgICAgICAgLy8gc3VwcG9ydCBmb3IgMiBhcmd1bWVudCBpbnZvY2F0aW9uIChvbWl0dGluZyBj
b250ZXh0KSBkZXBlbmRzIG9uIGhpdGNoCisgICAgICAgIHJldHVybiBbdG9waWMsIGRvam8uX2xp
c3RlbmVyLmFkZChkb2pvLl90b3BpY3MsIHRvcGljLCBkb2pvLmhpdGNoKGNvbnRleHQsIG1ldGhv
ZCkpXTsgLypIYW5kbGUqLworfTsKKworZG9qby51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKC8qSGFu
ZGxlKi8gaGFuZGxlKXsKKyAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAvLyAgICAg
ICAgICAgICAgUmVtb3ZlIGEgdG9waWMgbGlzdGVuZXIuCisgICAgICAgIC8vICAgICAgaGFuZGxl
OgorICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIGhhbmRsZSByZXR1cm5lZCBmcm9tIGEgY2Fs
bCB0byBzdWJzY3JpYmUuCisgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgLy8gICAg
ICB8ICAgICAgIHZhciBhbGVydGVyID0gZG9qby5zdWJzY3JpYmUoImFsZXJ0cyIsIG51bGwsIGZ1
bmN0aW9uKGNhcHRpb24sIG1lc3NhZ2UpeyBhbGVydChjYXB0aW9uICsgIlxuIiArIG1lc3NhZ2Up
OyB9OworICAgICAgICAvLyAgICAgIHwgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgfCAgICAg
ICBkb2pvLnVuc3Vic2NyaWJlKGFsZXJ0ZXIpOworICAgICAgICBpZihoYW5kbGUpeworICAgICAg
ICAgICAgICAgIGRvam8uX2xpc3RlbmVyLnJlbW92ZShkb2pvLl90b3BpY3MsIGhhbmRsZVswXSwg
aGFuZGxlWzFdKTsKKyAgICAgICAgfQorfTsKKworZG9qby5wdWJsaXNoID0gZnVuY3Rpb24oLypT
dHJpbmcqLyB0b3BpYywgLypBcnJheSovIGFyZ3MpeworICAgICAgICAvLyAgICAgIHN1bW1hcnk6
CisgICAgICAgIC8vICAgICAgICAgICAgICBJbnZva2UgYWxsIGxpc3RlbmVyIG1ldGhvZCBzdWJz
Y3JpYmVkIHRvIHRvcGljLgorICAgICAgICAvLyAgICAgIHRvcGljOgorICAgICAgICAvLyAgICAg
ICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHRvcGljIHRvIHB1Ymxpc2guCisgICAgICAgIC8vICAg
ICAgYXJnczoKKyAgICAgICAgLy8gICAgICAgICAgICAgIEFuIGFycmF5IG9mIGFyZ3VtZW50cy4g
VGhlIGFyZ3VtZW50cyB3aWxsIGJlIGFwcGxpZWQKKyAgICAgICAgLy8gICAgICAgICAgICAgIHRv
IGVhY2ggdG9waWMgc3Vic2NyaWJlciAoYXMgZmlyc3QgY2xhc3MgcGFyYW1ldGVycywgdmlhIGFw
cGx5KS4KKyAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAvLyAgICAgIHwgICAgICAg
ZG9qby5zdWJzY3JpYmUoImFsZXJ0cyIsIG51bGwsIGZ1bmN0aW9uKGNhcHRpb24sIG1lc3NhZ2Up
eyBhbGVydChjYXB0aW9uICsgIlxuIiArIG1lc3NhZ2UpOyB9OworICAgICAgICAvLyAgICAgIHwg
ICAgICAgZG9qby5wdWJsaXNoKCJhbGVydHMiLCBbICJyZWFkIHRoaXMiLCAiaGVsbG8gd29ybGQi
IF0pOworCisgICAgICAgIC8vIE5vdGUgdGhhdCBhcmdzIGlzIGFuIGFycmF5LCB3aGljaCBpcyBt
b3JlIGVmZmljaWVudCB2cyB2YXJpYWJsZSBsZW5ndGgKKyAgICAgICAgLy8gYXJndW1lbnQgbGlz
dC4gIElkZWFsbHksIHZhciBhcmdzIHdvdWxkIGJlIGltcGxlbWVudGVkIHZpYSBBcnJheQorICAg
ICAgICAvLyB0aHJvdWdob3V0IHRoZSBBUElzLgorICAgICAgICB2YXIgZiA9IGRvam8uX3RvcGlj
c1t0b3BpY107CisgICAgICAgIGlmKGYpeworICAgICAgICAgICAgICAgIGYuYXBwbHkodGhpcywg
YXJnc3x8W10pOworICAgICAgICB9Cit9OworCitkb2pvLmNvbm5lY3RQdWJsaXNoZXIgPSBmdW5j
dGlvbiggICAgICAgLypTdHJpbmcqLyB0b3BpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT2JqZWN0fG51
bGwqLyBvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKlN0cmluZyovIGV2ZW50KXsKKyAgICAgICAgLy8g
ICAgICBzdW1tYXJ5OgorICAgICAgICAvLyAgICAgICAgICAgICAgRW5zdXJlIHRoYXQgZXZlcnkg
dGltZSBvYmouZXZlbnQoKSBpcyBjYWxsZWQsIGEgbWVzc2FnZSBpcyBwdWJsaXNoZWQKKyAgICAg
ICAgLy8gICAgICAgICAgICAgIG9uIHRoZSB0b3BpYy4gUmV0dXJucyBhIGhhbmRsZSB3aGljaCBj
YW4gYmUgcGFzc2VkIHRvCisgICAgICAgIC8vICAgICAgICAgICAgICBkb2pvLmRpc2Nvbm5lY3Qo
KSB0byBkaXNhYmxlIHN1YnNlcXVlbnQgYXV0b21hdGljIHB1YmxpY2F0aW9uIG9uCisgICAgICAg
IC8vICAgICAgICAgICAgICB0aGUgdG9waWMuCisgICAgICAgIC8vICAgICAgdG9waWM6CisgICAg
ICAgIC8vICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgdG9waWMgdG8gcHVibGlzaC4KKyAg
ICAgICAgLy8gICAgICBvYmo6CisgICAgICAgIC8vICAgICAgICAgICAgICBUaGUgc291cmNlIG9i
amVjdCBmb3IgdGhlIGV2ZW50IGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBkb2pvLmdsb2JhbAorICAg
ICAgICAvLyAgICAgICAgICAgICAgaWYgbnVsbC4KKyAgICAgICAgLy8gICAgICBldmVudDoKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCBmdW5jdGlvbiBpbiBv
YmouCisgICAgICAgIC8vICAgICAgICAgICAgICBJLmUuIGlkZW50aWZpZXMgYSBwcm9wZXJ0eSBv
YmpbZXZlbnRdLgorICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgIC8vICAgICAgfCAg
ICAgICBkb2pvLmNvbm5lY3RQdWJsaXNoZXIoIi9hamF4L3N0YXJ0IiwgZG9qbywgInhockdldCIp
OworICAgICAgICB2YXIgcGYgPSBmdW5jdGlvbigpeyBkb2pvLnB1Ymxpc2godG9waWMsIGFyZ3Vt
ZW50cyk7IH0KKyAgICAgICAgcmV0dXJuIGV2ZW50ID8gZG9qby5jb25uZWN0KG9iaiwgZXZlbnQs
IHBmKSA6IGRvam8uY29ubmVjdChvYmosIHBmKTsgLy9IYW5kbGUKK307CisKK30KKworaWYoIWRv
am8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLkRlZmVycmVkIl0peyAvL19oYXNSZXNvdXJjZSBj
aGVja3MgYWRkZWQgYnkgYnVpbGQuIERvIG5vdCB1c2UgX2hhc1Jlc291cmNlIGRpcmVjdGx5IGlu
IHlvdXIgY29kZS4KK2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLkRlZmVycmVkIl0gPSB0
cnVlOworZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLkRlZmVycmVkIik7CisKKworCisoZnVuY3Rp
b24oKXsKKyAgICAgICAgdmFyIG11dGF0b3IgPSBmdW5jdGlvbigpe307CisgICAgICAgIHZhciBm
cmVlemUgPSBPYmplY3QuZnJlZXplIHx8IGZ1bmN0aW9uKCl7fTsKKyAgICAgICAgLy8gQSBkZWZl
cnJlZCBwcm92aWRlcyBhbiBBUEkgZm9yIGNyZWF0aW5nIGFuZCByZXNvbHZpbmcgYSBwcm9taXNl
LgorICAgICAgICBkb2pvLkRlZmVycmVkID0gZnVuY3Rpb24oLypGdW5jdGlvbj8qL2NhbmNlbGxl
cil7CisgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgIC8vICAgICAgICAgICAgICBEZWZlcnJl
ZHMgcHJvdmlkZSBhIGdlbmVyaWMgbWVhbnMgZm9yIGVuY2Fwc3VsYXRpbmcgYW4gYXN5bmNocm9u
b3VzCisgICAgICAgIC8vICAgICAgICAgICAgICBvcGVyYXRpb24gYW5kIG5vdGlmeWluZyB1c2Vy
cyBvZiB0aGUgY29tcGxldGlvbiBhbmQgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgICAgICAg
IC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIGRvam8uRGVmZXJy
ZWQgQVBJIGlzIGJhc2VkIG9uIHRoZSBjb25jZXB0IG9mIHByb21pc2VzIHRoYXQgcHJvdmlkZSBh
CisgICAgICAgIC8vICAgICAgICAgICAgICBnZW5lcmljIGludGVyZmFjZSBpbnRvIHRoZSBldmVu
dHVhbCBjb21wbGV0aW9uIG9mIGFuIGFzeW5jaHJvbm91cyBhY3Rpb24uCisgICAgICAgIC8vICAg
ICAgICAgICAgICBUaGUgbW90aXZhdGlvbiBmb3IgcHJvbWlzZXMgZnVuZGFtZW50YWxseSBpcyBh
Ym91dCBjcmVhdGluZyBhCisgICAgICAgIC8vICAgICAgICAgICAgICBzZXBhcmF0aW9uIG9mIGNv
bmNlcm5zIHRoYXQgYWxsb3dzIG9uZSB0byBhY2hpZXZlIHRoZSBzYW1lIHR5cGUgb2YKKyAgICAg
ICAgLy8gICAgICAgICAgICAgIGNhbGwgcGF0dGVybnMgYW5kIGxvZ2ljYWwgZGF0YSBmbG93IGlu
IGFzeW5jaHJvbm91cyBjb2RlIGFzIGNhbiBiZQorICAgICAgICAvLyAgICAgICAgICAgICAgYWNo
aWV2ZWQgaW4gc3luY2hyb25vdXMgY29kZS4gUHJvbWlzZXMgYWxsb3dzIG9uZQorICAgICAgICAv
LyAgICAgICAgICAgICAgdG8gYmUgYWJsZSB0byBjYWxsIGEgZnVuY3Rpb24gcHVyZWx5IHdpdGgg
YXJndW1lbnRzIG5lZWRlZCBmb3IKKyAgICAgICAgLy8gICAgICAgICAgICAgIGV4ZWN1dGlvbiwg
d2l0aG91dCBjb25mbGF0aW5nIHRoZSBjYWxsIHdpdGggY29uY2VybnMgb2Ygd2hldGhlciBpdCBp
cworICAgICAgICAvLyAgICAgICAgICAgICAgc3luYyBvciBhc3luYy4gT25lIHNob3VsZG4ndCBu
ZWVkIHRvIGFsdGVyIGEgY2FsbCdzIGFyZ3VtZW50cyBpZiB0aGUKKyAgICAgICAgLy8gICAgICAg
ICAgICAgIGltcGxlbWVudGF0aW9uIHN3aXRjaGVzIGZyb20gc3luYyB0byBhc3luYyAob3Igdmlj
ZSB2ZXJzYSkuIEJ5IGhhdmluZworICAgICAgICAvLyAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rp
b25zIHJldHVybiBwcm9taXNlcywgdGhlIGNvbmNlcm5zIG9mIG1ha2luZyB0aGUgY2FsbCBhcmUK
KyAgICAgICAgLy8gICAgICAgICAgICAgIHNlcGFyYXRlZCBmcm9tIHRoZSBjb25jZXJucyBvZiBh
c3luY2hyb25vdXMgaW50ZXJhY3Rpb24gKHdoaWNoIGFyZQorICAgICAgICAvLyAgICAgICAgICAg
ICAgaGFuZGxlZCBieSB0aGUgcHJvbWlzZSkuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgICAg
VGhlIGRvam8uRGVmZXJyZWQgaXMgYSB0eXBlIG9mIHByb21pc2UgdGhhdCBwcm92aWRlcyBtZXRo
b2RzIGZvciBmdWxmaWxsaW5nIHRoZQorICAgICAgICAvLyAgICAgICAgICAgICAgcHJvbWlzZSB3
aXRoIGEgc3VjY2Vzc2Z1bCByZXN1bHQgb3IgYW4gZXJyb3IuIFRoZSBtb3N0IGltcG9ydGFudCBt
ZXRob2QgZm9yCisgICAgICAgIC8vICAgICAgICAgICAgICB3b3JraW5nIHdpdGggRG9qbydzIHBy
b21pc2VzIGlzIHRoZSB0aGVuKCkgbWV0aG9kLCB3aGljaCBmb2xsb3dzIHRoZQorICAgICAgICAv
LyAgICAgICAgICAgICAgQ29tbW9uSlMgcHJvcG9zZWQgcHJvbWlzZSBBUEkuIEFuIGV4YW1wbGUg
b2YgdXNpbmcgYSBEb2pvIHByb21pc2U6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICAgICAg
ICAgICB8ICAgICAgIHZhciByZXN1bHRpbmdQcm9taXNlID0gc29tZUFzeW5jT3BlcmF0aW9uLnRo
ZW4oZnVuY3Rpb24ocmVzdWx0KXsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAuLi4gaGFuZGxlIHJlc3VsdCAuLi4KKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAg
ICAgfSwKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgZnVuY3Rpb24oZXJyb3Ipewor
ICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIC4uLiBoYW5kbGUgZXJyb3Ig
Li4uCisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIH0pOworICAgICAgICAvLworICAg
ICAgICAvLyAgICAgICAgICAgICAgVGhlIC50aGVuKCkgY2FsbCByZXR1cm5zIGEgbmV3IHByb21p
c2UgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgdGhlCisgICAgICAgIC8vICAgICAgICAg
ICAgICBleGVjdXRpb24gb2YgdGhlIGNhbGxiYWNrLiBUaGUgY2FsbGJhY2tzIHdpbGwgbmV2ZXIg
YWZmZWN0IHRoZSBvcmlnaW5hbCBwcm9taXNlcyB2YWx1ZS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gICAgICAgICAgICAgIFRoZSBkb2pvLkRlZmVycmVkIGluc3RhbmNlcyBhbHNvIHByb3ZpZGUg
dGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorICAg
ICAgICAvLworICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAqIGFkZENhbGxiYWNrKGhh
bmRsZXIpCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICogYWRkRXJyYmFjayhoYW5k
bGVyKQorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAqIGNhbGxiYWNrKHJlc3VsdCkK
KyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgKiBlcnJiYWNrKHJlc3VsdCkKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gICAgICAgICAgICAgIENhbGxiYWNrcyBhcmUgYWxsb3dlZCB0byBy
ZXR1cm4gcHJvbWlzZXMgdGhlbXNlbHZlcywgc28KKyAgICAgICAgLy8gICAgICAgICAgICAgIHlv
dSBjYW4gYnVpbGQgY29tcGxpY2F0ZWQgc2VxdWVuY2VzIG9mIGV2ZW50cyB3aXRoIGVhc2UuCisg
ICAgICAgIC8vCisgICAgICAgIC8vICAgICAgICAgICAgICBUaGUgY3JlYXRvciBvZiB0aGUgRGVm
ZXJyZWQgbWF5IHNwZWNpZnkgYSBjYW5jZWxsZXIuICBUaGUgY2FuY2VsbGVyCisgICAgICAgIC8v
ICAgICAgICAgICAgICBpcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaWYgRGVmZXJy
ZWQuY2FuY2VsIGlzIGNhbGxlZAorICAgICAgICAvLyAgICAgICAgICAgICAgYmVmb3JlIHRoZSBE
ZWZlcnJlZCBmaXJlcy4gWW91IGNhbiB1c2UgdGhpcyB0byBpbXBsZW1lbnQgY2xlYW4KKyAgICAg
ICAgLy8gICAgICAgICAgICAgIGFib3J0aW5nIG9mIGFuIFhNTEh0dHBSZXF1ZXN0LCBldGMuIE5v
dGUgdGhhdCBjYW5jZWwgd2lsbCBmaXJlIHRoZQorICAgICAgICAvLyAgICAgICAgICAgICAgZGVm
ZXJyZWQgd2l0aCBhIENhbmNlbGxlZEVycm9yICh1bmxlc3MgeW91ciBjYW5jZWxsZXIgcmV0dXJu
cworICAgICAgICAvLyAgICAgICAgICAgICAgYW5vdGhlciBraW5kIG9mIGVycm9yKSwgc28gdGhl
IGVycmJhY2tzIHNob3VsZCBiZSBwcmVwYXJlZCB0bworICAgICAgICAvLyAgICAgICAgICAgICAg
aGFuZGxlIHRoYXQgZXJyb3IgZm9yIGNhbmNlbGxhYmxlIERlZmVycmVkcy4KKyAgICAgICAgLy8g
ZXhhbXBsZToKKyAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBkZWZlcnJlZCA9IG5ldyBkb2pv
LkRlZmVycmVkKCk7CisgICAgICAgIC8vICAgICAgfCAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7IGRlZmVycmVkLmNhbGxiYWNrKHtzdWNjZXNzOiB0cnVlfSk7IH0sIDEwMDApOworICAgICAg
ICAvLyAgICAgIHwgICAgICAgcmV0dXJuIGRlZmVycmVkOworICAgICAgICAvLyBleGFtcGxlOgor
ICAgICAgICAvLyAgICAgICAgICAgICAgRGVmZXJyZWQgb2JqZWN0cyBhcmUgb2Z0ZW4gdXNlZCB3
aGVuIG1ha2luZyBjb2RlIGFzeW5jaHJvbm91cy4gSXQKKyAgICAgICAgLy8gICAgICAgICAgICAg
IG1heSBiZSBlYXNpZXN0IHRvIHdyaXRlIGZ1bmN0aW9ucyBpbiBhIHN5bmNocm9ub3VzIG1hbm5l
ciBhbmQgdGhlbgorICAgICAgICAvLyAgICAgICAgICAgICAgc3BsaXQgY29kZSB1c2luZyBhIGRl
ZmVycmVkIHRvIHRyaWdnZXIgYSByZXNwb25zZSB0byBhIGxvbmctbGl2ZWQKKyAgICAgICAgLy8g
ICAgICAgICAgICAgIG9wZXJhdGlvbi4gRm9yIGV4YW1wbGUsIGluc3RlYWQgb2YgcmVnaXN0ZXIg
YSBjYWxsYmFjayBmdW5jdGlvbiB0bworICAgICAgICAvLyAgICAgICAgICAgICAgZGVub3RlIHdo
ZW4gYSByZW5kZXJpbmcgb3BlcmF0aW9uIGNvbXBsZXRlcywgdGhlIGZ1bmN0aW9uIGNhbgorICAg
ICAgICAvLyAgICAgICAgICAgICAgc2ltcGx5IHJldHVybiBhIGRlZmVycmVkOgorICAgICAgICAv
LworICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAvLyBjYWxsYmFjayBzdHlsZToKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgZnVuY3Rpb24gcmVuZGVyTG90c09mRGF0YShk
YXRhLCBjYWxsYmFjayl7CisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
dmFyIHN1Y2Nlc3MgPSBmYWxzZQorICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgIHRyeXsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
IGZvcih2YXIgeCBpbiBkYXRhKXsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRGF0YWl0ZW0oZGF0YVt4XSk7CisgICAgICAgIC8v
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAg
Ly8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB9Y2F0Y2goZSl7IH0KKyAgICAgICAgLy8g
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBpZihjYWxsYmFjayl7CisgICAgICAgIC8vICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhzdWNjZXNzKTsKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB9CisgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgIH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgICAgICAgICAgIHwg
ICAgICAgLy8gdXNpbmcgY2FsbGJhY2sgc3R5bGUKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwg
ICAgICAgcmVuZGVyTG90c09mRGF0YShzb21lRGF0YU9iaiwgZnVuY3Rpb24oc3VjY2Vzcyl7Cisg
ICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgLy8gaGFuZGxlcyBzdWNjZXNz
IG9yIGZhaWx1cmUKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBpZigh
c3VjY2Vzcyl7CisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICBwcm9tcHRVc2VyVG9SZWNvdmVyKCk7CisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgfQorICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB9KTsKKyAgICAgICAg
Ly8gICAgICAgICAgICAgIHwgICAgICAgLy8gTk9URTogbm8gd2F5IHRvIGFkZCBhbm90aGVyIGNh
bGxiYWNrIGhlcmUhIQorICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAvLyAgICAgICAgICAg
ICAgVXNpbmcgYSBEZWZlcnJlZCBkb2Vzbid0IHNpbXBsaWZ5IHRoZSBzZW5kaW5nIGNvZGUgYW55
LCBidXQgaXQKKyAgICAgICAgLy8gICAgICAgICAgICAgIHByb3ZpZGVzIGEgc3RhbmRhcmQgaW50
ZXJmYWNlIGZvciBjYWxsZXJzIGFuZCBzZW5kZXJzIGFsaWtlLAorICAgICAgICAvLyAgICAgICAg
ICAgICAgcHJvdmlkaW5nIGJvdGggd2l0aCBhIHNpbXBsZSB3YXkgdG8gc2VydmljZSBtdWx0aXBs
ZSBjYWxsYmFja3MgZm9yCisgICAgICAgIC8vICAgICAgICAgICAgICBhbiBvcGVyYXRpb24gYW5k
IGZyZWVpbmcgYm90aCBzaWRlcyBmcm9tIHdvcnJ5aW5nIGFib3V0IGRldGFpbHMKKyAgICAgICAg
Ly8gICAgICAgICAgICAgIHN1Y2ggYXMgImRpZCB0aGlzIGdldCBjYWxsZWQgYWxyZWFkeT8iLiBX
aXRoIERlZmVycmVkcywgbmV3CisgICAgICAgIC8vICAgICAgICAgICAgICBjYWxsYmFja3MgY2Fu
IGJlIGFkZGVkIGF0IGFueSB0aW1lLgorICAgICAgICAvLworICAgICAgICAvLyAgICAgICAgICAg
ICAgfCAgICAgICAvLyBEZWZlcnJlZCBzdHlsZToKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwg
ICAgICAgZnVuY3Rpb24gcmVuZGVyTG90c09mRGF0YShkYXRhKXsKKyAgICAgICAgLy8gICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICB2YXIgZCA9IG5ldyBkb2pvLkRlZmVycmVkKCk7CisgICAg
ICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgdHJ5eworICAgICAgICAvLyAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciB4IGluIGRhdGEpeworICAg
ICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5k
ZXJEYXRhaXRlbShkYXRhW3hdKTsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgIGQuY2FsbGJhY2sodHJ1ZSk7CisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgfWNhdGNoKGUpeworICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgZC5lcnJiYWNrKG5ldyBFcnJvcigicmVuZGVyaW5nIGZhaWxlZCIpKTsKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB9CisgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgcmV0dXJuIGQ7CisgICAgICAgIC8vICAgICAgICAgICAg
ICB8ICAgICAgIH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAg
Ly8gdXNpbmcgRGVmZXJyZWQgc3R5bGUKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAg
cmVuZGVyTG90c09mRGF0YShzb21lRGF0YU9iaikudGhlbihudWxsLCBmdW5jdGlvbigpeworICAg
ICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHByb21wdFVzZXJUb1JlY292ZXIo
KTsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgfSk7CisgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgIC8vIE5PVEU6IGFkZEVycmJhY2sgYW5kIGFkZENhbGxiYWNrIGJvdGgg
cmV0dXJuIHRoZSBEZWZlcnJlZAorICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAvLyBh
Z2Fpbiwgc28gd2UgY291bGQgY2hhaW4gYWRkaW5nIGNhbGxiYWNrcyBvciBzYXZlIHRoZQorICAg
ICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAvLyBkZWZlcnJlZCBmb3IgbGF0ZXIgc2hvdWxk
IHdlIG5lZWQgdG8gYmUgbm90aWZpZWQgYWdhaW4uCisgICAgICAgIC8vIGV4YW1wbGU6CisgICAg
ICAgIC8vICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHJlbmRlckxvdHNPZkRhdGEgaXMg
c3luY2hyb25vdXMgYW5kIHNvIGJvdGgKKyAgICAgICAgLy8gICAgICAgICAgICAgIHZlcnNpb25z
IGFyZSBwcmV0dHkgYXJ0aWZpY2lhbC4gUHV0dGluZyB0aGUgZGF0YSBkaXNwbGF5IG9uIGEKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIHRpbWVvdXQgaGVscHMgc2hvdyB3aHkgRGVmZXJyZWRzIHJv
Y2s6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIC8vIERlZmVy
cmVkIHN0eWxlIGFuZCBhc3luYyBmdW5jCisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAg
IGZ1bmN0aW9uIHJlbmRlckxvdHNPZkRhdGEoZGF0YSl7CisgICAgICAgIC8vICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgZG9qby5EZWZlcnJlZCgpOworICAgICAgICAv
LyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHRyeXsKKyAgICAg
ICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZh
ciB4IGluIGRhdGEpeworICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckRhdGFpdGVtKGRhdGFbeF0pOworICAgICAgICAv
LyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
IC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuY2FsbGJh
Y2sodHJ1ZSk7CisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICB9Y2F0Y2goZSl7CisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGQuZXJyYmFjayhuZXcgRXJyb3IoInJlbmRlcmluZyBmYWlsZWQiKSk7Cisg
ICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
IC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgLy8gICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICByZXR1cm4gZDsKKyAgICAgICAgLy8gICAgICAgICAg
ICAgIHwgICAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAg
ICAvLyB1c2luZyBEZWZlcnJlZCBzdHlsZQorICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAg
ICByZW5kZXJMb3RzT2ZEYXRhKHNvbWVEYXRhT2JqKS50aGVuKG51bGwsIGZ1bmN0aW9uKCl7Cisg
ICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgcHJvbXB0VXNlclRvUmVjb3Zl
cigpOworICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB9KTsKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgY2FsbGVyIGRvZXNuJ3QgaGF2ZSB0
byBjaGFuZ2UgaGlzIGNvZGUgYXQgYWxsIHRvCisgICAgICAgIC8vICAgICAgICAgICAgICBoYW5k
bGUgdGhlIGFzeW5jaHJvbm91cyBjYXNlLgorICAgICAgICAgICAgICAgIHZhciByZXN1bHQsIGZp
bmlzaGVkLCBpc0Vycm9yLCBoZWFkLCBuZXh0TGlzdGVuZXI7CisgICAgICAgICAgICAgICAgdmFy
IHByb21pc2UgPSAodGhpcy5wcm9taXNlID0ge30pOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmKGZpbmlzaGVkKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJUaGlzIGRlZmVycmVkIGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgbm90aWZ5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIG5vdGlmeSgpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG11
dGF0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSghbXV0YXRlZCAmJiBuZXh0TGlz
dGVuZXIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBu
ZXh0TGlzdGVuZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMaXN0ZW5l
ciA9IG5leHRMaXN0ZW5lci5uZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZigobXV0YXRlZCA9IChsaXN0ZW5lci5wcm9ncmVzcyA9PSBtdXRhdG9yKSkpeyAvLyBhc3NpZ25t
ZW50IGFuZCBjaGVjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bmlzaGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmMgPSAoaXNFcnJvciA/IGxpc3RlbmVy
LmVycm9yIDogbGlzdGVuZXIucmVzb2x2ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZnVuYykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbmV3UmVzdWx0ID0gZnVuYyhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1Jlc3VsdCAmJiB0eXBlb2YgbmV3UmVzdWx0LnRo
ZW4gPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3UmVzdWx0LnRoZW4oZG9qby5oaXRjaChsaXN0ZW5lci5k
ZWZlcnJlZCwgInJlc29sdmUiKSwgZG9qby5oaXRjaChsaXN0ZW5lci5kZWZlcnJlZCwgInJlamVj
dCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdW5jaGFuZ2VkID0gbXV0YXRlZCAmJiBuZXdSZXN1bHQgPT09IHVuZGVmaW5lZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG11dGF0ZWQg
JiYgIXVuY2hhbmdlZCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzRXJyb3IgPSBuZXdSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmRlZmVycmVk
W3VuY2hhbmdlZCAmJiBpc0Vycm9yID8gInJlamVjdCIgOiAicmVzb2x2ZSJdKHVuY2hhbmdlZCA/
IHJlc3VsdCA6IG5ld1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
ZW5lci5kZWZlcnJlZC5yZWplY3QoZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNFcnJvcil7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5kZWZlcnJl
ZC5yZWplY3QocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3RlbmVyLmRlZmVycmVkLnJlc29sdmUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgLy8gY2FsbGluZyByZXNvbHZlIHdpbGwgcmVzb2x2ZSB0aGUgcHJvbWlzZQorICAgICAg
ICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHRoaXMuY2FsbGJhY2sgPSBmdW5jdGlvbih2YWx1ZSl7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIEZ1bGZpbGxzIHRoZSBEZWZlcnJlZCBpbnN0YW5jZSBzdWNj
ZXNzZnVsbHkgd2l0aCB0aGUgcHJvdmlkZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5maXJlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBb
dmFsdWUsIG51bGxdOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUodmFsdWUpOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gY2FsbGluZyBlcnJvciB3aWxsIGluZGljYXRlIHRoYXQgdGhlIHBy
b21pc2UgZmFpbGVkCisgICAgICAgICAgICAgICAgdGhpcy5yZWplY3QgPSB0aGlzLmVycmJhY2sg
PSBmdW5jdGlvbihlcnJvcil7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEZ1bGZpbGxzIHRoZSBEZWZl
cnJlZCBpbnN0YW5jZSBhcyBhbiBlcnJvciB3aXRoIHRoZSBwcm92aWRlZCBlcnJvcgorICAgICAg
ICAgICAgICAgICAgICAgICAgaXNFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmZpcmVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKGVycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtudWxsLCBlcnJvcl07
CisgICAgICAgICAgICAgICAgICAgICAgICBpZighZXJyb3IgfHwgZXJyb3IubG9nICE9PSBmYWxz
ZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2pvLmNvbmZpZy5kZWZlcnJl
ZE9uRXJyb3IgfHwgZnVuY3Rpb24oeCl7IGNvbnNvbGUuZXJyb3IoeCk7IH0pKGVycm9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIC8vIGNhbGwgcHJvZ3Jlc3MgdG8gcHJvdmlkZSB1cGRhdGVzIG9uIHRoZSBwcm9ncmVzcyBv
biB0aGUgY29tcGxldGlvbiBvZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgICAgIHRoaXMucHJv
Z3Jlc3MgPSBmdW5jdGlvbih1cGRhdGUpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Vt
bWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFNlbmQgcHJvZ3Jl
c3MgZXZlbnRzIHRvIGFsbCBsaXN0ZW5lcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBs
aXN0ZW5lciA9IG5leHRMaXN0ZW5lcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKGxp
c3RlbmVyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2dyZXNzID0g
bGlzdGVuZXIucHJvZ3Jlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dy
ZXNzICYmIHByb2dyZXNzKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2FsbGJhY2tzID0gZnVu
Y3Rpb24oLypGdW5jdGlvbj8qL2NhbGxiYWNrLCAvKkZ1bmN0aW9uPyovZXJyYmFjayl7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRoZW4oY2FsbGJhY2ssIGVycmJhY2ssIG11dGF0b3Ip
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAvLyBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
cHJvbWlzZQorICAgICAgICAgICAgICAgIHRoaXMudGhlbiA9IHByb21pc2UudGhlbiA9IGZ1bmN0
aW9uKC8qRnVuY3Rpb24/Ki9yZXNvbHZlZENhbGxiYWNrLCAvKkZ1bmN0aW9uPyovZXJyb3JDYWxs
YmFjaywgLypGdW5jdGlvbj8qL3Byb2dyZXNzQ2FsbGJhY2speworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBBZGRzIGEgZnVsZmlsbGVkSGFuZGxlciwgZXJyb3JIYW5kbGVyLCBhbmQgcHJvZ3Jlc3NIYW5k
bGVyIHRvIGJlIGNhbGxlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBjb21wbGV0aW9uIG9mIGEgcHJvbWlzZS4gVGhlIGZ1bGZpbGxlZEhhbmRsZXIgaXMgY2Fs
bGVkIHdoZW4gdGhlIHByb21pc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBpcyBmdWxmaWxsZWQuIFRoZSBlcnJvckhhbmRsZXIgaXMgY2FsbGVkIHdoZW4gYSBwcm9t
aXNlIGZhaWxzLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBw
cm9ncmVzc0hhbmRsZXIgaXMgY2FsbGVkIGZvciBwcm9ncmVzcyBldmVudHMuIEFsbCBhcmd1bWVu
dHMgYXJlIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
YW5kIG5vbi1mdW5jdGlvbiB2YWx1ZXMgYXJlIGlnbm9yZWQuIFRoZSBwcm9ncmVzc0hhbmRsZXIg
aXMgbm90IG9ubHkgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBv
cHRpb25hbCBhcmd1bWVudCwgYnV0IHByb2dyZXNzIGV2ZW50cyBhcmUgcHVyZWx5IG9wdGlvbmFs
LiBQcm9taXNlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcHJvdmlk
ZXJzIGFyZSBub3QgcmVxdWlyZWQgdG8gZXZlciBjcmVhdGUgcHJvZ3Jlc3MgZXZlbnRzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgbmV3IHByb21pc2UgdGhhdCBpcyBm
dWxmaWxsZWQgd2hlbiB0aGUgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBmdWxmaWxsZWRIYW5kbGVyIG9yIGVycm9ySGFuZGxlciBjYWxsYmFjayBpcyBmaW5p
c2hlZC4gVGhpcyBhbGxvd3MgcHJvbWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIG9wZXJhdGlvbnMgdG8gYmUgY2hhaW5lZCB0b2dldGhlci4gVGhlIHZhbHVlIHJl
dHVybmVkIGZyb20gdGhlIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgaGFuZGxlciBpcyB0aGUgZnVsZmlsbG1lbnQgdmFsdWUgZm9yIHRoZSByZXR1cm5l
ZCBwcm9taXNlLiBJZiB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICB0aHJvd3MgYW4gZXJyb3IsIHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUg
bW92ZWQgdG8gZmFpbGVkIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgQW4gZXhhbXBsZSBvZiB1c2luZyBhIENvbW1vbkpTIGNvbXBsaWFudCBw
cm9taXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAg
YXN5bmNDb21wdXRlVGhlQW5zd2VyVG9FdmVyeXRoaW5nKCkuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHRoZW4oYWRkVHdvKS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgdGhlbihw
cmludFJlc3VsdCwgb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgfCAgICAgICA+NDQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgcmV0dXJuRGVmZXJyZWQgPSBwcm9ncmVzc0NhbGxiYWNrID09IG11
dGF0b3IgPyB0aGlzIDogbmV3IGRvam8uRGVmZXJyZWQocHJvbWlzZS5jYW5jZWwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0geworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlZDogcmVzb2x2ZWRDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2dyZXNzOiBwcm9ncmVzc0NhbGxiYWNrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZDogcmV0dXJuRGVmZXJyZWQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBpZihuZXh0TGlzdGVuZXIpewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5uZXh0ID0gbGlzdGVu
ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGlzdGVuZXIgPSBoZWFk
ID0gbGlzdGVuZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZihmaW5pc2hlZCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
dGlmeSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldHVybkRlZmVycmVkLnByb21pc2U7CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICB2YXIgZGVmZXJyZWQgPSB0aGlzOworICAgICAgICAgICAgICAgIHRoaXMu
Y2FuY2VsID0gcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIENhbmNlbHMgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKCFmaW5pc2hlZCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBlcnJvciA9IGNhbmNlbGxlciAmJiBjYW5jZWxsZXIoZGVmZXJyZWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZighZmluaXNoZWQpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBF
cnJvcihlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmxvZyA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVj
dChlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGZyZWV6
ZShwcm9taXNlKTsKKyAgICAgICAgfTsKKyAgICAgICAgZG9qby5leHRlbmQoZG9qby5EZWZlcnJl
ZCwgeworICAgICAgICAgICAgICAgIGFkZENhbGxiYWNrOiBmdW5jdGlvbiAoLypGdW5jdGlvbiov
Y2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZENhbGxi
YWNrcyhkb2pvLmhpdGNoLmFwcGx5KGRvam8sIGFyZ3VtZW50cykpOworICAgICAgICAgICAgICAg
IH0sCisgICAgICAgIAorICAgICAgICAgICAgICAgIGFkZEVycmJhY2s6IGZ1bmN0aW9uICgvKkZ1
bmN0aW9uKi9lcnJiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5h
ZGRDYWxsYmFja3MobnVsbCwgZG9qby5oaXRjaC5hcHBseShkb2pvLCBhcmd1bWVudHMpKTsKKyAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAKKyAgICAgICAgICAgICAgICBhZGRCb3RoOiBmdW5j
dGlvbiAoLypGdW5jdGlvbiovY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBlbmNsb3NlZCA9IGRvam8uaGl0Y2guYXBwbHkoZG9qbywgYXJndW1lbnRzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZENhbGxiYWNrcyhlbmNsb3NlZCwgZW5jbG9z
ZWQpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgZmlyZWQ6IC0xCisgICAg
ICAgIH0pOworfSkoKTsKK2Rvam8ud2hlbiA9IGZ1bmN0aW9uKHByb21pc2VPclZhbHVlLCAvKkZ1
bmN0aW9uPyovY2FsbGJhY2ssIC8qRnVuY3Rpb24/Ki9lcnJiYWNrLCAvKkZ1bmN0aW9uPyovcHJv
Z3Jlc3NIYW5kbGVyKXsKKyAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgLy8gICAgICAgICAg
ICAgIFRoaXMgcHJvdmlkZXMgbm9ybWFsaXphdGlvbiBiZXR3ZWVuIG5vcm1hbCBzeW5jaHJvbm91
cyB2YWx1ZXMgYW5kCisgICAgICAgIC8vICAgICAgICAgICAgICBhc3luY2hyb25vdXMgcHJvbWlz
ZXMsIHNvIHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGVtIGluIGEgY29tbW9uIHdheQorICAgICAg
ICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIGZ1bmN0
aW9uIHByaW50Rmlyc3RBbmRMaXN0KGl0ZW1zKXsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICBkb2pvLndoZW4oZmluZEZpcnN0KGl0ZW1zKSwgY29uc29sZS5sb2cpOwor
ICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIGRvam8ud2hlbihmaW5kTGFz
dChpdGVtcyksIGNvbnNvbGUubG9nKTsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAg
fQorICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBmdW5jdGlvbiBmaW5kRmlyc3QoaXRl
bXMpeworICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHJldHVybiBkb2pv
LndoZW4oaXRlbXMsIGZ1bmN0aW9uKGl0ZW1zKXsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtc1swXTsKKyAgICAgICAgLy8gICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAg
ICAgfQorICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBmdW5jdGlvbiBmaW5kTGFzdChp
dGVtcyl7CisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgcmV0dXJuIGRv
am8ud2hlbihpdGVtcywgZnVuY3Rpb24oaXRlbXMpeworICAgICAgICAvLyAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zW2l0ZW1zLmxlbmd0aF07CisgICAg
ICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgIH0KKyAgICAgICAgLy8gICAgICAgICAgICAgIEFuZCBub3cgYWxsIHRo
cmVlIG9mIGhpcyBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgc3luYyBvciBhc3luYy4KKyAgICAgICAg
Ly8gICAgICAgICAgICAgIHwgICAgICAgcHJpbnRGaXJzdEFuZExhc3QoWzEsMiwzLDRdKSB3aWxs
IHdvcmsganVzdCBhcyB3ZWxsIGFzCisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIHBy
aW50Rmlyc3RBbmRMYXN0KGRvam8ueGhyR2V0KC4uLikpOworICAgICAgICAKKyAgICAgICAgaWYo
cHJvbWlzZU9yVmFsdWUgJiYgdHlwZW9mIHByb21pc2VPclZhbHVlLnRoZW4gPT09ICJmdW5jdGlv
biIpeworICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlT3JWYWx1ZS50aGVuKGNhbGxiYWNr
LCBlcnJiYWNrLCBwcm9ncmVzc0hhbmRsZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBj
YWxsYmFjayhwcm9taXNlT3JWYWx1ZSk7Cit9OworCit9CisKK2lmKCFkb2pvLl9oYXNSZXNvdXJj
ZVsiZG9qby5fYmFzZS5qc29uIl0peyAvL19oYXNSZXNvdXJjZSBjaGVja3MgYWRkZWQgYnkgYnVp
bGQuIERvIG5vdCB1c2UgX2hhc1Jlc291cmNlIGRpcmVjdGx5IGluIHlvdXIgY29kZS4KK2Rvam8u
X2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmpzb24iXSA9IHRydWU7Citkb2pvLnByb3ZpZGUoImRv
am8uX2Jhc2UuanNvbiIpOworCisKK2Rvam8uZnJvbUpzb24gPSBmdW5jdGlvbigvKlN0cmluZyov
IGpzb24peworICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAvLyAgICAgICAgICAgICAgUGFy
c2VzIGEgW0pTT05dKGh0dHA6Ly9qc29uLm9yZykgc3RyaW5nIHRvIHJldHVybiBhIEphdmFTY3Jp
cHQgb2JqZWN0LgorICAgICAgICAvLyBkZXNjcmlwdGlvbjoKKyAgICAgICAgLy8gICAgICAgICAg
ICAgIFRocm93cyBmb3IgaW52YWxpZCBKU09OIHN0cmluZ3MsIGJ1dCBpdCBkb2VzIG5vdCB1c2Ug
YSBzdHJpY3QgSlNPTiBwYXJzZXIuIEl0CisgICAgICAgIC8vICAgICAgICAgICAgICBkZWxlZ2F0
ZXMgdG8gZXZhbCgpLiAgVGhlIGNvbnRlbnQgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIG11c3QgdGhl
cmVmb3JlIGNvbWUKKyAgICAgICAgLy8gICAgICAgICAgICAgIGZyb20gYSB0cnVzdGVkIHNvdXJj
ZS4KKyAgICAgICAgLy8ganNvbjoKKyAgICAgICAgLy8gICAgICAgICAgICAgIGEgc3RyaW5nIGxp
dGVyYWwgb2YgYSBKU09OIGl0ZW0sIGZvciBpbnN0YW5jZToKKyAgICAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgYCd7ICJmb28iOiBbICJiYXIiLCAxLCB7ICJiYXoiOiAidGh1ZCIgfSBdIH0n
YAorCisgICAgICAgIHJldHVybiBldmFsKCIoIiArIGpzb24gKyAiKSIpOyAvLyBPYmplY3QKK307
CisKK2Rvam8uX2VzY2FwZVN0cmluZyA9IGZ1bmN0aW9uKC8qU3RyaW5nKi9zdHIpeworICAgICAg
ICAvL3N1bW1hcnk6CisgICAgICAgIC8vICAgICAgICAgICAgICBBZGRzIGVzY2FwZSBzZXF1ZW5j
ZXMgZm9yIG5vbi12aXN1YWwgY2hhcmFjdGVycywgZG91YmxlIHF1b3RlIGFuZAorICAgICAgICAv
LyAgICAgICAgICAgICAgYmFja3NsYXNoIGFuZCBzdXJyb3VuZHMgd2l0aCBkb3VibGUgcXVvdGVz
IHRvIGZvcm0gYSB2YWxpZCBzdHJpbmcKKyAgICAgICAgLy8gICAgICAgICAgICAgIGxpdGVyYWwu
CisgICAgICAgIHJldHVybiAoJyInICsgc3RyLnJlcGxhY2UoLyhbIlxcXSkvZywgJ1xcJDEnKSAr
ICciJykuCisgICAgICAgICAgICAgICAgcmVwbGFjZSgvW1xmXS9nLCAiXFxmIikucmVwbGFjZSgv
W1xiXS9nLCAiXFxiIikucmVwbGFjZSgvW1xuXS9nLCAiXFxuIikuCisgICAgICAgICAgICAgICAg
cmVwbGFjZSgvW1x0XS9nLCAiXFx0IikucmVwbGFjZSgvW1xyXS9nLCAiXFxyIik7IC8vIHN0cmlu
ZworfTsKKworZG9qby50b0pzb25JbmRlbnRTdHIgPSAiXHQiOworZG9qby50b0pzb24gPSBmdW5j
dGlvbigvKk9iamVjdCovIGl0LCAvKkJvb2xlYW4/Ki8gcHJldHR5UHJpbnQsIC8qU3RyaW5nPyov
IF9pbmRlbnRTdHIpeworICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgIC8vICAgICAg
ICAgICAgICBSZXR1cm5zIGEgW0pTT05dKGh0dHA6Ly9qc29uLm9yZykgc2VyaWFsaXphdGlvbiBv
ZiBhbiBvYmplY3QuCisgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246CisgICAgICAgIC8vICAg
ICAgICAgICAgICBSZXR1cm5zIGEgW0pTT05dKGh0dHA6Ly9qc29uLm9yZykgc2VyaWFsaXphdGlv
biBvZiBhbiBvYmplY3QuCisgICAgICAgIC8vICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBk
b2Vzbid0IGNoZWNrIGZvciBpbmZpbml0ZSByZWN1cnNpb24sIHNvIGRvbid0IGRvIHRoYXQhCisg
ICAgICAgIC8vICAgICAgaXQ6CisgICAgICAgIC8vICAgICAgICAgICAgICBhbiBvYmplY3QgdG8g
YmUgc2VyaWFsaXplZC4gT2JqZWN0cyBtYXkgZGVmaW5lIHRoZWlyIG93bgorICAgICAgICAvLyAg
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbiB2aWEgYSBzcGVjaWFsICJfX2pzb25fXyIgb3IgImpz
b24iIGZ1bmN0aW9uCisgICAgICAgIC8vICAgICAgICAgICAgICBwcm9wZXJ0eS4gSWYgYSBzcGVj
aWFsaXplZCBzZXJpYWxpemVyIGhhcyBiZWVuIGRlZmluZWQsIGl0IHdpbGwKKyAgICAgICAgLy8g
ICAgICAgICAgICAgIGJlIHVzZWQgYXMgYSBmYWxsYmFjay4KKyAgICAgICAgLy8gICAgICBwcmV0
dHlQcmludDoKKyAgICAgICAgLy8gICAgICAgICAgICAgIGlmIHRydWUsIHdlIGluZGVudCBvYmpl
Y3RzIGFuZCBhcnJheXMgdG8gbWFrZSB0aGUgb3V0cHV0IHByZXR0aWVyLgorICAgICAgICAvLyAg
ICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGBkb2pvLnRvSnNvbkluZGVudFN0cmAgaXMgdXNlZCBh
cyB0aGUgaW5kZW50IHN0cmluZyAtLQorICAgICAgICAvLyAgICAgICAgICAgICAgdG8gdXNlIHNv
bWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0ICh0YWIpLCBjaGFuZ2UgdGhhdCB2YXJpYWJs
ZQorICAgICAgICAvLyAgICAgICAgICAgICAgYmVmb3JlIGNhbGxpbmcgZG9qby50b0pzb24oKS4K
KyAgICAgICAgLy8gICAgICBfaW5kZW50U3RyOgorICAgICAgICAvLyAgICAgICAgICAgICAgcHJp
dmF0ZSB2YXJpYWJsZSBmb3IgcmVjdXJzaXZlIGNhbGxzIHdoZW4gcHJldHR5IHByaW50aW5nLCBk
byBub3QgdXNlLgorICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgIC8vICAgICAgICAg
ICAgICBzaW1wbGUgc2VyaWFsaXphdGlvbiBvZiBhIHRyaXZpYWwgb2JqZWN0CisgICAgICAgIC8v
ICAgICAgICAgICAgICB8ICAgICAgIHZhciBqc29uU3RyID0gZG9qby50b0pzb24oeyBob3dkeTog
InN0cmFuZ2VyISIsIGlzU3RyYW5nZTogdHJ1ZSB9KTsKKyAgICAgICAgLy8gICAgICAgICAgICAg
IHwgICAgICAgZG9oLmlzKCd7Imhvd2R5Ijoic3RyYW5nZXIhIiwiaXNTdHJhbmdlIjp0cnVlfScs
IGpzb25TdHIpOworICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgIC8vICAgICAgICAg
ICAgICBhIGN1c3RvbSBzZXJpYWxpemVyIGZvciBhbiBvYmplY3RzIG9mIGEgcGFydGljdWxhciBj
bGFzczoKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgZG9qby5kZWNsYXJlKCJGdXJi
eSIsIG51bGwsIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBmdXJi
aWVzOiAiYXJlIHN0cmFuZ2UiLAorICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgIGZ1cmJ5Q291bnQ6IDEwLAorICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgIF9fanNvbl9fOiBmdW5jdGlvbigpeworICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgIH0sCisgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIH0pOworCisgICAg
ICAgIGlmKGl0ID09PSB1bmRlZmluZWQpeworICAgICAgICAgICAgICAgIHJldHVybiAidW5kZWZp
bmVkIjsKKyAgICAgICAgfQorICAgICAgICB2YXIgb2JqdHlwZSA9IHR5cGVvZiBpdDsKKyAgICAg
ICAgaWYob2JqdHlwZSA9PSAibnVtYmVyIiB8fCBvYmp0eXBlID09ICJib29sZWFuIil7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGl0ICsgIiI7CisgICAgICAgIH0KKyAgICAgICAgaWYoaXQgPT09
IG51bGwpeworICAgICAgICAgICAgICAgIHJldHVybiAibnVsbCI7CisgICAgICAgIH0KKyAgICAg
ICAgaWYoZG9qby5pc1N0cmluZyhpdCkpeworICAgICAgICAgICAgICAgIHJldHVybiBkb2pvLl9l
c2NhcGVTdHJpbmcoaXQpOworICAgICAgICB9CisgICAgICAgIC8vIHJlY3Vyc2UKKyAgICAgICAg
dmFyIHJlY3Vyc2UgPSBhcmd1bWVudHMuY2FsbGVlOworICAgICAgICAvLyBzaG9ydC1jaXJjdWl0
IGZvciBvYmplY3RzIHRoYXQgc3VwcG9ydCAianNvbiIgc2VyaWFsaXphdGlvbgorICAgICAgICAv
LyBpZiB0aGV5IHJldHVybiAic2VsZiIgdGhlbiBqdXN0IHBhc3MtdGhyb3VnaC4uLgorICAgICAg
ICB2YXIgbmV3T2JqOworICAgICAgICBfaW5kZW50U3RyID0gX2luZGVudFN0ciB8fCAiIjsKKyAg
ICAgICAgdmFyIG5leHRJbmRlbnQgPSBwcmV0dHlQcmludCA/IF9pbmRlbnRTdHIgKyBkb2pvLnRv
SnNvbkluZGVudFN0ciA6ICIiOworICAgICAgICB2YXIgdGYgPSBpdC5fX2pzb25fX3x8aXQuanNv
bjsKKyAgICAgICAgaWYoZG9qby5pc0Z1bmN0aW9uKHRmKSl7CisgICAgICAgICAgICAgICAgbmV3
T2JqID0gdGYuY2FsbChpdCk7CisgICAgICAgICAgICAgICAgaWYoaXQgIT09IG5ld09iail7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVjdXJzZShuZXdPYmosIHByZXR0eVByaW50
LCBuZXh0SW5kZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYo
aXQubm9kZVR5cGUgJiYgaXQuY2xvbmVOb2RlKXsgLy8gaXNOb2RlCisgICAgICAgICAgICAgICAg
Ly8gd2UgY2FuJ3Qgc2VyaWFpbGl6ZSBET00gbm9kZXMgYXMgcmVndWxhciBvYmplY3RzIGJlY2F1
c2UgdGhleSBoYXZlIGN5Y2xlcworICAgICAgICAgICAgICAgIC8vIERPTSBub2RlcyBjb3VsZCBi
ZSBzZXJpYWxpemVkIHdpdGggc29tZXRoaW5nIGxpa2Ugb3V0ZXJIVE1MLCBidXQKKyAgICAgICAg
ICAgICAgICAvLyB0aGF0IGNhbiBiZSBwcm92aWRlZCBieSB1c2VycyBpbiB0aGUgZm9ybSBvZiAu
anNvbiBvciAuX19qc29uX18gZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJDYW4ndCBzZXJpYWxpemUgRE9NIG5vZGVzIik7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgc2VwID0gcHJldHR5UHJpbnQgPyAiICIgOiAiIjsKKyAgICAgICAgdmFyIG5ld0xpbmUgPSBw
cmV0dHlQcmludCA/ICJcbiIgOiAiIjsKKworICAgICAgICAvLyBhcnJheQorICAgICAgICBpZihk
b2pvLmlzQXJyYXkoaXQpKXsKKyAgICAgICAgICAgICAgICB2YXIgcmVzID0gZG9qby5tYXAoaXQs
IGZ1bmN0aW9uKG9iail7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gcmVjdXJz
ZShvYmosIHByZXR0eVByaW50LCBuZXh0SW5kZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmKHR5cGVvZiB2YWwgIT0gInN0cmluZyIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWwgPSAidW5kZWZpbmVkIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdMaW5lICsgbmV4dEluZGVudCArIHZhbDsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIlsiICsgcmVzLmpvaW4o
IiwiICsgc2VwKSArIG5ld0xpbmUgKyBfaW5kZW50U3RyICsgIl0iOworICAgICAgICB9CisgICAg
ICAgIC8qCisgICAgICAgIC8vIGxvb2sgaW4gdGhlIHJlZ2lzdHJ5CisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgd2luZG93Lm8gPSBpdDsKKyAgICAgICAgICAgICAgICBuZXdPYmogPSBk
b2pvLmpzb24uanNvblJlZ2lzdHJ5Lm1hdGNoKGl0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVjdXJzZShuZXdPYmosIHByZXR0eVByaW50LCBuZXh0SW5kZW50KTsKKyAgICAgICAgfWNhdGNo
KGUpeworICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUpOworICAgICAgICB9CisgICAg
ICAgIC8vIGl0J3MgYSBmdW5jdGlvbiB3aXRoIG5vIGFkYXB0ZXIsIHNraXAgaXQKKyAgICAgICAg
Ki8KKyAgICAgICAgaWYob2JqdHlwZSA9PSAiZnVuY3Rpb24iKXsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsgLy8gbnVsbAorICAgICAgICB9CisgICAgICAgIC8vIGdlbmVyaWMgb2JqZWN0
IGNvZGUgcGF0aAorICAgICAgICB2YXIgb3V0cHV0ID0gW10sIGtleTsKKyAgICAgICAgZm9yKGtl
eSBpbiBpdCl7CisgICAgICAgICAgICAgICAgdmFyIGtleVN0ciwgdmFsOworICAgICAgICAgICAg
ICAgIGlmKHR5cGVvZiBrZXkgPT0gIm51bWJlciIpeworICAgICAgICAgICAgICAgICAgICAgICAg
a2V5U3RyID0gJyInICsga2V5ICsgJyInOworICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVv
ZiBrZXkgPT0gInN0cmluZyIpeworICAgICAgICAgICAgICAgICAgICAgICAga2V5U3RyID0gZG9q
by5fZXNjYXBlU3RyaW5nKGtleSk7CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBza2lwIG5vbi1zdHJpbmcgb3IgbnVtYmVyIGtleXMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB2YWwgPSByZWN1cnNlKGl0W2tleV0sIHByZXR0eVByaW50LCBuZXh0SW5kZW50KTsKKyAg
ICAgICAgICAgICAgICBpZih0eXBlb2YgdmFsICE9ICJzdHJpbmciKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHNraXAgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogdXNlICs9IG9uIE1veiEhCisgICAgICAgICAgICAgICAgLy8gICAgICAgTU9XIE5P
VEU6IHVzaW5nICs9IGlzIGEgcGFpbiBiZWNhdXNlIHlvdSBoYXZlIHRvIGFjY291bnQgZm9yIHRo
ZSBkYW5nbGluZyBjb21tYS4uLgorICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKG5ld0xpbmUg
KyBuZXh0SW5kZW50ICsga2V5U3RyICsgIjoiICsgc2VwICsgdmFsKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gInsiICsgb3V0cHV0LmpvaW4oIiwiICsgc2VwKSArIG5ld0xpbmUgKyBfaW5k
ZW50U3RyICsgIn0iOyAvLyBTdHJpbmcKK307CisKK30KKworaWYoIWRvam8uX2hhc1Jlc291cmNl
WyJkb2pvLl9iYXNlLkNvbG9yIl0peyAvL19oYXNSZXNvdXJjZSBjaGVja3MgYWRkZWQgYnkgYnVp
bGQuIERvIG5vdCB1c2UgX2hhc1Jlc291cmNlIGRpcmVjdGx5IGluIHlvdXIgY29kZS4KK2Rvam8u
X2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLkNvbG9yIl0gPSB0cnVlOworZG9qby5wcm92aWRlKCJk
b2pvLl9iYXNlLkNvbG9yIik7CisKKworCisKKyhmdW5jdGlvbigpeworCisgICAgICAgIHZhciBk
ID0gZG9qbzsKKworICAgICAgICBkb2pvLkNvbG9yID0gZnVuY3Rpb24oLypBcnJheXxTdHJpbmd8
T2JqZWN0Ki8gY29sb3IpeworICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIFRha2VzIGEgbmFtZWQgc3RyaW5nLCBoZXggc3RyaW5nLCBh
cnJheSBvZiByZ2Igb3IgcmdiYSB2YWx1ZXMsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIGFuIG9iamVjdCB3aXRoIHIsIGcsIGIsIGFuZCBhIHByb3BlcnRpZXMsIG9yIGFub3RoZXIg
YGRvam8uQ29sb3JgIG9iamVjdAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbmQg
Y3JlYXRlcyBhIG5ldyBDb2xvciBpbnN0YW5jZSB0byB3b3JrIGZyb20uCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBXb3JrIHdpdGggYSBDb2xvciBpbnN0YW5jZToKKyAgICAgICAgICAgICAgICAv
LyAgICAgICB8IHZhciBjID0gbmV3IGRvam8uQ29sb3IoKTsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICB8IGMuc2V0Q29sb3IoWzAsMCwwXSk7IC8vIGJsYWNrCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgfCB2YXIgaGV4ID0gYy50b0hleCgpOyAvLyAjMDAwMDAwCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBXb3JrIHdpdGggYSBub2RlJ3MgY29sb3I6CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgfCB2YXIgY29sb3IgPSBkb2pvLnN0eWxlKCJzb21lTm9kZSIsICJiYWNrZ3JvdW5kQ29sb3Ii
KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICB8IHZhciBuID0gbmV3IGRvam8uQ29sb3IoY29s
b3IpOworICAgICAgICAgICAgICAgIC8vICAgICAgIHwgLy8gYWRqdXN0IHRoZSBjb2xvciBzb21l
CisgICAgICAgICAgICAgICAgLy8gICAgICAgfCBuLnIgKj0gLjU7CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgfCBjb25zb2xlLmxvZyhuLnRvU3RyaW5nKCkpOyAvLyByZ2IoMTI4LCAyNTUsIDI1
NSk7CisgICAgICAgICAgICAgICAgaWYoY29sb3IpeyB0aGlzLnNldENvbG9yKGNvbG9yKTsgfQor
ICAgICAgICB9OworCisgICAgICAgIC8vIEZJWE1FOgorICAgICAgICAvLyAgICAgIHRoZXJlJ3Mg
Z290IHRvIGJlIGEgbW9yZSBzcGFjZS1lZmZpY2llbnQgd2F5IHRvIGVuY29kZSBvciBkaXNjb3Zl
cgorICAgICAgICAvLyAgICAgIHRoZXNlISEgIFVzZSBoZXg/CisgICAgICAgIGRvam8uQ29sb3Iu
bmFtZWQgPSB7CisgICAgICAgICAgICAgICAgYmxhY2s6ICAgICAgWzAsMCwwXSwKKyAgICAgICAg
ICAgICAgICBzaWx2ZXI6ICAgICBbMTkyLDE5MiwxOTJdLAorICAgICAgICAgICAgICAgIGdyYXk6
ICAgICAgIFsxMjgsMTI4LDEyOF0sCisgICAgICAgICAgICAgICAgd2hpdGU6ICAgICAgWzI1NSwy
NTUsMjU1XSwKKyAgICAgICAgICAgICAgICBtYXJvb246ICAgICAgICAgWzEyOCwwLDBdLAorICAg
ICAgICAgICAgICAgIHJlZDogICAgICAgIFsyNTUsMCwwXSwKKyAgICAgICAgICAgICAgICBwdXJw
bGU6ICAgICAgICAgWzEyOCwwLDEyOF0sCisgICAgICAgICAgICAgICAgZnVjaHNpYTogICAgICAg
IFsyNTUsMCwyNTVdLAorICAgICAgICAgICAgICAgIGdyZWVuOiAgICAgIFswLDEyOCwwXSwKKyAg
ICAgICAgICAgICAgICBsaW1lOiAgICAgICBbMCwyNTUsMF0sCisgICAgICAgICAgICAgICAgb2xp
dmU6ICAgICAgICAgIFsxMjgsMTI4LDBdLAorICAgICAgICAgICAgICAgIHllbGxvdzogICAgICAg
ICBbMjU1LDI1NSwwXSwKKyAgICAgICAgICAgICAgICBuYXZ5OiAgICAgICBbMCwwLDEyOF0sCisg
ICAgICAgICAgICAgICAgYmx1ZTogICAgICAgWzAsMCwyNTVdLAorICAgICAgICAgICAgICAgIHRl
YWw6ICAgICAgICAgICBbMCwxMjgsMTI4XSwKKyAgICAgICAgICAgICAgICBhcXVhOiAgICAgICAg
ICAgWzAsMjU1LDI1NV0sCisgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IGQuY29uZmlnLnRy
YW5zcGFyZW50Q29sb3IgfHwgWzI1NSwyNTUsMjU1XQorICAgICAgICB9OworCisgICAgICAgIGRv
am8uZXh0ZW5kKGRvam8uQ29sb3IsIHsKKyAgICAgICAgICAgICAgICByOiAyNTUsIGc6IDI1NSwg
YjogMjU1LCBhOiAxLAorICAgICAgICAgICAgICAgIF9zZXQ6IGZ1bmN0aW9uKHIsIGcsIGIsIGEp
eworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzOyB0LnIgPSByOyB0LmcgPSBn
OyB0LmIgPSBiOyB0LmEgPSBhOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
c2V0Q29sb3I6IGZ1bmN0aW9uKC8qQXJyYXl8U3RyaW5nfE9iamVjdCovIGNvbG9yKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgVGFrZXMgYSBuYW1lZCBzdHJpbmcsIGhleCBzdHJpbmcsIGFycmF5IG9m
IHJnYiBvciByZ2JhIHZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBhbiBvYmplY3Qgd2l0aCByLCBnLCBiLCBhbmQgYSBwcm9wZXJ0aWVzLCBvciBhbm90aGVy
IGBkb2pvLkNvbG9yYCBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBhbmQgc2V0cyB0aGlzIGNvbG9yIGluc3RhbmNlIHRvIHRoYXQgdmFsdWUuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgYyA9IG5ldyBkb2pv
LkNvbG9yKCk7IC8vIG5vIGNvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgYy5zZXRDb2xvcigiI2VkZWRlZCIpOyAvLyBncmV5aXNoCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZihkLmlzU3RyaW5nKGNvbG9yKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGQuY29sb3JGcm9tU3RyaW5nKGNvbG9yLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH1lbHNlIGlmKGQuaXNBcnJheShjb2xvcikpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkLmNvbG9yRnJvbUFycmF5KGNvbG9yLCB0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9z
ZXQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKCEoY29sb3IgaW5zdGFuY2VvZiBkLkNvbG9yKSl7IHRoaXMuc2Fu
aXRpemUoKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7ICAgIC8vIGRvam8uQ29sb3IKKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIHNhbml0aXplOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBFbnN1cmVzIHRoZSBvYmplY3QgaGFzIGNvcnJlY3QgYXR0cmlidXRlcworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLCBpbmNs
dWRlIGRvam8uY29sb3JzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgYXVnbWVudCBpdCB3aXRoIHJlYWwgY2hlY2tzCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsgICAgLy8gZG9qby5Db2xvcgorICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgdG9SZ2I6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
dW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMg
MyBjb21wb25lbnQgYXJyYXkgb2YgcmdiIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIg
YyA9IG5ldyBkb2pvLkNvbG9yKCIjMDAwMDAwIik7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgIHwgICAgICAgY29uc29sZS5sb2coYy50b1JnYigpKTsgLy8gWzAsMCwwXQorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFt0LnIsIHQuZywgdC5iXTsgLy8gQXJyYXkKKyAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgIHRvUmdiYTogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmV0
dXJucyBhIDQgY29tcG9uZW50IGFycmF5IG9mIHJnYmEgdmFsdWVzIGZyb20gdGhlIGNvbG9yCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcmVwcmVzZW50ZWQgYnkgdGhp
cyBvYmplY3QuCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRoaXM7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gW3QuciwgdC5nLCB0LmIsIHQuYV07ICAgIC8vIEFycmF5
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB0b0hleDogZnVuY3Rpb24oKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgUmV0dXJucyBhIENTUyBjb2xvciBzdHJpbmcgaW4gaGV4YWRl
Y2ltYWwgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgY29uc29sZS5sb2cobmV3
IGRvam8uQ29sb3IoWzAsMCwwXSkudG9IZXgoKSk7IC8vICMwMDAwMDAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBhcnIgPSBkLm1hcChbInIiLCAiZyIsICJiIl0sIGZ1bmN0aW9uKHgpewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHRoaXNbeF0udG9TdHJpbmco
MTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5sZW5ndGggPCAy
ID8gIjAiICsgcyA6IHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiIyIgKyBhcnIuam9pbigiIik7ICAgICAgLy8gU3Ry
aW5nCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB0b0NzczogZnVuY3Rpb24o
LypCb29sZWFuPyovIGluY2x1ZGVBbHBoYSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
dW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMg
YSBjc3MgY29sb3Igc3RyaW5nIGluIHJnYihhKSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICB2YXIgYyA9IG5ldyBkb2pvLkNvbG9yKCIjRkZGIikudG9Dc3MoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBjb25zb2xlLmxvZyhjKTsgLy8gcmdiKCcy
NTUnLCcyNTUnLCcyNTUnKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLCBy
Z2IgPSB0LnIgKyAiLCAiICsgdC5nICsgIiwgIiArIHQuYjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoaW5jbHVkZUFscGhhID8gInJnYmEoIiArIHJnYiArICIsICIgKyB0LmEgOiAi
cmdiKCIgKyByZ2IpICsgIikiOyAgICAgICAgLy8gU3RyaW5nCisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgUmV0dXJucyBhIHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29sb3IKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQ3NzKHRydWUpOyAvLyBTdHJpbmcKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGRvam8uYmxlbmRDb2xvcnMgPSBm
dW5jdGlvbigKKyAgICAgICAgICAgICAgICAvKmRvam8uQ29sb3IqLyBzdGFydCwKKyAgICAgICAg
ICAgICAgICAvKmRvam8uQ29sb3IqLyBlbmQsCisgICAgICAgICAgICAgICAgLypOdW1iZXIqLyB3
ZWlnaHQsCisgICAgICAgICAgICAgICAgLypkb2pvLkNvbG9yPyovIG9iagorICAgICAgICApewor
ICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIEJsZW5kIGNvbG9ycyBlbmQgYW5kIHN0YXJ0IHdpdGggd2VpZ2h0IGZyb20gMCB0byAxLCAw
LjUgYmVpbmcgYSA1MC81MCBibGVuZCwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
Y2FuIHJldXNlIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgZG9qby5Db2xvciBvYmplY3QgZm9yIHRo
ZSByZXN1bHQKKyAgICAgICAgICAgICAgICB2YXIgdCA9IG9iaiB8fCBuZXcgZC5Db2xvcigpOwor
ICAgICAgICAgICAgICAgIGQuZm9yRWFjaChbInIiLCAiZyIsICJiIiwgImEiXSwgZnVuY3Rpb24o
eCl7CisgICAgICAgICAgICAgICAgICAgICAgICB0W3hdID0gc3RhcnRbeF0gKyAoZW5kW3hdIC0g
c3RhcnRbeF0pICogd2VpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoeCAhPSAiYSIp
eyB0W3hdID0gTWF0aC5yb3VuZCh0W3hdKTsgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHJldHVybiB0LnNhbml0aXplKCk7ICAgIC8vIGRvam8uQ29sb3IKKyAgICAgICAg
fTsKKworICAgICAgICBkb2pvLmNvbG9yRnJvbVJnYiA9IGZ1bmN0aW9uKC8qU3RyaW5nKi8gY29s
b3IsIC8qZG9qby5Db2xvcj8qLyBvYmopeworICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMgYSBgZG9qby5Db2xvcmAgaW5z
dGFuY2UgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybQorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICAicmdiKC4uLikiIG9yICJyZ2JhKC4uLikiLiBPcHRpb25hbGx5IGFjY2VwdHMgYSBg
ZG9qby5Db2xvcmAKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb2JqZWN0IHRvIHVw
ZGF0ZSB3aXRoIHRoZSBwYXJzZWQgdmFsdWUgYW5kIHJldHVybiBpbnN0ZWFkIG9mCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGNyZWF0aW5nIGEgbmV3IG9iamVjdC4KKyAgICAgICAg
ICAgICAgICAvLyByZXR1cm5zOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBIGRv
am8uQ29sb3Igb2JqZWN0LiBJZiBvYmogaXMgcGFzc2VkLCBpdCB3aWxsIGJlIHRoZSByZXR1cm4g
dmFsdWUuCisgICAgICAgICAgICAgICAgdmFyIG0gPSBjb2xvci50b0xvd2VyQ2FzZSgpLm1hdGNo
KC9ecmdiYT9cKChbXHNcLiwwLTldKylcKS8pOworICAgICAgICAgICAgICAgIHJldHVybiBtICYm
IGRvam8uY29sb3JGcm9tQXJyYXkobVsxXS5zcGxpdCgvXHMqLFxzKi8pLCBvYmopOyAgICAvLyBk
b2pvLkNvbG9yCisgICAgICAgIH07CisKKyAgICAgICAgZG9qby5jb2xvckZyb21IZXggPSBmdW5j
dGlvbigvKlN0cmluZyovIGNvbG9yLCAvKmRvam8uQ29sb3I/Ki8gb2JqKXsKKyAgICAgICAgICAg
ICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBDb252ZXJ0
cyBhIGhleCBzdHJpbmcgd2l0aCBhICcjJyBwcmVmaXggdG8gYSBjb2xvciBvYmplY3QuCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFN1cHBvcnRzIDEyLWJpdCAjcmdiIHNob3J0aGFu
ZC4gT3B0aW9uYWxseSBhY2NlcHRzIGEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
YGRvam8uQ29sb3JgIG9iamVjdCB0byB1cGRhdGUgd2l0aCB0aGUgcGFyc2VkIHZhbHVlLgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gcmV0dXJuczoKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgQSBkb2pvLkNvbG9yIG9iamVjdC4gSWYgb2JqIGlzIHBhc3Nl
ZCwgaXQgd2lsbCBiZSB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICB8IHZhciB0
aGluZyA9IGRvam8uY29sb3JGcm9tSGV4KCIjZWRlZGVkIik7IC8vIGdyZXksIGxvbmdoYW5kCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAg
ICAgICAgIC8vICAgICAgfCB2YXIgdGhpbmcgPSBkb2pvLmNvbG9yRnJvbUhleCgiIzAwMCIpOyAv
LyBibGFjaywgc2hvcnRoYW5kCisgICAgICAgICAgICAgICAgdmFyIHQgPSBvYmogfHwgbmV3IGQu
Q29sb3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgPSAoY29sb3IubGVuZ3RoID09
IDQpID8gNCA6IDgsCisgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gKDEgPDwgYml0cykg
LSAxOworICAgICAgICAgICAgICAgIGNvbG9yID0gTnVtYmVyKCIweCIgKyBjb2xvci5zdWJzdHIo
MSkpOworICAgICAgICAgICAgICAgIGlmKGlzTmFOKGNvbG9yKSl7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbDsgLy8gZG9qby5Db2xvcgorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBkLmZvckVhY2goWyJiIiwgImciLCAiciJdLCBmdW5jdGlvbih4KXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gY29sb3IgJiBtYXNrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY29sb3IgPj49IGJpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICB0W3hd
ID0gYml0cyA9PSA0ID8gMTcgKiBjIDogYzsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB0LmEgPSAxOworICAgICAgICAgICAgICAgIHJldHVybiB0OyAgICAgICAvLyBkb2pv
LkNvbG9yCisgICAgICAgIH07CisKKyAgICAgICAgZG9qby5jb2xvckZyb21BcnJheSA9IGZ1bmN0
aW9uKC8qQXJyYXkqLyBhLCAvKmRvam8uQ29sb3I/Ki8gb2JqKXsKKyAgICAgICAgICAgICAgICAv
LyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBCdWlsZHMgYSBgZG9q
by5Db2xvcmAgZnJvbSBhIDMgb3IgNCBlbGVtZW50IGFycmF5LCBtYXBwaW5nIGVhY2gKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgZWxlbWVudCBpbiBzZXF1ZW5jZSB0byB0aGUgcmdi
KGEpIHZhbHVlcyBvZiB0aGUgY29sb3IuCisgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCB2YXIgbXlDb2xvciA9IGRvam8uY29sb3JG
cm9tQXJyYXkoWzIzNywyMzcsMjM3LDAuNV0pOyAvLyBncmV5LCA1MCUgYWxwaGEKKyAgICAgICAg
ICAgICAgICAvLyByZXR1cm5zOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBIGRv
am8uQ29sb3Igb2JqZWN0LiBJZiBvYmogaXMgcGFzc2VkLCBpdCB3aWxsIGJlIHRoZSByZXR1cm4g
dmFsdWUuCisgICAgICAgICAgICAgICAgdmFyIHQgPSBvYmogfHwgbmV3IGQuQ29sb3IoKTsKKyAg
ICAgICAgICAgICAgICB0Ll9zZXQoTnVtYmVyKGFbMF0pLCBOdW1iZXIoYVsxXSksIE51bWJlcihh
WzJdKSwgTnVtYmVyKGFbM10pKTsKKyAgICAgICAgICAgICAgICBpZihpc05hTih0LmEpKXsgdC5h
ID0gMTsgfQorICAgICAgICAgICAgICAgIHJldHVybiB0LnNhbml0aXplKCk7ICAgIC8vIGRvam8u
Q29sb3IKKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLmNvbG9yRnJvbVN0cmluZyA9IGZ1bmN0
aW9uKC8qU3RyaW5nKi8gc3RyLCAvKmRvam8uQ29sb3I/Ki8gb2JqKXsKKyAgICAgICAgICAgICAg
ICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBQYXJzZXMgYHN0
cmAgZm9yIGEgY29sb3IgdmFsdWUuIEFjY2VwdHMgaGV4LCByZ2IsIGFuZCByZ2JhCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIHN0eWxlIGNvbG9yIHZhbHVlcy4KKyAgICAgICAgICAg
ICAgICAvLyBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQWNj
ZXB0YWJsZSBpbnB1dCB2YWx1ZXMgZm9yIHN0ciBtYXkgaW5jbHVkZSBhcnJheXMgb2YgYW55IGZv
cm0KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYWNjZXB0ZWQgYnkgZG9qby5jb2xv
ckZyb21BcnJheSwgaGV4IHN0cmluZ3Mgc3VjaCBhcyAiI2FhYWFhYSIsIG9yCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHJnYiBvciByZ2JhIHN0cmluZ3Mgc3VjaCBhcyAicmdiKDEz
MywgMjAwLCAxNikiIG9yICJyZ2JhKDEwLCAxMCwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgMTAsIDUwKSIKKyAgICAgICAgICAgICAgICAvLyByZXR1cm5zOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBBIGRvam8uQ29sb3Igb2JqZWN0LiBJZiBvYmogaXMgcGFzc2Vk
LCBpdCB3aWxsIGJlIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICAgICAgICAgICAgdmFyIGEgPSBk
LkNvbG9yLm5hbWVkW3N0cl07CisgICAgICAgICAgICAgICAgcmV0dXJuIGEgJiYgZC5jb2xvckZy
b21BcnJheShhLCBvYmopIHx8IGQuY29sb3JGcm9tUmdiKHN0ciwgb2JqKSB8fCBkLmNvbG9yRnJv
bUhleChzdHIsIG9iaik7CisgICAgICAgIH07Cit9KSgpOworCit9CisKK2lmKCFkb2pvLl9oYXNS
ZXNvdXJjZVsiZG9qby5fYmFzZS53aW5kb3ciXSl7IC8vX2hhc1Jlc291cmNlIGNoZWNrcyBhZGRl
ZCBieSBidWlsZC4gRG8gbm90IHVzZSBfaGFzUmVzb3VyY2UgZGlyZWN0bHkgaW4geW91ciBjb2Rl
LgorZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2Uud2luZG93Il0gPSB0cnVlOworZG9qby5w
cm92aWRlKCJkb2pvLl9iYXNlLndpbmRvdyIpOworCisKKy8qPT09PT0KK2Rvam8uZG9jID0gewor
ICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAvLyAgICAgICAgICAgICAgQWxpYXMgZm9yIHRo
ZSBjdXJyZW50IGRvY3VtZW50LiAnZG9qby5kb2MnIGNhbiBiZSBtb2RpZmllZAorICAgICAgICAv
LyAgICAgICAgICAgICAgZm9yIHRlbXBvcmFyeSBjb250ZXh0IHNoaWZ0aW5nLiBBbHNvIHNlZSBk
b2pvLndpdGhEb2MoKS4KKyAgICAgICAgLy8gZGVzY3JpcHRpb246CisgICAgICAgIC8vICAgIFJl
ZmVyIHRvIGRvam8uZG9jIHJhdGhlcgorICAgICAgICAvLyAgICB0aGFuIHJlZmVycmluZyB0byAn
d2luZG93LmRvY3VtZW50JyB0byBlbnN1cmUgeW91ciBjb2RlIHJ1bnMKKyAgICAgICAgLy8gICAg
Y29ycmVjdGx5IGluIG1hbmFnZWQgY29udGV4dHMuCisgICAgICAgIC8vIGV4YW1wbGU6CisgICAg
ICAgIC8vICAgICAgfCAgICAgICBuLmFwcGVuZENoaWxkKGRvam8uZG9jLmNyZWF0ZUVsZW1lbnQo
J2RpdicpKTsKK30KKz09PT09Ki8KK2Rvam8uZG9jID0gd2luZG93WyJkb2N1bWVudCJdIHx8IG51
bGw7CisKK2Rvam8uYm9keSA9IGZ1bmN0aW9uKCl7CisgICAgICAgIC8vIHN1bW1hcnk6CisgICAg
ICAgIC8vICAgICAgICAgICAgICBSZXR1cm4gdGhlIGJvZHkgZWxlbWVudCBvZiB0aGUgZG9jdW1l
bnQKKyAgICAgICAgLy8gICAgICAgICAgICAgIHJldHVybiB0aGUgYm9keSBvYmplY3QgYXNzb2Np
YXRlZCB3aXRoIGRvam8uZG9jCisgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgIC8vICAgICAg
fCAgICAgICBkb2pvLmJvZHkoKS5hcHBlbmRDaGlsZChkb2pvLmRvYy5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7CisKKyAgICAgICAgLy8gTm90ZTogZG9jdW1lbnQuYm9keSBpcyBub3QgZGVmaW5lZCBm
b3IgYSBzdHJpY3QgeGh0bWwgZG9jdW1lbnQKKyAgICAgICAgLy8gV291bGQgbGlrZSB0byBtZW1v
aXplIHRoaXMsIGJ1dCBkb2pvLmRvYyBjYW4gY2hhbmdlIHZpIGRvam8ud2l0aERvYygpLgorICAg
ICAgICByZXR1cm4gZG9qby5kb2MuYm9keSB8fCBkb2pvLmRvYy5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiYm9keSIpWzBdOyAvLyBOb2RlCit9OworCitkb2pvLnNldENvbnRleHQgPSBmdW5jdGlvbigv
Kk9iamVjdCovZ2xvYmFsT2JqZWN0LCAvKkRvY3VtZW50RWxlbWVudCovZ2xvYmFsRG9jdW1lbnQp
eworICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAvLyAgICAgICAgICAgICAgY2hhbmdlcyB0
aGUgYmVoYXZpb3Igb2YgbWFueSBjb3JlIERvam8gZnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoCisg
ICAgICAgIC8vICAgICAgICAgICAgICBuYW1lc3BhY2UgYW5kIERPTSBsb29rdXAsIGNoYW5naW5n
IHRoZW0gdG8gd29yayBpbiBhIG5ldyBnbG9iYWwKKyAgICAgICAgLy8gICAgICAgICAgICAgIGNv
bnRleHQgKGUuZy4sIGFuIGlmcmFtZSkuIFRoZSB2YXJpYmxlcyBkb2pvLmdsb2JhbCBhbmQgZG9q
by5kb2MKKyAgICAgICAgLy8gICAgICAgICAgICAgIGFyZSBtb2RpZmllZCBhcyBhIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSByZXN1bHQgb2YKKyAgICAgICAgLy8gICAg
ICAgICAgICAgIGBkb2pvLmJvZHkoKWAgbGlrZXdpc2UgZGlmZmVycy4KKyAgICAgICAgZG9qby5n
bG9iYWwgPSBnbG9iYWxPYmplY3Q7CisgICAgICAgIGRvam8uZG9jID0gZ2xvYmFsRG9jdW1lbnQ7
Cit9OworCitkb2pvLndpdGhHbG9iYWwgPSBmdW5jdGlvbiggICAgIC8qT2JqZWN0Ki9nbG9iYWxP
YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qRnVuY3Rpb24qL2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9iamVjdD8qL3RoaXNPYmplY3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qQXJy
YXk/Ki9jYkFyZ3VtZW50cyl7CisgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgIC8vICAgICAg
ICAgICAgICBJbnZva2UgY2FsbGJhY2sgd2l0aCBnbG9iYWxPYmplY3QgYXMgZG9qby5nbG9iYWwg
YW5kCisgICAgICAgIC8vICAgICAgICAgICAgICBnbG9iYWxPYmplY3QuZG9jdW1lbnQgYXMgZG9q
by5kb2MuCisgICAgICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAvLyAgICAgICAgICAgICAg
SW52b2tlIGNhbGxiYWNrIHdpdGggZ2xvYmFsT2JqZWN0IGFzIGRvam8uZ2xvYmFsIGFuZAorICAg
ICAgICAvLyAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LmRvY3VtZW50IGFzIGRvam8uZG9jLiBJ
ZiBwcm92aWRlZCwgZ2xvYmFsT2JqZWN0CisgICAgICAgIC8vICAgICAgICAgICAgICB3aWxsIGJl
IGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIG9iamVjdCB0aGlzT2JqZWN0CisgICAgICAgIC8v
ICAgICAgICAgICAgICBXaGVuIGNhbGxiYWNrKCkgcmV0dXJucyBvciB0aHJvd3MgYW4gZXJyb3Is
IHRoZSBkb2pvLmdsb2JhbAorICAgICAgICAvLyAgICAgICAgICAgICAgYW5kIGRvam8uZG9jIHdp
bGwgYmUgcmVzdG9yZWQgdG8gaXRzIHByZXZpb3VzIHN0YXRlLgorCisgICAgICAgIHZhciBvbGRH
bG9iID0gZG9qby5nbG9iYWw7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICBkb2pvLmds
b2JhbCA9IGdsb2JhbE9iamVjdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9qby53aXRoRG9j
LmNhbGwobnVsbCwgZ2xvYmFsT2JqZWN0LmRvY3VtZW50LCBjYWxsYmFjaywgdGhpc09iamVjdCwg
Y2JBcmd1bWVudHMpOworICAgICAgICB9ZmluYWxseXsKKyAgICAgICAgICAgICAgICBkb2pvLmds
b2JhbCA9IG9sZEdsb2I7CisgICAgICAgIH0KK307CisKK2Rvam8ud2l0aERvYyA9IGZ1bmN0aW9u
KCAgICAgICAgLypEb2N1bWVudEVsZW1lbnQqL2RvY3VtZW50T2JqZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKkZ1bmN0aW9uKi9j
YWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLypPYmplY3Q/Ki90aGlzT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKkFycmF5PyovY2JBcmd1bWVudHMpewor
ICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAvLyAgICAgICAgICAgICAgSW52b2tlIGNhbGxi
YWNrIHdpdGggZG9jdW1lbnRPYmplY3QgYXMgZG9qby5kb2MuCisgICAgICAgIC8vIGRlc2NyaXB0
aW9uOgorICAgICAgICAvLyAgICAgICAgICAgICAgSW52b2tlIGNhbGxiYWNrIHdpdGggZG9jdW1l
bnRPYmplY3QgYXMgZG9qby5kb2MuIElmIHByb3ZpZGVkLAorICAgICAgICAvLyAgICAgICAgICAg
ICAgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiBvYmplY3QgdGhp
c09iamVjdAorICAgICAgICAvLyAgICAgICAgICAgICAgV2hlbiBjYWxsYmFjaygpIHJldHVybnMg
b3IgdGhyb3dzIGFuIGVycm9yLCB0aGUgZG9qby5kb2Mgd2lsbAorICAgICAgICAvLyAgICAgICAg
ICAgICAgYmUgcmVzdG9yZWQgdG8gaXRzIHByZXZpb3VzIHN0YXRlLgorCisgICAgICAgIHZhciBv
bGREb2MgPSBkb2pvLmRvYywKKyAgICAgICAgICAgICAgICBvbGRMdHIgPSBkb2pvLl9ib2R5THRy
LAorICAgICAgICAgICAgICAgIG9sZFEgPSBkb2pvLmlzUXVpcmtzOworCisgICAgICAgIHRyeXsK
KyAgICAgICAgICAgICAgICBkb2pvLmRvYyA9IGRvY3VtZW50T2JqZWN0OworICAgICAgICAgICAg
ICAgIGRlbGV0ZSBkb2pvLl9ib2R5THRyOyAvLyB1bmNhY2hlCisgICAgICAgICAgICAgICAgZG9q
by5pc1F1aXJrcyA9IGRvam8uZG9jLmNvbXBhdE1vZGUgPT0gIkJhY2tDb21wYXQiOyAvLyBubyBu
ZWVkIHRvIGNoZWNrIGZvciBRdWlya3NNb2RlIHdoaWNoIHdhcyBPcGVyYSA3IG9ubHkKKworICAg
ICAgICAgICAgICAgIGlmKHRoaXNPYmplY3QgJiYgdHlwZW9mIGNhbGxiYWNrID09ICJzdHJpbmci
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdGhpc09iamVjdFtjYWxsYmFj
a107CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNr
LmFwcGx5KHRoaXNPYmplY3QsIGNiQXJndW1lbnRzIHx8IFtdKTsKKyAgICAgICAgfWZpbmFsbHl7
CisgICAgICAgICAgICAgICAgZG9qby5kb2MgPSBvbGREb2M7CisgICAgICAgICAgICAgICAgZGVs
ZXRlIGRvam8uX2JvZHlMdHI7IC8vIGluIGNhc2UgaXQgd2FzIHVuZGVmaW5lZCBvcmlnaW5hbGx5
LCBhbmQgc2V0IHRvIHRydWUvZmFsc2UgYnkgdGhlIGFsdGVybmF0ZSBkb2N1bWVudAorICAgICAg
ICAgICAgICAgIGlmKG9sZEx0ciAhPT0gdW5kZWZpbmVkKXsgZG9qby5fYm9keUx0ciA9IG9sZEx0
cjsgfQorICAgICAgICAgICAgICAgIGRvam8uaXNRdWlya3MgPSBvbGRROworICAgICAgICB9Cit9
OworCit9CisKK2lmKCFkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5ldmVudCJdKXsgLy9f
aGFzUmVzb3VyY2UgY2hlY2tzIGFkZGVkIGJ5IGJ1aWxkLiBEbyBub3QgdXNlIF9oYXNSZXNvdXJj
ZSBkaXJlY3RseSBpbiB5b3VyIGNvZGUuCitkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5l
dmVudCJdID0gdHJ1ZTsKK2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS5ldmVudCIpOworCisKKwor
Ly8gdGhpcyBmaWxlIGNvdXJ0ZXN5IG9mIHRoZSBUdXJib0FqYXggR3JvdXAsIGxpY2Vuc2VkIHVu
ZGVyIGEgRG9qbyBDTEEKKworKGZ1bmN0aW9uKCl7CisgICAgICAgIC8vIERPTSBldmVudCBsaXN0
ZW5lciBtYWNoaW5lcnkKKyAgICAgICAgdmFyIGRlbCA9IChkb2pvLl9ldmVudF9saXN0ZW5lciA9
IHsKKyAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKC8qRE9NTm9kZSovIG5vZGUsIC8qU3Ry
aW5nKi8gbmFtZSwgLypGdW5jdGlvbiovIGZwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
KCFub2RlKXtyZXR1cm47fQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGRlbC5fbm9y
bWFsaXplRXZlbnROYW1lKG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZnAgPSBkZWwu
X2ZpeENhbGxiYWNrKG5hbWUsIGZwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICFkb2pvLmlzSUUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA9PSAibW91c2VlbnRlciIgfHwgbmFtZSA9
PSAibW91c2VsZWF2ZSIpCisgICAgICAgICAgICAgICAgICAgICAgICApeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgb2ZwID0gZnA7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSAobmFtZSA9PSAibW91c2VlbnRlciIpID8gIm1vdXNlb3ZlciIgOiAi
bW91c2VvdXQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcCA9IGZ1bmN0aW9u
KGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkb2pvLmlz
RGVzY2VuZGFudChlLnJlbGF0ZWRUYXJnZXQsIG5vZGUpKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGUudHlwZSA9IG9uYW1lOyAvLyBGSVhNRTog
ZG9lc24ndCB0YWtlPyBTSk06IGV2ZW50LnR5cGUgaXMgZ2VuZXJhbGx5IGltbXV0YWJsZS4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZnAu
Y2FsbCh0aGlzLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihuYW1l
LCBmcCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZwOyAvKkhhbmRs
ZSovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9u
KC8qRE9NTm9kZSovIG5vZGUsIC8qU3RyaW5nKi8gZXZlbnQsIC8qSGFuZGxlKi8gaGFuZGxlKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgY2xvYmJlcnMgdGhlIGxpc3RlbmVyIGZyb20gdGhlIG5vZGUK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgRE9NIG5vZGUgdG8gYXR0YWNoIHRoZSBldmVudCB0bworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZXZlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGhhbmRsZXIgdG8gcmVtb3ZlIHRoZSBmdW5jdGlv
biBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIGhhbmRsZSByZXR1cm5lZCBmcm9tIGFkZAor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYobm9kZSl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50ID0gZGVsLl9ub3JtYWxpemVFdmVudE5hbWUoZXZlbnQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZG9qby5pc0lFICYmIChldmVudCA9PSAibW91
c2VlbnRlciIgfHwgZXZlbnQgPT0gIm1vdXNlbGVhdmUiKSl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSAoZXZlbnQgPT0gIm1vdXNlZW50ZXIiKSA/ICJt
b3VzZW92ZXIiIDogIm1vdXNlb3V0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0
ZW5lcihldmVudCwgaGFuZGxlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBfbm9ybWFsaXplRXZlbnROYW1lOiBm
dW5jdGlvbigvKlN0cmluZyovIG5hbWUpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Vu
ZXJhbGx5LCBuYW1lIHNob3VsZCBiZSBsb3dlciBjYXNlLCB1bmxlc3MgaXQgaXMgc3BlY2lhbAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29tZWhvdyAoZS5nLiBhIE1vemlsbGEgRE9NIGV2
ZW50KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSAnb24nLgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUuc2xpY2UoMCwyKSA9PSJvbiIgPyBuYW1lLnNsaWNl
KDIpIDogbmFtZTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIF9maXhDYWxs
YmFjazogZnVuY3Rpb24oLypTdHJpbmcqLyBuYW1lLCBmcCl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBCeSBkZWZhdWx0LCB3ZSBvbmx5IGludm9rZSBfZml4RXZlbnQgZm9yICdrZXlwcmVz
cycKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNvZGUgaXMgYWRkZWQgdG8gX2ZpeEV2
ZW50IGZvciBvdGhlciBldmVudHMsIHdlIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRvIHJldmlzaXQgdGhpcyBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGFsc28gYXBwbGllcyB0byBfZml4RXZlbnQgb3ZlcnJpZGVzIGZvciBTYWZhcmkgYW5k
IE9wZXJhCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWxvdy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuYW1lICE9ICJrZXlwcmVzcyIgPyBmcCA6IGZ1bmN0aW9uKGUpeyBy
ZXR1cm4gZnAuY2FsbCh0aGlzLCBkZWwuX2ZpeEV2ZW50KGUsIHRoaXMpKTsgfTsKKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIF9maXhFdmVudDogZnVuY3Rpb24oZXZ0LCBzZW5k
ZXIpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gX2ZpeENhbGxiYWNrIG9ubHkgYXR0YWNo
ZXMgdXMgdG8ga2V5cHJlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggb24g
ZXZ0LnR5cGUgYW55d2F5IGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGRvam8uZml4RXZlbnQuCisgICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2goZXZ0LnR5cGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICJrZXlwcmVzcyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsLl9zZXRLZXlDaGFyKGV2dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXZ0OworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgX3NldEtleUNoYXI6IGZ1bmN0aW9uKGV2dCl7CisgICAgICAgICAgICAgICAgICAgICAg
ICBldnQua2V5Q2hhciA9IGV2dC5jaGFyQ29kZSA+PSAzMiA/IFN0cmluZy5mcm9tQ2hhckNvZGUo
ZXZ0LmNoYXJDb2RlKSA6ICcnOworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmNoYXJPckNv
ZGUgPSBldnQua2V5Q2hhciB8fCBldnQua2V5Q29kZTsKKyAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgIC8vIEZvciBJRSBhbmQgU2FmYXJpOiBzb21lIGN0cmwta2V5IGNvbWJpbmF0
aW9ucyAobW9zdGx5IHcvcHVuY3R1YXRpb24pIGRvIG5vdCBlbWl0IGEgY2hhciBjb2RlIGluIElF
CisgICAgICAgICAgICAgICAgLy8gd2UgbWFwIHRob3NlIHZpcnR1YWwga2V5IGNvZGVzIHRvIGFz
Y2lpIGhlcmUKKyAgICAgICAgICAgICAgICAvLyBub3QgdmFsaWQgZm9yIGFsbCAobm9uLVVTKSBr
ZXlib2FyZHMsIHNvIG1heWJlIHdlIHNob3VsZG4ndCBib3RoZXIKKyAgICAgICAgICAgICAgICBf
cHVuY3RNYXA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIDEwNjo0MiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIDExMTo0NywKKyAgICAgICAgICAgICAgICAgICAgICAgIDE4Njo1OSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDE4Nzo0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIDE4
ODo0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDE4OTo0NSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDE5MDo0NiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDE5MTo0NywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDE5Mjo5NiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDIxOTo5MSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIDIyMDo5MiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IDIyMTo5MywKKyAgICAgICAgICAgICAgICAgICAgICAgIDIyMjozOQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gRE9NIGV2ZW50cworICAgICAgICAKKyAgICAg
ICAgZG9qby5maXhFdmVudCA9IGZ1bmN0aW9uKC8qRXZlbnQqLyBldnQsIC8qRE9NTm9kZSovIHNl
bmRlcil7CisgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgbm9ybWFsaXplcyBwcm9wZXJ0aWVzIG9uIHRoZSBldmVudCBvYmplY3QgaW5j
bHVkaW5nIGV2ZW50CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGJ1YmJsaW5nIG1l
dGhvZHMsIGtleXN0cm9rZSBub3JtYWxpemF0aW9uLCBhbmQgeC95IHBvc2l0aW9ucworICAgICAg
ICAgICAgICAgIC8vIGV2dDogRXZlbnQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
bmF0aXZlIGV2ZW50IG9iamVjdAorICAgICAgICAgICAgICAgIC8vIHNlbmRlcjogRE9NTm9kZQor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBub2RlIHRvIHRyZWF0IGFzICJjdXJyZW50
VGFyZ2V0IgorICAgICAgICAgICAgICAgIHJldHVybiBkZWwuX2ZpeEV2ZW50KGV2dCwgc2VuZGVy
KTsKKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLnN0b3BFdmVudCA9IGZ1bmN0aW9uKC8qRXZl
bnQqLyBldnQpeworICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHByZXZlbnRzIHByb3BhZ2F0aW9uIGFuZCBjbG9iYmVycyB0aGUgZGVm
YXVsdCBhY3Rpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHBhc3Nl
ZCBldmVudAorICAgICAgICAgICAgICAgIC8vIGV2dDogRXZlbnQKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgVGhlIGV2ZW50IG9iamVjdC4gSWYgb21pdHRlZCwgd2luZG93LmV2ZW50
IGlzIHVzZWQgb24gSUUuCisgICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgICAgIC8v
IE5PVEU6IGJlbG93LCB0aGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGZvciBJRQorICAgICAgICB9
OworCisgICAgICAgIC8vIHRoZSBkZWZhdWx0IGxpc3RlbmVyIHRvIHVzZSBvbiBkb250Rml4IG5v
ZGVzLCBvdmVycmlkZW4gZm9yIElFCisgICAgICAgIHZhciBub2RlX2xpc3RlbmVyID0gZG9qby5f
bGlzdGVuZXI7CisgICAgICAgIAorICAgICAgICAvLyBVbmlmeSBjb25uZWN0IGFuZCBldmVudCBs
aXN0ZW5lcnMKKyAgICAgICAgZG9qby5fY29ubmVjdCA9IGZ1bmN0aW9uKG9iaiwgZXZlbnQsIGNv
bnRleHQsIG1ldGhvZCwgZG9udEZpeCl7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IG5lZWQg
YSBtb3JlIHN0cmljdCB0ZXN0CisgICAgICAgICAgICAgICAgdmFyIGlzTm9kZSA9IG9iaiAmJiAo
b2JqLm5vZGVUeXBlfHxvYmouYXR0YWNoRXZlbnR8fG9iai5hZGRFdmVudExpc3RlbmVyKTsKKyAg
ICAgICAgICAgICAgICAvLyBjaG9vc2Ugb25lIG9mIHRocmVlIGxpc3RlbmVyIG9wdGlvbnM6IHJh
dyAoY29ubmVjdC5qcyksIERPTSBldmVudCBvbiBhIE5vZGUsIGN1c3RvbSBldmVudCBvbiBhIE5v
ZGUKKyAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoZSB0aGlyZCBvcHRpb24gdG8gcHJvdmlk
ZSBsZWFrIHByZXZlbnRpb24gb24gYnJva2VuIGJyb3dzZXJzIChJRSkKKyAgICAgICAgICAgICAg
ICB2YXIgbGlkID0gaXNOb2RlID8gKGRvbnRGaXggPyAyIDogMSkgOiAwLCBsID0gW2Rvam8uX2xp
c3RlbmVyLCBkZWwsIG5vZGVfbGlzdGVuZXJdW2xpZF07CisgICAgICAgICAgICAgICAgLy8gY3Jl
YXRlIGEgbGlzdGVuZXIKKyAgICAgICAgICAgICAgICB2YXIgaCA9IGwuYWRkKG9iaiwgZXZlbnQs
IGRvam8uaGl0Y2goY29udGV4dCwgbWV0aG9kKSk7CisgICAgICAgICAgICAgICAgLy8gZm9ybWVy
bHksIHRoZSBkaXNjb25uZWN0IHBhY2thZ2UgY29udGFpbmVkICJsIiBkaXJlY3RseSwgYnV0IGlm
IGNsaWVudCBjb2RlCisgICAgICAgICAgICAgICAgLy8gbGVha3MgdGhlIGRpc2Nvbm5lY3QgcGFj
a2FnZSAoYnkgY29ubmVjdGluZyBpdCB0byBhIG5vZGUpLCByZWZlcmVuY2luZyAibCIKKyAgICAg
ICAgICAgICAgICAvLyBjb21wb3VuZHMgdGhlIHByb2JsZW0uCisgICAgICAgICAgICAgICAgLy8g
aW5zdGVhZCB3ZSByZXR1cm4gYSBsaXN0ZW5lciBpZCwgd2hpY2ggcmVxdWlyZXMgY3VzdG9tIF9k
aXNjb25uZWN0IGJlbG93LgorICAgICAgICAgICAgICAgIC8vIHJldHVybiBkaXNjb25uZWN0IHBh
Y2thZ2UKKyAgICAgICAgICAgICAgICByZXR1cm4gWyBvYmosIGV2ZW50LCBoLCBsaWQgXTsKKyAg
ICAgICAgfTsKKworICAgICAgICBkb2pvLl9kaXNjb25uZWN0ID0gZnVuY3Rpb24ob2JqLCBldmVu
dCwgaGFuZGxlLCBsaXN0ZW5lcil7CisgICAgICAgICAgICAgICAgKFtkb2pvLl9saXN0ZW5lciwg
ZGVsLCBub2RlX2xpc3RlbmVyXVtsaXN0ZW5lcl0pLnJlbW92ZShvYmosIGV2ZW50LCBoYW5kbGUp
OworICAgICAgICB9OworCisgICAgICAgIC8vIENvbnN0YW50cworCisgICAgICAgIC8vIFB1Ymxp
YzogY2xpZW50IGNvZGUgc2hvdWxkIHRlc3QKKyAgICAgICAgLy8ga2V5Q29kZSBhZ2FpbnN0IHRo
ZXNlIG5hbWVkIGNvbnN0YW50cywgYXMgdGhlCisgICAgICAgIC8vIGFjdHVhbCBjb2RlcyBjYW4g
dmFyeSBieSBicm93c2VyLgorICAgICAgICBkb2pvLmtleXMgPSB7CisgICAgICAgICAgICAgICAg
Ly8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRGVmaW5pdGlvbnMg
Zm9yIGNvbW1vbiBrZXkgdmFsdWVzCisgICAgICAgICAgICAgICAgQkFDS1NQQUNFOiA4LAorICAg
ICAgICAgICAgICAgIFRBQjogOSwKKyAgICAgICAgICAgICAgICBDTEVBUjogMTIsCisgICAgICAg
ICAgICAgICAgRU5URVI6IDEzLAorICAgICAgICAgICAgICAgIFNISUZUOiAxNiwKKyAgICAgICAg
ICAgICAgICBDVFJMOiAxNywKKyAgICAgICAgICAgICAgICBBTFQ6IDE4LAorICAgICAgICAgICAg
ICAgIE1FVEE6IGRvam8uaXNTYWZhcmkgPyA5MSA6IDIyNCwgICAgICAgICAvLyB0aGUgYXBwbGUg
a2V5IG9uIG1hY3MKKyAgICAgICAgICAgICAgICBQQVVTRTogMTksCisgICAgICAgICAgICAgICAg
Q0FQU19MT0NLOiAyMCwKKyAgICAgICAgICAgICAgICBFU0NBUEU6IDI3LAorICAgICAgICAgICAg
ICAgIFNQQUNFOiAzMiwKKyAgICAgICAgICAgICAgICBQQUdFX1VQOiAzMywKKyAgICAgICAgICAg
ICAgICBQQUdFX0RPV046IDM0LAorICAgICAgICAgICAgICAgIEVORDogMzUsCisgICAgICAgICAg
ICAgICAgSE9NRTogMzYsCisgICAgICAgICAgICAgICAgTEVGVF9BUlJPVzogMzcsCisgICAgICAg
ICAgICAgICAgVVBfQVJST1c6IDM4LAorICAgICAgICAgICAgICAgIFJJR0hUX0FSUk9XOiAzOSwK
KyAgICAgICAgICAgICAgICBET1dOX0FSUk9XOiA0MCwKKyAgICAgICAgICAgICAgICBJTlNFUlQ6
IDQ1LAorICAgICAgICAgICAgICAgIERFTEVURTogNDYsCisgICAgICAgICAgICAgICAgSEVMUDog
NDcsCisgICAgICAgICAgICAgICAgTEVGVF9XSU5ET1c6IDkxLAorICAgICAgICAgICAgICAgIFJJ
R0hUX1dJTkRPVzogOTIsCisgICAgICAgICAgICAgICAgU0VMRUNUOiA5MywKKyAgICAgICAgICAg
ICAgICBOVU1QQURfMDogOTYsCisgICAgICAgICAgICAgICAgTlVNUEFEXzE6IDk3LAorICAgICAg
ICAgICAgICAgIE5VTVBBRF8yOiA5OCwKKyAgICAgICAgICAgICAgICBOVU1QQURfMzogOTksCisg
ICAgICAgICAgICAgICAgTlVNUEFEXzQ6IDEwMCwKKyAgICAgICAgICAgICAgICBOVU1QQURfNTog
MTAxLAorICAgICAgICAgICAgICAgIE5VTVBBRF82OiAxMDIsCisgICAgICAgICAgICAgICAgTlVN
UEFEXzc6IDEwMywKKyAgICAgICAgICAgICAgICBOVU1QQURfODogMTA0LAorICAgICAgICAgICAg
ICAgIE5VTVBBRF85OiAxMDUsCisgICAgICAgICAgICAgICAgTlVNUEFEX01VTFRJUExZOiAxMDYs
CisgICAgICAgICAgICAgICAgTlVNUEFEX1BMVVM6IDEwNywKKyAgICAgICAgICAgICAgICBOVU1Q
QURfRU5URVI6IDEwOCwKKyAgICAgICAgICAgICAgICBOVU1QQURfTUlOVVM6IDEwOSwKKyAgICAg
ICAgICAgICAgICBOVU1QQURfUEVSSU9EOiAxMTAsCisgICAgICAgICAgICAgICAgTlVNUEFEX0RJ
VklERTogMTExLAorICAgICAgICAgICAgICAgIEYxOiAxMTIsCisgICAgICAgICAgICAgICAgRjI6
IDExMywKKyAgICAgICAgICAgICAgICBGMzogMTE0LAorICAgICAgICAgICAgICAgIEY0OiAxMTUs
CisgICAgICAgICAgICAgICAgRjU6IDExNiwKKyAgICAgICAgICAgICAgICBGNjogMTE3LAorICAg
ICAgICAgICAgICAgIEY3OiAxMTgsCisgICAgICAgICAgICAgICAgRjg6IDExOSwKKyAgICAgICAg
ICAgICAgICBGOTogMTIwLAorICAgICAgICAgICAgICAgIEYxMDogMTIxLAorICAgICAgICAgICAg
ICAgIEYxMTogMTIyLAorICAgICAgICAgICAgICAgIEYxMjogMTIzLAorICAgICAgICAgICAgICAg
IEYxMzogMTI0LAorICAgICAgICAgICAgICAgIEYxNDogMTI1LAorICAgICAgICAgICAgICAgIEYx
NTogMTI2LAorICAgICAgICAgICAgICAgIE5VTV9MT0NLOiAxNDQsCisgICAgICAgICAgICAgICAg
U0NST0xMX0xPQ0s6IDE0NSwKKyAgICAgICAgICAgICAgICAvLyB2aXJ0dWFsIGtleSBtYXBwaW5n
CisgICAgICAgICAgICAgICAgY29weUtleTogZG9qby5pc01hYyAmJiAhZG9qby5pc0FJUiA/IChk
b2pvLmlzU2FmYXJpID8gOTEgOiAyMjQgKSA6IDE3CisgICAgICAgIH07CisgICAgICAgIAorICAg
ICAgICB2YXIgZXZ0Q29weUtleSA9IGRvam8uaXNNYWMgPyAibWV0YUtleSIgOiAiY3RybEtleSI7
CisgICAgICAgIAorICAgICAgICBkb2pvLmlzQ29weUtleSA9IGZ1bmN0aW9uKGUpeworICAgICAg
ICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIENo
ZWNrcyBhbiBldmVudCBmb3IgdGhlIGNvcHkga2V5IChtZXRhIG9uIE1hYywgYW5kIGN0cmwgYW55
d2hlcmUgZWxzZSkKKyAgICAgICAgICAgICAgICAvLyBlOiBFdmVudAorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBFdmVudCBvYmplY3QgdG8gZXhhbWluZQorICAgICAgICAgICAgICAg
IHJldHVybiBlW2V2dENvcHlLZXldOyAgIC8vIEJvb2xlYW4KKyAgICAgICAgfTsKKworICAgICAg
ICAvLyBQdWJsaWM6IGRlY29kaW5nIG1vdXNlIGJ1dHRvbnMgZnJvbSBldmVudHMKKworLyo9PT09
PQorICAgICAgICBkb2pvLm1vdXNlQnV0dG9ucyA9IHsKKyAgICAgICAgICAgICAgICAvLyBMRUZU
OiBOdW1iZXIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTnVtZXJpYyB2YWx1ZSBv
ZiB0aGUgbGVmdCBtb3VzZSBidXR0b24gZm9yIHRoZSBwbGF0Zm9ybS4KKyAgICAgICAgICAgICAg
ICBMRUZUOiAgIDAsCisgICAgICAgICAgICAgICAgLy8gTUlERExFOiBOdW1iZXIKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgTnVtZXJpYyB2YWx1ZSBvZiB0aGUgbWlkZGxlIG1vdXNl
IGJ1dHRvbiBmb3IgdGhlIHBsYXRmb3JtLgorICAgICAgICAgICAgICAgIE1JRERMRTogMSwKKyAg
ICAgICAgICAgICAgICAvLyBSSUdIVDogTnVtYmVyCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIE51bWVyaWMgdmFsdWUgb2YgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBmb3IgdGhlIHBs
YXRmb3JtLgorICAgICAgICAgICAgICAgIFJJR0hUOiAgMiwKKyAgICAgICAgCisgICAgICAgICAg
ICAgICAgaXNCdXR0b246IGZ1bmN0aW9uKGUsIGJ1dHRvbil7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IENoZWNrcyBhbiBldmVudCBvYmplY3QgZm9yIGEgcHJlc3NlZCBidXR0b24KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGU6IEV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgRXZlbnQgb2JqZWN0IHRvIGV4YW1pbmUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ1dHRvbjogTnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgVGhlIGJ1dHRvbiB2YWx1ZSAoZXhhbXBsZTogZG9qby5tb3VzZUJ1dHRvbi5MRUZUKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuYnV0dG9uID09IGJ1dHRvbjsgLy8gQm9vbGVh
bgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgaXNMZWZ0OiBmdW5jdGlvbihl
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgQ2hlY2tzIGFuIGV2ZW50IG9iamVjdCBmb3IgdGhlIHBy
ZXNzZWQgbGVmdCBidXR0b24KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGU6IEV2ZW50Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRXZlbnQgb2JqZWN0IHRvIGV4
YW1pbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmJ1dHRvbiA9PSAwOyAvLyBC
b29sZWFuCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBpc01pZGRsZTogZnVu
Y3Rpb24oZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIENoZWNrcyBhbiBldmVudCBvYmplY3QgZm9y
IHRoZSBwcmVzc2VkIG1pZGRsZSBidXR0b24KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGU6
IEV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRXZlbnQgb2Jq
ZWN0IHRvIGV4YW1pbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmJ1dHRvbiA9
PSAxOyAvLyBCb29sZWFuCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBpc1Jp
Z2h0OiBmdW5jdGlvbihlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQ2hlY2tzIGFuIGV2ZW50IG9i
amVjdCBmb3IgdGhlIHByZXNzZWQgcmlnaHQgYnV0dG9uCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBlOiBFdmVudAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEV2
ZW50IG9iamVjdCB0byBleGFtaW5lCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5i
dXR0b24gPT0gMjsgLy8gQm9vbGVhbgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKz09
PT09Ki8KKworICAgICAgICAgICAgICAgIGlmKGRvam8uaXNJRSA8IDkgfHwgKGRvam8uaXNJRSAm
JiBkb2pvLmlzUXVpcmtzKSl7CisgICAgICAgICAgICAgICAgZG9qby5tb3VzZUJ1dHRvbnMgPSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBMRUZUOiAgIDEsCisgICAgICAgICAgICAgICAgICAg
ICAgICBNSURETEU6IDQsCisgICAgICAgICAgICAgICAgICAgICAgICBSSUdIVDogIDIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBoZWxwZXIgZnVuY3Rpb25zCisgICAgICAgICAgICAgICAg
ICAgICAgICBpc0J1dHRvbjogZnVuY3Rpb24oZSwgYnV0dG9uKXsgcmV0dXJuIGUuYnV0dG9uICYg
YnV0dG9uOyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgaXNMZWZ0OiAgIGZ1bmN0aW9uKGUp
eyByZXR1cm4gZS5idXR0b24gJiAxOyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgaXNNaWRk
bGU6IGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5idXR0b24gJiA0OyB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgaXNSaWdodDogIGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5idXR0b24gJiAyOyB9Cisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkb2pvLm1vdXNlQnV0dG9ucyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExFRlQ6ICAg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1JRERMRTogMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFJJR0hUOiAgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlbHBlciBmdW5j
dGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzQnV0dG9uOiBmdW5jdGlvbihlLCBidXR0
b24peyByZXR1cm4gZS5idXR0b24gPT0gYnV0dG9uOyB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgaXNMZWZ0OiAgIGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5idXR0b24gPT0gMDsgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlzTWlkZGxlOiBmdW5jdGlvbihlKXsgcmV0dXJuIGUuYnV0dG9u
ID09IDE7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBpc1JpZ2h0OiAgZnVuY3Rpb24oZSl7
IHJldHVybiBlLmJ1dHRvbiA9PSAyOyB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElFIGV2ZW50IG5vcm1hbGl6YXRp
b24KKyAgICAgICAgaWYoZG9qby5pc0lFKXsKKyAgICAgICAgICAgICAgICB2YXIgX3RyeVNldEtl
eUNvZGUgPSBmdW5jdGlvbihlLCBjb2RlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeXsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3F1ZWxjaCBlcnJvcnMgd2hlbiBr
ZXlDb2RlIGlzIHJlYWQtb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAo
ZS5nLiBpZiBrZXlDb2RlIGlzIGN0cmwgb3Igc2hpZnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoZS5rZXlDb2RlID0gY29kZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9Y2F0Y2goZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgICAgICAvLyBieSBkZWZhdWx0LCB1c2UgdGhlIHN0YW5kYXJkIGxpc3RlbmVyCisgICAg
ICAgICAgICAgICAgdmFyIGllbCA9IGRvam8uX2xpc3RlbmVyOworICAgICAgICAgICAgICAgIHZh
ciBsaXN0ZW5lcnNOYW1lID0gKGRvam8uX2llTGlzdGVuZXJzTmFtZSA9ICJfIiArIGRvam8uX3Nj
b3BlTmFtZSArICJfbGlzdGVuZXJzIik7CisgICAgICAgICAgICAgICAgLy8gZGlzcGF0Y2hlciB0
cmFja2luZyBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGlmKCFkb2pvLmNvbmZpZy5fYWxsb3df
bGVha3MpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3VzdG9tIGxpc3RlbmVyIHRoYXQg
aGFuZGxlcyBsZWFrIHByb3RlY3Rpb24gZm9yIERPTSBldmVudHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVfbGlzdGVuZXIgPSBpZWwgPSBkb2pvLl9pZV9saXN0ZW5lciA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VwcG9ydCBoYW5kbGVyIGluZGlyZWN0aW9u
OiBldmVudCBoYW5kbGVyIGZ1bmN0aW9ucyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcmVmZXJlbmNlZCBoZXJlLiBFdmVudCBkaXNwYXRjaGVycyBob2xkIG9ubHkgaW5k
aWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM6IFtdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgYSBsaXN0ZW5lciB0byBhbiBvYmpl
Y3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkOiBmdW5jdGlvbigvKk9iamVj
dCovIHNvdXJjZSwgLypTdHJpbmcqLyBtZXRob2QsIC8qRnVuY3Rpb24qLyBsaXN0ZW5lcil7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlIHx8
IGRvam8uZ2xvYmFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBmID0gc291cmNlW21ldGhvZF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoIWZ8fCFmW2xpc3RlbmVyc05hbWVdKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZG9qby5fZ2V0SWVEaXNwYXRjaGVyKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmln
aW5hbCB0YXJnZXQgZnVuY3Rpb24gaXMgc3BlY2lhbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZC50YXJnZXQgPSBmICYmIChpZWgucHVzaChmKSAtIDEp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlz
cGF0Y2hlciBob2xkcyBhIGxpc3Qgb2YgaW5kaWNlcyBpbnRvIGhhbmRsZXJzIHRhYmxlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW2xpc3RlbmVyc05h
bWVdID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyByZWRpcmVjdCBzb3VyY2UgdG8gZGlzcGF0Y2hlcgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHNvdXJjZVttZXRob2RdID0gZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZbbGlzdGVuZXJzTmFtZV0ucHVzaChpZWgucHVz
aChsaXN0ZW5lcikgLSAxKSA7IC8qSGFuZGxlKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGEgbGlz
dGVuZXIgZnJvbSBhbiBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVt
b3ZlOiBmdW5jdGlvbigvKk9iamVjdCovIHNvdXJjZSwgLypTdHJpbmcqLyBtZXRob2QsIC8qSGFu
ZGxlKi8gaGFuZGxlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZiA9IChzb3VyY2V8fGRvam8uZ2xvYmFsKVttZXRob2RdLCBsID0gZiAmJiBmW2xpc3RlbmVy
c05hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGYgJiYg
bCAmJiBoYW5kbGUtLSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgaWVoW2xbaGFuZGxlXV07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbFtoYW5kbGVdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFsaWFzIHVzZWQgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZWggPSBp
ZWwuaGFuZGxlcnM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZG9qby5t
aXhpbihkZWwsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24oLypET01O
b2RlKi8gbm9kZSwgLypTdHJpbmcqLyBldmVudCwgLypGdW5jdGlvbiovIGZwKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW5vZGUpe3JldHVybjt9IC8vIHVuZGVmaW5lZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCA9IGRlbC5fbm9ybWFsaXplRXZl
bnROYW1lKGV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQ9
PSJvbmtleXByZXNzIil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gd2UgbmVlZCB0byBsaXN0ZW4gdG8gb25rZXlkb3duIHRvIHN5bnRoZXNpemUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZXlwcmVzcyBldmVudHMgdGhhdCBv
dGhlcndpc2Ugd29uJ3QgZmlyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG9uIElFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGtkID0gbm9kZS5vbmtleWRvd247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoIWtkIHx8ICFrZFtsaXN0ZW5lcnNOYW1lXSB8fCAha2QuX3N0ZWFsdGhLZXlkb3du
SGFuZGxlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBoID0gZGVsLmFkZChub2RlLCAib25rZXlkb3duIiwgZGVsLl9zdGVhbHRoS2V5RG93bik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZCA9IG5v
ZGUub25rZXlkb3duOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2QuX3N0ZWFsdGhLZXlkb3duSGFuZGxlID0gaDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtkLl9zdGVhbHRoS2V5ZG93blJlZnMgPSAxOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2QuX3N0ZWFsdGhLZXlkb3du
UmVmcysrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaWVsLmFkZChub2RlLCBldmVudCwgZGVsLl9maXhDYWxsYmFjayhmcCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92
ZTogZnVuY3Rpb24oLypET01Ob2RlKi8gbm9kZSwgLypTdHJpbmcqLyBldmVudCwgLypIYW5kbGUq
LyBoYW5kbGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCA9IGRlbC5f
bm9ybWFsaXplRXZlbnROYW1lKGV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWVsLnJlbW92ZShub2RlLCBldmVudCwgaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYoZXZlbnQ9PSJvbmtleXByZXNzIil7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGtkID0gbm9kZS5vbmtleWRvd247CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoLS1rZC5fc3RlYWx0aEtleWRvd25SZWZz
IDw9IDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWVsLnJlbW92ZShub2RlLCAib25rZXlkb3duIiwga2QuX3N0ZWFsdGhLZXlkb3duSGFuZGxlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBr
ZC5fc3RlYWx0aEtleWRvd25IYW5kbGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgX25vcm1hbGl6ZUV2ZW50
TmFtZTogZnVuY3Rpb24oLypTdHJpbmcqLyBldmVudE5hbWUpeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBHZW5lcmFsbHksIGV2ZW50TmFtZSBzaG91bGQgYmUgbG93ZXIgY2Fz
ZSwgdW5sZXNzIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNp
YWwgc29tZWhvdyAoZS5nLiBhIE1vemlsbGEgZXZlbnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGVuc3VyZSAnb24nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBldmVudE5hbWUuc2xpY2UoMCwyKSAhPSAib24iID8gIm9uIiArIGV2ZW50TmFtZSA6
IGV2ZW50TmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICBfbm9wOiBmdW5jdGlvbigpe30sCisgICAgICAgICAgICAgICAgICAgICAgICBfZml4
RXZlbnQ6IGZ1bmN0aW9uKC8qRXZlbnQqLyBldnQsIC8qRE9NTm9kZSovIHNlbmRlcil7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBub3JtYWxpemVzIHByb3BlcnRpZXMgb24g
dGhlIGV2ZW50IG9iamVjdCBpbmNsdWRpbmcgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGJ1YmJsaW5nIG1ldGhvZHMsIGtleXN0cm9rZSBub3Jt
YWxpemF0aW9uLCBhbmQgeC95IHBvc2l0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBldnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBuYXRpdmUgZXZlbnQgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHNlbmRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIG5vZGUgdG8gdHJlYXQgYXMgImN1cnJlbnRUYXJnZXQiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKCFldnQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB3ID0gc2VuZGVyICYmIChzZW5kZXIub3duZXJEb2N1bWVudCB8fCBzZW5kZXIu
ZG9jdW1lbnQgfHwgc2VuZGVyKS5wYXJlbnRXaW5kb3cgfHwgd2luZG93OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dCA9IHcuZXZlbnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYo
IWV2dCl7cmV0dXJuKGV2dCk7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnQu
dGFyZ2V0ID0gZXZ0LnNyY0VsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2dC5jdXJyZW50VGFyZ2V0ID0gKHNlbmRlciB8fCBldnQuc3JjRWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5sYXllclggPSBldnQub2Zmc2V0WDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmxheWVyWSA9IGV2dC5vZmZzZXRZOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2Nyb2xsIHBvc2l0aW9uIHF1
ZXJ5IGlzIGR1cGVkIGZyb20gZG9qby5odG1sIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGF2b2lkIGRlcGVuZGVuY3kgb24gdGhhdCBlbnRpcmUgbW9kdWxlLiBOb3cgdGhh
dCBIVE1MIGlzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhc2UsIHdl
IHNob3VsZCBjb252ZXJ0IGJhY2sgdG8gc29tZXRoaW5nIHNpbWlsYXIgdGhlcmUuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZSA9IGV2dC5zcmNFbGVtZW50LCBkb2MgPSAo
c2UgJiYgc2Uub3duZXJEb2N1bWVudCkgfHwgZG9jdW1lbnQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIERPIE5PVCByZXBsYWNlIHRoZSBmb2xsb3dpbmcgdG8gdXNlIGRvam8u
Ym9keSgpLCBpbiBJRSwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHNob3VsZCBiZSB1c2VkCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlcmUgcmF0aGVyIHRoYW4gZG9jdW1l
bnQuYm9keQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9jQm9keSA9ICgo
ZG9qby5pc0lFIDwgNikgfHwgKGRvY1siY29tcGF0TW9kZSJdID09ICJCYWNrQ29tcGF0IikpID8g
ZG9jLmJvZHkgOiBkb2MuZG9jdW1lbnRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgb2Zmc2V0ID0gZG9qby5fZ2V0SWVEb2N1bWVudEVsZW1lbnRPZmZzZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnBhZ2VYID0gZXZ0LmNsaWVudFgg
KyBkb2pvLl9maXhJZUJpRGlTY3JvbGxMZWZ0KGRvY0JvZHkuc2Nyb2xsTGVmdCB8fCAwKSAtIG9m
ZnNldC54OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnQucGFnZVkgPSBldnQu
Y2xpZW50WSArIChkb2NCb2R5LnNjcm9sbFRvcCB8fCAwKSAtIG9mZnNldC55OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZihldnQudHlwZSA9PSAibW91c2VvdmVyIil7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnJlbGF0ZWRUYXJnZXQgPSBl
dnQuZnJvbUVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXZ0LnR5cGUgPT0gIm1vdXNlb3V0Iil7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnJlbGF0ZWRUYXJnZXQg
PSBldnQudG9FbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2pvLmlzSUUgPCA5IHx8IGRvam8uaXNR
dWlya3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnQuc3Rv
cFByb3BhZ2F0aW9uID0gZGVsLl9zdG9wUHJvcGFnYXRpb247CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0ID0gZGVsLl9wcmV2ZW50RGVm
YXVsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZGVsLl9maXhLZXlzKGV2dCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgX2ZpeEtleXM6IGZ1bmN0aW9u
KGV2dCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChldnQudHlwZSl7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAia2V5cHJlc3Mi
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMg
PSAoImNoYXJDb2RlIiBpbiBldnQgPyBldnQuY2hhckNvZGUgOiBldnQua2V5Q29kZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYz09MTApewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDVFJMLUVOVEVSIGlzIENUUkwtQVNDSUkoMTApIG9uIElFLCBidXQgQ1RSTC1FTlRFUiBvbiBN
b3ppbGxhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGM9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXZ0LmtleUNvZGUgPSAxMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGM9PTEzfHxjPT0yNyl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9MDsgLy8gTW96
aWxsYSBjb25zaWRlcnMgRU5URVIgYW5kIEVTQyBub24tcHJpbnRhYmxlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihjPT0zKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz05OTsg
Ly8gTW96aWxsYSBtYXBzIENUUkwtQlJFQUsgdG8gQ1RSTC1jCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBNb3ppbGxhIHNldHMga2V5Q29kZSB0byAwIHdoZW4g
dGhlcmUgaXMgYSBjaGFyQ29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYnV0IHRoYXQgc3RvcHMgdGhlIGV2ZW50IG9uIElFLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmNoYXJDb2RlID0gYzsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbC5fc2V0
S2V5Q2hhcihldnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2dDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBfc3RlYWx0aEtleURvd246IGZ1bmN0aW9u
KGV2dCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGRvZXNuJ3QgZmly
ZSBrZXlwcmVzcyBmb3IgbW9zdCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIGJyb3dzZXJzIGRvLCB3ZSBzaW11bGF0ZSBp
dCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga3AgPSBldnQuY3Vy
cmVudFRhcmdldC5vbmtleXByZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBvbmx5IHdvcmtzIGlmIGtwIGV4aXN0cyBhbmQgaXMgYSBkaXNwYXRjaGVyCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmKCFrcCB8fCAha3BbbGlzdGVuZXJzTmFtZV0peyByZXR1
cm47IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVuZ2Uga2V5L2NoYXJD
b2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrPWV2dC5rZXlDb2RlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgV2luZG93cyBWaXJ0
dWFsIEtleSBDb2RlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8v
bXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVz
L3dpbnVpL1dpblVJL1dpbmRvd3NVc2VySW50ZXJmYWNlL1VzZXJJbnB1dC9WaXJ0dWFsS2V5Q29k
ZXMuYXNwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bnByaW50YWJsZSA9
IChrIT0xMyB8fCAoZG9qby5pc0lFID49IDkgJiYgIWRvam8uaXNRdWlya3MpKSAmJiBrIT0zMiAm
JiBrIT0yNyAmJiAoazw0OHx8az45MCkgJiYgKGs8OTZ8fGs+MTExKSAmJiAoazwxODZ8fGs+MTky
KSAmJiAoazwyMTl8fGs+MjIyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzeW50aGVzaXplIGtleXByZXNzIGZvciBtb3N0IHVucHJpbnRhYmxlcyBhbmQgQ1RSTC1rZXlz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVucHJpbnRhYmxlfHxldnQuY3Ry
bEtleSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSB1
bnByaW50YWJsZSA/IDAgOiBrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmKGV2dC5jdHJsS2V5KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKGs9PTMgfHwgaz09MTMpeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIElFIHdpbGwgcG9zdCBD
VFJMLUJSRUFLLCBDVFJMLUVOVEVSIGFzIGtleXByZXNzIG5hdGl2ZWx5CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihjPjk1ICYmIGM8MTA2
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYyAtPSA0ODsgLy8gbWFwIENUUkwtW251bXBhZCAwLTldIHRvIEFTQ0lJCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZigoIWV2dC5zaGlm
dEtleSkmJihjPj02NSYmYzw9OTApKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYyArPSAzMjsgLy8gbWFwIENUUkwtW0EtWl0gdG8gbG93
ZXJjYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYyA9IGRlbC5fcHVuY3RNYXBbY10gfHwgYzsgLy8gbWFwIG90aGVyIHByb2JsZW1hdGlj
IENUUkwgY29tYmluYXRpb25zIHRvIEFTQ0lJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbXVs
YXRlIGEga2V5cHJlc3MgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZmF1eCA9IGRlbC5fc3ludGhlc2l6ZUV2ZW50KGV2dCwge3R5cGU6ICdrZXlwcmVz
cycsIGZhdXg6IHRydWUsIGNoYXJDb2RlOiBjfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga3AuY2FsbChldnQuY3VycmVudFRhcmdldCwgZmF1eCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZG9qby5pc0lFIDwgOSB8fCAoZG9q
by5pc0lFICYmIGRvam8uaXNRdWlya3MpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2dC5jYW5jZWxCdWJibGUgPSBmYXV4LmNhbmNlbEJ1YmJsZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnJldHVyblZhbHVlID0gZmF1eC5yZXR1cm5W
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdHJ5U2V0S2V5
Q29kZShldnQsIGZhdXgua2V5Q29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDYWxsZWQgaW4gRXZlbnQgc2NvcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIF9zdG9wUHJv
cGFnYXRpb246IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICBfcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcga2V5Q29kZSB0byAwIGlzIHRoZSBv
bmx5IHdheSB0byBwcmV2ZW50IGNlcnRhaW4ga2V5cHJlc3NlcyAobmFtZWx5CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGN0cmwtY29tYmluYXRpb25zIHRoYXQgY29ycmVzcG9u
ZCB0byBtZW51IGFjY2VsZXJhdG9yIGtleXMpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPdG9oLCBpdCBwcmV2ZW50cyB1cHN0cmVhbSBsaXN0ZW5lcnMgZnJvbSBnZXR0aW5n
IHRoaXMgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5
IHRvIHNwbGl0IHRoZSBkaWZmZXJlbmNlIGhlcmUgYnkgY2xvYmJlcmluZyBrZXlDb2RlIG9ubHkg
Zm9yIGN0cmwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tYmluYXRpb25z
LiBJZiB5b3Ugc3RpbGwgbmVlZCB0byBhY2Nlc3MgdGhlIGtleSB1cHN0cmVhbSwgYnViYmxlZEtl
eUNvZGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvdmlkZWQgYXMg
YSB3b3JrYXJvdW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1YmJs
ZWRLZXlDb2RlID0gdGhpcy5rZXlDb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZih0aGlzLmN0cmxLZXkpe190cnlTZXRLZXlDb2RlKHRoaXMsIDApO30KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBvdmVycmlkZSBzdG9wRXZlbnQgZm9y
IElFCisgICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQgPSAoZG9qby5pc0lFIDwgOSB8fCBk
b2pvLmlzUXVpcmtzKSA/IGZ1bmN0aW9uKGV2dCl7CisgICAgICAgICAgICAgICAgICAgICAgICBl
dnQgPSBldnQgfHwgd2luZG93LmV2ZW50OworICAgICAgICAgICAgICAgICAgICAgICAgZGVsLl9z
dG9wUHJvcGFnYXRpb24uY2FsbChldnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsLl9w
cmV2ZW50RGVmYXVsdC5jYWxsKGV2dCk7CisgICAgICAgICAgICAgICAgfSA6IGRvam8uc3RvcEV2
ZW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkZWwuX3N5bnRoZXNpemVFdmVudCA9
IGZ1bmN0aW9uKGV2dCwgcHJvcHMpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhdXgg
PSBkb2pvLm1peGluKHt9LCBldnQsIHByb3BzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
bC5fc2V0S2V5Q2hhcihmYXV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3
b3VsZCBwcmVmZXIgdG8gdXNlIGRvam8uaGl0Y2g6IGRvam8uaGl0Y2goZXZ0LCBldnQucHJldmVu
dERlZmF1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGl0IHRocm93cyBhbiBl
cnJvciB3aGVuIHByZXZlbnREZWZhdWx0IGlzIGludm9rZWQgb24gU2FmYXJpCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkb2VzIEV2ZW50LnByZXZlbnREZWZhdWx0IG5vdCBzdXBwb3J0ICJh
cHBseSIgb24gU2FmYXJpPworICAgICAgICAgICAgICAgICAgICAgICAgZmF1eC5wcmV2ZW50RGVm
YXVsdCA9IGZ1bmN0aW9uKCl7IGV2dC5wcmV2ZW50RGVmYXVsdCgpOyB9OworICAgICAgICAgICAg
ICAgICAgICAgICAgZmF1eC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpeyBldnQuc3RvcFBy
b3BhZ2F0aW9uKCk7IH07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmF1eDsKKyAg
ICAgICAgfTsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gT3BlcmEgZXZlbnQgbm9ybWFs
aXphdGlvbgorICAgICAgICBpZihkb2pvLmlzT3BlcmEpeworICAgICAgICAgICAgICAgIGRvam8u
bWl4aW4oZGVsLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBfZml4RXZlbnQ6IGZ1bmN0aW9u
KGV2dCwgc2VuZGVyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGV2
dC50eXBlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJr
ZXlwcmVzcyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgYyA9IGV2dC53aGljaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKGM9PTMpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjPTk5OyAvLyBNb3ppbGxhIG1hcHMgQ1RSTC1CUkVBSyB0
byBDVFJMLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNh
bid0IHRyYXAgc29tZSBrZXlzIGF0IGFsbCwgbGlrZSBJTlNFUlQgYW5kIERFTEVURQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgbm8g
ZGlmZmVyZW50aWF0aW5nIGluZm8gYmV0d2VlbiBERUxFVEUgYW5kICIuIiwgb3IgSU5TRVJUIGFu
ZCAiLSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMg
PSBjPDQxICYmICFldnQuc2hpZnRLZXkgPyAwIDogYzsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGV2dC5jdHJsS2V5ICYmICFldnQuc2hpZnRLZXkg
JiYgYz49NjUgJiYgYzw9OTApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBsb3dlcmNhc2UgQ1RSTC1bQS1aXSBrZXlzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgKz0gMzI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVsLl9z
eW50aGVzaXplRXZlbnQoZXZ0LCB7IGNoYXJDb2RlOiBjIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
dnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2Via2l0IGV2ZW50IG5vcm1hbGl6
YXRpb24KKyAgICAgICAgaWYoZG9qby5pc1dlYktpdCl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbC5fYWRkID0gZGVsLmFkZDsKKyAgICAgICAgICAgICAgICBkZWwuX3JlbW92
ZSA9IGRlbC5yZW1vdmU7CisKKyAgICAgICAgICAgICAgICBkb2pvLm1peGluKGRlbCwgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkOiBmdW5jdGlvbigvKkRPTU5vZGUqLyBub2RlLCAvKlN0
cmluZyovIGV2ZW50LCAvKkZ1bmN0aW9uKi8gZnApeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZighbm9kZSl7cmV0dXJuO30gLy8gdW5kZWZpbmVkCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBoYW5kbGUgPSBkZWwuX2FkZChub2RlLCBldmVudCwgZnApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkZWwuX25vcm1hbGl6ZUV2ZW50TmFt
ZShldmVudCkgPT0gImtleXByZXNzIil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gd2UgbmVlZCB0byBsaXN0ZW4gdG8gb25rZXlkb3duIHRvIHN5bnRoZXNpemUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZXlwcmVzcyBldmVu
dHMgdGhhdCBvdGhlcndpc2Ugd29uJ3QgZmlyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGluIFNhZmFyaSAzLjErOiBodHRwczovL2xpc3RzLndlYmtpdC5vcmcv
cGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAwNy1EZWNlbWJlci8wMDI5OTIuaHRtbAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5fc3RlYWx0aEtleURvd25IYW5k
bGUgPSBkZWwuX2FkZChub2RlLCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2dCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0EgdmFyaWF0aW9uIG9uIHRo
ZSBJRSBfc3RlYWx0aEtleWRvd24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vU3ludGhlc2l6ZSBhbiBvbmtleXByZXNzIGV2ZW50LCBi
dXQgb25seSBmb3IgdW5wcmludGFibGUgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrPWV2dC5rZXlDb2RlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIFdpbmRv
d3MgVmlydHVhbCBLZXkgQ29kZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0
LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvd2ludWkvV2luVUkvV2luZG93c1VzZXJJbnRlcmZhY2Uv
VXNlcklucHV0L1ZpcnR1YWxLZXlDb2Rlcy5hc3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB1bnByaW50YWJsZSA9IGshPTEzICYmIGshPTMyICYm
IChrPDQ4IHx8IGs+OTApICYmIChrPDk2IHx8IGs+MTExKSAmJiAoazwxODYgfHwgaz4xOTIpICYm
IChrPDIxOSB8fCBrPjIyMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBzeW50aGVzaXplIGtleXByZXNzIGZvciBtb3N0IHVucHJpbnRhYmxlcyBh
bmQgQ1RSTC1rZXlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZih1bnByaW50YWJsZSB8fCBldnQuY3RybEtleSl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gdW5wcmludGFibGUg
PyAwIDogazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYoZXZ0LmN0cmxLZXkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGs9PTMgfHwgaz09MTMpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyBJRSB3aWxsIHBvc3QgQ1RSTC1CUkVBSywgQ1RSTC1FTlRF
UiBhcyBrZXlwcmVzcyBuYXRpdmVseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGM+OTUgJiYgYzwxMDYpewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYyAtPSA0ODsgLy8gbWFwIENUUkwtW251bXBhZCAwLTldIHRvIEFTQ0lJ
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfWVsc2UgaWYoIWV2dC5zaGlmdEtleSAmJiBjPj02NSAmJiBjPD05MCl7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjICs9IDMyOyAvLyBtYXAgQ1RSTC1bQS1aXSB0byBsb3dlcmNhc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBkZWwuX3B1bmN0TWFwW2NdIHx8IGM7IC8vIG1h
cCBvdGhlciBwcm9ibGVtYXRpYyBDVFJMIGNvbWJpbmF0aW9ucyB0byBBU0NJSQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBzaW11bGF0ZSBhIGtleXByZXNzIGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYXV4ID0gZGVsLl9zeW50aGVzaXpl
RXZlbnQoZXZ0LCB7dHlwZTogJ2tleXByZXNzJywgZmF1eDogdHJ1ZSwgY2hhckNvZGU6IGN9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnAuY2FsbChldnQuY3VycmVudFRhcmdldCwgZmF1eCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsgLypIYW5kbGUqLworICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Zl
OiBmdW5jdGlvbigvKkRPTU5vZGUqLyBub2RlLCAvKlN0cmluZyovIGV2ZW50LCAvKkhhbmRsZSov
IGhhbmRsZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vZGUpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhbmRsZS5fc3RlYWx0aEtl
eURvd25IYW5kbGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsLl9yZW1vdmUobm9kZSwgImtleWRvd24iLCBoYW5kbGUuX3N0ZWFsdGhLZXlEb3du
SGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsLl9yZW1vdmUobm9kZSwgZXZl
bnQsIGhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBfZml4RXZlbnQ6IGZ1
bmN0aW9uKGV2dCwgc2VuZGVyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoKGV2dC50eXBlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICJrZXlwcmVzcyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZihldnQuZmF1eCl7IHJldHVybiBldnQ7IH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gZXZ0LmNoYXJDb2RlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGM+PTMyID8gYyA6
IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZGVsLl9zeW50aGVzaXplRXZlbnQoZXZ0LCB7Y2hhckNvZGU6IGMsIGZhdXg6IHRydWV9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXZ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSkoKTsKKworaWYoZG9q
by5pc0lFKXsKKyAgICAgICAgLy8ga2VlcCB0aGlzIG91dCBvZiB0aGUgY2xvc3VyZQorICAgICAg
ICAvLyBjbG9zaW5nIG92ZXIgJ2llbCcgb3IgJ2llaCcgYjBya3MgbGVhayBwcmV2ZW50aW9uCisg
ICAgICAgIC8vIGxzW2ldIGlzIGFuIGluZGV4IGludG8gdGhlIG1hc3RlciBoYW5kbGVyIGFycmF5
CisgICAgICAgIGRvam8uX2llRGlzcGF0Y2hlciA9IGZ1bmN0aW9uKGFyZ3MsIHNlbmRlcil7Cisg
ICAgICAgICAgICAgICAgdmFyIGFwID0gQXJyYXkucHJvdG90eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaCA9IGRvam8uX2llX2xpc3RlbmVyLmhhbmRsZXJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgYyA9IGFyZ3MuY2FsbGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgbHMgPSBj
W2Rvam8uX2llTGlzdGVuZXJzTmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gaFtj
LnRhcmdldF07CisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHZhbHVlIGNvbWVzIGZyb20gb3Jp
Z2luYWwgdGFyZ2V0IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgdmFyIHIgPSB0ICYmIHQuYXBw
bHkoc2VuZGVyLCBhcmdzKTsKKyAgICAgICAgICAgICAgICAvLyBtYWtlIGxvY2FsIGNvcHkgb2Yg
bGlzdGVuZXIgYXJyYXkgc28gaXQncyBpbW11dGFibGUgZHVyaW5nIHByb2Nlc3NpbmcKKyAgICAg
ICAgICAgICAgICB2YXIgbGxzID0gW10uY29uY2F0KGxzKTsKKyAgICAgICAgICAgICAgICAvLyBp
bnZva2UgbGlzdGVuZXJzIGFmdGVyIHRhcmdldCBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGZv
cih2YXIgaSBpbiBsbHMpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBoW2xsc1tp
XV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZighKGkgaW4gYXApICYmIGYpeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmLmFwcGx5KHNlbmRlciwgYXJncyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiByOworICAgICAgICB9OworICAgICAgICBkb2pvLl9nZXRJZURpc3BhdGNoZXIgPSBmdW5j
dGlvbigpeworICAgICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGUgcmV0dXJuZWQgZnVuY3Rpb24g
Y2xvc2VzIG92ZXIgbm90aGluZyAoIm5ldyBGdW5jdGlvbiIgYXBwYXJlbnRseSBkb2Vzbid0IGNs
b3NlKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oZG9qby5fc2NvcGVOYW1l
ICsgIi5faWVEaXNwYXRjaGVyKGFyZ3VtZW50cywgdGhpcykiKTsgLy8gZnVuY3Rpb24KKyAgICAg
ICAgfTsKKyAgICAgICAgLy8ga2VlcCB0aGlzIG91dCBvZiB0aGUgY2xvc3VyZSB0byByZWR1Y2Ug
UkFNIGFsbG9jYXRpb24KKyAgICAgICAgZG9qby5fZXZlbnRfbGlzdGVuZXIuX2ZpeENhbGxiYWNr
ID0gZnVuY3Rpb24oZnApeworICAgICAgICAgICAgICAgIHZhciBmID0gZG9qby5fZXZlbnRfbGlz
dGVuZXIuX2ZpeEV2ZW50OworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKXsgcmV0
dXJuIGZwLmNhbGwodGhpcywgZihlLCB0aGlzKSk7IH07CisgICAgICAgIH07Cit9CisKK30KKwor
aWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmh0bWwiXSl7IC8vX2hhc1Jlc291cmNl
IGNoZWNrcyBhZGRlZCBieSBidWlsZC4gRG8gbm90IHVzZSBfaGFzUmVzb3VyY2UgZGlyZWN0bHkg
aW4geW91ciBjb2RlLgorZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuaHRtbCJdID0gdHJ1
ZTsKK2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS5odG1sIik7CisKKworCisvLyBGSVhNRTogbmVl
ZCB0byBhZGQgdW5pdCB0ZXN0cyBmb3IgYWxsIHRoZSBzZW1pLXB1YmxpYyBtZXRob2RzCisKK3Ry
eXsKKyAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkJhY2tncm91bmRJbWFnZUNhY2hlIiwg
ZmFsc2UsIHRydWUpOworfWNhdGNoKGUpeworICAgICAgICAvLyBzYW5lIGJyb3dzZXJzIGRvbid0
IGhhdmUgY2FjaGUgImlzc3VlcyIKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKy8vIERPTSBGdW5jdGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK
Ky8qPT09PT0KK2Rvam8uYnlJZCA9IGZ1bmN0aW9uKGlkLCBkb2MpeworICAgICAgICAvLyAgICAg
IHN1bW1hcnk6CisgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIERPTSBub2RlIHdpdGgg
bWF0Y2hpbmcgYGlkYCBhdHRyaWJ1dGUgb3IgYG51bGxgCisgICAgICAgIC8vICAgICAgICAgICAg
ICBpZiBub3QgZm91bmQuIElmIGBpZGAgaXMgYSBEb21Ob2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGEg
bm8tb3AuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgICAgaWQ6IFN0cmluZ3xET01Ob2RlCisg
ICAgICAgIC8vICAgICAgICAgICAgICBBIHN0cmluZyB0byBtYXRjaCBhbiBIVE1MIGlkIGF0dHJp
YnV0ZSBvciBhIHJlZmVyZW5jZSB0byBhIERPTSBOb2RlCisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgICAgZG9jOiBEb2N1bWVudD8KKyAgICAgICAgLy8gICAgICAgICAgICAgIERvY3VtZW50IHRv
IHdvcmsgaW4uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mCisgICAgICAgIC8vICAg
ICAgICAgICAgICBkb2pvLmRvYy4gIENhbiBiZSB1c2VkIHRvIHJldHJpZXZlCisgICAgICAgIC8v
ICAgICAgICAgICAgICBub2RlIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBkb2N1bWVudHMuCisgICAg
ICAgIC8vCisgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgLy8gICAgICBMb29rIHVw
IGEgbm9kZSBieSBJRDoKKyAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBuID0gZG9qby5ieUlk
KCJmb28iKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAv
LyAgICAgIENoZWNrIGlmIGEgbm9kZSBleGlzdHMsIGFuZCB1c2UgaXQuCisgICAgICAgIC8vICAg
ICAgfCAgICAgICB2YXIgbiA9IGRvam8uYnlJZCgiYmFyIik7CisgICAgICAgIC8vICAgICAgfCAg
ICAgICBpZihuKXsgZG9TdHVmZigpIC4uLiB9CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICAg
ZXhhbXBsZToKKyAgICAgICAgLy8gICAgICBBbGxvdyBzdHJpbmcgb3IgRG9tTm9kZSByZWZlcmVu
Y2VzIHRvIGJlIHBhc3NlZCB0byBhIGN1c3RvbSBmdW5jdGlvbjoKKyAgICAgICAgLy8gICAgICB8
ICAgICAgIHZhciBmb28gPSBmdW5jdGlvbihub2RlT3JJZCl7CisgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgIG5vZGVPcklkID0gZG9qby5ieUlkKG5vZGVPcklkKTsKKyAgICAgICAgLy8g
ICAgICB8ICAgICAgICAgICAgICAgLy8gLi4uIG1vcmUgc3R1ZmYKKyAgICAgICAgLy8gICAgICB8
ICAgICAgIH0KKz09PT09Ki8KKworaWYoZG9qby5pc0lFKXsKKyAgICAgICAgZG9qby5ieUlkID0g
ZnVuY3Rpb24oaWQsIGRvYyl7CisgICAgICAgICAgICAgICAgaWYodHlwZW9mIGlkICE9ICJzdHJp
bmciKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmFyIF9kID0gZG9jIHx8IGRvam8uZG9jLCB0ZSA9IF9kLmdl
dEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzLmlkLnZhbHVl
IGlzIGJldHRlciB0aGFuIGp1c3QgaWQgaW4gY2FzZSB0aGUKKyAgICAgICAgICAgICAgICAvLyB1
c2VyIGhhcyBhIG5hbWU9aWQgaW5zaWRlIGEgZm9ybQorICAgICAgICAgICAgICAgIGlmKHRlICYm
ICh0ZS5hdHRyaWJ1dGVzLmlkLnZhbHVlID09IGlkIHx8IHRlLmlkID09IGlkKSl7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGU7CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgZWxlcyA9IF9kLmFsbFtpZF07CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZighZWxlcyB8fCBlbGVzLm5vZGVOYW1lKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlcyA9IFtlbGVzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG1vcmUgdGhhbiAxLCBjaG9vc2UgZmlyc3Qg
d2l0aCB0aGUgY29ycmVjdCBpZAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk9MDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCh0ZT1lbGVzW2krK10pKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoKHRlLmF0dHJpYnV0ZXMgJiYgdGUuYXR0cmlidXRlcy5p
ZCAmJiB0ZS5hdHRyaWJ1dGVzLmlkLnZhbHVlID09IGlkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IHRlLmlkID09IGlkKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIH07Cit9ZWxzZXsKKyAgICAgICAgZG9qby5ieUlkID0gZnVuY3Rpb24oaWQsIGRvYyl7
CisgICAgICAgICAgICAgICAgLy8gaW5saW5lJ2QgdHlwZSBjaGVjay4KKyAgICAgICAgICAgICAg
ICAvLyBiZSBzdXJlIHRvIHJldHVybiBudWxsIHBlciBkb2N1bWVudGF0aW9uLCB0byBtYXRjaCBJ
RSBicmFuY2guCisgICAgICAgICAgICAgICAgcmV0dXJuICgodHlwZW9mIGlkID09ICJzdHJpbmci
KSA/IChkb2MgfHwgZG9qby5kb2MpLmdldEVsZW1lbnRCeUlkKGlkKSA6IGlkKSB8fCBudWxsOyAv
LyBEb21Ob2RlCisgICAgICAgIH07Cit9CisvKj09PT09Cit9OworPT09PT0qLworCisoZnVuY3Rp
b24oKXsKKyAgICAgICAgdmFyIGQgPSBkb2pvOworICAgICAgICB2YXIgYnlJZCA9IGQuYnlJZDsK
KworICAgICAgICB2YXIgX2Rlc3Ryb3lDb250YWluZXIgPSBudWxsLAorICAgICAgICAgICAgICAg
IF9kZXN0cm95RG9jOworICAgICAgICAgICAgICAgIGQuYWRkT25XaW5kb3dVbmxvYWQoZnVuY3Rp
b24oKXsKKyAgICAgICAgICAgICAgICBfZGVzdHJveUNvbnRhaW5lciA9IG51bGw7IC8vcHJldmVu
dCBJRSBsZWFrCisgICAgICAgIH0pOworICAgICAgICAKKy8qPT09PT0KKyAgICAgICAgZG9qby5f
ZGVzdHJveUVsZW1lbnQgPSBmdW5jdGlvbihub2RlKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1t
YXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBFeGlzdGluZyBhbGlhcyBmb3Ig
YGRvam8uZGVzdHJveWAuIERlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZAorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBpbiAyLjAKKyAgICAgICAgfQorPT09PT0qLworICAgICAgICBk
b2pvLl9kZXN0cm95RWxlbWVudCA9IGRvam8uZGVzdHJveSA9IGZ1bmN0aW9uKC8qU3RyaW5nfERv
bU5vZGUqL25vZGUpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgUmVtb3ZlcyBhIG5vZGUgZnJvbSBpdHMgcGFyZW50LCBj
bG9iYmVyaW5nIGl0IGFuZCBhbGwgb2YgaXRzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIGNoaWxkcmVuLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAg
ICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmVtb3ZlcyBh
IG5vZGUgZnJvbSBpdHMgcGFyZW50LCBjbG9iYmVyaW5nIGl0IGFuZCBhbGwgb2YgaXRzCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNoaWxkcmVuLiBGdW5jdGlvbiBvbmx5IHdvcmtz
IHdpdGggRG9tTm9kZXMsIGFuZCByZXR1cm5zIG5vdGhpbmcuCisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyAgICAgIG5vZGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIEEgU3RyaW5nIElEIG9yIERvbU5vZGUgcmVmZXJlbmNlIG9mIHRoZSBlbGVtZW50IHRv
IGJlIGRlc3Ryb3llZAorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAg
ICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgRGVzdHJveSBhIG5vZGUgYnlJZDoK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5kZXN0cm95KCJzb21lSWQiKTsK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIERlc3Ryb3kgYWxsIG5vZGVzIGluIGEgbGlzdCBieSByZWZl
cmVuY2U6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8ucXVlcnkoIi5zb21l
Tm9kZSIpLmZvckVhY2goZG9qby5kZXN0cm95KTsKKworICAgICAgICAgICAgICAgIG5vZGUgPSBi
eUlkKG5vZGUpOworICAgICAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBjYW5ub3QgdXNlIF9kZXN0cm95Q29udGFpbmVyLm93bmVyRG9jdW1lbnQgc2luY2UgdGhpcyBj
YW4gdGhyb3cgYW4gZXhjZXB0aW9uIG9uIElFCisgICAgICAgICAgICAgICAgICAgICAgICBpZigh
X2Rlc3Ryb3lDb250YWluZXIgfHwgX2Rlc3Ryb3lEb2MgIT0gZG9jKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2Rlc3Ryb3lDb250YWluZXIgPSBkb2MuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kZXN0cm95RG9jID0gZG9j
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgX2Rl
c3Ryb3lDb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZS5wYXJlbnROb2RlID8gbm9kZS5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKG5vZGUpIDogbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBOT1RFOiBzZWUgaHR0cDovL3RyYWMuZG9qb3Rvb2xraXQub3JnL3RpY2tldC8yOTMxLiBUaGlz
IG1heSBiZSBhIGJ1ZyBhbmQgbm90IGEgZmVhdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAg
X2Rlc3Ryb3lDb250YWluZXIuaW5uZXJIVE1MID0gIiI7CisgICAgICAgICAgICAgICAgfWNhdGNo
KGUpeworICAgICAgICAgICAgICAgICAgICAgICAgLyogc3F1ZWxjaCAqLworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLmlzRGVzY2VuZGFudCA9IGZ1bmN0aW9u
KC8qRG9tTm9kZXxTdHJpbmcqL25vZGUsIC8qRG9tTm9kZXxTdHJpbmcqL2FuY2VzdG9yKXsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIFJldHVybnMgdHJ1ZSBpZiBub2RlIGlzIGEgZGVzY2VuZGFudCBvZiBhbmNlc3Rvcgor
ICAgICAgICAgICAgICAgIC8vICAgICAgbm9kZTogc3RyaW5nIGlkIG9yIG5vZGUgcmVmZXJlbmNl
IHRvIHRlc3QKKyAgICAgICAgICAgICAgICAvLyAgICAgIGFuY2VzdG9yOiBzdHJpbmcgaWQgb3Ig
bm9kZSByZWZlcmVuY2Ugb2YgcG90ZW50aWFsIHBhcmVudCB0byB0ZXN0IGFnYWluc3QKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAg
ICAgLy8gICAgICBUZXN0IGlzIG5vZGUgaWQ9ImJhciIgaXMgYSBkZXNjZW5kYW50IG9mIG5vZGUg
aWQ9ImZvbyIKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgaWYoZG9qby5pc0Rlc2Nl
bmRhbnQoImJhciIsICJmb28iKSl7IC4uLiB9CisgICAgICAgICAgICAgICAgdHJ5eworICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IGJ5SWQobm9kZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhbmNlc3RvciA9IGJ5SWQoYW5jZXN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUobm9kZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vZGUgPT0g
YW5jZXN0b3IpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOyAvLyBCb29sZWFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7IC8qIHNx
dWVsY2gsIHJldHVybiBmYWxzZSAqLyB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBCb29sZWFuCisgICAgICAgIH07CisKKyAgICAgICAgZG9qby5zZXRTZWxlY3RhYmxlID0gZnVu
Y3Rpb24oLypEb21Ob2RlfFN0cmluZyovbm9kZSwgLypCb29sZWFuKi9zZWxlY3RhYmxlKXsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIEVuYWJsZSBvciBkaXNhYmxlIHNlbGVjdGlvbiBvbiBhIG5vZGUKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIG5vZGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGlkIG9y
IHJlZmVyZW5jZSB0byBub2RlCisgICAgICAgICAgICAgICAgLy8gICAgICBzZWxlY3RhYmxlOgor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzdGF0ZSB0byBwdXQgdGhlIG5vZGUgaW4u
IGZhbHNlIGluZGljYXRlcyB1bnNlbGVjdGFibGUsIHRydWUKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgYWxsb3dzIHNlbGVjdGlvbi4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4
YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICBNYWtlIHRoZSBub2RlIGlkPSJiYXIiIHVu
c2VsZWN0YWJsZQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnNldFNlbGVj
dGFibGUoImJhciIpOworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIE1ha2UgdGhlIG5vZGUgaWQ9ImJhciIgc2VsZWN0YWJsZQorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnNldFNlbGVjdGFibGUoImJhciIsIHRydWUp
OworICAgICAgICAgICAgICAgIG5vZGUgPSBieUlkKG5vZGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZihkLmlzTW96aWxsYSl7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLnN0eWxlLk1velVzZXJTZWxlY3QgPSBzZWxlY3RhYmxlID8gIiIgOiAibm9uZSI7CisgICAg
ICAgICAgICAgICAgfWVsc2UgaWYoZC5pc0todG1sIHx8IGQuaXNXZWJLaXQpeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc3R5bGUuS2h0bWxVc2VyU2VsZWN0
ID0gc2VsZWN0YWJsZSA/ICJhdXRvIiA6ICJub25lIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfWVsc2UgaWYoZC5pc0lFKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2
ID0gKG5vZGUudW5zZWxlY3RhYmxlID0gc2VsZWN0YWJsZSA/ICIiIDogIm9uIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkLnF1ZXJ5KCIqIiwgbm9kZSkuZm9yRWFjaCgiaXRlbS51bnNlbGVj
dGFibGUgPSAnIit2KyInIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvL0ZJWE1FOiBlbHNlPyAgT3BlcmE/CisgICAgICAgIH07CisKKyAgICAg
ICAgdmFyIF9pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbigvKkRvbU5vZGUqL25vZGUsIC8qRG9tTm9k
ZSovcmVmKXsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gcmVmLnBhcmVudE5vZGU7Cisg
ICAgICAgICAgICAgICAgaWYocGFyZW50KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dC5pbnNlcnRCZWZvcmUobm9kZSwgcmVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgdmFyIF9pbnNlcnRBZnRlciA9IGZ1bmN0aW9uKC8qRG9tTm9kZSovbm9kZSwg
LypEb21Ob2RlKi9yZWYpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgVHJ5IHRvIGluc2VydCBub2RlIGFmdGVyIHJlZgor
ICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSByZWYucGFyZW50Tm9kZTsKKyAgICAgICAgICAg
ICAgICBpZihwYXJlbnQpeworICAgICAgICAgICAgICAgICAgICAgICAgaWYocGFyZW50Lmxhc3RD
aGlsZCA9PSByZWYpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuYXBw
ZW5kQ2hpbGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCByZWYubmV4
dFNpYmxpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBkb2pvLnBsYWNlID0gZnVuY3Rpb24obm9kZSwgcmVmTm9k
ZSwgcG9zaXRpb24peworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgQXR0ZW1wdCB0byBpbnNlcnQgbm9kZSBpbnRvIHRoZSBE
T00sIGNob29zaW5nIGZyb20gdmFyaW91cyBwb3NpdGlvbmluZyBvcHRpb25zLgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCByZXNvbHZl
ZCB0byBhIERPTSBub2RlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
ICAgICBub2RlOiBTdHJpbmd8RG9tTm9kZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBpZCBvciBub2RlIHJlZmVyZW5jZSwgb3IgSFRNTCBmcmFnbWVudCBzdGFydGluZyB3aXRoICI8
IiB0byBwbGFjZSByZWxhdGl2ZSB0byByZWZOb2RlCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHJlZk5vZGU6IFN0cmluZ3xEb21Ob2RlCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIGlkIG9yIG5vZGUgcmVmZXJlbmNlIHRvIHVzZSBhcyBiYXNpcyBm
b3IgcGxhY2VtZW50CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAg
IHBvc2l0aW9uOiBTdHJpbmd8TnVtYmVyPworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBzdHJpbmcgbm90aW5nIHRoZSBwb3NpdGlvbiBvZiBub2RlIHJlbGF0aXZlIHRvIHJlZk5vZGUg
b3IgYQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBudW1iZXIgaW5kaWNhdGluZyB0
aGUgbG9jYXRpb24gaW4gdGhlIGNoaWxkTm9kZXMgY29sbGVjdGlvbiBvZiByZWZOb2RlLgorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBY2NlcHRlZCBzdHJpbmcgdmFsdWVzIGFyZToK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgKiBiZWZvcmUKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgKiBhZnRlcgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICAqIHJlcGxhY2UKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgKiBvbmx5CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICogZmlyc3QKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIHwgICAgICAgKiBsYXN0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICJmaXJz
dCIgYW5kICJsYXN0IiBpbmRpY2F0ZSBwb3NpdGlvbnMgYXMgY2hpbGRyZW4gb2YgcmVmTm9kZSwg
InJlcGxhY2UiIHJlcGxhY2VzIHJlZk5vZGUsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgICJvbmx5IiByZXBsYWNlcyBhbGwgY2hpbGRyZW4uICBwb3NpdGlvbiBkZWZhdWx0cyB0byAi
bGFzdCIgaWYgbm90IHNwZWNpZmllZAorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gICAgICByZXR1cm5zOiBEb21Ob2RlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIFJldHVybmVkIHZhbHVlcyBpcyB0aGUgZmlyc3QgYXJndW1lbnQgcmVzb2x2ZWQgdG8gYSBE
T00gbm9kZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICAucGxhY2UoKSBpcyBhbHNvIGEgbWV0aG9kIG9mIGBkb2pvLk5vZGVMaXN0YCwgYWxsb3dp
bmcgYGRvam8ucXVlcnlgIG5vZGUgbG9va3Vwcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFBs
YWNlIGEgbm9kZSBieSBzdHJpbmcgaWQgYXMgdGhlIGxhc3QgY2hpbGQgb2YgYW5vdGhlciBub2Rl
IGJ5IHN0cmluZyBpZDoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5wbGFj
ZSgic29tZU5vZGUiLCAiYW5vdGhlck5vZGUiKTsKKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFBs
YWNlIGEgbm9kZSBieSBzdHJpbmcgaWQgYmVmb3JlIGFub3RoZXIgbm9kZSBieSBzdHJpbmcgaWQK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5wbGFjZSgic29tZU5vZGUiLCAi
YW5vdGhlck5vZGUiLCAiYmVmb3JlIik7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBDcmVhdGUg
YSBOb2RlLCBhbmQgcGxhY2UgaXQgaW4gdGhlIGJvZHkgZWxlbWVudCAobGFzdCBjaGlsZCk6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8ucGxhY2UoIjxkaXY+PC9kaXY+Iiwg
ZG9qby5ib2R5KCkpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gZXhh
bXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUHV0IGEgbmV3IExJIGFzIHRo
ZSBmaXJzdCBjaGlsZCBvZiBhIGxpc3QgYnkgaWQ6CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgIGRvam8ucGxhY2UoIjxsaT48L2xpPiIsICJzb21lVWwiLCAiZmlyc3QiKTsKKworICAg
ICAgICAgICAgICAgIHJlZk5vZGUgPSBieUlkKHJlZk5vZGUpOworICAgICAgICAgICAgICAgIGlm
KHR5cGVvZiBub2RlID09ICJzdHJpbmciKXsgLy8gaW5saW5lJ2QgdHlwZSBjaGVjaworICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IC9eXHMqPC8udGVzdChub2RlKSA/IGQuX3RvRG9tKG5v
ZGUsIHJlZk5vZGUub3duZXJEb2N1bWVudCkgOiBieUlkKG5vZGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZih0eXBlb2YgcG9zaXRpb24gPT0gIm51bWJlciIpeyAvLyBp
bmxpbmUnZCB0eXBlIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY24gPSByZWZO
b2RlLmNoaWxkTm9kZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZighY24ubGVuZ3RoIHx8
IGNuLmxlbmd0aCA8PSBwb3NpdGlvbil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlZk5vZGUuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxz
ZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2luc2VydEJlZm9yZShub2RlLCBj
bltwb3NpdGlvbiA8IDAgPyAwIDogcG9zaXRpb25dKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aChwb3NpdGlvbil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImJlZm9y
ZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2luc2VydEJlZm9y
ZShub2RlLCByZWZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiYWZ0ZXIiOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbnNlcnRBZnRlcihub2Rl
LCByZWZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVwbGFjZSI6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmTm9kZS5wYXJlbnROb2RlLnJl
cGxhY2VDaGlsZChub2RlLCByZWZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAi
b25seSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5lbXB0eShy
ZWZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZOb2Rl
LmFwcGVuZENoaWxkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJmaXJzdCI6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVmTm9kZS5maXJz
dENoaWxkKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9pbnNlcnRCZWZvcmUobm9kZSwgcmVmTm9kZS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBlbHNlIGZhbGx0aHJvdWdoLi4uCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IC8vIGFrYTogbGFzdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZk5vZGUuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOyAvLyBEb21Ob2RlCisgICAgICAgIH07CisKKyAgICAgICAgLy8gQm94IGZ1bmN0aW9ucyB3
aWxsIGFzc3VtZSB0aGlzIG1vZGVsLgorICAgICAgICAvLyBPbiBJRS9PcGVyYSwgQk9SREVSX0JP
WCB3aWxsIGJlIHNldCBpZiB0aGUgcHJpbWFyeSBkb2N1bWVudCBpcyBpbiBxdWlya3MgbW9kZS4K
KyAgICAgICAgLy8gQ2FuIGJlIHNldCB0byBjaGFuZ2UgYmVoYXZpb3Igb2YgYm94IHNldHRlcnMu
CisKKyAgICAgICAgLy8gY2FuIGJlIGVpdGhlcjoKKyAgICAgICAgLy8gICAgICAiYm9yZGVyLWJv
eCIKKyAgICAgICAgLy8gICAgICAiY29udGVudC1ib3giIChkZWZhdWx0KQorICAgICAgICBkb2pv
LmJveE1vZGVsID0gImNvbnRlbnQtYm94IjsKKworICAgICAgICAvLyBXZSBwdW50IHBlci1ub2Rl
IGJveCBtb2RlIHRlc3RpbmcgY29tcGxldGVseS4KKyAgICAgICAgLy8gSWYgYW55Ym9keSBjYXJl
cywgd2UgY2FuIHByb3ZpZGUgYW4gYWRkaXRpb25hbCAob3B0aW9uYWwpIHVuaXQKKyAgICAgICAg
Ly8gdGhhdCBvdmVycmlkZXMgZXhpc3RpbmcgY29kZSB0byBpbmNsdWRlIHBlci1ub2RlIGJveCBz
ZW5zaXRpdml0eS4KKworICAgICAgICAvLyBPcGVyYSBkb2N1bWVudGF0aW9uIGNsYWltcyB0aGF0
IE9wZXJhIDkgdXNlcyBib3JkZXItYm94IGluIEJhY2tDb21wYXQgbW9kZS4KKyAgICAgICAgLy8g
YnV0IGV4cGVyaW1lbnRzIChPcGVyYSA5LjEwLjg2Nzkgb24gV2luZG93cyBWaXN0YSkgaW5kaWNh
dGUgdGhhdCBpdCBhY3R1YWxseSBjb250aW51ZXMgdG8gdXNlIGNvbnRlbnQtYm94LgorICAgICAg
ICAvLyBJSVJDLCBlYXJsaWVyIHZlcnNpb25zIG9mIE9wZXJhIGRpZCBpbiBmYWN0IHVzZSBib3Jk
ZXItYm94LgorICAgICAgICAvLyBPcGVyYSBndXlzLCB0aGlzIGlzIHJlYWxseSBjb25mdXNpbmcu
IE9wZXJhIGJlaW5nIGJyb2tlbiBpbiBxdWlya3MgbW9kZSBpcyBub3Qgb3VyIGZhdWx0LgorCisg
ICAgICAgICAgICAgICAgaWYoZC5pc0lFIC8qfHwgZG9qby5pc09wZXJhKi8peworICAgICAgICAg
ICAgICAgIC8vIGNsaWVudCBjb2RlIG1heSBoYXZlIHRvIGFkanVzdCBpZiBjb21wYXRNb2RlIHZh
cmllcyBhY3Jvc3MgaWZyYW1lcworICAgICAgICAgICAgICAgIGQuYm94TW9kZWwgPSBkb2N1bWVu
dC5jb21wYXRNb2RlID09ICJCYWNrQ29tcGF0IiA/ICJib3JkZXItYm94IiA6ICJjb250ZW50LWJv
eCI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisgICAgICAgIC8vIFN0eWxlIEZ1bmN0aW9ucworICAgICAgICAvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIC8vIGdldENvbXB1dGVkU3R5bGUgZHJp
dmVzIG1vc3Qgb2YgdGhlIHN0eWxlIGNvZGUuCisgICAgICAgIC8vIFdoZXJldmVyIHBvc3NpYmxl
LCByZXVzZSB0aGUgcmV0dXJuZWQgb2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyBBUEkg
ZnVuY3Rpb25zIGJlbG93IHRoYXQgbmVlZCB0byBhY2Nlc3MgY29tcHV0ZWQgc3R5bGVzIGFjY2Vw
dCBhbgorICAgICAgICAvLyBvcHRpb25hbCBjb21wdXRlZFN0eWxlIHBhcmFtZXRlci4KKyAgICAg
ICAgLy8gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCwgdGhlIGZ1bmN0aW9ucyB3aWxsIGNh
bGwgZ2V0Q29tcHV0ZWRTdHlsZSB0aGVtc2VsdmVzLgorICAgICAgICAvLyBUaGlzIHdheSwgY2Fs
bGluZyBjb2RlIGNhbiBhY2Nlc3MgY29tcHV0ZWRTdHlsZSBvbmNlLCBhbmQgdGhlbiBwYXNzIHRo
ZSByZWZlcmVuY2UgdG8KKyAgICAgICAgLy8gbXVsdGlwbGUgQVBJIGZ1bmN0aW9ucy4KKworLyo9
PT09PQorICAgICAgICBkb2pvLmdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihub2RlKXsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIFJldHVybnMgYSAiY29tcHV0ZWQgc3R5bGUiIG9iamVjdC4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIEdldHMgYSAiY29tcHV0ZWQgc3R5bGUiIG9iamVjdCB3aGljaCBj
YW4gYmUgdXNlZCB0byBnYXRoZXIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlbmRlcmVkIG5vZGUuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTm90ZSB0
aGF0IHRoaXMgbWF5IGJlaGF2ZSBkaWZmZXJlbnRseSBvbiBkaWZmZXJlbnQgYnJvd3NlcnMuCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFZhbHVlcyBtYXkgaGF2ZSBkaWZmZXJlbnQg
Zm9ybWF0cyBhbmQgdmFsdWUgZW5jb2RpbmdzIGFjcm9zcworICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBicm93c2Vycy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBOb3RlIGFsc28gdGhhdCB0aGlzIG1ldGhvZCBpcyBleHBlbnNpdmUu
ICBXaGVyZXZlciBwb3NzaWJsZSwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcmV1
c2UgdGhlIHJldHVybmVkIG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBVc2UgdGhlIGRvam8uc3R5bGUoKSBtZXRob2QgZm9yIG1vcmUg
Y29uc2lzdGVudCAocGl4ZWxpemVkKQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWVzLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAg
ICBub2RlOiBET01Ob2RlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEEgcmVmZXJl
bmNlIHRvIGEgRE9NIG5vZGUuIERvZXMgTk9UIHN1cHBvcnQgdGFraW5nIGFuCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIElEIHN0cmluZyBmb3Igc3BlZWQgcmVhc29ucy4KKyAgICAg
ICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAg
ICAgIGRvam8uZ2V0Q29tcHV0ZWRTdHlsZShkb2pvLmJ5SWQoJ2ZvbycpKS5ib3JkZXJXaWR0aDsK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIFJldXNpbmcgdGhlIHJldHVybmVkIG9iamVjdCwgYXZvaWRp
bmcgbXVsdGlwbGUgbG9va3VwczoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFy
IGNzID0gZG9qby5nZXRDb21wdXRlZFN0eWxlKGRvam8uYnlJZCgic29tZU5vZGUiKSk7CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciB3ID0gY3Mud2lkdGgsIGggPSBjcy5oZWln
aHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBDU1MyUHJvcGVydGllcworICAgICAgICB9
Cis9PT09PSovCisKKyAgICAgICAgLy8gQWx0aG91Z2ggd2Ugbm9ybWFsbHkgZXNjaGV3IGFyZ3Vt
ZW50IHZhbGlkYXRpb24gYXQgdGhpcworICAgICAgICAvLyBsZXZlbCwgaGVyZSB3ZSB0ZXN0IGFy
Z3VtZW50ICdub2RlJyBmb3IgKGR1Y2spdHlwZSwKKyAgICAgICAgLy8gYnkgdGVzdGluZyBub2Rl
VHlwZSwgZWNhdXNlICdkb2N1bWVudCcgaXMgdGhlICdwYXJlbnROb2RlJyBvZiAnYm9keScKKyAg
ICAgICAgLy8gaXQgaXMgZnJlcXVlbnRseSBzZW50IHRvIHRoaXMgZnVuY3Rpb24gZXZlbgorICAg
ICAgICAvLyB0aG91Z2ggaXQgaXMgbm90IEVsZW1lbnQuCisgICAgICAgIHZhciBnY3M7CisgICAg
ICAgICAgICAgICAgaWYoZC5pc1dlYktpdCl7CisgICAgICAgICAgICAgICAgICAgICAgICBnY3Mg
PSBmdW5jdGlvbigvKkRvbU5vZGUqL25vZGUpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihub2RlLm5vZGVUeXBlID09IDEpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHYgPSBub2RlLm93bmVyRG9jdW1lbnQu
ZGVmYXVsdFZpZXc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBkdi5nZXRD
b21wdXRlZFN0eWxlKG5vZGUsIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZighcyAmJiBub2RlLnN0eWxlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzID0gZHYuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMgfHwge307CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICB9ZWxzZSBpZihkLmlzSUUpeworICAgICAgICAgICAgICAg
IGdjcyA9IGZ1bmN0aW9uKG5vZGUpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgKGFz
IG9mIDcpIGRvZXNuJ3QgZXhwb3NlIEVsZW1lbnQgbGlrZSBzYW5lIGJyb3dzZXJzCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PSAxIC8qIEVMRU1FTlRfTk9E
RSovID8gbm9kZS5jdXJyZW50U3R5bGUgOiB7fTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICB9ZWxzZXsKKyAgICAgICAgICAgICAgICBnY3MgPSBmdW5jdGlvbihub2RlKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09IDEgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZShub2RlLCBudWxsKSA6IHt9OworICAgICAgICAgICAgICAgIH07CisgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBkb2pvLmdldENvbXB1dGVkU3R5bGUgPSBnY3M7CisKKyAgICAg
ICAgICAgICAgICBpZighZC5pc0lFKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuX3RvUGl4
ZWxWYWx1ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0eWxlIHZhbHVlcyBjYW4gYmUgZmxvYXRzLCBjbGllbnQgY29kZSBtYXkgd2FudAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gcm91bmQgZm9yIGludGVnZXIgcGl4ZWxzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7Cisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAg
ICBkLl90b1BpeGVsVmFsdWUgPSBmdW5jdGlvbihlbGVtZW50LCBhdmFsdWUpeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoIWF2YWx1ZSl7IHJldHVybiAwOyB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBvbiBJRTcsIG1lZGl1bSBpcyB1c3VhbGx5IDQgcGl4ZWxzCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZihhdmFsdWUgPT0gIm1lZGl1bSIpeyByZXR1cm4gNDsgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc3R5bGUgdmFsdWVzIGNhbiBiZSBmbG9hdHMsIGNsaWVudCBj
b2RlIG1heQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FudCB0byByb3VuZCB0aGlzIHZh
bHVlIGZvciBpbnRlZ2VyIHBpeGVscy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF2YWx1
ZS5zbGljZSAmJiBhdmFsdWUuc2xpY2UoLTIpID09ICdweCcpeyByZXR1cm4gcGFyc2VGbG9hdChh
dmFsdWUpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoKGVsZW1lbnQpeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc0xlZnQgPSBzdHlsZS5sZWZ0OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnNMZWZ0ID0gcnVudGltZVN0eWxlLmxlZnQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVTdHlsZS5sZWZ0ID0gY3Vy
cmVudFN0eWxlLmxlZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXZhbHVlJyBtYXkgYmUg
aW5jb21wYXRpYmxlIHdpdGggc3R5bGUubGVmdCwgd2hpY2ggY2FuIGNhdXNlIElFIHRvIHRocm93
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBoYXMgYmVl
biBvYnNlcnZlZCBmb3IgYm9yZGVyIHdpZHRocyB1c2luZyAidGhpbiIsICJtZWRpdW0iLCAidGhp
Y2siIGNvbnN0YW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRob3NlIHBhcnRpY3VsYXIgY29uc3RhbnRzIGNvdWxkIGJlIHRyYXBwZWQgYnkgYSBsb29rdXAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgcGVyaGFwcyB0
aGVyZSBhcmUgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlLmxlZnQgPSBhdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXZhbHVlID0gc3R5bGUucGl4ZWxMZWZ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Y2F0Y2goZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gc0xlZnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVTdHlsZS5sZWZ0ID0gcnNMZWZ0OworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF2YWx1ZTsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHB4ID0g
ZC5fdG9QaXhlbFZhbHVlOworCisgICAgICAgIC8vIEZJWE1FOiB0aGVyZSBvcGFjaXR5IHF1aXJr
cyBvbiBGRiB0aGF0IHdlIGhhdmVuJ3QgcG9ydGVkIG92ZXIuIEhybS4KKyAgICAgICAgLyo9PT09
PQorICAgICAgICBkb2pvLl9nZXRPcGFjaXR5ID0gZnVuY3Rpb24obm9kZSl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBvcGFjaXR5IG9mIHRoZSBwYXNzZWQg
bm9kZSBhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZmxvYXRp
bmctcG9pbnQgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICBub2RlOiBEb21Ob2RlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgYSByZWZlcmVuY2UgdG8gYSBET00gbm9kZS4gRG9lcyBOT1Qgc3VwcG9ydCB0YWtpbmcg
YW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJRCBzdHJpbmcgZm9y
IHNwZWVkIHJlYXNvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHJldHVybnM6
IE51bWJlciBiZXR3ZWVuIDAgYW5kIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gTnVtYmVyCisgICAgICAgIH0KKyAgICAgICAgPT09PT0qLworCisgICAgICAgICAgICAgICAg
dmFyIGFzdHIgPSAiRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEiOworICAgICAgICB2
YXIgYWYgPSBmdW5jdGlvbihuLCBmKXsKKyAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbi5maWx0ZXJzLml0ZW0oYXN0cik7CisgICAgICAgICAgICAg
ICAgfWNhdGNoKGUpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYgPyB7fSA6IG51
bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgICAgICAgICAgZG9q
by5fZ2V0T3BhY2l0eSA9CisgICAgICAgICAgICAgICAgICAgICAgICBkLmlzSUUgPCA5ID8gZnVu
Y3Rpb24obm9kZSl7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhZihub2RlKS5PcGFjaXR5IC8gMTAwOyAvLyBOdW1i
ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8vIE51bWJlcgorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0gOgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24obm9kZSl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2NzKG5vZGUpLm9wYWNp
dHk7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAvKj09PT09CisgICAgICAgIGRvam8u
X3NldE9wYWNpdHkgPSBmdW5jdGlvbihub2RlLCBvcGFjaXR5KXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBzZXQgdGhlIG9wYWNpdHkgb2YgdGhlIHBhc3NlZCBub2RlIHBvcnRhYmx5LiBSZXR1
cm5zIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5ldyBvcGFj
aXR5IG9mIHRoZSBub2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBub2RlOiBE
T01Ob2RlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSByZWZlcmVu
Y2UgdG8gYSBET00gbm9kZS4gRG9lcyBOT1Qgc3VwcG9ydCB0YWtpbmcgYW4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJRCBzdHJpbmcgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIG9wYWNpdHk6IE51bWJlcgor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEEgTnVtYmVyIGJldHdlZW4g
MCBhbmQgMS4gMCBzcGVjaWZpZXMgdHJhbnNwYXJlbnQuCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIHJldHVybnM6IE51bWJlciBiZXR3ZWVuIDAgYW5kIDEKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gTnVtYmVyCisgICAgICAgIH0KKyAgICAgICAgPT09PT0qLwor
CisgICAgICAgIGRvam8uX3NldE9wYWNpdHkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkLmlzSUUgPCA5ID8gZnVuY3Rpb24oLypEb21Ob2RlKi9ub2RlLCAvKk51bWJlciovb3Bh
Y2l0eSl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3YgPSBvcGFjaXR5ICogMTAwLCBv
cGFxdWUgPSBvcGFjaXR5ID09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnN0eWxl
Lnpvb20gPSBvcGFxdWUgPyAiIiA6IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFh
Zihub2RlKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9wYXF1ZSl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wYWNpdHk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS5zdHlsZS5maWx0ZXIgKz0gIiBwcm9naWQ6IiArIGFzdHIgKyAiKE9wYWNp
dHk9IiArIG92ICsgIikiOworICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFmKG5vZGUsIDEpLk9wYWNpdHkgPSBvdjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gb24gSUU3
IEFscGhhKEZpbHRlciBvcGFjaXR5PTEwMCkgbWFrZXMgdGV4dCBsb29rIGZ1enp5IHNvIGRpc2Fi
bGUgaXQgYWx0b2dldGhlciAoYnVnICMyNjYxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
YnV0IHN0aWxsIHVwZGF0ZSB0aGUgb3BhY2l0eSB2YWx1ZSBzbyB3ZSBjYW4gZ2V0IGEgY29ycmVj
dCByZWFkaW5nIGlmIGl0IGlzIHJlYWQgbGF0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBh
Zihub2RlLCAxKS5FbmFibGVkID0gIW9wYXF1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
aWYobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICJ0ciIpeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkLnF1ZXJ5KCI+IHRkIiwgbm9kZSkuZm9yRWFjaChmdW5jdGlvbihp
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLl9zZXRPcGFjaXR5
KGksIG9wYWNpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGFj
aXR5OworICAgICAgICAgICAgICAgIH0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbihub2RlLCBvcGFjaXR5KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBub2RlLnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5OworICAgICAgICAgICAgICAgIH07CisKKyAg
ICAgICAgdmFyIF9waXhlbE5hbWVzQ2FjaGUgPSB7CisgICAgICAgICAgICAgICAgbGVmdDogdHJ1
ZSwgdG9wOiB0cnVlCisgICAgICAgIH07CisgICAgICAgIHZhciBfcGl4ZWxSZWdFeHAgPSAvbWFy
Z2lufHBhZGRpbmd8d2lkdGh8aGVpZ2h0fG1heHxtaW58b2Zmc2V0LzsgIC8vIHxib3JkZXIKKyAg
ICAgICAgdmFyIF90b1N0eWxlVmFsdWUgPSBmdW5jdGlvbihub2RlLCB0eXBlLCB2YWx1ZSl7Cisg
ICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTsgLy8gRklYTUU6IHNob3Vs
ZCB3ZSByZWFsbHkgYmUgZG9pbmcgc3RyaW5nIGNhc2UgY29udmVyc2lvbiBoZXJlPyBTaG91bGQg
d2UgY2FjaGUgaXQ/IE5lZWQgdG8gcHJvZmlsZSEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoZC5pc0lFKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlID09ICJh
dXRvIil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGUgPT0gImhlaWdo
dCIpeyByZXR1cm4gbm9kZS5vZmZzZXRIZWlnaHQ7IH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYodHlwZSA9PSAid2lkdGgiKXsgcmV0dXJuIG5vZGUub2Zmc2V0V2lkdGg7IH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5
cGUgPT0gImZvbnR3ZWlnaHQiKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoKHZhbHVlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDcwMDogcmV0dXJuICJib2xkIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDQwMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiByZXR1cm4gIm5vcm1hbCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEodHlwZSBpbiBfcGl4ZWxOYW1lc0NhY2hlKSl7
CisgICAgICAgICAgICAgICAgICAgICAgICBfcGl4ZWxOYW1lc0NhY2hlW3R5cGVdID0gX3BpeGVs
UmVnRXhwLnRlc3QodHlwZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiBfcGl4ZWxOYW1lc0NhY2hlW3R5cGVdID8gcHgobm9kZSwgdmFsdWUpIDogdmFsdWU7Cisg
ICAgICAgIH07CisKKyAgICAgICAgdmFyIF9mbG9hdFN0eWxlID0gZC5pc0lFID8gInN0eWxlRmxv
YXQiIDogImNzc0Zsb2F0IiwKKyAgICAgICAgICAgICAgICBfZmxvYXRBbGlhc2VzID0geyAiY3Nz
RmxvYXQiOiBfZmxvYXRTdHlsZSwgInN0eWxlRmxvYXQiOiBfZmxvYXRTdHlsZSwgImZsb2F0Ijog
X2Zsb2F0U3R5bGUgfQorICAgICAgICA7CisKKyAgICAgICAgLy8gcHVibGljIEFQSQorCisgICAg
ICAgIGRvam8uc3R5bGUgPSBmdW5jdGlvbiggIC8qRG9tTm9kZXxTdHJpbmcqLyBub2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlN0
cmluZz98T2JqZWN0PyovIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKlN0cmluZz8qLyB2YWx1ZSl7CisgICAgICAgICAgICAg
ICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBY2Nl
c3NlcyBzdHlsZXMgb24gYSBub2RlLiBJZiAyIGFyZ3VtZW50cyBhcmUKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgcGFzc2VkLCBhY3RzIGFzIGEgZ2V0dGVyLiBJZiAzIGFyZ3VtZW50
cyBhcmUgcGFzc2VkLCBhY3RzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFzIGEg
c2V0dGVyLgorICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIEdldHRpbmcgdGhlIHN0eWxlIHZhbHVlIHVzZXMgdGhlIGNv
bXB1dGVkIHN0eWxlIGZvciB0aGUgbm9kZSwgc28gdGhlIHZhbHVlCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHdpbGwgYmUgYSBjYWxjdWxhdGVkIHZhbHVlLCBub3QganVzdCB0aGUg
aW1tZWRpYXRlIG5vZGUuc3R5bGUgdmFsdWUuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIEFsc28gd2hlbiBnZXR0aW5nIHZhbHVlcywgdXNlIHNwZWNpZmljIHN0eWxlIG5hbWVzLAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBsaWtlICJib3JkZXJCb3R0b21XaWR0aCIg
aW5zdGVhZCBvZiAiYm9yZGVyIiBzaW5jZSBjb21wb3VuZCB2YWx1ZXMgbGlrZQorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICAiYm9yZGVyIiBhcmUgbm90IG5lY2Vzc2FyaWx5IHJlZmxl
Y3RlZCBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgSWYgeW91
IHdhbnQgdG8gZ2V0IG5vZGUgZGltZW5zaW9ucywgdXNlIGBkb2pvLm1hcmdpbkJveCgpYCwKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYGRvam8uY29udGVudEJveCgpYCBvciBgZG9q
by5wb3NpdGlvbigpYC4KKyAgICAgICAgICAgICAgICAvLyAgICAgIG5vZGU6CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGlkIG9yIHJlZmVyZW5jZSB0byBub2RlIHRvIGdldC9zZXQg
c3R5bGUgZm9yCisgICAgICAgICAgICAgICAgLy8gICAgICBzdHlsZToKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgdGhlIHN0eWxlIHByb3BlcnR5IHRvIHNldCBpbiBET00tYWNjZXNz
b3IgZm9ybWF0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICgiYm9yZGVyV2lkdGgi
LCBub3QgImJvcmRlci13aWR0aCIpIG9yIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZQorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBwYWlycyBzdWl0YWJsZSBmb3Igc2V0dGluZyBlYWNo
IHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8vICAgICAgdmFsdWU6CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIElmIHBhc3NlZCwgc2V0cyB2YWx1ZSBvbiB0aGUgbm9kZSBmb3Ig
c3R5bGUsIGhhbmRsaW5nCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNyb3NzLWJy
b3dzZXIgY29uY2VybnMuICBXaGVuIHNldHRpbmcgYSBwaXhlbCB2YWx1ZSwKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgYmUgc3VyZSB0byBpbmNsdWRlICJweCIgaW4gdGhlIHZhbHVl
LiBGb3IgaW5zdGFuY2UsIHRvcDogIjIwMHB4Ii4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgT3RoZXJ3aXNlLCBpbiBzb21lIGNhc2VzLCBzb21lIGJyb3dzZXJzIHdpbGwgbm90IGFw
cGx5IHRoZSBzdHlsZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIFBhc3Npbmcgb25seSBhbiBJRCBvciBub2RlIHJldHVy
bnMgdGhlIGNvbXB1dGVkIHN0eWxlIG9iamVjdCBvZgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB0aGUgbm9kZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5z
dHlsZSgidGhpbmdlciIpOworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgUGFzc2luZyBhIG5vZGUgYW5kIGEgc3R5bGUgcHJv
cGVydHkgcmV0dXJucyB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBub3JtYWxpemVkLCBjb21wdXRlZCB2YWx1ZSBmb3IgdGhhdCBwcm9wZXJ0eToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5zdHlsZSgidGhpbmdlciIsICJvcGFjaXR5Iik7
IC8vIDEgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
ICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBQYXNzaW5nIGEg
bm9kZSwgYSBzdHlsZSBwcm9wZXJ0eSwgYW5kIGEgdmFsdWUgY2hhbmdlcyB0aGUKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgY3VycmVudCBkaXNwbGF5IG9mIHRoZSBub2RlIGFuZCBy
ZXR1cm5zIHRoZSBuZXcgY29tcHV0ZWQgdmFsdWUKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgZG9qby5zdHlsZSgidGhpbmdlciIsICJvcGFjaXR5IiwgMC41KTsgLy8gPT0gMC41Cisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFBhc3NpbmcgYSBub2RlLCBhbiBvYmplY3Qtc3R5
bGUgc3R5bGUgcHJvcGVydHkgc2V0cyBlYWNoIG9mIHRoZSB2YWx1ZXMgaW4gdHVybiBhbmQgcmV0
dXJucyB0aGUgY29tcHV0ZWQgc3R5bGUgb2JqZWN0IG9mIHRoZSBub2RlOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICBkb2pvLnN0eWxlKCJ0aGluZ2VyIiwgeworICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICJvcGFjaXR5IjogMC41LAorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICJib3JkZXIiOiAiM3B4IHNvbGlkIGJsYWNrIiwK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAiaGVpZ2h0IjogIjMwMHB4
IgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgV2hlbiB0aGUgQ1NTIHN0eWxlIHByb3BlcnR5IGlzIGh5cGhlbmF0ZWQsIHRo
ZSBKYXZhU2NyaXB0IHByb3BlcnR5IGlzIGNhbWVsQ2FzZWQuCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGZvbnQtc2l6ZSBiZWNvbWVzIGZvbnRTaXplLCBhbmQgc28gb24uCisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uc3R5bGUoInRoaW5nZXIiLHsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBmb250U2l6ZToiMTRwdCIsCisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzoiMS4yZW0i
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBkb2pvLk5vZGVMaXN0IGltcGxlbWVudHMgLnN0eWxlKCkgdXNpbmcgdGhlIHNh
bWUgc3ludGF4LCBvbWl0dGluZyB0aGUgIm5vZGUiIHBhcmFtZXRlciwgY2FsbGluZworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2pvLnN0eWxlKCkgb24gZXZlcnkgZWxlbWVudCBv
ZiB0aGUgbGlzdC4gU2VlOiBgZG9qby5xdWVyeSgpYCBhbmQgYGRvam8uTm9kZUxpc3QoKWAKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5xdWVyeSgiLnNvbWVDbGFzc05hbWUi
KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOworICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICAvLyBvcgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5
KCIjYmF6ID4gZGl2Iikuc3R5bGUoeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAg
ICAgICAgIG9wYWNpdHk6MC43NSwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAg
ICAgICBmb250U2l6ZToiMTNwdCIKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICB2YXIgbiA9IGJ5SWQobm9kZSksIGFyZ3MgPSBhcmd1bWVudHMu
bGVuZ3RoLCBvcCA9IChzdHlsZSA9PSAib3BhY2l0eSIpOworICAgICAgICAgICAgICAgIHN0eWxl
ID0gX2Zsb2F0QWxpYXNlc1tzdHlsZV0gfHwgc3R5bGU7CisgICAgICAgICAgICAgICAgaWYoYXJn
cyA9PSAzKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcCA/IGQuX3NldE9wYWNp
dHkobiwgdmFsdWUpIDogbi5zdHlsZVtzdHlsZV0gPSB2YWx1ZTsgLypOdW1iZXIqLworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihhcmdzID09IDIgJiYgb3ApeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuX2dldE9wYWNpdHkobik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHZhciBzID0gZ2NzKG4pOworICAgICAgICAgICAgICAgIGlm
KGFyZ3MgPT0gMiAmJiB0eXBlb2Ygc3R5bGUgIT0gInN0cmluZyIpeyAvLyBpbmxpbmUnZCB0eXBl
IGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIHggaW4gc3R5bGUpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnN0eWxlKG5vZGUsIHgsIHN0eWxlW3hdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gKGFyZ3MgPT0g
MSkgPyBzIDogX3RvU3R5bGVWYWx1ZShuLCBzdHlsZSwgc1tzdHlsZV0gfHwgbi5zdHlsZVtzdHls
ZV0pOyAvKiBDU1MyUHJvcGVydGllc3x8U3RyaW5nfHxOdW1iZXIgKi8KKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLyBCb3gg
RnVuY3Rpb25zCisgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAg
ICAgICAgZG9qby5fZ2V0UGFkRXh0ZW50cyA9IGZ1bmN0aW9uKC8qRG9tTm9kZSovbiwgLypPYmpl
Y3QqL2NvbXB1dGVkU3R5bGUpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmV0dXJucyBvYmplY3Qgd2l0aCBzcGVjaWFs
IHZhbHVlcyBzcGVjaWZpY2FsbHkgdXNlZnVsIGZvciBub2RlCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGZpdHRpbmcuCisgICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlv
bjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmV0dXJucyBhbiBvYmplY3Qgd2l0
aCBgd2AsIGBoYCwgYGxgLCBgdGAgcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICBsL3QgPSBsZWZ0L3RvcCBwYWRkaW5nIChyZXNwZWN0aXZlbHkpCisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgdyA9IHRoZSB0b3RhbCBvZiB0
aGUgbGVmdCBhbmQgcmlnaHQgcGFkZGluZworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICAgICAgICAgIGggPSB0aGUgdG90YWwgb2YgdGhlIHRvcCBhbmQgYm90dG9tIHBhZGRpbmcKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgSWYgJ25vZGUnIGhhcyBwb3NpdGlvbiwgbC90
IGZvcm1zIHRoZSBvcmlnaW4gZm9yIGNoaWxkIG5vZGVzLgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBUaGUgdy9oIGFyZSB1c2VkIGZvciBjYWxjdWxhdGluZyBib3hlcy4KKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgTm9ybWFsbHkgYXBwbGljYXRpb24gY29kZSB3aWxs
IG5vdCBuZWVkIHRvIGludm9rZSB0aGlzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IGRpcmVjdGx5LCBhbmQgd2lsbCB1c2UgdGhlIC4uLmJveC4uLiBmdW5jdGlvbnMgaW5zdGVhZC4K
KyAgICAgICAgICAgICAgICB2YXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBjb21wdXRl
ZFN0eWxlfHxnY3MobiksCisgICAgICAgICAgICAgICAgICAgICAgICBsID0gcHgobiwgcy5wYWRk
aW5nTGVmdCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gcHgobiwgcy5wYWRkaW5nVG9w
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgbDog
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICB3OiBsK3B4KG4sIHMucGFkZGluZ1JpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGg6
IHQrcHgobiwgcy5wYWRkaW5nQm90dG9tKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07
CisKKyAgICAgICAgZG9qby5fZ2V0Qm9yZGVyRXh0ZW50cyA9IGZ1bmN0aW9uKC8qRG9tTm9kZSov
biwgLypPYmplY3QqL2NvbXB1dGVkU3R5bGUpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3Vt
bWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcmV0dXJucyBhbiBvYmplY3Qg
d2l0aCBwcm9wZXJ0aWVzIHVzZWZ1bCBmb3Igbm90aW5nIHRoZSBib3JkZXIKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgZGltZW5zaW9ucy4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAqIGwvdCA9IHRo
ZSBzdW0gb2YgbGVmdC90b3AgYm9yZGVyIChyZXNwZWN0aXZlbHkpCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgICogdyA9IHRoZSBzdW0gb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGJvcmRl
cgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAqIGggPSB0aGUgc3VtIG9mIHRoZSB0
b3AgYW5kIGJvdHRvbSBib3JkZXIKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBUaGUgdy9oIGFyZSB1c2VkIGZvciBjYWxjdWxhdGluZyBib3hlcy4K
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTm9ybWFsbHkgYXBwbGljYXRpb24gY29k
ZSB3aWxsIG5vdCBuZWVkIHRvIGludm9rZSB0aGlzCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGRpcmVjdGx5LCBhbmQgd2lsbCB1c2UgdGhlIC4uLmJveC4uLiBmdW5jdGlvbnMgaW5z
dGVhZC4KKyAgICAgICAgICAgICAgICB2YXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lID0g
Im5vbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbXB1dGVkU3R5bGV8fGdjcyhu
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsID0gKHMuYm9yZGVyTGVmdFN0eWxlICE9IG5l
ID8gcHgobiwgcy5ib3JkZXJMZWZ0V2lkdGgpIDogMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBidCA9IChzLmJvcmRlclRvcFN0eWxlICE9IG5lID8gcHgobiwgcy5ib3JkZXJUb3BXaWR0aCkg
OiAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAg
bDogYmwsCisgICAgICAgICAgICAgICAgICAgICAgICB0OiBidCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHc6IGJsICsgKHMuYm9yZGVyUmlnaHRTdHlsZSE9bmUgPyBweChuLCBzLmJvcmRlclJp
Z2h0V2lkdGgpIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICBoOiBidCArIChzLmJvcmRl
ckJvdHRvbVN0eWxlIT1uZSA/IHB4KG4sIHMuYm9yZGVyQm90dG9tV2lkdGgpIDogMCkKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIGRvam8uX2dldFBhZEJvcmRlckV4
dGVudHMgPSBmdW5jdGlvbigvKkRvbU5vZGUqL24sIC8qT2JqZWN0Ki9jb21wdXRlZFN0eWxlKXsK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIFJldHVybnMgb2JqZWN0IHdpdGggcHJvcGVydGllcyB1c2VmdWwgZm9yIGJveCBm
aXR0aW5nIHdpdGgKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcmVnYXJkcyB0byBw
YWRkaW5nLgorICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICAqIGwvdCA9IHRoZSBzdW0gb2YgbGVmdC90b3AgcGFkZGluZyBhbmQg
bGVmdC90b3AgYm9yZGVyIChyZXNwZWN0aXZlbHkpCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgICogdyA9IHRoZSBzdW0gb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgYW5kIGJv
cmRlcgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAqIGggPSB0aGUgc3VtIG9mIHRo
ZSB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nIGFuZCBib3JkZXIKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGUgdy9oIGFyZSB1c2VkIGZvciBjYWxj
dWxhdGluZyBib3hlcy4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTm9ybWFsbHkg
YXBwbGljYXRpb24gY29kZSB3aWxsIG5vdCBuZWVkIHRvIGludm9rZSB0aGlzCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGRpcmVjdGx5LCBhbmQgd2lsbCB1c2UgdGhlIC4uLmJveC4u
LiBmdW5jdGlvbnMgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICB2YXIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHMgPSBjb21wdXRlZFN0eWxlfHxnY3MobiksCisgICAgICAgICAgICAgICAgICAg
ICAgICBwID0gZC5fZ2V0UGFkRXh0ZW50cyhuLCBzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGIgPSBkLl9nZXRCb3JkZXJFeHRlbnRzKG4sIHMpOworICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgICAgICBsOiBwLmwgKyBiLmwsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0OiBwLnQgKyBiLnQsCisgICAgICAgICAgICAgICAgICAgICAgICB3OiBwLncgKyBi
LncsCisgICAgICAgICAgICAgICAgICAgICAgICBoOiBwLmggKyBiLmgKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICB9OworCisgICAgICAgIGRvam8uX2dldE1hcmdpbkV4dGVudHMgPSBmdW5j
dGlvbihuLCBjb21wdXRlZFN0eWxlKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHJldHVybnMgb2JqZWN0IHdpdGggcHJv
cGVydGllcyB1c2VmdWwgZm9yIGJveCBmaXR0aW5nIHdpdGgKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgcmVnYXJkcyB0byBib3ggbWFyZ2lucyAoaS5lLiwgdGhlIG91dGVyLWJveCku
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgKiBs
L3QgPSBtYXJnaW5MZWZ0LCBtYXJnaW5Ub3AsIHJlc3BlY3RpdmVseQorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICAqIHcgPSB0b3RhbCB3aWR0aCwgbWFyZ2luIGluY2x1c2l2ZQorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAqIGggPSB0b3RhbCBoZWlnaHQsIG1hcmdpbiBp
bmNsdXNpdmUKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBUaGUgdy9oIGFyZSB1c2VkIGZvciBjYWxjdWxhdGluZyBib3hlcy4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgTm9ybWFsbHkgYXBwbGljYXRpb24gY29kZSB3aWxsIG5vdCBu
ZWVkIHRvIGludm9rZSB0aGlzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRpcmVj
dGx5LCBhbmQgd2lsbCB1c2UgdGhlIC4uLmJveC4uLiBmdW5jdGlvbnMgaW5zdGVhZC4KKyAgICAg
ICAgICAgICAgICB2YXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBjb21wdXRlZFN0eWxl
fHxnY3MobiksCisgICAgICAgICAgICAgICAgICAgICAgICBsID0gcHgobiwgcy5tYXJnaW5MZWZ0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBweChuLCBzLm1hcmdpblRvcCksCisgICAg
ICAgICAgICAgICAgICAgICAgICByID0gcHgobiwgcy5tYXJnaW5SaWdodCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBiID0gcHgobiwgcy5tYXJnaW5Cb3R0b20pOworICAgICAgICAgICAgICAg
IGlmKGQuaXNXZWJLaXQgJiYgKHMucG9zaXRpb24gIT0gImFic29sdXRlIikpeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFNhZmFyaSdzIHZlcnNpb24gb2YgdGhlIGNvbXB1dGVk
IHJpZ2h0IG1hcmdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgdGhlIHNwYWNlIGJl
dHdlZW4gb3VyIHJpZ2h0IGVkZ2UgYW5kIHRoZSByaWdodCBlZGdlCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBvZiBvdXIgb2Zmc2V0UGFyZW50LgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2hhdCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdGhlIGFjdHVhbCBtYXJnaW4gdmFsdWUgYXMK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRldGVybWluZWQgYnkgQ1NTLgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSGFjayBzb2x1dGlvbiBpcyB0byBhc3N1bWUgbGVmdC9yaWdodCBt
YXJnaW5zIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBsOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
ICAgICAgICAgbDogbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICB3OiBsK3IsCisgICAgICAgICAgICAgICAgICAgICAgICBoOiB0K2IKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIC8vIEJveCBnZXR0ZXJzIHdv
cmsgaW4gYW55IGJveCBjb250ZXh0IGJlY2F1c2Ugb2Zmc2V0V2lkdGgvY2xpZW50V2lkdGgKKyAg
ICAgICAgLy8gYXJlIGludmFyaWFudCB3cnQgYm94IGNvbnRleHQKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gVGhleSBkbyAqbm90KiB3b3JrIGZvciBkaXNwbGF5OiBpbmxpbmUgb2JqZWN0cyB0aGF0
IGhhdmUgcGFkZGluZyBzdHlsZXMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgdXNlciBhZ2VudCBp
Z25vcmVzIHBhZGRpbmcgKGl0J3MgYm9ndXMgc3R5bGluZyBpbiBhbnkgY2FzZSkKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gQmUgY2FyZWZ1bCB3aXRoIElNR3MgYmVjYXVzZSB0aGV5IGFyZSBpbmxp
bmUgb3IgYmxvY2sgZGVwZW5kaW5nIG9uCisgICAgICAgIC8vIGJyb3dzZXIgYW5kIGJyb3dzZXIg
bW9kZS4KKworICAgICAgICAvLyBBbHRob3VnaCBpdCB3b3VsZCBiZSBlYXNpZXIgdG8gcmVhZCwg
dGhlcmUgYXJlIG5vdCBzZXBhcmF0ZSB2ZXJzaW9ucyBvZgorICAgICAgICAvLyBfZ2V0TWFyZ2lu
Qm94IGZvciBlYWNoIGJyb3dzZXIgYmVjYXVzZToKKyAgICAgICAgLy8gMS4gdGhlIGJyYW5jaGlu
ZyBpcyBub3QgZXhwZW5zaXZlCisgICAgICAgIC8vIDIuIGZhY3RvcmluZyB0aGUgc2hhcmVkIGNv
ZGUgd2FzdGVzIGN5Y2xlcyAoZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCkKKyAgICAgICAgLy8gMy4g
ZHVwbGljYXRpbmcgdGhlIHNoYXJlZCBjb2RlIHdhc3RlcyBieXRlcworCisgICAgICAgIGRvam8u
X2dldE1hcmdpbkJveCA9IGZ1bmN0aW9uKC8qRG9tTm9kZSovbm9kZSwgLypPYmplY3QqL2NvbXB1
dGVkU3R5bGUpeworICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgZW5jb2RlcyB0aGUgd2lkdGgs
IGhlaWdodCwgbGVmdCBhbmQgdG9wCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHBv
c2l0aW9ucyBvZiB0aGUgbm9kZSdzIG1hcmdpbiBib3guCisgICAgICAgICAgICAgICAgdmFyIHMg
PSBjb21wdXRlZFN0eWxlIHx8IGdjcyhub2RlKSwgbWUgPSBkLl9nZXRNYXJnaW5FeHRlbnRzKG5v
ZGUsIHMpOworICAgICAgICAgICAgICAgIHZhciBsID0gbm9kZS5vZmZzZXRMZWZ0IC0gbWUubCwg
dCA9IG5vZGUub2Zmc2V0VG9wIC0gbWUudCwgcCA9IG5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYoZC5pc01veil7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBNb3ppbGxhOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgb2Zmc2V0UGFy
ZW50IGhhcyBhIGNvbXB1dGVkIG92ZXJmbG93ICE9IHZpc2libGUsIHRoZSBvZmZzZXRMZWZ0IGlz
IGRlY3JlYXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgdGhlIHBhcmVudCdzIGJv
cmRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY29tcHV0
ZSB0aGUgcGFyZW50J3Mgc3R5bGUsIHNvIGluc3RlYWQgd2UgZXhhbWluZSBub2RlJ3MKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGNvbXB1dGVkIGxlZnQvdG9wIHdoaWNoIGlzIG1vcmUgc3Rh
YmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsID0gcGFyc2VGbG9hdChzLmxlZnQp
LCBzdCA9IHBhcnNlRmxvYXQocy50b3ApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlz
TmFOKHNsKSAmJiAhaXNOYU4oc3QpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bCA9IHNsLCB0ID0gc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgY2hpbGQncyBjb21wdXRlZCBsZWZ0L3RvcCBh
cmUgbm90IHBhcnNlYWJsZSBhcyBhIG51bWJlciAoZS5nLiAiYXV0byIpLCB3ZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG5vIGNob2ljZSBidXQgdG8gZXhhbWluZSB0
aGUgcGFyZW50J3MgY29tcHV0ZWQgc3R5bGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmKHAgJiYgcC5zdHlsZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHBjcyA9IGdjcyhwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZihwY3Mub3ZlcmZsb3cgIT0gInZpc2libGUiKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZSA9IGQuX2dldEJvcmRlckV4dGVu
dHMocCwgcGNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGwgKz0gYmUubCwgdCArPSBiZS50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH1lbHNlIGlmKGQuaXNPcGVyYSB8fCAo
ZC5pc0lFID4gNyAmJiAhZC5pc1F1aXJrcykpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T24gT3BlcmEgYW5kIElFIDgsIG9mZnNldExlZnQvVG9wIGluY2x1ZGVzIHRoZSBwYXJlbnQncyBi
b3JkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHApeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiZSA9IGQuX2dldEJvcmRlckV4dGVudHMocCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGwgLT0gYmUubDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdCAtPSBiZS50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGw6IGwsCisgICAgICAgICAgICAgICAgICAgICAgICB0OiB0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgdzogbm9kZS5vZmZzZXRXaWR0aCArIG1lLncsCisgICAgICAg
ICAgICAgICAgICAgICAgICBoOiBub2RlLm9mZnNldEhlaWdodCArIG1lLmgKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkb2pvLl9nZXRNYXJnaW5TaXpl
ID0gZnVuY3Rpb24oLypEb21Ob2RlKi9ub2RlLCAvKk9iamVjdCovY29tcHV0ZWRTdHlsZSl7Cisg
ICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgIHJldHVy
bnMgYW4gb2JqZWN0IHRoYXQgZW5jb2RlcyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZgorICAgICAg
ICAgICAgICAgIC8vICAgICAgdGhlIG5vZGUncyBtYXJnaW4gYm94CisgICAgICAgICAgICAgICAg
bm9kZSA9IGJ5SWQobm9kZSk7CisgICAgICAgICAgICAgICAgdmFyIG1lID0gZC5fZ2V0TWFyZ2lu
RXh0ZW50cyhub2RlLCBjb21wdXRlZFN0eWxlIHx8IGdjcyhub2RlKSk7CisKKyAgICAgICAgICAg
ICAgICB2YXIgc2l6ZSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHc6IChzaXplLnJpZ2h0IC0g
c2l6ZS5sZWZ0KSArIG1lLncsCisgICAgICAgICAgICAgICAgICAgICAgICBoOiAoc2l6ZS5ib3R0
b20gLSBzaXplLnRvcCkgKyBtZS5oCisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZG9qby5fZ2V0Q29udGVudEJveCA9IGZ1bmN0aW9uKG5vZGUsIGNvbXB1dGVkU3R5bGUp
eworICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgZW5jb2RlcyB0aGUgd2lkdGgsIGhlaWdodCwg
bGVmdCBhbmQgdG9wCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHBvc2l0aW9ucyBv
ZiB0aGUgbm9kZSdzIGNvbnRlbnQgYm94LCBpcnJlc3BlY3RpdmUgb2YgdGhlCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGN1cnJlbnQgYm94IG1vZGVsLgorCisgICAgICAgICAgICAg
ICAgLy8gY2xpZW50V2lkdGgvSGVpZ2h0IGFyZSBpbXBvcnRhbnQgc2luY2UgdGhlIGF1dG9tYXRp
Y2FsbHkgYWNjb3VudCBmb3Igc2Nyb2xsYmFycworICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNr
IHRvIG9mZnNldFdpZHRoL0hlaWdodCBmb3Igc3BlY2lhbCBjYXNlcyAoc2VlICMzMzc4KQorICAg
ICAgICAgICAgICAgIHZhciBzID0gY29tcHV0ZWRTdHlsZSB8fCBnY3Mobm9kZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBwZSA9IGQuX2dldFBhZEV4dGVudHMobm9kZSwgcyksCisgICAgICAg
ICAgICAgICAgICAgICAgICBiZSA9IGQuX2dldEJvcmRlckV4dGVudHMobm9kZSwgcyksCisgICAg
ICAgICAgICAgICAgICAgICAgICB3ID0gbm9kZS5jbGllbnRXaWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGgKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgaWYoIXcpewor
ICAgICAgICAgICAgICAgICAgICAgICAgdyA9IG5vZGUub2Zmc2V0V2lkdGgsIGggPSBub2RlLm9m
ZnNldEhlaWdodDsKKyAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGggPSBub2RlLmNsaWVudEhlaWdodCwgYmUudyA9IGJlLmggPSAwOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPbiBPcGVyYSwgb2Zmc2V0TGVmdCBpbmNsdWRlcyB0
aGUgcGFyZW50J3MgYm9yZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGQu
aXNPcGVyYSl7IHBlLmwgKz0gYmUubDsgcGUudCArPSBiZS50OyB9OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgbDogcGUu
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHBlLnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICB3OiB3IC0gcGUudyAtIGJlLncsCisgICAgICAgICAgICAgICAgICAgICAgICBoOiBoIC0g
cGUuaCAtIGJlLmgKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIGRv
am8uX2dldEJvcmRlckJveCA9IGZ1bmN0aW9uKG5vZGUsIGNvbXB1dGVkU3R5bGUpeworICAgICAg
ICAgICAgICAgIHZhciBzID0gY29tcHV0ZWRTdHlsZSB8fCBnY3Mobm9kZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBwZSA9IGQuX2dldFBhZEV4dGVudHMobm9kZSwgcyksCisgICAgICAgICAg
ICAgICAgICAgICAgICBjYiA9IGQuX2dldENvbnRlbnRCb3gobm9kZSwgcykKKyAgICAgICAgICAg
ICAgICA7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGw6IGNiLmwgLSBwZS5sLAorICAgICAgICAgICAgICAgICAgICAgICAgdDogY2IudCAtIHBlLnQs
CisgICAgICAgICAgICAgICAgICAgICAgICB3OiBjYi53ICsgcGUudywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGg6IGNiLmggKyBwZS5oCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsK
KworICAgICAgICAvLyBCb3ggc2V0dGVycyBkZXBlbmQgb24gYm94IGNvbnRleHQgYmVjYXVzZSBp
bnRlcnByZXRhdGlvbiBvZiB3aWR0aC9oZWlnaHQgc3R5bGVzCisgICAgICAgIC8vIHZhcnkgd3J0
IGJveCBjb250ZXh0LgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgdmFsdWUgb2YgZG9qby5i
b3hNb2RlbCBpcyB1c2VkIHRvIGRldGVybWluZSBib3ggY29udGV4dC4KKyAgICAgICAgLy8gZG9q
by5ib3hNb2RlbCBjYW4gYmUgc2V0IGRpcmVjdGx5IHRvIGNoYW5nZSBiZWhhdmlvci4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gQmV3YXJlIG9mIGRpc3BsYXk6IGlubGluZSBvYmplY3RzIHRoYXQg
aGF2ZSBwYWRkaW5nIHN0eWxlcworICAgICAgICAvLyBiZWNhdXNlIHRoZSB1c2VyIGFnZW50IGln
bm9yZXMgcGFkZGluZyAoaXQncyBhIGJvZ3VzIHNldHVwIGFueXdheSkKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gQmUgY2FyZWZ1bCB3aXRoIElNR3MgYmVjYXVzZSB0aGV5IGFyZSBpbmxpbmUgb3Ig
YmxvY2sgZGVwZW5kaW5nIG9uCisgICAgICAgIC8vIGJyb3dzZXIgYW5kIGJyb3dzZXIgbW9kZS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gRWxlbWVudHMgb3RoZXIgdGhhbiBESVYgbWF5IGhhdmUg
c3BlY2lhbCBxdWlya3MsIGxpa2UgYnVpbHQtaW4KKyAgICAgICAgLy8gbWFyZ2lucyBvciBwYWRk
aW5nLCBvciB2YWx1ZXMgbm90IGRldGVjdGFibGUgdmlhIGNvbXB1dGVkU3R5bGUuCisgICAgICAg
IC8vIEluIHBhcnRpY3VsYXIsIG1hcmdpbnMgb24gVEFCTEUgZG8gbm90IHNlZW1zIHRvIGFwcGVh
cgorICAgICAgICAvLyBhdCBhbGwgaW4gY29tcHV0ZWRTdHlsZSBvbiBNb3ppbGxhLgorCisgICAg
ICAgIGRvam8uX3NldEJveCA9IGZ1bmN0aW9uKC8qRG9tTm9kZSovbm9kZSwgLypOdW1iZXI/Ki9s
LCAvKk51bWJlcj8qL3QsIC8qTnVtYmVyPyovdywgLypOdW1iZXI/Ki9oLCAvKlN0cmluZz8qL3Up
eworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgc2V0cyB3aWR0aC9oZWlnaHQvbGVmdC90b3AgaW4gdGhlIGN1cnJlbnQgKG5h
dGl2ZSkgYm94LW1vZGVsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRpbWVudGlv
bnMuIFVzZXMgdGhlIHVuaXQgcGFzc2VkIGluIHUuCisgICAgICAgICAgICAgICAgLy8gICAgICBu
b2RlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBET00gTm9kZSByZWZlcmVuY2Uu
IElkIHN0cmluZyBub3Qgc3VwcG9ydGVkIGZvciBwZXJmb3JtYW5jZQorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICByZWFzb25zLgorICAgICAgICAgICAgICAgIC8vICAgICAgbDoKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbGVmdCBvZmZzZXQgZnJvbSBwYXJlbnQuCisg
ICAgICAgICAgICAgICAgLy8gICAgICB0OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICB0b3Agb2Zmc2V0IGZyb20gcGFyZW50LgorICAgICAgICAgICAgICAgIC8vICAgICAgdzoKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgd2lkdGggaW4gY3VycmVudCBib3ggbW9kZWwu
CisgICAgICAgICAgICAgICAgLy8gICAgICBoOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICB3aWR0aCBpbiBjdXJyZW50IGJveCBtb2RlbC4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IHU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHVuaXQgbWVhc3VyZSB0byB1c2Ug
Zm9yIG90aGVyIG1lYXN1cmVzLiBEZWZhdWx0cyB0byAicHgiLgorICAgICAgICAgICAgICAgIHUg
PSB1IHx8ICJweCI7CisgICAgICAgICAgICAgICAgdmFyIHMgPSBub2RlLnN0eWxlOworICAgICAg
ICAgICAgICAgIGlmKCFpc05hTihsKSl7IHMubGVmdCA9IGwgKyB1OyB9CisgICAgICAgICAgICAg
ICAgaWYoIWlzTmFOKHQpKXsgcy50b3AgPSB0ICsgdTsgfQorICAgICAgICAgICAgICAgIGlmKHcg
Pj0gMCl7IHMud2lkdGggPSB3ICsgdTsgfQorICAgICAgICAgICAgICAgIGlmKGggPj0gMCl7IHMu
aGVpZ2h0ID0gaCArIHU7IH0KKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLl9pc0J1dHRvblRh
ZyA9IGZ1bmN0aW9uKC8qRG9tTm9kZSovbm9kZSkgeworICAgICAgICAgICAgICAgIC8vIHN1bW1h
cnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRydWUgaWYgdGhlIG5vZGUgaXMg
QlVUVE9OIG9yIElOUFVULnR5cGU9ImJ1dHRvbiIuCisgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGUudGFnTmFtZSA9PSAiQlVUVE9OIgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS50
YWdOYW1lPT0iSU5QVVQiICYmIChub2RlLmdldEF0dHJpYnV0ZSgidHlwZSIpfHwnJykudG9VcHBl
ckNhc2UoKSA9PSAiQlVUVE9OIjsgLy8gYm9vbGVhbgorICAgICAgICB9OworCisgICAgICAgIGRv
am8uX3VzZXNCb3JkZXJCb3ggPSBmdW5jdGlvbigvKkRvbU5vZGUqL25vZGUpeworICAgICAgICAg
ICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
VHJ1ZSBpZiB0aGUgbm9kZSB1c2VzIGJvcmRlci1ib3ggbGF5b3V0LgorCisgICAgICAgICAgICAg
ICAgLy8gV2UgY291bGQgdGVzdCB0aGUgY29tcHV0ZWQgc3R5bGUgb2Ygbm9kZSB0byBzZWUgaWYg
YSBwYXJ0aWN1bGFyIGJveAorICAgICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHNwZWNpZmllZCwg
YnV0IHRoZXJlIGFyZSBkZXRhaWxzIGFuZCB3ZSBjaG9vc2Ugbm90IHRvIGJvdGhlci4KKworICAg
ICAgICAgICAgICAgIC8vIFRBQkxFIGFuZCBCVVRUT04gKGFuZCBJTlBVVCB0eXBlPWJ1dHRvbikg
YXJlIGFsd2F5cyBib3JkZXItYm94IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgLy8gSWYg
eW91IGhhdmUgYXNzaWduZWQgYSBkaWZmZXJlbnQgYm94IHRvIGVpdGhlciBvbmUgdmlhIENTUyB0
aGVuCisgICAgICAgICAgICAgICAgLy8gYm94IGZ1bmN0aW9ucyB3aWxsIGJyZWFrLgorCisgICAg
ICAgICAgICAgICAgdmFyIG4gPSBub2RlLnRhZ05hbWU7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGQuYm94TW9kZWw9PSJib3JkZXItYm94IiB8fCBuPT0iVEFCTEUiIHx8IGQuX2lzQnV0dG9uVGFn
KG5vZGUpOyAvLyBib29sZWFuCisgICAgICAgIH07CisKKyAgICAgICAgZG9qby5fc2V0Q29udGVu
dFNpemUgPSBmdW5jdGlvbigvKkRvbU5vZGUqL25vZGUsIC8qTnVtYmVyKi93aWR0aFB4LCAvKk51
bWJlciovaGVpZ2h0UHgsIC8qT2JqZWN0Ki9jb21wdXRlZFN0eWxlKXsKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFNldHMg
dGhlIHNpemUgb2YgdGhlIG5vZGUncyBjb250ZW50cywgaXJyZXNwZWN0aXZlIG9mIG1hcmdpbnMs
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHBhZGRpbmcsIG9yIGJvcmRlcnMuCisg
ICAgICAgICAgICAgICAgaWYoZC5fdXNlc0JvcmRlckJveChub2RlKSl7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcGIgPSBkLl9nZXRQYWRCb3JkZXJFeHRlbnRzKG5vZGUsIGNvbXB1dGVk
U3R5bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYod2lkdGhQeCA+PSAwKXsgd2lkdGhQ
eCArPSBwYi53OyB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZihoZWlnaHRQeCA+PSAwKXsg
aGVpZ2h0UHggKz0gcGIuaDsgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBk
Ll9zZXRCb3gobm9kZSwgTmFOLCBOYU4sIHdpZHRoUHgsIGhlaWdodFB4KTsKKyAgICAgICAgfTsK
KworICAgICAgICBkb2pvLl9zZXRNYXJnaW5Cb3ggPSBmdW5jdGlvbigvKkRvbU5vZGUqL25vZGUs
ICAvKk51bWJlcj8qL2xlZnRQeCwgLypOdW1iZXI/Ki90b3BQeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypOdW1iZXI/Ki93aWR0aFB4LCAvKk51bWJl
cj8qL2hlaWdodFB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKk9iamVjdCovY29tcHV0ZWRTdHlsZSl7CisgICAgICAgICAgICAgICAgLy8gICAgICBz
dW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzZXRzIHRoZSBzaXplIG9m
IHRoZSBub2RlJ3MgbWFyZ2luIGJveCBhbmQgcGxhY2VtZW50CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIChsZWZ0L3RvcCksIGlycmVzcGVjdGl2ZSBvZiBib3ggbW9kZWwuIFRoaW5r
IG9mIGl0IGFzIGEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcGFzc3Rocm91Z2gg
dG8gZG9qby5fc2V0Qm94IHRoYXQgaGFuZGxlcyBib3gtbW9kZWwgdmFnYXJpZXMgZm9yCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHlvdS4KKworICAgICAgICAgICAgICAgIHZhciBz
ID0gY29tcHV0ZWRTdHlsZSB8fCBnY3Mobm9kZSksCisgICAgICAgICAgICAgICAgLy8gU29tZSBl
bGVtZW50cyBoYXZlIHNwZWNpYWwgcGFkZGluZywgbWFyZ2luLCBhbmQgYm94LW1vZGVsIHNldHRp
bmdzLgorICAgICAgICAgICAgICAgIC8vIFRvIHVzZSBib3ggZnVuY3Rpb25zIHlvdSBtYXkgbmVl
ZCB0byBzZXQgcGFkZGluZywgbWFyZ2luIGV4cGxpY2l0bHkuCisgICAgICAgICAgICAgICAgLy8g
Q29udHJvbGxpbmcgYm94LW1vZGVsIGlzIGhhcmRlciwgaW4gYSBwaW5jaCB5b3UgbWlnaHQgc2V0
IGRvam8uYm94TW9kZWwuCisgICAgICAgICAgICAgICAgICAgICAgICBiYiA9IGQuX3VzZXNCb3Jk
ZXJCb3gobm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICBwYiA9IGJiID8gX25pbEV4dGVu
dHMgOiBkLl9nZXRQYWRCb3JkZXJFeHRlbnRzKG5vZGUsIHMpCisgICAgICAgICAgICAgICAgOwor
ICAgICAgICAgICAgICAgIGlmKGQuaXNXZWJLaXQpeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gb24gU2FmYXJpICgzLjEuMiksIGJ1dHRvbiBub2RlcyB3aXRoIG5vIGV4cGxpY2l0IHNpemUg
aGF2ZSBhIGRlZmF1bHQgbWFyZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXR0aW5n
IGFuIGV4cGxpY2l0IHNpemUgZWxpbWluYXRlcyB0aGUgbWFyZ2luLgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBzd2l6emxlIHRoZSB3aWR0aCB0byBnZXQgY29ycmVjdCBt
YXJnaW4gcmVhZGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGQuX2lzQnV0dG9uVGFn
KG5vZGUpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5zID0gbm9kZS5z
dHlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2lkdGhQeCA+PSAwICYm
ICFucy53aWR0aCkgeyBucy53aWR0aCA9ICI0cHgiOyB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKGhlaWdodFB4ID49IDAgJiYgIW5zLmhlaWdodCkgeyBucy5oZWlnaHQgPSAi
NHB4IjsgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2YXIgbWIgPSBkLl9nZXRNYXJnaW5FeHRlbnRzKG5vZGUsIHMpOworICAg
ICAgICAgICAgICAgIGlmKHdpZHRoUHggPj0gMCl7IHdpZHRoUHggPSBNYXRoLm1heCh3aWR0aFB4
IC0gcGIudyAtIG1iLncsIDApOyB9CisgICAgICAgICAgICAgICAgaWYoaGVpZ2h0UHggPj0gMCl7
IGhlaWdodFB4ID0gTWF0aC5tYXgoaGVpZ2h0UHggLSBwYi5oIC0gbWIuaCwgMCk7IH0KKyAgICAg
ICAgICAgICAgICBkLl9zZXRCb3gobm9kZSwgbGVmdFB4LCB0b3BQeCwgd2lkdGhQeCwgaGVpZ2h0
UHgpOworICAgICAgICB9OworCisgICAgICAgIHZhciBfbmlsRXh0ZW50cyA9IHsgbDowLCB0OjAs
IHc6MCwgaDowIH07CisKKyAgICAgICAgLy8gcHVibGljIEFQSQorCisgICAgICAgIGRvam8ubWFy
Z2luQm94ID0gZnVuY3Rpb24oLypEb21Ob2RlfFN0cmluZyovbm9kZSwgLypPYmplY3Q/Ki9ib3gp
eworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgR2V0dGVyL3NldHRlciBmb3IgdGhlIG1hcmdpbi1ib3ggb2Ygbm9kZS4KKyAg
ICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBHZXR0ZXIvc2V0dGVyIGZvciB0aGUgbWFyZ2luLWJveCBvZiBub2RlLgorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBpbiB0aGUgZXhw
ZWN0ZWQgZm9ybWF0IG9mIGJveCAocmVnYXJkbGVzcworICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBpZiBib3ggaXMgcGFzc2VkKS4gVGhlIG9iamVjdCBtaWdodCBsb29rIGxpa2U6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgYHsgbDogNTAsIHQ6IDIwMCwg
dzogMzAwOiBoOiAxNTAgfWAKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZm9yIGEg
bm9kZSBvZmZzZXQgZnJvbSBpdHMgcGFyZW50IDUwcHggdG8gdGhlIGxlZnQsIDIwMHB4IGZyb20K
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIHRvcCB3aXRoIGEgbWFyZ2luIHdp
ZHRoIG9mIDMwMHB4IGFuZCBhIG1hcmdpbi1oZWlnaHQgb2YKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgMTUwcHguCisgICAgICAgICAgICAgICAgLy8gICAgICBub2RlOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBpZCBvciByZWZlcmVuY2UgdG8gRE9NIE5vZGUgdG8g
Z2V0L3NldCBib3ggZm9yCisgICAgICAgICAgICAgICAgLy8gICAgICBib3g6CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIElmIHBhc3NlZCwgZGVub3RlcyB0aGF0IGRvam8ubWFyZ2lu
Qm94KCkgc2hvdWxkCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHVwZGF0ZS9zZXQg
dGhlIG1hcmdpbiBib3ggZm9yIG5vZGUuIEJveCBpcyBhbiBvYmplY3QgaW4gdGhlCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGFib3ZlIGZvcm1hdC4gQWxsIHByb3BlcnRpZXMgYXJl
IG9wdGlvbmFsIGlmIHBhc3NlZC4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICBSZXRyaWV2ZSB0aGUgbWFyZ2luYm94IG9mIGEgcGFzc2Vk
IG5vZGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIGJveCA9IGRvam8ubWFy
Z2luQm94KCJzb21lTm9kZUlkIik7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGNv
bnNvbGUuZGlyKGJveCk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAg
ICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICBTZXQgYSBub2RlJ3MgbWFyZ2lu
Ym94IHRvIHRoZSBzaXplIG9mIGFub3RoZXIgbm9kZQorICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICB2YXIgYm94ID0gZG9qby5tYXJnaW5Cb3goInNvbWVOb2RlSWQiKTsKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5tYXJnaW5Cb3goInNvbWVPdGhlck5vZGUiLCBi
b3gpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHZhciBuID0gYnlJZChub2Rl
KSwgcyA9IGdjcyhuKSwgYiA9IGJveDsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWIgPyBkLl9n
ZXRNYXJnaW5Cb3gobiwgcykgOiBkLl9zZXRNYXJnaW5Cb3gobiwgYi5sLCBiLnQsIGIudywgYi5o
LCBzKTsgLy8gT2JqZWN0CisgICAgICAgIH07CisKKyAgICAgICAgZG9qby5jb250ZW50Qm94ID0g
ZnVuY3Rpb24oLypEb21Ob2RlfFN0cmluZyovbm9kZSwgLypPYmplY3Q/Ki9ib3gpeworICAgICAg
ICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgR2V0dGVyL3NldHRlciBmb3IgdGhlIGNvbnRlbnQtYm94IG9mIG5vZGUuCisgICAgICAgICAg
ICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgUmV0dXJucyBhbiBvYmplY3QgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdCBvZiBib3ggKHJlZ2Fy
ZGxlc3MgaWYgYm94IGlzIHBhc3NlZCkuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IFRoZSBvYmplY3QgbWlnaHQgbG9vayBsaWtlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgIGB7IGw6IDUwLCB0OiAyMDAsIHc6IDMwMDogaDogMTUwIH1gCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGZvciBhIG5vZGUgb2Zmc2V0IGZyb20gaXRzIHBhcmVu
dCA1MHB4IHRvIHRoZSBsZWZ0LCAyMDBweCBmcm9tCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIHRoZSB0b3Agd2l0aCBhIGNvbnRlbnQgd2lkdGggb2YgMzAwcHggYW5kIGEgY29udGVu
dC1oZWlnaHQgb2YKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgMTUwcHguIE5vdGUg
dGhhdCB0aGUgY29udGVudCBib3ggbWF5IGhhdmUgYSBtdWNoIGxhcmdlciBib3JkZXIKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgb3IgbWFyZ2luIGJveCwgZGVwZW5kaW5nIG9uIHRo
ZSBib3ggbW9kZWwgY3VycmVudGx5IGluIHVzZSBhbmQKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgQ1NTIHZhbHVlcyBzZXQvaW5oZXJpdGVkIGZvciBub2RlLgorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBXaGlsZSB0aGUgZ2V0dGVyIHdpbGwgcmV0dXJuIHRvcCBhbmQg
bGVmdCB2YWx1ZXMsIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzZXR0ZXIg
b25seSBhY2NlcHRzIHNldHRpbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQuCisgICAgICAgICAgICAg
ICAgLy8gICAgICBub2RlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZCBvciBy
ZWZlcmVuY2UgdG8gRE9NIE5vZGUgdG8gZ2V0L3NldCBib3ggZm9yCisgICAgICAgICAgICAgICAg
Ly8gICAgICBib3g6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmIHBhc3NlZCwg
ZGVub3RlcyB0aGF0IGRvam8uY29udGVudEJveCgpIHNob3VsZAorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB1cGRhdGUvc2V0IHRoZSBjb250ZW50IGJveCBmb3Igbm9kZS4gQm94IGlz
IGFuIG9iamVjdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYWJvdmUg
Zm9ybWF0LCBidXQgb25seSB3ICh3aWR0aCkgYW5kIGggKGhlaWdodCkgYXJlIHN1cHBvcnRlZC4K
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlv
bmFsIGlmIHBhc3NlZC4KKyAgICAgICAgICAgICAgICB2YXIgbiA9IGJ5SWQobm9kZSksIHMgPSBn
Y3MobiksIGIgPSBib3g7CisgICAgICAgICAgICAgICAgcmV0dXJuICFiID8gZC5fZ2V0Q29udGVu
dEJveChuLCBzKSA6IGQuX3NldENvbnRlbnRTaXplKG4sIGIudywgYi5oLCBzKTsgLy8gT2JqZWN0
CisgICAgICAgIH07CisKKyAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KyAgICAgICAgLy8gUG9zaXRpb25pbmcKKyAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKworICAgICAgICB2YXIgX3N1bUFuY2VzdG9yUHJvcGVydGllcyA9IGZ1bmN0aW9u
KG5vZGUsIHByb3ApeworICAgICAgICAgICAgICAgIGlmKCEobm9kZSA9IChub2RlfHwwKS5wYXJl
bnROb2RlKSl7cmV0dXJuIDA7fQorICAgICAgICAgICAgICAgIHZhciB2YWwsIHJldFZhbCA9IDAs
IF9iID0gZC5ib2R5KCk7CisgICAgICAgICAgICAgICAgd2hpbGUobm9kZSAmJiBub2RlLnN0eWxl
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGdjcyhub2RlKS5wb3NpdGlvbiA9PSAiZml4
ZWQiKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBub2RlW3By
b3BdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0VmFsICs9IHZhbCAtIDA7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG9wZXJhIGFuZCBraHRtbCAjYm9keSAmICNodG1sIGhhcyB0aGUgc2FtZSB2
YWx1ZXMsIHdlIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCBv
bmUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobm9kZSA9PSBfYil7
IGJyZWFrOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmV0VmFsOyAgLy8gICAgICBpbnRlZ2VyCisgICAgICAgIH07CisKKyAg
ICAgICAgZG9qby5fZG9jU2Nyb2xsID0gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICB2YXIg
biA9IGQuZ2xvYmFsOworICAgICAgICAgICAgICAgIHJldHVybiAicGFnZVhPZmZzZXQiIGluIG4K
KyAgICAgICAgICAgICAgICAgICAgICAgID8geyB4Om4ucGFnZVhPZmZzZXQsIHk6bi5wYWdlWU9m
ZnNldCB9CisgICAgICAgICAgICAgICAgICAgICAgICA6IChuID0gZC5pc1F1aXJrcz8gZC5kb2Mu
Ym9keSA6IGQuZG9jLmRvY3VtZW50RWxlbWVudCwgeyB4OmQuX2ZpeEllQmlEaVNjcm9sbExlZnQo
bi5zY3JvbGxMZWZ0IHx8IDApLCB5Om4uc2Nyb2xsVG9wIHx8IDAgfSk7CisgICAgICAgIH07CisK
KyAgICAgICAgZG9qby5faXNCb2R5THRyID0gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIl9ib2R5THRyIiBpbiBkPyBkLl9ib2R5THRyIDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGQuX2JvZHlMdHIgPSAoZC5ib2R5KCkuZGlyIHx8IGQuZG9jLmRvY3VtZW50RWxlbWVudC5k
aXIgfHwgImx0ciIpLnRvTG93ZXJDYXNlKCkgPT0gImx0ciI7IC8vIEJvb2xlYW4KKyAgICAgICAg
fTsKKworICAgICAgICAgICAgICAgIGRvam8uX2dldEllRG9jdW1lbnRFbGVtZW50T2Zmc2V0ID0g
ZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHJldHVybnMgdGhlIG9mZnNldCBpbiB4IGFuZCB5IGZyb20g
dGhlIGRvY3VtZW50IGJvZHkgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IHZpc3VhbCBlZGdlIG9mIHRoZSBwYWdlCisgICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlw
dGlvbjoKKyAgICAgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHZhbHVlcyBpbiBJRSBjb250
YWluIGFuIG9mZnNldDoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBl
dmVudC5jbGllbnRYCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgZXZl
bnQuY2xpZW50WQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIG5vZGUu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgIG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIEJ1dCBvdGhlciBwb3NpdGlvbiByZWxhdGVkIHZhbHVlcyBk
byBub3QgY29udGFpbiB0aGlzIG9mZnNldCwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgc3VjaCBhcyBub2RlLm9mZnNldExlZnQsIG5vZGUub2Zmc2V0VG9wLCBub2RlLnN0eWxlLmxl
ZnQgYW5kCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5vZGUuc3R5bGUudG9wLiBU
aGUgb2Zmc2V0IGlzIGFsd2F5cyAoMiwgMikgaW4gTFRSIGRpcmVjdGlvbi4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgV2hlbiB0aGUgYm9keSBpcyBpbiBSVEwgZGlyZWN0aW9uLCB0
aGUgb2Zmc2V0IGNvdW50cyB0aGUgd2lkdGgKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgb2YgbGVmdCBzY3JvbGwgYmFyJ3Mgd2lkdGguICBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRo
ZSBhY3R1YWwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb2Zmc2V0LgorCisgICAg
ICAgICAgICAgICAgLy9OT1RFOiBhc3N1bWVzIHdlJ3JlIGJlaW5nIGNhbGxlZCBpbiBhbiBJRSBi
cm93c2VyCisKKyAgICAgICAgICAgICAgICB2YXIgZGUgPSBkLmRvYy5kb2N1bWVudEVsZW1lbnQ7
IC8vIG9ubHkgZGVhbCB3aXRoIEhUTUwgZWxlbWVudCBoZXJlLCBfYWJzIGhhbmRsZXMgYm9keS9x
dWlya3MKKworICAgICAgICAgICAgICAgIGlmKGQuaXNJRSA8IDgpeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHIgPSBkZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgLy8gd29ya3Mgd2Vs
bCBmb3IgSUU2KworICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdyZWN0
IGxlZnQsdG9wID0gJyArIHIubGVmdCsnLCcrci50b3AgKyAnLCBodG1sIGNsaWVudCBsZWZ0L3Rv
cCA9ICcgKyBkZS5jbGllbnRMZWZ0KycsJytkZS5jbGllbnRUb3AgKyAnLCBydGwgPSAnICsgKCFk
Ll9pc0JvZHlMdHIoKSkgKyAnLCBxdWlya3MgPSAnICsgZC5pc1F1aXJrcyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbCA9IHIubGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ID0gci50b3A7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihkLmlzSUUgPCA3KXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCArPSBkZS5jbGllbnRMZWZ0OyAgICAgLy8g
c2Nyb2xsYmFyIHNpemUgaW4gc3RyaWN0L1JUTCwgb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHQgKz0gZGUuY2xpZW50VG9wOyAgICAgIC8vIEhUTUwgYm9yZGVyIHNpemUgaW4g
c3RyaWN0CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBsIDwgMD8gMCA6
IGwsIC8vIEZSQU1FIGVsZW1lbnQgYm9yZGVyIHNpemUgY2FuIGxlYWQgdG8gaW5hY2N1cmF0ZSBu
ZWdhdGl2ZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogdCA8IDA/
IDAgOiB0CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH1lbHNl
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMAor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIGRvam8uX2ZpeEllQmlEaVNjcm9sbExlZnQgPSBmdW5jdGlv
bigvKkludGVnZXIqLyBzY3JvbGxMZWZ0KXsKKyAgICAgICAgICAgICAgICAvLyBJbiBSVEwgZGly
ZWN0aW9uLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBhIG5lZ2F0aXZlIHZhbHVlLCBidXQgSUUKKyAg
ICAgICAgICAgICAgICAvLyByZXR1cm5zIGEgcG9zaXRpdmUgb25lLiBBbGwgY29kZXMgdXNpbmcg
ZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQKKyAgICAgICAgICAgICAgICAvLyBtdXN0IGNhbGwg
dGhpcyBmdW5jdGlvbiB0byBmaXggdGhpcyBlcnJvciwgb3RoZXJ3aXNlIHRoZSBwb3NpdGlvbgor
ICAgICAgICAgICAgICAgIC8vIHdpbGwgb2Zmc2V0IHRvIHJpZ2h0IHdoZW4gdGhlcmUgaXMgYSBo
b3Jpem9udGFsIHNjcm9sbGJhci4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgaWUgPSBkLmlzSUU7CisgICAgICAgICAgICAgICAgaWYoaWUgJiYgIWQuX2lzQm9keUx0cigp
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxayA9IGQuaXNRdWlya3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlID0gcWsgPyBkLmRvYy5ib2R5IDogZC5kb2MuZG9j
dW1lbnRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoaWUgPT0gNiAmJiAhcWsg
JiYgZC5nbG9iYWwuZnJhbWVFbGVtZW50ICYmIGRlLnNjcm9sbEhlaWdodCA+IGRlLmNsaWVudEhl
aWdodCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbExlZnQgKz0gZGUu
Y2xpZW50TGVmdDsgLy8gd29ya2Fyb3VuZCBpZTYrc3RyaWN0K3J0bCtpZnJhbWUrdmVydGljYWwt
c2Nyb2xsYmFyIGJ1ZyB3aGVyZSBjbGllbnRXaWR0aCBpcyB0b28gc21hbGwgYnkgY2xpZW50TGVm
dCBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoaWUgPCA4IHx8IHFrKSA/IChzY3JvbGxMZWZ0ICsgZGUuY2xpZW50V2lkdGgg
LSBkZS5zY3JvbGxXaWR0aCkgOiAtc2Nyb2xsTGVmdDsgLy8gSW50ZWdlcgorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbExlZnQ7
IC8vIEludGVnZXIKKyAgICAgICAgfTsKKworICAgICAgICAvLyBGSVhNRTogbmVlZCBhIHNldHRl
ciBmb3IgY29vcmRzIG9yIGEgbW92ZVRvISEKKyAgICAgICAgZG9qby5fYWJzID0gZG9qby5wb3Np
dGlvbiA9IGZ1bmN0aW9uKC8qRG9tTm9kZSovbm9kZSwgLypCb29sZWFuPyovaW5jbHVkZVNjcm9s
bCl7CisgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBHZXRzIHRoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgcGFzc2VkIGVs
ZW1lbnQgcmVsYXRpdmUgdG8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIHZp
ZXdwb3J0IChpZiBpbmNsdWRlU2Nyb2xsPT1mYWxzZSksIG9yIHJlbGF0aXZlIHRvIHRoZQorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2N1bWVudCByb290IChpZiBpbmNsdWRlU2Ny
b2xsPT10cnVlKS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAg
ZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMgYW4g
b2JqZWN0IG9mIHRoZSBmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgIHsgeDogMTAwLCB5OiAzMDAsIHc6IDIwLCBoOiAxNSB9CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIElmIGluY2x1ZGVTY3JvbGw9PXRydWUsIHRoZSB4IGFuZCB5IHZhbHVlcyB3
aWxsIGluY2x1ZGUgYW55CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvY3VtZW50
IG9mZnNldHMgdGhhdCBtYXkgYWZmZWN0IHRoZSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdmlld3BvcnQuCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIFVzZXMgdGhlIGJvcmRlci1ib3ggbW9kZWwgKGluY2x1c2l2ZSBvZiBi
b3JkZXIgYW5kIHBhZGRpbmcgYnV0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5v
dCBtYXJnaW4pLiAgRG9lcyBub3QgYWN0IGFzIGEgc2V0dGVyLgorCisgICAgICAgICAgICAgICAg
bm9kZSA9IGJ5SWQobm9kZSk7CisgICAgICAgICAgICAgICAgdmFyICAgICBkYiA9IGQuYm9keSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgZGggPSBkYi5wYXJlbnROb2RlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCA9IHsgeDogcmV0LmxlZnQsIHk6IHJldC50b3AsIHc6IHJl
dC5yaWdodCAtIHJldC5sZWZ0LCBoOiByZXQuYm90dG9tIC0gcmV0LnRvcCB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGQuaXNJRSl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE9uIElFIHRoZXJlJ3MgYSAycHggb2Zmc2V0IHRoYXQgd2Ug
bmVlZCB0byBhZGp1c3QgZm9yLCBzZWUgX2dldEllRG9jdW1lbnRFbGVtZW50T2Zmc2V0KCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGQuX2dldEllRG9jdW1l
bnRFbGVtZW50T2Zmc2V0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Zml4ZXMgdGhlIHBvc2l0aW9uIGluIElFLCBxdWlya3MgbW9kZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXQueCAtPSBvZmZzZXQueCArIChkLmlzUXVpcmtzID8gZGIuY2xpZW50
TGVmdCtkYi5vZmZzZXRMZWZ0IDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldC55IC09IG9mZnNldC55ICsgKGQuaXNRdWlya3MgPyBkYi5jbGllbnRUb3ArZGIub2Zmc2V0
VG9wIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihkLmlzRkYgPT0gMyl7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIEZGMyB5b3UgaGF2ZSB0byBz
dWJ0cmFjdCB0aGUgZG9jdW1lbnQgZWxlbWVudCBtYXJnaW5zLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGaXhlZCBpbiBGRjMuNSB0aG91Z2guCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjcyA9IGdjcyhkaCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldC54IC09IHB4KGRoLCBjcy5tYXJnaW5MZWZ0KSArIHB4KGRoLCBjcy5ib3Jk
ZXJMZWZ0V2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQueSAtPSBw
eChkaCwgY3MubWFyZ2luVG9wKSArIHB4KGRoLCBjcy5ib3JkZXJUb3BXaWR0aCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFj
Y291bnQgZm9yIGRvY3VtZW50IHNjcm9sbGluZworICAgICAgICAgICAgICAgIGlmKGluY2x1ZGVT
Y3JvbGwpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjcm9sbCA9IGQuX2RvY1Njcm9s
bCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnggKz0gc2Nyb2xsLng7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXQueSArPSBzY3JvbGwueTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OyAvLyBPYmplY3QKKyAgICAgICAgfTsKKworICAg
ICAgICBkb2pvLmNvb3JkcyA9IGZ1bmN0aW9uKC8qRG9tTm9kZXxTdHJpbmcqL25vZGUsIC8qQm9v
bGVhbj8qL2luY2x1ZGVTY3JvbGwpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRGVwcmVjYXRlZDogVXNlIHBvc2l0aW9u
KCkgZm9yIGJvcmRlci1ib3ggeC95L3cvaAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBvciBtYXJnaW5Cb3goKSBmb3IgbWFyZ2luLWJveCB3L2gvbC90LgorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBub2RlJ3Mg
c2l6ZSBhbmQgcG9zaXRpb24uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1
cm5zIGFuIG9iamVjdCB0aGF0IG1lYXN1cmVzIG1hcmdpbi1ib3ggKHcpaWR0aC8oaCllaWdodAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbmQgYWJzb2x1dGUgcG9zaXRpb24geC95
IG9mIHRoZSBib3JkZXItYm94LiBBbHNvIHJldHVybmVkCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGlzIGNvbXB1dGVkIChsKWVmdCBhbmQgKHQpb3AgdmFsdWVzIGluIHBpeGVscyBm
cm9tIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBub2RlJ3Mgb2Zmc2V0UGFy
ZW50IGFzIHJldHVybmVkIGZyb20gbWFyZ2luQm94KCkuCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIFJldHVybiB2YWx1ZSB3aWxsIGJlIGluIHRoZSBmb3JtOgorICAgICAgICAgICAg
ICAgIC8vfCAgICAgICAgICAgICAgICAgICAgIHsgbDogNTAsIHQ6IDIwMCwgdzogMzAwOiBoOiAx
NTAsIHg6IDEwMCwgeTogMzAwIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRG9l
cyBub3QgYWN0IGFzIGEgc2V0dGVyLiBJZiBpbmNsdWRlU2Nyb2xsIGlzIHBhc3NlZCwgdGhlIHgg
YW5kCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHkgcGFyYW1zIGFyZSBhZmZlY3Rl
ZCBhcyBvbmUgd291bGQgZXhwZWN0IGluIGRvam8ucG9zaXRpb24oKS4KKyAgICAgICAgICAgICAg
ICB2YXIgbiA9IGJ5SWQobm9kZSksIHMgPSBnY3MobiksIG1iID0gZC5fZ2V0TWFyZ2luQm94KG4s
IHMpOworICAgICAgICAgICAgICAgIHZhciBhYnMgPSBkLnBvc2l0aW9uKG4sIGluY2x1ZGVTY3Jv
bGwpOworICAgICAgICAgICAgICAgIG1iLnggPSBhYnMueDsKKyAgICAgICAgICAgICAgICBtYi55
ID0gYWJzLnk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1iOworICAgICAgICB9OworCisgICAg
ICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vIEVsZW1lbnQg
YXR0cmlidXRlIEZ1bmN0aW9ucworICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorCisgICAgICAgIC8vIGRvam8uYXR0cigpIHNob3VsZCBjb25mb3JtIHRvIGh0dHA6Ly93
d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUNvcmUvCisKKyAgICAgICAgdmFyIF9wcm9wTmFtZXMg
PSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIHJlbmFtZWQgdG8gYXZv
aWQgY2xhc2hlcyB3aXRoIHJlc2VydmVkIHdvcmRzCisgICAgICAgICAgICAgICAgICAgICAgICAi
Y2xhc3MiOiAgICJjbGFzc05hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgImZvciI6ICAg
ICAiaHRtbEZvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIHdyaXR0
ZW4gYXMgY2FtZWxDYXNlCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleDogICJ0YWJJ
bmRleCIsCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seTogICJyZWFkT25seSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuOiAgICJjb2xTcGFuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYW1lYm9yZGVyOiAiZnJhbWVCb3JkZXIiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcm93c3BhbjogICAicm93U3BhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZXR5cGU6ICJ2YWx1ZVR5cGUiCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICBfYXR0ck5hbWVzID0geworICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgYXR0
cmlidXRlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc25hbWU6ICJjbGFzcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICBodG1sZm9yOiAgICJmb3IiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZm9yIElFCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleDog
ICJ0YWJJbmRleCIsCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seTogICJyZWFkT25s
eSIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIF9mb3JjZVByb3BOYW1lcyA9
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzTmFtZTogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxGb3I6
ICAgZC5pc0lFLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICAgICAxCisgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICB2YXIgX2ZpeEF0dHJOYW1lID0gZnVuY3Rpb24oLypTdHJp
bmcqLyBuYW1lKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2F0dHJOYW1lc1tuYW1lLnRvTG93
ZXJDYXNlKCldIHx8IG5hbWU7CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIF9oYXNBdHRyID0g
ZnVuY3Rpb24obm9kZSwgbmFtZSl7CisgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmdl
dEF0dHJpYnV0ZU5vZGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpOworICAgICAgICAg
ICAgICAgIHJldHVybiBhdHRyICYmIGF0dHIuc3BlY2lmaWVkOyAvLyBCb29sZWFuCisgICAgICAg
IH07CisKKyAgICAgICAgLy8gVGhlcmUgaXMgYSBkaWZmZXJlbmNlIGluIHRoZSBwcmVzZW5jZSBv
ZiBjZXJ0YWluIHByb3BlcnRpZXMgYW5kIHRoZWlyIGRlZmF1bHQgdmFsdWVzCisgICAgICAgIC8v
IGJldHdlZW4gYnJvd3NlcnMuIEZvciBleGFtcGxlLCBvbiBJRSAiZGlzYWJsZWQiIGlzIHByZXNl
bnQgb24gYWxsIGVsZW1lbnRzLAorICAgICAgICAvLyBidXQgaXQgaXMgdmFsdWUgaXMgImZhbHNl
IjsgInRhYkluZGV4IiBvZiA8ZGl2PiByZXR1cm5zIDAgYnkgZGVmYXVsdCBvbiBJRSwgeWV0IG90
aGVyIGJyb3dzZXJzCisgICAgICAgIC8vIGNhbiByZXR1cm4gLTEuCisKKyAgICAgICAgZG9qby5o
YXNBdHRyID0gZnVuY3Rpb24oLypEb21Ob2RlfFN0cmluZyovbm9kZSwgLypTdHJpbmcqL25hbWUp
eworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlIGlzIHNw
ZWNpZmllZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZ2l2ZW4gZWxl
bWVudCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgIG5vZGU6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGlkIG9yIHJlZmVyZW5jZSB0byB0aGUg
ZWxlbWVudCB0byBjaGVjaworICAgICAgICAgICAgICAgIC8vICAgICAgbmFtZToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQorICAgICAg
ICAgICAgICAgIC8vICAgICAgcmV0dXJuczoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgb24gdGhlCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGdpdmVuIGVsZW1lbnQsIGFuZCBmYWxzZSBv
dGhlcndpc2UKKyAgICAgICAgICAgICAgICB2YXIgbGMgPSBuYW1lLnRvTG93ZXJDYXNlKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIF9mb3JjZVByb3BOYW1lc1tfcHJvcE5hbWVzW2xjXSB8fCBu
YW1lXSB8fCBfaGFzQXR0cihieUlkKG5vZGUpLCBfYXR0ck5hbWVzW2xjXSB8fCBuYW1lKTsgLy8g
Qm9vbGVhbgorICAgICAgICB9OworCisgICAgICAgIHZhciBfZXZ0SGRsck1hcCA9IHt9LCBfY3Ry
ID0gMCwKKyAgICAgICAgICAgICAgICBfYXR0cklkID0gZG9qby5fc2NvcGVOYW1lICsgImF0dHJp
ZCIsCisgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgZGljdGlvbmFyeSBsaXN0cyBlbGVtZW50
cyB3aXRoIHJlYWQtb25seSBpbm5lckhUTUwgb24gSUUKKyAgICAgICAgICAgICAgICBfcm9Jbm5l
ckh0bWwgPSB7Y29sOiAxLCBjb2xncm91cDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZyYW1lc2V0OiAxLCBoZWFkOiAxLCBodG1sOiAxLCBzdHlsZTogMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRhYmxlOiAxLCB0Ym9keTogMSwgdGZvb3Q6IDEsIHRoZWFkOiAxLCB0cjogMSwg
dGl0bGU6IDF9OworCisgICAgICAgIGRvam8uYXR0ciA9IGZ1bmN0aW9uKC8qRG9tTm9kZXxTdHJp
bmcqL25vZGUsIC8qU3RyaW5nfE9iamVjdCovbmFtZSwgLypTdHJpbmc/Ki92YWx1ZSl7CisgICAg
ICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBHZXRzIG9yIHNldHMgYW4gYXR0cmlidXRlIG9uIGFuIEhUTUwgZWxlbWVudC4KKyAgICAg
ICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBIYW5kbGVzIG5vcm1hbGl6ZWQgZ2V0dGluZyBhbmQgc2V0dGluZyBvZiBhdHRyaWJ1
dGVzIG9uIERPTQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBOb2Rlcy4gSWYgMiBh
cmd1bWVudHMgYXJlIHBhc3NlZCwgYW5kIGEgdGhlIHNlY29uZCBhcmd1bW50IGlzIGEKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgc3RyaW5nLCBhY3RzIGFzIGEgZ2V0dGVyLgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmIGEgdGhp
cmQgYXJndW1lbnQgaXMgcGFzc2VkLCBvciBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbWFwIG9mIGF0dHJpYnV0ZXMsIGFjdHMgYXMg
YSBzZXR0ZXIuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgV2hlbiBwYXNzaW5nIGZ1bmN0aW9ucyBhcyB2YWx1ZXMsIG5vdGUgdGhhdCB0aGV5IHdp
bGwgbm90IGJlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRpcmVjdGx5IGFzc2ln
bmVkIHRvIHNsb3RzIG9uIHRoZSBub2RlLCBidXQgcmF0aGVyIHRoZSBkZWZhdWx0CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGJlaGF2aW9yIHdpbGwgYmUgcmVtb3ZlZCBhbmQgdGhl
IG5ldyBiZWhhdmlvciB3aWxsIGJlIGFkZGVkCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIHVzaW5nIGBkb2pvLmNvbm5lY3QoKWAsIG1lYW5pbmcgdGhhdCBldmVudCBoYW5kbGVyIHBy
b3BlcnRpZXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgd2lsbCBiZSBub3JtYWxp
emVkIGFuZCB0aGF0IHNvbWUgY2F2ZWF0cyB3aXRoIHJlZ2FyZHMgdG8KKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgbm9uLXN0YW5kYXJkIGJlaGF2aW9ycyBmb3Igb25zdWJtaXQgYXBw
bHkuIE5hbWVseSB0aGF0IHlvdQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzaG91
bGQgY2FuY2VsIGZvcm0gc3VibWlzc2lvbiB1c2luZyBgZG9qby5zdG9wRXZlbnQoKWAgb24gdGhl
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHBhc3NlZCBldmVudCBvYmplY3QgaW5z
dGVhZCBvZiByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlIGZyb20KKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgdGhlIGhhbmRsZXIgaXRzZWxmLgorICAgICAgICAgICAgICAgIC8vICAg
ICAgbm9kZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaWQgb3IgcmVmZXJlbmNl
IHRvIHRoZSBlbGVtZW50IHRvIGdldCBvciBzZXQgdGhlIGF0dHJpYnV0ZSBvbgorICAgICAgICAg
ICAgICAgIC8vICAgICAgbmFtZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhl
IG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBnZXQgb3Igc2V0LgorICAgICAgICAgICAgICAgIC8v
ICAgICAgdmFsdWU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSB2YWx1ZSB0
byBzZXQgZm9yIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIHJldHVybnM6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdoZW4gdXNlZCBhcyBhIGdldHRlciwg
dGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIG9yIG51bGwgaWYgdGhhdCBhdHRyaWJ1dGUgZG9lcyBub3QgaGF2ZSBhIHNw
ZWNpZmllZCBvcgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkZWZhdWx0IHZhbHVl
OworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdo
ZW4gdXNlZCBhcyBhIHNldHRlciwgdGhlIERPTSBub2RlCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgIC8vIGdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgImZvbyIgYXR0cmlidXRlIG9u
IGEgbm9kZQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmF0dHIoZG9qby5i
eUlkKCJub2RlSWQiKSwgImZvbyIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAv
LyBvciB3ZSBjYW4ganVzdCBwYXNzIHRoZSBpZDoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgZG9qby5hdHRyKCJub2RlSWQiLCAiZm9vIik7CisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgIC8vIHVzZSBhdHRyKCkgdG8gc2V0IHRoZSB0YWIgaW5kZXgKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgZG9qby5hdHRyKCJub2RlSWQiLCAidGFiSW5kZXgiLCAzKTsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIFNldCBtdWx0aXBs
ZSB2YWx1ZXMgYXQgb25jZSwgaW5jbHVkaW5nIGV2ZW50IGhhbmRsZXJzOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICBkb2pvLmF0dHIoImZvcm1JZCIsIHsKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgICAgICAgICAiZm9vIjogImJhciIsCisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgICAgICAgICAgInRhYkluZGV4IjogLTEsCisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgICAgICAgICAgIm1ldGhvZCI6ICJQT1NUIiwKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgICAgICAgICAib25zdWJtaXQiOiBmdW5jdGlvbihlKXsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3VibWl0
dGluZyB0aGUgZm9ybS4gTm90ZSB0aGF0IHRoZSBJRSBiZWhhdmlvcgorICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgcmV0dXJuaW5nIHRydWUgb3Ig
ZmFsc2Ugd2lsbCBoYXZlIG5vIGVmZmVjdCBoZXJlCisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBvdXIgaGFuZGxlciBpcyBjb25uZWN0KCll
ZCB0byB0aGUgYnVpbHQtaW4KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG9uc3VibWl0IGJlaGF2aW9yIGFuZCBzbyB3ZSBuZWVkIHRvIHVzZQorICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9qby5zdG9w
RXZlbnQoKSB0byBlbnN1cmUgdGhhdCB0aGUgc3VibWlzc2lvbgorICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBwcm9jZWVkLgorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQo
ZSk7CisgICAgICAgICAgICAgICAgLy8gICAgICB8CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWJtaXQgdGhlIGZvcm0gd2l0aCBBamF4CisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBkb2pvLnhoclBvc3Qo
eyBmb3JtOiAiZm9ybUlkIiB9KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAg
IC8vICAgICAgU3R5bGUgaXMgcyBzcGVjaWFsIGNhc2U6IE9ubHkgc2V0IHdpdGggYW4gb2JqZWN0
IGhhc2ggb2Ygc3R5bGVzCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uYXR0
cigic29tZU5vZGUiLHsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBp
ZDoiYmFyIiwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBzdHlsZTp7
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDoi
MjAwcHgiLCBoZWlnaHQ6IjEwMHB4IiwgY29sb3I6IiMwMDAiCisgICAgICAgICAgICAgICAgLy8g
ICAgICB8ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToK
KyAgICAgICAgICAgICAgICAvLyAgICAgIEFnYWluLCBvbmx5IHNldCBzdHlsZSBhcyBhbiBvYmpl
Y3QgaGFzaCBvZiBzdHlsZXM6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBv
YmogPSB7IGNvbG9yOiIjZmZmIiwgYmFja2dyb3VuZENvbG9yOiIjMDAwIiB9OworICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmF0dHIoInNvbWVOb2RlIiwgInN0eWxlIiwgb2Jq
KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgLy8gdGhvdWdoIHNob3J0ZXIgdG8gdXNlIGBkb2pvLnN0eWxlKClgIGluIHRoaXMgY2Fz
ZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5zdHlsZSgic29tZU5vZGUi
LCBvYmopOworCisgICAgICAgICAgICAgICAgbm9kZSA9IGJ5SWQobm9kZSk7CisgICAgICAgICAg
ICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoLCBwcm9wOworICAgICAgICAgICAgICAg
IGlmKGFyZ3MgPT0gMiAmJiB0eXBlb2YgbmFtZSAhPSAic3RyaW5nIil7IC8vIGlubGluZSdkIHR5
cGUgY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvYmplY3QgZm9ybSBvZiBz
ZXR0ZXI6IHRoZSAybmQgYXJndW1lbnQgaXMgYSBkaWN0aW9uYXJ5CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IodmFyIHggaW4gbmFtZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGQuYXR0cihub2RlLCB4LCBuYW1lW3hdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOyAvLyBEb21Ob2RlCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBsYyA9IG5hbWUudG9Mb3dlckNhc2UoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BOYW1lID0gX3Byb3BOYW1lc1tsY10gfHwgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlUHJvcCA9IF9mb3JjZVByb3BOYW1lc1tw
cm9wTmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IF9hdHRyTmFtZXNb
bGNdIHx8IG5hbWU7CisgICAgICAgICAgICAgICAgaWYoYXJncyA9PSAzKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHNldHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgZG97CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb3BOYW1lID09ICJzdHlsZSIgJiYgdHlw
ZW9mIHZhbHVlICE9ICJzdHJpbmciKXsgLy8gaW5saW5lJ2QgdHlwZSBjaGVjaworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogc2V0dGluZyBh
IHN0eWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zdHlsZShu
b2RlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYocHJvcE5hbWUgPT0gImlubmVySFRNTCIpeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogYXNzaWduaW5nIEhU
TUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZC5pc0lFICYmIG5vZGUudGFnTmFtZS50b0xv
d2VyQ2FzZSgpIGluIF9yb0lubmVySHRtbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkLmVtcHR5KG5vZGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChkLl90b0RvbSh2YWx1
ZSwgbm9kZS5vd25lckRvY3VtZW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVtwcm9w
TmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkLmlzRnVuY3Rpb24odmFsdWUpKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGFzc2ln
bmluZyBhbiBldmVudCBoYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gY2xvYmJlciBpZiB3ZSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgYXR0cklkID0gZC5hdHRyKG5vZGUsIF9hdHRySWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFhdHRySWQpeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cklkID0gX2N0cisrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5hdHRyKG5vZGUs
IF9hdHRySWQsIGF0dHJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFfZXZ0SGRs
ck1hcFthdHRySWRdKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9ldnRIZGxyTWFwW2F0dHJJZF0gPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGggPSBfZXZ0SGRsck1hcFthdHRySWRdW3Byb3BOYW1lXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZihoKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGlzY29ubmVjdChoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGVbcHJvcE5hbWVdOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe30K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgZXZlbnQgb2JqZWN0cyBh
cmUgbm9ybWFsaXplZCwgZXRjLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9ldnRIZGxyTWFwW2F0dHJJZF1bcHJvcE5hbWVdID0gZC5jb25uZWN0KG5vZGUsIHByb3BO
YW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoZm9yY2VQcm9wIHx8IHR5cGVvZiB2YWx1ZSA9PSAiYm9vbGVhbiIp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2Fz
ZTogZm9yY2luZyBhc3NpZ25tZW50IHRvIHRoZSBwcm9wZXJ0eQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogc2V0dGluZyBib29sZWFuIHRv
IGEgcHJvcGVydHkgaW5zdGVhZCBvZiBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlW3Byb3BOYW1lXSA9IHZhbHVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGUncyBhdHRy
aWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUo
YXR0ck5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZShmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsgLy8gRG9tTm9kZQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBnZXR0ZXIKKyAgICAgICAgICAgICAgICAv
LyBzaG91bGQgd2UgYWNjZXNzIHRoaXMgYXR0cmlidXRlIHZpYSBhIHByb3BlcnR5IG9yCisgICAg
ICAgICAgICAgICAgLy8gdmlhIGdldEF0dHJpYnV0ZSgpPworICAgICAgICAgICAgICAgIHZhbHVl
ID0gbm9kZVtwcm9wTmFtZV07CisgICAgICAgICAgICAgICAgaWYoZm9yY2VQcm9wICYmIHR5cGVv
ZiB2YWx1ZSAhPSAidW5kZWZpbmVkIil7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2Rl
J3MgcHJvcGVydHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsgICAvLyBB
bnl0aGluZworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihwcm9wTmFtZSAh
PSAiaHJlZiIgJiYgKHR5cGVvZiB2YWx1ZSA9PSAiYm9vbGVhbiIgfHwgZC5pc0Z1bmN0aW9uKHZh
bHVlKSkpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZSdzIHByb3BlcnR5CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7ICAgLy8gQW55dGhpbmcKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gbm9kZSdzIGF0dHJpYnV0ZQorICAgICAgICAg
ICAgICAgIC8vIHdlIG5lZWQgX2hhc0F0dHIoKSBoZXJlIHRvIGd1YXJkIGFnYWluc3QgSUUgcmV0
dXJuaW5nIGEgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBfaGFzQXR0cihu
b2RlLCBhdHRyTmFtZSkgPyBub2RlLmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgOiBudWxsOyAvLyBB
bnl0aGluZworICAgICAgICB9OworCisgICAgICAgIGRvam8ucmVtb3ZlQXR0ciA9IGZ1bmN0aW9u
KC8qRG9tTm9kZXxTdHJpbmcqLyBub2RlLCAvKlN0cmluZyovIG5hbWUpeworICAgICAgICAgICAg
ICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmVt
b3ZlcyBhbiBhdHRyaWJ1dGUgZnJvbSBhbiBIVE1MIGVsZW1lbnQuCisgICAgICAgICAgICAgICAg
Ly8gICAgICBub2RlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZCBvciByZWZl
cmVuY2UgdG8gdGhlIGVsZW1lbnQgdG8gcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbQorICAgICAg
ICAgICAgICAgIC8vICAgICAgbmFtZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
dGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byByZW1vdmUKKyAgICAgICAgICAgICAgICBieUlk
KG5vZGUpLnJlbW92ZUF0dHJpYnV0ZShfZml4QXR0ck5hbWUobmFtZSkpOworICAgICAgICB9Owor
CisgICAgICAgIGRvam8uZ2V0Tm9kZVByb3AgPSBmdW5jdGlvbigvKkRvbU5vZGV8U3RyaW5nKi8g
bm9kZSwgLypTdHJpbmcqLyBuYW1lKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMgYW4gZWZmZWN0aXZlIHZh
bHVlIG9mIGEgcHJvcGVydHkgb3IgYW4gYXR0cmlidXRlLgorICAgICAgICAgICAgICAgIC8vICAg
ICAgbm9kZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaWQgb3IgcmVmZXJlbmNl
IHRvIHRoZSBlbGVtZW50IHRvIHJlbW92ZSB0aGUgYXR0cmlidXRlIGZyb20KKyAgICAgICAgICAg
ICAgICAvLyAgICAgIG5hbWU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSBu
YW1lIG9mIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICBub2RlID0gYnlJZChub2RlKTsK
KyAgICAgICAgICAgICAgICB2YXIgbGMgPSBuYW1lLnRvTG93ZXJDYXNlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wTmFtZSA9IF9wcm9wTmFtZXNbbGNdIHx8IG5hbWU7CisgICAgICAg
ICAgICAgICAgaWYoKHByb3BOYW1lIGluIG5vZGUpICYmIHByb3BOYW1lICE9ICJocmVmIil7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgcHJvcGVydHkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlW3Byb3BOYW1lXTsgIC8vIEFueXRoaW5nCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIG5vZGUncyBhdHRyaWJ1dGUKKyAgICAgICAgICAg
ICAgICB2YXIgYXR0ck5hbWUgPSBfYXR0ck5hbWVzW2xjXSB8fCBuYW1lOworICAgICAgICAgICAg
ICAgIHJldHVybiBfaGFzQXR0cihub2RlLCBhdHRyTmFtZSkgPyBub2RlLmdldEF0dHJpYnV0ZShh
dHRyTmFtZSkgOiBudWxsOyAvLyBBbnl0aGluZworICAgICAgICB9OworCisgICAgICAgIGRvam8u
Y3JlYXRlID0gZnVuY3Rpb24odGFnLCBhdHRycywgcmVmTm9kZSwgcG9zKXsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIENy
ZWF0ZSBhbiBlbGVtZW50LCBhbGxvd2luZyBmb3Igb3B0aW9uYWwgYXR0cmlidXRlIGRlY29yYXRp
b24KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYW5kIHBsYWNlbWVudC4KKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBBIERPTSBFbGVtZW50IGNyZWF0aW9uIGZ1bmN0aW9uLiBB
IHNob3J0aGFuZCBtZXRob2QgZm9yIGNyZWF0aW5nIGEgbm9kZSBvcgorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBhIGZyYWdtZW50LCBhbmQgYWxsb3dpbmcgZm9yIGEgY29udmVuaWVu
dCBvcHRpb25hbCBhdHRyaWJ1dGUgc2V0dGluZyBzdGVwLAorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBhcyB3ZWxsIGFzIGFuIG9wdGlvbmFsIERPTSBwbGFjZW1lbnQgcmVmZXJlbmNl
LgorICAgICAgICAgICAgICAgIC8vfAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBB
dHRyaWJ1dGVzIGFyZSBzZXQgYnkgcGFzc2luZyB0aGUgb3B0aW9uYWwgb2JqZWN0IHRocm91Z2gg
YGRvam8uYXR0cmAuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFNlZSBgZG9qby5h
dHRyYCBmb3Igbm90ZWQgY2F2ZWF0cyBhbmQgbnVhbmNlcywgYW5kIEFQSSBpZiBhcHBsaWNhYmxl
LgorICAgICAgICAgICAgICAgIC8vfAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBQ
bGFjZW1lbnQgaXMgZG9uZSB2aWEgYGRvam8ucGxhY2VgLCBhc3N1bWluZyB0aGUgbmV3IG5vZGUg
dG8gYmUgdGhlIGFjdGlvbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBub2RlLCBw
YXNzaW5nIGFsb25nIHRoZSBvcHRpb25hbCByZWZlcmVuY2Ugbm9kZSBhbmQgcG9zaXRpb24uCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyB0YWc6IFN0cmluZ3xEb21Ob2Rl
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEEgc3RyaW5nIG9mIHRoZSBlbGVtZW50
IHRvIGNyZWF0ZSAoZWc6ICJkaXYiLCAiYSIsICJwIiwgImxpIiwgInNjcmlwdCIsICJiciIpLAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBvciBhbiBleGlzdGluZyBET00gbm9kZSB0
byBwcm9jZXNzLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gYXR0cnM6
IE9iamVjdAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBbiBvYmplY3QtaGFzaCBv
ZiBhdHRyaWJ1dGVzIHRvIHNldCBvbiB0aGUgbmV3bHkgY3JlYXRlZCBub2RlLgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBDYW4gYmUgbnVsbCwgaWYgeW91IGRvbid0IHdhbnQgdG8g
c2V0IGFueSBhdHRyaWJ1dGVzL3N0eWxlcy4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgU2VlOiBgZG9qby5hdHRyYCBmb3IgYSBkZXNjcmlwdGlvbiBvZiBhdmFpbGFibGUgYXR0cmli
dXRlcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIHJlZk5vZGU6IFN0
cmluZz98RG9tTm9kZT8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgT3B0aW9uYWwg
cmVmZXJlbmNlIG5vZGUuIFVzZWQgYnkgYGRvam8ucGxhY2VgIHRvIHBsYWNlIHRoZSBuZXdseSBj
cmVhdGVkCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5vZGUgc29tZXdoZXJlIGlu
IHRoZSBkb20gcmVsYXRpdmUgdG8gcmVmTm9kZS4gQ2FuIGJlIGEgRG9tTm9kZSByZWZlcmVuY2UK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb3IgU3RyaW5nIElEIG9mIGEgbm9kZS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIHBvczogU3RyaW5nPworICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBPcHRpb25hbCBwb3NpdGlvbmFsIHJlZmVyZW5j
ZS4gRGVmYXVsdHMgdG8gImxhc3QiIGJ5IHdheSBvZiBgZG9qby5wbGFjZWAsCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHRob3VnaCBjYW4gYmUgc2V0IHRvICJmaXJzdCIsImFmdGVy
IiwiYmVmb3JlIiwibGFzdCIsICJyZXBsYWNlIiBvciAib25seSIKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgdG8gZnVydGhlciBjb250cm9sIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5l
dyBub2RlIHJlbGF0aXZlIHRvIHRoZSByZWZOb2RlLgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICAncmVmTm9kZScgaXMgcmVxdWlyZWQgaWYgYSAncG9zJyBpcyBzcGVjaWZpZWQuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyByZXR1cm5zOiBEb21Ob2RlCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAg
ICAgICAgIC8vICAgICAgQ3JlYXRlIGEgRElWOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICB2YXIgbiA9IGRvam8uY3JlYXRlKCJkaXYiKTsKKyAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICBDcmVhdGUg
YSBESVYgd2l0aCBjb250ZW50OgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIg
biA9IGRvam8uY3JlYXRlKCJkaXYiLCB7IGlubmVySFRNTDoiPHA+aGk8L3A+IiB9KTsKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAg
ICAgLy8gICAgICBQbGFjZSBhIG5ldyBESVYgaW4gdGhlIEJPRFksIHdpdGggbm8gYXR0cmlidXRl
cyBzZXQKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIG4gPSBkb2pvLmNyZWF0
ZSgiZGl2IiwgbnVsbCwgZG9qby5ib2R5KCkpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIENyZWF0ZSBhbiBV
TCwgYW5kIHBvcHVsYXRlIGl0IHdpdGggTEkncy4gUGxhY2UgdGhlIGxpc3QgYXMgdGhlIGZpcnN0
LWNoaWxkIG9mIGEKKyAgICAgICAgICAgICAgICAvLyAgICAgIG5vZGUgd2l0aCBpZD0ic29tZUlk
IjoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIHVsID0gZG9qby5jcmVhdGUo
InVsIiwgbnVsbCwgInNvbWVJZCIsICJmaXJzdCIpOworICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICB2YXIgaXRlbXMgPSBbIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciJdOworICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmZvckVhY2goaXRlbXMsIGZ1bmN0aW9u
KGRhdGEpeworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIGRvam8uY3Jl
YXRlKCJsaSIsIHsgaW5uZXJIVE1MOiBkYXRhIH0sIHVsKTsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIHwgICAgICAgfSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBl
eGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgQ3JlYXRlIGFuIGFuY2hvciwgd2l0aCBh
biBocmVmLiBQbGFjZSBpbiBCT0RZOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBk
b2pvLmNyZWF0ZSgiYSIsIHsgaHJlZjoiZm9vLmh0bWwiLCB0aXRsZToiR290byBGT08hIiB9LCBk
b2pvLmJvZHkoKSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFt
cGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgQ3JlYXRlIGEgYGRvam8uTm9kZUxpc3QoKWAg
ZnJvbSBhIG5ldyBlbGVtZW50IChmb3Igc3ludGF0aWMgc3VnYXIpOgorICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5KGRvam8uY3JlYXRlKCdkaXYnKSkKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAuYWRkQ2xhc3MoIm5ld0RpdiIpCisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgLm9uY2xpY2soZnVuY3Rpb24oZSl7
IGNvbnNvbGUubG9nKCdjbGlja2VkJywgZS50YXJnZXQpIH0pCisgICAgICAgICAgICAgICAgLy8g
ICAgICB8ICAgICAgICAgICAgICAgLnBsYWNlKCIjc29tZU5vZGUiKTsgLy8gcmVkdW5kYW50LCBi
dXQgY2xlYW5lci4KKworICAgICAgICAgICAgICAgIHZhciBkb2MgPSBkLmRvYzsKKyAgICAgICAg
ICAgICAgICBpZihyZWZOb2RlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZk5vZGUgPSBi
eUlkKHJlZk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gcmVmTm9kZS5vd25l
ckRvY3VtZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZih0eXBlb2Yg
dGFnID09ICJzdHJpbmciKXsgLy8gaW5saW5lJ2QgdHlwZSBjaGVjaworICAgICAgICAgICAgICAg
ICAgICAgICAgdGFnID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYoYXR0cnMpeyBkLmF0dHIodGFnLCBhdHRycyk7IH0KKyAgICAg
ICAgICAgICAgICBpZihyZWZOb2RlKXsgZC5wbGFjZSh0YWcsIHJlZk5vZGUsIHBvcyk7IH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGFnOyAvLyBEb21Ob2RlCisgICAgICAgIH07CisKKyAgICAg
ICAgLyo9PT09PQorICAgICAgICBkb2pvLmVtcHR5ID0gZnVuY3Rpb24obm9kZSl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgc2FmZWx5IHJlbW92ZXMgYWxsIGNoaWxkcmVuIG9mIHRoZSBub2Rl
LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBub2RlOiBET01Ob2RlfFN0cmluZwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGEgcmVmZXJlbmNlIHRvIGEg
RE9NIG5vZGUgb3IgYW4gaWQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1w
bGU6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIERlc3Ryb3kgbm9kZSdzIGNoaWxk
cmVuIGJ5SWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5l
bXB0eSgic29tZUlkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICBEZXN0cm95IGFsbCBub2RlcycgY2hpbGRyZW4gaW4gYSBsaXN0IGJ5IHJlZmVyZW5jZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5KCIuc29t
ZU5vZGUiKS5mb3JFYWNoKGRvam8uZW1wdHkpOworICAgICAgICB9CisgICAgICAgID09PT09Ki8K
KworICAgICAgICBkLmVtcHR5ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5p
c0lFID8gIGZ1bmN0aW9uKG5vZGUpeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGJ5
SWQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGM7IGMgPSBub2RlLmxh
c3RDaGlsZDspeyAvLyBpbnRlbnRpb25hbCBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGQuZGVzdHJveShjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24obm9kZSl7CisgICAgICAgICAgICAgICAgICAgICAgICBieUlkKG5vZGUpLmlubmVySFRNTCA9
ICIiOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgLyo9PT09PQorICAgICAgICBkb2pv
Ll90b0RvbSA9IGZ1bmN0aW9uKGZyYWcsIGRvYyl7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
aW5zdGFudGlhdGVzIGFuIEhUTUwgZnJhZ21lbnQgcmV0dXJuaW5nIHRoZSBjb3JyZXNwb25kaW5n
IERPTS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZnJhZzogU3RyaW5nCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIEhUTUwgZnJhZ21lbnQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZG9jOiBEb2N1bWVudE5vZGU/CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb3B0aW9uYWwgZG9jdW1lbnQgdG8gdXNl
IHdoZW4gY3JlYXRpbmcgRE9NIG5vZGVzLCBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGRvam8uZG9jIGlmIG5vdCBzcGVjaWZpZWQuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgIHJldHVybnM6IERvY3VtZW50RnJhZ21lbnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGV4
YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIENyZWF0ZSBhIHRhYmxlIHJv
dzoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIgdHIgPSBkb2pv
Ll90b0RvbSgiPHRyPjx0ZD5GaXJzdCE8L3RkPjwvdHI+Iik7CisgICAgICAgIH0KKyAgICAgICAg
PT09PT0qLworCisgICAgICAgIC8vIHN1cHBvcnQgc3R1ZmYgZm9yIGRvam8uX3RvRG9tCisgICAg
ICAgIHZhciB0YWdXcmFwID0geworICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiBbInNl
bGVjdCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHk6IFsidGFibGUiXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoZWFkOiBbInRhYmxlIl0sCisgICAgICAgICAgICAgICAgICAg
ICAgICB0Zm9vdDogWyJ0YWJsZSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgdHI6IFsidGFi
bGUiLCAidGJvZHkiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRkOiBbInRhYmxlIiwgInRi
b2R5IiwgInRyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICB0aDogWyJ0YWJsZSIsICJ0aGVh
ZCIsICJ0ciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kOiBbImZpZWxkc2V0Il0s
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uOiBbInRhYmxlIl0sCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xncm91cDogWyJ0YWJsZSJdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29sOiBbInRhYmxlIiwgImNvbGdyb3VwIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBs
aTogWyJ1bCJdCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICByZVRhZyA9IC88
XHMqKFtcd1w6XSspLywKKyAgICAgICAgICAgICAgICBtYXN0ZXJOb2RlID0ge30sIG1hc3Rlck51
bSA9IDAsCisgICAgICAgICAgICAgICAgbWFzdGVyTmFtZSA9ICJfXyIgKyBkLl9zY29wZU5hbWUg
KyAiVG9Eb21JZCI7CisKKyAgICAgICAgLy8gZ2VuZXJhdGUgc3RhcnQvZW5kIHRhZyBzdHJpbmdz
IHRvIHVzZQorICAgICAgICAvLyBmb3IgdGhlIGluamVjdGlvbiBmb3IgZWFjaCBzcGVjaWFsIHRh
ZyB3cmFwIGNhc2UuCisgICAgICAgIGZvcih2YXIgcGFyYW0gaW4gdGFnV3JhcCl7CisgICAgICAg
ICAgICAgICAgaWYodGFnV3JhcC5oYXNPd25Qcm9wZXJ0eShwYXJhbSkpeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHR3ID0gdGFnV3JhcFtwYXJhbV07CisgICAgICAgICAgICAgICAgICAg
ICAgICB0dy5wcmUgID0gcGFyYW0gPT0gIm9wdGlvbiIgPyAnPHNlbGVjdCBtdWx0aXBsZT0ibXVs
dGlwbGUiPicgOiAiPCIgKyB0dy5qb2luKCI+PCIpICsgIj4iOworICAgICAgICAgICAgICAgICAg
ICAgICAgdHcucG9zdCA9ICI8LyIgKyB0dy5yZXZlcnNlKCkuam9pbigiPjwvIikgKyAiPiI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGlzIGRlc3RydWN0aXZlOiBp
dCByZXZlcnNlcyB0aGUgYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgd2Ug
ZG9uJ3QgY2FyZSBhdCB0aGlzIHBvaW50CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZC5fdG9Eb20gPSBmdW5jdGlvbihmcmFnLCBkb2MpeworICAgICAgICAgICAgICAg
IC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY29udmVy
dHMgSFRNTCBzdHJpbmcgaW50byBET00gbm9kZXMuCisKKyAgICAgICAgICAgICAgICBkb2MgPSBk
b2MgfHwgZC5kb2M7CisgICAgICAgICAgICAgICAgdmFyIG1hc3RlcklkID0gZG9jW21hc3Rlck5h
bWVdOworICAgICAgICAgICAgICAgIGlmKCFtYXN0ZXJJZCl7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkb2NbbWFzdGVyTmFtZV0gPSBtYXN0ZXJJZCA9ICsrbWFzdGVyTnVtICsgIiI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXN0ZXJOb2RlW21hc3RlcklkXSA9IGRvYy5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBtYWtl
IHN1cmUgdGhlIGZyYWcgaXMgYSBzdHJpbmcuCisgICAgICAgICAgICAgICAgZnJhZyArPSAiIjsK
KworICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIHN0YXJ0aW5nIHRhZywgYW5kIGdldCBub2Rl
IHdyYXBwZXIKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBmcmFnLm1hdGNoKHJlVGFnKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IG1hdGNoID8gbWF0Y2hbMV0udG9Mb3dlckNh
c2UoKSA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyID0gbWFzdGVyTm9kZVtt
YXN0ZXJJZF0sCisgICAgICAgICAgICAgICAgICAgICAgICB3cmFwLCBpLCBmYywgZGY7CisgICAg
ICAgICAgICAgICAgaWYobWF0Y2ggJiYgdGFnV3JhcFt0YWddKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdyYXAgPSB0YWdXcmFwW3RhZ107CisgICAgICAgICAgICAgICAgICAgICAgICBtYXN0
ZXIuaW5uZXJIVE1MID0gd3JhcC5wcmUgKyBmcmFnICsgd3JhcC5wb3N0OworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yKGkgPSB3cmFwLmxlbmd0aDsgaTsgLS1pKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFzdGVyID0gbWFzdGVyLmZpcnN0Q2hpbGQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtYXN0ZXIuaW5uZXJIVE1MID0gZnJhZzsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyBvbmUgbm9kZSBzaG9ydGN1dCA9PiByZXR1cm4gdGhlIG5vZGUgaXRz
ZWxmCisgICAgICAgICAgICAgICAgaWYobWFzdGVyLmNoaWxkTm9kZXMubGVuZ3RoID09IDEpewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hc3Rlci5yZW1vdmVDaGlsZChtYXN0ZXIu
Zmlyc3RDaGlsZCk7IC8vIERPTU5vZGUKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyByZXR1cm4gbXVsdGlwbGUgbm9kZXMgYXMgYSBkb2N1bWVudCBmcmFnbWVudAorICAg
ICAgICAgICAgICAgIGRmID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAg
ICAgICAgICB3aGlsZShmYyA9IG1hc3Rlci5maXJzdENoaWxkKXsgLy8gaW50ZW50aW9uYWwgYXNz
aWdubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgZGYuYXBwZW5kQ2hpbGQoZmMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZGY7IC8vIERPTU5vZGUKKyAg
ICAgICAgfTsKKworICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAg
ICAgICAvLyAoQ1NTKSBDbGFzcyBGdW5jdGlvbnMKKyAgICAgICAgLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKyAgICAgICAgdmFyIF9jbGFzc05hbWUgPSAiY2xhc3NOYW1lIjsKKwor
ICAgICAgICBkb2pvLmhhc0NsYXNzID0gZnVuY3Rpb24oLypEb21Ob2RlfFN0cmluZyovbm9kZSwg
LypTdHJpbmcqL2NsYXNzU3RyKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMgd2hldGhlciBvciBub3QgdGhl
IHNwZWNpZmllZCBjbGFzc2VzIGFyZSBhIHBvcnRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIGNsYXNzIGxpc3QgY3VycmVudGx5IGFwcGxpZWQgdG8gdGhlIG5vZGUu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIG5vZGU6CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFN0cmluZyBJRCBvciBEb21Ob2RlIHJlZmVyZW5j
ZSB0byBjaGVjayB0aGUgY2xhc3MgZm9yLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gICAgICBjbGFzc1N0cjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
QSBzdHJpbmcgY2xhc3MgbmFtZSB0byBsb29rIGZvci4KKyAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIERv
IHNvbWV0aGluZyBpZiBhIG5vZGUgd2l0aCBpZD0ic29tZU5vZGUiIGhhcyBjbGFzcz0iYVNpbGx5
Q2xhc3NOYW1lIiBwcmVzZW50CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGlmKGRv
am8uaGFzQ2xhc3MoInNvbWVOb2RlIiwiYVNpbGx5Q2xhc3NOYW1lIikpeyAuLi4gfQorCisgICAg
ICAgICAgICAgICAgcmV0dXJuICgoIiAiKyBieUlkKG5vZGUpW19jbGFzc05hbWVdICsiICIpLmlu
ZGV4T2YoIiAiICsgY2xhc3NTdHIgKyAiICIpID49IDApOyAgLy8gQm9vbGVhbgorICAgICAgICB9
OworCisgICAgICAgIHZhciBzcGFjZXMgPSAvXHMrLywgYTEgPSBbIiJdLAorICAgICAgICAgICAg
ICAgIGZha2VOb2RlID0ge30sCisgICAgICAgICAgICAgICAgc3RyMmFycmF5ID0gZnVuY3Rpb24o
cyl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcyA9PSAic3RyaW5nIiB8fCBz
IGluc3RhbmNlb2YgU3RyaW5nKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYo
cy5pbmRleE9mKCIgIikgPCAwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhMVswXSA9IHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGExOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5zcGxpdChzcGFjZXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWVkIHRvIGJlIGFuIGFycmF5
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcyB8fCAiIjsKKyAgICAgICAgICAgICAg
ICB9OworCisgICAgICAgIGRvam8uYWRkQ2xhc3MgPSBmdW5jdGlvbigvKkRvbU5vZGV8U3RyaW5n
Ki9ub2RlLCAvKlN0cmluZ3xBcnJheSovY2xhc3NTdHIpeworICAgICAgICAgICAgICAgIC8vICAg
ICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQWRkcyB0aGUgc3Bl
Y2lmaWVkIGNsYXNzZXMgdG8gdGhlIGVuZCBvZiB0aGUgY2xhc3MgbGlzdCBvbiB0aGUKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgcGFzc2VkIG5vZGUuIFdpbGwgbm90IHJlLWFwcGx5
IGR1cGxpY2F0ZSBjbGFzc2VzLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gICAgICBub2RlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTdHJpbmcgSUQg
b3IgRG9tTm9kZSByZWZlcmVuY2UgdG8gYWRkIGEgY2xhc3Mgc3RyaW5nIHRvbworICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICBjbGFzc1N0cjoKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgQSBTdHJpbmcgY2xhc3MgbmFtZSB0byBhZGQsIG9yIHNldmVy
YWwgc3BhY2Utc2VwYXJhdGVkIGNsYXNzIG5hbWVzLAorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBvciBhbiBhcnJheSBvZiBjbGFzcyBuYW1lcy4KKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICBBZGQg
YSBjbGFzcyB0byBzb21lIG5vZGU6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRv
am8uYWRkQ2xhc3MoInNvbWVOb2RlIiwgImFuZXdDbGFzcyIpOworICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIEFk
ZCB0d28gY2xhc3NlcyBhdCBvbmNlOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBk
b2pvLmFkZENsYXNzKCJzb21lTm9kZSIsICJmaXJzdENsYXNzIHNlY29uZENsYXNzIik7CisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgQWRkIHR3byBjbGFzc2VzIGF0IG9uY2UgKHVzaW5nIGFycmF5KToKKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5hZGRDbGFzcygic29tZU5vZGUiLCBbImZp
cnN0Q2xhc3MiLCAic2Vjb25kQ2xhc3MiXSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgQXZhaWxhYmxlIGlu
IGBkb2pvLk5vZGVMaXN0YCBmb3IgbXVsdGlwbGUgYWRkaXRpb25zCisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIGRvam8ucXVlcnkoInVsID4gbGkiKS5hZGRDbGFzcygiZmlyc3RMZXZl
bCIpOworCisgICAgICAgICAgICAgICAgbm9kZSA9IGJ5SWQobm9kZSk7CisgICAgICAgICAgICAg
ICAgY2xhc3NTdHIgPSBzdHIyYXJyYXkoY2xhc3NTdHIpOworICAgICAgICAgICAgICAgIHZhciBj
bHMgPSBub2RlW19jbGFzc05hbWVdLCBvbGRMZW47CisgICAgICAgICAgICAgICAgY2xzID0gY2xz
ID8gIiAiICsgY2xzICsgIiAiIDogIiAiOworICAgICAgICAgICAgICAgIG9sZExlbiA9IGNscy5s
ZW5ndGg7CisgICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gY2xhc3NTdHIubGVu
Z3RoLCBjOyBpIDwgbGVuOyArK2kpeworICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGNsYXNz
U3RyW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoYyAmJiBjbHMuaW5kZXhPZigiICIg
KyBjICsgIiAiKSA8IDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMgKz0g
YyArICIgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYob2xkTGVuIDwgY2xzLmxlbmd0aCl7CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlW19jbGFzc05hbWVdID0gY2xzLnN1YnN0cigxLCBjbHMubGVuZ3RoIC0gMik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGRvam8ucmVtb3ZlQ2xh
c3MgPSBmdW5jdGlvbigvKkRvbU5vZGV8U3RyaW5nKi9ub2RlLCAvKlN0cmluZ3xBcnJheT8qL2Ns
YXNzU3RyKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgY2xhc3NlcyBmcm9tIG5vZGUuIE5v
IGBkb2pvLmhhc0NsYXNzYAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjaGVjayBp
cyByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIG5vZGU6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFN0cmluZyBJRCBvciBEb21Ob2RlIHJl
ZmVyZW5jZSB0byByZW1vdmUgdGhlIGNsYXNzIGZyb20uCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyBjbGFzc1N0cjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgQW4gb3B0aW9uYWwgU3RyaW5nIGNsYXNzIG5hbWUgdG8gcmVtb3ZlLCBvciBzZXZlcmFsIHNw
YWNlLXNlcGFyYXRlZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjbGFzcyBuYW1l
cywgb3IgYW4gYXJyYXkgb2YgY2xhc3MgbmFtZXMuIElmIG9taXR0ZWQsIGFsbCBjbGFzcyBuYW1l
cworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB3aWxsIGJlIGRlbGV0ZWQuCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgUmVtb3ZlIGEgY2xhc3MgZnJvbSBzb21lIG5vZGU6CisgICAgICAgICAgICAg
ICAgLy8gICAgICB8ICAgICAgIGRvam8ucmVtb3ZlQ2xhc3MoInNvbWVOb2RlIiwgImZpcnN0Q2xh
c3MiKTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICBSZW1vdmUgdHdvIGNsYXNzZXMgZnJvbSBzb21lIG5vZGU6
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8ucmVtb3ZlQ2xhc3MoInNvbWVO
b2RlIiwgImZpcnN0Q2xhc3Mgc2Vjb25kQ2xhc3MiKTsKKyAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICBSZW1vdmUg
dHdvIGNsYXNzZXMgZnJvbSBzb21lIG5vZGUgKHVzaW5nIGFycmF5KToKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgZG9qby5yZW1vdmVDbGFzcygic29tZU5vZGUiLCBbImZpcnN0Q2xh
c3MiLCAic2Vjb25kQ2xhc3MiXSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgUmVtb3ZlIGFsbCBjbGFzc2Vz
IGZyb20gc29tZSBub2RlOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnJl
bW92ZUNsYXNzKCJzb21lTm9kZSIpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIEF2YWlsYWJsZSBpbiBgZG9q
by5Ob2RlTGlzdCgpYCBmb3IgbXVsdGlwbGUgcmVtb3ZhbAorICAgICAgICAgICAgICAgIC8vICAg
ICAgfCAgICAgICBkb2pvLnF1ZXJ5KCIuZm9vIikucmVtb3ZlQ2xhc3MoImZvbyIpOworCisgICAg
ICAgICAgICAgICAgbm9kZSA9IGJ5SWQobm9kZSk7CisgICAgICAgICAgICAgICAgdmFyIGNsczsK
KyAgICAgICAgICAgICAgICBpZihjbGFzc1N0ciAhPT0gdW5kZWZpbmVkKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzU3RyID0gc3RyMmFycmF5KGNsYXNzU3RyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNscyA9ICIgIiArIG5vZGVbX2NsYXNzTmFtZV0gKyAiICI7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBjbGFzc1N0ci5sZW5ndGg7IGkg
PCBsZW47ICsraSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscyA9IGNscy5y
ZXBsYWNlKCIgIiArIGNsYXNzU3RyW2ldICsgIiAiLCAiICIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2xzID0gZC50cmltKGNscyk7CisgICAg
ICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICBjbHMgPSAiIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYobm9kZVtfY2xhc3NOYW1lXSAhPSBj
bHMpeyBub2RlW19jbGFzc05hbWVdID0gY2xzOyB9CisgICAgICAgIH07CisKKyAgICAgICAgZG9q
by5yZXBsYWNlQ2xhc3MgPSBmdW5jdGlvbigvKkRvbU5vZGV8U3RyaW5nKi9ub2RlLCAvKlN0cmlu
Z3xBcnJheSovYWRkQ2xhc3NTdHIsIC8qU3RyaW5nfEFycmF5PyovcmVtb3ZlQ2xhc3NTdHIpewor
ICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIFJlcGxhY2VzIG9uZSBvciBtb3JlIGNsYXNzZXMgb24gYSBub2RlIGlmIG5vdCBwcmVzZW50
LgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBPcGVyYXRlcyBtb3JlIHF1aWNrbHkg
dGhhbiBjYWxsaW5nIGRvam8ucmVtb3ZlQ2xhc3MgYW5kIGRvam8uYWRkQ2xhc3MKKyAgICAgICAg
ICAgICAgICAvLyBub2RlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTdHJpbmcg
SUQgb3IgRG9tTm9kZSByZWZlcmVuY2UgdG8gcmVtb3ZlIHRoZSBjbGFzcyBmcm9tLgorICAgICAg
ICAgICAgICAgIC8vIGFkZENsYXNzU3RyOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBBIFN0cmluZyBjbGFzcyBuYW1lIHRvIGFkZCwgb3Igc2V2ZXJhbCBzcGFjZS1zZXBhcmF0ZWQg
Y2xhc3MgbmFtZXMsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG9yIGFuIGFycmF5
IG9mIGNsYXNzIG5hbWVzLgorICAgICAgICAgICAgICAgIC8vIHJlbW92ZUNsYXNzU3RyOgorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBIFN0cmluZyBjbGFzcyBuYW1lIHRvIHJlbW92
ZSwgb3Igc2V2ZXJhbCBzcGFjZS1zZXBhcmF0ZWQgY2xhc3MgbmFtZXMsCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIG9yIGFuIGFycmF5IG9mIGNsYXNzIG5hbWVzLgorICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAv
LyAgICAgIHwgICAgICAgZG9qby5yZXBsYWNlQ2xhc3MoInNvbWVOb2RlIiwgImFkZDEgYWRkMiIs
ICJyZW1vdmUxIHJlbW92ZTIiKTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICBSZXBsYWNlIGFsbCBjbGFzc2Vz
IHdpdGggYWRkTWUKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5yZXBsYWNl
Q2xhc3MoInNvbWVOb2RlIiwgImFkZE1lIik7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgQXZhaWxhYmxlIGlu
IGBkb2pvLk5vZGVMaXN0KClgIGZvciBtdWx0aXBsZSB0b2dnbGVzCisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgIGRvam8ucXVlcnkoIi5maW5kTWUiKS5yZXBsYWNlQ2xhc3MoImFkZE1l
IiwgInJlbW92ZU1lIik7CisKKyAgICAgICAgbm9kZSA9IGJ5SWQobm9kZSk7CisgICAgICAgICAg
ICAgICAgZmFrZU5vZGUuY2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7CisgICAgICAgICAgICAg
ICAgZG9qby5yZW1vdmVDbGFzcyhmYWtlTm9kZSwgcmVtb3ZlQ2xhc3NTdHIpOworICAgICAgICAg
ICAgICAgIGRvam8uYWRkQ2xhc3MoZmFrZU5vZGUsIGFkZENsYXNzU3RyKTsKKyAgICAgICAgICAg
ICAgICBpZihub2RlLmNsYXNzTmFtZSAhPT0gZmFrZU5vZGUuY2xhc3NOYW1lKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NOYW1lID0gZmFrZU5vZGUuY2xhc3NOYW1lOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLnRvZ2dsZUNsYXNzID0g
ZnVuY3Rpb24oLypEb21Ob2RlfFN0cmluZyovbm9kZSwgLypTdHJpbmd8QXJyYXkqL2NsYXNzU3Ry
LCAvKkJvb2xlYW4/Ki9jb25kaXRpb24peworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFy
eToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQWRkcyBhIGNsYXNzIHRvIG5vZGUg
aWYgbm90IHByZXNlbnQsIG9yIHJlbW92ZXMgaWYgcHJlc2VudC4KKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgUGFzcyBhIGJvb2xlYW4gY29uZGl0aW9uIGlmIHlvdSB3YW50IHRvIGV4
cGxpY2l0bHkgYWRkIG9yIHJlbW92ZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGNvbmRpdGlv
bjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgSWYgcGFzc2VkLCB0cnVlIG1lYW5z
IHRvIGFkZCB0aGUgY2xhc3MsIGZhbHNlIG1lYW5zIHRvIHJlbW92ZS4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIGRvam8udG9nZ2xlQ2xhc3MoInNvbWVOb2RlIiwgImhvdmVyZWQiKTsKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAg
ICAgLy8gICAgICBGb3JjZWZ1bGx5IGFkZCBhIGNsYXNzCisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIGRvam8udG9nZ2xlQ2xhc3MoInNvbWVOb2RlIiwgImhvdmVyZWQiLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAg
ICAgICAgICAgLy8gICAgICBBdmFpbGFibGUgaW4gYGRvam8uTm9kZUxpc3QoKWAgZm9yIG11bHRp
cGxlIHRvZ2dsZXMKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5xdWVyeSgi
LnRvZ2dsZU1lIikudG9nZ2xlQ2xhc3MoInRvZ2dsZU1lIik7CisKKyAgICAgICAgICAgICAgICBp
Zihjb25kaXRpb24gPT09IHVuZGVmaW5lZCl7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25k
aXRpb24gPSAhZC5oYXNDbGFzcyhub2RlLCBjbGFzc1N0cik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGRbY29uZGl0aW9uID8gImFkZENsYXNzIiA6ICJyZW1vdmVDbGFzcyJd
KG5vZGUsIGNsYXNzU3RyKTsKKyAgICAgICAgfTsKKworfSkoKTsKKworfQorCitpZighZG9qby5f
aGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuTm9kZUxpc3QiXSl7IC8vX2hhc1Jlc291cmNlIGNoZWNr
cyBhZGRlZCBieSBidWlsZC4gRG8gbm90IHVzZSBfaGFzUmVzb3VyY2UgZGlyZWN0bHkgaW4geW91
ciBjb2RlLgorZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuTm9kZUxpc3QiXSA9IHRydWU7
Citkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UuTm9kZUxpc3QiKTsKKworCisKKworCisKKyhmdW5j
dGlvbigpeworCisgICAgICAgIHZhciBkID0gZG9qbzsKKworICAgICAgICB2YXIgYXAgPSBBcnJh
eS5wcm90b3R5cGUsIGFwcyA9IGFwLnNsaWNlLCBhcGMgPSBhcC5jb25jYXQ7CisKKyAgICAgICAg
dmFyIHRubCA9IGZ1bmN0aW9uKC8qQXJyYXkqLyBhLCAvKmRvam8uTm9kZUxpc3Q/Ki8gcGFyZW50
LCAvKkZ1bmN0aW9uPyovIE5vZGVMaXN0Q3Rvcil7CisgICAgICAgICAgICAgICAgLy8gc3VtbWFy
eToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZGVjb3JhdGUgYW4gYXJyYXkgdG8g
bWFrZSBpdCBsb29rIGxpa2UgYSBgZG9qby5Ob2RlTGlzdGAuCisgICAgICAgICAgICAgICAgLy8g
YToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQXJyYXkgb2Ygbm9kZXMgdG8gZGVj
b3JhdGUuCisgICAgICAgICAgICAgICAgLy8gcGFyZW50OgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBBbiBvcHRpb25hbCBwYXJlbnQgTm9kZUxpc3QgdGhhdCBnZW5lcmF0ZWQgdGhl
IGN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbGlzdCBvZiBub2Rlcy4g
VXNlZCB0byBjYWxsIF9zdGFzaCgpIHNvIHRoZSBwYXJlbnQgTm9kZUxpc3QKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgY2FuIGJlIGFjY2Vzc2VkIHZpYSBlbmQoKSBsYXRlci4KKyAg
ICAgICAgICAgICAgICAvLyBOb2RlTGlzdEN0b3I6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIEFuIG9wdGlvbmFsIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYW55Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5ldyBOb2RlTGlzdCBjYWxscy4gVGhpcyBh
bGxvd3MgYSBjZXJ0YWluIGNoYWluIG9mCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IE5vZGVMaXN0IGNhbGxzIHRvIHVzZSBhIGRpZmZlcmVudCBvYmplY3QgdGhhbiBkb2pvLk5vZGVM
aXN0LgorICAgICAgICAgICAgICAgIGlmKCFhLnNvcnQpeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIGl0J3MgYSByZWFsIGFycmF5IGJlZm9yZSB3ZSBwYXNzIGl0IG9uIHRv
IGJlIHdyYXBwZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBhcHMuY2FsbChhLCAwKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGN0b3IgPSBOb2RlTGlzdEN0
b3IgfHwgdGhpcy5fTm9kZUxpc3RDdG9yIHx8IGQuX05vZGVMaXN0Q3RvcjsKKyAgICAgICAgICAg
ICAgICBhLmNvbnN0cnVjdG9yID0gY3RvcjsKKyAgICAgICAgICAgICAgICBkb2pvLl9taXhpbihh
LCBjdG9yLnByb3RvdHlwZSk7CisgICAgICAgICAgICAgICAgYS5fTm9kZUxpc3RDdG9yID0gY3Rv
cjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50ID8gYS5fc3Rhc2gocGFyZW50KSA6IGE7
CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGxvb3BCb2R5ID0gZnVuY3Rpb24oZiwgYSwgbyl7
CisgICAgICAgICAgICAgICAgYSA9IFswXS5jb25jYXQoYXBzLmNhbGwoYSwgMCkpOworICAgICAg
ICAgICAgICAgIG8gPSBvIHx8IGQuZ2xvYmFsOworICAgICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbihub2RlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFbMF0gPSBub2RlOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuYXBwbHkobywgYSk7CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBhZGFwdGVycworCisgICAgICAgIHZhciBhZGFw
dEFzRm9yRWFjaCA9IGZ1bmN0aW9uKGYsIG8peworICAgICAgICAgICAgICAgIC8vICAgICAgc3Vt
bWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYWRhcHRzIGEgc2luZ2xlIG5v
ZGUgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbiB0aGUgZm9yRWFjaC10eXBlCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIGFjdGlvbnMuIFRoZSBpbml0aWFsIG9iamVjdCBpcyByZXR1cm5l
ZCBmcm9tIHRoZSBzcGVjaWFsaXplZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBm
dW5jdGlvbi4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGY6IEZ1bmN0aW9uCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGEgZnVuY3Rpb24gdG8gYWRhcHQKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIG86IE9iamVjdD8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYW4g
b3B0aW9uYWwgY29udGV4dCBmb3IgZgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigp
eworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGxvb3BCb2R5KGYsIGFyZ3Vt
ZW50cywgbykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7ICAgIC8vIE9i
amVjdAorICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGFkYXB0
QXNNYXAgPSBmdW5jdGlvbihmLCBvKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFkYXB0cyBhIHNpbmdsZSBub2RlIGZ1
bmN0aW9uIHRvIGJlIHVzZWQgaW4gdGhlIG1hcC10eXBlCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGFjdGlvbnMuIFRoZSByZXR1cm4gaXMgYSBuZXcgYXJyYXkgb2YgdmFsdWVzLCBh
cyB2aWEgYGRvam8ubWFwYAorICAgICAgICAgICAgICAgIC8vICAgICAgZjogRnVuY3Rpb24KKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBmdW5jdGlvbiB0byBhZGFwdAorICAgICAg
ICAgICAgICAgIC8vICAgICAgbzogT2JqZWN0PworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBhbiBvcHRpb25hbCBjb250ZXh0IGZvciBmCisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAobG9vcEJv
ZHkoZiwgYXJndW1lbnRzLCBvKSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKwor
ICAgICAgICB2YXIgYWRhcHRBc0ZpbHRlciA9IGZ1bmN0aW9uKGYsIG8peworICAgICAgICAgICAg
ICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYWRh
cHRzIGEgc2luZ2xlIG5vZGUgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbiB0aGUgZmlsdGVyLXR5cGUg
YWN0aW9ucworICAgICAgICAgICAgICAgIC8vICAgICAgZjogRnVuY3Rpb24KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgYSBmdW5jdGlvbiB0byBhZGFwdAorICAgICAgICAgICAgICAg
IC8vICAgICAgbzogT2JqZWN0PworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbiBv
cHRpb25hbCBjb250ZXh0IGZvciBmCisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIobG9vcEJvZHkoZiwg
YXJndW1lbnRzLCBvKSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAg
ICB2YXIgYWRhcHRXaXRoQ29uZGl0aW9uID0gZnVuY3Rpb24oZiwgZywgbyl7CisgICAgICAgICAg
ICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBh
ZGFwdHMgYSBzaW5nbGUgbm9kZSBmdW5jdGlvbiB0byBiZSB1c2VkIGluIHRoZSBtYXAtdHlwZQor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhY3Rpb25zLCBiZWhhdmVzIGxpa2UgZm9y
RWFjaCgpIG9yIG1hcCgpIGRlcGVuZGluZyBvbiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAv
LyAgICAgIGY6IEZ1bmN0aW9uCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGEgZnVu
Y3Rpb24gdG8gYWRhcHQKKyAgICAgICAgICAgICAgICAvLyAgICAgIGc6IEZ1bmN0aW9uCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGEgY29uZGl0aW9uIGZ1bmN0aW9uLCBpZiB0cnVl
IHJ1bnMgYXMgbWFwKCksIG90aGVyd2lzZSBydW5zIGFzIGZvckVhY2goKQorICAgICAgICAgICAg
ICAgIC8vICAgICAgbzogT2JqZWN0PworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBh
biBvcHRpb25hbCBjb250ZXh0IGZvciBmIGFuZCBnCisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGFyZ3VtZW50cywgYm9k
eSA9IGxvb3BCb2R5KGYsIGEsIG8pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZy5jYWxs
KG8gfHwgZC5nbG9iYWwsIGEpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMubWFwKGJvZHkpOyAgLy8gc2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGJvZHkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7ICAgIC8vIHNlbGYKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICB9OworCisgICAgICAgIHZhciBtYWdpY0d1YXJkID0gZnVuY3Rpb24oYSl7CisgICAg
ICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICB0aGUgZ3VhcmQgZnVuY3Rpb24gZm9yIGRvam8uYXR0cigpIGFuZCBkb2pvLnN0eWxlKCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gYS5sZW5ndGggPT0gMSAmJiAodHlwZW9mIGFbMF0gPT0g
InN0cmluZyIpOyAvLyBpbmxpbmUnZCB0eXBlIGNoZWNrCisgICAgICAgIH07CisKKyAgICAgICAg
dmFyIG9ycGhhbiA9IGZ1bmN0aW9uKG5vZGUpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3Vt
bWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gb3JwaGFu
IG5vZGVzCisgICAgICAgICAgICAgICAgdmFyIHAgPSBub2RlLnBhcmVudE5vZGU7CisgICAgICAg
ICAgICAgICAgaWYocCl7CisgICAgICAgICAgICAgICAgICAgICAgICBwLnJlbW92ZUNoaWxkKG5v
ZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgLy8gRklYTUU6IHNo
b3VsZCB3ZSBtb3ZlIG9ycGhhbigpIHRvIGRvam8uaHRtbD8KKworICAgICAgICBkb2pvLk5vZGVM
aXN0ID0gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8uTm9kZUxpc3QgaXMgYW4gb2YgQXJyYXkg
c3ViY2xhc3Mgd2hpY2ggYWRkcyBzeW50YWN0aWMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgc3VnYXIgZm9yIGNoYWluaW5nLCBjb21tb24gaXRlcmF0aW9uIG9wZXJhdGlvbnMsIGFu
aW1hdGlvbiwgYW5kCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5vZGUgbWFuaXB1
bGF0aW9uLiBOb2RlTGlzdHMgYXJlIG1vc3Qgb2Z0ZW4gcmV0dXJuZWQgYXMgdGhlCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIHJlc3VsdCBvZiBkb2pvLnF1ZXJ5KCkgY2FsbHMuCisg
ICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgZG9qby5Ob2RlTGlzdCBpbnN0YW5jZXMgcHJvdmlkZSBtYW55IHV0aWxpdGll
cyB0aGF0IHJlZmxlY3QKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY29yZSBEb2pv
IEFQSXMgZm9yIEFycmF5IGl0ZXJhdGlvbiBhbmQgbWFuaXB1bGF0aW9uLCBET00KKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgbWFuaXB1bGF0aW9uLCBhbmQgZXZlbnQgaGFuZGxpbmcu
IEluc3RlYWQgb2YgbmVlZGluZyB0byBkaWcgdXAKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgZnVuY3Rpb25zIGluIHRoZSBkb2pvLiogbmFtZXNwYWNlLCBOb2RlTGlzdHMgZ2VuZXJh
bGx5IG1ha2UgdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZ1bGwgcG93ZXIg
b2YgRG9qbyBhdmFpbGFibGUgZm9yIERPTSBtYW5pcHVsYXRpb24gdGFza3MgaW4gYQorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBzaW1wbGUsIGNoYWluYWJsZSB3YXkuCisgICAgICAg
ICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBjcmVhdGUgYSBub2RlIGxpc3QgZnJvbSBhIG5vZGUKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgfCAgICAgICBuZXcgZG9qby5Ob2RlTGlzdChkb2pvLmJ5SWQoImZvbyIpKTsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGdldCBhIE5vZGVMaXN0IGZyb20gYSBDU1MgcXVlcnkgYW5kIGl0ZXJhdGUgb24gaXQK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB2YXIgbCA9IGRvam8ucXVl
cnkoIi50aGluZ2VyIik7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAg
bC5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUsIGluZGV4LCBub2RlTGlzdCl7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpbmRleCwgbm9k
ZS5pbm5lckhUTUwpOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIH0p
OworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgdXNlIG5hdGl2ZSBhbmQgRG9qby1wcm92aWRlZCBhcnJheSBtZXRob2RzIHRv
IG1hbmlwdWxhdGUgYQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBOb2RlTGlzdCB3
aXRob3V0IG5lZWRpbmcgdG8gdXNlIGRvam8uKiBmdW5jdGlvbnMgZXhwbGljaXRseToKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB2YXIgbCA9IGRvam8ucXVlcnkoIi50
aGluZ2VyIik7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgLy8gc2lu
Y2UgTm9kZUxpc3RzIGFyZSByZWFsIGFycmF5cywgdGhleSBoYXZlIGEgbGVuZ3RoCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgLy8gcHJvcGVydHkgdGhhdCBpcyBib3Ro
IHJlYWRhYmxlIGFuZCB3cml0YWJsZSBhbmQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgfCAgICAgICAvLyBwdXNoL3BvcC9zaGlmdC91bnNoaWZ0IG1ldGhvZHMKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBjb25zb2xlLmxvZyhsLmxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgbC5wdXNoKGRvam8uY3JlYXRlKCJz
cGFuIikpOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHwgICAgICAgLy8gZG9qbydzIG5vcm1hbGl6ZWQgYXJyYXkgbWV0
aG9kcyB3b3JrIHRvbzoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBj
b25zb2xlLmxvZyggbC5pbmRleE9mKGRvam8uYnlJZCgiZm9vIikpICk7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHwgICAgICAgLy8gLi4uaW5jbHVkaW5nIHRoZSBzcGVjaWFsICJm
dW5jdGlvbiBhcyBzdHJpbmciIHNob3J0aGFuZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICB8ICAgICAgIGNvbnNvbGUubG9nKCBsLmV2ZXJ5KCJpdGVtLm5vZGVUeXBlID09IDEiKSAp
OworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIHwgICAgICAgLy8gTm9kZUxpc3RzIGNhbiBiZSBbLi5dIGluZGV4ZWQsIG9y
IHlvdSBjYW4gdXNlIHRoZSBhdCgpCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwg
ICAgICAgLy8gZnVuY3Rpb24gdG8gZ2V0IHNwZWNpZmljIGl0ZW1zIHdyYXBwZWQgaW4gYSBuZXcg
Tm9kZUxpc3Q6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgdmFyIG5v
ZGUgPSBsWzNdOyAvLyB0aGUgNHRoIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgfCAgICAgICB2YXIgbmV3TGlzdCA9IGwuYXQoMSwgMyk7IC8vIHRoZSAybmQgYW5kIDR0
aCBlbGVtZW50cworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgdGhlIHN0eWxlIGZ1bmN0aW9ucyB5b3UgZXhwZWN0IGFyZSBh
bGwgdGhlcmUgdG9vOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIC8v
IHN0eWxlKCkgYXMgYSBnZXR0ZXIuLi4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
fCAgICAgICB2YXIgYm9yZGVycyA9IGRvam8ucXVlcnkoIi50aGluZ2VyIikuc3R5bGUoImJvcmRl
ciIpOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgIC8vIC4uLmFuZCBh
cyBhIHNldHRlcjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBkb2pv
LnF1ZXJ5KCIudGhpbmdlciIpLnN0eWxlKCJib3JkZXIiLCAiMXB4IHNvbGlkIGJsYWNrIik7Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgLy8gY2xhc3MgbWFuaXB1bGF0
aW9uCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgZG9qby5xdWVyeSgi
bGk6bnRoLWNoaWxkKGV2ZW4pIikuYWRkQ2xhc3MoImV2ZW4iKTsKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgfCAgICAgICAvLyBldmVuIGdldHRpbmcgdGhlIGNvb3JkaW5hdGVzIG9m
IGFsbCB0aGUgaXRlbXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB2
YXIgY29vcmRzID0gZG9qby5xdWVyeSgiLnRoaW5nZXIiKS5jb29yZHMoKTsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIERP
TSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGZyb20gdGhlIGRvam8uKiBuYW1lc3BhY2UgYXJlYSBh
bHNvCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGF2YWlsYWJsZToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAvLyByZW1vdmUgYWxsIG9mIHRoZSBlbGVt
ZW50cyBpbiB0aGUgbGlzdCBmcm9tIHRoZWlyCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIHwgICAgICAgLy8gcGFyZW50cyAoYWtpbiB0byAiZGVsZXRpbmciIHRoZW0gZnJvbSB0aGUg
ZG9jdW1lbnQpCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgZG9qby5x
dWVyeSgiLnRoaW5nZXIiKS5vcnBoYW4oKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgfCAgICAgICAvLyBwbGFjZSBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXQgdGhlIGZyb250
IG9mICNmb28KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBkb2pvLnF1
ZXJ5KCIudGhpbmdlciIpLnBsYWNlKCJmb28iLCAiZmlyc3QiKTsKKyAgICAgICAgICAgICAgICAv
LyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEV2ZW50IGhh
bmRsaW5nIGNvdWxkbid0IGJlIGVhc2llci4gYGRvam8uY29ubmVjdGAgaXMgbWFwcGVkIGluLAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbmQgc2hvcnRjdXQgaGFuZGxlcnMgYXJl
IHByb3ZpZGVkIGZvciBtb3N0IERPTSBldmVudHM6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIHwgICAgICAgLy8gbGlrZSBkb2pvLmNvbm5lY3QoKSwgYnV0IHdpdGggaW1wbGljaXQg
c2NvcGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5
KCJsaSIpLmNvbm5lY3QoIm9uY2xpY2siLCBjb25zb2xlLCAibG9nIik7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAg
ICAgICAvLyBtYW55IGNvbW1vbiBldmVudCBoYW5kbGVycyBhcmUgYWxyZWFkeSBhdmFpbGFibGUg
ZGlyZWN0bHk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgZG9qby5x
dWVyeSgibGkiKS5vbmNsaWNrKGNvbnNvbGUsICJsb2ciKTsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgfCAgICAgICB2YXIgdG9nZ2xlSG92ZXJlZCA9IGRvam8uaGl0Y2goZG9qbywg
InRvZ2dsZUNsYXNzIiwgImhvdmVyZWQiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgfCAgICAgICBkb2pvLnF1ZXJ5KCJwIikKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgIC5vbm1vdXNlZW50ZXIodG9nZ2xlSG92ZXJlZCkKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIC5vbm1vdXNlbGVhdmUodG9n
Z2xlSG92ZXJlZCk7CisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBjaGFpbmFiaWxpdHkgaXMgYSBrZXkgYWR2YW50YWdlIG9m
IE5vZGVMaXN0czoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBkb2pv
LnF1ZXJ5KCIudGhpbmdlciIpCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAub25jbGljayhmdW5jdGlvbihlKXsgLyogLi4uICovIH0pCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAuYXQoMSwgMywgOCkgLy8gZ2V0
IGEgc3Vic2V0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgIC5zdHlsZSgicGFkZGluZyIsICI1cHgiKQorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChjb25zb2xlLmxvZyk7
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdG5sKEFycmF5LmFwcGx5KG51bGwsIGFyZ3VtZW50
cykpOworICAgICAgICB9OworCisgICAgICAgIC8vQWxsb3cgdGhpbmdzIHRoYXQgbmV3IHVwIGEg
Tm9kZUxpc3QgdG8gdXNlIGEgZGVsZWdhdGVkIG9yIGFsdGVybmF0ZSBOb2RlTGlzdCBpbXBsZW1l
bnRhdGlvbi4KKyAgICAgICAgZC5fTm9kZUxpc3RDdG9yID0gZC5Ob2RlTGlzdDsKKworICAgICAg
ICB2YXIgbmwgPSBkLk5vZGVMaXN0LCBubHAgPSBubC5wcm90b3R5cGU7CisKKyAgICAgICAgLy8g
ZXhwb3NlIGFkYXB0ZXJzIGFuZCB0aGUgd3JhcHBlciBhcyBwcml2YXRlIGZ1bmN0aW9ucworCisg
ICAgICAgIG5sLl93cmFwID0gbmxwLl93cmFwID0gdG5sOworICAgICAgICBubC5fYWRhcHRBc01h
cCA9IGFkYXB0QXNNYXA7CisgICAgICAgIG5sLl9hZGFwdEFzRm9yRWFjaCA9IGFkYXB0QXNGb3JF
YWNoOworICAgICAgICBubC5fYWRhcHRBc0ZpbHRlciAgPSBhZGFwdEFzRmlsdGVyOworICAgICAg
ICBubC5fYWRhcHRXaXRoQ29uZGl0aW9uID0gYWRhcHRXaXRoQ29uZGl0aW9uOworCisgICAgICAg
IC8vIG1hc3MgYXNzaWdubWVudAorCisgICAgICAgIC8vIGFkZCBhcnJheSByZWRpcmVjdG9ycwor
ICAgICAgICBkLmZvckVhY2goWyJzbGljZSIsICJzcGxpY2UiXSwgZnVuY3Rpb24obmFtZSl7Cisg
ICAgICAgICAgICAgICAgdmFyIGYgPSBhcFtuYW1lXTsKKyAgICAgICAgICAgICAgICAvL1VzZSBh
IGNvcHkgb2YgdGhlIHRoaXMgYXJyYXkgdmlhIHRoaXMuc2xpY2UoKSB0byBhbGxvdyAuZW5kKCkg
dG8gd29yayByaWdodCBpbiB0aGUgc3BsaWNlIGNhc2UuCisgICAgICAgICAgICAgICAgLy8gQ0FO
Tk9UIGFwcGx5IC5fc3Rhc2goKS9lbmQoKSB0byBzcGxpY2Ugc2luY2UgaXQgY3VycmVudGx5IG1v
ZGlmaWVzCisgICAgICAgICAgICAgICAgLy8gdGhlIGV4aXN0aW5nIHRoaXMgYXJyYXkgLS0gaXQg
d291bGQgYnJlYWsgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpZiB3ZSBjb3B5IHRoZSBhcnJheSBi
ZWZvcmUKKyAgICAgICAgICAgICAgICAvLyB0aGUgc3BsaWNlIHNvIHRoYXQgd2UgY2FuIHVzZSAu
ZW5kKCkuIFNvIG9ubHkgZG9pbmcgdGhlIHN0YXNoIG9wdGlvbiB0byB0aGlzLl93cmFwIGZvciBz
bGljZS4KKyAgICAgICAgICAgICAgICBubHBbbmFtZV0gPSBmdW5jdGlvbigpeyByZXR1cm4gdGhp
cy5fd3JhcChmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIG5hbWUgPT0gInNsaWNlIiA/IHRoaXMg
OiBudWxsKTsgfTsKKyAgICAgICAgfSk7CisgICAgICAgIC8vIGNvbmNhdCBzaG91bGQgYmUgaGVy
ZSBidXQgc29tZSBicm93c2VycyB3aXRoIG5hdGl2ZSBOb2RlTGlzdCBoYXZlIHByb2JsZW1zIHdp
dGggaXQKKworICAgICAgICAvLyBhZGQgYXJyYXkuanMgcmVkaXJlY3RvcnMKKyAgICAgICAgZC5m
b3JFYWNoKFsiaW5kZXhPZiIsICJsYXN0SW5kZXhPZiIsICJldmVyeSIsICJzb21lIl0sIGZ1bmN0
aW9uKG5hbWUpeworICAgICAgICAgICAgICAgIHZhciBmID0gZFtuYW1lXTsKKyAgICAgICAgICAg
ICAgICBubHBbbmFtZV0gPSBmdW5jdGlvbigpeyByZXR1cm4gZi5hcHBseShkLCBbdGhpc10uY29u
Y2F0KGFwcy5jYWxsKGFyZ3VtZW50cywgMCkpKTsgfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
Ly8gYWRkIGNvbmRpdGlvbmFsIG1ldGhvZHMKKyAgICAgICAgZC5mb3JFYWNoKFsiYXR0ciIsICJz
dHlsZSJdLCBmdW5jdGlvbihuYW1lKXsKKyAgICAgICAgICAgICAgICBubHBbbmFtZV0gPSBhZGFw
dFdpdGhDb25kaXRpb24oZFtuYW1lXSwgbWFnaWNHdWFyZCk7CisgICAgICAgIH0pOworCisgICAg
ICAgIC8vIGFkZCBmb3JFYWNoIGFjdGlvbnMKKyAgICAgICAgZC5mb3JFYWNoKFsiY29ubmVjdCIs
ICJhZGRDbGFzcyIsICJyZW1vdmVDbGFzcyIsICJyZXBsYWNlQ2xhc3MiLCAidG9nZ2xlQ2xhc3Mi
LCAiZW1wdHkiLCAicmVtb3ZlQXR0ciJdLCBmdW5jdGlvbihuYW1lKXsKKyAgICAgICAgICAgICAg
ICBubHBbbmFtZV0gPSBhZGFwdEFzRm9yRWFjaChkW25hbWVdKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZG9qby5leHRlbmQoZG9qby5Ob2RlTGlzdCwgeworICAgICAgICAgICAgICAgIF9ub3Jt
YWxpemU6IGZ1bmN0aW9uKC8qU3RyaW5nfHxFbGVtZW50fHxPYmplY3R8fE5vZGVMaXN0Ki9jb250
ZW50LCAvKkRPTU5vZGU/Ki9yZWZOb2RlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1
bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbm9ybWFsaXpl
cyBkYXRhIHRvIGFuIGFycmF5IG9mIGl0ZW1zIHRvIGluc2VydC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIElmIGNvbnRlbnQgaXMgYW4gb2JqZWN0LCBpdCBjYW4gaGF2ZSBzcGVjaWFsIHByb3Bl
cnRpZXMgInRlbXBsYXRlIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICAicGFyc2UiLiBJZiAidGVtcGxhdGUiIGlzIGRlZmluZWQsIHRoZW4gdGhlIHRlbXBsYXRl
IHZhbHVlIGlzIHJ1biB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgZG9qby5zdHJpbmcuc3Vic3RpdHV0ZSAoaWYgZG9qby5zdHJpbmcuc3Vic3RpdHV0ZSBo
YXMgYmVlbiBkb2pvLnJlcXVpcmVkIGVsc2V3aGVyZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgb3IgaWYgdGVtcGxhdGVGdW5jIGlzIGEgZnVuY3Rpb24gb24gdGhl
IGNvbnRlbnQsIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSB0ZW1wbGF0ZSBpbnRvIGEgZmlu
YWwgc3RyaW5nIHRvIGJlIHVzZWQgZm9yIGZvciBwYXNzaW5nIHRvIGRvam8uX3RvRG9tLgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmIGNvbnRlbnQucGFyc2UgaXMg
dHJ1ZSwgdGhlbiBpdCBpcyByZW1lbWJlcmVkIGZvciBsYXRlciwgZm9yIHdoZW4gdGhlIGNvbnRl
bnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBub2RlcyBhcmUgaW5z
ZXJ0ZWQgaW50byB0aGUgRE9NLiBBdCB0aGF0IHBvaW50LCB0aGUgbm9kZXMgd2lsbCBiZSBwYXJz
ZWQgZm9yIHdpZGdldHMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAo
aWYgZG9qby5wYXJzZXIgaGFzIGJlZW4gZG9qby5yZXF1aXJlZCBlbHNld2hlcmUpLgorCisgICAg
ICAgICAgICAgICAgICAgICAgICAvL1dhbnRlZCB0byBqdXN0IHVzZSBhIERvY3VtZW50RnJhZ21l
bnQsIGJ1dCBmb3IgdGhlIGFycmF5L05vZGVMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAv
L2Nhc2UgdGhhdCBtZWFudCAgdXNpbmcgY2xvbmVOb2RlLCBidXQgd2UgbWF5IG5vdCB3YW50IHRo
YXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvL0Nsb25pbmcgc2hvdWxkIG9ubHkgaGFwcGVu
IGlmIHRoZSBub2RlIG9wZXJhdGlvbnMgc3BhbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9t
dWx0aXBsZSByZWZOb2Rlcy4gQWxzbywgbmVlZCBhIHJlYWwgYXJyYXksIG5vdCBhIE5vZGVMaXN0
IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvL0RPTSBzaW5jZSB0aGUgbm9kZSBt
b3ZlbWVudHMgY291bGQgY2hhbmdlIHRob3NlIE5vZGVMaXN0cy4KKworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHBhcnNlID0gY29udGVudC5wYXJzZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxz
ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9EbyB3ZSBoYXZlIGFuIG9iamVjdCB0aGF0
IG5lZWRzIHRvIGJlIHJ1biB0aHJvdWdoIGEgdGVtcGxhdGU/CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZih0eXBlb2YgY29udGVudC50ZW1wbGF0ZSA9PSAic3RyaW5nIil7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZUZ1bmMgPSBjb250ZW50LnRlbXBsYXRl
RnVuYyB8fCAoZG9qby5zdHJpbmcgJiYgZG9qby5zdHJpbmcuc3Vic3RpdHV0ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0ZW1wbGF0ZUZ1bmMgPyB0ZW1wbGF0
ZUZ1bmMoY29udGVudC50ZW1wbGF0ZSwgY29udGVudCkgOiBjb250ZW50OworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9ICh0eXBl
b2YgY29udGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlID09ICJzdHJpbmci
IHx8IHR5cGUgPT0gIm51bWJlciIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZW50ID0gZG9qby5fdG9Eb20oY29udGVudCwgKHJlZk5vZGUgJiYgcmVmTm9kZS5vd25lckRv
Y3VtZW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbnRlbnQubm9k
ZVR5cGUgPT0gMTEpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
RG9jdW1lbnRGcmFnbWVudC4gSXQgY2Fubm90IGhhbmRsZSBjbG9uZU5vZGUgY2FsbHMsIHNvIHB1
bGwgb3V0IHRoZSBjaGlsZHJlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZW50ID0gZG9qby5fdG9BcnJheShjb250ZW50LmNoaWxkTm9kZXMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZW50ID0gW2NvbnRlbnRdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZighZG9qby5p
c0FycmF5TGlrZShjb250ZW50KSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRlbnQgPSBbY29udGVudF07CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZighZG9q
by5pc0FycmF5KGNvbnRlbnQpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9U
byBnZXQgdG8gdGhpcyBwb2ludCwgY29udGVudCBpcyBhcnJheS1saWtlLCBidXQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy9ub3QgYW4gYXJyYXksIHdoaWNoIGxpa2VseSBtZWFu
cyBhIERPTSBOb2RlTGlzdC4gQ29udmVydCBpdCBub3cuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRlbnQgPSBkb2pvLl90b0FycmF5KGNvbnRlbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL1Bhc3MgYXJvdW5kIHRo
ZSBwYXJzZSBpbmZvCisgICAgICAgICAgICAgICAgICAgICAgICBpZihwYXJzZSl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuX3J1blBhcnNlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250
ZW50OyAvL0FycmF5CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIF9jbG9u
ZU5vZGU6IGZ1bmN0aW9uKC8qRE9NTm9kZSovIG5vZGUpeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBw
cml2YXRlIHV0aWxpdHkgdG8gY2xvbmUgYSBub2RlLiBOb3QgdmVyeSBpbnRlcmVzdGluZyBpbiB0
aGUgdmFuaWxsYQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8u
Tm9kZUxpc3QgY2FzZSwgYnV0IGRlbGVnYXRlcyBjb3VsZCBkbyBpbnRlcmVzdGluZyB0aGluZ3Mg
bGlrZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNsb25lIGV2ZW50
IGhhbmRsZXJzIGlmIHRoYXQgaXMgZGVyaXZhYmxlIGZyb20gdGhlIG5vZGUuCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jbG9uZU5vZGUodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgICAgIF9wbGFjZTogZnVuY3Rpb24oLypBcnJheSovYXJ5LCAv
KkRPTU5vZGUqL3JlZk5vZGUsIC8qU3RyaW5nKi9wb3NpdGlvbiwgLypCb29sZWFuKi91c2VDbG9u
ZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIHByaXZhdGUgdXRpbGl0eSB0byBoYW5kbGUgcGxhY2lu
ZyBhbiBhcnJheSBvZiBub2RlcyByZWxhdGl2ZSB0byBhbm90aGVyIG5vZGUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBBbGxvd3MgZm9yIGNsb25pbmcgdGhlIG5vZGVzIGluIHRoZSBhcnJheSwg
YW5kIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG9wdGlvbmFs
bHkgcGFyc2luZyB3aWRnZXRzLCBpZiBhcnkuX3J1blBhcnNlIGlzIHRydWUuCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vQXZvaWQgYSBkaXNhbGxvd2VkIG9wZXJhdGlvbiBpZiB0cnlpbmcg
dG8gZG8gYW4gaW5uZXJIVE1MIG9uIGEgbm9uLWVsZW1lbnQgbm9kZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKHJlZk5vZGUubm9kZVR5cGUgIT0gMSAmJiBwb3NpdGlvbiA9PSAib25seSIp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgck5vZGUgPSByZWZOb2Rl
LCB0ZW1wTm9kZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9BbHdheXMgY3ljbGUgYmFj
a3dhcmRzIGluIGNhc2UgdGhlIGFycmF5IGlzIHJlYWxseSBhCisgICAgICAgICAgICAgICAgICAg
ICAgICAvL0RPTSBOb2RlTGlzdCBhbmQgdGhlIERPTSBvcGVyYXRpb25zIHRha2UgaXQgb3V0IG9m
IHRoZSBsaXZlIGNvbGxlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3Ro
ID0gYXJ5Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IGxlbmd0
aCAtIDE7IGkgPj0gMDsgaS0tKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG5vZGUgPSAodXNlQ2xvbmUgPyB0aGlzLl9jbG9uZU5vZGUoYXJ5W2ldKSA6IGFyeVtpXSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBuZWVkIHdpZGdldCBwYXJzaW5n
LCB1c2UgYSB0ZW1wIG5vZGUsIGluc3RlYWQgb2Ygd2FpdGluZyBhZnRlciBpbnNlcnRpbmcgaW50
bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JlYWwgRE9NIGJlY2F1c2Ugd2Ug
bmVlZCB0byBzdGFydCB3aWRnZXQgcGFyc2luZyBhdCBvbmUgbm9kZSB1cCBmcm9tIGN1cnJlbnQg
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93aGljaCBjb3VsZCBjYXVz
ZSBzb21lIGFscmVhZHkgcGFyc2VkIHdpZGdldHMgdG8gYmUgcGFyc2VkIGFnYWluLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhcnkuX3J1blBhcnNlICYmIGRvam8ucGFyc2Vy
ICYmIGRvam8ucGFyc2VyLnBhcnNlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZighdGVtcE5vZGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVtcE5vZGUgPSByTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTm9kZS5hcHBlbmRDaGls
ZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2pvLnBh
cnNlci5wYXJzZSh0ZW1wTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IHRlbXBOb2RlLmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2hpbGUodGVtcE5vZGUuZmlyc3RDaGlsZCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTm9kZS5yZW1vdmVDaGls
ZCh0ZW1wTm9kZS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZihpID09IGxlbmd0aCAtIDEpeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvam8ucGxhY2Uobm9kZSwgck5vZGUsIHBvc2l0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgck5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZv
cmUobm9kZSwgck5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJOb2RlID0gbm9kZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgX3N0YXNo
OiBmdW5jdGlvbihwYXJlbnQpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBwcml2YXRlIGZ1bmN0aW9u
IHRvIGhvbGQgdG8gYSBwYXJlbnQgTm9kZUxpc3QuIGVuZCgpIHRvIHJldHVybiB0aGUgcGFyZW50
IE5vZGVMaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBIb3cgdG8gbWFr
ZSBhIGBkb2pvLk5vZGVMaXN0YCBtZXRob2QgdGhhdCBvbmx5IHJldHVybnMgdGhlIHRoaXJkIG5v
ZGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBkb2pvLk5vZGVMaXN0IGJ1dCBh
bGxvd3MgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCBOb2RlTGlzdCBieSB1c2luZyB0aGlzLl9zdGFz
aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLmV4dGVuZChk
b2pvLk5vZGVMaXN0LCB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
ICAgICAgICB0aGlyZDogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICB8
ICAgICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlTGlzdCA9IGRvam8uTm9kZUxpc3QodGhpc1sy
XSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuZXdOb2RlTGlzdC5fc3Rhc2godGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgIHwgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAg
ICAgLy8gdGhlbiBzZWUgaG93IF9zdGFzaCBhcHBsaWVzIGEgc3ViLWxpc3QsIHRvIGJlIC5lbmQo
KSdlZCBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pv
LnF1ZXJ5KCIuZm9vIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAg
ICAgICAgIC50aGlyZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgIC5hZGRDbGFzcygidGhpcmRGb28iKQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgLmVuZCgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAvLyBhY2Nlc3MgdG8gdGhlIG9yaWcgLmZvbyBs
aXN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAucmVt
b3ZlQ2xhc3MoImZvbyIpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXJl
bnQgPSBwYXJlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsgLy9kb2pv
Lk5vZGVMaXN0CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGVuZDogZnVu
Y3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRW5kcyB1c2Ugb2YgdGhlIGN1cnJlbnQgYGRv
am8uTm9kZUxpc3RgIGJ5IHJldHVybmluZyB0aGUgcHJldmlvdXMgZG9qby5Ob2RlTGlzdAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoYXQgZ2VuZXJhdGVkIHRoZSBj
dXJyZW50IGRvam8uTm9kZUxpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNjcmlw
dGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIHRo
ZSBgZG9qby5Ob2RlTGlzdGAgdGhhdCBnZW5lcmF0ZWQgdGhlIGN1cnJlbnQgYGRvam8uTm9kZUxp
c3RgLiBJZiB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGlz
IG5vIHBhcmVudCBkb2pvLk5vZGVMaXN0LCBhbiBlbXB0eSBkb2pvLk5vZGVMaXN0IGlzIHJldHVy
bmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5KCJhIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIC5maWx0ZXIoIi5kaXNhYmxlZCIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIC8v
IG9wZXJhdGUgb24gdGhlIGFuY2hvcnMgdGhhdCBvbmx5IGhhdmUgYSBkaXNhYmxlZCBjbGFzcwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAu
c3R5bGUoImNvbG9yIiwgImdyZXkiKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgICAgICAgICAgLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwg
ICAgICAgICAgICAgICAvLyBqdW1wIGJhY2sgdG8gdGhlIGxpc3Qgb2YgYW5jaG9ycworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgLnN0eWxlKC4uLikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlz
Ll9wYXJlbnQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
cGFyZW50OworICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vSnVzdCByZXR1cm4gZW1wdHkgbGlzdC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLl9Ob2RlTGlzdEN0b3IoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlw
dF8xLjVfUmVmZXJlbmNlOkdsb2JhbF9PYmplY3RzOkFycmF5I01ldGhvZHMKKworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgcmV0dXJuIHZhbHVlcyBmb3IgIzMyNDQKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgaHR0cDovL3RyYWMuZG9qb3Rvb2xraXQub3JnL3RpY2tl
dC8zMjQ0CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRToKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgbmVlZCB0byB3cmFwIG9yIGltcGxlbWVudDoKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICBqb2luIChwZXJoYXBzIHcvIGlubmVySFRNTC9vdXRlckhU
TUwgb3ZlcmxvYWQgZm9yIHRvU3RyaW5nKCkgb2YgaXRlbXM/KQorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgIHJlZHVjZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgIHJlZHVjZVJpZ2h0CisKKyAgICAgICAgICAgICAgICAvKj09PT09CisgICAg
ICAgICAgICAgICAgc2xpY2U6IGZ1bmN0aW9uKGJlZ2luLCBlbmQpeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBSZXR1cm5zIGEgbmV3IE5vZGVMaXN0LCBtYWludGFpbmluZyB0aGlzIG9uZSBpbiBwbGFj
ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVzY3JpcHRpb246CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhpcyBtZXRob2QgYmVoYXZlcyBleGFjdGx5IGxp
a2UgdGhlIEFycmF5LnNsaWNlIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHdpdGggdGhlIGNhdmVhdCB0aGF0IGl0IHJldHVybnMgYSBkb2pvLk5vZGVMaXN0
IGFuZCBub3QgYQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHJhdyBB
cnJheS4gRm9yIG1vcmUgZGV0YWlscywgc2VlIE1vemlsbGEncyAoc2xpY2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uKVtodHRwOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6R2xv
YmFsX09iamVjdHM6QXJyYXk6c2xpY2VdCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWdp
bjogSW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIENhbiBi
ZSBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXIsIHdpdGggcG9zaXRpdmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpbnRlZ2VycyBub3RpbmcgdGhlIG9mZnNl
dCB0byBiZWdpbiBhdCwgYW5kIG5lZ2F0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgaW50ZWdlcnMgZGVub3RpbmcgYW4gb2Zmc2V0IGZyb20gdGhlIGVuZCAoaS5l
LiwgdG8gdGhlIGxlZnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBv
ZiB0aGUgZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kOiBJbnRlZ2VyPworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIE9wdGlvbmFsIHBhcmFtZXRlciB0
byBkZXNjcmliZSB3aGF0IHBvc2l0aW9uIHJlbGF0aXZlIHRvCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgdGhlIE5vZGVMaXN0J3MgemVybyBpbmRleCB0byBlbmQgdGhl
IHNsaWNlIGF0LiBMaWtlIGJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGNhbiBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLl93cmFwKGEuc2xpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7Cisg
ICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIHNwbGljZTogZnVuY3Rpb24oaW5k
ZXgsIGhvd21hbnksIGl0ZW0peworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIGEgbmV3IE5v
ZGVMaXN0LCBtYW5pcHVsYXRpbmcgdGhpcyBOb2RlTGlzdCBiYXNlZCBvbgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSBhcmd1bWVudHMgcGFzc2VkLCBwb3RlbnRp
YWxseSBzcGxpY2luZyBpbiBuZXcgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBhdCBhbiBvZmZzZXQsIG9wdGlvbmFsbHkgZGVsZXRpbmcgZWxlbWVudHMK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGJlaGF2ZXMgZXhhY3RseSBsaWtl
IHRoZSBBcnJheS5zcGxpY2UgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgd2l0aCB0aGUgY2F2ZWF0IHRoYXQgaXQgcmV0dXJucyBhIGRvam8uTm9kZUxpc3Qg
YW5kIG5vdCBhCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcmF3IEFy
cmF5LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgTW96aWxsYSdzIChzcGxpY2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uKVtodHRwOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6R2xv
YmFsX09iamVjdHM6QXJyYXk6c3BsaWNlXQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgY2FsbGluZyAuZW5kKCkgb24g
dGhlIHNwbGljZWQgTm9kZUxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBkb2VzIG5vdCByZXR1cm4gdGhlIG9yaWdpbmFsIE5vZGVMaXN0IC0tIHNwbGljZSBhbHRl
cnMgdGhlIE5vZGVMaXN0IGluIHBsYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5k
ZXg6IEludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBiZWdp
biBjYW4gYmUgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyLCB3aXRoIHBvc2l0aXZlCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaW50ZWdlcnMgbm90aW5nIHRo
ZSBvZmZzZXQgdG8gYmVnaW4gYXQsIGFuZCBuZWdhdGl2ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIGludGVnZXJzIGRlbm90aW5nIGFuIG9mZnNldCBmcm9tIHRoZSBl
bmQgKGkuZS4sIHRvIHRoZSBsZWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgb2YgdGhlIGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhvd21hbnk6IElu
dGVnZXI/CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgT3B0aW9uYWwg
cGFyYW1ldGVyIHRvIGRlc2NyaWJlIHdoYXQgcG9zaXRpb24gcmVsYXRpdmUgdG8KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgTm9kZUxpc3QncyB6ZXJvIGluZGV4
IHRvIGVuZCB0aGUgc2xpY2UgYXQuIExpa2UgYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgY2FuIGJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaXRlbTogT2JqZWN0Li4uPworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIEFueSBudW1iZXIgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycyBtYXkg
YmUgcGFzc2VkIGluIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgc3BsaWNlZCBpbnRvIHRoZSBOb2RlTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cmV0dXJuczoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2pvLk5v
ZGVMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd3JhcChhLnNwbGlj
ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAgICAgaW5kZXhPZjogZnVuY3Rpb24odmFsdWUsIGZyb21JbmRleCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgc2VlIGRvam8uaW5kZXhPZigpLiBUaGUgcHJpbWFyeSBkaWZmZXJlbmNl
IGlzIHRoYXQgdGhlIGFjdGVkLW9uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgYXJyYXkgaXMgaW1wbGljaXRseSB0aGlzIE5vZGVMaXN0CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB2YWx1ZTogT2JqZWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZnJvbUluZGV4OiBJbnRlZ2VyPzoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBUaGUgbG9jYXRpb24gdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uIE9wdGlvbmFs
LiBEZWZhdWx0cyB0byAwLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlw
dGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBGb3IgbW9yZSBk
ZXRhaWxzIG9uIHRoZSBiZWhhdmlvciBvZiBpbmRleE9mLCBzZWUgTW96aWxsYSdzCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgKGluZGV4T2YKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2NzKVtodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6R2xvYmFsX09iamVjdHM6
QXJyYXk6aW5kZXhPZl0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgcmV0dXJuczoK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBQb3NpdGl2ZSBJbnRlZ2Vy
IG9yIDAgZm9yIGEgbWF0Y2gsIC0xIG9mIG5vdCBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBkLmluZGV4T2YodGhpcywgdmFsdWUsIGZyb21JbmRleCk7IC8vIEludGVnZXIK
KyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgbGFzdEluZGV4T2Y6IGZ1bmN0
aW9uKHZhbHVlLCBmcm9tSW5kZXgpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFy
eToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzZWUgZG9qby5sYXN0
SW5kZXhPZigpLiBUaGUgcHJpbWFyeSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYWN0ZWQtb24gYXJyYXkgaXMgaW1wbGljaXRs
eSB0aGlzIE5vZGVMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGRlc2NyaXB0
aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEZvciBtb3JlIGRl
dGFpbHMgb24gdGhlIGJlaGF2aW9yIG9mIGxhc3RJbmRleE9mLCBzZWUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBNb3ppbGxhJ3MgKGxhc3RJbmRleE9mCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9jcylbaHR0cDovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlOkdsb2JhbF9P
YmplY3RzOkFycmF5Omxhc3RJbmRleE9mXQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFs
dWU6IE9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSB2
YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbUluZGV4
OiBJbnRlZ2VyPworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSBs
b2NhdGlvbiB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4gT3B0aW9uYWwuIERlZmF1bHRzIHRvIDAu
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zOgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIFBvc2l0aXZlIEludGVnZXIgb3IgMCBmb3IgYSBtYXRjaCwg
LTEgb2Ygbm90IGZvdW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQubGFzdElu
ZGV4T2YodGhpcywgdmFsdWUsIGZyb21JbmRleCk7IC8vIEludGVnZXIKKyAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgZXZlcnk6IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzT2Jq
ZWN0KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzZWUgYGRvam8uZXZlcnkoKWAgYW5kIHRo
ZSAoQXJyYXkuZXZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBk
b2NzKVtodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0
XzEuNV9SZWZlcmVuY2U6R2xvYmFsX09iamVjdHM6QXJyYXk6ZXZlcnldLgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRha2VzIHRoZSBzYW1lIHN0cnVjdHVyZSBvZiBh
cmd1bWVudHMgYW5kIHJldHVybnMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBkb2pvLmV2ZXJ5KCkgd2l0aCB0aGUgY2F2ZWF0IHRoYXQgdGhlIHBhc3NlZCBhcnJh
eSBpcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGltcGxpY2l0bHkg
dGhpcyBOb2RlTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2s6IEZ1bmN0
aW9uOiB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXNPYmplY3Q6
IE9iamVjdD86IHRoZSBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZC5l
dmVyeSh0aGlzLCBjYWxsYmFjaywgdGhpc09iamVjdCk7IC8vIEJvb2xlYW4KKyAgICAgICAgICAg
ICAgICB9LAorCisgICAgICAgICAgICAgICAgc29tZTogZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNP
YmplY3QpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRha2VzIHRoZSBzYW1lIHN0cnVjdHVy
ZSBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBgZG9qby5zb21lKClgIHdpdGggdGhlIGNhdmVhdCB0aGF0IHRoZSBwYXNz
ZWQgYXJyYXkgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpbXBs
aWNpdGx5IHRoaXMgTm9kZUxpc3QuICBTZWUgYGRvam8uc29tZSgpYCBhbmQgTW96aWxsYSdzCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgKEFycmF5LnNvbWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uKVtodHRwOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVu
Y2U6R2xvYmFsX09iamVjdHM6QXJyYXk6c29tZV0uCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBjYWxsYmFjazogRnVuY3Rpb246IHRoZSBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhpc09iamVjdDogT2JqZWN0PzogdGhlIGNvbnRleHQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBkLnNvbWUodGhpcywgY2FsbGJhY2ssIHRoaXNPYmplY3QpOyAvLyBCb29s
ZWFuCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICA9PT09PSovCisKKyAgICAg
ICAgICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uKGl0ZW0peworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBS
ZXR1cm5zIGEgbmV3IE5vZGVMaXN0IGNvbXByaXNlZCBvZiBpdGVtcyBpbiB0aGlzIE5vZGVMaXN0
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYXMgd2VsbCBhcyBpdGVt
cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVz
Y3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhpcyBt
ZXRob2QgYmVoYXZlcyBleGFjdGx5IGxpa2UgdGhlIEFycmF5LmNvbmNhdCBtZXRob2QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB3aXRoIHRoZSBjYXZlYXQgdGhhdCBp
dCByZXR1cm5zIGEgYGRvam8uTm9kZUxpc3RgIGFuZCBub3QgYQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHJhdyBBcnJheS4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRo
ZSAoQXJyYXkuY29uY2F0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
ZG9jcylbaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlw
dF8xLjVfUmVmZXJlbmNlOkdsb2JhbF9PYmplY3RzOkFycmF5OmNvbmNhdF0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGl0ZW06IE9iamVjdD8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBBbnkgbnVtYmVyIG9mIG9wdGlvbmFsIHBhcmFtZXRlcnMgbWF5IGJlIHBh
c3NlZCBpbiB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNw
bGljZWQgaW50byB0aGUgTm9kZUxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVy
bnM6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9qby5Ob2RlTGlz
dAorCisgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiB0aGlzLl93cmFwKGFwYy5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsaW5l
IGFib3ZlIHdvbid0IHdvcmsgZm9yIHRoZSBuYXRpdmUgTm9kZUxpc3QgOi0oCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gMSkgTmF0aXZlIE5vZGVMaXN0IGlzIG5vdCBhbiBhcnJheSwgYW5kIGNhbm5v
dCBiZSB1c2VkIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjb25jYXQo
KSAtLS0gdGhlIGxhdHRlciBkb2Vzbid0IHJlY29nbml6ZSBpdCBhcyBhbiBhcnJheSwgYW5kCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBpbmxpbmUgaXQsIGJ1dCBhcHBlbmQg
YXMgYSBzaW5nbGUgZW50aXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gMikgT24gc29t
ZSBicm93c2VycyAoZS5nLiwgU2FmYXJpKSB0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBpcwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZC1vbmx5IGFuZCBjYW5ub3QgYmUgY2hhbmdl
ZC4gU28gd2UgaGF2ZSB0byB0ZXN0IGZvciBib3RoCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBuYXRpdmUgTm9kZUxpc3QgYW5kIGRvam8uTm9kZUxpc3QgaW4gdGhpcyBwcm9wZXJ0eSB0byBy
ZWNvZ25pemUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBub2RlIGxpc3QuCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZC5pc0FycmF5KHRoaXMpID8gdGhpcyA6IGFw
cy5jYWxsKHRoaXMsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gZC5t
YXAoYXJndW1lbnRzLCBmdW5jdGlvbihhKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYSAmJiAhZC5pc0FycmF5KGEpICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIE5vZGVMaXN0ICE9ICJ1bmRl
ZmluZWQiICYmIGEuY29uc3RydWN0b3IgPT09IE5vZGVMaXN0IHx8IGEuY29uc3RydWN0b3IgPT09
IHRoaXMuX05vZGVMaXN0Q3RvcikgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHMuY2FsbChhLCAwKSA6IGE7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3dyYXAoYXBjLmFwcGx5KHQsIG0pLCB0aGlzKTsgICAgICAgLy8gZG9qby5Ob2RlTGlzdAor
ICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBtYXA6IGZ1bmN0aW9uKC8qRnVu
Y3Rpb24qLyBmdW5jLCAvKkZ1bmN0aW9uPyovIG9iail7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgc2VlIGRvam8ubWFwKCkuIFRoZSBwcmltYXJ5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgYWN0
ZWQtb24KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhcnJheSBpcyBp
bXBsaWNpdGx5IHRoaXMgTm9kZUxpc3QgYW5kIHRoZSByZXR1cm4gaXMgYQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8uTm9kZUxpc3QgKGEgc3ViY2xhc3Mgb2Yg
QXJyYXkpCisgICAgICAgICAgICAgICAgICAgICAgICAvLy9yZXR1cm4gZC5tYXAodGhpcywgZnVu
Yywgb2JqLCBkLk5vZGVMaXN0KTsgLy8gZG9qby5Ob2RlTGlzdAorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3dyYXAoZC5tYXAodGhpcywgZnVuYywgb2JqKSwgdGhpcyk7IC8v
IGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgZm9y
RWFjaDogZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNPYmopeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIHNlZSBgZG9qby5mb3JFYWNoKClgLiBUaGUgcHJpbWFyeSBkaWZmZXJlbmNlIGlzIHRoYXQg
dGhlIGFjdGVkLW9uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYXJy
YXkgaXMgaW1wbGljaXRseSB0aGlzIE5vZGVMaXN0LiBJZiB5b3Ugd2FudCB0aGUgb3B0aW9uIHRv
IGJyZWFrIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG9mIHRo
ZSBmb3JFYWNoIGxvb3AsIHVzZSBldmVyeSgpIG9yIHNvbWUoKSBpbnN0ZWFkLgorICAgICAgICAg
ICAgICAgICAgICAgICAgZC5mb3JFYWNoKHRoaXMsIGNhbGxiYWNrLCB0aGlzT2JqKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIG5vbi1zdGFuZGFyZCByZXR1cm4gdG8gYWxsb3cgZWFzaWVy
IGNoYWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsgLy8gZG9qby5O
b2RlTGlzdAorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvKj09PT09Cisg
ICAgICAgICAgICAgICAgY29vcmRzOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIFJldHVybnMgdGhlIGJveCBvYmplY3RzIG9mIGFsbCBlbGVtZW50cyBpbiBhIG5vZGUgbGlz
dCBhcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuIEFycmF5ICgq
bm90KiBhIE5vZGVMaXN0KS4gQWN0cyBsaWtlIGBkb2pvLmNvb3Jkc2AsIHRob3VnaCBhc3N1bWVz
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIG5vZGUgcGFzc2Vk
IGlzIGVhY2ggbm9kZSBpbiB0aGlzIGxpc3QuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBkLm1hcCh0aGlzLCBkLmNvb3Jkcyk7IC8vIEFycmF5CisgICAgICAgICAgICAgICAgfSwK
KworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIFJldHVybnMgYm9yZGVyLWJveCBvYmplY3RzICh4L3kvdy9oKSBvZiBhbGwgZWxl
bWVudHMgaW4gYSBub2RlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBhcyBhbiBBcnJheSAoKm5vdCogYSBOb2RlTGlzdCkuIEFjdHMgbGlrZSBgZG9qby5wb3Np
dGlvbmAsIHRob3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFz
c3VtZXMgdGhlIG5vZGUgcGFzc2VkIGlzIGVhY2ggbm9kZSBpbiB0aGlzIGxpc3QuCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBkLm1hcCh0aGlzLCBkLnBvc2l0aW9uKTsgLy8gQXJy
YXkKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgYXR0cjogZnVuY3Rpb24o
cHJvcGVydHksIHZhbHVlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFy
eToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBnZXRzIG9yIHNldHMg
dGhlIERPTSBhdHRyaWJ1dGUgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgTm9kZUxpc3QuIFNlZSBhbHNvIGBkb2pvLmF0dHJg
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHByb3BlcnR5OiBTdHJpbmcKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgYXR0cmlidXRlIHRvIGdldC9z
ZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdmFsdWU6IFN0cmluZz8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBvcHRpb25hbC4gVGhlIHZhbHVlIHRv
IHNldCB0aGUgcHJvcGVydHkgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgcmV0
dXJuczoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZiBubyB2YWx1
ZSBpcyBwYXNzZWQsIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgb2YgYXR0cmlidXRlIHZhbHVlcwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmIGEgdmFsdWUgaXMgcGFz
c2VkLCB0aGUgcmV0dXJuIGlzIHRoaXMgTm9kZUxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBNYWtlIGFsbCBub2RlcyB3aXRoIGEgcGFydGljdWxhciBjbGFzcyBmb2N1c2FibGU6CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5xdWVyeSgiLmZvY3VzYWJs
ZSIpLmF0dHIoInRhYkluZGV4IiwgLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIERpc2Fi
bGUgYSBncm91cCBvZiBidXR0b25zOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgIGRvam8ucXVlcnkoImJ1dHRvbi5ncm91cCIpLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgaW5uZXJIVE1MIGNhbiBiZSBhc3NpZ25lZCBvciBy
ZXRyaWV2ZWQgYXMgd2VsbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICAvLyBnZXQgdGhlIGlubmVySFRNTCAoYXMgYW4gYXJyYXkpIGZvciBlYWNoIGxpc3QgaXRlbQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBpaCA9IGRvam8ucXVl
cnkoImxpLnJlcGxhY2VhYmxlIikuYXR0cigiaW5uZXJIVE1MIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47IC8vIGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsgLy8gQXJyYXkKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAg
c3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgZ2V0cyBvciBzZXRzIHRoZSBDU1MgcHJvcGVydHkgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhl
IE5vZGVMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHByb3BlcnR5OiBTdHJp
bmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgQ1NTIHByb3Bl
cnR5IHRvIGdldC9zZXQsIGluIEphdmFTY3JpcHQgbm90YXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICAoImxpbmVIaWVnaHQiIGluc3RlYWQgb2YgImxpbmUtaGVp
Z2h0IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdmFsdWU6IFN0cmluZz8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBvcHRpb25hbC4gVGhlIHZhbHVl
IHRvIHNldCB0aGUgcHJvcGVydHkgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
cmV0dXJuczoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZiBubyB2
YWx1ZSBpcyBwYXNzZWQsIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJZiBhIHZhbHVlIGlzIHBhc3NlZCwg
dGhlIHJldHVybiBpcyB0aGlzIE5vZGVMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
QXJyYXkKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgYWRkQ2xhc3M6IGZ1
bmN0aW9uKGNsYXNzTmFtZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1h
cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYWRkcyB0aGUgc3Bl
Y2lmaWVkIGNsYXNzIHRvIGV2ZXJ5IG5vZGUgaW4gdGhlIGxpc3QKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgY2xhc3NOYW1lOiBTdHJpbmd8QXJyYXkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBBIFN0cmluZyBjbGFzcyBuYW1lIHRvIGFkZCwgb3Igc2V2
ZXJhbCBzcGFjZS1zZXBhcmF0ZWQgY2xhc3MgbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgb3IgYW4gYXJyYXkgb2YgY2xhc3MgbmFtZXMuCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47IC8vIGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGNsYXNzIGZyb20g
ZXZlcnkgbm9kZSBpbiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBj
bGFzc05hbWU6IFN0cmluZ3xBcnJheT8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBBbiBvcHRpb25hbCBTdHJpbmcgY2xhc3MgbmFtZSB0byByZW1vdmUsIG9yIHNldmVy
YWwgc3BhY2Utc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgY2xhc3MgbmFtZXMsIG9yIGFuIGFycmF5IG9mIGNsYXNzIG5hbWVzLiBJZiBvbWl0dGVkLCBh
bGwgY2xhc3MgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB3
aWxsIGJlIGRlbGV0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHJldHVybnM6
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9qby5Ob2RlTGlzdCwg
dGhpcyBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGRvam8uTm9kZUxp
c3QKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3M6IGZ1
bmN0aW9uKGNsYXNzTmFtZSwgY29uZGl0aW9uKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBB
ZGRzIGEgY2xhc3MgdG8gbm9kZSBpZiBub3QgcHJlc2VudCwgb3IgcmVtb3ZlcyBpZiBwcmVzZW50
LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFBhc3MgYSBib29sZWFu
IGNvbmRpdGlvbiBpZiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IGFkZCBvciByZW1vdmUuCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGNvbmRpdGlvbjogQm9vbGVhbj8KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJZiBwYXNzZWQsIHRydWUgbWVhbnMgdG8g
YWRkIHRoZSBjbGFzcywgZmFsc2UgbWVhbnMgdG8gcmVtb3ZlLgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICBjbGFzc05hbWU6IFN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHRoZSBDU1MgY2xhc3MgdG8gYWRkCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICAgICAgY29ubmVjdDogZnVuY3Rpb24obWV0aG9kTmFtZSwgb2JqT3JGdW5jLCBmdW5j
TmFtZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYXR0YWNoIGV2ZW50IGhhbmRsZXJzIHRv
IGV2ZXJ5IGl0ZW0gb2YgdGhlIE5vZGVMaXN0LiBVc2VzIGRvam8uY29ubmVjdCgpCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgc28gZXZlbnQgcHJvcGVydGllcyBhcmUg
bm9ybWFsaXplZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBtZXRob2ROYW1lOiBT
dHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgbmFtZSBv
ZiB0aGUgbWV0aG9kIHRvIGF0dGFjaCB0by4gRm9yIERPTSBldmVudHMsIHRoaXMgc2hvdWxkIGJl
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIGxvd2VyLWNhc2Ug
bmFtZSBvZiB0aGUgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgb2JqT3JG
dW5jOiBPYmplY3R8RnVuY3Rpb258U3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgaWYgMiBhcmd1bWVudHMgYXJlIHBhc3NlZCAobWV0aG9kTmFtZSwgb2JqT3JG
dW5jKSwgb2JqT3JGdW5jIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIHJlZmVyZW5jZSBhIGZ1bmN0aW9uIG9yIGJlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlv
biBpbiB0aGUgZ2xvYmFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
bmFtZXNwYWNlIHRvIGF0dGFjaC4gSWYgMyBhcmd1bWVudHMgYXJlIHByb3ZpZGVkCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgKG1ldGhvZE5hbWUsIG9iak9yRnVuYywg
ZnVuY05hbWUpLCBvYmpPckZ1bmMgbXVzdCBiZSB0aGUgc2NvcGUgdG8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBsb2NhdGUgdGhlIGJvdW5kIGZ1bmN0aW9uIGluCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGZ1bmNOYW1lOiBTdHJpbmc/CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb3B0aW9uYWwuIEEgc3RyaW5nIG5hbWlu
ZyB0aGUgZnVuY3Rpb24gaW4gb2JqT3JGdW5jIHRvIGJpbmQgdG8gdGhlCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgZXZlbnQuIE1heSBhbHNvIGJlIGEgZnVuY3Rpb24g
cmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFkZCBhbiBvbmNsaWNrIGhhbmRs
ZXIgdG8gZXZlcnkgYnV0dG9uIG9uIHRoZSBwYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5KCJkaXY6bnRoLWNoaWxkKG9kZCkiKS5j
b25uZWN0KCJvbmNsaWNrIiwgZnVuY3Rpb24oZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJjbGlja2VkISIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIGF0dGFjaCBmb28uYmFyKCkgdG8gZXZlcnkgb2RkIGRpdidzIG9ubW91
c2VvdmVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICBk
b2pvLnF1ZXJ5KCJkaXY6bnRoLWNoaWxkKG9kZCkiKS5jb25uZWN0KCJvbm1vdXNlb3ZlciIsIGZv
bywgImJhciIpOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBlbXB0eTog
ZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjbGVhcnMgYWxsIGNvbnRlbnQg
ZnJvbSBlYWNoIG5vZGUgaW4gdGhlIGxpc3QuIEVmZmVjdGl2ZWx5CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgZXF1aXZhbGVudCB0byByZW1vdmluZyBhbGwgY2hpbGQg
bm9kZXMgZnJvbSBldmVyeSBpdGVtIGluCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgdGhlIGxpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
b3JFYWNoKCJpdGVtLmlubmVySFRNTD0nJzsiKTsgLy8gZG9qby5Ob2RlTGlzdAorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBiZSBjaGVja2luZyBmb3IgYW5kL29y
IGRpc3Bvc2luZyBvZiB3aWRnZXRzIGJlbG93IHRoZXNlIG5vZGVzPworICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgPT09PT0qLworCisgICAgICAgICAgICAgICAgLy8gdXNlZnVs
IGh0bWwgbWV0aG9kcworICAgICAgICAgICAgICAgIGNvb3JkczogYWRhcHRBc01hcChkLmNvb3Jk
cyksCisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFkYXB0QXNNYXAoZC5wb3NpdGlvbiksCisK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogY29ubmVjdFB1Ymxpc2hlcigpPyBjb25uZWN0UnVu
T25jZSgpPworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBkZXN0cm95OiBm
dW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRlc3Ryb3lzIGV2ZXJ5IGl0ZW0g
aW4gIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGQuZGVz
dHJveSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGJlIGNo
ZWNraW5nIGZvciBhbmQvb3IgZGlzcG9zaW5nIG9mIHdpZGdldHMgYmVsb3cgdGhlc2Ugbm9kZXM/
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAg
ICAgcGxhY2U6IGZ1bmN0aW9uKC8qU3RyaW5nfHxOb2RlKi8gcXVlcnlPck5vZGUsIC8qU3RyaW5n
Ki8gcG9zaXRpb24peworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHBsYWNlcyBlbGVtZW50cyBv
ZiB0aGlzIG5vZGUgbGlzdCByZWxhdGl2ZSB0byB0aGUgZmlyc3QgZWxlbWVudCBtYXRjaGVkCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYnkgcXVlcnlPck5vZGUuIFJl
dHVybnMgdGhlIG9yaWdpbmFsIE5vZGVMaXN0LiBTZWU6IGBkb2pvLnBsYWNlYAorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICBxdWVyeU9yTm9kZToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBtYXkgYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFueSB2YWxp
ZCBDU1MzIHNlbGVjdG9yIG9yIGEgRE9NIG5vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgSW4gdGhlIHNlbGVjdG9yIGNhc2UsIG9ubHkgdGhlIGZpcnN0IG1hdGNo
aW5nIGVsZW1lbnQgd2lsbCBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgZm9yIHJlbGF0aXZlIHBvc2l0aW9uaW5nLgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICBwb3NpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBjYW4gYmUgb25lIG9mOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIHwgICAgICAgImxhc3QiIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIHwgICAgICAgImZpcnN0IgorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIHwgICAgICAgImJlZm9yZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB8ICAgICAgICJhZnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB8ICAgICAgICJvbmx5IgorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIHwgICAgICAgInJlcGxhY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgb3IgYW4gb2Zmc2V0IGluIHRoZSBjaGlsZE5vZGVzIHByb3BlcnR5Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGQucXVlcnkocXVlcnlPck5vZGUpWzBd
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihu
b2RlKXsgZC5wbGFjZShub2RlLCBpdGVtLCBwb3NpdGlvbik7IH0pOyAvLyBkb2pvLk5vZGVMaXN0
CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIG9ycGhhbjogZnVuY3Rpb24o
LypTdHJpbmc/Ki8gZmlsdGVyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc3Vt
bWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICByZW1vdmVzIGVs
ZW1lbnRzIGluIHRoaXMgbGlzdCB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBmcm9tIHRoZWlyIHBhcmVudHMgYW5kIHJldHVybnMg
dGhlbSBhcyBhIG5ldyBOb2RlTGlzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ZmlsdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIENTUyBzZWxl
Y3RvciBsaWtlICIuZm9vIiBvciAiZGl2ID4gc3BhbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgcmV0dXJuczoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBgZG9qby5Ob2RlTGlzdGAgY29udGFpbmluZyB0aGUgb3JwaGFuZWQgZWxlbWVudHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoZmlsdGVyID8gZC5fZmlsdGVyUXVlcnlSZXN1bHQo
dGhpcywgZmlsdGVyKSA6IHRoaXMpLmZvckVhY2gob3JwaGFuKTsgLy8gZG9qby5Ob2RlTGlzdAor
ICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBhZG9wdDogZnVuY3Rpb24oLypT
dHJpbmd8fEFycmF5fHxEb21Ob2RlKi8gcXVlcnlPckxpc3RPck5vZGUsIC8qU3RyaW5nPyovIHBv
c2l0aW9uKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBwbGFjZXMgYW55L2FsbCBlbGVtZW50
cyBpbiBxdWVyeU9yTGlzdE9yTm9kZSBhdCBhCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhp
cyBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMg
YSBkb2pvLk5vZGVMaXN0IG9mIHRoZSBhZG9wdGVkIGVsZW1lbnRzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICBxdWVyeU9yTGlzdE9yTm9kZToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBhIERPTSBub2RlIG9yIGEgcXVlcnkgc3RyaW5nIG9yIGEgcXVl
cnkgcmVzdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJlcHJl
c2VudHMgdGhlIG5vZGVzIHRvIGJlIGFkb3B0ZWQgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZmlyc3QgZWxlbWVudCBvZiB0aGlzIE5vZGVM
aXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBwb3NpdGlvbjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjYW4gYmUgb25lIG9mOgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgImxhc3QiIChkZWZhdWx0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgImZpcnN0Igor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgImJlZm9yZSIK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICJhZnRlciIK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICJvbmx5Igor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgInJlcGxhY2Ui
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb3IgYW4gb2Zmc2V0IGlu
IHRoZSBjaGlsZE5vZGVzIHByb3BlcnR5CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZC5xdWVyeShxdWVyeU9yTGlzdE9yTm9kZSkucGxhY2UodGhpc1swXSwgcG9zaXRpb24pLl9zdGFz
aCh0aGlzKTsgICAgICAgIC8vIGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICB9LAorCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdGhpcz8KKyAgICAgICAgICAgICAg
ICBxdWVyeTogZnVuY3Rpb24oLypTdHJpbmcqLyBxdWVyeVN0cil7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgUmV0dXJucyBhIG5ldyBsaXN0IHdob3NlIG1lbWJlcnMgbWF0Y2ggdGhlIHBhc3Nl
ZCBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhc3N1bWlu
ZyBlbGVtZW50cyBvZiB0aGUgY3VycmVudCBOb2RlTGlzdCBhcyB0aGUgcm9vdCBmb3IKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBlYWNoIHNlYXJjaC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBhc3N1bWUgYSBET00gY3JlYXRlZCBieSB0aGlzIG1hcmt1cDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICA8ZGl2IGlkPSJmb28iPgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgPHA+CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIGJhY29uIGlz
IHRhc3R5LCA8c3Bhbj5kb250Y2hhIHRoaW5rPzwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICA8ZGl2IGlkPSJiYXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgICAgICAgICAgPHA+Z3JlYXQgY29tZWRpYW5zIG1heSBub3QgYmUgZnVubnkgPHNwYW4+
aW4gcGVyc29uPC9zcGFuPjwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJZiB3
ZSBhcmUgcHJlc2VudGVkIHdpdGggdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGZvciBhIE5vZGVM
aXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBsID0gbmV3
IGRvam8uTm9kZUxpc3QoZG9qby5ieUlkKCJmb28iKSwgZG9qby5ieUlkKCJiYXIiKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaXQncyBwb3NzaWJsZSB0byBmaW5k
IGFsbCBzcGFuIGVsZW1lbnRzIHVuZGVyIHBhcmFncmFwaHMKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBjb250YWluZWQgYnkgdGhlc2UgZWxlbWVudHMgd2l0aCB0aGlz
IHN1Yi1xdWVyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICB2YXIg
c3BhbnMgPSBsLnF1ZXJ5KCJwIHNwYW4iKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IHByb2JhYmx5IHNsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFxdWVyeVN0
cil7IHJldHVybiB0aGlzOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gdGhp
cy5tYXAoZnVuY3Rpb24obm9kZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiB3aHkgd291bGQgd2UgZXZlciBnZXQgdW5kZWZpbmVkIGhlcmU/CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkLnF1ZXJ5KHF1ZXJ5U3RyLCBub2RlKS5maWx0
ZXIoZnVuY3Rpb24oc3ViTm9kZSl7IHJldHVybiBzdWJOb2RlICE9PSB1bmRlZmluZWQ7IH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fd3JhcChhcGMuYXBwbHkoW10sIHJldCksIHRoaXMpOyAgICAvLyBkb2pvLk5vZGVM
aXN0CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rp
b24oLypTdHJpbmd8RnVuY3Rpb24qLyBmaWx0ZXIpeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
ICJtYXNrcyIgdGhlIGJ1aWx0LWluIGphdmFzY3JpcHQgZmlsdGVyKCkgbWV0aG9kIChzdXBwb3J0
ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpbiBEb2pvIHZpYSBg
ZG9qby5maWx0ZXJgKSB0byBzdXBwb3J0IHBhc3NpbmcgYSBzaW1wbGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBzdHJpbmcgZmlsdGVyIGluIGFkZGl0aW9uIHRvIHN1
cHBvcnRpbmcgZmlsdGVyaW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZmls
dGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIElmIGEgc3RyaW5n
LCBhIENTUyBydWxlIGxpa2UgIi50aGluZ2VyIiBvciAiZGl2ID4gc3BhbiIuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgInJlZ3VsYXIiIEpTIGZpbHRlciBzeW50YXggYXMgZXhwb3NlZCBpbiBk
b2pvLmZpbHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAg
ICAgIGRvam8ucXVlcnkoIioiKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBl
dmVyeSBwYXJhZ3JhcGgKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8
ICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtLm5vZGVOYW1lID09ICJwIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB9KS5zdHlsZSgiYmFja2dyb3Vu
ZENvbG9yIiwgInllbGxvdyIpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgc2FtZSBmaWx0ZXJp
bmcgdXNpbmcgYSBDU1Mgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgIGRvam8ucXVlcnkoIioiKS5maWx0ZXIoInAiKS5zdHlsZXMoImJhY2tn
cm91bmRDb2xvciIsICJ5ZWxsb3ciKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEg
PSBhcmd1bWVudHMsIGl0ZW1zID0gdGhpcywgc3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYodHlwZW9mIGZpbHRlciA9PSAic3RyaW5nIil7IC8vIGlubGluZSdkIHR5cGUgY2hl
Y2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBkLl9maWx0ZXJRdWVy
eVJlc3VsdCh0aGlzLCBhWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYo
YS5sZW5ndGggPT0gMSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaWYgd2Ugb25seSBnb3QgYSBzdHJpbmcgcXVlcnksIHBhc3MgYmFjayB0aGUgZmlsdGVyZWQg
cmVzdWx0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBp
dGVtcy5fc3Rhc2godGhpcyk7IC8vIGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBn
b3QgYSBjYWxsYmFjaywgcnVuIGl0IG92ZXIgdGhlIGZpbHRlcmVkIGl0ZW1zCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93cmFwKGQuZmlsdGVyKGl0
ZW1zLCBhW3N0YXJ0XSwgYVtzdGFydCArIDFdKSwgdGhpcyk7ICAgICAgIC8vIGRvam8uTm9kZUxp
c3QKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgImNvcHlUbyIgYW5kIGluY2x1ZGUgcGFyZW50
aW5nIGluZm8/CisgICAgICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGNyZWF0ZXMgbm9kZSBjbG9uZXMgb2YgZWFjaCBlbGVtZW50IG9mIHRoaXMgbGlz
dAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuZCByZXR1cm5zIGEg
bmV3IGxpc3QgY29udGFpbmluZyB0aGUgY2xvbmVzCisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgYWRkQ29udGVudDogZnVuY3Rpb24oLypT
dHJpbmd8fERvbU5vZGV8fE9iamVjdHx8ZG9qby5Ob2RlTGlzdCovIGNvbnRlbnQsIC8qU3RyaW5n
fHxJbnRlZ2VyPyovIHBvc2l0aW9uKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
c3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhZGQgYSBu
b2RlLCBOb2RlTGlzdCBvciBzb21lIEhUTUwgYXMgYSBzdHJpbmcgdG8gZXZlcnkgaXRlbSBpbiB0
aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBsaXN0LiAgUmV0dXJu
cyB0aGUgb3JpZ2luYWwgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZGVz
Y3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBjb3B5
IG9mIHRoZSBIVE1MIGNvbnRlbnQgaXMgYWRkZWQgdG8gZWFjaCBpdGVtIGluIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGxpc3QsIHdpdGggYW4gb3B0aW9uYWwg
cG9zaXRpb24gYXJndW1lbnQuIElmIG5vIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjb250ZW50IGlzIGFw
cGVuZGVkIHRvIHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBlYWNoIGl0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGNvbnRlbnQ6
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRE9NIG5vZGUsIEhUTUwg
aW4gc3RyaW5nIGZvcm1hdCwgYSBOb2RlTGlzdCBvciBhbiBPYmplY3QuIElmIGEgRE9NIG5vZGUg
b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBOb2RlTGlzdCwgdGhl
IGNvbnRlbnQgd2lsbCBiZSBjbG9uZWQgaWYgdGhlIGN1cnJlbnQgTm9kZUxpc3QgaGFzIG1vcmUg
dGhhbiBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBlbGVtZW50
LiBPbmx5IHRoZSBET00gbm9kZXMgYXJlIGNsb25lZCwgbm8gZXZlbnQgaGFuZGxlcnMuIElmIGl0
IGlzIGFuIE9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBp
dCBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggYXQgInRlbXBsYXRlIiBTdHJpbmcgcHJvcGVydHkg
dGhhdCBoYXMgdGhlIEhUTUwgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgdG8gaW5zZXJ0LiBJZiBkb2pvLnN0cmluZyBoYXMgYWxyZWFkeSBiZWVuIGRvam8u
cmVxdWlyZWQsIHRoZW4gZG9qby5zdHJpbmcuc3Vic3RpdHV0ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHdpbGwgYmUgdXNlZCBvbiB0aGUgInRlbXBsYXRlIiB0byBn
ZW5lcmF0ZSB0aGUgZmluYWwgSFRNTCBzdHJpbmcuIE90aGVyIGFsbG93ZWQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBwcm9wZXJ0aWVzIG9uIHRoZSBvYmplY3QgYXJl
OiAicGFyc2UiIGlmIHRoZSBIVE1MCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgc3RyaW5nIHNob3VsZCBiZSBwYXJzZWQgZm9yIHdpZGdldHMgKGRvam8ucmVxdWlyZSgi
ZG9qby5wYXJzZXIiKSB0byBnZXQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIG9wdGlvbiB0byB3b3JrKSwgYW5kICJ0ZW1wbGF0ZUZ1bmMiIGlmIGEgdGVtcGxh
dGUgZnVuY3Rpb24gYmVzaWRlcyBkb2pvLnN0cmluZy5zdWJzdGl0dXRlCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgc2hvdWxkIGJlIHVzZWQgdG8gdHJhbnNmb3JtIHRo
ZSAidGVtcGxhdGUiLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBwb3NpdGlvbjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjYW4gYmUgb25lIG9mOgor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgImxhc3QifHwi
ZW5kIiAoZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8
ICAgICAgICJmaXJzdHx8InN0YXJ0IgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIHwgICAgICAgImJlZm9yZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgICJhZnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgICJyZXBsYWNlIiAocmVwbGFjZXMgbm9kZXMgaW4gdGhpcyBOb2RlTGlz
dCB3aXRoIG5ldyBjb250ZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIHwgICAgICAgIm9ubHkiIChyZW1vdmVzIG90aGVyIGNoaWxkcmVuIG9mIHRoZSBub2RlcyBz
byBuZXcgY29udGVudCBpcyB0aGUgb25seSBjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBvciBhbiBvZmZzZXQgaW4gdGhlIGNoaWxkTm9kZXMgcHJvcGVydHkK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBhcHBlbmRzIGNvbnRlbnQgdG8gdGhlIGVuZCBpZiB0
aGUgcG9zaXRpb24gaXMgb21pdHRlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgIGRvam8ucXVlcnkoImgzID4gcCIpLmFkZENvbnRlbnQoImhleSB0aGVyZSEiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBhZGQgc29tZXRoaW5nIHRvIHRoZSBmcm9udCBvZiBlYWNo
IGVsZW1lbnQgdGhhdCBoYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgICJ0aGluZ2VyIiBwcm9wZXJ0eToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICBkb2pvLnF1ZXJ5KCJbdGhpbmdlcl0iKS5hZGRDb250ZW50KCIuLi4iLCAiZmlyc3Qi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhZGRzIGEgaGVhZGVyIGJlZm9yZSBlYWNoIGVs
ZW1lbnQgb2YgdGhlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICBkb2pvLnF1ZXJ5KCIubm90ZSIpLmFkZENvbnRlbnQoIjxoND5OT1RFOjwvaDQ+IiwgImJlZm9y
ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFkZCBhIGNsb25lIG9mIGEgRE9NIG5vZGUg
dG8gdGhlIGVuZCBvZiBldmVyeSBlbGVtZW50IGluCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgdGhlIGxpc3QsIHJlbW92aW5nIGl0IGZyb20gaXRzIGV4aXN0aW5nIHBh
cmVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5
KCIubm90ZSIpLmFkZENvbnRlbnQoZG9qby5ieUlkKCJmb28iKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgQXBw
ZW5kIG5vZGVzIGZyb20gYSB0ZW1wbGF0aXplZCBzdHJpbmcuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgZG9qby5yZXF1aXJlKCJkb2pvLnN0cmluZyIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8ucXVlcnkoIi5ub3RlIikuYWRk
Q29udGVudCh7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGVtcGxh
dGU6ICc8Yj4ke2lkfTogPC9iPjxzcGFuPiR7bmFtZX08L3NwYW4+JywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGlkOiAidXNlcjMzMiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgbmFtZTogIk1yLiBBbmRlcnNvbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgQXBwZW5kIG5v
ZGVzIGZyb20gYSB0ZW1wbGF0aXplZCBzdHJpbmcgdGhhdCBhbHNvIGhhcyB3aWRnZXRzIHBhcnNl
ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZG9qby5yZXF1aXJlKCJkb2pvLnN0
cmluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBkb2pvLnJlcXVpcmUoImRv
am8ucGFyc2VyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHZhciBub3RlcyA9
IGRvam8ucXVlcnkoIi5ub3RlIikuYWRkQ29udGVudCh7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgdGVtcGxhdGU6ICc8YnV0dG9uIGRvam9UeXBlPSJkaWppdC5mb3Jt
LkJ1dHRvbiI+JHt0ZXh0fTwvYnV0dG9uPicsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgcGFyc2U6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgdGV4dDogIlNlbmQiCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuX25vcm1hbGl6ZShjb250
ZW50LCB0aGlzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIG5v
ZGU7IChub2RlID0gdGhpc1tpXSk7IGkrKyl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3BsYWNlKGNvbnRlbnQsIG5vZGUsIHBvc2l0aW9uLCBpID4gMCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsg
Ly9kb2pvLk5vZGVMaXN0CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGlu
c3RhbnRpYXRlOiBmdW5jdGlvbigvKlN0cmluZ3xPYmplY3QqLyBkZWNsYXJlZENsYXNzLCAvKk9i
amVjdD8qLyBwcm9wZXJ0aWVzKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc3Vt
bWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBDcmVhdGUgYSBu
ZXcgaW5zdGFuY2Ugb2YgYSBzcGVjaWZpZWQgY2xhc3MsIHVzaW5nIHRoZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNwZWNpZmllZCBwcm9wZXJ0aWVzIGFuZCBlYWNo
IG5vZGUgaW4gdGhlIG5vZGVMaXN0IGFzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBzcmNOb2RlUmVmLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBl
eGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEdyYWJzIGFs
bCBidXR0b25zIGluIHRoZSBwYWdlIGFuZCBjb252ZXJ0cyB0aGVtIHRvIGRpamkuZm9ybS5CdXR0
b25zLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIHZhciBidXR0b25z
ID0gZG9qby5xdWVyeSgiYnV0dG9uIikuaW5zdGFudGlhdGUoImRpaml0LmZvcm0uQnV0dG9uIiwg
e3Nob3dMYWJlbDogdHJ1ZX0pOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBkLmlz
RnVuY3Rpb24oZGVjbGFyZWRDbGFzcykgPyBkZWNsYXJlZENsYXNzIDogZC5nZXRPYmplY3QoZGVj
bGFyZWRDbGFzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVy
dGllcyB8fCB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvckVhY2go
ZnVuY3Rpb24obm9kZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBjKHBy
b3BlcnRpZXMsIG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7ICAgICAvLyBkb2pv
Lk5vZGVMaXN0CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGF0OiBmdW5j
dGlvbigvKj09PT09IGluZGV4ID09PT09Ki8peworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJl
dHVybnMgYSBuZXcgTm9kZUxpc3QgY29tcHJpc2VkIG9mIGl0ZW1zIGluIHRoaXMgTm9kZUxpc3QK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhdCB0aGUgZ2l2ZW4gaW5k
ZXggb3IgaW5kaWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgIGluZGV4OiBJbnRlZ2VyLi4uCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgT25lIG9yIG1vcmUgMC1iYXNlZCBpbmRpY2VzIG9mIGl0ZW1z
IGluIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
Tm9kZUxpc3QuIEEgbmVnYXRpdmUgaW5kZXggd2lsbCBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGxpc3QgYW5kIGdvIGJhY2t3
YXJkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIFNob3J0
ZW4gdGhlIGxpc3QgdG8gdGhlIGZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBlbGVtZW50cworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8ucXVlcnkoImEiKS5hdCgw
LCAxLCAyKS5mb3JFYWNoKGZuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIFJldHJpZXZlIHRoZSBmaXJzdCBhbmQgbGFzdCBlbGVtZW50cyBvZiBhIHVub3Jk
ZXJlZCBsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8u
cXVlcnkoInVsID4gbGkiKS5hdCgwLCAtMSkuZm9yRWFjaChjYik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBEbyBzb21ldGhpbmcgZm9yIHRoZSBmaXJzdCBl
bGVtZW50IG9ubHksIGJ1dCBlbmQoKSBvdXQgYmFjayB0bworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICB0aGUgb3JpZ2luYWwgbGlzdCBhbmQgY29udGludWUgY2hhaW5pbmc6CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgZG9qby5xdWVyeSgiYSIpLmF0KDAp
Lm9uY2xpY2soZm4pLmVuZCgpLmZvckVhY2goZnVuY3Rpb24obil7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhuKTsgLy8gYWxsIGFu
Y2hvcnMgb24gdGhlIHBhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAg
ICAgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIHJldHVybnM6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgZG9qby5Ob2RlTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBuZXcgdGhp
cy5fTm9kZUxpc3RDdG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkLmZvckVhY2goYXJn
dW1lbnRzLCBmdW5jdGlvbihpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYo
aSA8IDApeyBpID0gdGhpcy5sZW5ndGggKyBpIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYodGhpc1tpXSl7IHQucHVzaCh0aGlzW2ldKTsgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5fc3Rhc2go
dGhpcyk7IC8vIGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgfSk7
CisKKyAgICAgICAgbmwuZXZlbnRzID0gWworICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGxpc3Qgb2YgYWxsIERPTSBldmVudHMgdXNl
ZCBpbiBOb2RlTGlzdAorICAgICAgICAgICAgICAgICJibHVyIiwgImZvY3VzIiwgImNoYW5nZSIs
ICJjbGljayIsICJlcnJvciIsICJrZXlkb3duIiwgImtleXByZXNzIiwKKyAgICAgICAgICAgICAg
ICAia2V5dXAiLCAibG9hZCIsICJtb3VzZWRvd24iLCAibW91c2VlbnRlciIsICJtb3VzZWxlYXZl
IiwgIm1vdXNlbW92ZSIsCisgICAgICAgICAgICAgICAgIm1vdXNlb3V0IiwgIm1vdXNlb3ZlciIs
ICJtb3VzZXVwIiwgInN1Ym1pdCIKKyAgICAgICAgXTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiBwc2V1ZG8tZG9jIHRoZSBhYm92ZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBvbi1ldmVu
dCBmdW5jdGlvbnMKKworICAgICAgICAvLyBzeW50YWN0aWMgc3VnYXIgZm9yIERPTSBldmVudHMK
KyAgICAgICAgZC5mb3JFYWNoKG5sLmV2ZW50cywgZnVuY3Rpb24oZXZ0KXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBfb2UgPSAib24iICsgZXZ0OworICAgICAgICAgICAgICAgICAgICAg
ICAgbmxwW19vZV0gPSBmdW5jdGlvbihhLCBiKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChfb2UsIGEsIGIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3Vs
ZCB0aGVzZSBldmVudHMgdHJpZ2dlciBwdWJsaXNoZXM/CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYSA/
IHRoaXMuY29ubmVjdChfb2UsIGEsIGIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG4peworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBsaXN0ZW5lcnMgZ2V0IGJ1cmll
ZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyIGFuZCBjYW4ndCBi
ZSBkdWcgYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBvdXQgdG8gYmUgdHJpZ2dlcmVkIGV4
dGVybmFsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc2VlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBodHRwOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOmVsZW1lbnQKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKG4sIGV2dCwgX29lKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBuZWVkIHN5bnRoZXRpYyBl
dmVudCBzdXBwb3J0IQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBfZSA9IHsgdGFyZ2V0OiBuLCBmYXV4OiB0cnVlLCB0
eXBlOiBldnQgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBkb2pvLl9ldmVudF9saXN0ZW5lci5fc3ludGhlc2l6ZUV2
ZW50KHt9LCB7IHRhcmdldDogbiwgZmF1eDogdHJ1ZSwgdHlwZTogZXZ0IH0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
eXsgbltldnRdKF9lKTsgfWNhdGNoKGUpeyBjb25zb2xlLmxvZyhlKTsgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeXsg
bltfb2VdKF9lKTsgfWNhdGNoKGUpeyBjb25zb2xlLmxvZyhlKTsgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
LworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKworfSkoKTsKKworfQorCitpZighZG9q
by5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UucXVlcnkiXSl7IC8vX2hhc1Jlc291cmNlIGNoZWNr
cyBhZGRlZCBieSBidWlsZC4gRG8gbm90IHVzZSBfaGFzUmVzb3VyY2UgZGlyZWN0bHkgaW4geW91
ciBjb2RlLgorZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UucXVlcnkiXSA9IHRydWU7Ciso
ZnVuY3Rpb24oKXsKKworLyoKKyAgICAgICAgZG9qby5xdWVyeSgpIGFyY2hpdGVjdHVyYWwgb3Zl
cnZpZXc6CisKKyAgICAgICAgICAgICAgICBkb2pvLnF1ZXJ5IGlzIGEgcmVsYXRpdmVseSBmdWxs
LWZlYXR1cmVkIENTUzMgcXVlcnkgbGlicmFyeS4gSXQgaXMKKyAgICAgICAgICAgICAgICBkZXNp
Z25lZCB0byB0YWtlIGFueSB2YWxpZCBDU1MzIHNlbGVjdG9yIGFuZCByZXR1cm4gdGhlIG5vZGVz
IG1hdGNoaW5nCisgICAgICAgICAgICAgICAgdGhlIHNlbGVjdG9yLiBUbyBkbyB0aGlzIHF1aWNr
bHksIGl0IHByb2Nlc3NlcyBxdWVyaWVzIGluIHNldmVyYWwKKyAgICAgICAgICAgICAgICBzdGVw
cywgYXBwbHlpbmcgY2FjaGluZyB3aGVyZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIFRoZSBzdGVwcyAocm91Z2hseSBpbiByZXZlcnNlIG9yZGVyIG9mIHRo
ZSB3YXkgdGhleSBhcHBlYXIgaW4gdGhlIGNvZGUpOgorICAgICAgICAgICAgICAgICAgICAgICAg
MS4pIGNoZWNrIHRvIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSAicXVlcnkgZGlzcGF0Y2hlciIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBpZiBzbywgdXNlIHRoYXQgd2l0aCB0
aGUgZ2l2ZW4gcGFyYW1ldGVyaXphdGlvbi4gU2tpcCB0byBzdGVwIDQuCisgICAgICAgICAgICAg
ICAgICAgICAgICAyLikgYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hpY2ggYnJhbmNoIHRvIGRpc3Bh
dGNoIHRoZSBxdWVyeSB0bzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBKUyAo
b3B0aW1pemVkIERPTSBpdGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0gbmF0aXZlIChGRjMuMSssIFNhZmFyaSAzLjErLCBJRSA4KykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDMuKSB0b2tlbml6ZSBhbmQgY29udmVydCB0byBleGVjdXRhYmxlICJxdWVyeSBkaXNw
YXRjaGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHRoaXMgaXMgd2hlcmUg
dGhlIGxpb24ncyBzaGFyZSBvZiB0aGUgY29tcGxleGl0eSBpbiB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gbGllcy4gSW4gdGhlIERPTSB2ZXJzaW9uLCB0aGUg
cXVlcnkgZGlzcGF0Y2hlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFz
c2VtYmxlZCBhcyBhIGNoYWluIG9mICJ5ZXMvbm8iIHRlc3QgZnVuY3Rpb25zIHBlcnRhaW5pbmcg
dG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNlY3Rpb24gb2YgYSBzaW1w
bGUgcXVlcnkgc3RhdGVtZW50ICgiLmJsYWg6bnRoLWNoaWxkKG9kZCkiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnV0IG5vdCAiZGl2IGRpdiIsIHdoaWNoIGlzIDIgc2ltcGxl
IHN0YXRlbWVudHMpLiBJbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50IGRpc3BhdGNoZXJzIGFyZSBjYWNoZWQgKHRvIHByZXZlbnQgcmUtZGVmaW5p
dGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhcmUgZW50aXJlIGRp
c3BhdGNoIGNoYWlucyAodG8gbWFrZSByZS1leGVjdXRpb24gb2YgdGhlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2FtZSBxdWVyeSBmYXN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgNC4pIHRoZSByZXN1bHRpbmcgcXVlcnkgZGlzcGF0Y2hlciBpcyBjYWxsZWQgaW4gdGhl
IHBhc3NlZCBzY29wZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieSBkZWZhdWx0IHRo
ZSB0b3AtbGV2ZWwgZG9jdW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0g
Zm9yIERPTSBxdWVyaWVzLCB0aGlzIHJlc3VsdHMgaW4gYSByZWN1cnNpdmUsIHRvcC1kb3duCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGlvbiBvZiBub2RlcyBiYXNl
ZCBvbiBlYWNoIHNpbXBsZSBxdWVyeSBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0gZm9yIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIHRoaXMgbWF5IG1lYW4gd29ya2lu
ZyBhcm91bmQgc3BlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Z3MuIFNv
IGJlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgNS4pIG1hdGNoZWQgbm9kZXMgYXJlIHBy
dW5lZCB0byBlbnN1cmUgdGhleSBhcmUgdW5pcXVlIChpZiBuZWNlc3NhcnkpCisqLworCit2YXIg
ZGVmaW5lUXVlcnk9IGZ1bmN0aW9uKGQpeworICAgICAgICAvLyBkZWZpbmUgZXZlcnl0aGluZyBp
biBhIGNsb3N1cmUgZm9yIGNvbXByZXNzYWJpbGl0eSByZWFzb25zLiAiZCIgaXMgYW4KKyAgICAg
ICAgLy8gYWxpYXMgdG8gImRvam8iIChvciB0aGUgdG9vbGtpdCBhbGlhcyBvYmplY3QsIGUuZy4s
ICJhY21lIikuCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIFRvb2xraXQg
YWxpYXNlcworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgICAgICAvLyBpZiB5b3UgYXJl
IGV4dHJhY3RpbmcgZG9qby5xdWVyeSBmb3IgdXNlIGluIHlvdXIgb3duIHN5c3RlbSwgeW91IHdp
bGwKKyAgICAgICAgLy8gbmVlZCB0byBwcm92aWRlIHRoZXNlIG1ldGhvZHMgYW5kIHByb3BlcnRp
ZXMuIE5vIG90aGVyIHBvcnRpbmcgc2hvdWxkIGJlCisgICAgICAgIC8vIG5lY2Vzc2FyeSwgc2F2
ZSBmb3IgY29uZmlndXJpbmcgdGhlIHN5c3RlbSB0byB1c2UgYSBjbGFzcyBvdGhlciB0aGFuCisg
ICAgICAgIC8vIGRvam8uTm9kZUxpc3QgYXMgdGhlIHJldHVybiBpbnN0YW5jZSBpbnN0YW50aWF0
b3IKKyAgICAgICAgdmFyIHRyaW0gPSAgICAgICAgICAgICAgICAgICAgICBkLnRyaW07CisgICAg
ICAgIHZhciBlYWNoID0gICAgICAgICAgICAgICAgICAgICAgZC5mb3JFYWNoOworICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5pc0lFOyAvLyBmbG9hdAor
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5pc1NhZmFy
aTsgLy8gZmxvYXQKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGQuaXNPcGVyYTsgLy8gZmxvYXQKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGQuaXNXZWJLaXQ7IC8vIGZsb2F0CisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRvYyA7IC8vIGRvY3VtZW50IGVsZW1lbnQK
KyAgICAgICAgdmFyIHFsYyA9IChkLl9Ob2RlTGlzdEN0b3IgPSAgICAgICAgICAgIGQuTm9kZUxp
c3QpOworCisgICAgICAgIHZhciBnZXREb2MgPSBmdW5jdGlvbigpeyByZXR1cm4gZC5kb2M7IH07
CisgICAgICAgIC8vIE5PVEUoYWxleCk6IHRoZSBzcGVjIGlzIGlkaW90aWMuIENTUyBxdWVyaWVz
IHNob3VsZCBBTFdBWVMgYmUgY2FzZS1zZW5zaXRpdmUsIGJ1dCBub29vb29vbworICAgICAgICB2
YXIgY3NzQ2FzZUJ1ZyA9ICgoZC5pc1dlYktpdHx8ZC5pc01vemlsbGEpICYmICgoZ2V0RG9jKCku
Y29tcGF0TW9kZSkgPT0gIkJhY2tDb21wYXQiKSk7CisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisgICAgICAgIC8vIEdsb2JhbCB1dGlsaXRpZXMKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
KworICAgICAgICAvLyBvbiBicm93c2VycyB0aGF0IHN1cHBvcnQgdGhlICJjaGlsZHJlbiIgY29s
bGVjdGlvbiB3ZSBjYW4gYXZvaWQgYSBsb3Qgb2YKKyAgICAgICAgLy8gaXRlcmF0aW9uIG9uIGNo
YWZmIChub24tZWxlbWVudCkgbm9kZXMuCisgICAgICAgIC8vIHdoeS4KKyAgICAgICAgdmFyIGNo
aWxkTm9kZXNOYW1lID0gISFnZXREb2MoKS5maXJzdENoaWxkWyJjaGlsZHJlbiJdID8gImNoaWxk
cmVuIiA6ICJjaGlsZE5vZGVzIjsKKworICAgICAgICB2YXIgc3BlY2lhbHMgPSAiPn4rIjsKKwor
ICAgICAgICAvLyBnbG9iYWwgdGh1bmsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIHRy
ZWF0IHRoZSBjdXJyZW50IHF1ZXJ5IGFzCisgICAgICAgIC8vIGNhc2Ugc2Vuc2l0aXZlIG9yIG5v
dC4gVGhpcyBzd2l0Y2ggaXMgZmxpcHBlZCBieSB0aGUgcXVlcnkgZXZhbHVhdG9yCisgICAgICAg
IC8vIGJhc2VkIG9uIHRoZSBkb2N1bWVudCBwYXNzZWQgYXMgdGhlIGNvbnRleHQgdG8gc2VhcmNo
LgorICAgICAgICB2YXIgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlOworCisgICAgICAgIC8vIGhvdyBo
aWdoPworICAgICAgICB2YXIgeWVzbWFuID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRydWU7IH07CisK
KyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIFRva2VuaXplcgorICAgICAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworICAgICAgICB2YXIgZ2V0UXVlcnlQYXJ0cyA9IGZ1bmN0aW9uKHF1
ZXJ5KXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHN0YXRlIG1hY2hpbmUgZm9yIHF1ZXJ5IHRva2VuaXphdGlvbgorICAg
ICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGluc3RlYWQgb2YgdXNpbmcgYSBicml0dGxlIGFuZCBzbG93IHJlZ2V4LWJhc2Vk
IENTUyBwYXJzZXIsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8ucXVlcnkg
aW1wbGVtZW50cyBhbiBBU1Qtc3R5bGUgcXVlcnkgcmVwcmVzZW50YXRpb24uIFRoaXMKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgcmVwcmVzZW50YXRpb24gaXMgb25seSBnZW5lcmF0
ZWQgb25jZSBwZXIgcXVlcnkuIEZvciBleGFtcGxlLAorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB0aGUgc2FtZSBxdWVyeSBydW4gbXVsdGlwbGUgdGltZXMgb3IgdW5kZXIgZGlmZmVy
ZW50IHJvb3Qgbm9kZXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9lcyBub3Qg
cmUtcGFyc2UgdGhlIHNlbGVjdG9yIGV4cHJlc3Npb24gYnV0IGluc3RlYWQgdXNlcyB0aGUKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY2FjaGVkIGRhdGEgc3RydWN0dXJlLiBUaGUg
c3RhdGUgbWFjaGluZSBpbXBsZW1lbnRlZCBoZXJlCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIHRlcm1pbmF0ZXMgb24gdGhlIGxhc3QgIiAiIChzcGFjZSkgY2hhcmFjdGVyIGFuZCBy
ZXR1cm5zIGFuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG9yZGVyZWQgYXJyYXkg
b2YgcXVlcnkgY29tcG9uZW50IHN0cnVjdHVyZXMgKG9yICJwYXJ0cyIpLiBFYWNoCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIHBhcnQgcmVwcmVzZW50cyBhbiBvcGVyYXRvciBvciBh
IHNpbXBsZSBDU1MgZmlsdGVyaW5nCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGV4
cHJlc3Npb24uIFRoZSBzdHJ1Y3R1cmUgZm9yIHBhcnRzIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGNv
ZGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYmVsb3cuCisKKworICAgICAgICAg
ICAgICAgIC8vIE5PVEU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoaXMgY29k
ZSBpcyBkZXNpZ25lZCB0byBydW4gZmFzdCBhbmQgY29tcHJlc3Mgd2VsbC4gU2FjcmlmaWNlcwor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0byByZWFkYWJpbGl0eSBhbmQgbWFpbnRh
aW5hYmlsaXR5IGhhdmUgYmVlbiBtYWRlLiAgWW91ciBiZXN0CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGJldCB3aGVuIGhhY2tpbmcgdGhlIHRva2VuaXplciBpcyB0byBwdXQgVGhl
IERvbm5hcyBvbiAqcmVhbGx5KgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBsb3Vk
IChtYXkgd2UgcmVjb21tZW5kIHRoZWlyICJTcGVuZCBUaGUgTmlnaHQiIHJlbGVhc2U/KSBhbmQK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAganVzdCBhc3N1bWUgeW91J3JlIGdvbm5h
IG1ha2UgbWlzdGFrZXMuIEtlZXAgdGhlIHVuaXQgdGVzdHMKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgb3BlbiBhbmQgcnVuIHRoZW0gZnJlcXVlbnRseS4gS25vd2luZyBpcyBoYWxm
IHRoZSBiYXR0bGUgOy0pCisgICAgICAgICAgICAgICAgaWYoc3BlY2lhbHMuaW5kZXhPZihxdWVy
eS5zbGljZSgtMSkpID49IDApeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgZW5k
IHdpdGggYSAiPiIsICIrIiwgb3IgIn4iLCB0aGF0IG1lYW5zIHdlJ3JlIGltcGxpY2l0bHkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNlYXJjaGluZyBhbGwgY2hpbGRyZW4sIHNvIG1ha2Ug
aXQgZXhwbGljaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ICs9ICIgKiAiCisgICAg
ICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB5b3UgaGF2
ZSBub3QgcHJvdmlkZWQgYSB0ZXJtaW5hdG9yLCBvbmUgd2lsbCBiZSBwcm92aWRlZCBmb3IKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHlvdS4uLgorICAgICAgICAgICAgICAgICAgICAgICAg
cXVlcnkgKz0gIiAiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciB0
cyA9IGZ1bmN0aW9uKC8qSW50ZWdlciovIHMsIC8qSW50ZWdlciovIGUpeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHJpbSBhbmQgc2xpY2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRha2UgYW4gaW5kZXggdG8gc3RhcnQgYSBzdHJpbmcgc2xpY2UgZnJvbSBhbmQgYW4gZW5k
IHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcmV0dXJuIGEgdHJpbW1l
ZCBjb3B5IG9mIHRoYXQgc3ViLXN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRyaW0ocXVlcnkuc2xpY2UocywgZSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIHRoZSBvdmVyYWxsIGRhdGEgZ3JhcGggb2YgdGhlIGZ1bGwgcXVlcnksIGFzIHJl
cHJlc2VudGVkIGJ5IHF1ZXJ5UGFydCBvYmplY3RzCisgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5
UGFydHMgPSBbXTsKKworCisgICAgICAgICAgICAgICAgLy8gc3RhdGUga2VlcGluZyB2YXJzCisg
ICAgICAgICAgICAgICAgdmFyIGluQnJhY2tldHMgPSAtMSwgaW5QYXJlbnMgPSAtMSwgaW5NYXRj
aEZvciA9IC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5Qc2V1ZG8gPSAtMSwgaW5DbGFz
cyA9IC0xLCBpbklkID0gLTEsIGluVGFnID0gLTEsCisgICAgICAgICAgICAgICAgICAgICAgICBs
YyA9ICIiLCBjYyA9ICIiLCBwU3RhcnQ7CisKKyAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24g
dmFycworICAgICAgICAgICAgICAgIHZhciB4ID0gMCwgLy8gaW5kZXggaW4gdGhlIHF1ZXJ5Cisg
ICAgICAgICAgICAgICAgICAgICAgICBxbCA9IHF1ZXJ5Lmxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRQYXJ0ID0gbnVsbCwgLy8gZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50
aW5nIHRoZSBlbnRpcmUgY2xhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBfY3AgPSBudWxs
OyAvLyB0aGUgY3VycmVudCBwc2V1ZG8gb3IgYXR0ciBtYXRjaGVyCisKKyAgICAgICAgICAgICAg
ICAvLyBzZXZlcmFsIHRlbXBvcmFyeSB2YXJpYWJsZXMgYXJlIGFzc2lnbmVkIHRvIHRoaXMgc3Ry
dWN0dXJlIGR1cmluZyBhCisgICAgICAgICAgICAgICAgLy8gcG90ZW50aWFsIHN1Yi1leHByZXNz
aW9uIG1hdGNoOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhdHRyOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0
aGUgY3VycmVudCBmdWxsIGF0dHJpYnV0ZSBtYXRjaCBpbiBhCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgYnJhY2tldCBleHByZXNzaW9uCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHR5cGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgaWYgdGhlcmUncyBhbiBvcGVyYXRvciBpbiBhIGJyYWNrZXQgZXhwcmVzc2lvbiwgdGhp
cyBpcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8ga2Vl
cCB0cmFjayBvZiBpdAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB2YWx1ZToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJuYWxzIG9mIHBh
cmVudGhldGljYWwgZXhwcmVzc2lvbiBmb3IgYSBwc2V1ZG8uIGZvcgorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICAgICAgICAgIDpudGgtY2hpbGQoMm4rMSksIHZhbHVlIG1pZ2h0IGJl
ICIybisxIgorCisgICAgICAgICAgICAgICAgdmFyIGVuZFRhZyA9IGZ1bmN0aW9uKCl7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWQgd2hlbiB0aGUgdG9rZW5pemVyIGhpdHMgdGhl
IGVuZCBvZiBhIHBhcnRpY3VsYXIgdGFnIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBSZS1zZXRzIHN0YXRlIHZhcmlhYmxlcyBmb3IgdGFnIG1hdGNoaW5nIGFuZCBzZXRzIHVwIHRo
ZSBtYXRjaGVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUgdGhlIG5leHQg
dHlwZSBvZiB0b2tlbiAodGFnIG9yIG9wZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmKGluVGFnID49IDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHYg
PSAoaW5UYWcgPT0geCkgPyBudWxsIDogdHMoaW5UYWcsIHgpOyAvLyAudG9Mb3dlckNhc2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcnRbIChzcGVjaWFscy5p
bmRleE9mKHR2KSA8IDApID8gInRhZyIgOiAib3BlciIgXSA9IHR2OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpblRhZyA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBlbmRJZCA9IGZ1bmN0aW9u
KCl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWQgd2hlbiB0aGUgdG9rZW5pemVy
IG1pZ2h0IGJlIGF0IHRoZSBlbmQgb2YgYW4gSUQgcG9ydGlvbiBvZiBhIG1hdGNoCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZihpbklkID49IDApeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50UGFydC5pZCA9IHRzKGluSWQsIHgpLnJlcGxhY2UoL1xcL2csICIiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5JZCA9IC0xOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBl
bmRDbGFzcyA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWQg
d2hlbiB0aGUgdG9rZW5pemVyIG1pZ2h0IGJlIGF0IHRoZSBlbmQgb2YgYSBjbGFzcyBuYW1lCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaC4gQ1NTIGFsbG93cyBmb3IgbXVsdGlwbGUg
Y2xhc3Nlcywgc28gd2UgYXVnbWVudCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1
cnJlbnQgaXRlbSB3aXRoIGFub3RoZXIgY2xhc3MgaW4gaXRzIGxpc3QKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKGluQ2xhc3MgPj0gMCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRQYXJ0LmNsYXNzZXMucHVzaCh0cyhpbkNsYXNzKzEsIHgpLnJlcGxhY2UoL1xc
L2csICIiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ2xhc3MgPSAtMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB2YXIgZW5kQWxsID0gZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGF0IHRoZSBlbmQgb2YgYSBzaW1wbGUgZnJhZ21lbnQsIHNvIHdhbGwgb2ZmIHRoZSBtYXRj
aGVzCisgICAgICAgICAgICAgICAgICAgICAgICBlbmRJZCgpOyBlbmRUYWcoKTsgZW5kQ2xhc3Mo
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgZW5kUGFydCA9IGZ1
bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRBbGwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKGluUHNldWRvID49IDApeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50UGFydC5wc2V1ZG9zLnB1c2goeyBuYW1lOiB0cyhpblBzZXVkbysxLCB4
KSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGhpbnQgdG8gdGhlIHNlbGVjdG9yIGVuZ2luZSB0byB0ZWxsIGl0IHdoZXRoZXIgb3Igbm90
IGl0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZWVkcyB0byBkbyBhbnkgaXRlcmF0aW9u
LiBNYW55IHNpbXBsZSBzZWxlY3RvcnMgZG9uJ3QsIGFuZAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2UgY2FuIGF2b2lkIHNpZ25pZmljYW50IGNvbnN0cnVjdGlvbi10aW1lIHdvcmsgYnkg
YWR2aXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzeXN0ZW0gdG8gc2tpcCB0
aGVtCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFydC5sb29wcyA9ICgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFydC5wc2V1ZG9zLmxl
bmd0aCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQ
YXJ0LmF0dHJzLmxlbmd0aCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRQYXJ0LmNsYXNzZXMubGVuZ3RoICAgICAgKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFBhcnQub3F1ZXJ5ID0gY3VycmVudFBhcnQucXVlcnkgPSB0cyhwU3Rh
cnQsIHgpOyAvLyBzYXZlIHRoZSBmdWxsIGV4cHJlc3Npb24gYXMgYSBzdHJpbmcKKworCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBvdGFnL3RhZyBhcmUgaGludHMgdG8gc3VnZ2VzdCB0byB0
aGUgc3lzdGVtIHdoZXRoZXIgb3Igbm90CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdz
IGFuIG9wZXJhdG9yIG9yIGEgdGFnLiBXZSBzYXZlIGEgY29weSBvZiBvdGFnIHNpbmNlIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFnIG5hbWUgaXMgY2FzdCB0byB1cHBlci1jYXNl
IGluIHJlZ3VsYXIgSFRNTCBtYXRjaGVzLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHN5c3RlbSBoYXMgYSBnbG9iYWwgc3dpdGNoIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGN1cnJlbnQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gbmVlZHMgdG8gYmUgY2FzZSBz
ZW5zaXRpdmUgb3Igbm90IGFuZCBpdCB3aWxsIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gb3RhZyBvciB0YWcgYWNjb3JkaW5nbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRQYXJ0Lm90YWcgPSBjdXJyZW50UGFydC50YWcgPSAoY3VycmVudFBhcnRbIm9wZXIiXSkgPyBu
dWxsIDogKGN1cnJlbnRQYXJ0LnRhZyB8fCAiKiIpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZihjdXJyZW50UGFydC50YWcpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpZiB3ZSdyZSBpbiBhIGNhc2UtaW5zZW5zaXRpdmUgSFRNTCBkb2MsIHdlIGxpa2VseSB3YW50
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0b1VwcGVyQ2FzZSB3aGVu
IG1hdGNoaW5nIG9uIGVsZW1lbnQudGFnTmFtZS4gSWYgd2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZG8gaXQgaGVyZSwgd2UgY2FuIHNraXAgdGhlIHN0cmluZyBvcCBwZXIg
bm9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wYXJpc29uCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJ0LnRhZyA9IGN1cnJlbnRQYXJ0
LnRhZy50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIHBhcnQgdG8gdGhlIGxpc3QKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKHF1ZXJ5UGFydHMubGVuZ3RoICYmIChxdWVyeVBhcnRzW3F1ZXJ5UGFy
dHMubGVuZ3RoLTFdLm9wZXIpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
b3BlcmF0b3JzIGFyZSBhbHdheXMgaW5maXgsIHNvIHdlIHJlbW92ZSB0aGVtIGZyb20gdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgYW5kIGF0dGFjaCB0aGVtIHRv
IHRoZSBuZXh0IG1hdGNoLiBUaGUgZXZhbHVhdG9yIGlzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHJlc3BvbnNpYmxlIGZvciBzb3J0aW5nIG91dCBob3cgdG8gaGFuZGxlIHRo
ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJ0LmluZml4T3Bl
ciA9IHF1ZXJ5UGFydHMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRQYXJ0LnF1ZXJ5ID0gY3VycmVudFBhcnQuaW5maXhPcGVyLnF1ZXJ5ICsgIiAiICsgY3Vy
cmVudFBhcnQucXVlcnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoICAic3dhcHBpbmcgb3V0
IHRoZSBpbmZpeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcnQuaW5maXhPcGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQg
YXR0YWNoaW5nIGl0IHRvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFydCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goY3VycmVudFBhcnQpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50UGFydCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIHRoZSBxdWVyeSwgY2hhcmFjdGVyIGJ5IGNo
YXJhY3RlciwgYnVpbGRpbmcgdXAgYQorICAgICAgICAgICAgICAgIC8vIGxpc3Qgb2YgcXVlcnkg
cGFydCBvYmplY3RzCisgICAgICAgICAgICAgICAgZm9yKDsgbGM9Y2MsIGNjPXF1ZXJ5LmNoYXJB
dCh4KSwgeCA8IHFsOyB4KyspeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIGNjOiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaW4gdGhlIG1hdGNoCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgbGM6IHRoZSBsYXN0IGNoYXJhY3RlciAoaWYgYW55
KQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb21lb25lIGlzIHRyeWluZyB0byBlc2Nh
cGUgc29tZXRoaW5nLCBzbyBkb24ndCB0cnkgdG8gbWF0Y2ggYW55CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBmcmFnbWVudHMuIFdlIGFzc3VtZSB3ZSdyZSBpbnNpZGUgYSBsaXRlcmFsLgor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYobGMgPT0gIlxcIil7IGNvbnRpbnVlOyB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZighY3VycmVudFBhcnQpeyAvLyBhIHBhcnQgd2FzIGp1c3Qg
ZW5kZWQgb3Igbm9uZSBoYXMgeWV0IGJlZW4gY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBOT1RFOiBJIGhhdGUgYWxsIHRoaXMgYWxsb2MsIGJ1dCBpdCdzIHNob3J0
ZXIgdGhhbiB3cml0aW5nIHRvbnMgb2YgaWYncworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwU3RhcnQgPSB4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
IHJ1bGVzIGRlc2NyaWJlIGZ1bGwgQ1NTIHN1Yi1leHByZXNzaW9ucywgbGlrZToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICNzb21lSWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIC5jbGFzc05hbWU6Zmlyc3Qt
Y2hpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBidXQgbm90Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhpbmdlciA+
IGRpdi5ob3dkeVt0eXBlPXRoaW5nZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgdGhlIGluZGlkdWFsIGNvbXBvbmVudHMgb2YgdGhlIHByZXZpb3VzIHF1ZXJ5IHdv
dWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc3BsaXQgaW50
byAzIHBhcnRzIHRoYXQgd291bGQgYmUgcmVwcmVzZW50ZWQgYSBzdHJ1Y3R1cmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBsaWtlOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6ICJ0aGluZ2Vy
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YWc6ICJ0aGluZ2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiAiZGl2Lmhvd2R5
W3R5cGU9dGhpbmdlcl0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsiaG93ZHkiXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZp
eE9wZXI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiAiPiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
OiAiPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFy
dCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeTogbnVs
bCwgLy8gdGhlIGZ1bGwgdGV4dCBvZiB0aGUgcGFydCdzIHJ1bGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9zOiBbXSwgLy8gQ1NTIHN1cHBvcnRzIG11bHRp
cGxlIHBzZXVkLWNsYXNzIG1hdGNoZXMgaW4gYSBzaW5nbGUgcnVsZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiBbXSwgICAgICAvLyBDU1Mgc3VwcG9ydHMg
bXVsdGktYXR0cmlidXRlIG1hdGNoLCBzbyB3ZSBuZWVkIGFuIGFycmF5CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NlczogW10sIC8vIGNsYXNzIG1hdGNoZXMg
bWF5IGJlIGFkZGl0aXZlLCBlLmcuOiAudGhpbmdlci5ibGFoLmhvd2R5CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBudWxsLCAgICAgIC8vIG9ubHkgb25lIHRh
Zy4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXI6IG51bGws
IC8vIC4uLm9yIG9wZXJhdG9yIHBlciBjb21wb25lbnQuIE5vdGUgdGhhdCB0aGVzZSB3aW5kIHVw
IGJlaW5nIGV4Y2x1c2l2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZDogbnVsbCwgICAgICAgLy8gdGhlIGlkIGNvbXBvbmVudCBvZiBhIHJ1bGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUYWc6IGZ1bmN0aW9uKCl7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNhc2VT
ZW5zaXRpdmUpID8gdGhpcy5vdGFnIDogdGhpcy50YWc7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBw
YXJ0LCB3ZSBhc3N1bWUgd2UncmUgZ29pbmcgdG8gc3RhcnQgYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIGJlZ2lubmluZyBvZiBhIG1hdGNoLCB3aGljaCBzaG91bGQg
YmUgYSB0YWcgbmFtZS4gVGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBt
aWdodCBmYXVsdCBhIGxpdHRsZSBsYXRlciBvbiwgYnV0IHdlIGRldGVjdCB0aGF0IGFuZCB0aGlz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGlvbiB3aWxsIHN0aWxs
IGJlIGZpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluVGFnID0geDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5C
cmFja2V0cyA+PSAwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBm
b3IgYSB0aGUgY2xvc2UgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYo
Y2MgPT0gIl0iKXsgLy8gaWYgd2UncmUgaW4gYSBbLi4uXSBjbGF1c2UgYW5kIHdlIGVuZCwgZG8g
YXNzaWdubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFf
Y3AuYXR0cil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBubyBhdHRyaWJ1dGUgbWF0Y2ggd2FzIHByZXZpb3VzbHkgYmVndW4sIHNvIHdlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWUgdGhp
cyBpcyBhbiBhdHRyaWJ1dGUgZXhpc3RlbmNlIG1hdGNoIGluIHRoZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9ybSBvZiBbc29tZUF0dHJpYnV0
ZU5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Y3AuYXR0ciA9IHRzKGluQnJhY2tldHMrMSwgeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3ZSBoYWQgYW4gYXR0cmlidXRlIGFscmVhZHksIHNvIHdlIGtub3cg
dGhhdCB3ZSdyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbWF0Y2hpbmcgc29tZSBzb3J0IG9mIHZhbHVlLCBhcyBpbiBbYXR0ck5hbWU9aG93ZHld
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3AubWF0
Y2hGb3IgPSB0cygoaW5NYXRjaEZvcnx8aW5CcmFja2V0cysxKSwgeCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBjbWYgPSBfY3AubWF0Y2hGb3I7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoY21mKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBzdHJpcCBxdW90ZXMgZnJvbSB0aGUgbWF0
Y2hGb3IgdmFsdWUuIFdlIHdhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFthdHRyTmFtZT1ob3dkeV0gdG8gbWF0Y2ggdGhlIHNhbWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgYXMgW2F0
dHJOYW1lID0gJ2hvd2R5JyBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiggICAgIChjbWYuY2hhckF0KDApID09ICciJykgfHwgKGNtZi5jaGFyQXQo
MCkgID09ICInIikgKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2NwLm1hdGNoRm9yID0gY21mLnNsaWNlKDEsIC0xKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZW5kIHRoZSBhdHRyaWJ1dGUgYnkgYWRkaW5nIGl0IHRvIHRoZSBsaXN0
IG9mIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFBhcnQuYXR0cnMucHVzaChfY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9jcCA9IG51bGw7IC8vIG5lY2Vzc2FyeT8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbkJyYWNrZXRzID0gaW5NYXRjaEZvciA9IC0xOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihjYyA9PSAiPSIpeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBsYXN0IGNoYXIgd2Fz
IGFuIG9wZXJhdG9yIHByZWZpeCwgbWFrZSBzdXJlIHdlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVjb3JkIGl0IGFsb25nIHdpdGggdGhlICI9IiBvcGVyYXRv
ci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRkVG9DYyA9
ICgifH5eJCoiLmluZGV4T2YobGMpID49MCApID8gbGMgOiAiIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfY3AudHlwZSA9IGFkZFRvQ2MrY2M7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NwLmF0dHIgPSB0cyhpbkJyYWNrZXRzKzEs
IHgtYWRkVG9DYy5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluTWF0Y2hGb3IgPSB4KzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm93IGxvb2sgZm9yIG90aGVyIGNs
YXVzZSBwYXJ0cworICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoaW5QYXJlbnMgPj0g
MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGluIGEgcGFy
ZW50aGV0aWNhbCBleHByZXNzaW9uLCB3ZSBuZWVkIHRvIGZpZ3VyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBvdXQgaWYgaXQncyBhdHRhY2hlZCB0byBhIHBzZXVkby1zZWxl
Y3RvciBydWxlIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOm50aC1j
aGlsZCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjYyA9PSAiKSIpewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluUHNldWRvID49IDAp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NwLnZh
bHVlID0gdHMoaW5QYXJlbnMrMSwgeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluUHNl
dWRvID0gaW5QYXJlbnMgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoY2MgPT0gIiMiKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgb2YgYW4gSUQgbWF0Y2gKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kQWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluSWQgPSB4KzE7CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihjYyA9
PSAiLiIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBvZiBhIGNs
YXNzIG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZEFsbCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNsYXNzID0geDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH1lbHNlIGlmKGNjID09ICI6Iil7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHN0YXJ0IG9mIGEgcHNldWRvLXNlbGVjdG9yIG1hdGNoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZEFsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpblBzZXVkbyA9IHg7CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihjYyA9
PSAiWyIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBvZiBhbiBh
dHRyaWJ1dGUgbWF0Y2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZEFsbCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkJyYWNrZXRzID0geDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvdmlkZSBhIG5ldyBzdHJ1Y3R1cmUgZm9y
IHRoZSBhdHRyaWJ1dGUgbWF0Y2ggdG8gZmlsbC1pbgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfY3AgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Lyo9PT09PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI6IG51
bGwsIHR5cGU6IG51bGwsIG1hdGNoRm9yOiBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPT09PT0qLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoY2MgPT0gIigiKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG9ubHkgY2FyZSBpZiB3ZSd2ZSBl
bnRlcmVkIGEgcGFyZW50aGV0aWNhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBleHByZXNzaW9uIGlmIHdlJ3JlIGFscmVhZHkgaW5zaWRlIGEgcHNldWRvLXNlbGVjdG9yIG1h
dGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluUHNldWRvID49IDApewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3ZpZGUgYSBuZXcg
c3RydWN0dXJlIGZvciB0aGUgcHNldWRvIG1hdGNoIHRvIGZpbGwtaW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfY3AgPSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0cyhpblBzZXVkbysxLCB4KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJ0LnBzZXVkb3MucHVzaChfY3ApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluUGFyZW5zID0geDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlm
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2MgPT0gIiAiKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIGEgc3BhY2UgY2hhciBhbmQgdGhl
IGxhc3QgY2hhciBpcyB0b28sIGNvbnN1bWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGN1cnJlbnQgb25lIHdpdGhvdXQgZG9pbmcgbW9yZSB3b3JrCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChsYyAhPSBjYykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBhcnQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIHF1ZXJ5UGFydHM7CisgICAgICAgIH07CisgICAgICAgIAorCisgICAgICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworICAgICAgICAvLyBET00gcXVlcnkgaW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKKyAgICAgICAgdmFyIGFncmVlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29u
ZCl7CisgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSB5
ZXMvbm8gY2hhaW5pbmcgc3lzdGVtLiBhZ3JlZShmMSwKKyAgICAgICAgICAgICAgICAvLyBmMikg
Z2VuZXJhdGVzIGEgbmV3IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIGJvb2xlYW4gcmVzdWx0
cyBvZgorICAgICAgICAgICAgICAgIC8vIGJvdGggb2YgdGhlIHBhc3NlZCBmdW5jdGlvbnMgdG8g
YSBzaW5nbGUgbG9naWNhbC1hbmRlZCByZXN1bHQuIElmCisgICAgICAgICAgICAgICAgLy8gZWl0
aGVyIGFyZSBub3QgcGFzc2VkLCB0aGUgb3RoZXIgaXMgdXNlZCBleGNsdXNpdmVseS4KKyAgICAg
ICAgICAgICAgICBpZighZmlyc3QpeyByZXR1cm4gc2Vjb25kOyB9CisgICAgICAgICAgICAgICAg
aWYoIXNlY29uZCl7IHJldHVybiBmaXJzdDsgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3QuYXBwbHkod2lu
ZG93LCBhcmd1bWVudHMpICYmIHNlY29uZC5hcHBseSh3aW5kb3csIGFyZ3VtZW50cyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHZhciBnZXRBcnIgPSBmdW5jdGlv
bihpLCBhcnIpeworICAgICAgICAgICAgICAgIC8vIGhlbHBzIHVzIGF2b2lkIGFycmF5IGFsbG9j
IHdoZW4gd2UgZG9uJ3QgbmVlZCBpdAorICAgICAgICAgICAgICAgIHZhciByID0gYXJyfHxbXTsg
Ly8gRklYTUU6IHNob3VsZCB0aGlzIGJlICduZXcgZC5fTm9kZUxpc3RDdG9yKCknID8KKyAgICAg
ICAgICAgICAgICBpZihpKXsgci5wdXNoKGkpOyB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHI7
CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIF9pc0VsZW1lbnQgPSBmdW5jdGlvbihuKXsgcmV0
dXJuICgxID09IG4ubm9kZVR5cGUpOyB9OworCisgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGNv
YWxlc2NlIF9nZXRBdHRyIHdpdGggZGVmYXVsdEdldHRlcgorICAgICAgICB2YXIgYmxhbmsgPSAi
IjsKKyAgICAgICAgdmFyIF9nZXRBdHRyID0gZnVuY3Rpb24oZWxlbSwgYXR0cil7CisgICAgICAg
ICAgICAgICAgaWYoIWVsZW0peyByZXR1cm4gYmxhbms7IH0KKyAgICAgICAgICAgICAgICBpZihh
dHRyID09ICJjbGFzcyIpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uY2xh
c3NOYW1lIHx8IGJsYW5rOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihh
dHRyID09ICJmb3IiKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmh0bWxG
b3IgfHwgYmxhbms7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKGF0dHIg
PT0gInN0eWxlIil7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zdHlsZS5j
c3NUZXh0IHx8IGJsYW5rOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gKGNhc2VTZW5zaXRpdmUgPyBlbGVtLmdldEF0dHJpYnV0ZShhdHRyKSA6IGVsZW0uZ2V0QXR0
cmlidXRlKGF0dHIsIDIpKSB8fCBibGFuazsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgYXR0
cnMgPSB7CisgICAgICAgICAgICAgICAgIio9IjogZnVuY3Rpb24oYXR0ciwgdmFsdWUpeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBFW2Zvbyo9ImJhciJdCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbiBFIGVsZW1lbnQgd2hvc2UgImZvbyIgYXR0
cmlidXRlIHZhbHVlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB0aGUgc3Vic3RyaW5nICJiYXIiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoX2dldEF0dHIoZWxlbSwgYXR0cikuaW5kZXhPZih2YWx1ZSk+PTAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgIl49IjogZnVuY3Rpb24oYXR0ciwgdmFsdWUpeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRVtmb29ePSJiYXIiXQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGFuIEUgZWxlbWVudCB3aG9zZSAiZm9vIiBhdHRyaWJ1dGUgdmFsdWUgYmVnaW5zIGV4
YWN0bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB3aXRoIHRoZSBz
dHJpbmcgImJhciIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlbGVt
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfZ2V0QXR0cihlbGVt
LCBhdHRyKS5pbmRleE9mKHZhbHVlKT09MCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiJD0iOiBmdW5jdGlvbihhdHRyLCB2
YWx1ZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBFW2ZvbyQ9ImJhciJdCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYW4gRSBlbGVtZW50IHdob3NlICJmb28i
IGF0dHJpYnV0ZSB2YWx1ZSBlbmRzIGV4YWN0bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB3aXRoIHRoZSBzdHJpbmcgImJhciIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB0dmFsID0gIiAiK3ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWEg
PSAiICIrX2dldEF0dHIoZWxlbSwgYXR0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoZWEubGFzdEluZGV4T2YodmFsdWUpPT0oZWEubGVuZ3RoLXZhbHVlLmxlbmd0
aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgIn49IjogZnVuY3Rpb24oYXR0ciwgdmFsdWUpeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRVtmb29+PSJiYXIiXQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGFuIEUgZWxlbWVudCB3aG9zZSAiZm9vIiBhdHRyaWJ1dGUgdmFsdWUgaXMgYSBs
aXN0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgc3BhY2Utc2Vw
YXJhdGVkIHZhbHVlcywgb25lIG9mIHdoaWNoIGlzIGV4YWN0bHkgZXF1YWwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0byAiYmFyIgorCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyByZXR1cm4gIltjb250YWlucyhjb25jYXQoJyAnLEAiK2F0dHIrIiwnICcpLCAn
ICIrIHZhbHVlICsiICcpXSI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHZhbCA9ICIg
Iit2YWx1ZSsiICI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWxl
bSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlYSA9ICIgIitfZ2V0QXR0
cihlbGVtLCBhdHRyKSsiICI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoZWEuaW5kZXhPZih0dmFsKT49MCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAifD0iOiBmdW5jdGlvbihhdHRyLCB2YWx1
ZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBFW2hyZWZsYW5nfD0iZW4iXQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuIEUgZWxlbWVudCB3aG9zZSAiaHJl
ZmxhbmciIGF0dHJpYnV0ZSBoYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGh5cGhlbi1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgYmVnaW5uaW5nIChmcm9tIHRo
ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGxlZnQpIHdpdGggImVu
IgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlRGFzaCA9ICIgIit2YWx1ZSsiLSI7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWxlbSl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlYSA9ICIgIitfZ2V0QXR0cihlbGVtLCBhdHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWEgPT0gdmFsdWUpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVhLmluZGV4T2YodmFsdWVEYXNoKT09MCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICI9IjogZnVuY3Rpb24o
YXR0ciwgdmFsdWUpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVs
ZW0peworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF9nZXRBdHRyKGVs
ZW0sIGF0dHIpID09IHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gYXZvaWQgdGVzdGluZyBmb3Igbm9k
ZSB0eXBlIGlmIHdlIGNhbi4gRGVmaW5pbmcgdGhpcyBpbiB0aGUgbmVnYXRpdmUKKyAgICAgICAg
Ly8gaGVyZSB0byBhdm9pZCBuZWdhdGlvbiBpbiB0aGUgZmFzdCBwYXRoLgorICAgICAgICB2YXIg
X25vTkVTID0gKHR5cGVvZiBnZXREb2MoKS5maXJzdENoaWxkLm5leHRFbGVtZW50U2libGluZyA9
PSAidW5kZWZpbmVkIik7CisgICAgICAgIHZhciBfbnMgPSAhX25vTkVTID8gIm5leHRFbGVtZW50
U2libGluZyIgOiAibmV4dFNpYmxpbmciOworICAgICAgICB2YXIgX3BzID0gIV9ub05FUyA/ICJw
cmV2aW91c0VsZW1lbnRTaWJsaW5nIiA6ICJwcmV2aW91c1NpYmxpbmciOworICAgICAgICB2YXIg
X3NpbXBsZU5vZGVUZXN0ID0gKF9ub05FUyA/IF9pc0VsZW1lbnQgOiB5ZXNtYW4pOworCisgICAg
ICAgIHZhciBfbG9va0xlZnQgPSBmdW5jdGlvbihub2RlKXsKKyAgICAgICAgICAgICAgICAvLyBs
b29rIGxlZnQKKyAgICAgICAgICAgICAgICB3aGlsZShub2RlID0gbm9kZVtfcHNdKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKF9zaW1wbGVOb2RlVGVzdChub2RlKSl7IHJldHVybiBmYWxz
ZTsgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfTsKKworICAgICAgICB2YXIgX2xvb2tSaWdodCA9IGZ1bmN0aW9uKG5vZGUpeworICAg
ICAgICAgICAgICAgIC8vIGxvb2sgcmlnaHQKKyAgICAgICAgICAgICAgICB3aGlsZShub2RlID0g
bm9kZVtfbnNdKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKF9zaW1wbGVOb2RlVGVzdChu
b2RlKSl7IHJldHVybiBmYWxzZTsgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgZ2V0Tm9kZUluZGV4ID0g
ZnVuY3Rpb24obm9kZSl7CisgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBub2RlLnBhcmVudE5v
ZGU7CisgICAgICAgICAgICAgICAgdmFyIGkgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
dHJldCA9IHJvb3RbY2hpbGROb2Rlc05hbWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgY2kg
PSAobm9kZVsiX2kiXXx8LTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgY2wgPSAocm9vdFsi
X2wiXXx8LTEpOworCisgICAgICAgICAgICAgICAgaWYoIXRyZXQpeyByZXR1cm4gLTE7IH0KKyAg
ICAgICAgICAgICAgICB2YXIgbCA9IHRyZXQubGVuZ3RoOworCisgICAgICAgICAgICAgICAgLy8g
d2UgY2FsY3VsYXRlIHRoZSBwYXJlbnQgbGVuZ3RoIGFzIGEgY2hlYXAgd2F5IHRvIGludmFsaWRh
dGUgdGhlCisgICAgICAgICAgICAgICAgLy8gY2FjaGUuIEl0J3Mgbm90IDEwMCUgYWNjdXJhdGUs
IGJ1dCBpdCdzIG11Y2ggbW9yZSBob25lc3QgdGhhbiB3aGF0CisgICAgICAgICAgICAgICAgLy8g
b3RoZXIgbGlicmFyaWVzIGRvCisgICAgICAgICAgICAgICAgaWYoIGNsID09IGwgJiYgY2kgPj0g
MCAmJiBjbCA+PSAwICl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIGxlZ2l0
LCB0YWcgYW5kIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBlbHNlIHJlLWtleSB0aGluZ3MK
KyAgICAgICAgICAgICAgICByb290WyJfbCJdID0gbDsKKyAgICAgICAgICAgICAgICBjaSA9IC0x
OworICAgICAgICAgICAgICAgIGZvcih2YXIgdGUgPSByb290WyJmaXJzdEVsZW1lbnRDaGlsZCJd
fHxyb290WyJmaXJzdENoaWxkIl07IHRlOyB0ZSA9IHRlW19uc10peworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYoX3NpbXBsZU5vZGVUZXN0KHRlKSl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlWyJfaSJdID0gKytpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZihub2RlID09PSB0ZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTk9URToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgIHNob3J0Y3V0dGluZyB0aGUgcmV0dXJuIGF0IHRoaXMgc3RlcCBpbiBpbmRleGluZyB3b3Jr
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdmVyeSB3
ZWxsIGZvciBiZW5jaG1hcmtpbmcgYnV0IHdlIGF2b2lkIGl0IGhlcmUgc2luY2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGl0IGxlYWRzIHRvIHBvdGVu
dGlhbCBPKG5eMikgYmVoYXZpb3IgaW4gc2VxdWVudGlhbAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgZ2V0Tm9kZXhJbmRleCBvcGVyYXRpb25zIG9uIGEg
cHJldmlvdXNseSB1bi1pbmRleGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICBwYXJlbnQuIFdlIG1heSByZXZpc2l0IHRoaXMgYXQgYSBsYXRlciB0aW1l
LCBidXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICBub3cgd2UganVzdCB3YW50IHRvIGdldCB0aGUgcmlnaHQgYW5zd2VyIG1vcmUgb2Z0ZW4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHRoYW4gbm90Lgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpID0gaTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gY2k7CisgICAgICAgIH07CisK
KyAgICAgICAgdmFyIGlzRXZlbiA9IGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAgICAgIHJl
dHVybiAhKChnZXROb2RlSW5kZXgoZWxlbSkpICUgMik7CisgICAgICAgIH07CisKKyAgICAgICAg
dmFyIGlzT2RkID0gZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoZ2V0
Tm9kZUluZGV4KGVsZW0pKSAlIDIpOworICAgICAgICB9OworCisgICAgICAgIHZhciBwc2V1ZG9z
ID0geworICAgICAgICAgICAgICAgICJjaGVja2VkIjogZnVuY3Rpb24obmFtZSwgY29uZGl0aW9u
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlbGVtKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhKCJjaGVja2VkIiBpbiBlbGVtID8g
ZWxlbS5jaGVja2VkIDogZWxlbS5zZWxlY3RlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiZmlyc3QtY2hpbGQiOiBmdW5j
dGlvbigpeyByZXR1cm4gX2xvb2tMZWZ0OyB9LAorICAgICAgICAgICAgICAgICJsYXN0LWNoaWxk
IjogZnVuY3Rpb24oKXsgcmV0dXJuIF9sb29rUmlnaHQ7IH0sCisgICAgICAgICAgICAgICAgIm9u
bHktY2hpbGQiOiBmdW5jdGlvbihuYW1lLCBjb25kaXRpb24peworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZighX2xvb2tMZWZ0KG5vZGUpKXsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKCFfbG9va1JpZ2h0KG5vZGUpKXsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJl
bXB0eSI6IGZ1bmN0aW9uKG5hbWUsIGNvbmRpdGlvbil7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIERvbVF1ZXJ5IGFuZCBqUXVlcnkgZ2V0IHRoaXMgd3JvbmcsIG9kZGx5IGVub3VnaC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIENTUyAzIHNlbGVjdG9ycyBzcGVj
IGlzIHByZXR0eSBleHBsaWNpdCBhYm91dCBpdCwgdG9vLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY24gPSBlbGVtLmNoaWxkTm9kZXM7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBjbmwgPSBlbGVtLmNoaWxkTm9kZXMubGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpZighY25sKXsgcmV0dXJuIHRydWU7IH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciB4PWNubC0xOyB4ID49IDA7IHgtLSl7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG50ID0gY25beF0u
bm9kZVR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKG50
ID09PSAxKXx8KG50ID09IDMpKXsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAiY29udGFpbnMiOiBmdW5jdGlvbihuYW1lLCBjb25kaXRpb24peworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGN6ID0gY29uZGl0aW9uLmNoYXJBdCgwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKCBjeiA9PSAnIicgfHwgY3ogPT0gIiciICl7IC8vcmVtb3ZlIHF1
b3RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlv
bi5zbGljZSgxLCAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoZWxlbS5pbm5lckhUTUwuaW5kZXhPZihjb25kaXRpb24pID49IDAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgIm5vdCI6IGZ1bmN0aW9uKG5hbWUsIGNvbmRpdGlvbil7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcCA9IGdldFF1ZXJ5UGFydHMoY29uZGl0aW9uKVswXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBpZ25vcmVzID0geyBlbDogMSB9OworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYocC50YWcgIT0gIioiKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWdub3Jlcy50YWcgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoIXAuY2xhc3Nlcy5sZW5ndGgpeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZ25vcmVzLmNsYXNzZXMgPSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG50ZiA9IGdldFNpbXBsZUZpbHRlckZ1
bmMocCwgaWdub3Jlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24o
ZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIW50ZihlbGVt
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAibnRoLWNoaWxkIjogZnVuY3Rpb24obmFtZSwgY29uZGl0aW9uKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBwaSA9IHBhcnNlSW50OworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXZvaWQgcmUtZGVmaW5pbmcgZnVuY3Rpb24gb2JqZWN0cyBpZiB3ZSBjYW4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbmRpdGlvbiA9PSAib2RkIil7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc09kZDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH1lbHNlIGlmKGNvbmRpdGlvbiA9PSAiZXZlbiIpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaXNFdmVuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGNhbiB3ZSBzaG9ydGVuIHRoaXM/CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZihjb25kaXRpb24uaW5kZXhPZigibiIpICE9IC0xKXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRwYXJ0cyA9IGNvbmRpdGlvbi5zcGxp
dCgibiIsIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZCA9IHRw
YXJ0c1swXSA/ICgodHBhcnRzWzBdID09ICctJykgPyAtMSA6IHBpKHRwYXJ0c1swXSkpIDogMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IHRwYXJ0c1sxXSA/IHBp
KHRwYXJ0c1sxXSkgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGIg
PSAwLCB1YiA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcmVkID4g
MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaWR4IDwgMCl7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHggPSAo
aWR4ICUgcHJlZCkgJiYgKHByZWQgKyAoaWR4ICUgcHJlZCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGlkeD4wKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlkeCA+PSBwcmVkKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGIgPSBpZHgg
LSBpZHggJSBwcmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWR4ID0gaWR4ICUgcHJlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHByZWQ8MCl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZCAqPSAtMTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZHggaGFzIHRvIGJlIGdyZWF0
ZXIgdGhhbiAwIHdoZW4gcHJlZCBpcyBuZWdhdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzaGFsbCB3ZSB0aHJvdyBhbiBlcnJvciBoZXJlPworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlkeCA+IDApeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWIgPSBpZHg7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHggPSBpZHggJSBwcmVk
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZihwcmVkID4gMCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGkgPSBnZXROb2RlSW5kZXgoZWxlbSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGk+PWxiKSAmJiAodWI8MCB8
fCBpPD11YikgJiYgKChpICUgcHJlZCkgPT0gaWR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNl
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IGlk
eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5jb3VudCA9IHBpKGNvbmRpdGlv
bik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWxlbSl7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZ2V0Tm9kZUluZGV4KGVsZW0pID09
IG5jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICB9OworCisgICAgICAgIHZhciBkZWZhdWx0R2V0dGVyID0gKGQuaXNJRSA8IDkgfHwg
KGRvam8uaXNJRSAmJiBkb2pvLmlzUXVpcmtzKSkgPyBmdW5jdGlvbihjb25kKXsKKyAgICAgICAg
ICAgICAgICB2YXIgY2xjID0gY29uZC50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgIGlm
KGNsYyA9PSAiY2xhc3MiKXsgY29uZCA9ICJjbGFzc05hbWUiOyB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChj
YXNlU2Vuc2l0aXZlID8gZWxlbS5nZXRBdHRyaWJ1dGUoY29uZCkgOiBlbGVtW2NvbmRdfHxlbGVt
W2NsY10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSA6IGZ1bmN0aW9uKGNvbmQpewor
ICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlbGVtKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAoZWxlbSAmJiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmhhc0F0dHJp
YnV0ZShjb25kKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHZh
ciBnZXRTaW1wbGVGaWx0ZXJGdW5jID0gZnVuY3Rpb24ocXVlcnksIGlnbm9yZXMpeworICAgICAg
ICAgICAgICAgIC8vIGdlbmVyYXRlcyBhIG5vZGUgdGVzdGVyIGZ1bmN0aW9uIGJhc2VkIG9uIHRo
ZSBwYXNzZWQgcXVlcnkgcGFydC4gVGhlCisgICAgICAgICAgICAgICAgLy8gcXVlcnkgcGFydCBp
cyBvbmUgb2YgdGhlIHN0cnVjdHVyZXMgZ2VuZXJhdGVkIGJ5IHRoZSBxdWVyeSBwYXJzZXIKKyAg
ICAgICAgICAgICAgICAvLyB3aGVuIGl0IGNyZWF0ZXMgdGhlIHF1ZXJ5IEFTVC4gVGhlICJpZ25v
cmVzIiBvYmplY3Qgc3BlY2lmaWVzIHdoaWNoCisgICAgICAgICAgICAgICAgLy8gKGlmIGFueSkg
dGVzdHMgdG8gc2tpcCwgYWxsb3dpbmcgdGhlIHN5c3RlbSB0byBhdm9pZCBkdXBsaWNhdGluZwor
ICAgICAgICAgICAgICAgIC8vIHdvcmsgd2hlcmUgaXQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHRh
a2VuIGludG8gYWNjb3VudCBieSBvdGhlcgorICAgICAgICAgICAgICAgIC8vIGZhY3RvcnMgc3Vj
aCBhcyBob3cgdGhlIG5vZGVzIHRvIHRlc3Qgd2VyZSBmZXRjaGVkIGluIHRoZSBmaXJzdAorICAg
ICAgICAgICAgICAgIC8vIHBsYWNlCisgICAgICAgICAgICAgICAgaWYoIXF1ZXJ5KXsgcmV0dXJu
IHllc21hbjsgfQorICAgICAgICAgICAgICAgIGlnbm9yZXMgPSBpZ25vcmVzfHx7fTsKKworICAg
ICAgICAgICAgICAgIHZhciBmZiA9IG51bGw7CisKKyAgICAgICAgICAgICAgICBpZighKCJlbCIg
aW4gaWdub3JlcykpeworICAgICAgICAgICAgICAgICAgICAgICAgZmYgPSBhZ3JlZShmZiwgX2lz
RWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoISgidGFn
IiBpbiBpZ25vcmVzKSl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihxdWVyeS50YWcgIT0g
IioiKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmYgPSBhZ3JlZShmZiwgZnVu
Y3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChlbGVtICYmIChlbGVtLnRhZ05hbWUgPT0gcXVlcnkuZ2V0VGFnKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoISgiY2xhc3NlcyIgaW4gaWdu
b3JlcykpeworICAgICAgICAgICAgICAgICAgICAgICAgZWFjaChxdWVyeS5jbGFzc2VzLCBmdW5j
dGlvbihjbmFtZSwgaWR4LCBhcnIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBnZXQgdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzV2lsZGNhcmQgPSBjbmFtZS5j
aGFyQXQoY25hbWUubGVuZ3RoLTEpID09ICIqIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoaXNXaWxkY2FyZCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY25hbWUgPSBjbmFtZS5zdWJzdHIoMCwgY25hbWUubGVuZ3RoLTEpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEkgZGlzbGlrZSB0aGUgcmVnZXggdGhpbmcsIGV2ZW4gaWYgbWVtb2l6ZWQgaW4gYSBjYWNo
ZSwgYnV0IGl0J3MgVkVSWSBzaG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmUgPSBuZXcgUmVnRXhwKCIoPzpefFxccykiICsgY25hbWUgKyAoaXNXaWxkY2FyZCA/ICIu
KiIgOiAiIikgKyAiKD86XFxzfCQpIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAo
Iig/Ol58XFxzKSIgKyBjbmFtZSArICIoPzpcXHN8JCkiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmYgPSBhZ3JlZShmZiwgZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlLnRlc3QoZWxlbS5jbGFzc05hbWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmYuY291bnQgPSBpZHg7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZighKCJwc2V1ZG9zIiBp
biBpZ25vcmVzKSl7CisgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHF1ZXJ5LnBzZXVkb3Ms
IGZ1bmN0aW9uKHBzZXVkbyl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBw
biA9IHBzZXVkby5uYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwc2V1
ZG9zW3BuXSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmYgPSBh
Z3JlZShmZiwgcHNldWRvc1twbl0ocG4sIHBzZXVkby52YWx1ZSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZighKCJhdHRycyIgaW4gaWdub3Jlcykpewor
ICAgICAgICAgICAgICAgICAgICAgICAgZWFjaChxdWVyeS5hdHRycywgZnVuY3Rpb24oYXR0cil7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVyOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGF0dHIuYXR0cjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHlwZSwgYXR0ciwgbWF0Y2hGb3IKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYoYXR0ci50eXBlICYmIGF0dHJzW2F0dHIudHlwZV0peworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIgPSBhdHRyc1thdHRy
LnR5cGVdKGEsIGF0dHIubWF0Y2hGb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9ZWxzZSBpZihhLmxlbmd0aCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hlciA9IGRlZmF1bHRHZXR0ZXIoYSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWF0Y2hlcil7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmYgPSBhZ3JlZShmZiwg
bWF0Y2hlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
KCEoImlkIiBpbiBpZ25vcmVzKSl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihxdWVyeS5p
ZCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZmID0gYWdyZWUoZmYsIGZ1bmN0
aW9uKGVsZW0peworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoISFlbGVtICYmIChlbGVtLmlkID09IHF1ZXJ5LmlkKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCFmZil7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZighKCJkZWZhdWx0IiBpbiBpZ25vcmVzKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZmID0geWVzbWFuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmY7CisgICAgICAgIH07CisKKyAgICAg
ICAgdmFyIF9uZXh0U2libGluZyA9IGZ1bmN0aW9uKGZpbHRlckZ1bmMpeworICAgICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbihub2RlLCByZXQsIGJhZyl7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZShub2RlID0gbm9kZVtfbnNdKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoX25vTkVTICYmICghX2lzRWxlbWVudChub2RlKSkpeyBjb250aW51ZTsgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoIWJhZyB8fCBfaXNVbmlxdWUobm9kZSwgYmFnKSkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGdW5jKG5vZGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICl7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0LnB1c2gobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB2YXIgX25leHRTaWJsaW5n
cyA9IGZ1bmN0aW9uKGZpbHRlckZ1bmMpeworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
bihyb290LCByZXQsIGJhZyl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGUgPSByb290
W19uc107CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSh0ZSl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKF9zaW1wbGVOb2RlVGVzdCh0ZSkpeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJhZyAmJiAhX2lzVW5pcXVlKHRlLCBiYWcp
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmaWx0ZXJGdW5jKHRlKSl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCh0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlID0g
dGVbX25zXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAg
IC8vIGdldCBhbiBhcnJheSBvZiBjaGlsZCAqZWxlbWVudHMqLCBza2lwcGluZyB0ZXh0IGFuZCBj
b21tZW50IG5vZGVzCisgICAgICAgIHZhciBfY2hpbGRFbGVtZW50cyA9IGZ1bmN0aW9uKGZpbHRl
ckZ1bmMpeworICAgICAgICAgICAgICAgIGZpbHRlckZ1bmMgPSBmaWx0ZXJGdW5jfHx5ZXNtYW47
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJvb3QsIHJldCwgYmFnKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGdldCBhbiBhcnJheSBvZiBjaGlsZCBlbGVtZW50cywgc2tp
cHBpbmcgdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHRlLCB4ID0gMCwgdHJldCA9IHJvb3RbY2hpbGROb2Rlc05hbWVdOworICAgICAgICAgICAgICAg
ICAgICAgICAgd2hpbGUodGUgPSB0cmV0W3grK10peworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2lt
cGxlTm9kZVRlc3QodGUpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCFiYWcgfHwgX2lzVW5pcXVlKHRlLCBiYWcpKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChmaWx0ZXJGdW5jKHRlLCB4KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXQucHVzaCh0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIC8qCisg
ICAgICAgIC8vIHRoYW5rcywgRGVhbiEKKyAgICAgICAgdmFyIGl0ZW1Jc0FmdGVyUm9vdCA9IGQu
aXNJRSA/IGZ1bmN0aW9uKGl0ZW0sIHJvb3QpeworICAgICAgICAgICAgICAgIHJldHVybiAoaXRl
bS5zb3VyY2VJbmRleCA+IHJvb3Quc291cmNlSW5kZXgpOworICAgICAgICB9IDogZnVuY3Rpb24o
aXRlbSwgcm9vdCl7CisgICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtLmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKHJvb3QpID09IDIpOworICAgICAgICB9OworICAgICAgICAqLworCisgICAgICAg
IC8vIHRlc3QgdG8gc2VlIGlmIG5vZGUgaXMgYmVsb3cgcm9vdAorICAgICAgICB2YXIgX2lzRGVz
Y2VuZGFudCA9IGZ1bmN0aW9uKG5vZGUsIHJvb3QpeworICAgICAgICAgICAgICAgIHZhciBwbiA9
IG5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgICAgICAgICB3aGlsZShwbil7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZihwbiA9PSByb290KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBwbiA9IHBuLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiAhIXBuOworICAgICAgICB9OworCisgICAgICAgIHZhciBfZ2V0RWxlbWVu
dHNGdW5jQ2FjaGUgPSB7fTsKKworICAgICAgICB2YXIgZ2V0RWxlbWVudHNGdW5jID0gZnVuY3Rp
b24ocXVlcnkpeworICAgICAgICAgICAgICAgIHZhciByZXRGdW5jID0gX2dldEVsZW1lbnRzRnVu
Y0NhY2hlW3F1ZXJ5LnF1ZXJ5XTsKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSd2ZSBnb3QgYSBj
YWNoZWQgZGlzcGF0Y2hlciwganVzdCB1c2UgdGhhdAorICAgICAgICAgICAgICAgIGlmKHJldEZ1
bmMpeyByZXR1cm4gcmV0RnVuYzsgfQorICAgICAgICAgICAgICAgIC8vIGVsc2UsIGdlbmVyYXRl
IGEgbmV3IG9uCisKKyAgICAgICAgICAgICAgICAvLyBOT1RFOgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHNlYXJj
aGVzIGZvciBub2RlcyBhbmQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZmlsdGVy
cyB0aGVtLiAgVGhlIHNlYXJjaCBtYXkgYmUgc3BlY2lhbGl6ZWQgYnkgaW5maXggb3BlcmF0b3Jz
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICgiPiIsICJ+Iiwgb3IgIisiKSBlbHNl
IGl0IHdpbGwgZGVmYXVsdCB0byBzZWFyY2hpbmcgYWxsCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGRlc2NlbmRhbnRzICh0aGUgIiAiIHNlbGVjdG9yKS4gT25jZSBhIGdyb3VwIG9m
IGNoaWxkcmVuIGlzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZvdW5kLCBhIHRl
c3QgZnVuY3Rpb24gaXMgYXBwbGllZCB0byB3ZWVkIG91dCB0aGUgb25lcyB3ZQorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBkb24ndCB3YW50LiBNYW55IGNvbW1vbiBjYXNlcyBjYW4g
YmUgZmFzdC1wYXRoZWQuIFdlIHNwZW5kIGEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgbG90IG9mIGN5Y2xlcyB0byBjcmVhdGUgYSBkaXNwYXRjaGVyIHRoYXQgZG9lc24ndCBkbyBt
b3JlIHdvcmsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhhbiBuZWNlc3Nhcnkg
YXQgYW55IHBvaW50IHNpbmNlLCB1bmxpa2UgdGhpcyBmdW5jdGlvbiwgdGhlCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGRpc3BhdGNoZXJzIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRp
bWUuIFRoZSBsb2dpYyBvZiBnZW5lcmF0aW5nCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIGVmZmljaWVudCBkaXNwYXRjaGVycyBsb29rcyBsaWtlIHRoaXMgaW4gcHNldWRvIGNvZGU6
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIyBp
ZiBpdCdzIGEgcHVyZWx5IGRlc2NlbmRhbnQgcXVlcnkgKG5vICI+IiwgIisiLCBvciAifiIgbW9k
aWZpZXJzKQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZiBpbmZpeE9wZXJhdG9y
ID09ICIgIjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpZiBvbmx5
KGlkKToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBkZWYocm9vdCk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBkLmJ5SWQoaWQsIHJvb3QpOworICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgZWxpZiBpZDoKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWYo
cm9vdCk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmaWx0ZXIoZC5ieUlkKGlkLCByb290KSk7CisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBlbGlmIGNzc0NsYXNz
ICYmIGdldEVsZW1lbnRzQnlDbGFzc05hbWU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmKHJvb3QpOgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyKHJvb3Qu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3NDbGFzcykpOworICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgZWxpZiBvbmx5KHRhZyk6Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVm
KHJvb3QpOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKTsKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNl
YXJjaCBieSB0YWcgbmFtZSwgdGhlbiBmaWx0ZXIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWYocm9vdCk6CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIocm9v
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lfHwiKiIpKTsKKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBlbGlmIGluZml4T3BlcmF0b3IgPT0g
Ij4iOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICMgc2VhcmNoIGRp
cmVjdCBjaGlsZHJlbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBkZWYocm9vdCk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmlsdGVyKHJvb3QuY2hpbGRyZW4pOworICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGVsaWYgaW5maXhPcGVyYXRvciA9PSAi
KyI6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIyBzZWFyY2ggbmV4
dCBzaWJsaW5nCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRlZihyb290KToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmaWx0ZXIocm9vdC5uZXh0RWxlbWVudFNpYmxpbmcpOworICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGVsaWYgaW5maXhPcGVyYXRv
ciA9PSAifiI6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIyBzZWFy
Y2ggcmlnaHR3YXJkIHNpYmxpbmdzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGRlZihyb290KToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIobmV4dFNpYmxpbmdzKHJvb3QpKTsKKworICAg
ICAgICAgICAgICAgIHZhciBpbyA9IHF1ZXJ5LmluZml4T3BlcjsKKyAgICAgICAgICAgICAgICB2
YXIgb3BlciA9IChpbyA/IGlvLm9wZXIgOiAiIik7CisgICAgICAgICAgICAgICAgLy8gdGhlIGRl
ZmF1bHQgZmlsdGVyIGZ1bmMgd2hpY2ggdGVzdHMgZm9yIGFsbCBjb25kaXRpb25zIGluIHRoZSBx
dWVyeQorICAgICAgICAgICAgICAgIC8vIHBhcnQuIFRoaXMgaXMgcG90ZW50aWFsbHkgaW5lZmZp
Y2llbnQsIHNvIHNvbWUgb3B0aW1pemVkIHBhdGhzIG1heQorICAgICAgICAgICAgICAgIC8vIHJl
LWRlZmluZSBpdCB0byB0ZXN0IGZld2VyIHRoaW5ncy4KKyAgICAgICAgICAgICAgICB2YXIgZmls
dGVyRnVuYyA9IGdldFNpbXBsZUZpbHRlckZ1bmMocXVlcnksIHsgZWw6IDEgfSk7CisgICAgICAg
ICAgICAgICAgdmFyIHF0ID0gcXVlcnkudGFnOworICAgICAgICAgICAgICAgIHZhciB3aWxkY2Fy
ZFRhZyA9ICgiKiIgPT0gcXQpOworICAgICAgICAgICAgICAgIHZhciBlY3MgPSBnZXREb2MoKVsi
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSJdOworCisgICAgICAgICAgICAgICAgaWYoIW9wZXIpewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUncyBubyBpbmZpeCBvcGVyYXRvciwg
dGhlbiBpdCdzIGEgZGVzY2VuZGFudCBxdWVyeS4gSUQKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFuZCAiZWxlbWVudHMgYnkgY2xhc3MgbmFtZSIgdmFyaWFudHMgY2FuIGJlIGFjY2VsZXJh
dGVkIHNvIHdlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsIHRoZW0gb3V0IGV4cGxp
Y2l0bHk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZihxdWVyeS5pZCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRlc3Rpbmcgc2hvd3MgdGhhdCB0aGUgb3ZlcmhlYWQg
b2YgeWVzbWFuKCkgaXMgYWNjZXB0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbmQgY2FuIHNhdmUgdXMgc29tZSBieXRlcyB2cy4gcmUtZGVmaW5pbmcgdGhlIGZ1bmN0
aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZXJ5d2hlcmUuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckZ1bmMgPSAoIXF1ZXJ5Lmxvb3BzICYm
IHdpbGRjYXJkVGFnKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eWVzbWFuIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTaW1w
bGVGaWx0ZXJGdW5jKHF1ZXJ5LCB7IGVsOiAxLCBpZDogMSB9KTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXRGdW5jID0gZnVuY3Rpb24ocm9vdCwgYXJyKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGUgPSBkLmJ5SWQocXVlcnkuaWQs
IChyb290Lm93bmVyRG9jdW1lbnR8fHJvb3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZighdGUgfHwgIWZpbHRlckZ1bmModGUpKXsgcmV0dXJuOyB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoOSA9PSByb290Lm5vZGVUeXBl
KXsgLy8gaWYgcm9vdCdzIGEgZG9jLCB3ZSBqdXN0IHJldHVybiBkaXJlY3RseQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEFycih0ZSwg
YXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsgLy8g
b3RoZXJ3aXNlIGNoZWNrIGFuY2VzdHJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZihfaXNEZXNjZW5kYW50KHRlLCByb290KSl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRB
cnIodGUsIGFycik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxz
ZSBpZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNzICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGlzQWxpZW4gY2hlY2suIFdvcmthcm91bmQgZm9yIFBy
b3RvdHlwZS5qcyBiZWluZyB0b3RhbGx5IGV2aWwvZHVtYi4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3QoU3RyaW5nKGVjcykp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmNsYXNzZXMubGVuZ3Ro
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjc3NDYXNlQnVnCisgICAgICAg
ICAgICAgICAgICAgICAgICApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
dCdzIGEgY2xhc3MtYmFzZWQgcXVlcnkgYW5kIHdlJ3ZlIGdvdCBhIGZhc3Qgd2F5IHRvIHJ1biBp
dC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgY2xhc3MgYW5k
IElEIGZpbHRlcnMgc2luY2Ugd2Ugd2lsbCBoYXZlIGhhbmRsZWQgYm90aAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGdW5jID0gZ2V0U2ltcGxlRmlsdGVyRnVuYyhxdWVy
eSwgeyBlbDogMSwgY2xhc3NlczogMSwgaWQ6IDEgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBjbGFzc2VzU3RyaW5nID0gcXVlcnkuY2xhc3Nlcy5qb2luKCIgIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldEZ1bmMgPSBmdW5jdGlvbihyb290LCBh
cnIsIGJhZyl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJl
dCA9IGdldEFycigwLCBhcnIpLCB0ZSwgeD0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB0cmV0ID0gcm9vdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNz
ZXNTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
KCh0ZSA9IHRyZXRbeCsrXSkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYoZmlsdGVyRnVuYyh0ZSwgcm9vdCkgJiYgX2lzVW5pcXVlKHRlLCBiYWcp
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0LnB1c2godGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICB9
ZWxzZSBpZighd2lsZGNhcmRUYWcgJiYgIXF1ZXJ5Lmxvb3BzKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaXQncyB0YWcgb25seS4gRmFzdC1wYXRoIGl0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXRGdW5jID0gZnVuY3Rpb24ocm9vdCwgYXJyLCBiYWcp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBnZXRB
cnIoMCwgYXJyKSwgdGUsIHg9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgdHJldCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUocXVlcnkuZ2V0VGFnKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCh0ZSA9IHRy
ZXRbeCsrXSkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYoX2lzVW5pcXVlKHRlLCBiYWcpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2godGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSBjb21tb24gY2FzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIGEgZGVzY2VuZGFudCBzZWxlY3RvciB3aXRob3V0IGEgZmFzdCBwYXRo
LiBCeSBub3cgaXQncyBnb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHRvIGhhdmUgYSB0YWcgc2VsZWN0b3IsIGV2ZW4gaWYgaXQncyBqdXN0ICIqIiBz
byB3ZSBxdWVyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgYnkgdGhhdCBhbmQgZmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bHRlckZ1bmMgPSBnZXRTaW1wbGVGaWx0ZXJGdW5jKHF1ZXJ5LCB7IGVsOiAxLCB0YWc6IDEsIGlk
OiAxIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRGdW5jID0gZnVuY3Rp
b24ocm9vdCwgYXJyLCBiYWcpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciByZXQgPSBnZXRBcnIoMCwgYXJyKSwgdGUsIHg9MDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgZ2V0VGFnKCkgdG8gYXZvaWQgY2FzZSBz
ZW5zaXRpdml0eSBpc3N1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdHJldCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUocXVlcnkuZ2V0VGFnKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCh0ZSA9IHRyZXRb
eCsrXSkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYoZmlsdGVyRnVuYyh0ZSwgcm9vdCkgJiYgX2lzVW5pcXVlKHRlLCBiYWcpKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2go
dGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHF1ZXJ5IGlzIHNjb3Bl
ZCBpbiBzb21lIHdheS4gSW5zdGVhZCBvZiBxdWVyeWluZyBieSB0YWcgd2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHVzZSBzb21lIG90aGVyIGNvbGxlY3Rpb24gdG8gZmluZCBjYW5kaWRh
dGUgbm9kZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2lwRmlsdGVycyA9IHsgZWw6
IDEgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbGRjYXJkVGFnKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEZpbHRlcnMudGFnID0gMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckZ1bmMgPSBnZXRT
aW1wbGVGaWx0ZXJGdW5jKHF1ZXJ5LCBza2lwRmlsdGVycyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZigiKyIgPT0gb3Blcil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dEZ1bmMgPSBfbmV4dFNpYmxpbmcoZmlsdGVyRnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9ZWxzZSBpZigifiIgPT0gb3Blcil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldEZ1bmMgPSBfbmV4dFNpYmxpbmdzKGZpbHRlckZ1bmMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfWVsc2UgaWYoIj4iID09IG9wZXIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXRGdW5jID0gX2NoaWxkRWxlbWVudHMoZmlsdGVyRnVuYyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGNhY2hl
IGl0IGFuZCByZXR1cm4KKyAgICAgICAgICAgICAgICByZXR1cm4gX2dldEVsZW1lbnRzRnVuY0Nh
Y2hlW3F1ZXJ5LnF1ZXJ5XSA9IHJldEZ1bmM7CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGZp
bHRlckRvd24gPSBmdW5jdGlvbihyb290LCBxdWVyeVBhcnRzKXsKKyAgICAgICAgICAgICAgICAv
LyBOT1RFOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGlzIGlzIHRoZSBndXRz
IG9mIHRoZSBET00gcXVlcnkgc3lzdGVtLiBJdCB0YWtlcyBhIGxpc3Qgb2YKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgcGFyc2VkIHF1ZXJ5IHBhcnRzIGFuZCBhIHJvb3QgYW5kIGZp
bmRzIGNoaWxkcmVuIHdoaWNoIG1hdGNoCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IHRoZSBzZWxlY3RvciByZXByZXNlbnRlZCBieSB0aGUgcGFydHMKKyAgICAgICAgICAgICAgICB2
YXIgY2FuZGlkYXRlcyA9IGdldEFycihyb290KSwgcXAsIHgsIHRlLCBxcGwgPSBxdWVyeVBhcnRz
Lmxlbmd0aCwgYmFnLCByZXQ7CisKKyAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwg
cXBsOyBpKyspeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gW107CisgICAgICAgICAg
ICAgICAgICAgICAgICBxcCA9IHF1ZXJ5UGFydHNbaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICB4ID0gY2FuZGlkYXRlcy5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYo
eCA+IDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIG1v
cmUgdGhhbiBvbmUgcm9vdCBhdCB0aGlzIGxldmVsLCBwcm92aWRlIGEgbmV3CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc2ggdG8gdXNlIGZvciBjaGVja2luZyBncm91cCBt
ZW1iZXJzaGlwIGJ1dCB0ZWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzeXN0ZW0gbm90IHRvIHBvc3QtZmlsdGVyIHVzIHNpbmNlIHdlIHdpbGwgYWxyZWFkeSBoYXZl
IGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2F1cmFudGVlZCB0byBi
ZSB1bmlxdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFnID0ge307CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5ub3ppcCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VmID0gZ2V0RWxl
bWVudHNGdW5jKHFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaiA9IDA7ICh0
ZSA9IGNhbmRpZGF0ZXNbal0pOyBqKyspeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBmb3IgZXZlcnkgcm9vdCwgZ2V0IHRoZSBlbGVtZW50cyB0aGF0IG1hdGNoIHRoZSBkZXNj
ZW5kYW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdG9yLCBhZGRp
bmcgdGhlbSB0byB0aGUgInJldCIgYXJyYXkgYW5kIGZpbHRlcmluZyB0aGVtCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHZpYSBtZW1iZXJzaGlwIGluIHRoaXMgbGV2ZWwncyBi
YWcuIElmIHRoZXJlIGFyZSBtb3JlIHF1ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHBhcnRzLCB0aGVuIHRoaXMgbGV2ZWwncyByZXR1cm4gd2lsbCBiZSB1c2VkIGFzIHRo
ZSBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldmVsJ3MgY2FuZGlk
YXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWYodGUsIHJldCwgYmFnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFy
ZXQubGVuZ3RoKXsgYnJlYWs7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMg
PSByZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIHRoZSBxdWVy
eSBydW5uZXIKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgLy8gdGhlc2UgYXJl
IHRoZSBwcmltYXJ5IGNhY2hlcyBmb3IgZnVsbC1xdWVyeSByZXN1bHRzLiBUaGUgcXVlcnkKKyAg
ICAgICAgLy8gZGlzcGF0Y2hlciBmdW5jdGlvbnMgYXJlIGdlbmVyYXRlZCB0aGVuIHN0b3JlZCBo
ZXJlIGZvciBoYXNoIGxvb2t1cCBpbgorICAgICAgICAvLyB0aGUgZnV0dXJlCisgICAgICAgIHZh
ciBfcXVlcnlGdW5jQ2FjaGVET00gPSB7fSwKKyAgICAgICAgICAgICAgICBfcXVlcnlGdW5jQ2Fj
aGVRU0EgPSB7fTsKKworICAgICAgICAvLyB0aGlzIGlzIHRoZSBzZWNvbmQgbGV2ZWwgb2Ygc3Bs
aXRpbmcsIGZyb20gZnVsbC1sZW5ndGggcXVlcmllcyAoZS5nLiwKKyAgICAgICAgLy8gImRpdi5m
b28gLmJhciIpIGludG8gc2ltcGxlIHF1ZXJ5IGV4cHJlc3Npb25zIChlLmcuLCBbImRpdi5mb28i
LAorICAgICAgICAvLyAiLmJhciJdKQorICAgICAgICB2YXIgZ2V0U3RlcFF1ZXJ5RnVuYyA9IGZ1
bmN0aW9uKHF1ZXJ5KXsKKyAgICAgICAgICAgICAgICB2YXIgcXBhcnRzID0gZ2V0UXVlcnlQYXJ0
cyh0cmltKHF1ZXJ5KSk7CisKKyAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIHRyaXZpYWwsIGF2
b2lkIGl0ZXJhdGlvbiBhbmQgemlwcGluZyBjb3N0cworICAgICAgICAgICAgICAgIGlmKHFwYXJ0
cy5sZW5ndGggPT0gMSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBvcHRpbWl6ZSB0
aGlzIGNhc2UgaGVyZSB0byBwcmV2ZW50IGRpc3BhdGNoIGZ1cnRoZXIgZG93biB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGNoYWluLCBwb3RlbnRpYWxseSBzbG93aW5nIHRoaW5ncyBk
b3duLiBXZSBjb3VsZCBtb3JlIGVsZWdhbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aGFuZGxlIHRoaXMgaW4gZmlsdGVyRG93bigpLCBidXQgaXQncyBzbG93ZXIgZm9yIHNpbXBsZSB0
aGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbmVlZCB0byBiZSBmYXN0IChl
LmcuLCAiI3NvbWVJZCIpLgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlZiA9IGdldEVs
ZW1lbnRzRnVuYyhxcGFydHNbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKHJvb3QpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHRl
Zihyb290LCBuZXcgcWxjKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihy
KXsgci5ub3ppcCA9IHRydWU7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBicmVhayBpdCB1cCBhbmQgcmV0dXJuIGEgcnVu
bmVyIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgcGFydHMgcmVjdXJzaXZlbHkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24ocm9vdCl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmlsdGVyRG93bihyb290LCBxcGFydHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICAvLyBOT1RFUzoKKyAgICAgICAgLy8gICAgICAqIHdlIGNhbid0IHRydXN0
IFFTQSBmb3IgYW55dGhpbmcgYnV0IGRvY3VtZW50LXJvb3RlZCBxdWVyaWVzLCBzbworICAgICAg
ICAvLyAgICAgICAgY2FjaGluZyBpcyBzcGxpdCBpbnRvIERPTSBxdWVyeSBldmFsdWF0b3JzIGFu
ZCBRU0EgcXVlcnkgZXZhbHVhdG9ycworICAgICAgICAvLyAgICAgICogY2FjaGluZyBxdWVyeSBy
ZXN1bHRzIGlzIGRpcnR5IGFuZCBsZWFrLXByb25lIChvciwgYXQgYSBtaW5pbXVtLAorICAgICAg
ICAvLyAgICAgICAgcHJvbmUgdG8gdW5ib3VuZGVkIGdyb3d0aCkuIE90aGVyIHRvb2xraXRzIG1h
eSBnbyB0aGlzIHJvdXRlLCBidXQKKyAgICAgICAgLy8gICAgICAgIHRoZXkgdG90YWxseSBkZXN0
cm95IHRoZWlyIG93biBhYmlsaXR5IHRvIG1hbmFnZSB0aGVpciBtZW1vcnkKKyAgICAgICAgLy8g
ICAgICAgIGZvb3RwcmludC4gSWYgd2UgaW1wbGVtZW50IGl0LCBpdCBzaG91bGQgb25seSBldmVy
IGJlIHdpdGggYSBmaXhlZAorICAgICAgICAvLyAgICAgICAgdG90YWwgZWxlbWVudCByZWZlcmVu
Y2UgIyBsaW1pdCBhbmQgYW4gTFJVLXN0eWxlIGFsZ29yaXRobSBzaW5jZSBKUworICAgICAgICAv
LyAgICAgICAgaGFzIG5vIHdlYWtyZWYgc3VwcG9ydC4gQ2FjaGluZyBjb21waWxlZCBxdWVyeSBl
dmFsdWF0b3JzIGlzIGFsc28KKyAgICAgICAgLy8gICAgICAgIHBvdGVudGlhbGx5IHByb2JsZW1h
dGljLCBidXQgZXZlbiBvbiBsYXJnZSBkb2N1bWVudHMgdGhlIHNpemUgb2YgdGhlCisgICAgICAg
IC8vICAgICAgICBxdWVyeSBldmFsdWF0b3JzIGlzIG9mdGVuIDwgMTAwIGZ1bmN0aW9uIG9iamVj
dHMgcGVyIGV2YWx1YXRvciAoYW5kCisgICAgICAgIC8vICAgICAgICBMUlUgY2FuIGJlIGFwcGxp
ZWQgaWYgaXQncyBldmVyIHNob3duIHRvIGJlIGFuIGlzc3VlKS4KKyAgICAgICAgLy8gICAgICAq
IHNpbmNlIElFJ3MgUVNBIHN1cHBvcnQgaXMgY3VycmVudGx5IG9ubHkgZm9yIEhUTUwgZG9jdW1l
bnRzIGFuZCBldmVuCisgICAgICAgIC8vICAgICAgICB0aGVuIG9ubHkgaW4gSUUgOCdzICJzdGFu
ZGFyZHMgbW9kZSIsIHdlIGhhdmUgdG8gZGV0ZWN0IG91ciBkaXNwYXRjaAorICAgICAgICAvLyAg
ICAgICAgcm91dGUgYXQgcXVlcnkgdGltZSBhbmQga2VlcCAyIHNlcGFyYXRlIGNhY2hlcy4gVWdn
LgorCisgICAgICAgIC8vIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIHRoaW5rIHdlIGNhbiBy
dW4gYSBnaXZlbiBxdWVyeSB2aWEKKyAgICAgICAgLy8gcXVlcnlTZWxlY3RvckFsbCBvciBpZiB3
ZSdsbCBuZWVkIHRvIGZhbGwgYmFjayBvbiBET00gcXVlcmllcyB0byBnZXQKKyAgICAgICAgLy8g
dGhlcmUuIFdlIG5lZWQgYSBsb3Qgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudmlyb25tZW50
IGFuZCB0aGUgcXVlcnkKKyAgICAgICAgLy8gdG8gbWFrZSB0aGUgZGV0ZXJtaW5pYXRpb24gKGUu
Zy4gZG9lcyBpdCBzdXBwb3J0IFFTQSwgZG9lcyB0aGUgcXVlcnkgaW4KKyAgICAgICAgLy8gcXVl
c3Rpb24gd29yayBpbiB0aGUgbmF0aXZlIFFTQSBpbXBsLCBldGMuKS4KKyAgICAgICAgdmFyIG51
YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CisgICAgICAgIC8vIHNvbWUgdmVyc2lvbnMgb2YgU2Fm
YXJpIHByb3ZpZGVkIFFTQSwgYnV0IGl0IHdhcyBidWdneSBhbmQgY3Jhc2gtcHJvbmUuCisgICAg
ICAgIC8vIFdlIG5lZWQgdGUgZGV0ZWN0IHRoZSByaWdodCAiaW50ZXJuYWwiIHdlYmtpdCB2ZXJz
aW9uIHRvIG1ha2UgdGhpcyB3b3JrLgorICAgICAgICB2YXIgd2sgPSAiV2ViS2l0LyI7CisgICAg
ICAgIHZhciBpczUyNSA9ICgKKyAgICAgICAgICAgICAgICBkLmlzV2ViS2l0ICYmCisgICAgICAg
ICAgICAgICAgKG51YS5pbmRleE9mKHdrKSA+IDApICYmCisgICAgICAgICAgICAgICAgKHBhcnNl
RmxvYXQobnVhLnNwbGl0KHdrKVsxXSkgPiA1MjgpCisgICAgICAgICk7CisKKyAgICAgICAgLy8g
SUUgUVNBIHF1ZXJpZXMgbWF5IGluY29ycmVjdGx5IGluY2x1ZGUgY29tbWVudCBub2Rlcywgc28g
d2UgdGhyb3cgdGhlCisgICAgICAgIC8vIHppcHBpbmcgZnVuY3Rpb24gaW50byAicmVtb3ZlIiBj
b21tZW50cyBtb2RlIGluc3RlYWQgb2YgdGhlIG5vcm1hbCAic2tpcAorICAgICAgICAvLyBpdCIg
d2hpY2ggZXZlcnkgb3RoZXIgUVNBLWNsdWVkIGJyb3dzZXIgZW5qb3lzCisgICAgICAgIHZhciBu
b1ppcCA9IGQuaXNJRSA/ICJjb21tZW50U3RyaXAiIDogIm5vemlwIjsKKworICAgICAgICB2YXIg
cXNhID0gInF1ZXJ5U2VsZWN0b3JBbGwiOworICAgICAgICB2YXIgcXNhQXZhaWwgPSAoCisgICAg
ICAgICAgICAgICAgISFnZXREb2MoKVtxc2FdICYmCisgICAgICAgICAgICAgICAgLy8gc2VlICM1
ODMyCisgICAgICAgICAgICAgICAgKCFkLmlzU2FmYXJpIHx8IChkLmlzU2FmYXJpID4gMy4xKSB8
fCBpczUyNSApCisgICAgICAgICk7CisKKyAgICAgICAgLy9Eb24ndCBib3RoZXIgd2l0aCBuKzMg
dHlwZSBvZiBtYXRjaGVzLCBJRSBjb21wbGFpbnMgaWYgd2UgbW9kaWZ5IHRob3NlLgorICAgICAg
ICB2YXIgaW5maXhTcGFjZVJlID0gL25cK1xkfChbXiBdKT8oWz5+K10pKFteID1dKT8vZzsKKyAg
ICAgICAgdmFyIGluZml4U3BhY2VGdW5jID0gZnVuY3Rpb24obWF0Y2gsIHByZSwgY2gsIHBvc3Qp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2ggPyAocHJlID8gcHJlICsgIiAiIDogIiIpICsg
Y2ggKyAocG9zdCA/ICIgIiArIHBvc3QgOiAiIikgOiAvKm4rMyovIG1hdGNoOworICAgICAgICB9
OworCisgICAgICAgIHZhciBnZXRRdWVyeUZ1bmMgPSBmdW5jdGlvbihxdWVyeSwgZm9yY2VET00p
eworICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHF1ZXJ5LiBUaGUgQ1NTMyBzZWxlY3RvcnMg
c3BlYyBhbGxvd3MgZm9yIG9taXR0aW5nIHNwYWNlcyBhcm91bmQKKyAgICAgICAgICAgICAgICAv
L2luZml4IG9wZXJhdG9ycywgPiwgfiBhbmQgKworICAgICAgICAgICAgICAgIC8vRG8gdGhlIHdv
cmsgaGVyZSBzaW5jZSBkZXRlY3Rpb24gZm9yIHNwYWNlcyBpcyB1c2VkIGFzIGEgc2ltcGxlICJu
b3QgdXNlIFFTQSIKKyAgICAgICAgICAgICAgICAvL3Rlc3QgYmVsb3cuCisgICAgICAgICAgICAg
ICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlKGluZml4U3BhY2VSZSwgaW5maXhTcGFjZUZ1bmMpOwor
CisgICAgICAgICAgICAgICAgaWYocXNhQXZhaWwpeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaWYgd2UndmUgZ290IGEgY2FjaGVkIHZhcmlhbnQgYW5kIHdlIHRoaW5rIHdlIGNhbiBkbyBp
dCwgcnVuIGl0IQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFzYUNhY2hlZCA9IF9xdWVy
eUZ1bmNDYWNoZVFTQVtxdWVyeV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZihxc2FDYWNo
ZWQgJiYgIWZvcmNlRE9NKXsgcmV0dXJuIHFzYUNhY2hlZDsgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIGVsc2UgaWYgd2UndmUgZ290IGEgRE9NIGNhY2hlZCB2YXJp
YW50LCBhc3N1bWUgdGhhdCB3ZSBhbHJlYWR5IGtub3cKKyAgICAgICAgICAgICAgICAvLyBhbGwg
d2UgbmVlZCB0byBhbmQgdXNlIGl0CisgICAgICAgICAgICAgICAgdmFyIGRvbUNhY2hlZCA9IF9x
dWVyeUZ1bmNDYWNoZURPTVtxdWVyeV07CisgICAgICAgICAgICAgICAgaWYoZG9tQ2FjaGVkKXsg
cmV0dXJuIGRvbUNhY2hlZDsgfQorCisgICAgICAgICAgICAgICAgLy8gVE9ETzoKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgdG9kYXkgd2UncmUgY2FjaGluZyBET00gYW5kIFFTQSBi
cmFuY2hlcyBzZXBhcmF0ZWx5IHNvIHdlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IHJlY2FsYyB1c2VRU0EgZXZlcnkgdGltZS4gSWYgd2UgaGFkIGEgd2F5IHRvIHRhZyByb290K3F1
ZXJ5CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGVmZmljaWVudGx5LCB3ZSdkIGJl
IGluIGdvb2Qgc2hhcGUgdG8gZG8gYSBnbG9iYWwgY2FjaGUuCisKKyAgICAgICAgICAgICAgICB2
YXIgcWN6ID0gcXVlcnkuY2hhckF0KDApOworICAgICAgICAgICAgICAgIHZhciBub3NwYWNlID0g
KC0xID09IHF1ZXJ5LmluZGV4T2YoIiAiKSk7CisKKyAgICAgICAgICAgICAgICAvLyBieUlkIHNl
YXJjaGVzIGFyZSB3aWNrZWQgZmFzdCBjb21wYXJlZCB0byBRU0EsIGV2ZW4gd2hlbiBmaWx0ZXJp
bmcKKyAgICAgICAgICAgICAgICAvLyBpcyByZXF1aXJlZAorICAgICAgICAgICAgICAgIGlmKCAo
cXVlcnkuaW5kZXhPZigiIyIpID49IDApICYmIChub3NwYWNlKSApeworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yY2VET00gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHZhciB1c2VRU0EgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICBxc2FBdmFpbCAm
JiAoIWZvcmNlRE9NKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgcGVyIENTUyAz
LCB3ZSBjYW4ndCBjdXJyZW50bHkgc3RhcnQgdy8gY29tYmluYXRvcjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVj
dG9ycy8jdzNjc2VsZ3JhbW1hcgorICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWNpYWxzLmlu
ZGV4T2YocWN6KSA9PSAtMSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFJ3MgUVNB
IGltcGwgc3Vja3Mgb24gcHNldWRvcworICAgICAgICAgICAgICAgICAgICAgICAgKCFkLmlzSUUg
fHwgKHF1ZXJ5LmluZGV4T2YoIjoiKSA9PSAtMSkpICYmCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICghKGNzc0Nhc2VCdWcgJiYgKHF1ZXJ5LmluZGV4T2YoIi4iKSA+PSAwKSkpICYmCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIG5lZWQgdG8gdGlnaHRlbiB1cCBicm93c2VyIHJ1bGVzIG9uICI6Y29u
dGFpbnMiIGFuZCAifD0iIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgZmlndXJlIG91dCB3aGljaCBhcmVuJ3QgZ29vZAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIExhdGVzdCB3ZWJraXQgKGFyb3VuZCA1MzEuMjEuOCkgZG9lcyBub3Qg
c2VlbSB0byBkbyB3ZWxsIHdpdGggOmNoZWNrZWQgb24gb3B0aW9uCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgZWxlbWVudHMsIGV2ZW4gdGhvdWdoIGFjY29yZGluZyB0
byBzcGVjLCBzZWxlY3RlZCBvcHRpb25zIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIG1hdGNoIDpjaGVja2VkLiBTbyBnbyBub25RU0EgZm9yIGl0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGh0dHA6Ly9idWdzLmRvam90b29s
a2l0Lm9yZy90aWNrZXQvNTE3OQorICAgICAgICAgICAgICAgICAgICAgICAgKHF1ZXJ5LmluZGV4
T2YoIjpjb250YWlucyIpID09IC0xKSAmJiAocXVlcnkuaW5kZXhPZigiOmNoZWNrZWQiKSA9PSAt
MSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChxdWVyeS5pbmRleE9mKCJ8PSIpID09IC0x
KSAvLyBzb21lIGJyb3dzZXJzIGRvbid0IGdyb2sgaXQKKyAgICAgICAgICAgICAgICApOworCisg
ICAgICAgICAgICAgICAgLy8gVE9ETzoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
aWYgd2UndmUgZ290IGEgZGVzY2VuZGFudCBxdWVyeSAoZS5nLiwgIj4gLnRoaW5nZXIiIGluc3Rl
YWQgb2YKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAganVzdCAiLnRoaW5nZXIiKSBp
biBhIFFTQS1hYmxlIGRvYywgYnV0IGFyZSBwYXNzZWQgYSBjaGlsZCBhcyBhCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHJvb3QsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBnaXZl
IHRoZSBpdGVtIGEgc3ludGhldGljIElEIGFuZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICB0cml2aWFsbHkgcmV3cml0ZSB0aGUgcXVlcnkgdG8gdGhlIGZvcm0gIiNzeW5pZCA+IC50
aGluZ2VyIiB0bworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB1c2UgdGhlIFFTQSBi
cmFuY2gKKworCisgICAgICAgICAgICAgICAgaWYodXNlUVNBKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB0cSA9IChzcGVjaWFscy5pbmRleE9mKHF1ZXJ5LmNoYXJBdChxdWVyeS5sZW5n
dGgtMSkpID49IDApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChxdWVyeSArICIgKiIpIDogcXVlcnk7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gX3F1ZXJ5RnVuY0NhY2hlUVNBW3F1ZXJ5XSA9IGZ1bmN0aW9uKHJvb3QpeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIFFTQSBzeXN0ZW0gY29udGFpbnMgYW4gZWdyZWdpb3VzIHNw
ZWMgYnVnIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bGltaXRzIHVzLCBlZmZlY3RpdmVseSwgdG8gb25seSBydW5uaW5nIFFTQSBxdWVyaWVzIG92ZXIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnRpcmUgZG9jdW1l
bnRzLiAgU2VlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBodHRwOi8vZWpvaG4ub3JnL2Jsb2cvdGhvdWdodHMtb24tcXVlcnlzZWxlY3Rv
cmFsbC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGRl
c3BpdGUgdGhpcywgd2UgY2FuIGFsc28gaGFuZGxlIFFTQSBydW5zIG9uIHNpbXBsZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc2VsZWN0b3JzLCBidXQg
d2UgZG9uJ3Qgd2FudCBkZXRlY3Rpb24gdG8gYmUgZXhwZW5zaXZlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBzbyB3ZSdyZSBqdXN0IGNoZWNraW5nIGZv
ciB0aGUgcHJlc2VuY2Ugb2YgYSBzcGFjZSBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICByaWdodCBub3cuIE5vdCBlbGVnYW50LCBidXQgaXQncyBj
aGVhcGVyIHRoYW4gcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgdGhlIHF1ZXJ5IHBhcnNlciB3aGVuIHdlIG1pZ2h0IG5vdCBuZWVkIHRvCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISgoOSA9PSByb290Lm5v
ZGVUeXBlKSB8fCBub3NwYWNlKSl7IHRocm93ICIiOyB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHIgPSByb290W3FzYV0odHEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgZXhwZW5zaXZlIGR1cGxpY2F0aW9uIGNo
ZWNrcyBhbmQganVzdCB3cmFwIGluIGEgTm9kZUxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByW25vWmlwXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH1jYXRjaChlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBlbHNlIHJ1biB0aGUgRE9NIGJyYW5jaCBvbiB0aGlzIHF1ZXJ5LCBlbnN1cmluZyB0aGF0IHdl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0aGF0
IHdheSBpbiB0aGUgZnV0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdldFF1ZXJ5RnVuYyhxdWVyeSwgdHJ1ZSkocm9vdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERPTSBicmFuY2gKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHF1ZXJ5LnNwbGl0KC9ccyosXHMqLyk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3F1ZXJ5RnVuY0NhY2hlRE9NW3F1ZXJ5
XSA9ICgocGFydHMubGVuZ3RoIDwgMikgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpZiBub3QgYSBjb21wb3VuZCBxdWVyeSAoZS5nLiwgIi5mb28sIC5iYXIiKSwgY2FjaGUg
YW5kIHJldHVybiBhIGRpc3BhdGNoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0U3RlcFF1ZXJ5RnVuYyhxdWVyeSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpZiBpdCAqaXMqIGEgY29tcGxleCBxdWVyeSwgYnJlYWsgaXQgdXAgaW50byBpdHMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3RpdHVlbnQgcGFydHMgYW5kIHJl
dHVybiBhIGRpc3BhdGNoZXIgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG1lcmdlIHRoZSBwYXJ0cyB3aGVuIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbihyb290KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcGluZGV4ID0gMCwgLy8gYXZvaWQgYXJyYXkgYWxsb2MgZm9yIGV2ZXJ5IGlu
dm9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoKHRw
ID0gcGFydHNbcGluZGV4KytdKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KGdldFN0ZXBRdWVyeUZ1bmModHApKHJvb3Qp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIF96aXBJZHggPSAwOworCisgICAg
ICAgIC8vIE5PVEU6CisgICAgICAgIC8vICAgICAgICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIE1v
byBpbnNwaXJlZCwgYnV0IG91ciBvd24gaW1wbCB0byBkZWFsIGNvcnJlY3RseQorICAgICAgICAv
LyAgICAgICAgICAgICAgd2l0aCBYTUwgaW4gSUUKKyAgICAgICAgdmFyIF9ub2RlVUlEID0gZC5p
c0lFID8gZnVuY3Rpb24obm9kZSl7CisgICAgICAgICAgICAgICAgaWYoY2FzZVNlbnNpdGl2ZSl7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUwgZG9jcyBkb24ndCBoYXZlIHVuaXF1ZUlE
IG9uIHRoZWlyIG5vZGVzCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5vZGUuZ2V0
QXR0cmlidXRlKCJfdWlkIikgfHwgbm9kZS5zZXRBdHRyaWJ1dGUoIl91aWQiLCArK196aXBJZHgp
IHx8IF96aXBJZHgpOworCisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZS51bmlxdWVJRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
IH0gOgorICAgICAgICBmdW5jdGlvbihub2RlKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gKG5v
ZGUuX3VpZCB8fCAobm9kZS5fdWlkID0gKytfemlwSWR4KSk7CisgICAgICAgIH07CisKKyAgICAg
ICAgLy8gZGV0ZXJtaW5lIGlmIGEgbm9kZSBpbiBpcyB1bmlxdWUgaW4gYSAiYmFnIi4gSW4gdGhp
cyBjYXNlIHdlIGRvbid0IHdhbnQKKyAgICAgICAgLy8gdG8gZmxhdHRlbiBhIGxpc3Qgb2YgdW5p
cXVlIGl0ZW1zLCBidXQgcmF0aGVyIGp1c3QgdGVsbCBpZiB0aGUgaXRlbSBpbgorICAgICAgICAv
LyBxdWVzdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBiYWcuIE5vcm1hbGx5IHdlJ2QganVzdCB1c2Ug
aGFzaCBsb29rdXAgdG8gZG8KKyAgICAgICAgLy8gdGhpcyBmb3IgdXMgYnV0IElFJ3MgRE9NIGlz
IGJ1c3RlZCBzbyB3ZSBjYW4ndCByZWFsbHkgY291bnQgb24gdGhhdC4gT24KKyAgICAgICAgLy8g
dGhlIHVwc2lkZSwgaXQgZ2l2ZXMgdXMgYSBidWlsdCBpbiB1bmlxdWUgSUQgZnVuY3Rpb24uCisg
ICAgICAgIHZhciBfaXNVbmlxdWUgPSBmdW5jdGlvbihub2RlLCBiYWcpeworICAgICAgICAgICAg
ICAgIGlmKCFiYWcpeyByZXR1cm4gMTsgfQorICAgICAgICAgICAgICAgIHZhciBpZCA9IF9ub2Rl
VUlEKG5vZGUpOworICAgICAgICAgICAgICAgIGlmKCFiYWdbaWRdKXsgcmV0dXJuIGJhZ1tpZF0g
PSAxOyB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH07CisKKyAgICAgICAg
Ly8gYXR0ZW1wdCB0byBlZmZpY2llbnRseSBkZXRlcm1pbmUgaWYgYW4gaXRlbSBpbiBhIGxpc3Qg
aXMgYSBkdXBlLAorICAgICAgICAvLyByZXR1cm5pbmcgYSBsaXN0IG9mICJ1bmlxdWVzIiwgaG9w
ZWZ1bGx5IGluIGRvdWNtZW50IG9yZGVyCisgICAgICAgIHZhciBfemlwSWR4TmFtZSA9ICJfemlw
SWR4IjsKKyAgICAgICAgdmFyIF96aXAgPSBmdW5jdGlvbihhcnIpeworICAgICAgICAgICAgICAg
IGlmKGFyciAmJiBhcnIubm96aXApeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChx
bGMuX3dyYXApID8gcWxjLl93cmFwKGFycikgOiBhcnI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vIHZhciByZXQgPSBuZXcgZC5fTm9kZUxpc3RDdG9yKCk7CisgICAgICAg
ICAgICAgICAgdmFyIHJldCA9IG5ldyBxbGMoKTsKKyAgICAgICAgICAgICAgICBpZighYXJyIHx8
ICFhcnIubGVuZ3RoKXsgcmV0dXJuIHJldDsgfQorICAgICAgICAgICAgICAgIGlmKGFyclswXSl7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaChhcnJbMF0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZihhcnIubGVuZ3RoIDwgMil7IHJldHVybiByZXQ7IH0K
KworICAgICAgICAgICAgICAgIF96aXBJZHgrKzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyB3ZSBoYXZlIHRvIGZvcmsgaGVyZSBmb3IgSUUgYW5kIFhNTCBkb2NzIGJlY2F1
c2Ugd2UgY2FuJ3Qgc2V0CisgICAgICAgICAgICAgICAgLy8gZXhwYW5kb3Mgb24gdGhlaXIgbm9k
ZXMgKGFwcGFyZW50bHkpLiAqc2lnaCoKKyAgICAgICAgICAgICAgICBpZihkLmlzSUUgJiYgY2Fz
ZVNlbnNpdGl2ZSl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ppZHggPSBfemlwSWR4
KyIiOworICAgICAgICAgICAgICAgICAgICAgICAgYXJyWzBdLnNldEF0dHJpYnV0ZShfemlwSWR4
TmFtZSwgc3ppZHgpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciB4ID0gMSwgdGU7
IHRlID0gYXJyW3hdOyB4KyspeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihh
cnJbeF0uZ2V0QXR0cmlidXRlKF96aXBJZHhOYW1lKSAhPSBzemlkeCl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2godGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlLnNl
dEF0dHJpYnV0ZShfemlwSWR4TmFtZSwgc3ppZHgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH1lbHNlIGlmKGQuaXNJRSAmJiBhcnIuY29tbWVudFN0cmlwKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yKHZhciB4ID0gMSwgdGU7IHRlID0gYXJyW3hdOyB4KyspeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKF9pc0VsZW1lbnQodGUpKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXsgLyog
c3F1ZWxjaCAqLyB9CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZihhcnJbMF0peyBhcnJbMF1bX3ppcElkeE5hbWVdID0gX3ppcElkeDsgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yKHZhciB4ID0gMSwgdGU7IHRlID0gYXJyW3hdOyB4Kyspewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhcnJbeF1bX3ppcElkeE5hbWVdICE9
IF96aXBJZHgpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5w
dXNoKHRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZVtfemlwSWR4TmFtZV0gPSBfemlwSWR4OworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OworICAgICAgICB9OworCisgICAgICAgIC8vIHRoZSBtYWluIGV4ZWN1dG9yCisgICAg
ICAgIGQucXVlcnkgPSBmdW5jdGlvbigvKlN0cmluZyovIHF1ZXJ5LCAvKlN0cmluZ3xET01Ob2Rl
PyovIHJvb3QpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgUmV0dXJucyBub2RlcyB3aGljaCBtYXRjaCB0aGUgZ2l2ZW4g
Q1NTMyBzZWxlY3Rvciwgc2VhcmNoaW5nIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBlbnRpcmUgZG9jdW1lbnQgYnkgZGVmYXVsdCBidXQgb3B0aW9uYWxseSB0YWtpbmcgYSBu
b2RlIHRvIHNjb3BlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSBzZWFyY2gg
YnkuIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgZG9qby5Ob2RlTGlzdC4KKyAgICAgICAgICAgICAg
ICAvLyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBk
b2pvLnF1ZXJ5KCkgaXMgdGhlIHN3aXNzIGFybXkga25pZmUgb2YgRE9NIG5vZGUgbWFuaXB1bGF0
aW9uIGluCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIERvam8uIE11Y2ggbGlrZSBQ
cm90b3R5cGUncyAiJCQiIChibGluZy1ibGluZykgZnVuY3Rpb24gb3IgSlF1ZXJ5J3MKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgIiQiIGZ1bmN0aW9uLCBkb2pvLnF1ZXJ5IHByb3Zp
ZGVzIHJvYnVzdCwgaGlnaC1wZXJmb3JtYW5jZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBDU1MtYmFzZWQgbm9kZSBzZWxlY3RvciBzdXBwb3J0IHdpdGggdGhlIG9wdGlvbiBvZiBz
Y29waW5nIHNlYXJjaGVzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRvIGEgcGFy
dGljdWxhciBzdWItdHJlZSBvZiBhIGRvY3VtZW50LgorICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFN1cHBvcnRlZCBTZWxlY3RvcnM6CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9qby5xdWVyeSgpIHN1
cHBvcnRzIGEgcmljaCBzZXQgb2YgQ1NTMyBzZWxlY3RvcnMsIGluY2x1ZGluZzoKKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICogY2xh
c3Mgc2VsZWN0b3JzIChlLmcuLCBgLmZvb2ApCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgKiBub2RlIHR5cGUgc2VsZWN0b3JzIGxpa2UgYHNwYW5gCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgKiBgIGAgZGVzY2VuZGFudCBzZWxlY3RvcnMK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAqIGA+YCBjaGlsZCBlbGVt
ZW50IHNlbGVjdG9ycworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICog
YCNmb29gIHN0eWxlIElEIHNlbGVjdG9ycworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICogYCpgIHVuaXZlcnNhbCBzZWxlY3RvcgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICogYH5gLCB0aGUgcHJlY2VkZWQtYnkgc2libGluZyBzZWxlY3Rv
cgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICogYCtgLCB0aGUgaW1t
ZWRpYXRlbHkgcHJlY2VkZWQtYnkgc2libGluZyBzZWxlY3RvcgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICogYXR0cmlidXRlIHF1ZXJpZXM6CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAqIGBbZm9vXWAgYXR0cmlidXRlIHBy
ZXNlbmNlIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAqIGBbZm9vPSdiYXInXWAgYXR0cmlidXRlIHZhbHVlIGV4YWN0IG1hdGNoCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAqIGBbZm9vfj0nYmFy
J11gIGF0dHJpYnV0ZSB2YWx1ZSBsaXN0IGl0ZW0gbWF0Y2gKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICogYFtmb29ePSdiYXInXWAgYXR0cmlidXRlIHN0
YXJ0IG1hdGNoCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAqIGBbZm9vJD0nYmFyJ11gIGF0dHJpYnV0ZSBlbmQgbWF0Y2gKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICogYFtmb28qPSdiYXInXWAgYXR0cmlidXRl
IHN1YnN0cmluZyBtYXRjaAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
ICogYDpmaXJzdC1jaGlsZGAsIGA6bGFzdC1jaGlsZGAsIGFuZCBgOm9ubHktY2hpbGRgIHBvc2l0
aW9uYWwgc2VsZWN0b3JzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
KiBgOmVtcHR5YCBjb250ZW50IGVtdHB5IHNlbGVjdG9yCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgICAgICAgICAgKiBgOmNoZWNrZWRgIHBzZXVkbyBzZWxlY3RvcgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICogYDpudGgtY2hpbGQobilgLCBgOm50aC1j
aGlsZCgybisxKWAgc3R5bGUgcG9zaXRpb25hbCBjYWxjdWxhdGlvbnMKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAqIGA6bnRoLWNoaWxkKGV2ZW4pYCwgYDpudGgtY2hp
bGQob2RkKWAgcG9zaXRpb25hbCBzZWxlY3RvcnMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAqIGA6bm90KC4uLilgIG5lZ2F0aW9uIHBzZXVkbyBzZWxlY3RvcnMKKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBbnkgbGVn
YWwgY29tYmluYXRpb24gb2YgdGhlc2Ugc2VsZWN0b3JzIHdpbGwgd29yayB3aXRoCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGBkb2pvLnF1ZXJ5KClgLCBpbmNsdWRpbmcgY29tcG91
bmQgc2VsZWN0b3JzICgiLCIgZGVsaW1pdGVkKS4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgVmVyeSBjb21wbGV4IGFuZCB1c2VmdWwgc2VhcmNoZXMgY2FuIGJlIGNvbnN0cnVjdGVk
IHdpdGggdGhpcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBwYWxldHRlIG9mIHNl
bGVjdG9ycyBhbmQgd2hlbiBjb21iaW5lZCB3aXRoIGZ1bmN0aW9ucyBmb3IKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgbWFuaXB1bGF0aW9uIHByZXNlbnRlZCBieSBkb2pvLk5vZGVM
aXN0LCBtYW55IHR5cGVzIG9mIERPTQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBt
YW5pcHVsYXRpb24gb3BlcmF0aW9ucyBiZWNvbWUgdmVyeSBzdHJhaWdodGZvcndhcmQuCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVW5zdXBwb3J0
ZWQgU2VsZWN0b3JzOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgV2hpbGUgZG9qby5xdWVyeSBoYW5kbGVzIG1hbnkgQ1NTMyBzZWxlY3RvcnMsIHNv
bWUgZmFsbCBvdXRzaWRlIG9mCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdoYXQn
cyByZWFzb25hYmxlIGZvciBhIHByb2dyYW1tYXRpYyBub2RlIHF1ZXJ5aW5nIGVuZ2luZSB0bwor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBoYW5kbGUuIEN1cnJlbnRseSB1bnN1cHBv
cnRlZCBzZWxlY3RvcnMgaW5jbHVkZToKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICogbmFtZXNwYWNlLWRpZmZlcmVudGlhdGVkIHNl
bGVjdG9ycyBvZiBhbnkgZm9ybQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICogYWxsIGA6OmAgcHNlZHVvLWVsZW1lbnQgc2VsZWN0b3JzCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgKiBjZXJ0YWluIHBzZWR1by1zZWxlY3RvcnMgd2hpY2gg
ZG9uJ3QgZ2V0IGEgbG90IG9mIGRheS10by1kYXkgdXNlOgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgKiBgOnJvb3RgLCBgOmxhbmcoKWAsIGA6dGFyZ2V0
YCwgYDpmb2N1c2AKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAqIGFs
bCB2aXN1YWwgYW5kIHN0YXRlIHNlbGVjdG9yczoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICogYDpyb290YCwgYDphY3RpdmVgLCBgOmhvdmVyYCwgYDp2
aXNpc3RlZGAsIGA6bGlua2AsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGA6ZW5hYmxlZGAsIGA6ZGlzYWJsZWRgCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgKiBgOiotb2YtdHlwZWAgcHNldWRvIHNlbGVjdG9ycworICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGRvam8ucXVl
cnkgYW5kIFhNTCBEb2N1bWVudHM6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgYGRvam8ucXVlcnlgIChhcyBvZiBkb2pvIDEuMikgc3Vw
cG9ydHMgc2VhcmNoaW5nIFhNTCBkb2N1bWVudHMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgaW4gYSBjYXNlLXNlbnNpdGl2ZSBtYW5uZXIuIElmIGFuIEhUTUwgZG9jdW1lbnQgaXMg
c2VydmVkIHdpdGgKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBkb2N0eXBlIHRo
YXQgZm9yY2VzIGNhc2Utc2Vuc2l0aXZpdHkgKGUuZy4sIFhIVE1MIDEuMQorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBTdHJpY3QpLCBkb2pvLnF1ZXJ5KCkgd2lsbCBkZXRlY3QgdGhp
cyBhbmQgImRvIHRoZSByaWdodAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGlu
ZyIuIENhc2Ugc2Vuc2l0aXZpdHkgaXMgZGVwZW5kZW50IHVwb24gdGhlIGRvY3VtZW50IGJlaW5n
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNlYXJjaGVkIGFuZCBub3QgdGhlIHF1
ZXJ5IHVzZWQuIEl0IGlzIHRoZXJlZm9yZSBwb3NzaWJsZSB0bworICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB1c2UgY2FzZS1zZW5zaXRpdmUgcXVlcmllcyBvbiBzdHJpY3Qgc3ViLWRv
Y3VtZW50cyAoaWZyYW1lcywKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZXRjLikg
b3IgWE1MIGRvY3VtZW50cyB3aGlsZSBzdGlsbCBhc3N1bWluZyBjYXNlLWluc2Vuc2l0aXZpdHkK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZm9yIGEgaG9zdC9yb290IGRvY3VtZW50
LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIE5v
bi1zZWxlY3RvciBRdWVyaWVzOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBJZiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIFN0cmluZyBpcyBwYXNzZWQg
Zm9yIHRoZSBxdWVyeSwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYGRvam8ucXVl
cnlgIHdpbGwgcmV0dXJuIGEgbmV3IGBkb2pvLk5vZGVMaXN0YCBpbnN0YW5jZQorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBjb25zdHJ1Y3RlZCBmcm9tIHRoYXQgcGFyYW1ldGVyIGFs
b25lIGFuZCBhbGwgZnVydGhlcgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBwcm9j
ZXNzaW5nIHdpbGwgc3RvcC4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBoYXZlIGEgcmVmZXJlbmNl
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRvIGEgbm9kZSBvciBOb2RlTGlzdCwg
eW91IGNhbiBxdWlja2x5IGNvbnN0cnVjdCBhIG5ldyBOb2RlTGlzdAorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBmcm9tIHRoZSBvcmlnaW5hbCBieSBjYWxsaW5nIGBkb2pvLnF1ZXJ5
KG5vZGUpYCBvcgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBgZG9qby5xdWVyeShs
aXN0KWAuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIHF1ZXJ5
OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGUgQ1NTMyBleHByZXNzaW9uIHRv
IG1hdGNoIGFnYWluc3QuIEZvciBkZXRhaWxzIG9uIHRoZSBzeW50YXggb2YKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgQ1NTMyBzZWxlY3RvcnMsIHNlZSA8aHR0cDovL3d3dy53My5v
cmcvVFIvY3NzMy1zZWxlY3RvcnMvI3NlbGVjdG9ycz4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IHJvb3Q6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEEgRE9NTm9kZSAob3Igbm9k
ZSBpZCkgdG8gc2NvcGUgdGhlIHNlYXJjaCBmcm9tLiBPcHRpb25hbC4KKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHJldHVybnM6IGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgQW4gaW5zdGFuY2Ugb2YgYGRvam8uTm9kZUxpc3RgLiBNYW55IG1ldGhvZHMgYXJl
IGF2YWlsYWJsZSBvbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBOb2RlTGlzdHMg
Zm9yIHNlYXJjaGluZywgaXRlcmF0aW5nLCBtYW5pcHVsYXRpbmcsIGFuZCBoYW5kbGluZworICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBldmVudHMgb24gdGhlIG1hdGNoZWQgbm9kZXMg
aW4gdGhlIHJldHVybmVkIGxpc3QuCisgICAgICAgICAgICAgICAgLy8gICAgICBleGFtcGxlOgor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzZWFyY2ggdGhlIGVudGlyZSBkb2N1bWVu
dCBmb3IgZWxlbWVudHMgd2l0aCB0aGUgY2xhc3MgImZvbyI6CisgICAgICAgICAgICAgICAgLy8g
ICAgICB8ICAgICAgIGRvam8ucXVlcnkoIi5mb28iKTsKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgdGhlc2UgZWxlbWVudHMgd2lsbCBtYXRjaDoKKyAgICAgICAgICAgICAgICAvLyAg
ICAgIHwgICAgICAgPHNwYW4gY2xhc3M9ImZvbyI+PC9zcGFuPgorICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICA8c3BhbiBjbGFzcz0iZm9vIGJhciI+PC9zcGFuPgorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICA8cCBjbGFzcz0idGh1ZCBmb28iPjwvcD4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNl
YXJjaCB0aGUgZW50aXJlIGRvY3VtZW50IGZvciBlbGVtZW50cyB3aXRoIHRoZSBjbGFzc2VzICJm
b28iICphbmQqICJiYXIiOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnF1
ZXJ5KCIuZm9vLmJhciIpOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGVzZSBl
bGVtZW50cyB3aWxsIG1hdGNoOgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICA8c3Bh
biBjbGFzcz0iZm9vIGJhciI+PC9zcGFuPgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICB3aGlsZSB0aGVzZSB3aWxsIG5vdDoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
PHNwYW4gY2xhc3M9ImZvbyI+PC9zcGFuPgorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICA8cCBjbGFzcz0idGh1ZCBmb28iPjwvcD4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1w
bGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZpbmQgYDxzcGFuPmAgZWxlbWVu
dHMgd2hpY2ggYXJlIGRlc2NlbmRhbnRzIG9mIHBhcmFncmFwaHMgYW5kCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHdoaWNoIGhhdmUgYSAiaGlnaGxpZ2h0ZWQiIGNsYXNzOgorICAg
ICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5KCJwIHNwYW4uaGlnaGxpZ2h0
ZWQiKTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIGlubmVybW9zdCBzcGFu
IGluIHRoaXMgZnJhZ21lbnQgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAg
ICAgPHAgY2xhc3M9ImZvbyI+CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAg
ICAgPHNwYW4+Li4uCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICA8c3BhbiBjbGFzcz0iaGlnaGxpZ2h0ZWQgZm9vIGJhciI+Li4uPC9zcGFuPgorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgPC9wPgorICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgc2V0IGFuICJvZGQiIGNsYXNzIG9uIGFs
bCBvZGQgdGFibGUgcm93cyBpbnNpZGUgb2YgdGhlIHRhYmxlCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGAjdGFidWxhcl9kYXRhYCwgdXNpbmcgdGhlIGA+YCAoZGlyZWN0IGNoaWxk
KSBzZWxlY3RvciB0byBhdm9pZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhZmZl
Y3RpbmcgYW55IG5lc3RlZCB0YWJsZXM6CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAg
IGRvam8ucXVlcnkoIiN0YWJ1bGFyX2RhdGEgPiB0Ym9keSA+IHRyOm50aC1jaGlsZChvZGQpIiku
YWRkQ2xhc3MoIm9kZCIpOworICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIHRoZSBj
bGFzcyAiZXJyb3IiIGZyb20gdGhlIGRvY3VtZW50CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGFuZCBzdG9yZSB0aGVtIGluIGEgbGlzdDoKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgdmFyIGVycm9ycyA9IGRvam8ucXVlcnkoIi5lcnJvciIpLm9ycGhhbigpOworICAg
ICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgYWRkIGFuIG9uY2xpY2sgaGFuZGxlciB0byBldmVyeSBzdWJtaXQgYnV0dG9uIGluIHRo
ZSBkb2N1bWVudAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB3aGljaCBjYXVzZXMg
dGhlIGZvcm0gdG8gYmUgc2VudCB2aWEgQWpheCBpbnN0ZWFkOgorICAgICAgICAgICAgICAgIC8v
ICAgICAgfCAgICAgICBkb2pvLnF1ZXJ5KCJpbnB1dFt0eXBlPSdzdWJtaXQnXSIpLm9uY2xpY2so
ZnVuY3Rpb24oZSl7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgZG9q
by5zdG9wRXZlbnQoZSk7IC8vIHByZXZlbnQgc2VuZGluZyB0aGUgZm9ybQorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIHZhciBidG4gPSBlLnRhcmdldDsKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBkb2pvLnhoclBvc3QoeworICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgZm9ybTogYnRuLmZvcm0sCisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBsb2FkOiBmdW5j
dGlvbihkYXRhKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgZm9ybSB3aXRoIHRoZSByZXNwb25zZQorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGl2
ID0gZG9qby5kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvam8ucGxhY2UoZGl2LCBidG4uZm9y
bSwgImFmdGVyIik7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSBkYXRhOworICAgICAgICAgICAgICAgIC8vICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2pvLnN0eWxlKGJ0bi5mb3JtLCAi
ZGlzcGxheSIsICJub25lIik7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
Ly9TZXQgbGlzdCBjb25zdHJ1Y3RvciB0byBkZXNpcmVkIHZhbHVlLiBUaGlzIGNhbiBjaGFuZ2UK
KyAgICAgICAgICAgICAgICAvL2JldHdlZW4gY2FsbHMsIHNvIGFsd2F5cyByZS1hc3NpZ24gaGVy
ZS4KKyAgICAgICAgICAgICAgICBxbGMgPSBkLl9Ob2RlTGlzdEN0b3I7CisKKyAgICAgICAgICAg
ICAgICBpZighcXVlcnkpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBxbGMo
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZihxdWVyeS5jb25zdHJ1
Y3RvciA9PSBxbGMpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZih0eXBlb2YgcXVlcnkgIT0gInN0cmlu
ZyIpeyAvLyBpbmxpbmUnZCB0eXBlIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IHFsYyhxdWVyeSk7IC8vIGRvam8uTm9kZUxpc3QKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QgPT0gInN0cmluZyIpeyAvLyBpbmxpbmUnZCB0
eXBlIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICByb290ID0gZC5ieUlkKHJvb3QpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXJvb3QpeyByZXR1cm4gbmV3IHFsYygpOyB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcm9vdCA9IHJvb3R8fGdldERvYygp
OworICAgICAgICAgICAgICAgIHZhciBvZCA9IHJvb3Qub3duZXJEb2N1bWVudHx8cm9vdC5kb2N1
bWVudEVsZW1lbnQ7CisKKyAgICAgICAgICAgICAgICAvLyB0aHJvdyB0aGUgYmlnIGNhc2Ugc2Vu
c2l0aXZpdHkgc3dpdGNoCisKKyAgICAgICAgICAgICAgICAvLyBOT1RFOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBPcGVyYSBpbiBYSFRNTCBtb2RlIGRvZXNuJ3QgZGV0ZWN0IGNh
c2Utc2Vuc2l0aXZpdHkgY29ycmVjdGx5CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IGFuZCBpdCdzIG5vdCBjbGVhciB0aGF0IHRoZXJlJ3MgYW55IHdheSB0byB0ZXN0IGZvciBpdAor
ICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSAocm9vdC5jb250ZW50VHlwZSAmJiByb290
LmNvbnRlbnRUeXBlPT0iYXBwbGljYXRpb24veG1sIikgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkLmlzT3BlcmEgJiYgKHJvb3QuZG9jdHlwZSB8
fCBvZC50b1N0cmluZygpID09ICJbb2JqZWN0IFhNTERvY3VtZW50XSIpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCEhb2QpICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZC5pc0lFID8gb2QueG1s
IDogKHJvb3QueG1sVmVyc2lvbnx8b2QueG1sVmVyc2lvbikpOworCisgICAgICAgICAgICAgICAg
Ly8gTk9URToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYWRkaW5nICJ0cnVlIiBh
cyB0aGUgMm5kIGFyZ3VtZW50IHRvIGdldFF1ZXJ5RnVuYyBpcyB1c2VmdWwgZm9yCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIHRlc3RpbmcgdGhlIERPTSBicmFuY2ggd2l0aG91dCB3
b3JyeWluZyBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYmVoYXZp
b3IvcGVyZm9ybWFuY2Ugb2YgdGhlIFFTQSBicmFuY2guCisgICAgICAgICAgICAgICAgdmFyIHIg
PSBnZXRRdWVyeUZ1bmMocXVlcnkpKHJvb3QpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhp
cyBicmFuY2ggV1JUICM4MDc0IGFuZCAjODA3NQorICAgICAgICAgICAgICAgIGlmKHIgJiYgci5u
b3ppcCAmJiAhcWxjLl93cmFwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gX3ppcChyKTsgLy8gZG9q
by5Ob2RlTGlzdAorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gYWRkIGlu
ZnJhc3RydWN0dXJlIGZvciBwb3N0LWZpbHRlcmluZyBwc2V1ZG9zLCBhbGEgOmxhc3QKKyAgICAg
ICAgZC5xdWVyeS5wc2V1ZG9zID0gcHNldWRvczsKKworICAgICAgICAvLyBmdW5jdGlvbiBmb3Ig
ZmlsdGVyaW5nIGEgTm9kZUxpc3QgYmFzZWQgb24gYSBzZWxlY3Rvciwgb3B0aW1pemVkIGZvciBz
aW1wbGUgc2VsZWN0b3JzCisgICAgICAgIGQuX2ZpbHRlclF1ZXJ5UmVzdWx0ID0gZnVuY3Rpb24o
LypOb2RlTGlzdCovIG5vZGVMaXN0LCAvKlN0cmluZyovIGZpbHRlciwgLypTdHJpbmd8RE9NTm9k
ZT8qLyByb290KXsKKyAgICAgICAgICAgICAgICB2YXIgdG1wTm9kZUxpc3QgPSBuZXcgZC5fTm9k
ZUxpc3RDdG9yKCksCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IGdldFF1ZXJ5UGFy
dHMoZmlsdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckZ1bmMgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydHMubGVuZ3RoID09IDEgJiYgIS9bXlx3I1wu
XS8udGVzdChmaWx0ZXIpKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNp
bXBsZUZpbHRlckZ1bmMocGFydHNbMF0pIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBkb2pvLnF1ZXJ5KGZpbHRlciwgcm9vdCkuaW5kZXhPZihub2RlKSAhPSAtMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBmb3Io
dmFyIHggPSAwLCB0ZTsgdGUgPSBub2RlTGlzdFt4XTsgeCsrKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKGZpbHRlckZ1bmModGUpKXsgdG1wTm9kZUxpc3QucHVzaCh0ZSk7IH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRtcE5vZGVMaXN0OworICAgICAg
ICB9Cit9Oy8vZW5kIGRlZmluZVF1ZXJ5CisKK3ZhciBkZWZpbmVBY21lPSBmdW5jdGlvbigpewor
ICAgICAgICAvLyBhIHNlbGYtc3VmZmljaWVudCBxdWVyeSBpbXBsCisgICAgICAgIGFjbWUgPSB7
CisgICAgICAgICAgICAgICAgdHJpbTogZnVuY3Rpb24oLypTdHJpbmcqLyBzdHIpeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB0cmltcyB3aGl0ZXNwYWNlcyBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHN0
cmluZworICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15ccysvLCAn
Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSBzdHIubGVuZ3RoIC0gMTsg
aSA+PSAwOyBpLS0peworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvXFMvLnRl
c3Qoc3RyLmNoYXJBdChpKSkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSArIDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RyOyAgICAgLy8gU3RyaW5nCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICBmb3JFYWNoOiBmdW5jdGlvbigvKlN0cmluZyovIGFyciwgLypGdW5jdGlvbiovIGNhbGxi
YWNrLCAvKk9iamVjdD8qLyB0aGlzT2JqZWN0KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBh
biBpdGVyYXRvciBmdW5jdGlvbiB0aGF0IHBhc3NlcyBpdGVtcywgaW5kZXhlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbmQgdGhlIGFycmF5IHRvIGEgY2FsbGJh
Y2sKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFhcnIgfHwgIWFyci5sZW5ndGgpeyByZXR1
cm47IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wLGw9YXJyLmxlbmd0aDsg
aTxsOyArK2kpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxs
KHRoaXNPYmplY3R8fHdpbmRvdywgYXJyW2ldLCBpLCBhcnIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgYnlJZDogZnVuY3Rp
b24oaWQsIGRvYyl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBmdW5jdGlvbiB0aGF0IHJl
dHVybiBhbiBlbGVtZW50IGJ5IElELCBidXQgYWxzbworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIGFjY2VwdHMgbm9kZXMgc2FmZWx5CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZih0eXBlb2YgaWQgPT0gInN0cmluZyIpeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKGRvY3x8ZG9jdW1lbnQpLmdldEVsZW1lbnRCeUlkKGlkKTsgLy8gRG9t
Tm9kZQorICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpZDsgLy8gRG9tTm9kZQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQg
ZG9jdW1lbnQgdG8gc2VhcmNoCisgICAgICAgICAgICAgICAgZG9jOiBkb2N1bWVudCwKKyAgICAg
ICAgICAgICAgICAvLyB0aGUgY29uc3RydWN0b3IgZm9yIG5vZGUgbGlzdCBvYmplY3RzIHJldHVy
bmVkIGZyb20gcXVlcnkoKQorICAgICAgICAgICAgICAgIE5vZGVMaXN0OiBBcnJheQorICAgICAg
ICB9OworCisgICAgICAgIC8vIGRlZmluZSBhY21lLmlzSUUsIGFjbWUuaXNTYWZhcmksIGFjbWUu
aXNPcGVyYSwgZXRjLgorICAgICAgICB2YXIgbiA9IG5hdmlnYXRvcjsKKyAgICAgICAgdmFyIGR1
YSA9IG4udXNlckFnZW50OworICAgICAgICB2YXIgZGF2ID0gbi5hcHBWZXJzaW9uOworICAgICAg
ICB2YXIgdHYgPSBwYXJzZUZsb2F0KGRhdik7CisgICAgICAgIGFjbWUuaXNPcGVyYSA9IChkdWEu
aW5kZXhPZigiT3BlcmEiKSA+PSAwKSA/IHR2OiB1bmRlZmluZWQ7CisgICAgICAgIGFjbWUuaXNL
aHRtbCA9IChkYXYuaW5kZXhPZigiS29ucXVlcm9yIikgPj0gMCkgPyB0diA6IHVuZGVmaW5lZDsK
KyAgICAgICAgYWNtZS5pc1dlYktpdCA9IHBhcnNlRmxvYXQoZHVhLnNwbGl0KCJXZWJLaXQvIilb
MV0pIHx8IHVuZGVmaW5lZDsKKyAgICAgICAgYWNtZS5pc0Nocm9tZSA9IHBhcnNlRmxvYXQoZHVh
LnNwbGl0KCJDaHJvbWUvIilbMV0pIHx8IHVuZGVmaW5lZDsKKyAgICAgICAgdmFyIGluZGV4ID0g
TWF0aC5tYXgoZGF2LmluZGV4T2YoIldlYktpdCIpLCBkYXYuaW5kZXhPZigiU2FmYXJpIiksIDAp
OworICAgICAgICBpZihpbmRleCAmJiAhYWNtZS5pc0Nocm9tZSl7CisgICAgICAgICAgICAgICAg
YWNtZS5pc1NhZmFyaSA9IHBhcnNlRmxvYXQoZGF2LnNwbGl0KCJWZXJzaW9uLyIpWzFdKTsKKyAg
ICAgICAgICAgICAgICBpZighYWNtZS5pc1NhZmFyaSB8fCBwYXJzZUZsb2F0KGRhdi5zdWJzdHIo
aW5kZXggKyA3KSkgPD0gNDE5LjMpeworICAgICAgICAgICAgICAgICAgICAgICAgYWNtZS5pc1Nh
ZmFyaSA9IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGRvY3Vt
ZW50LmFsbCAmJiAhYWNtZS5pc09wZXJhKXsKKyAgICAgICAgICAgICAgICBhY21lLmlzSUUgPSBw
YXJzZUZsb2F0KGRhdi5zcGxpdCgiTVNJRSAiKVsxXSkgfHwgdW5kZWZpbmVkOworICAgICAgICB9
CisKKyAgICAgICAgQXJyYXkuX3dyYXAgPSBmdW5jdGlvbihhcnIpeyByZXR1cm4gYXJyOyB9Owor
ICByZXR1cm4gYWNtZTsKK307CisKKyAgICAgICAgLy9wcmVmZXJzIHF1ZXJ5UG9ydGFiaWxpdHks
IHRoZW4gYWNtZSwgdGhlbiBkb2pvCisgICAgICAgIGlmKHRoaXNbImRvam8iXSl7CisgICAgICAg
ICAgICAgICAgZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLnF1ZXJ5Iik7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmaW5lUXVlcnkodGhpc1si
cXVlcnlQb3J0YWJpbGl0eSJdfHx0aGlzWyJhY21lIl18fGRvam8pOworICAgICAgICB9ZWxzZXsK
KyAgICAgICAgICAgICAgICBkZWZpbmVRdWVyeSh0aGlzWyJxdWVyeVBvcnRhYmlsaXR5Il18fHRo
aXNbImFjbWUiXXx8ZGVmaW5lQWNtZSgpKTsKKyAgICAgICAgfQorCit9KSgpOworCisvKgorKi8K
KworfQorCitpZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UueGhyIl0peyAvL19oYXNS
ZXNvdXJjZSBjaGVja3MgYWRkZWQgYnkgYnVpbGQuIERvIG5vdCB1c2UgX2hhc1Jlc291cmNlIGRp
cmVjdGx5IGluIHlvdXIgY29kZS4KK2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLnhociJd
ID0gdHJ1ZTsKK2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS54aHIiKTsKKworCisKKworCisKKyhm
dW5jdGlvbigpeworICAgICAgICB2YXIgX2QgPSBkb2pvLCBjZmcgPSBfZC5jb25maWc7CisKKyAg
ICAgICAgZnVuY3Rpb24gc2V0VmFsdWUoLypPYmplY3QqL29iaiwgLypTdHJpbmcqL25hbWUsIC8q
U3RyaW5nKi92YWx1ZSl7CisgICAgICAgICAgICAgICAgLy9zdW1tYXJ5OgorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBGb3IgdGhlIG5hbWVkIHByb3BlcnR5IGluIG9iamVjdCwgc2V0
IHRoZSB2YWx1ZS4gSWYgYSB2YWx1ZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBh
bHJlYWR5IGV4aXN0cyBhbmQgaXQgaXMgYSBzdHJpbmcsIGNvbnZlcnQgdGhlIHZhbHVlIHRvIGJl
IGFuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFycmF5IG9mIHZhbHVlcy4KKwor
ICAgICAgICAgICAgICAgIC8vU2tpcCBpdCBpZiB0aGVyZSBpcyBubyB2YWx1ZQorICAgICAgICAg
ICAgICAgIGlmKHZhbHVlID09PSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gb2JqW25h
bWVdOworICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB2YWwgPT0gInN0cmluZyIpeyAvLyBpbmxp
bmUnZCB0eXBlIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICBvYmpbbmFtZV0gPSBbdmFs
LCB2YWx1ZV07CisgICAgICAgICAgICAgICAgfWVsc2UgaWYoX2QuaXNBcnJheSh2YWwpKXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbC5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9
ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ialtuYW1lXSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG9qby5maWVsZFRvT2Jq
ZWN0ID0gZnVuY3Rpb24oLypET01Ob2RlfHxTdHJpbmcqLyBpbnB1dE5vZGUpeworICAgICAgICAg
ICAgICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFNlcmlh
bGl6ZSBhIGZvcm0gZmllbGQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGEgZm9ybSBmaWVsZCBh
cworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhcyBhIHN0cmluZyBvciBhbiBhcnJh
eSBvZiBzdHJpbmdzLiBEaXNhYmxlZCBmb3JtIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGFuZCB1bmNoZWNrZWQgcmFkaW8gYW5kIGNoZWNrYm94ZXMgYXJlIHNraXBw
ZWQuIE11bHRpLXNlbGVjdAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBlbGVtZW50
cyBhcmUgcmV0dXJuZWQgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4KKyAgICAgICAgICAg
ICAgICB2YXIgcmV0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IF9kLmJ5SWQo
aW5wdXROb2RlKTsKKyAgICAgICAgICAgICAgICBpZihpdGVtKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBfaW4gPSBpdGVtLm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dHlwZSA9IChpdGVtLnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoX2luICYmIHR5cGUgJiYgIWl0ZW0uZGlzYWJsZWQpeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZih0eXBlID09ICJyYWRpbyIgfHwgdHlwZSA9PSAiY2hlY2tib3gi
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmNoZWNr
ZWQpeyByZXQgPSBpdGVtLnZhbHVlOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH1lbHNlIGlmKGl0ZW0ubXVsdGlwbGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9kLnF1ZXJ5KCJvcHRpb24iLCBpdGVtKS5mb3JFYWNoKGZ1bmN0aW9uKG9wdCl7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihvcHQuc2VsZWN0
ZWQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXQucHVzaChvcHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBpdGVtLnZhbHVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7IC8vIE9iamVjdAor
ICAgICAgICB9OworCisgICAgICAgIGRvam8uZm9ybVRvT2JqZWN0ID0gZnVuY3Rpb24oLypET01O
b2RlfHxTdHJpbmcqLyBmb3JtTm9kZSl7CisgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgU2VyaWFsaXplIGEgZm9ybSBub2RlIHRvIGEg
SmF2YVNjcmlwdCBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gZGVzY3JpcHRpb246CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFJldHVybnMgdGhlIHZhbHVlcyBlbmNvZGVkIGlu
IGFuIEhUTUwgZm9ybSBhcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBzdHJpbmcg
cHJvcGVydGllcyBpbiBhbiBvYmplY3Qgd2hpY2ggaXQgdGhlbiByZXR1cm5zLiBEaXNhYmxlZCBm
b3JtCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGVsZW1lbnRzLCBidXR0b25zLCBh
bmQgb3RoZXIgbm9uLXZhbHVlIGZvcm0gZWxlbWVudHMgYXJlIHNraXBwZWQuCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIE11bHRpLXNlbGVjdCBlbGVtZW50cyBhcmUgcmV0dXJuZWQg
YXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRo
aXMgZm9ybToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICA8Zm9ybSBp
ZD0idGVzdF9mb3JtIj4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJibGFoIiB2YWx1ZT0iYmxhaCI+CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0i
dGV4dCIgbmFtZT0ibm9fdmFsdWUiIHZhbHVlPSJibGFoIiBkaXNhYmxlZD4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24i
IG5hbWU9Im5vX3ZhbHVlMiIgdmFsdWU9ImJsYWgiPgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgPHNlbGVjdCB0eXBlPSJzZWxlY3QiIG11bHRpcGxlIG5h
bWU9Im11bHRpIiBzaXplPSI1Ij4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYmxhaCI+YmxhaDwvb3B0aW9uPgor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICA8
b3B0aW9uIHZhbHVlPSJ0aHVkIiBzZWxlY3RlZD50aHVkPC9vcHRpb24+CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9
InRob25rIiBzZWxlY3RlZD50aG9uazwvb3B0aW9uPgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHwgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHlpZWxkcyB0aGlzIG9iamVjdCBzdHJ1Y3R1cmUgYXMgdGhl
IHJlc3VsdCBvZiBhIGNhbGwgdG8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZm9y
bVRvT2JqZWN0KCk6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgfCAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICBibGFoOiAiYmxhaCIsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICBtdWx0aTogWworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAidGh1ZCIsCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICJ0aG9uayIKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgfCAgICAgICB9OworCisgICAgICAgICAgICAgICAgdmFyIHJldCA9IHt9Owor
ICAgICAgICAgICAgICAgIHZhciBleGNsdWRlID0gImZpbGV8c3VibWl0fGltYWdlfHJlc2V0fGJ1
dHRvbnwiOworICAgICAgICAgICAgICAgIF9kLmZvckVhY2goZG9qby5ieUlkKGZvcm1Ob2RlKS5l
bGVtZW50cywgZnVuY3Rpb24oaXRlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2lu
ID0gaXRlbS5uYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSAoaXRlbS50
eXBlfHwiIikudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKF9pbiAm
JiB0eXBlICYmIGV4Y2x1ZGUuaW5kZXhPZih0eXBlKSA9PSAtMSAmJiAhaXRlbS5kaXNhYmxlZCl7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKHJldCwgX2luLCBfZC5m
aWVsZFRvT2JqZWN0KGl0ZW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYo
dHlwZSA9PSAiaW1hZ2UiKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXRbX2luKyIueCJdID0gcmV0W19pbisiLnkiXSA9IHJldFtfaW5dLnggPSByZXRbX2luXS55
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQ7IC8vIE9iamVjdAorICAgICAgICB9OworCisgICAgICAgIGRvam8ub2JqZWN0VG9RdWVyeSA9
IGZ1bmN0aW9uKC8qT2JqZWN0Ki8gbWFwKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1h
cnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRha2VzIGEgbmFtZS92YWx1ZSBt
YXBwaW5nIG9iamVjdCBhbmQgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgYSBVUkwtZW5jb2RlZCB2ZXJzaW9uIG9mIHRoYXQgb2Jq
ZWN0LgorICAgICAgICAgICAgICAgIC8vICAgICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgdGhpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICBibGFoOiAiYmxhaCIsCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBtdWx0aTogWworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAidGh1ZCIsCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICJ0aG9uayIK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIF0KKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgfCAgICAgICB9OworICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gICAgICB5aWVsZHMgdGhlIGZvbGxvd2luZyBxdWVyeSBzdHJp
bmc6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
ImJsYWg9YmxhaCZtdWx0aT10aHVkJm11bHRpPXRob25rIgorCisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IGVuY29kZUFzY2lpISEKKyAgICAgICAgICAgICAgICB2
YXIgZW5jID0gZW5jb2RlVVJJQ29tcG9uZW50OworICAgICAgICAgICAgICAgIHZhciBwYWlycyA9
IFtdOworICAgICAgICAgICAgICAgIHZhciBiYWNrc3RvcCA9IHt9OworICAgICAgICAgICAgICAg
IGZvcih2YXIgbmFtZSBpbiBtYXApeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVl
ID0gbWFwW25hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gYmFja3N0
b3BbbmFtZV0peworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXNzaWduID0g
ZW5jKG5hbWUpICsgIj0iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihfZC5p
c0FycmF5KHZhbHVlKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yKHZhciBpPTA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKyl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlycy5wdXNoKGFzc2lnbiArIGVuYyh2YWx1
ZVtpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFpcnMucHVzaChhc3NpZ24gKyBlbmModmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcGFpcnMuam9pbigiJiIp
OyAvLyBTdHJpbmcKKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLmZvcm1Ub1F1ZXJ5ID0gZnVu
Y3Rpb24oLypET01Ob2RlfHxTdHJpbmcqLyBmb3JtTm9kZSl7CisgICAgICAgICAgICAgICAgLy8g
c3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmV0dXJucyBhIFVSTC1l
bmNvZGVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZvcm0gcGFzc2VkIGFzIGVpdGhlciBhCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5vZGUgb3Igc3RyaW5nIElEIGlkZW50aWZ5
aW5nIHRoZSBmb3JtIHRvIHNlcmlhbGl6ZQorICAgICAgICAgICAgICAgIHJldHVybiBfZC5vYmpl
Y3RUb1F1ZXJ5KF9kLmZvcm1Ub09iamVjdChmb3JtTm9kZSkpOyAvLyBTdHJpbmcKKyAgICAgICAg
fTsKKworICAgICAgICBkb2pvLmZvcm1Ub0pzb24gPSBmdW5jdGlvbigvKkRPTU5vZGV8fFN0cmlu
ZyovIGZvcm1Ob2RlLCAvKkJvb2xlYW4/Ki9wcmV0dHlQcmludCl7CisgICAgICAgICAgICAgICAg
Ly8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQ3JlYXRlIGEgc2Vy
aWFsaXplZCBKU09OIHN0cmluZyBmcm9tIGEgZm9ybSBub2RlIG9yIHN0cmluZworICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBJRCBpZGVudGlmeWluZyB0aGUgZm9ybSB0byBzZXJpYWxp
emUKKyAgICAgICAgICAgICAgICByZXR1cm4gX2QudG9Kc29uKF9kLmZvcm1Ub09iamVjdChmb3Jt
Tm9kZSksIHByZXR0eVByaW50KTsgLy8gU3RyaW5nCisgICAgICAgIH07CisKKyAgICAgICAgZG9q
by5xdWVyeVRvT2JqZWN0ID0gZnVuY3Rpb24oLypTdHJpbmcqLyBzdHIpeworICAgICAgICAgICAg
ICAgIC8vIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIENyZWF0ZSBh
biBvYmplY3QgcmVwcmVzZW50aW5nIGEgZGUtc2VyaWFsaXplZCBxdWVyeSBzZWN0aW9uIG9mIGEK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVVJMLiBRdWVyeSBrZXlzIHdpdGggbXVs
dGlwbGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheS4KKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIFRoaXMgc3RyaW5nOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gICAgICB8ICAgICAgICAgICAgICAgImZvbz1iYXImZm9vPWJheiZ0aGluZ2VyPSUyMHNwYWNl
cyUyMD1ibGFoJnpvbms9YmxhcmcmIgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIHJlc3VsdHMgaW4gdGhpcyBvYmplY3Qgc3RydWN0dXJlOgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgZm9vOiBb
ICJiYXIiLCAiYmF6IiBdLAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgdGhpbmdlcjogIiBzcGFjZXMgPWJsYWgiLAorICAgICAgICAgICAgICAgIC8vICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgem9uazogImJsYXJnIgorICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBOb3RlIHRoYXQgc3BhY2VzIGFuZCBvdGhlciB1cmxlbmNv
ZGVkIGVudGl0aWVzIGFyZSBjb3JyZWN0bHkKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgaGFuZGxlZC4KKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgZ3JhYiB0
aGUgVVJMIHN0cmluZyBpZiB3ZSdyZSBub3QgcGFzc2VkIG9uZT8KKyAgICAgICAgICAgICAgICB2
YXIgcmV0ID0ge307CisgICAgICAgICAgICAgICAgdmFyIHFwID0gc3RyLnNwbGl0KCImIik7Cisg
ICAgICAgICAgICAgICAgdmFyIGRlYyA9IGRlY29kZVVSSUNvbXBvbmVudDsKKyAgICAgICAgICAg
ICAgICBfZC5mb3JFYWNoKHFwLCBmdW5jdGlvbihpdGVtKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmKGl0ZW0ubGVuZ3RoKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHBhcnRzID0gaXRlbS5zcGxpdCgiPSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbmFtZSA9IGRlYyhwYXJ0cy5zaGlmdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHZhbCA9IGRlYyhwYXJ0cy5qb2luKCI9IikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcmV0W25hbWVdID09ICJzdHJpbmciKXsgLy8gaW5s
aW5lJ2QgdHlwZSBjaGVjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldFtuYW1lXSA9IFtyZXRbbmFtZV1dOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoX2QuaXNBcnJheShyZXRb
bmFtZV0pKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRbbmFt
ZV0ucHVzaCh2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRbbmFtZV0gPSB2YWw7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OyAvLyBP
YmplY3QKKyAgICAgICAgfTsKKworICAgICAgICAvLyBuZWVkIHRvIGJsb2NrIGFzeW5jIGNhbGxi
YWNrcyBmcm9tIHNuYXRjaGluZyB0aGlzIHRocmVhZCBhcyB0aGUgcmVzdWx0CisgICAgICAgIC8v
IG9mIGFuIGFzeW5jIGNhbGxiYWNrIG1pZ2h0IGNhbGwgYW5vdGhlciBzeW5jIFhIUiwgdGhpcyBo
YW5ncyBraHRtbCBmb3JldmVyCisgICAgICAgIC8vIG11c3QgY2hlY2tlZCBieSB3YXRjaEluRmxp
Z2h0KCkKKworICAgICAgICBkb2pvLl9ibG9ja0FzeW5jID0gZmFsc2U7CisKKyAgICAgICAgLy8g
TU9XOiByZW1vdmUgZG9qby5fY29udGVudEhhbmRsZXJzIGFsaWFzIGluIDIuMAorICAgICAgICB2
YXIgaGFuZGxlcnMgPSBfZC5fY29udGVudEhhbmRsZXJzID0gZG9qby5jb250ZW50SGFuZGxlcnMg
PSB7CisgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgQSBtYXAgb2YgYXZhaWxibGUgWEhSIHRyYW5zcG9ydCBoYW5kbGUgdHlwZXMuIE5h
bWUgbWF0Y2hlcyB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYGhhbmRsZUFz
YCBhdHRyaWJ1dGUgcGFzc2VkIHRvIFhIUiBjYWxscy4KKyAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBBIG1hcCBvZiBhdmFpbGJsZSBYSFIgdHJhbnNwb3J0IGhhbmRsZSB0eXBlcy4gTmFtZSBt
YXRjaGVzIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBgaGFuZGxlQXNgIGF0
dHJpYnV0ZSBwYXNzZWQgdG8gWEhSIGNhbGxzLiBFYWNoIGNvbnRlbnRIYW5kbGVyIGlzCisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNhbGxlZCwgcGFzc2luZyB0aGUgeGhyIG9iamVj
dCBmb3IgbWFuaXB1bGF0aW9uLiBUaGUgcmV0dXJuIHZhbHVlCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIGZyb20gdGhlIGNvbnRlbnRIYW5kbGVyIHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBgbG9hZGAgb3IgYGhhbmRsZWAKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZnVu
Y3Rpb25zIGRlZmluZWQgaW4gdGhlIG9yaWdpbmFsIHhociBjYWxsLgorICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgLy8gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgQ3JlYXRpbmcgYSBjdXN0b20gY29udGVudC1oYW5kbGVyOgorICAgICAgICAgICAg
ICAgIC8vICAgICAgfCAgICAgICBkb2pvLmNvbnRlbnRIYW5kbGVycy5tYWtlQ2FwcyA9IGZ1bmN0
aW9uKHhocil7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgcmV0dXJu
IHhoci5yZXNwb25zZVRleHQudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgfQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAvLyBhbmQgbGF0ZXI6
CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8ueGhyR2V0KHsKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB1cmw6ImZvby50eHQiLAorICAgICAgICAg
ICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIGhhbmRsZUFzOiJtYWtlQ2FwcyIsCisgICAg
ICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24oZGF0YSl7
IC8qIGRhdGEgaXMgYSB0b1VwcGVyIHZlcnNpb24gb2YgZm9vLnR4dCAqLyB9CisgICAgICAgICAg
ICAgICAgLy8gICAgICB8ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rp
b24oeGhyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6IEEgY29udGVudEhh
bmRsZXIgd2hpY2ggc2ltcGx5IHJldHVybnMgdGhlIHBsYWludGV4dCByZXNwb25zZSBkYXRhCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIGpzb246IGZ1bmN0aW9uKHhocil7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OiBBIGNvbnRlbnRIYW5kbGVyIHdoaWNoIHJldHVy
bnMgYSBKYXZhU2NyaXB0IG9iamVjdCBjcmVhdGVkIGZyb20gdGhlIHJlc3BvbnNlIGRhdGEKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZC5mcm9tSnNvbih4aHIucmVzcG9uc2VUZXh0
IHx8IG51bGwpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImpzb24tY29t
bWVudC1maWx0ZXJlZCI6IGZ1bmN0aW9uKHhocil7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzdW1tYXJ5OiBBIGNvbnRlbnRIYW5kbGVyIHdoaWNoIGV4cGVjdHMgY29tbWVudC1maWx0ZXJl
ZCBKU09OLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVzY3JpcHRpb246CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQSBjb250ZW50SGFuZGxlciB3aGljaCBl
eHBlY3RzIGNvbW1lbnQtZmlsdGVyZWQgSlNPTi4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB0aGUganNvbi1jb21tZW50LWZpbHRlcmVkIG9wdGlvbiB3YXMgaW1wbGVt
ZW50ZWQgdG8gcHJldmVudAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
ICJKYXZhU2NyaXB0IEhpamFja2luZyIsIGJ1dCBpdCBpcyBsZXNzIHNlY3VyZSB0aGFuIHN0YW5k
YXJkIEpTT04uIFVzZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHN0
YW5kYXJkIEpTT04gaW5zdGVhZC4gSlNPTiBwcmVmaXhpbmcgY2FuIGJlIHVzZWQgdG8gc3VidmVy
dCBoaWphY2tpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIFdpbGwgdGhyb3cgYSBub3RpY2Ugc3VnZ2VzdGluZyB0
byB1c2UgYXBwbGljYXRpb24vanNvbiBtaW1ldHlwZSwgYXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBqc29uLWNvbW1lbnRpbmcgY2FuIGludHJvZHVjZSBzZWN1cml0
eSBpc3N1ZXMuIFRvIGRlY3JlYXNlIHRoZSBjaGFuY2VzIG9mIGhpamFja2luZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB1c2UgdGhlIHN0YW5kYXJkIGBqc29uYCBj
b250ZW50SGFuZGxlciwgYW5kIHByZWZpeCB5b3VyICJKU09OIiB3aXRoOiB7fSYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICAgIHVzZSBkakNvbmZpZy51c2VDb21tZW50ZWRKc29uID0gdHJ1ZSB0byB0dXJuIG9mZiB0aGUg
bm90aWNlCisgICAgICAgICAgICAgICAgICAgICAgICBpZighZG9qby5jb25maWcudXNlQ29tbWVu
dGVkSnNvbil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybigi
Q29uc2lkZXIgdXNpbmcgdGhlIHN0YW5kYXJkIG1pbWV0eXBlOmFwcGxpY2F0aW9uL2pzb24uIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBqc29uLWNvbW1lbnRp
bmcgY2FuIGludHJvZHVjZSBzZWN1cml0eSBpc3N1ZXMuIFRvIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgIiBkZWNyZWFzZSB0aGUgY2hhbmNlcyBvZiBoaWphY2tp
bmcsIHVzZSB0aGUgc3RhbmRhcmQgdGhlICdqc29uJyBoYW5kbGVyIGFuZCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgcHJlZml4IHlvdXIganNvbiB3aXRoOiB7
fSYmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiVXNlIGRq
Q29uZmlnLnVzZUNvbW1lbnRlZEpzb249dHJ1ZSB0byB0dXJuIG9mZiB0aGlzIG1lc3NhZ2UuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IHhoci5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
Y1N0YXJ0SWR4ID0gdmFsdWUuaW5kZXhPZigiXC8qIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgY0VuZElkeCA9IHZhbHVlLmxhc3RJbmRleE9mKCIqXC8iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKGNTdGFydElkeCA9PSAtMSB8fCBjRW5kSWR4ID09IC0xKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJKU09OIHdhcyBub3QgY29t
bWVudCBmaWx0ZXJlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIF9kLmZyb21Kc29uKHZhbHVlLnN1YnN0cmluZyhjU3RhcnRJZHgr
MiwgY0VuZElkeCkpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgamF2YXNj
cmlwdDogZnVuY3Rpb24oeGhyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6
IEEgY29udGVudEhhbmRsZXIgd2hpY2ggZXZhbHVhdGVzIHRoZSByZXNwb25zZSBkYXRhLCBleHBl
Y3RpbmcgaXQgdG8gYmUgdmFsaWQgSmF2YVNjcmlwdAorCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogdHJ5IE1veiBhbmQgSUUgc3BlY2lmaWMgZXZhbCB2YXJpYW50cz8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZC5ldmFsKHhoci5yZXNwb25zZVRleHQpOworICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeG1sOiBmdW5jdGlvbih4aHIpeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeTogQSBjb250ZW50SGFuZGxlciByZXR1cm5p
bmcgYW4gWE1MIERvY3VtZW50IHBhcnNlZCBmcm9tIHRoZSByZXNwb25zZSBkYXRhCisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0geGhyLnJlc3BvbnNlWE1MOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoX2QuaXNJRSAmJiAoIXJl
c3VsdCB8fCAhcmVzdWx0LmRvY3VtZW50RWxlbWVudCkpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvL1dBUk5JTkc6IHRoaXMgYnJhbmNoIHVzZWQgYnkgdGhlIHhtbCBoYW5kbGlu
ZyBpbiBkb2pvLmlvLmlmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9z
byBiZSBzdXJlIHRvIHRlc3QgZG9qby5pby5pZnJhbWUgaWYgbWFraW5nIGNoYW5nZXMgYmVsb3cu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtcyA9IGZ1bmN0aW9uKG4peyBy
ZXR1cm4gIk1TWE1MIiArIG4gKyAiLkRPTURvY3VtZW50IjsgfTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGRwID0gWyJNaWNyb3NvZnQuWE1MRE9NIiwgbXMoNiksIG1zKDQp
LCBtcygzKSwgbXMoMildOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC5zb21l
KGRwLCBmdW5jdGlvbihwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZG9tID0gbmV3IEFjdGl2ZVhPYmplY3QocCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb20uYXN5bmMgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5sb2FkWE1MKHhoci5yZXNwb25z
ZVRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gZG9tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1j
YXRjaChlKXsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgLy8gRE9NRG9jdW1lbnQKKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJqc29uLWNvbW1lbnQtb3B0aW9uYWwiOiBm
dW5jdGlvbih4aHIpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeTogQSBjb250
ZW50SGFuZGxlciB3aGljaCBjaGVja3MgdGhlIHByZXNlbmNlIG9mIGNvbW1lbnQtZmlsdGVyZWQg
SlNPTiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbHRlcm5h
dGVzIGJldHdlZW4gdGhlIGBqc29uYCBhbmQgYGpzb24tY29tbWVudC1maWx0ZXJlZGAgY29udGVu
dEhhbmRsZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYoeGhyLnJlc3BvbnNlVGV4dCAm
JiAvXltee1xbXSpcL1wqLy50ZXN0KHhoci5yZXNwb25zZVRleHQpKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzWyJqc29uLWNvbW1lbnQtZmlsdGVyZWQi
XSh4aHIpOworICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1sianNvbiJdKHhocik7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAg
IC8qPT09PT0KKyAgICAgICAgZG9qby5fX0lvQXJncyA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAg
ICAgICAgLy8gICAgICB1cmw6IFN0cmluZworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBVUkwgdG8gc2VydmVyIGVuZHBvaW50LgorICAgICAgICAgICAgICAgIC8vICAgICAgY29udGVu
dDogT2JqZWN0PworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBDb250YWlucyBwcm9w
ZXJ0aWVzIHdpdGggc3RyaW5nIHZhbHVlcy4gVGhlc2UKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgcHJvcGVydGllcyB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbmFtZTE9dmFsdWUyIGFu
ZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBwYXNzZWQgaW4gdGhlIHJlcXVlc3Qu
CisgICAgICAgICAgICAgICAgLy8gICAgICB0aW1lb3V0OiBJbnRlZ2VyPworICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBNaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHJlc3BvbnNl
LiBJZiB0aGlzIHRpbWUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcGFzc2VzLCB0
aGUgdGhlbiBlcnJvciBjYWxsYmFja3MgYXJlIGNhbGxlZC4KKyAgICAgICAgICAgICAgICAvLyAg
ICAgIGZvcm06IERPTU5vZGU/CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIERPTSBu
b2RlIGZvciBhIGZvcm0uIFVzZWQgdG8gZXh0cmFjdCB0aGUgZm9ybSB2YWx1ZXMKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgYW5kIHNlbmQgdG8gdGhlIHNlcnZlci4KKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHByZXZlbnRDYWNoZTogQm9vbGVhbj8KKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgRGVmYXVsdCBpcyBmYWxzZS4gSWYgdHJ1ZSwgdGhlbiBhCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgICJkb2pvLnByZXZlbnRDYWNoZSIgcGFyYW1ldGVyIGlz
IHNlbnQgaW4gdGhlIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgd2l0
aCBhIHZhbHVlIHRoYXQgY2hhbmdlcyB3aXRoIGVhY2ggcmVxdWVzdAorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICAodGltZXN0YW1wKS4gVXNlZnVsIG9ubHkgd2l0aCBHRVQtdHlwZSBy
ZXF1ZXN0cy4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGhhbmRsZUFzOiBTdHJpbmc/CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEFjY2VwdGFibGUgdmFsdWVzIGRlcGVuZCBvbiB0
aGUgdHlwZSBvZiBJTworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0cmFuc3BvcnQg
KHNlZSBzcGVjaWZpYyBJTyBjYWxscyBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisgICAgICAgICAg
ICAgICAgLy8gICAgICByYXdCb2R5OiBTdHJpbmc/CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIFNldHMgdGhlIHJhdyBib2R5IGZvciBhbiBIVFRQIHJlcXVlc3QuIElmIHRoaXMgaXMg
dXNlZCwgdGhlbiB0aGUgY29udGVudAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBw
cm9wZXJ0eSBpcyBpZ25vcmVkLiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgZm9yIEhUVFAgbWV0aG9k
cyB0aGF0IGhhdmUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYSBib2R5IHRvIHRo
ZWlyIHJlcXVlc3RzLCBsaWtlIFBVVCBvciBQT1NULiBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2Vk
IGluc3RlYWQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb2YgcG9zdERhdGEgYW5k
IHB1dERhdGEgZm9yIGRvam8ucmF3WGhyUG9zdCBhbmQgZG9qby5yYXdYaHJQdXQgcmVzcGVjdGl2
ZWx5LgorICAgICAgICAgICAgICAgIC8vICAgICAgaW9QdWJsaXNoOiBCb29sZWFuPworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBTZXQgdGhpcyBleHBsaWNpdGx5IHRvIGZhbHNlIHRv
IHByZXZlbnQgcHVibGlzaGluZyBvZiB0b3BpY3MgcmVsYXRlZCB0bworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBJTyBvcGVyYXRpb25zLiBPdGhlcndpc2UsIGlmIGRqQ29uZmlnLmlv
UHVibGlzaCBpcyBzZXQgdG8gdHJ1ZSwgdG9waWNzCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIHdpbGwgYmUgcHVibGlzaGVkIHZpYSBkb2pvLnB1Ymxpc2ggZm9yIGRpZmZlcmVudCBw
aGFzZXMgb2YgYW4gSU8gb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBTZWUgZG9qby5fX0lvUHVibGlzaCBmb3IgYSBsaXN0IG9mIHRvcGljcyB0aGF0IGFyZSBwdWJs
aXNoZWQuCisgICAgICAgICAgICAgICAgLy8gICAgICBsb2FkOiBGdW5jdGlvbj8KKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGNhbGxlZCBvbiBhIHN1Y2Nlc3NmdWwgSFRUUCByZXNwb25z
ZSBjb2RlLgorICAgICAgICAgICAgICAgIC8vICAgICAgZXJyb3I6IEZ1bmN0aW9uPworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgZmFpbHMgZHVl
IHRvIGEgbmV0d29yayBvciBzZXJ2ZXIgZXJyb3IsIHRoZSB1cmwKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgaXMgaW52YWxpZCwgZXRjLiBJdCB3aWxsIGFsc28gYmUgY2FsbGVkIGlm
IHRoZSBsb2FkIG9yIGhhbmRsZSBjYWxsYmFjayB0aHJvd3MgYW4KKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgZXhjZXB0aW9uLCB1bmxlc3MgZGpDb25maWcuZGVidWdBdEFsbENvc3Rz
IGlzIHRydWUuICBUaGlzIGFsbG93cyBkZXBsb3llZCBhcHBsaWNhdGlvbnMKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgdG8gY29udGludWUgdG8gcnVuIGV2ZW4gd2hlbiBhIGxvZ2lj
IGVycm9yIGhhcHBlbnMgaW4gdGhlIGNhbGxiYWNrLCB3aGlsZSBtYWtpbmcKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgaXQgZWFzaWVyIHRvIHRyb3VibGVzaG9vdCB3aGlsZSBpbiBk
ZWJ1ZyBtb2RlLgorICAgICAgICAgICAgICAgIC8vICAgICAgaGFuZGxlOiBGdW5jdGlvbj8KKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHJl
cXVlc3QsIHdoZXRoZXIgb3Igbm90IGFuIGVycm9yIG9jY3Vycy4KKyAgICAgICAgICAgICAgICB0
aGlzLnVybCA9IHVybDsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50Owor
ICAgICAgICAgICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7CisgICAgICAgICAgICAgICAg
dGhpcy5mb3JtID0gZm9ybTsKKyAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRDYWNoZSA9IHBy
ZXZlbnRDYWNoZTsKKyAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFzID0gaGFuZGxlQXM7Cisg
ICAgICAgICAgICAgICAgdGhpcy5pb1B1Ymxpc2ggPSBpb1B1Ymxpc2g7CisgICAgICAgICAgICAg
ICAgdGhpcy5sb2FkID0gZnVuY3Rpb24ocmVzcG9uc2UsIGlvQXJncyl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBpb0FyZ3M6IGRvam8uX19Jb0NhbGxiYWNrQXJncworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFByb3ZpZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNwb25z
ZTogT2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIHJl
c3BvbnNlIGluIHRoZSBmb3JtYXQgYXMgZGVmaW5lZCB3aXRoIGhhbmRsZUFzLgorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZnVuY3Rpb24ocmVzcG9uc2Us
IGlvQXJncyl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpb0FyZ3M6IGRvam8uX19Jb0Nh
bGxiYWNrQXJncworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFByb3Zp
ZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyByZXNwb25zZTogT2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgVGhlIHJlc3BvbnNlIGluIHRoZSBmb3JtYXQgYXMgZGVmaW5lZCB3
aXRoIGhhbmRsZUFzLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmhh
bmRsZSA9IGZ1bmN0aW9uKGxvYWRPckVycm9yLCByZXNwb25zZSwgaW9BcmdzKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGxvYWRPckVycm9yOiBTdHJpbmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBQcm92aWRlcyBhIHN0cmluZyB0aGF0IHRlbGxzIHlvdSB3
aGV0aGVyIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICB3YXMgY2FsbGVkIGJlY2F1c2Ugb2Ygc3VjY2VzcyAobG9hZCkgb3IgZmFpbHVyZSAoZXJy
b3IpLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzcG9uc2U6IE9iamVjdAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSByZXNwb25zZSBpbiB0aGUgZm9y
bWF0IGFzIGRlZmluZWQgd2l0aCBoYW5kbGVBcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGlvQXJnczogZG9qby5fX0lvQ2FsbGJhY2tBcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgUHJvdmlkZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUg
cmVxdWVzdC4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgPT09PT0qLwor
CisgICAgICAgIC8qPT09PT0KKyAgICAgICAgZG9qby5fX0lvQ2FsbGJhY2tBcmdzID0gZnVuY3Rp
b24oYXJncywgeGhyLCB1cmwsIHF1ZXJ5LCBoYW5kbGVBcywgaWQsIGNhbkRlbGV0ZSwganNvbil7
CisgICAgICAgICAgICAgICAgLy8gICAgICBhcmdzOiBPYmplY3QKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIG9iamVjdCBhcmd1bWVudCB0byB0aGUgSU8gY2Fs
bC4KKyAgICAgICAgICAgICAgICAvLyAgICAgIHhocjogWE1MSHR0cFJlcXVlc3QKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgRm9yIFhNTEh0dHBSZXF1ZXN0IGNhbGxzIG9ubHksIHRo
ZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdCBvYmplY3Qg
dGhhdCB3YXMgdXNlZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHJl
cXVlc3QuCisgICAgICAgICAgICAgICAgLy8gICAgICB1cmw6IFN0cmluZworICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBUaGUgZmluYWwgVVJMIHVzZWQgZm9yIHRoZSBjYWxsLiBNYW55
IHRpbWVzIGl0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdpbGwgYmUgZGlmZmVy
ZW50IHRoYW4gdGhlIG9yaWdpbmFsIGFyZ3MudXJsCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIHZhbHVlLgorICAgICAgICAgICAgICAgIC8vICAgICAgcXVlcnk6IFN0cmluZworICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBGb3Igbm9uLUdFVCByZXF1ZXN0cywgdGhlCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIG5hbWUxPXZhbHVlMSZuYW1lMj12YWx1ZTIg
cGFyYW1ldGVycyBzZW50IHVwIGluCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRo
ZSByZXF1ZXN0LgorICAgICAgICAgICAgICAgIC8vICAgICAgaGFuZGxlQXM6IFN0cmluZworICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGUgZmluYWwgaW5kaWNhdG9yIG9uIGhvdyB0
aGUgcmVzcG9uc2Ugd2lsbCBiZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBoYW5k
bGVkLgorICAgICAgICAgICAgICAgIC8vICAgICAgaWQ6IFN0cmluZworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBGb3IgZG9qby5pby5zY3JpcHQgY2FsbHMgb25seSwgdGhlIGludGVy
bmFsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNjcmlwdCBJRCB1c2VkIGZvciB0
aGUgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGNhbkRlbGV0ZTogQm9vbGVhbgor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBGb3IgZG9qby5pby5zY3JpcHQgY2FsbHMg
b25seSwgaW5kaWNhdGVzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHdoZXRoZXIg
dGhlIHNjcmlwdCB0YWcgdGhhdCByZXByZXNlbnRzIHRoZQorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICByZXF1ZXN0IGNhbiBiZSBkZWxldGVkIGFmdGVyIGNhbGxiYWNrcyBoYXZlCisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGJlZW4gY2FsbGVkLiBVc2VkIGludGVybmFs
bHkgdG8ga25vdyB3aGVuCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNsZWFudXAg
Y2FuIGhhcHBlbiBvbiBKU09OUC10eXBlIHJlcXVlc3RzLgorICAgICAgICAgICAgICAgIC8vICAg
ICAganNvbjogT2JqZWN0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEZvciBkb2pv
LmlvLnNjcmlwdCBjYWxscyBvbmx5OiBob2xkcyB0aGUgSlNPTgorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICByZXNwb25zZSBmb3IgSlNPTlAtdHlwZSByZXF1ZXN0cy4gVXNlZAorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpbnRlcm5hbGx5IHRvIGhvbGQgb24gdG8gdGhl
IEpTT04gcmVzcG9uc2VzLgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBZb3Ugc2hv
dWxkIG5vdCBuZWVkIHRvIGFjY2VzcyBpdCBkaXJlY3RseSAtLQorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICB0aGUgc2FtZSBvYmplY3Qgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgc3Vj
Y2VzcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBjYWxsYmFja3MgZGlyZWN0bHku
CisgICAgICAgICAgICAgICAgdGhpcy5hcmdzID0gYXJnczsKKyAgICAgICAgICAgICAgICB0aGlz
LnhociA9IHhocjsKKyAgICAgICAgICAgICAgICB0aGlzLnVybCA9IHVybDsKKyAgICAgICAgICAg
ICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7CisgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBcyA9
IGhhbmRsZUFzOworICAgICAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgICAgICAg
ICB0aGlzLmNhbkRlbGV0ZSA9IGNhbkRlbGV0ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmpzb24g
PSBqc29uOworICAgICAgICB9CisgICAgICAgID09PT09Ki8KKworCisgICAgICAgIC8qPT09PT0K
KyAgICAgICAgZG9qby5fX0lvUHVibGlzaCA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAg
Ly8gICAgICBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBUaGlzIGlz
IGEgbGlzdCBvZiBJTyB0b3BpY3MgdGhhdCBjYW4gYmUgcHVibGlzaGVkCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIGlmIGRqQ29uZmlnLmlvUHVibGlzaCBpcyBzZXQgdG8gdHJ1ZS4g
SU8gdG9waWNzIGNhbiBiZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBwdWJsaXNo
ZWQgZm9yIGFueSBJbnB1dC9PdXRwdXQsIG5ldHdvcmsgb3BlcmF0aW9uLiBTbywKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgZG9qby54aHIsIGRvam8uaW8uc2NyaXB0IGFuZCBkb2pv
LmlvLmlmcmFtZSBjYW4gYWxsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRyaWdn
ZXIgdGhlc2UgdG9waWNzIHRvIGJlIHB1Ymxpc2hlZC4KKyAgICAgICAgICAgICAgICAvLyAgICAg
IHN0YXJ0OiBTdHJpbmcKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIi9kb2pvL2lv
L3N0YXJ0IiBpcyBzZW50IHdoZW4gdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIElPCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIHJlcXVlc3RzLCBhbmQgYSBuZXcgSU8gcmVxdWVzdCBp
cyBzdGFydGVkLiBObyBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
YXJlIHBhc3NlZCB3aXRoIHRoaXMgdG9waWMuCisgICAgICAgICAgICAgICAgLy8gICAgICBzZW5k
OiBTdHJpbmcKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIi9kb2pvL2lvL3NlbmQi
IGlzIHNlbnQgd2hlbmV2ZXIgYSBuZXcgSU8gcmVxdWVzdCBpcyBzdGFydGVkLgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBJdCBwYXNzZXMgdGhlIGRvam8uRGVmZXJyZWQgZm9yIHRo
ZSByZXF1ZXN0IHdpdGggdGhlIHRvcGljLgorICAgICAgICAgICAgICAgIC8vICAgICAgbG9hZDog
U3RyaW5nCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICIvZG9qby9pby9sb2FkIiBp
cyBzZW50IHdoZW5ldmVyIGFuIElPIHJlcXVlc3QgaGFzIGxvYWRlZAorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkuIEl0IHBhc3NlcyB0aGUgcmVzcG9uc2UgYW5k
IHRoZSBkb2pvLkRlZmVycmVkCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZvciB0
aGUgcmVxdWVzdCB3aXRoIHRoZSB0b3BpYy4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGVycm9y
OiBTdHJpbmcKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIi9kb2pvL2lvL2Vycm9y
IiBpcyBzZW50IHdoZW5ldmVyIGFuIElPIHJlcXVlc3QgaGFzIGVycm9yZWQuCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIEl0IHBhc3NlcyB0aGUgZXJyb3IgYW5kIHRoZSBkb2pvLkRl
ZmVycmVkCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZvciB0aGUgcmVxdWVzdCB3
aXRoIHRoZSB0b3BpYy4KKyAgICAgICAgICAgICAgICAvLyAgICAgIGRvbmU6IFN0cmluZworICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAiL2Rvam8vaW8vZG9uZSIgaXMgc2VudCB3aGVu
ZXZlciBhbiBJTyByZXF1ZXN0IGhhcyBjb21wbGV0ZWQsCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGVpdGhlciBieSBsb2FkaW5nIG9yIGJ5IGVycm9yaW5nLiBJdCBwYXNzZXMgdGhl
IGVycm9yIGFuZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGUgZG9qby5EZWZl
cnJlZCBmb3IgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgdG9waWMuCisgICAgICAgICAgICAgICAgLy8g
ICAgICBzdG9wOiBTdHJpbmcKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIi9kb2pv
L2lvL3N0b3AiIGlzIHNlbnQgd2hlbiBhbGwgb3V0c3RhbmRpbmcgSU8gcmVxdWVzdHMgaGF2ZQor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBmaW5pc2hlZC4gTm8gYXJndW1lbnRzIGFy
ZSBwYXNzZWQgd2l0aCB0aGlzIHRvcGljLgorICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSAi
L2Rvam8vaW8vc3RhcnQiOworICAgICAgICAgICAgICAgIHRoaXMuc2VuZCA9ICIvZG9qby9pby9z
ZW5kIjsKKyAgICAgICAgICAgICAgICB0aGlzLmxvYWQgPSAiL2Rvam8vaW8vbG9hZCI7CisgICAg
ICAgICAgICAgICAgdGhpcy5lcnJvciA9ICIvZG9qby9pby9lcnJvciI7CisgICAgICAgICAgICAg
ICAgdGhpcy5kb25lID0gIi9kb2pvL2lvL2RvbmUiOworICAgICAgICAgICAgICAgIHRoaXMuc3Rv
cCA9ICIvZG9qby9pby9zdG9wIjsKKyAgICAgICAgfQorICAgICAgICA9PT09PSovCisKKworICAg
ICAgICBkb2pvLl9pb1NldEFyZ3MgPSBmdW5jdGlvbigvKmRvam8uX19Jb0FyZ3MqL2FyZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAvKkZ1bmN0aW9uKi9jYW5jZWxsZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAvKkZ1bmN0aW9uKi9va0hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAvKkZ1bmN0aW9uKi9lcnJIYW5kbGVyKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1
bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHNldHMgdXAgdGhlIERlZmVy
cmVkIGFuZCBpb0FyZ3MgcHJvcGVydHkgb24gdGhlIERlZmVycmVkIHNvIGl0CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGluIGFuIGlvIGNhbGwuCisgICAgICAg
ICAgICAgICAgLy8gICAgICBhcmdzOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBU
aGUgYXJncyBvYmplY3QgcGFzc2VkIGludG8gdGhlIHB1YmxpYyBpbyBjYWxsLiBSZWNvZ25pemVk
IHByb3BlcnRpZXMgb24KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIGFyZ3Mg
b2JqZWN0IGFyZToKKyAgICAgICAgICAgICAgICAvLyAgICAgIGNhbmNlbGxlcjoKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIGNhbmNlbGxlciBmdW5jdGlvbiB1c2VkIGZvciB0
aGUgRGVmZXJyZWQgb2JqZWN0LiBUaGUgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgd2lsbCByZWNlaXZlIG9uZSBhcmd1bWVudCwgdGhlIERlZmVycmVkIG9iamVjdCB0
aGF0IGlzIHJlbGF0ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGNh
bmNlbGxlci4KKyAgICAgICAgICAgICAgICAvLyAgICAgIG9rSGFuZGxlcjoKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgVGhlIGZpcnN0IE9LIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVy
ZWQgd2l0aCBEZWZlcnJlZC4gSXQgaGFzIHRoZSBvcHBvcnR1bml0eQorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICB0byB0cmFuc2Zvcm0gdGhlIE9LIHJlc3BvbnNlLiBJdCB3aWxsIHJl
Y2VpdmUgb25lIGFyZ3VtZW50IC0tIHRoZSBEZWZlcnJlZAorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAg
ICAgICAgIC8vICAgICAgZXJySGFuZGxlcjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgVGhlIGZpcnN0IGVycm9yIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBEZWZlcnJl
ZC4gSXQgaGFzIHRoZSBvcHBvcnR1bml0eQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICB0byBkbyBjbGVhbnVwIG9uIGFuIGVycm9yLiBJdCB3aWxsIHJlY2VpdmUgdHdvIGFyZ3VtZW50
czogZXJyb3IgKHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBFcnJvciBvYmpl
Y3QpIGFuZCBkZmQsIHRoZSBEZWZlcnJlZCBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0
aW9uLgorCisgICAgICAgICAgICAgICAgdmFyIGlvQXJncyA9IHthcmdzOiBhcmdzLCB1cmw6IGFy
Z3MudXJsfTsKKworICAgICAgICAgICAgICAgIC8vR2V0IHZhbHVlcyBmcm9tIGZvcm0gaWYgcmVx
dWVzdGQuCisgICAgICAgICAgICAgICAgdmFyIGZvcm1PYmplY3QgPSBudWxsOworICAgICAgICAg
ICAgICAgIGlmKGFyZ3MuZm9ybSl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybSA9
IF9kLmJ5SWQoYXJncy5mb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vSUUgcmVxdWly
ZXMgZ29pbmcgdGhyb3VnaCBnZXRBdHRyaWJ1dGVOb2RlIGluc3RlYWQgb2YganVzdCBnZXRBdHRy
aWJ1dGUgaW4gc29tZSBmb3JtIGNhc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zbyB1
c2UgaXQgZm9yIGFsbC4gIFNlZSAjMjg0NAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFj
dG5Ob2RlID0gZm9ybS5nZXRBdHRyaWJ1dGVOb2RlKCJhY3Rpb24iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlvQXJncy51cmwgPSBpb0FyZ3MudXJsIHx8IChhY3RuTm9kZSA/IGFjdG5Ob2Rl
LnZhbHVlIDogbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtT2JqZWN0ID0gX2Qu
Zm9ybVRvT2JqZWN0KGZvcm0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIHNldCB1cCB0aGUgcXVlcnkgcGFyYW1zCisgICAgICAgICAgICAgICAgdmFyIG1pQXJncyA9
IFt7fV07CisgICAgICAgIAorICAgICAgICAgICAgICAgIGlmKGZvcm1PYmplY3QpeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcG90ZW50aWFsbHkgb3Zlci1yaWRlIHVybC1wcm92aWRlZCBw
YXJhbXMgdy8gZm9ybSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pQXJncy5wdXNo
KGZvcm1PYmplY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihhcmdz
LmNvbnRlbnQpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3R1ZmYgaW4gY29udGVudCBv
dmVyLXJpZGVzIHdoYXQncyBzZXQgYnkgZm9ybQorICAgICAgICAgICAgICAgICAgICAgICAgbWlB
cmdzLnB1c2goYXJncy5jb250ZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYoYXJncy5wcmV2ZW50Q2FjaGUpeworICAgICAgICAgICAgICAgICAgICAgICAgbWlBcmdz
LnB1c2goeyJkb2pvLnByZXZlbnRDYWNoZSI6IG5ldyBEYXRlKCkudmFsdWVPZigpfSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlvQXJncy5xdWVyeSA9IF9kLm9iamVjdFRv
UXVlcnkoX2QubWl4aW4uYXBwbHkobnVsbCwgbWlBcmdzKSk7CisgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIC4uIGFuZCB0aGUgcmVhbCB3b3JrIG9mIGdldHRpbmcgdGhlIGRlZmVycmVkIGlu
IG9yZGVyLCBldGMuCisgICAgICAgICAgICAgICAgaW9BcmdzLmhhbmRsZUFzID0gYXJncy5oYW5k
bGVBcyB8fCAidGV4dCI7CisgICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgX2QuRGVmZXJyZWQo
Y2FuY2VsbGVyKTsKKyAgICAgICAgICAgICAgICBkLmFkZENhbGxiYWNrcyhva0hhbmRsZXIsIGZ1
bmN0aW9uKGVycm9yKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJIYW5kbGVy
KGVycm9yLCBkKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8vU3Vw
cG9ydCBzcGVjaWZ5aW5nIGxvYWQsIGVycm9yIGFuZCBoYW5kbGUgY2FsbGJhY2sgZnVuY3Rpb25z
IGZyb20gdGhlIGFyZ3MuCisgICAgICAgICAgICAgICAgLy9Gb3IgdGhvc2UgY2FsbGJhY2tzLCB0
aGUgInRoaXMiIG9iamVjdCB3aWxsIGJlIHRoZSBhcmdzIG9iamVjdC4KKyAgICAgICAgICAgICAg
ICAvL1RoZSBjYWxsYmFja3Mgd2lsbCBnZXQgdGhlIGRlZmVycmVkIHJlc3VsdCB2YWx1ZSBhcyB0
aGUKKyAgICAgICAgICAgICAgICAvL2ZpcnN0IGFyZ3VtZW50IGFuZCB0aGUgaW9BcmdzIG9iamVj
dCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHZhciBsZCA9IGFyZ3Mu
bG9hZDsKKyAgICAgICAgICAgICAgICBpZihsZCAmJiBfZC5pc0Z1bmN0aW9uKGxkKSl7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkLmFkZENhbGxiYWNrKGZ1bmN0aW9uKHZhbHVlKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxkLmNhbGwoYXJncywgdmFsdWUsIGlv
QXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3MuZXJyb3I7CisgICAgICAgICAgICAgICAgaWYo
ZXJyICYmIF9kLmlzRnVuY3Rpb24oZXJyKSl7CisgICAgICAgICAgICAgICAgICAgICAgICBkLmFk
ZEVycmJhY2soZnVuY3Rpb24odmFsdWUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyLmNhbGwoYXJncywgdmFsdWUsIGlvQXJncyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGhhbmRs
ZSA9IGFyZ3MuaGFuZGxlOworICAgICAgICAgICAgICAgIGlmKGhhbmRsZSAmJiBfZC5pc0Z1bmN0
aW9uKGhhbmRsZSkpeworICAgICAgICAgICAgICAgICAgICAgICAgZC5hZGRCb3RoKGZ1bmN0aW9u
KHZhbHVlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5j
YWxsKGFyZ3MsIHZhbHVlLCBpb0FyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9QbHVnIGluIHRvcGljIHB1Ymxp
c2hpbmcsIGlmIGRvam8ucHVibGlzaCBpcyBsb2FkZWQuCisgICAgICAgICAgICAgICAgaWYoY2Zn
LmlvUHVibGlzaCAmJiBfZC5wdWJsaXNoICYmIGlvQXJncy5hcmdzLmlvUHVibGlzaCAhPT0gZmFs
c2UpeworICAgICAgICAgICAgICAgICAgICAgICAgZC5hZGRDYWxsYmFja3MoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlcyl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2QucHVibGlzaCgiL2Rvam8vaW8vbG9hZCIsIFtkLCByZXNd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbihyZXMpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9kLnB1Ymxpc2goIi9kb2pvL2lvL2Vycm9yIiwgW2QsIHJlc10pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkLmFkZEJvdGgoZnVuY3Rpb24ocmVzKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2QucHVibGlzaCgiL2Rvam8vaW8vZG9uZSIsIFtkLCByZXNd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGQuaW9BcmdzID0gaW9BcmdzOworICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
bmVlZCB0byB3aXJlIHVwIHRoZSB4aHIgb2JqZWN0J3MgYWJvcnQgbWV0aG9kIHRvIHNvbWV0aGlu
ZworICAgICAgICAgICAgICAgIC8vIGFuYWxhZ291cyBpbiB0aGUgRGVmZXJyZWQKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZDsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgX2RlZmVycmVkQ2Fu
Y2VsID0gZnVuY3Rpb24oLypEZWZlcnJlZCovZGZkKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1t
YXJ5OiBjYW5jZWxsZXIgZnVuY3Rpb24gZm9yIGRvam8uX2lvU2V0QXJncyBjYWxsLgorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRmZC5jYW5jZWxlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgdmFyIHhociA9IGRmZC5pb0FyZ3MueGhyOworICAgICAgICAgICAgICAgIHZhciBf
YXQgPSB0eXBlb2YgeGhyLmFib3J0OworICAgICAgICAgICAgICAgIGlmKF9hdCA9PSAiZnVuY3Rp
b24iIHx8IF9hdCA9PSAib2JqZWN0IiB8fCBfYXQgPT0gInVua25vd24iKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHhoci5hYm9ydCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB2YXIgZXJyID0gZGZkLmlvQXJncy5lcnJvcjsKKyAgICAgICAgICAgICAgICBpZighZXJy
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IG5ldyBFcnJvcigieGhyIGNhbmNlbGxl
ZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyLmRvam9UeXBlPSJjYW5jZWwiOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9Owor
ICAgICAgICB2YXIgX2RlZmVycmVkT2sgPSBmdW5jdGlvbigvKkRlZmVycmVkKi9kZmQpeworICAg
ICAgICAgICAgICAgIC8vIHN1bW1hcnk6IG9rSGFuZGxlciBmdW5jdGlvbiBmb3IgZG9qby5faW9T
ZXRBcmdzIGNhbGwuCisKKyAgICAgICAgICAgICAgICB2YXIgcmV0ID0gaGFuZGxlcnNbZGZkLmlv
QXJncy5oYW5kbGVBc10oZGZkLmlvQXJncy54aHIpOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiByZXQ7CisgICAgICAgIH07CisgICAgICAgIHZhciBf
ZGVmZXJFcnJvciA9IGZ1bmN0aW9uKC8qRXJyb3IqL2Vycm9yLCAvKkRlZmVycmVkKi9kZmQpewor
ICAgICAgICAgICAgICAgIC8vIHN1bW1hcnk6IGVyckhhbmRsZXIgZnVuY3Rpb24gZm9yIGRvam8u
X2lvU2V0QXJncyBjYWxsLgorCisgICAgICAgICAgICAgICAgaWYoIWRmZC5pb0FyZ3MuYXJncy5m
YWlsT2speworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAg
fTsKKworICAgICAgICAvLyBhdm9pZCBzZXR0aW5nIGEgdGltZXIgcGVyIHJlcXVlc3QuIEl0IGRl
Z3JhZGVzIHBlcmZvcm1hbmNlIG9uIElFCisgICAgICAgIC8vIHNvbWV0aGluZyBmaWVyZWNlIGlm
IHdlIGRvbid0IHVzZSB1bmlmaWVkIGxvb3BzLgorICAgICAgICB2YXIgX2luRmxpZ2h0SW50dmwg
PSBudWxsOworICAgICAgICB2YXIgX2luRmxpZ2h0ID0gW107CisgICAgICAgIAorICAgICAgICAK
KyAgICAgICAgLy9Vc2UgYSBzZXBhcmF0ZSBjb3VudCBmb3Iga25vd2luZyBpZiB3ZSBhcmUgc3Rh
cnRpbmcvc3RvcHBpbmcgaW8gY2FsbHMuCisgICAgICAgIC8vQ2Fubm90IHVzZSBfaW5GbGlnaHQu
bGVuZ3RoIHNpbmNlIGl0IGNhbiBjaGFuZ2UgYXQgYSBkaWZmZXJlbnQgdGltZSB0aGFuCisgICAg
ICAgIC8vd2hlbiB3ZSB3YW50IHRvIGRvIHRoaXMga2luZCBvZiB0ZXN0LiBXZSBvbmx5IHdhbnQg
dG8gZGVjcmVtZW50IHRoZSBjb3VudAorICAgICAgICAvL2FmdGVyIGEgY2FsbGJhY2svZXJyYmFj
ayBoYXMgZmluaXNoZWQsIHNpbmNlIHRoZSBjYWxsYmFjay9lcnJiYWNrIHNob3VsZCBiZQorICAg
ICAgICAvL2NvbnNpZGVyZWQgYXMgcGFydCBvZiBmaW5pc2hpbmcgYSByZXF1ZXN0LgorICAgICAg
ICB2YXIgX3B1YkNvdW50ID0gMDsKKyAgICAgICAgdmFyIF9jaGVja1B1YkNvdW50ID0gZnVuY3Rp
b24oZGZkKXsKKyAgICAgICAgICAgICAgICBpZihfcHViQ291bnQgPD0gMCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfcHViQ291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYo
Y2ZnLmlvUHVibGlzaCAmJiBfZC5wdWJsaXNoICYmICghZGZkIHx8IGRmZCAmJiBkZmQuaW9Bcmdz
LmFyZ3MuaW9QdWJsaXNoICE9PSBmYWxzZSkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZC5wdWJsaXNoKCIvZG9qby9pby9zdG9wIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHZhciBfd2F0Y2hJ
bkZsaWdodCA9IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy9zdW1tYXJ5OgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBpbnRlcm5hbCBtZXRob2QgdGhhdCBjaGVja3MgZWFj
aCBpbmZsaWdodCBYTUxIdHRwUmVxdWVzdCB0byBzZWUKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgaWYgaXQgaGFzIGNvbXBsZXRlZCBvciBpZiB0aGUgdGltZW91dCBzaXR1YXRpb24g
YXBwbGllcy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2YXIgbm93ID0gKG5l
dyBEYXRlKCkpLmdldFRpbWUoKTsKKyAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgc3luYyBj
YWxscyBzdGF5IHRocmVhZCBzYWZlLCBpZiB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgICAg
ICAgICAgICAgIC8vIGR1cmluZyBhIHN5bmMgY2FsbCBhbmQgdGhpcyByZXN1bHRzIGluIGFub3Ro
ZXIgc3luYyBjYWxsIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBmaXJzdCBzeW5jIGNh
bGwgZW5kcyB0aGUgYnJvd3NlciBoYW5ncworICAgICAgICAgICAgICAgIGlmKCFfZC5fYmxvY2tB
c3luYyl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIG1hbnVhbCBsb29wIGJl
Y2F1c2Ugd2Ugb2Z0ZW4gbW9kaWZ5IF9pbkZsaWdodCAoYW5kIHRoZXJlZm9yZSAnaScpIHdoaWxl
IGl0ZXJhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90ZTogdGhlIHNlY29uZCBj
bGF1c2UgaXMgYW4gYXNzaWdtZW50IG9uIHB1cnBvc2UsIGxpbnQgbWF5IGNvbXBsYWluCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwLCB0aWY7IGkgPCBfaW5GbGlnaHQubGVu
Z3RoICYmICh0aWYgPSBfaW5GbGlnaHRbaV0pOyBpKyspeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZGZkID0gdGlmLmRmZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKCFkZmQgfHwgZGZkLmNhbmNlbGVkIHx8ICF0aWYudmFsaWRDaGVjayhk
ZmQpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9p
bkZsaWdodC5zcGxpY2UoaS0tLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9wdWJDb3VudCAtPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRpZi5pb0NoZWNrKGRmZCkpeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2luRmxpZ2h0LnNwbGljZShpLS0s
IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlm
LnJlc0hhbmRsZShkZmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX3B1YkNvdW50IC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfWVsc2UgaWYoZGZkLnN0YXJ0VGltZSl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL2RpZCB3ZSB0aW1lb3V0PworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGZkLnN0YXJ0VGltZSArIChk
ZmQuaW9BcmdzLmFyZ3MudGltZW91dCB8fCAwKSA8IG5vdyl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbkZsaWdodC5zcGxpY2UoaS0t
LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigidGltZW91dCBleGNlZWRlZCIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIuZG9qb1R5
cGUgPSAidGltZW91dCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRmZC5lcnJiYWNrKGVycik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2FuY2VsIHRoZSByZXF1ZXN0IHNv
IHRoZSBpbyBtb2R1bGUgY2FuIGRvIGFwcHJvcHJpYXRlIGNsZWFudXAuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5jYW5jZWwoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X3B1YkNvdW50IC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZihkb2pvLmNvbmZpZy5kZWJ1Z0F0QWxsQ29zdHMpeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuY2FsbCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ5eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuYy5jYWxsKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH1jYXRjaChlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRmZC5lcnJiYWNrKGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIF9j
aGVja1B1YkNvdW50KGRmZCk7CisKKyAgICAgICAgICAgICAgICBpZighX2luRmxpZ2h0Lmxlbmd0
aCl7CisgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKF9pbkZsaWdodEludHZs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9pbkZsaWdodEludHZsID0gbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgZG9qby5faW9DYW5jZWxBbGwgPSBmdW5jdGlvbigpeworICAgICAgICAgICAg
ICAgIC8vc3VtbWFyeTogQ2FuY2VscyBhbGwgcGVuZGluZyBJTyByZXF1ZXN0cywgcmVnYXJkbGVz
cyBvZiBJTyB0eXBlCisgICAgICAgICAgICAgICAgLy8oeGhyLCBzY3JpcHQsIGlmcmFtZSkuCisg
ICAgICAgICAgICAgICAgdHJ5eworICAgICAgICAgICAgICAgICAgICAgICAgX2QuZm9yRWFjaChf
aW5GbGlnaHQsIGZ1bmN0aW9uKGkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5kZmQuY2FuY2Vs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXsvKnNxdWVsY2gq
L30KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH1jYXRjaChl
KXsvKnNxdWVsY2gqL30KKyAgICAgICAgfTsKKworICAgICAgICAvL0F1dG9tYXRpY2FsbHkgY2Fs
bCBjYW5jZWwgYWxsIGlvIGNhbGxzIG9uIHVubG9hZAorICAgICAgICAvL2luIElFIGZvciB0cmFj
IGlzc3VlICMyMzU3LgorICAgICAgICAgICAgICAgIGlmKF9kLmlzSUUpeworICAgICAgICAgICAg
ICAgIF9kLmFkZE9uV2luZG93VW5sb2FkKF9kLl9pb0NhbmNlbEFsbCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIF9kLl9pb05vdGlmeVN0YXJ0ID0gZnVuY3Rpb24oLypEZWZlcnJlZCov
ZGZkKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBJZiBkb2pvLnB1Ymxpc2ggaXMgYXZhaWxhYmxlLCBwdWJsaXNoIHRvcGljcwor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhYm91dCB0aGUgc3RhcnQgb2YgYSByZXF1
ZXN0IHF1ZXVlIGFuZC9vciB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhl
IGJlZ2lubmluZyBvZiByZXF1ZXN0LgorICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9uOgor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBVc2VkIGJ5IElPIHRyYW5zcG9ydHMuIEFu
IElPIHRyYW5zcG9ydCBzaG91bGQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgY2Fs
bCB0aGlzIG1ldGhvZCBiZWZvcmUgbWFraW5nIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uCisgICAg
ICAgICAgICAgICAgaWYoY2ZnLmlvUHVibGlzaCAmJiBfZC5wdWJsaXNoICYmIGRmZC5pb0FyZ3Mu
YXJncy5pb1B1Ymxpc2ggIT09IGZhbHNlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFf
cHViQ291bnQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC5wdWJsaXNoKCIv
ZG9qby9pby9zdGFydCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgX3B1YkNvdW50ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBfZC5w
dWJsaXNoKCIvZG9qby9pby9zZW5kIiwgW2RmZF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICBfZC5faW9XYXRjaCA9IGZ1bmN0aW9uKGRmZCwgdmFsaWRDaGVjaywg
aW9DaGVjaywgcmVzSGFuZGxlKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBXYXRjaGVzIHRoZSBpbyByZXF1ZXN0IHJlcHJlc2Vu
dGVkIGJ5IGRmZCB0byBzZWUgaWYgaXQgY29tcGxldGVzLgorICAgICAgICAgICAgICAgIC8vIGRm
ZDogRGVmZXJyZWQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIERlZmVycmVk
IG9iamVjdCB0byB3YXRjaC4KKyAgICAgICAgICAgICAgICAvLyB2YWxpZENoZWNrOiBGdW5jdGlv
bgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBGdW5jdGlvbiB1c2VkIHRvIGNoZWNr
IGlmIHRoZSBJTyByZXF1ZXN0IGlzIHN0aWxsIHZhbGlkLiBHZXRzIHRoZSBkZmQKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgb2JqZWN0IGFzIGl0cyBvbmx5IGFyZ3VtZW50LgorICAg
ICAgICAgICAgICAgIC8vIGlvQ2hlY2s6IEZ1bmN0aW9uCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIEZ1bmN0aW9uIHVzZWQgdG8gY2hlY2sgaWYgYmFzaWMgSU8gY2FsbCB3b3JrZWQu
IEdldHMgdGhlIGRmZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBvYmplY3QgYXMg
aXRzIG9ubHkgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgLy8gcmVzSGFuZGxlOiBGdW5jdGlv
bgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBGdW5jdGlvbiB1c2VkIHRvIHByb2Nl
c3MgcmVzcG9uc2UuIEdldHMgdGhlIGRmZAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICBvYmplY3QgYXMgaXRzIG9ubHkgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgdmFyIGFyZ3Mg
PSBkZmQuaW9BcmdzLmFyZ3M7CisgICAgICAgICAgICAgICAgaWYoYXJncy50aW1lb3V0KXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRmZC5zdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGlt
ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBfaW5GbGlnaHQucHVzaCh7ZGZkOiBkZmQsIHZhbGlkQ2hlY2s6IHZhbGlkQ2hlY2ssIGlvQ2hl
Y2s6IGlvQ2hlY2ssIHJlc0hhbmRsZTogcmVzSGFuZGxlfSk7CisgICAgICAgICAgICAgICAgaWYo
IV9pbkZsaWdodEludHZsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9pbkZsaWdodEludHZs
ID0gc2V0SW50ZXJ2YWwoX3dhdGNoSW5GbGlnaHQsIDUwKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgLy8gaGFuZGxlIHN5bmMgcmVxdWVzdHMKKyAgICAgICAgICAgICAgICAv
L0Egd2Vha25lc3M6IGFzeW5jIGNhbGxzIGluIGZsaWdodAorICAgICAgICAgICAgICAgIC8vY291
bGQgaGF2ZSB0aGVpciBoYW5kbGVycyBjYWxsZWQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAg
ICAgICAvL193YXRjaEluRmxpZ2h0IGNhbGwsIGJlZm9yZSB0aGUgc3luYydzIGNhbGxiYWNrcwor
ICAgICAgICAgICAgICAgIC8vIGFyZSBjYWxsZWQuCisgICAgICAgICAgICAgICAgaWYoYXJncy5z
eW5jKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIF93YXRjaEluRmxpZ2h0KCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHZhciBfZGVmYXVsdENvbnRlbnRUeXBl
ID0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI7CisKKyAgICAgICAgdmFyIF92
YWxpZENoZWNrID0gZnVuY3Rpb24oLypEZWZlcnJlZCovZGZkKXsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZGZkLmlvQXJncy54aHIucmVhZHlTdGF0ZTsgLy9ib29sZWFuCisgICAgICAgIH07Cisg
ICAgICAgIHZhciBfaW9DaGVjayA9IGZ1bmN0aW9uKC8qRGVmZXJyZWQqL2RmZCl7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDQgPT0gZGZkLmlvQXJncy54aHIucmVhZHlTdGF0ZTsgLy9ib29sZWFu
CisgICAgICAgIH07CisgICAgICAgIHZhciBfcmVzSGFuZGxlID0gZnVuY3Rpb24oLypEZWZlcnJl
ZCovZGZkKXsKKyAgICAgICAgICAgICAgICB2YXIgeGhyID0gZGZkLmlvQXJncy54aHI7CisgICAg
ICAgICAgICAgICAgaWYoX2QuX2lzRG9jdW1lbnRPayh4aHIpKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRmZC5jYWxsYmFjayhkZmQpOworICAgICAgICAgICAgICAgIH1lbHNleworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIiAr
IGRmZC5pb0FyZ3MudXJsICsgIiBzdGF0dXM6IiArIHhoci5zdGF0dXMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyLnN0YXR1cyA9IHhoci5zdGF0dXM7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlcnIucmVzcG9uc2VUZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRmZC5lcnJiYWNrKGVycik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIGRvam8uX2lvQWRkUXVlcnlUb1VybCA9IGZ1bmN0aW9uKC8qZG9qby5fX0lv
Q2FsbGJhY2tBcmdzKi9pb0FyZ3MpeworICAgICAgICAgICAgICAgIC8vc3VtbWFyeTogQWRkcyBx
dWVyeSBwYXJhbXMgZGlzY292ZXJlZCBieSB0aGUgaW8gZGVmZXJyZWQgY29uc3RydWN0aW9uIHRv
IHRoZSBVUkwuCisgICAgICAgICAgICAgICAgLy9Pbmx5IHVzZSB0aGlzIGZvciBvcGVyYXRpb25z
IHdoaWNoIGFyZSBmdW5kYW1lbnRhbGx5IEdFVC10eXBlIG9wZXJhdGlvbnMuCisgICAgICAgICAg
ICAgICAgaWYoaW9BcmdzLnF1ZXJ5Lmxlbmd0aCl7CisgICAgICAgICAgICAgICAgICAgICAgICBp
b0FyZ3MudXJsICs9IChpb0FyZ3MudXJsLmluZGV4T2YoIj8iKSA9PSAtMSA/ICI/IiA6ICImIikg
KyBpb0FyZ3MucXVlcnk7CisgICAgICAgICAgICAgICAgICAgICAgICBpb0FyZ3MucXVlcnkgPSBu
dWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICAvKj09PT09Cisg
ICAgICAgIGRvam8uZGVjbGFyZSgiZG9qby5fX1hockFyZ3MiLCBkb2pvLl9fSW9BcmdzLCB7Cisg
ICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHByb3BlcnRpZXMgbGlzdGVkIGZvciB0aGUgZG9q
by5fSW9BcmdzIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
dGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBhbGxvd2VkIGZvciBkb2pvLnhociogbWV0aG9k
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgaGFuZGxlQXM6IFN0cmluZz8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBY2NlcHRhYmxlIHZhbHVlcyBh
cmU6IHRleHQgKGRlZmF1bHQpLCBqc29uLCBqc29uLWNvbW1lbnQtb3B0aW9uYWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAganNvbi1jb21tZW50LWZpbHRlcmVkLCBq
YXZhc2NyaXB0LCB4bWwuIFNlZSBgZG9qby5jb250ZW50SGFuZGxlcnNgCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgIHN5bmM6IEJvb2xlYW4/CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgZmFsc2UgaXMgZGVmYXVsdC4gSW5kaWNhdGVzIHdoZXRoZXIgdGhl
IHJlcXVlc3Qgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
YmUgYSBzeW5jaHJvbm91cyAoYmxvY2tpbmcpIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgIGhlYWRlcnM6IE9iamVjdD8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBBZGRpdGlvbmFsIEhUVFAgaGVhZGVycyB0byBzZW5kIGluIHRoZSByZXF1
ZXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBmYWlsT2s6IEJvb2xlYW4/Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZmFsc2UgaXMgZGVmYXVsdC4g
SW5kaWNhdGVzIHdoZXRoZXIgYSByZXF1ZXN0IHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGFsbG93ZWQgdG8gZmFpbCAoYW5kIHRoZXJlZm9yZSBubyBj
b25zb2xlIGVycm9yIG1lc3NhZ2UgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlKQorICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5oYW5kbGVBcyA9IGhhbmRsZUFzOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5z
eW5jID0gc3luYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRl
cnM7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxPayA9IGZhaWxPazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICA9PT09PSovCisKKyAgICAgICAgZG9q
by54aHIgPSBmdW5jdGlvbigvKlN0cmluZyovIG1ldGhvZCwgLypkb2pvLl9fWGhyQXJncyovIGFy
Z3MsIC8qQm9vbGVhbj8qLyBoYXNCb2R5KXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1h
cnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFNlbmRzIGFuIEhUVFAgcmVxdWVz
dCB3aXRoIHRoZSBnaXZlbiBtZXRob2QuCisgICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlw
dGlvbjoKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgU2VuZHMgYW4gSFRUUCByZXF1
ZXN0IHdpdGggdGhlIGdpdmVuIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgU2VlIGFsc28gZG9qby54aHJHZXQoKSwgeGhyUG9zdCgpLCB4aHJQdXQoKSBhbmQgZG9qby54
aHJEZWxldGUoKSBmb3Igc2hvcnRjdXRzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IGZvciB0aG9zZSBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSBhbHNvIG1ldGhvZHMgZm9yICJyYXci
IFBVVCBhbmQgUE9TVCBtZXRob2RzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHZp
YSBkb2pvLnJhd1hoclB1dCgpIGFuZCBkb2pvLnJhd1hoclBvc3QoKSByZXNwZWN0aXZlbHkuCisg
ICAgICAgICAgICAgICAgLy8gICAgICBtZXRob2Q6CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIEhUVFAgbWV0aG9kIHRvIGJlIHVzZWQsIHN1Y2ggYXMgR0VULCBQT1NULCBQVVQsIERF
TEVURS4gIFNob3VsZCBiZSB1cHBlcmNhc2UuCisgICAgICAgICAgICAgICAgLy8gICAgICBoYXNC
b2R5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBJZiB0aGUgcmVxdWVzdCBoYXMg
YW4gSFRUUCBib2R5LCB0aGVuIHBhc3MgdHJ1ZSBmb3IgaGFzQm9keS4KKworICAgICAgICAgICAg
ICAgIC8vTWFrZSB0aGUgRGVmZXJyZWQgb2JqZWN0IGZvciB0aGlzIHhociByZXF1ZXN0LgorICAg
ICAgICAgICAgICAgIHZhciBkZmQgPSBfZC5faW9TZXRBcmdzKGFyZ3MsIF9kZWZlcnJlZENhbmNl
bCwgX2RlZmVycmVkT2ssIF9kZWZlckVycm9yKTsKKyAgICAgICAgICAgICAgICB2YXIgaW9Bcmdz
ID0gZGZkLmlvQXJnczsKKworICAgICAgICAgICAgICAgIC8vUGFzcyB0aGUgYXJncyB0byBfeGhy
T2JqLCB0byBhbGxvdyBhbHRlcm5hdGUgWEhSIGNhbGxzIGJhc2VkIHNwZWNpZmljIGNhbGxzLCBs
aWtlCisgICAgICAgICAgICAgICAgLy90aGUgb25lIHVzZWQgZm9yIGlmcmFtZSBwcm94aWVzLgor
ICAgICAgICAgICAgICAgIHZhciB4aHIgPSBpb0FyZ3MueGhyID0gX2QuX3hock9iaihpb0FyZ3Mu
YXJncyk7CisgICAgICAgICAgICAgICAgLy9JZiBYSFIgZmFjdG9yeSBmYWlscywgY2FuY2VsIHRo
ZSBkZWZlcnJlZC4KKyAgICAgICAgICAgICAgICBpZigheGhyKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRmZC5jYW5jZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZmQ7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9BbGxvdyBmb3Igc3BlY2lm
eWluZyB0aGUgSFRUUCBib2R5IGNvbXBsZXRlbHkuCisgICAgICAgICAgICAgICAgaWYoInBvc3RE
YXRhIiBpbiBhcmdzKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlvQXJncy5xdWVyeSA9IGFy
Z3MucG9zdERhdGE7CisgICAgICAgICAgICAgICAgfWVsc2UgaWYoInB1dERhdGEiIGluIGFyZ3Mp
eworICAgICAgICAgICAgICAgICAgICAgICAgaW9BcmdzLnF1ZXJ5ID0gYXJncy5wdXREYXRhOwor
ICAgICAgICAgICAgICAgIH1lbHNlIGlmKCJyYXdCb2R5IiBpbiBhcmdzKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlvQXJncy5xdWVyeSA9IGFyZ3MucmF3Qm9keTsKKyAgICAgICAgICAgICAg
ICB9ZWxzZSBpZigoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgIWhhc0JvZHkpIHx8ICJQT1NUfFBV
VCIuaW5kZXhPZihtZXRob2QudG9VcHBlckNhc2UoKSkgPT0gLTEpeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy9DaGVjayBmb3IgaGFzQm9keSBiZWluZyBwYXNzZWQuIElmIG5vIGhhc0JvZHks
CisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZW4gb25seSBhcHBlbmQgcXVlcnkgc3RyaW5n
IGlmIG5vdCBhIFBPU1Qgb3IgUFVUIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICBf
ZC5faW9BZGRRdWVyeVRvVXJsKGlvQXJncyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gSUUgNiBpcyBhIHN0ZWFtaW5nIHBpbGUuIEl0IHdvbid0IGxldCB5b3UgY2Fs
bCBhcHBseSgpIG9uIHRoZSBuYXRpdmUgZnVuY3Rpb24gKHhoci5vcGVuKS4KKyAgICAgICAgICAg
ICAgICAvLyB3b3JrYXJvdW5kIGZvciBJRTYncyBhcHBseSgpICJpc3N1ZXMiCisgICAgICAgICAg
ICAgICAgeGhyLm9wZW4obWV0aG9kLCBpb0FyZ3MudXJsLCBhcmdzLnN5bmMgIT09IHRydWUsIGFy
Z3MudXNlciB8fCB1bmRlZmluZWQsIGFyZ3MucGFzc3dvcmQgfHwgdW5kZWZpbmVkKTsKKyAgICAg
ICAgICAgICAgICBpZihhcmdzLmhlYWRlcnMpeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
KHZhciBoZHIgaW4gYXJncy5oZWFkZXJzKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYoaGRyLnRvTG93ZXJDYXNlKCkgPT09ICJjb250ZW50LXR5cGUiICYmICFhcmdzLmNvbnRl
bnRUeXBlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmNv
bnRlbnRUeXBlID0gYXJncy5oZWFkZXJzW2hkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH1lbHNlIGlmKGFyZ3MuaGVhZGVyc1toZHJdKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL09ubHkgYWRkIGhlYWRlciBpZiBpdCBoYXMgYSB2YWx1ZS4g
VGhpcyBhbGxvd3MgZm9yIGluc3RuYWNlLCBza2lwcGluZworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vaW5zZXJ0aW9uIG9mIFgtUmVxdWVzdGVkLVdpdGggYnkgc3Bl
Y2lmeWluZyBlbXB0eSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihoZHIsIGFyZ3MuaGVhZGVyc1toZHJdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaXMgdGhpcyBhcHBy
b3ByaWF0ZSBmb3IgYWxsIGNvbnRlbnQgdHlwZXM/CisgICAgICAgICAgICAgICAgeGhyLnNldFJl
cXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsIGFyZ3MuY29udGVudFR5cGUgfHwgX2RlZmF1bHRD
b250ZW50VHlwZSk7CisgICAgICAgICAgICAgICAgaWYoIWFyZ3MuaGVhZGVycyB8fCAhKCJYLVJl
cXVlc3RlZC1XaXRoIiBpbiBhcmdzLmhlYWRlcnMpKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwgIlhNTEh0dHBSZXF1ZXN0
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzZXQgb3Ro
ZXIgaGVhZGVycyBoZXJlIQorICAgICAgICAgICAgICAgIF9kLl9pb05vdGlmeVN0YXJ0KGRmZCk7
CisgICAgICAgICAgICAgICAgaWYoZG9qby5jb25maWcuZGVidWdBdEFsbENvc3RzKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHhoci5zZW5kKGlvQXJncy5xdWVyeSk7CisgICAgICAgICAgICAg
ICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhoci5zZW5kKGlvQXJncy5xdWVyeSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9Y2F0Y2goZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvQXJn
cy5lcnJvciA9IGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5jYW5jZWwo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgX2QuX2lvV2F0Y2goZGZkLCBfdmFsaWRDaGVjaywgX2lvQ2hlY2ssIF9yZXNIYW5k
bGUpOworICAgICAgICAgICAgICAgIHhociA9IG51bGw7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGRmZDsgLy8gZG9qby5EZWZlcnJlZAorICAgICAgICB9OworCisgICAgICAgIGRvam8ueGhyR2V0
ID0gZnVuY3Rpb24oLypkb2pvLl9fWGhyQXJncyovIGFyZ3MpeworICAgICAgICAgICAgICAgIC8v
ICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgU2VuZHMgYW4g
SFRUUCBHRVQgcmVxdWVzdCB0byB0aGUgc2VydmVyLgorICAgICAgICAgICAgICAgIHJldHVybiBf
ZC54aHIoIkdFVCIsIGFyZ3MpOyAvLyBkb2pvLkRlZmVycmVkCisgICAgICAgIH07CisKKyAgICAg
ICAgZG9qby5yYXdYaHJQb3N0ID0gZG9qby54aHJQb3N0ID0gZnVuY3Rpb24oLypkb2pvLl9fWGhy
QXJncyovIGFyZ3MpeworICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgU2VuZHMgYW4gSFRUUCBQT1NUIHJlcXVlc3QgdG8gdGhl
IHNlcnZlci4gSW4gYWRkdGlvbiB0byB0aGUgcHJvcGVydGllcworICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBsaXN0ZWQgZm9yIHRoZSBkb2pvLl9fWGhyQXJncyB0eXBlLCB0aGUgZm9s
bG93aW5nIHByb3BlcnR5IGlzIGFsbG93ZWQ6CisgICAgICAgICAgICAgICAgLy8gICAgICBwb3N0
RGF0YToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgU3RyaW5nLiBTZW5kIHJhdyBk
YXRhIGluIHRoZSBib2R5IG9mIHRoZSBQT1NUIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgcmV0
dXJuIF9kLnhocigiUE9TVCIsIGFyZ3MsIHRydWUpOyAvLyBkb2pvLkRlZmVycmVkCisgICAgICAg
IH07CisKKyAgICAgICAgZG9qby5yYXdYaHJQdXQgPSBkb2pvLnhoclB1dCA9IGZ1bmN0aW9uKC8q
ZG9qby5fX1hockFyZ3MqLyBhcmdzKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHN1bW1hcnk6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFNlbmRzIGFuIEhUVFAgUFVUIHJlcXVl
c3QgdG8gdGhlIHNlcnZlci4gSW4gYWRkdGlvbiB0byB0aGUgcHJvcGVydGllcworICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBsaXN0ZWQgZm9yIHRoZSBkb2pvLl9fWGhyQXJncyB0eXBl
LCB0aGUgZm9sbG93aW5nIHByb3BlcnR5IGlzIGFsbG93ZWQ6CisgICAgICAgICAgICAgICAgLy8g
ICAgICBwdXREYXRhOgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTdHJpbmcuIFNl
bmQgcmF3IGRhdGEgaW4gdGhlIGJvZHkgb2YgdGhlIFBVVCByZXF1ZXN0LgorICAgICAgICAgICAg
ICAgIHJldHVybiBfZC54aHIoIlBVVCIsIGFyZ3MsIHRydWUpOyAvLyBkb2pvLkRlZmVycmVkCisg
ICAgICAgIH07CisKKyAgICAgICAgZG9qby54aHJEZWxldGUgPSBmdW5jdGlvbigvKmRvam8uX19Y
aHJBcmdzKi8gYXJncyl7CisgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBTZW5kcyBhbiBIVFRQIERFTEVURSByZXF1ZXN0IHRv
IHRoZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgcmV0dXJuIF9kLnhocigiREVMRVRFIiwgYXJn
cyk7IC8vZG9qby5EZWZlcnJlZAorICAgICAgICB9OworCisgICAgICAgIC8qCisgICAgICAgIGRv
am8ud3JhcEZvcm0gPSBmdW5jdGlvbihmb3JtTm9kZSl7CisgICAgICAgICAgICAgICAgLy9zdW1t
YXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBBIHJlcGxhY2VtZW50IGZvciBG
b3JtQmluZCwgYnV0IG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogbmVlZCB0byB0aGluayBoYXJkZXIgYWJvdXQgd2hhdCBleHRlbnNpb25zIHRvIHRoaXMg
d2UgbWlnaHQKKyAgICAgICAgICAgICAgICAvLyB3YW50LiBXaGF0IHNob3VsZCB3ZSBhbGxvdyBm
b2xrcyB0byBkbyB3LyB0aGlzPyBXaGF0IGV2ZW50cyB0bworICAgICAgICAgICAgICAgIC8vIHNl
dC9zZW5kPworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiZG9qby53cmFwRm9ybSBu
b3QgeWV0IGltcGxlbWVudGVkIik7CisgICAgICAgIH0KKyAgICAgICAgKi8KK30pKCk7CisKK30K
KworaWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmZ4Il0peyAvL19oYXNSZXNvdXJj
ZSBjaGVja3MgYWRkZWQgYnkgYnVpbGQuIERvIG5vdCB1c2UgX2hhc1Jlc291cmNlIGRpcmVjdGx5
IGluIHlvdXIgY29kZS4KK2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmZ4Il0gPSB0cnVl
OworZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLmZ4Iik7CisKKworCisKKworCisvKgorICAgICAg
ICBBbmltYXRpb24gbG9vc2VseSBwYWNrYWdlIGJhc2VkIG9uIERhbiBQdXBpdXMnIHdvcmssIGNv
bnRyaWJ1dGVkIHVuZGVyIENMQToKKyAgICAgICAgICAgICAgICBodHRwOi8vcHVwaXVzLmNvLnVr
L2pzL1Rvb2xraXQuRHJhd2luZy5qcworKi8KKyhmdW5jdGlvbigpeworICAgICAgICB2YXIgZCA9
IGRvam87CisgICAgICAgIHZhciBfbWl4aW4gPSBkLl9taXhpbjsKKworICAgICAgICBkb2pvLl9M
aW5lID0gZnVuY3Rpb24oLyppbnQqLyBzdGFydCwgLyppbnQqLyBlbmQpeworICAgICAgICAgICAg
ICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZG9q
by5fTGluZSBpcyB0aGUgb2JqZWN0IHVzZWQgdG8gZ2VuZXJhdGUgdmFsdWVzIGZyb20gYSBzdGFy
dCB2YWx1ZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB0byBhbiBlbmQgdmFsdWUK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHN0YXJ0OiBpbnQKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgQmVnaW5uaW5nIHZhbHVlIGZvciByYW5nZQorICAgICAgICAgICAgICAgIC8v
ICAgICAgZW5kOiBpbnQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRW5kaW5nIHZh
bHVlIGZvciByYW5nZQorICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDsKKyAgICAg
ICAgICAgICAgICB0aGlzLmVuZCA9IGVuZDsKKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLl9M
aW5lLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKC8qZmxvYXQqLyBuKXsKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHN1bW1hcnk6IFJldHVybnMgdGhlIHBvaW50IG9uIHRoZSBsaW5lCisg
ICAgICAgICAgICAgICAgLy8gICAgICBuOiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBncmVhdGVy
IHRoYW4gMCBhbmQgbGVzcyB0aGFuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gKCh0aGlzLmVu
ZCAtIHRoaXMuc3RhcnQpICogbikgKyB0aGlzLnN0YXJ0OyAvLyBEZWNpbWFsCisgICAgICAgIH07
CisKKyAgICAgICAgZG9qby5BbmltYXRpb24gPSBmdW5jdGlvbihhcmdzKXsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEEg
Z2VuZXJpYyBhbmltYXRpb24gY2xhc3MgdGhhdCBmaXJlcyBjYWxsYmFja3MgaW50byBpdHMgaGFu
ZGxlcnMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgb2JqZWN0IGF0IHZhcmlvdXMg
c3RhdGVzLgorICAgICAgICAgICAgICAgIC8vICAgICAgZGVzY3JpcHRpb246CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIEEgZ2VuZXJpYyBhbmltYXRpb24gY2xhc3MgdGhhdCBmaXJl
cyBjYWxsYmFja3MgaW50byBpdHMgaGFuZGxlcnMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgb2JqZWN0IGF0IHZhcmlvdXMgc3RhdGVzLiBOZWFybHkgYWxsIGRvam8gYW5pbWF0aW9u
IGZ1bmN0aW9ucworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICByZXR1cm4gYW4gaW5z
dGFuY2Ugb2YgdGhpcyBtZXRob2QsIHVzdWFsbHkgd2l0aG91dCBjYWxsaW5nIHRoZQorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICAucGxheSgpIG1ldGhvZCBiZWZvcmVoYW5kLiBUaGVy
ZWZvcmUsIHlvdSB3aWxsIGxpa2VseSBuZWVkIHRvCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgIGNhbGwgLnBsYXkoKSBvbiBpbnN0YW5jZXMgb2YgYGRvam8uQW5pbWF0aW9uYCB3aGVu
IG9uZSBpcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICByZXR1cm5lZC4KKyAgICAg
ICAgICAgICAgICAvLyBhcmdzOiBPYmplY3QKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgVGhlICdtYWdpYyBhcmd1bWVudCcsIG1peGluZyBhbGwgdGhlIHByb3BlcnRpZXMgaW50byB0
aGlzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuaW1hdGlvbiBpbnN0YW5jZS4K
KworICAgICAgICAgICAgICAgIF9taXhpbih0aGlzLCBhcmdzKTsKKyAgICAgICAgICAgICAgICBp
ZihkLmlzQXJyYXkodGhpcy5jdXJ2ZSkpeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5j
dXJ2ZSA9IG5ldyBkLl9MaW5lKHRoaXMuY3VydmVbMF0sIHRoaXMuY3VydmVbMV0pOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICB9OworCisgICAgICAgIC8vIEFsaWFzIHRvIGRyb3AgY29t
ZSAyLjA6CisgICAgICAgIGQuX0FuaW1hdGlvbiA9IGQuQW5pbWF0aW9uOworCisgICAgICAgIGQu
ZXh0ZW5kKGRvam8uQW5pbWF0aW9uLCB7CisgICAgICAgICAgICAgICAgLy8gZHVyYXRpb246IElu
dGVnZXIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIHRpbWUgaW4gbWlsbGlz
ZW9uZHMgdGhlIGFuaW1hdGlvbiB3aWxsIHRha2UgdG8gcnVuCisgICAgICAgICAgICAgICAgZHVy
YXRpb246IDM1MCwKKworICAgICAgICAvKj09PT09CisgICAgICAgICAgICAgICAgLy8gY3VydmU6
IGRvam8uX0xpbmV8QXJyYXkKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQSB0d28g
ZWxlbWVudCBhcnJheSBvZiBzdGFydCBhbmQgZW5kIHZhbHVlcywgb3IgYSBgZG9qby5fTGluZWAg
aW5zdGFuY2UgdG8gYmUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdXNlZCBpbiB0
aGUgQW5pbWF0aW9uLgorICAgICAgICAgICAgICAgIGN1cnZlOiBudWxsLAorCisgICAgICAgICAg
ICAgICAgLy8gZWFzaW5nOiBGdW5jdGlvbj8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgQSBGdW5jdGlvbiB0byBhZGp1c3QgdGhlIGFjY2VsZXJhdGlvbiAob3IgZGVjZWxlcmF0aW9u
KSBvZiB0aGUgcHJvZ3Jlc3MKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYWNyb3Nz
IGEgZG9qby5fTGluZQorICAgICAgICAgICAgICAgIGVhc2luZzogbnVsbCwKKyAgICAgICAgPT09
PT0qLworCisgICAgICAgICAgICAgICAgLy8gcmVwZWF0OiBJbnRlZ2VyPworICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGxvb3AgdGhlIGFuaW1h
dGlvbgorICAgICAgICAgICAgICAgIHJlcGVhdDogMCwKKworICAgICAgICAgICAgICAgIC8vIHJh
dGU6IEludGVnZXI/CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHRoZSB0aW1lIGlu
IG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBhZHZhbmNpbmcgdG8gbmV4dCBmcmFtZQorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAodXNlZCBhcyBhIGZwcyB0aW1lcjogMTAwMC9y
YXRlID0gZnBzKQorICAgICAgICAgICAgICAgIHJhdGU6IDIwIC8qIDUwIGZwcyAqLywKKworICAg
ICAgICAvKj09PT09CisgICAgICAgICAgICAgICAgLy8gZGVsYXk6IEludGVnZXI/CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0
IGJlZm9yZSBzdGFydGluZyBhbmltYXRpb24gYWZ0ZXIgaXQKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgaGFzIGJlZW4gLnBsYXkoKSdlZAorICAgICAgICAgICAgICAgIGRlbGF5OiBu
dWxsLAorCisgICAgICAgICAgICAgICAgLy8gYmVmb3JlQmVnaW46IEV2ZW50PworICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBTeW50aGV0aWMgZXZlbnQgZmlyZWQgYmVmb3JlIGEgZG9q
by5BbmltYXRpb24gYmVnaW5zIHBsYXlpbmcgKHN5bmNocm9ub3VzKQorICAgICAgICAgICAgICAg
IGJlZm9yZUJlZ2luOiBudWxsLAorCisgICAgICAgICAgICAgICAgLy8gb25CZWdpbjogRXZlbnQ/
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFN5bnRoZXRpYyBldmVudCBmaXJlZCBh
cyBhIGRvam8uQW5pbWF0aW9uIGJlZ2lucyBwbGF5aW5nICh1c2VmdWw/KQorICAgICAgICAgICAg
ICAgIG9uQmVnaW46IG51bGwsCisKKyAgICAgICAgICAgICAgICAvLyBvbkFuaW1hdGU6IEV2ZW50
PworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTeW50aGV0aWMgZXZlbnQgZmlyZWQg
YXQgZWFjaCBpbnRlcnZhbCBvZiBhIGBkb2pvLkFuaW1hdGlvbmAKKyAgICAgICAgICAgICAgICBv
bkFuaW1hdGU6IG51bGwsCisKKyAgICAgICAgICAgICAgICAvLyBvbkVuZDogRXZlbnQ/CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFN5bnRoZXRpYyBldmVudCBmaXJlZCBhZnRlciB0
aGUgZmluYWwgZnJhbWUgb2YgYSBgZG9qby5BbmltYXRpb25gCisgICAgICAgICAgICAgICAgb25F
bmQ6IG51bGwsCisKKyAgICAgICAgICAgICAgICAvLyBvblBsYXk6IEV2ZW50PworICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBTeW50aGV0aWMgZXZlbnQgZmlyZWQgYW55IHRpbWUgYSBg
ZG9qby5BbmltYXRpb25gIGlzIHBsYXkoKSdlZAorICAgICAgICAgICAgICAgIG9uUGxheTogbnVs
bCwKKworICAgICAgICAgICAgICAgIC8vIG9uUGF1c2U6IEV2ZW50PworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBTeW50aGV0aWMgZXZlbnQgZmlyZWQgd2hlbiBhIGBkb2pvLkFuaW1h
dGlvbmAgaXMgcGF1c2VkCisgICAgICAgICAgICAgICAgb25QYXVzZTogbnVsbCwKKworICAgICAg
ICAgICAgICAgIC8vIG9uU3RvcDogRXZlbnQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgU3ludGhldGljIGV2ZW50IGZpcmVzIHdoZW4gYSBgZG9qby5BbmltYXRpb25gIGlzIHN0b3Bw
ZWQKKyAgICAgICAgICAgICAgICBvblN0b3A6IG51bGwsCisKKyAgICAgICAgPT09PT0qLworCisg
ICAgICAgICAgICAgICAgX3BlcmNlbnQ6IDAsCisgICAgICAgICAgICAgICAgX3N0YXJ0UmVwZWF0
Q291bnQ6IDAsCisKKyAgICAgICAgICAgICAgICBfZ2V0U3RlcDogZnVuY3Rpb24oKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBfcCA9IHRoaXMuX3BlcmNlbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9lID0gdGhpcy5lYXNpbmcKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZSA/IF9lKF9wKSA6IF9wOwor
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgX2ZpcmU6IGZ1bmN0aW9uKC8qRXZl
bnQqLyBldnQsIC8qQXJyYXk/Ki8gYXJncyl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgIHN1bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQ29u
dmVuaWVuY2UgZnVuY3Rpb24uICBGaXJlIGV2ZW50ICJldnQiIGFuZCBwYXNzIGl0IHRoZQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFyZ3VtZW50cyBzcGVjaWZpZWQg
aW4gImFyZ3MiLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBDb252ZW5pZW5jZSBmdW5j
dGlvbi4gIEZpcmUgZXZlbnQgImV2dCIgYW5kIHBhc3MgaXQgdGhlCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgYXJndW1lbnRzIHNwZWNpZmllZCBpbiAiYXJncyIuCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRmlyZXMgdGhlIGNhbGxiYWNr
IGluIHRoZSBzY29wZSBvZiB0aGUgYGRvam8uQW5pbWF0aW9uYAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIGluc3RhbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICBldnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhl
IGV2ZW50IHRvIGZpcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGFyZ3M6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIGFyZ3VtZW50cyB0byBw
YXNzIHRvIHRoZSBldmVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gYXJnc3x8
W107CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzW2V2dF0peworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZihkLmNvbmZpZy5kZWJ1Z0F0QWxsQ29zdHMpeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbZXZ0XS5hcHBseSh0aGlzLCBh
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5eworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tldnRdLmFwcGx5KHRoaXMsIGEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNxdWVsY2ggYW5kIGxvZyBi
ZWNhdXNlIHdlIHNob3VsZG4ndCBhbGxvdyBleGNlcHRpb25zIGluCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzeW50aGV0aWMgZXZlbnQgaGFuZGxl
cnMgdG8gY2F1c2UgdGhlIGludGVybmFsIHRpbWVyIHRvIHJ1bgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW11Y2ssIHBvdGVudGlhbGx5IHBlZ2dp
bmcgdGhlIENQVS4gSSdtIG5vdCBhIGZhbiBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcXVlbGNoLCBidXQgaG9wZWZ1bGx5IGxvZ2dp
bmcgd2lsbCBtYWtlIGl0IGNsZWFyIHdoYXQncworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgb24KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbiBpbiBhbmlt
YXRpb24gaGFuZGxlciBmb3I6IiwgZXZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsgLy8gZG9qby5BbmltYXRpb24KKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAgICAgcGxheTogZnVuY3Rpb24oLyppbnQ/Ki8gZGVsYXksIC8qQm9vbGVhbj8qLyBnb3Rv
U3RhcnQpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTdGFydCB0aGUgYW5pbWF0aW9uLgorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZGVsYXk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgSG93IG1hbnkgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGJlZm9yZSBzdGFydGlu
Zy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdvdG9TdGFydDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBJZiB0cnVlLCBzdGFydHMgdGhlIGFuaW1hdGlvbiBm
cm9tIHRoZSBiZWdpbm5pbmc7IG90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICBzdGFydHMgaXQgZnJvbSBpdHMgY3VycmVudCBwb3NpdGlvbi4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnM6IGRvam8uQW5pbWF0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgVGhlIGluc3RhbmNlIHRvIGFsbG93IGNoYWlu
aW5nLgorCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3QgPSB0aGlzOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoX3QuX2RlbGF5VGltZXIpeyBfdC5fY2xlYXJUaW1lcigpOyB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZihnb3RvU3RhcnQpeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdC5fc3RvcFRpbWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF90Ll9hY3RpdmUgPSBfdC5fcGF1c2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF90Ll9wZXJjZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH1lbHNlIGlmKF90Ll9hY3RpdmUgJiYgIV90Ll9wYXVzZWQpeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gX3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIF90Ll9maXJlKCJiZWZvcmVCZWdpbiIsIFtfdC5ub2RlXSk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZSA9IGRlbGF5IHx8IF90LmRlbGF5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcCA9IGRvam8uaGl0Y2goX3QsICJfcGxh
eSIsIGdvdG9TdGFydCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlID4gMCl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9kZWxheVRpbWVyID0gc2V0VGltZW91
dChfcCwgZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Q7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBfcCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90OworICAgICAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgICAgICBfcGxheTogZnVuY3Rpb24oZ290b1N0YXJ0KXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBfdCA9IHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihf
dC5fZGVsYXlUaW1lcil7IF90Ll9jbGVhclRpbWVyKCk7IH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIF90Ll9zdGFydFRpbWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKF90Ll9wYXVzZWQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfdC5fc3RhcnRUaW1lIC09IF90LmR1cmF0aW9uICogX3QuX3BlcmNlbnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9hY3RpdmUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgX3QuX3BhdXNlZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX3QuY3VydmUuZ2V0VmFsdWUoX3QuX2dldFN0
ZXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZighX3QuX3BlcmNlbnQpeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZighX3QuX3N0YXJ0UmVwZWF0Q291bnQpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9zdGFydFJlcGVhdENvdW50
ID0gX3QucmVwZWF0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9maXJlKCJvbkJlZ2luIiwgW3ZhbHVlXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9m
aXJlKCJvblBsYXkiLCBbdmFsdWVdKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgX3QuX2N5
Y2xlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Q7IC8vIGRvam8uQW5pbWF0
aW9uCisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlv
bigpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VtbWFyeTogUGF1c2VzIGEgcnVubmlu
ZyBhbmltYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3QgPSB0aGlzOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoX3QuX2RlbGF5VGltZXIpeyBfdC5fY2xlYXJUaW1lcigp
OyB9CisgICAgICAgICAgICAgICAgICAgICAgICBfdC5fc3RvcFRpbWVyKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZighX3QuX2FjdGl2ZSl7IHJldHVybiBfdDsgLypkb2pvLkFuaW1hdGlv
biovIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9wYXVzZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgX3QuX2ZpcmUoIm9uUGF1c2UiLCBbX3QuY3VydmUuZ2V0VmFsdWUo
X3QuX2dldFN0ZXAoKSldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdDsgLy8g
ZG9qby5BbmltYXRpb24KKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgZ290
b1BlcmNlbnQ6IGZ1bmN0aW9uKC8qRGVjaW1hbCovIHBlcmNlbnQsIC8qQm9vbGVhbj8qLyBhbmRQ
bGF5KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgc3VtbWFyeToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTZXRzIHRoZSBwcm9ncmVzcyBvZiB0aGUg
YW5pbWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBwZXJjZW50OgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEEgcGVyY2VudGFnZSBpbiBkZWNp
bWFsIG5vdGF0aW9uIChiZXR3ZWVuIGFuZCBpbmNsdWRpbmcgMC4wIGFuZCAxLjApLgorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICBhbmRQbGF5OgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgIElmIHRydWUsIHBsYXkgdGhlIGFuaW1hdGlvbiBhZnRlciBzZXR0
aW5nIHRoZSBwcm9ncmVzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdCA9IHRoaXM7
CisgICAgICAgICAgICAgICAgICAgICAgICBfdC5fc3RvcFRpbWVyKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfdC5fYWN0aXZlID0gX3QuX3BhdXNlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfdC5fcGVyY2VudCA9IHBlcmNlbnQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZihhbmRQbGF5KXsgX3QucGxheSgpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gX3Q7IC8vIGRvam8uQW5pbWF0aW9uCisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgICAgIHN0b3A6IGZ1bmN0aW9uKC8qYm9vbGVhbj8qLyBnb3RvRW5kKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHN1bW1hcnk6IFN0b3BzIGEgcnVubmluZyBhbmltYXRpb24uCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBnb3RvRW5kOiBJZiB0cnVlLCB0aGUgYW5pbWF0aW9uIHdp
bGwgZW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90ID0gdGhpczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKF90Ll9kZWxheVRpbWVyKXsgX3QuX2NsZWFyVGltZXIoKTsgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYoIV90Ll90aW1lcil7IHJldHVybiBfdDsgLyogZG9q
by5BbmltYXRpb24gKi8gfQorICAgICAgICAgICAgICAgICAgICAgICAgX3QuX3N0b3BUaW1lcigp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZ290b0VuZCl7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF90Ll9wZXJjZW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9maXJlKCJvblN0b3AiLCBbX3QuY3VydmUu
Z2V0VmFsdWUoX3QuX2dldFN0ZXAoKSldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9h
Y3RpdmUgPSBfdC5fcGF1c2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gX3Q7IC8vIGRvam8uQW5pbWF0aW9uCisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgICAgIHN0YXR1czogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1
bW1hcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUmV0dXJucyBh
IHN0cmluZyB0b2tlbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdHVzIG9mCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgdGhlIGFuaW1hdGlvbiwgb25lIG9mOiAicGF1
c2VkIiwgInBsYXlpbmciLCAic3RvcHBlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRo
aXMuX2FjdGl2ZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9wYXVzZWQgPyAicGF1c2VkIiA6ICJwbGF5aW5nIjsgLy8gU3RyaW5nCisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0b3BwZWQiOyAv
LyBTdHJpbmcKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgX2N5Y2xlOiBm
dW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90ID0gdGhpczsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKF90Ll9hY3RpdmUpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY3VyciA9IG5ldyBEYXRlKCkudmFsdWVPZigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IChjdXJyIC0gX3QuX3N0YXJ0VGltZSkgLyAo
X3QuZHVyYXRpb24pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0ZXAg
Pj0gMSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcCA9IDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3QuX3BlcmNlbnQgPSBzdGVwOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFBlcmZvcm0gZWFzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmKF90LmVhc2luZyl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RlcCA9IF90LmVhc2luZyhzdGVwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90Ll9maXJlKCJvbkFuaW1h
dGUiLCBbX3QuY3VydmUuZ2V0VmFsdWUoc3RlcCldKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZihfdC5fcGVyY2VudCA8IDEpeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF90Ll9zdGFydFRpbWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF90Ll9hY3RpdmUgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKF90LnJlcGVhdCA+IDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX3QucmVwZWF0LS07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfdC5wbGF5KG51bGwsIHRydWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKF90LnJlcGVhdCA9PSAtMSl7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdC5wbGF5KG51
bGwsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNl
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoX3Qu
X3N0YXJ0UmVwZWF0Q291bnQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdC5yZXBlYXQgPSBfdC5fc3RhcnRSZXBlYXRDb3VudDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Qu
X3N0YXJ0UmVwZWF0Q291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdC5fcGVyY2VudCA9
IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3QuX2ZpcmUoIm9u
RW5kIiwgW190Lm5vZGVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAhX3QucmVwZWF0ICYmIF90Ll9zdG9wVGltZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF90OyAvLyBkb2pvLkFuaW1hdGlvbgorICAgICAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgICAgICBfY2xlYXJUaW1lcjogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHN1bW1hcnk6IENsZWFyIHRoZSBwbGF5IGRlbGF5IHRpbWVyCisgICAgICAg
ICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZGVsYXlUaW1lcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fZGVsYXlUaW1lcjsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gdGhlIGxvY2FsIHRpbWVyLCBzdHViYmVk
IGludG8gYWxsIEFuaW1hdGlvbiBpbnN0YW5jZXMKKyAgICAgICAgdmFyIGN0ciA9IDAsCisgICAg
ICAgICAgICAgICAgdGltZXIgPSBudWxsLAorICAgICAgICAgICAgICAgIHJ1bm5lciA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJ1bjogZnVuY3Rpb24oKXt9CisgICAgICAgICAgICAgICAg
fTsKKworICAgICAgICBkLmV4dGVuZChkLkFuaW1hdGlvbiwgeworCisgICAgICAgICAgICAgICAg
X3N0YXJ0VGltZXI6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZighdGhp
cy5fdGltZXIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lciA9
IGQuY29ubmVjdChydW5uZXIsICJydW4iLCB0aGlzLCAiX2N5Y2xlIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoIXRpbWVyKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZXIgPSBzZXRJbnRlcnZhbChkLmhpdGNoKHJ1bm5lciwgInJ1biIpLCB0aGlz
LnJhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgICAgICBfc3RvcFRpbWVyOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYodGhpcy5fdGltZXIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkLmRpc2Nvbm5lY3QodGhpcy5fdGltZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl90aW1lciA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN0ci0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYoY3RyIDw9IDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcklu
dGVydmFsKHRpbWVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBu
dWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHIgPSAwOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICB9KTsKKworICAg
ICAgICB2YXIgX21ha2VGYWRlYWJsZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGQuaXNJRSA/IGZ1bmN0aW9uKG5vZGUpeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25s
eSBzZXQgdGhlIHpvb20gaWYgdGhlICJ0aWNrbGUiIHZhbHVlIHdvdWxkIGJlIHRoZSBzYW1lIGFz
IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdAorICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG5zID0gbm9kZS5zdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGRvbid0IHNldCB0aGUgd2lkdGggdG8gYXV0byBpZiBpdCBkaWRuJ3QgYWxyZWFkeSBjYXNjYWRl
IHRoYXQgd2F5LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBm
IGFueW9uZXMgZGVzaWducworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW5zLndpZHRoLmxl
bmd0aCAmJiBkLnN0eWxlKG5vZGUsICJ3aWR0aCIpID09ICJhdXRvIil7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zLndpZHRoID0gImF1dG8iOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbigpe307CisKKyAgICAgICAgZG9qby5fZmFkZSA9IGZ1bmN0aW9uKC8qT2Jq
ZWN0Ki8gYXJncyl7CisgICAgICAgICAgICAgICAgLy8gICAgICBzdW1tYXJ5OgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFuaW1hdGlvbiB0aGF0IHdpbGwgZmFk
ZSB0aGUgbm9kZSBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFy
Z3Mubm9kZSBmcm9tIHRoZSBzdGFydCB0byBlbmQgdmFsdWVzIHBhc3NlZCAoYXJncy5zdGFydAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhcmdzLmVuZCkgKGVuZCBpcyBtYW5kYXRv
cnksIHN0YXJ0IGlzIG9wdGlvbmFsKQorCisgICAgICAgICAgICAgICAgYXJncy5ub2RlID0gZC5i
eUlkKGFyZ3Mubm9kZSk7CisgICAgICAgICAgICAgICAgdmFyIGZBcmdzID0gX21peGluKHsgcHJv
cGVydGllczoge30gfSwgYXJncyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyA9IChm
QXJncy5wcm9wZXJ0aWVzLm9wYWNpdHkgPSB7fSk7CisKKyAgICAgICAgICAgICAgICBwcm9wcy5z
dGFydCA9ICEoInN0YXJ0IiBpbiBmQXJncykgPworICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICtkLnN0eWxl
KGZBcmdzLm5vZGUsICJvcGFjaXR5Iil8fDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9IDog
ZkFyZ3Muc3RhcnQ7CisgICAgICAgICAgICAgICAgcHJvcHMuZW5kID0gZkFyZ3MuZW5kOworCisg
ICAgICAgICAgICAgICAgdmFyIGFuaW0gPSBkLmFuaW1hdGVQcm9wZXJ0eShmQXJncyk7CisgICAg
ICAgICAgICAgICAgZC5jb25uZWN0KGFuaW0sICJiZWZvcmVCZWdpbiIsIGQucGFydGlhbChfbWFr
ZUZhZGVhYmxlLCBmQXJncy5ub2RlKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gYW5pbTsg
Ly8gZG9qby5BbmltYXRpb24KKyAgICAgICAgfTsKKworICAgICAgICAvKj09PT09CisgICAgICAg
IGRvam8uX19GYWRlQXJncyA9IGZ1bmN0aW9uKG5vZGUsIGR1cmF0aW9uLCBlYXNpbmcpeworICAg
ICAgICAgICAgICAgIC8vICAgICAgbm9kZTogRE9NTm9kZXxTdHJpbmcKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgVGhlIG5vZGUgcmVmZXJlbmNlZCBpbiB0aGUgYW5pbWF0aW9uCisg
ICAgICAgICAgICAgICAgLy8gICAgICBkdXJhdGlvbjogSW50ZWdlcj8KKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgRHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29u
ZHMuCisgICAgICAgICAgICAgICAgLy8gICAgICBlYXNpbmc6IEZ1bmN0aW9uPworICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBBbiBlYXNpbmcgZnVuY3Rpb24uCisgICAgICAgICAgICAg
ICAgdGhpcy5ub2RlID0gbm9kZTsKKyAgICAgICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVy
YXRpb247CisgICAgICAgICAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmc7CisgICAgICAgIH0K
KyAgICAgICAgPT09PT0qLworCisgICAgICAgIGRvam8uZmFkZUluID0gZnVuY3Rpb24oLypkb2pv
Ll9fRmFkZUFyZ3MqLyBhcmdzKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5OgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFuaW1hdGlvbiB0aGF0IHdpbGwg
ZmFkZSBub2RlIGRlZmluZWQgaW4gJ2FyZ3MnIGZyb20KKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgaXRzIGN1cnJlbnQgb3BhY2l0eSB0byBmdWxseSBvcGFxdWUuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGQuX2ZhZGUoX21peGluKHsgZW5kOiAxIH0sIGFyZ3MpKTsgLy8gZG9qby5B
bmltYXRpb24KKyAgICAgICAgfTsKKworICAgICAgICBkb2pvLmZhZGVPdXQgPSBmdW5jdGlvbigv
KmRvam8uX19GYWRlQXJncyovICBhcmdzKXsKKyAgICAgICAgICAgICAgICAvLyBzdW1tYXJ5Ogor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFuaW1hdGlvbiB0aGF0
IHdpbGwgZmFkZSBub2RlIGRlZmluZWQgaW4gJ2FyZ3MnCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIGZyb20gaXRzIGN1cnJlbnQgb3BhY2l0eSB0byBmdWxseSB0cmFuc3BhcmVudC4K
KyAgICAgICAgICAgICAgICByZXR1cm4gZC5fZmFkZShfbWl4aW4oeyBlbmQ6IDAgfSwgYXJncykp
OyAvLyBkb2pvLkFuaW1hdGlvbgorICAgICAgICB9OworCisgICAgICAgIGRvam8uX2RlZmF1bHRF
YXNpbmcgPSBmdW5jdGlvbigvKkRlY2ltYWw/Ki8gbil7CisgICAgICAgICAgICAgICAgLy8gc3Vt
bWFyeTogVGhlIGRlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIGZvciBkb2pvLkFuaW1hdGlvbihzKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwLjUgKyAoKE1hdGguc2luKChuICsgMS41KSAqIE1hdGgu
UEkpKSAvIDIpOworICAgICAgICB9OworCisgICAgICAgIHZhciBQcm9wTGluZSA9IGZ1bmN0aW9u
KHByb3BlcnRpZXMpeworICAgICAgICAgICAgICAgIC8vIFByb3BMaW5lIGlzIGFuIGludGVybmFs
IGNsYXNzIHdoaWNoIGlzIHVzZWQgdG8gbW9kZWwgdGhlIHZhbHVlcyBvZgorICAgICAgICAgICAg
ICAgIC8vIGFuIGEgZ3JvdXAgb2YgQ1NTIHByb3BlcnRpZXMgYWNyb3NzIGFuIGFuaW1hdGlvbiBs
aWZlY3ljbGUuIEluCisgICAgICAgICAgICAgICAgLy8gcGFydGljdWxhciwgdGhlICJnZXRWYWx1
ZSIgZnVuY3Rpb24gaGFuZGxlcyBnZXR0aW5nIGludGVycG9sYXRlZAorICAgICAgICAgICAgICAg
IC8vIHZhbHVlcyBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgZm9yIGEgcGFydGljdWxhciBDU1MgdmFs
dWUuCisgICAgICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisgICAg
ICAgICAgICAgICAgZm9yKHZhciBwIGluIHByb3BlcnRpZXMpeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHByb3AgPSBwcm9wZXJ0aWVzW3BdOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYocHJvcC5zdGFydCBpbnN0YW5jZW9mIGQuQ29sb3IpeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjcmVhdGUgYSByZXVzYWJsZSB0ZW1wIGNvbG9yIG9iamVjdCB0byBrZWVw
IGludGVybWVkaWF0ZSByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3AudGVtcENvbG9yID0gbmV3IGQuQ29sb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgUHJvcExpbmUucHJvdG90
eXBlLmdldFZhbHVlID0gZnVuY3Rpb24ocil7CisgICAgICAgICAgICAgICAgdmFyIHJldCA9IHt9
OworICAgICAgICAgICAgICAgIGZvcih2YXIgcCBpbiB0aGlzLl9wcm9wZXJ0aWVzKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBwcm9wID0gdGhpcy5fcHJvcGVydGllc1twXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBwcm9wLnN0YXJ0OworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoc3RhcnQgaW5zdGFuY2VvZiBkLkNvbG9yKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0W3BdID0gZC5ibGVuZENvbG9ycyhzdGFydCwgcHJvcC5l
bmQsIHIsIHByb3AudGVtcENvbG9yKS50b0NzcygpOworICAgICAgICAgICAgICAgICAgICAgICAg
fWVsc2UgaWYoIWQuaXNBcnJheShzdGFydCkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXRbcF0gPSAoKHByb3AuZW5kIC0gc3RhcnQpICogcikgKyBzdGFydCArIChwICE9ICJv
cGFjaXR5IiA/IHByb3AudW5pdHMgfHwgInB4IiA6IDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAg
ICAgICB9OworCisgICAgICAgIC8qPT09PT0KKyAgICAgICAgZG9qby5kZWNsYXJlKCJkb2pvLl9f
QW5pbUFyZ3MiLCBbZG9qby5fX0ZhZGVBcmdzXSwgeworICAgICAgICAgICAgICAgIC8vIFByb3Bl
cnRpZXM6IE9iamVjdD8KKyAgICAgICAgICAgICAgICAvLyAgICAgIEEgaGFzaCBtYXAgb2Ygc3R5
bGUgcHJvcGVydGllcyB0byBPYmplY3RzIGRlc2NyaWJpbmcgdGhlIHRyYW5zaXRpb24sCisgICAg
ICAgICAgICAgICAgLy8gICAgICBzdWNoIGFzIHRoZSBwcm9wZXJ0aWVzIG9mIGRvam8uX0xpbmUg
d2l0aCBhbiBhZGRpdGlvbmFsICd1bml0cycgcHJvcGVydHkKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0aWVzOiB7fQorCisgICAgICAgICAgICAgICAgLy9UT0RPQzogYWRkIGV2ZW50IGNhbGxiYWNr
cworICAgICAgICB9KTsKKyAgICAgICAgPT09PT0qLworCisgICAgICAgIGRvam8uYW5pbWF0ZVBy
b3BlcnR5ID0gZnVuY3Rpb24oLypkb2pvLl9fQW5pbUFyZ3MqLyBhcmdzKXsKKyAgICAgICAgICAg
ICAgICAvLyBzdW1tYXJ5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBSZXR1cm5z
IGFuIGFuaW1hdGlvbiB0aGF0IHdpbGwgdHJhbnNpdGlvbiB0aGUgcHJvcGVydGllcyBvZgorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBub2RlIGRlZmluZWQgaW4gYGFyZ3NgIGRlcGVu
ZGluZyBob3cgdGhleSBhcmUgZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBgYXJncy5wcm9wZXJ0aWVzYAorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGBkb2pv
LmFuaW1hdGVQcm9wZXJ0eWAgaXMgdGhlIGZvdW5kYXRpb24gb2YgbW9zdCBgZG9qby5meGAKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYW5pbWF0aW9ucy4gSXQgdGFrZXMgYW4gb2Jq
ZWN0IG9mICJwcm9wZXJ0aWVzIiBjb3JyZXNwb25kaW5nIHRvCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIHN0eWxlIHByb3BlcnRpZXMsIGFuZCBhbmltYXRlcyB0aGVtIGluIHBhcmFs
bGVsIG92ZXIgYSBzZXQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZHVyYXRpb24u
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBBIHNpbXBsZSBhbmltYXRpb24gdGhhdCBjaGFuZ2Vz
IHRoZSB3aWR0aCBvZiB0aGUgc3BlY2lmaWVkIG5vZGUuCisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIGRvam8uYW5pbWF0ZVByb3BlcnR5KHsKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICBub2RlOiAibm9kZUlkIiwKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IHdpZHRoOiA0MDAgfSwKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIHwgICAgICAgfSkucGxheSgpOworICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICBEb2pvIGZpZ3VyZXMgb3V0IHRoZSBzdGFydCB2YWx1ZSBmb3IgdGhlIHdpZHRoIGFu
ZCBjb252ZXJ0cyB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaW50ZWdlciBz
cGVjaWZpZWQgZm9yIHRoZSB3aWR0aCB0byB0aGUgbW9yZSBleHByZXNzaXZlIGJ1dAorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICB2ZXJib3NlIGZvcm0gYHsgd2lkdGg6IHsgZW5kOiAn
NDAwJywgdW5pdHM6ICdweCcgfSB9YCB3aGljaCB5b3UKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgY2FuIGFsc28gc3BlY2lmeSBkaXJlY3RseS4gRGVmYXVsdHMgdG8gJ3B4JyBpZiBv
bW1pdHRlZC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEFuaW1hdGUgd2lkdGgsIGhlaWdodCwg
YW5kIHBhZGRpbmcgb3ZlciAyIHNlY29uZHMuLi4gdGhlCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHBlZGFudGljIHdheToKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
ZG9qby5hbmltYXRlUHJvcGVydHkoeyBub2RlOiBub2RlLCBkdXJhdGlvbjoyMDAwLAorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB7IHN0YXJ0OiAn
MjAwJywgZW5kOiAnNDAwJywgdW5pdHM6InB4IiB9LAorICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB7IHN0YXJ0OicyMDAnLCBlbmQ6ICc0MDAn
LCB1bml0czoicHgiIH0sCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICBwYWRkaW5nVG9wOiB7IHN0YXJ0Oic1JywgZW5kOic1MCcsIHVuaXRzOiJweCIgfQor
ICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyAgICAgIHwgICAgICAgfSkucGxheSgpOworICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICBOb3RlICdwYWRkaW5nVG9wJyBpcyB1c2VkIG92ZXIgJ3BhZGRpbmctdG9wJy4gTXVsdGkt
bmFtZSBDU1MgcHJvcGVydGllcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhcmUg
d3JpdHRlbiB1c2luZyAibWl4ZWQgY2FzZSIsIGFzIHRoZSBoeXBoZW4gaXMgaWxsZWdhbCBhcyBh
biBvYmplY3Qga2V5LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gZXhh
bXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgUGx1ZyBpbiBhIGRpZmZlcmVu
dCBlYXNpbmcgZnVuY3Rpb24gYW5kIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yCisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLiBFYXNpbmcgZnVu
Y3Rpb25zIGFjY2VwdCB2YWx1ZXMgYmV0d2VlbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICB6ZXJvIGFuZCBvbmUgYW5kIHJldHVybiBhIHZhbHVlIG9uIHRoYXQgYmFzaXMuIEluIHRo
aXMgY2FzZSwgYW4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgZXhwb25lbnRpYWwt
aW4gY3VydmUuCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uYW5pbWF0ZVBy
b3BlcnR5KHsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBub2RlOiAi
bm9kZUlkIiwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAvLyBkb2pv
IGZpZ3VyZXMgb3V0IHRoZSBzdGFydCB2YWx1ZQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgd2lkdGg6IHsgZW5kOiA0MDAgfSB9LAorICAgICAg
ICAgICAgICAgIC8vICAgICAgfCAgICAgICAgICAgICAgIGVhc2luZzogZnVuY3Rpb24obil7Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG49
PTApID8gMCA6IE1hdGgucG93KDIsIDEwICogKG4gLSAxKSk7CisgICAgICAgICAgICAgICAgLy8g
ICAgICB8ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAg
ICAgICAgICBvbkVuZDogZnVuY3Rpb24obm9kZSl7CisgICAgICAgICAgICAgICAgLy8gICAgICB8
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWQgd2hlbiB0aGUgYW5pbWF0aW9uIGZpbmlz
aGVzLiBUaGUgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0YXJnZXQgaXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24KKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAg
ICB8ICAgICAgIH0pLnBsYXkoNTAwKTsgLy8gZGVsYXkgcGxheWluZyBoYWxmIGEgc2Vjb25kCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBMaWtlIGFsbCBgZG9qby5BbmltYXRpb25gcywgYW5pbWF0
ZVByb3BlcnR5IHJldHVybnMgYSBoYW5kbGUgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIEFuaW1hdGlvbiBpbnN0YW5jZSwgd2hpY2ggZmlyZXMgdGhlIGV2ZW50cyBjb21t
b24gdG8gRG9qbyBGWC4gVXNlIGBkb2pvLmNvbm5lY3RgCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIHRvIGFjY2VzcyB0aGVzZSBldmVudHMgb3V0c2lkZSBvZiB0aGUgQW5pbWF0aW9u
IGRlZmluaXRvbjoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgdmFyIGFuaW0gPSBk
b2pvLmFuaW1hdGVQcm9wZXJ0eSh7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAg
ICAgICAgbm9kZToic29tZUlkIiwKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAg
ICAgICBwcm9wZXJ0aWVzOnsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoOjQwMCwgaGVpZ2h0OjUwMAorICAgICAgICAgICAgICAgIC8vICAgICAg
fCAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uY29ubmVjdChhbmltLCJvbkVuZCIs
IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgY29u
c29sZS5sb2coImFuaW1hdGlvbiBlbmRlZCIpOworICAgICAgICAgICAgICAgIC8vICAgICAgfCAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgLy8gcGxheSB0aGUgYW5p
bWF0aW9uIG5vdzoKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgYW5pbS5wbGF5KCk7
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBFYWNoIHByb3BlcnR5IGNhbiBiZSBhIGZ1bmN0aW9u
IHdob3NlIHJldHVybiB2YWx1ZSBpcyBzdWJzdGl0dXRlZCBhbG9uZy4KKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBlYWNoIG1lYXN1cmVtZW50IChlZzogc3Rh
cnQsIGVuZCkgY2FuIGJlIGEgZnVuY3Rpb24uIFRoZSBub2RlCisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgIHJlZmVyZW5jZSBpcyBwYXNzZWQgZGlyZWNseSB0byBjYWxsYmFja3MuCisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIGRvam8uYW5pbWF0ZVByb3BlcnR5KHsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBub2RlOiJtaW5lIiwKKyAgICAg
ICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOnsKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpmdW5jdGlvbihu
b2RlKXsKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc2hyaW5rIHRoaXMgbm9kZSBieSA1MCUKKyAgICAgICAgICAgICAgICAvLyAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvam8ucG9zaXRpb24obm9k
ZSkuaCAvIDIKKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aDp7CisgICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0OmZ1bmN0aW9uKG5vZGUpeyByZXR1cm4gMTAwOyB9LAorICAgICAgICAgICAgICAg
IC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6ZnVuY3Rpb24obm9k
ZSl7IHJldHVybiAyMDA7IH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgIHwgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgLy8gICAgICB8ICAgICAgIH0pLnBsYXkoKTsKKyAgICAgICAgICAgICAg
ICAvLworCisgICAgICAgICAgICAgICAgdmFyIG4gPSBhcmdzLm5vZGUgPSBkLmJ5SWQoYXJncy5u
b2RlKTsKKyAgICAgICAgICAgICAgICBpZighYXJncy5lYXNpbmcpeyBhcmdzLmVhc2luZyA9IGQu
X2RlZmF1bHRFYXNpbmc7IH0KKworICAgICAgICAgICAgICAgIHZhciBhbmltID0gbmV3IGQuQW5p
bWF0aW9uKGFyZ3MpOworICAgICAgICAgICAgICAgIGQuY29ubmVjdChhbmltLCAiYmVmb3JlQmVn
aW4iLCBhbmltLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBtID0g
e307CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIHAgaW4gdGhpcy5wcm9wZXJ0aWVz
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzaGFsbG93IGNvcHkg
b2YgcHJvcGVydGllcyBpbnRvIHBtIGJlY2F1c2Ugd2Ugb3ZlcndyaXRlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgdmFsdWVzIGJlbG93LiBJbiBwYXJ0aWN1bGFyIGlm
IHN0YXJ0L2VuZCBhcmUgZnVuY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIHRoZW0gb3IgdGhlIGZ1bmN0aW9ucyB3b24n
dCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWQgaWYgdGhlIGFu
aW1hdGlvbiBpcyByZXVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHAg
PT0gIndpZHRoIiB8fCBwID09ICJoZWlnaHQiKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLm5vZGUuZGlzcGxheSA9ICJibG9jayI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHByb3AgPSB0aGlzLnByb3BlcnRpZXNbcF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmKGQuaXNGdW5jdGlvbihwcm9wKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcCA9IHByb3Aobik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IHBtW3BdID0gX21p
eGluKHt9LCAoZC5pc09iamVjdChwcm9wKSA/IHByb3A6IHsgZW5kOiBwcm9wIH0pKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkLmlzRnVuY3Rpb24ocHJvcC5zdGFydCkp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Auc3RhcnQgPSBw
cm9wLnN0YXJ0KG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGQuaXNGdW5jdGlvbihwcm9wLmVuZCkpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AuZW5kID0gcHJvcC5lbmQo
bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGlzQ29sb3IgPSAocC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImNv
bG9yIikgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdl
dFN0eWxlKG5vZGUsIHApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGRvam8uc3R5bGUobm9kZSwgImhlaWdodCIpIGNhbiByZXR1cm4gImF1dG8iIG9yICIiIG9u
IElFOyB0aGlzIGlzIG1vcmUgcmVsaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHYgPSB7IGhlaWdodDogbm9kZS5vZmZzZXRIZWlnaHQsIHdpZHRoOiBu
b2RlLm9mZnNldFdpZHRoIH1bcF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYodiAhPT0gdW5kZWZpbmVkKXsgcmV0dXJuIHY7IH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2ID0gZC5zdHlsZShub2RlLCBwKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHAgPT0gIm9wYWNpdHkiKSA/ICt2
IDogKGlzQ29sb3IgPyB2IDogcGFyc2VGbG9hdCh2KSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISgiZW5kIiBp
biBwcm9wKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5l
bmQgPSBnZXRTdHlsZShuLCBwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVs
c2UgaWYoISgic3RhcnQiIGluIHByb3ApKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wLnN0YXJ0ID0gZ2V0U3R5bGUobiwgcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihp
c0NvbG9yKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wLnN0
YXJ0ID0gbmV3IGQuQ29sb3IocHJvcC5zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcC5lbmQgPSBuZXcgZC5Db2xvcihwcm9wLmVuZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3Auc3RhcnQgPSAocCA9PSAib3BhY2l0eSIpID8gK3Byb3Auc3Rh
cnQgOiBwYXJzZUZsb2F0KHByb3Auc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmN1cnZlID0gbmV3IFByb3BMaW5lKHBtKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBkLmNvbm5lY3QoYW5pbSwgIm9uQW5pbWF0ZSIsIGQuaGl0Y2goZCwgInN0
eWxlIiwgYW5pbS5ub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFuaW07IC8vIGRvam8u
QW5pbWF0aW9uCisgICAgICAgIH07CisKKyAgICAgICAgZG9qby5hbmltID0gZnVuY3Rpb24oICAg
LypET01Ob2RlfFN0cmluZyovICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPYmplY3QqLyAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKkludGVnZXI/Ki8gICAgICAgICAgICBkdXJhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypGdW5j
dGlvbj8qLyAgICAgICAgICAgZWFzaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKkZ1bmN0aW9uPyovICAgICAgICAgICBvbkVuZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LypJbnRlZ2VyPyovICAgICAgICAgICAgZGVsYXkpeworICAgICAgICAgICAgICAgIC8vICAgICAg
c3VtbWFyeToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgQSBzaW1wbGVyIGludGVy
ZmFjZSB0byBgZG9qby5hbmltYXRlUHJvcGVydHkoKWAsIGFsc28gcmV0dXJucworICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiBgZG9qby5BbmltYXRpb25gIGJ1
dCBiZWdpbnMgdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBp
bW1lZGlhdGVseSwgdW5saWtlIG5lYXJseSBldmVyeSBvdGhlciBEb2pvIGFuaW1hdGlvbiBBUEku
CisgICAgICAgICAgICAgICAgLy8gICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgYGRvam8uYW5pbWAgaXMgYSBzaW1wbGVyIChidXQgc29tZXdoYXQgbGVz
cyBwb3dlcmZ1bCkgdmVyc2lvbgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBvZiBg
ZG9qby5hbmltYXRlUHJvcGVydHlgLiAgSXQgdXNlcyBkZWZhdWx0cyBmb3IgbWFueSBiYXNpYyBw
cm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuZCBhbGxvd3MgZm9y
IHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0byBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZQorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBwYWNrZWQgInByb3BlcnR5IGJhZyIgd2hpY2ggaXMg
dXNlZCBmb3Igb3RoZXIgRG9qbyBhbmltYXRpb24KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgbWV0aG9kcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBUaGUgYGRvam8uQW5pbWF0aW9uYCBvYmplY3QgcmV0dXJuZWQgZnJvbSBgZG9q
by5hbmltYCB3aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFscmVhZHkg
cGxheWluZyB3aGVuIGl0IGlzIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiwgc28KKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgY2FsbGluZyBwbGF5KCkgb24gaXQgYWdhaW4gaXMg
KHVzdWFsbHkpIGEgbm8tb3AuCisgICAgICAgICAgICAgICAgLy8gICAgICBub2RlOgorICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICBhIERPTSBub2RlIG9yIHRoZSBpZCBvZiBhIG5vZGUg
dG8gYW5pbWF0ZSBDU1MgcHJvcGVydGllcyBvbgorICAgICAgICAgICAgICAgIC8vICAgICAgZHVy
YXRpb246CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgbWls
bGlzZWNvbmRzIG92ZXIgd2hpY2ggdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBzaG91bGQgcnVuLiBEZWZhdWx0cyB0byB0aGUgZ2xvYmFsIGFuaW1hdGlvbiBk
ZWZhdWx0IGR1cmF0aW9uCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICgzNTBtcyku
CisgICAgICAgICAgICAgICAgLy8gICAgICBlYXNpbmc6CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIEFuIGVhc2luZyBmdW5jdGlvbiBvdmVyIHdoaWNoIHRvIGNhbGN1bGF0ZSBhY2Nl
bGVyYXRpb24KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYW5kIGRlY2VsZXJhdGlv
biBvZiB0aGUgYW5pbWF0aW9uIHRocm91Z2ggaXRzIGR1cmF0aW9uLgorICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICBBIGRlZmF1bHQgZWFzaW5nIGFsZ29yaXRobSBpcyBwcm92aWRlZCwg
YnV0IHlvdSBtYXkKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcGx1ZyBpbiBhbnkg
eW91IHdpc2guIEEgbGFyZ2Ugc2VsZWN0aW9uIG9mIGVhc2luZyBhbGdvcml0aG1zCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGFyZSBhdmFpbGFibGUgaW4gYGRvam8uZnguZWFzaW5n
YC4KKyAgICAgICAgICAgICAgICAvLyAgICAgIG9uRW5kOgorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBhbmltYXRpb24gZmlu
aXNoZXMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgcnVubmluZy4KKyAgICAgICAg
ICAgICAgICAvLyAgICAgIGRlbGF5OgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBU
aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBiZWdpbm5pbmcgdGhlCisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgIGFuaW1hdGlvbiBieS4gVGhlIGRlZmF1bHQgaXMgMC4K
KyAgICAgICAgICAgICAgICAvLyAgICAgIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgIEZhZGUgb3V0IGEgbm9kZQorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAg
ICBkb2pvLmFuaW0oImlkIiwgeyBvcGFjaXR5OiAwIH0pOworICAgICAgICAgICAgICAgIC8vICAg
ICAgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgRmFkZSBvdXQgYSBu
b2RlIG92ZXIgYSBmdWxsIHNlY29uZAorICAgICAgICAgICAgICAgIC8vICAgICAgfCAgICAgICBk
b2pvLmFuaW0oImlkIiwgeyBvcGFjaXR5OiAwIH0sIDEwMDApOworICAgICAgICAgICAgICAgIHJl
dHVybiBkLmFuaW1hdGVQcm9wZXJ0eSh7IC8vIGRvam8uQW5pbWF0aW9uCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246
IGR1cmF0aW9uIHx8IGQuQW5pbWF0aW9uLnByb3RvdHlwZS5kdXJhdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICBlYXNpbmc6IGVhc2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uRW5kOiBvbkVu
ZAorICAgICAgICAgICAgICAgIH0pLnBsYXkoZGVsYXkgfHwgMCk7CisgICAgICAgIH07Cit9KSgp
OworCit9CisKK2lmKCFkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5icm93c2VyIl0peyAv
L19oYXNSZXNvdXJjZSBjaGVja3MgYWRkZWQgYnkgYnVpbGQuIERvIG5vdCB1c2UgX2hhc1Jlc291
cmNlIGRpcmVjdGx5IGluIHlvdXIgY29kZS4KK2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNl
LmJyb3dzZXIiXSA9IHRydWU7Citkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UuYnJvd3NlciIpOwor
CisKKworCisKKworCisKKworICAgICAgICAvL05lZWQgdGhpcyB0byBiZSB0aGUgbGFzdCBjb2Rl
IHNlZ21lbnQgaW4gYmFzZSwgc28gZG8gbm90IHBsYWNlIGFueQorICAgICAgICAvL2Rvam8vcmVx
dWlyZUlmIGNhbGxzIGluIHRoaXMgZmlsZS8gT3RoZXJ3aXNlLCBkdWUgdG8gaG93IHRoZSBidWls
ZCBzeXN0ZW0KKyAgICAgICAgLy9wdXRzIGFsbCByZXF1aXJlSWYgZGVwZW5kZW5jaWVzIGFmdGVy
IHRoZSBjdXJyZW50IGZpbGUsIHRoZSByZXF1aXJlIGNhbGxzCisgICAgICAgIC8vY291bGQgYmUg
Y2FsbGVkIGJlZm9yZSBhbGwgb2YgYmFzZSBpcyBkZWZpbmVkLworICAgICAgICBkb2pvLmZvckVh
Y2goZG9qby5jb25maWcucmVxdWlyZSwgZnVuY3Rpb24oaSl7CisgICAgICAgICAgICAgICAgZG9q
b1sicmVxdWlyZSJdKGkpOworICAgICAgICB9KTsKKworfQorCitpZighZG9qby5faGFzUmVzb3Vy
Y2VbImRvam8uX2Jhc2UiXSl7IC8vX2hhc1Jlc291cmNlIGNoZWNrcyBhZGRlZCBieSBidWlsZC4g
RG8gbm90IHVzZSBfaGFzUmVzb3VyY2UgZGlyZWN0bHkgaW4geW91ciBjb2RlLgorZG9qby5faGFz
UmVzb3VyY2VbImRvam8uX2Jhc2UiXSA9IHRydWU7Citkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2Ui
KTsKKworCisKKworCisKKworCisKKworCit9CisKKyAgICAgICAgLy9JTlNFUlQgZG9qby5pMThu
Ll9wcmVsb2FkTG9jYWxpemF0aW9ucyBIRVJFCisKKyAgICAgICAgLy9DaGVjayBpZiBkb2N1bWVu
dCBhbHJlYWR5IGNvbXBsZXRlLCBhbmQgaWYgc28sIGp1c3QgdHJpZ2dlciBwYWdlIGxvYWQKKyAg
ICAgICAgLy9saXN0ZW5lcnMuIE5PVEU6IGRvZXMgbm90IHdvcmsgd2l0aCBGaXJlZm94IGJlZm9y
ZSAzLjYuIFRvIHN1cHBvcnQKKyAgICAgICAgLy90aG9zZSBicm93c2Vycywgc2V0IGRqQ29uZmln
LmFmdGVyT25Mb2FkID0gdHJ1ZSB3aGVuIHlvdSBrbm93IERvam8gaXMgYWRkZWQKKyAgICAgICAg
Ly9hZnRlciBwYWdlIGxvYWQuIFVzaW5nIGEgdGltZW91dCBzbyB0aGUgcmVzdCBvZiB0aGlzCisg
ICAgICAgIC8vc2NyaXB0IGdldHMgZXZhbHVhdGVkIHByb3Blcmx5LiBUaGlzIHdvcmsgbmVlZHMg
dG8gaGFwcGVuIGFmdGVyIHRoZQorICAgICAgICAvL2Rvam8uY29uZmlnLnJlcXVpcmUgd29yayBk
b25lIGluIGRvam8uX2Jhc2UuCisgICAgICAgIGlmKGRvam8uaXNCcm93c2VyICYmIChkb2N1bWVu
dC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiIHx8IGRvam8uY29uZmlnLmFmdGVyT25Mb2FkKSl7
CisgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZG9qby5fbG9hZEluaXQsIDEwMCk7
CisgICAgICAgIH0KK30pKCk7CisKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFl
by9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iODM1MjBhM2JjYjI4MzJkMmRiMjYzZTRkMzgzMmU2OTRhZTIxMGQzCi0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVv
L3dlYi9saWIvanF1ZXJ5LTEuNi40LmpzCkBAIC0wLDAgKzEsOTA0NiBAQAorLyohCisgKiBqUXVl
cnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYxLjYuNAorICogaHR0cDovL2pxdWVyeS5jb20vCisgKgor
ICogQ29weXJpZ2h0IDIwMTEsIEpvaG4gUmVzaWcKKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhl
IE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgorICogaHR0cDovL2pxdWVyeS5vcmcvbGlj
ZW5zZQorICoKKyAqIEluY2x1ZGVzIFNpenpsZS5qcworICogaHR0cDovL3NpenpsZWpzLmNvbS8K
KyAqIENvcHlyaWdodCAyMDExLCBUaGUgRG9qbyBGb3VuZGF0aW9uCisgKiBSZWxlYXNlZCB1bmRl
ciB0aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCisgKgorICogRGF0ZTogTW9uIFNlcCAx
MiAxODo1NDo0OCAyMDExIC0wNDAwCisgKi8KKyhmdW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQg
KSB7CisKKy8vIFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBhY2NvcmRpbmdseSB3aXRoIHdpbmRv
dyBhcmd1bWVudCAoc2FuZGJveCkKK3ZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCwKKyAg
ICAgICAgbmF2aWdhdG9yID0gd2luZG93Lm5hdmlnYXRvciwKKyAgICAgICAgbG9jYXRpb24gPSB3
aW5kb3cubG9jYXRpb247Cit2YXIgalF1ZXJ5ID0gKGZ1bmN0aW9uKCkgeworCisvLyBEZWZpbmUg
YSBsb2NhbCBjb3B5IG9mIGpRdWVyeQordmFyIGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
Y29udGV4dCApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1
YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVy
eSApOworICAgICAgICB9LAorCisgICAgICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9m
IG92ZXJ3cml0ZQorICAgICAgICBfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSwKKworICAgICAgICAv
LyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQorICAgICAgICBfJCA9IHdpbmRv
dy4kLAorCisgICAgICAgIC8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5
KGRvY3VtZW50KQorICAgICAgICByb290alF1ZXJ5LAorCisgICAgICAgIC8vIEEgc2ltcGxlIHdh
eSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzIG9yIElEIHN0cmluZ3MKKyAgICAgICAgLy8gUHJp
b3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5
NTIxKQorICAgICAgICBxdWlja0V4cHIgPSAvXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMo
W1x3XC1dKikkKS8sCisKKyAgICAgICAgLy8gQ2hlY2sgaWYgYSBzdHJpbmcgaGFzIGEgbm9uLXdo
aXRlc3BhY2UgY2hhcmFjdGVyIGluIGl0CisgICAgICAgIHJub3R3aGl0ZSA9IC9cUy8sCisKKyAg
ICAgICAgLy8gVXNlZCBmb3IgdHJpbW1pbmcgd2hpdGVzcGFjZQorICAgICAgICB0cmltTGVmdCA9
IC9eXHMrLywKKyAgICAgICAgdHJpbVJpZ2h0ID0gL1xzKyQvLAorCisgICAgICAgIC8vIENoZWNr
IGZvciBkaWdpdHMKKyAgICAgICAgcmRpZ2l0ID0gL1xkLywKKworICAgICAgICAvLyBNYXRjaCBh
IHN0YW5kYWxvbmUgdGFnCisgICAgICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4oPzo8
XC9cMT4pPyQvLAorCisgICAgICAgIC8vIEpTT04gUmVnRXhwCisgICAgICAgIHJ2YWxpZGNoYXJz
ID0gL15bXF0sOnt9XHNdKiQvLAorICAgICAgICBydmFsaWRlc2NhcGUgPSAvXFwoPzpbIlxcXC9i
Zm5ydF18dVswLTlhLWZBLUZdezR9KS9nLAorICAgICAgICBydmFsaWR0b2tlbnMgPSAvIlteIlxc
XG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/
L2csCisgICAgICAgIHJ2YWxpZGJyYWNlcyA9IC8oPzpefDp8LCkoPzpccypcWykrL2csCisKKyAg
ICAgICAgLy8gVXNlcmFnZW50IFJlZ0V4cAorICAgICAgICByd2Via2l0ID0gLyh3ZWJraXQpWyBc
L10oW1x3Ll0rKS8sCisgICAgICAgIHJvcGVyYSA9IC8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwv
XShbXHcuXSspLywKKyAgICAgICAgcm1zaWUgPSAvKG1zaWUpIChbXHcuXSspLywKKyAgICAgICAg
cm1vemlsbGEgPSAvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLAorCisgICAgICAgIC8v
IE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZworICAgICAgICByZGFzaEFscGhh
ID0gLy0oW2Etel18WzAtOV0pL2lnLAorICAgICAgICBybXNQcmVmaXggPSAvXi1tcy0vLAorCisg
ICAgICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNl
KCkKKyAgICAgICAgZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKCBsZXR0ZXIgKyAiIiApLnRvVXBwZXJDYXNlKCk7CisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gS2VlcCBhIFVzZXJBZ2VudCBzdHJpbmcgZm9yIHVzZSB3aXRoIGpR
dWVyeS5icm93c2VyCisgICAgICAgIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQsCisK
KyAgICAgICAgLy8gRm9yIG1hdGNoaW5nIHRoZSBlbmdpbmUgYW5kIHZlcnNpb24gb2YgdGhlIGJy
b3dzZXIKKyAgICAgICAgYnJvd3Nlck1hdGNoLAorCisgICAgICAgIC8vIFRoZSBkZWZlcnJlZCB1
c2VkIG9uIERPTSByZWFkeQorICAgICAgICByZWFkeUxpc3QsCisKKyAgICAgICAgLy8gVGhlIHJl
YWR5IGV2ZW50IGhhbmRsZXIKKyAgICAgICAgRE9NQ29udGVudExvYWRlZCwKKworICAgICAgICAv
LyBTYXZlIGEgcmVmZXJlbmNlIHRvIHNvbWUgY29yZSBtZXRob2RzCisgICAgICAgIHRvU3RyaW5n
ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKKyAgICAgICAgaGFzT3duID0gT2JqZWN0LnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKKyAgICAgICAgcHVzaCA9IEFycmF5LnByb3RvdHlwZS5w
dXNoLAorICAgICAgICBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwKKyAgICAgICAgdHJp
bSA9IFN0cmluZy5wcm90b3R5cGUudHJpbSwKKyAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3Rv
dHlwZS5pbmRleE9mLAorCisgICAgICAgIC8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCisgICAg
ICAgIGNsYXNzMnR5cGUgPSB7fTsKKworalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsK
KyAgICAgICAgY29uc3RydWN0b3I6IGpRdWVyeSwKKyAgICAgICAgaW5pdDogZnVuY3Rpb24oIHNl
bGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkgeworICAgICAgICAgICAgICAgIHZhciBtYXRj
aCwgZWxlbSwgcmV0LCBkb2M7CisKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgJCgiIiksICQo
bnVsbCksIG9yICQodW5kZWZpbmVkKQorICAgICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gSGFuZGxlICQoRE9NRWxlbWVudCkKKyAgICAgICAgICAg
ICAgICBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5jb250ZXh0ID0gdGhpc1swXSA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5sZW5ndGggPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVGhlIGJvZHkgZWxlbWVu
dCBvbmx5IGV4aXN0cyBvbmNlLCBvcHRpbWl6ZSBmaW5kaW5nIGl0CisgICAgICAgICAgICAgICAg
aWYgKCBzZWxlY3RvciA9PT0gImJvZHkiICYmICFjb250ZXh0ICYmIGRvY3VtZW50LmJvZHkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXNbMF0gPSBkb2N1bWVudC5ib2R5OworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5sZW5ndGggPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIEhUTUwg
c3RyaW5ncworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5n
IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFyZSB3ZSBkZWFsaW5nIHdpdGggSFRN
TCBzdHJpbmcgb3IgYW4gSUQ/CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9y
LmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3IubGVuZ3RoIC0g
MSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5k
IHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdOworCisg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRjaCA9IHF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJpZnkgYSBtYXRj
aCwgYW5kIHRoYXQgbm8gY29udGV4dCB3YXMgc3BlY2lmaWVkIGZvciAjaWQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChh
cnJheSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4
dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbMF0gOiBjb250ZXh0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IChjb250ZXh0ID8gY29udGV4dC5vd25l
ckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHNpbmdsZSBzdHJpbmcgaXMgcGFzc2VkIGluIGFu
ZCBpdCdzIGEgc2luZ2xlIHRhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGp1c3QgZG8gYSBjcmVhdGVFbGVtZW50IGFuZCBza2lwIHRoZSByZXN0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcnNpbmdsZVRhZy5leGVjKCBz
ZWxlY3RvciApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCByZXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gWyBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCByZXRbMV0gKSBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZm4uYXR0ci5jYWxsKCBz
ZWxlY3RvciwgY29udGV4dCwgdHJ1ZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IFsgZG9jLmNyZWF0ZUVsZW1l
bnQoIHJldFsxXSApIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgbWF0Y2hbMV0gXSwgWyBkb2MgXSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSAocmV0
LmNhY2hlYWJsZSA/IGpRdWVyeS5jbG9uZShyZXQuZnJhZ21lbnQpIDogcmV0LmZyYWdtZW50KS5j
aGlsZE5vZGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWVy
Z2UoIHRoaXMsIHNlbGVjdG9yICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSEFORExFOiAkKCIjaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbMl0gKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFj
a2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBh
cmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVtcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFt
ZSBpbnN0ZWFkIG9mIElECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGVsZW0uaWQgIT09IG1hdGNoWzJdICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdGpRdWVyeS5m
aW5kKCBzZWxlY3RvciApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPdGhlcndpc2UsIHdlIGluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRo
ZSBqUXVlcnkgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmxlbmd0aCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzWzBdID0gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4
cHIsICQoLi4uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFjb250ZXh0
IHx8IGNvbnRleHQuanF1ZXJ5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKGNvbnRleHQgfHwgcm9vdGpRdWVyeSkuZmluZCggc2VsZWN0b3IgKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQp
LmZpbmQoZXhwcikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICku
ZmluZCggc2VsZWN0b3IgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIEhBTkRMRTogJChmdW5jdGlvbikKKyAgICAgICAgICAgICAgICAvLyBTaG9ydGN1
dCBmb3IgZG9jdW1lbnQgcmVhZHkKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciApOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0Owor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWFrZUFy
cmF5KCBzZWxlY3RvciwgdGhpcyApOworICAgICAgICB9LAorCisgICAgICAgIC8vIFN0YXJ0IHdp
dGggYW4gZW1wdHkgc2VsZWN0b3IKKyAgICAgICAgc2VsZWN0b3I6ICIiLAorCisgICAgICAgIC8v
IFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKKyAgICAgICAganF1ZXJ5
OiAiMS42LjQiLAorCisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBv
YmplY3QgaXMgMAorICAgICAgICBsZW5ndGg6IDAsCisKKyAgICAgICAgLy8gVGhlIG51bWJlciBv
ZiBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQKKyAgICAgICAg
c2l6ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoOwor
ICAgICAgICB9LAorCisgICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBzbGljZS5jYWxsKCB0aGlzLCAwICk7CisgICAgICAgIH0sCisKKyAgICAgICAg
Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUgorICAg
ICAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJh
eQorICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bSA9PSBudWxsID8KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGEgJ2Ns
ZWFuJyBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0FycmF5KCkgOgorCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0CisgICAgICAg
ICAgICAgICAgICAgICAgICAoIG51bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDog
dGhpc1sgbnVtIF0gKTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBUYWtlIGFuIGFycmF5IG9m
IGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrCisgICAgICAgIC8vIChyZXR1cm5p
bmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQorICAgICAgICBwdXNoU3RhY2s6IGZ1bmN0
aW9uKCBlbGVtcywgbmFtZSwgc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgLy8gQnVpbGQg
YSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKKyAgICAgICAgICAgICAgICB2YXIgcmV0
ID0gdGhpcy5jb25zdHJ1Y3RvcigpOworCisgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNB
cnJheSggZWxlbXMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJl
dCwgZWxlbXMgKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgZWxlbXMgKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFz
IGEgcmVmZXJlbmNlKQorICAgICAgICAgICAgICAgIHJldC5wcmV2T2JqZWN0ID0gdGhpczsKKwor
ICAgICAgICAgICAgICAgIHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0OworCisgICAgICAgICAg
ICAgICAgaWYgKCBuYW1lID09PSAiZmluZCIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsgKHRoaXMuc2VsZWN0b3IgPyAiICIgOiAiIikg
KyBzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBuYW1lICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICIuIiArIG5h
bWUgKyAiKCIgKyBzZWxlY3RvciArICIpIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAorICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRXhlY3V0ZSBhIGNh
bGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KKyAgICAgICAgLy8g
KFlvdSBjYW4gc2VlZCB0aGUgYXJndW1lbnRzIHdpdGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRo
aXMgaXMKKyAgICAgICAgLy8gb25seSB1c2VkIGludGVybmFsbHkuKQorICAgICAgICBlYWNoOiBm
dW5jdGlvbiggY2FsbGJhY2ssIGFyZ3MgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5lYWNoKCB0aGlzLCBjYWxsYmFjaywgYXJncyApOworICAgICAgICB9LAorCisgICAgICAgIHJl
YWR5OiBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgICAgICAgICAgLy8gQXR0YWNoIHRoZSBsaXN0
ZW5lcnMKKyAgICAgICAgICAgICAgICBqUXVlcnkuYmluZFJlYWR5KCk7CisKKyAgICAgICAgICAg
ICAgICAvLyBBZGQgdGhlIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgcmVhZHlMaXN0LmRvbmUo
IGZuICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAg
ICAgICBlcTogZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IC0x
ID8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpY2UoIGkgKSA6CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnNsaWNlKCBpLCAraSArIDEgKTsKKyAgICAgICAgfSwKKworICAg
ICAgICBmaXJzdDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXEo
IDAgKTsKKyAgICAgICAgfSwKKworICAgICAgICBsYXN0OiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lcSggLTEgKTsKKyAgICAgICAgfSwKKworICAgICAgICBzbGlj
ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBz
bGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICksCisgICAgICAgICAgICAgICAgICAgICAgICAi
c2xpY2UiLCBzbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpICk7CisgICAgICAgIH0sCisK
KyAgICAgICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGks
IGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgIH0sCisKKyAgICAgICAgZW5k
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8
IHRoaXMuY29uc3RydWN0b3IobnVsbCk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRm9yIGlu
dGVybmFsIHVzZSBvbmx5LgorICAgICAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRo
b2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC4KKyAgICAgICAgcHVzaDogcHVzaCwKKyAgICAg
ICAgc29ydDogW10uc29ydCwKKyAgICAgICAgc3BsaWNlOiBbXS5zcGxpY2UKK307CisKKy8vIEdp
dmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3Rh
bnRpYXRpb24KK2pRdWVyeS5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKKworalF1ZXJ5
LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG9w
dGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLAorICAgICAgICAgICAg
ICAgIHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwKKyAgICAgICAgICAgICAgICBpID0gMSwK
KyAgICAgICAgICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLAorICAgICAgICAgICAg
ICAgIGRlZXAgPSBmYWxzZTsKKworICAgICAgICAvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0
aW9uCisgICAgICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgeworICAgICAg
ICAgICAgICAgIGRlZXAgPSB0YXJnZXQ7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYXJndW1l
bnRzWzFdIHx8IHt9OworICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRo
ZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBpID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2li
bGUgaW4gZGVlcCBjb3B5KQorICAgICAgICBpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3Qi
ICYmICFqUXVlcnkuaXNGdW5jdGlvbih0YXJnZXQpICkgeworICAgICAgICAgICAgICAgIHRhcmdl
dCA9IHt9OworICAgICAgICB9CisKKyAgICAgICAgLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYg
b25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkCisgICAgICAgIGlmICggbGVuZ3RoID09PSBpICkg
eworICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXM7CisgICAgICAgICAgICAgICAgLS1pOwor
ICAgICAgICB9CisKKyAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAg
ICAgICAgICAgLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcworICAg
ICAgICAgICAgICAgIGlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkgIT0gbnVsbCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0WyBuYW1lIF07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvcHkgPSBvcHRpb25zWyBuYW1lIF07CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gY29weSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5cworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVy
eS5pc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KGNv
cHkpKSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y29weUlzQXJyYXkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3B5SXNBcnJheSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/
IHNyYyA6IFtdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
b25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNs
b25lIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRb
IG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVl
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb3B5ICE9PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0WyBuYW1lIF0gPSBjb3B5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QKKyAgICAgICAgcmV0dXJuIHRh
cmdldDsKK307CisKK2pRdWVyeS5leHRlbmQoeworICAgICAgICBub0NvbmZsaWN0OiBmdW5jdGlv
biggZGVlcCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuJCA9IF8kOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVl
cnkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5OworICAg
ICAgICB9LAorCisgICAgICAgIC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRv
IHRydWUgb25jZSBpdCBvY2N1cnMuCisgICAgICAgIGlzUmVhZHk6IGZhbHNlLAorCisgICAgICAg
IC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUK
KyAgICAgICAgLy8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODEKKyAgICAgICAgcmVh
ZHlXYWl0OiAxLAorCisgICAgICAgIC8vIEhvbGQgKG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVu
dAorICAgICAgICBob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkgeworICAgICAgICAgICAgICAg
IGlmICggaG9sZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeVdhaXQr
KzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnJlYWR5KCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAg
ICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKKyAgICAgICAgcmVhZHk6IGZ1bmN0
aW9uKCB3YWl0ICkgeworICAgICAgICAgICAgICAgIC8vIEVpdGhlciBhIHJlbGVhc2VkIGhvbGQg
b3IgYW4gRE9NcmVhZHkvbG9hZCBldmVudCBhbmQgbm90IHlldCByZWFkeQorICAgICAgICAgICAg
ICAgIGlmICggKHdhaXQgPT09IHRydWUgJiYgIS0talF1ZXJ5LnJlYWR5V2FpdCkgfHwgKHdhaXQg
IT09IHRydWUgJiYgIWpRdWVyeS5pc1JlYWR5KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSBib2R5IGV4aXN0cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxp
dHRsZSBvdmVyemVhbG91cyAodGlja2V0ICM1NDQzKS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWRvY3VtZW50LmJvZHkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGUg
RE9NIGlzIHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNSZWFkeSA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBl
dmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUg
ZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCisgICAgICAgICAgICAgICAgICAgICAgICByZWFk
eUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuZm4udHJpZ2dlciApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoICJyZWFkeSIgKS51
bmJpbmQoICJyZWFkeSIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgYmluZFJlYWR5OiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIHJlYWR5TGlzdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZWFkeUxpc3Qg
PSBqUXVlcnkuX0RlZmVycmVkKCk7CisKKyAgICAgICAgICAgICAgICAvLyBDYXRjaCBjYXNlcyB3
aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUKKyAgICAgICAgICAg
ICAgICAvLyBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgorICAgICAgICAgICAg
ICAgIGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3Jp
cHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSwgMSApOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIE1vemlsbGEsIE9wZXJhIGFuZCB3ZWJraXQgbmlnaHRs
aWVzIGN1cnJlbnRseSBzdXBwb3J0IHRoaXMgZXZlbnQKKyAgICAgICAgICAgICAgICBpZiAoIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBV
c2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2Fk
ZWQsIGZhbHNlICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgZmFsbGJhY2sgdG8g
d2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCisgICAgICAgICAgICAgICAgICAg
ICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnkucmVhZHksIGZhbHNl
ICk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBJRSBldmVudCBtb2RlbCBpcyB1c2VkCisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggZG9jdW1lbnQuYXR0YWNoRXZlbnQgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgZmlyaW5nIGJlZm9yZSBvbmxvYWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBtYXliZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCAib25yZWFkeXN0
YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawor
ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCAib25sb2FkIiwgalF1
ZXJ5LnJlYWR5ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIElFIGFuZCBub3Qg
YSBmcmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8g
c2VlIGlmIHRoZSBkb2N1bWVudCBpcyByZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHRvcGxldmVsID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID0gd2luZG93LmZyYW1lRWxlbWVu
dCA9PSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9s
bCAmJiB0b3BsZXZlbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9TY3Jv
bGxDaGVjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICAvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRldGFp
bHMgY29uY2VybmluZyBpc0Z1bmN0aW9uLgorICAgICAgICAvLyBTaW5jZSB2ZXJzaW9uIDEuMywg
RE9NIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBsaWtlIGFsZXJ0CisgICAgICAgIC8vIGFyZW4ndCBz
dXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCisgICAgICAgIGlzRnVu
Y3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS50
eXBlKG9iaikgPT09ICJmdW5jdGlvbiI7CisgICAgICAgIH0sCisKKyAgICAgICAgaXNBcnJheTog
QXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnkudHlwZShvYmopID09PSAiYXJyYXkiOworICAgICAgICB9LAorCisgICAgICAgIC8v
IEEgY3J1ZGUgd2F5IG9mIGRldGVybWluaW5nIGlmIGFuIG9iamVjdCBpcyBhIHdpbmRvdworICAg
ICAgICBpc1dpbmRvdzogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
b2JqICYmIHR5cGVvZiBvYmogPT09ICJvYmplY3QiICYmICJzZXRJbnRlcnZhbCIgaW4gb2JqOwor
ICAgICAgICB9LAorCisgICAgICAgIGlzTmFOOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBvYmogPT0gbnVsbCB8fCAhcmRpZ2l0LnRlc3QoIG9iaiApIHx8IGlzTmFO
KCBvYmogKTsKKyAgICAgICAgfSwKKworICAgICAgICB0eXBlOiBmdW5jdGlvbiggb2JqICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/CisgICAgICAgICAgICAgICAgICAg
ICAgICBTdHJpbmcoIG9iaiApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzMnR5cGVb
IHRvU3RyaW5nLmNhbGwob2JqKSBdIHx8ICJvYmplY3QiOworICAgICAgICB9LAorCisgICAgICAg
IGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgICAgICAgICAgLy8gTXVz
dCBiZSBhbiBPYmplY3QuCisgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxz
byBoYXZlIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHku
CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgRE9NIG5vZGVzIGFuZCB3aW5kb3cg
b2JqZWN0cyBkb24ndCBwYXNzIHRocm91Z2gsIGFzIHdlbGwKKyAgICAgICAgICAgICAgICBpZiAo
ICFvYmogfHwgalF1ZXJ5LnR5cGUob2JqKSAhPT0gIm9iamVjdCIgfHwgb2JqLm5vZGVUeXBlIHx8
IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVz
dCBiZSBPYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2JqLmNvbnN0cnVjdG9y
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoYXNPd24uY2FsbChvYmosICJj
b25zdHJ1Y3RvciIpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoYXNPd24u
Y2FsbChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJRTgsOSBXaWxsIHRocm93IGV4Y2VwdGlvbnMgb24gY2VydGFpbiBo
b3N0IG9iamVjdHMgIzk4OTcKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBPd24gcHJvcGVydGllcyBh
cmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCwKKyAgICAgICAgICAgICAgICAv
LyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi4KKworICAg
ICAgICAgICAgICAgIHZhciBrZXk7CisgICAgICAgICAgICAgICAgZm9yICgga2V5IGluIG9iaiAp
IHt9CisKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3du
LmNhbGwoIG9iaiwga2V5ICk7CisgICAgICAgIH0sCisKKyAgICAgICAgaXNFbXB0eU9iamVjdDog
ZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBvYmog
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorCisgICAgICAg
IGVycm9yOiBmdW5jdGlvbiggbXNnICkgeworICAgICAgICAgICAgICAgIHRocm93IG1zZzsKKyAg
ICAgICAgfSwKKworICAgICAgICBwYXJzZUpTT046IGZ1bmN0aW9uKCBkYXRhICkgeworICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciIHx8ICFkYXRhICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBp
cyByZW1vdmVkIChJRSBjYW4ndCBoYW5kbGUgaXQpCisgICAgICAgICAgICAgICAgZGF0YSA9IGpR
dWVyeS50cmltKCBkYXRhICk7CisKKyAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNl
IHVzaW5nIHRoZSBuYXRpdmUgSlNPTiBwYXJzZXIgZmlyc3QKKyAgICAgICAgICAgICAgICBpZiAo
IHdpbmRvdy5KU09OICYmIHdpbmRvdy5KU09OLnBhcnNlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHdpbmRvdy5KU09OLnBhcnNlKCBkYXRhICk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNvbWluZyBkYXRhIGlzIGFj
dHVhbCBKU09OCisgICAgICAgICAgICAgICAgLy8gTG9naWMgYm9ycm93ZWQgZnJvbSBodHRwOi8v
anNvbi5vcmcvanNvbjIuanMKKyAgICAgICAgICAgICAgICBpZiAoIHJ2YWxpZGNoYXJzLnRlc3Qo
IGRhdGEucmVwbGFjZSggcnZhbGlkZXNjYXBlLCAiQCIgKQorICAgICAgICAgICAgICAgICAgICAg
ICAgLnJlcGxhY2UoIHJ2YWxpZHRva2VucywgIl0iICkKKyAgICAgICAgICAgICAgICAgICAgICAg
IC5yZXBsYWNlKCBydmFsaWRicmFjZXMsICIiKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAobmV3IEZ1bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkpKCk7CisKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09O
OiAiICsgZGF0YSApOworICAgICAgICB9LAorCisgICAgICAgIC8vIENyb3NzLWJyb3dzZXIgeG1s
IHBhcnNpbmcKKyAgICAgICAgcGFyc2VYTUw6IGZ1bmN0aW9uKCBkYXRhICkgeworICAgICAgICAg
ICAgICAgIHZhciB4bWwsIHRtcDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB3aW5kb3cuRE9NUGFyc2VyICkgeyAvLyBTdGFuZGFyZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEg
LCAidGV4dC94bWwiICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBJRQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgPSBuZXcgQWN0aXZlWE9iamVjdCgg
Ik1pY3Jvc29mdC5YTUxET00iICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHht
bC5hc3luYyA9ICJmYWxzZSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbC5s
b2FkWE1MKCBkYXRhICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCAheG1sIHx8ICF4bWwu
ZG9jdW1lbnRFbGVtZW50IHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9y
IiApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggIklu
dmFsaWQgWE1MOiAiICsgZGF0YSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4geG1sOworICAgICAgICB9LAorCisgICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge30s
CisKKyAgICAgICAgLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKKyAg
ICAgICAgLy8gV29ya2Fyb3VuZHMgYmFzZWQgb24gZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCisg
ICAgICAgIC8vIGh0dHA6Ly93ZWJsb2dzLmphdmEubmV0L2Jsb2cvZHJpc2NvbGwvYXJjaGl2ZS8y
MDA5LzA5LzA4L2V2YWwtamF2YXNjcmlwdC1nbG9iYWwtY29udGV4dAorICAgICAgICBnbG9iYWxF
dmFsOiBmdW5jdGlvbiggZGF0YSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEgJiYgcm5v
dHdoaXRlLnRlc3QoIGRhdGEgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVz
ZSBleGVjU2NyaXB0IG9uIEludGVybmV0IEV4cGxvcmVyCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSB1c2UgYW4gYW5vbnltb3VzIGZ1bmN0aW9uIHNvIHRoYXQgY29udGV4dCBpcyB3aW5k
b3cKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGpRdWVyeSBpbiBGaXJl
Zm94CisgICAgICAgICAgICAgICAgICAgICAgICAoIHdpbmRvdy5leGVjU2NyaXB0IHx8IGZ1bmN0
aW9uKCBkYXRhICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbICJl
dmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSAp
KCBkYXRhICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8vIENv
bnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVs
ZXMKKyAgICAgICAgLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVm
aXggKCM5NTcyKQorICAgICAgICBjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsICJtcy0iICkucmVw
bGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApOworICAgICAgICB9LAorCisgICAgICAgIG5v
ZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5hbWUudG9V
cHBlckNhc2UoKTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBhcmdzIGlzIGZvciBpbnRlcm5h
bCB1c2FnZSBvbmx5CisgICAgICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmplY3QsIGNhbGxiYWNrLCBh
cmdzICkgeworICAgICAgICAgICAgICAgIHZhciBuYW1lLCBpID0gMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCA9IG9iamVjdC5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICBpc09iaiA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0Z1bmN0aW9uKCBvYmpl
Y3QgKTsKKworICAgICAgICAgICAgICAgIGlmICggYXJncyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaXNPYmogKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIG5hbWUgaW4gb2JqZWN0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9iamVjdFsgbmFtZSBdLCBhcmdzICkgPT09IGZh
bHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJh
Y2suYXBwbHkoIG9iamVjdFsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBvZiBlYWNoCisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNP
YmogKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb2Jq
ZWN0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2Fs
bGJhY2suY2FsbCggb2JqZWN0WyBuYW1lIF0sIG5hbWUsIG9iamVjdFsgbmFtZSBdICkgPT09IGZh
bHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJh
Y2suY2FsbCggb2JqZWN0WyBpIF0sIGksIG9iamVjdFsgaSsrIF0gKSA9PT0gZmFsc2UgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9LAorCisg
ICAgICAgIC8vIFVzZSBuYXRpdmUgU3RyaW5nLnRyaW0gZnVuY3Rpb24gd2hlcmV2ZXIgcG9zc2li
bGUKKyAgICAgICAgdHJpbTogdHJpbSA/CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIHRleHQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dCA9PSBudWxsID8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmltLmNhbGwoIHRleHQgKTsKKyAgICAgICAgICAgICAgICB9IDoKKworICAgICAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2Ugb3VyIG93biB0cmltbWluZyBmdW5jdGlvbmFsaXR5
CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGV4dCA9PSBudWxsID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnRvU3RyaW5nKCku
cmVwbGFjZSggdHJpbUxlZnQsICIiICkucmVwbGFjZSggdHJpbVJpZ2h0LCAiIiApOworICAgICAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ug
b25seQorICAgICAgICBtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnJheSwgcmVzdWx0cyApIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTsKKworICAgICAgICAgICAgICAg
IGlmICggYXJyYXkgIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB3
aW5kb3csIHN0cmluZ3MgKGFuZCBmdW5jdGlvbnMpIGFsc28gaGF2ZSAnbGVuZ3RoJworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIGV4dHJhIHR5cGVvZiBmdW5jdGlvbiBjaGVjayBpcyB0
byBwcmV2ZW50IGNyYXNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIFNhZmFyaSAy
IChTZWU6ICMzMDM5KQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHdlYWtlZCBsb2dpYyBz
bGlnaHRseSB0byBoYW5kbGUgQmxhY2tiZXJyeSA0LjcgUmVnRXhwIGlzc3VlcyAjNjkzMAorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkudHlwZSggYXJyYXkgKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcnJheS5sZW5ndGggPT0gbnVsbCB8fCB0eXBl
ID09PSAic3RyaW5nIiB8fCB0eXBlID09PSAiZnVuY3Rpb24iIHx8IHR5cGUgPT09ICJyZWdleHAi
IHx8IGpRdWVyeS5pc1dpbmRvdyggYXJyYXkgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaC5jYWxsKCByZXQsIGFycmF5ICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2Uo
IHJldCwgYXJyYXkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9LAorCisgICAgICAg
IGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnJheSApIHsKKyAgICAgICAgICAgICAgICBpZiAo
ICFhcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGluZGV4T2YgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXhPZi5jYWxsKCBhcnJheSwgZWxlbSApOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbGVuZ3RoID0g
YXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGFycmF5WyBpIF0gPT09IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfSwKKworICAgICAg
ICBtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7CisgICAgICAgICAgICAgICAgdmFy
IGkgPSBmaXJzdC5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBqID0gMDsKKworICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlY29uZC5sZW5ndGggPT09ICJudW1iZXIiICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGwgPSBzZWNvbmQubGVuZ3RoOyBqIDwg
bDsgaisrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0g
PSBzZWNvbmRbIGogXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHNlY29uZFtqXSAh
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFsg
aSsrIF0gPSBzZWNvbmRbIGorKyBdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZpcnN0Lmxlbmd0aCA9IGk7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAgICAgIH0sCisKKyAgICAgICAgZ3JlcDogZnVu
Y3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ICkgeworICAgICAgICAgICAgICAgIHZhciByZXQg
PSBbXSwgcmV0VmFsOworICAgICAgICAgICAgICAgIGludiA9ICEhaW52OworCisgICAgICAgICAg
ICAgICAgLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcworICAg
ICAgICAgICAgICAgIC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCisgICAgICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2so
IGVsZW1zWyBpIF0sIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW52ICE9PSBy
ZXRWYWwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBlbGVt
c1sgaSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBh
cmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKKyAgICAgICAgbWFwOiBmdW5jdGlvbiggZWxl
bXMsIGNhbGxiYWNrLCBhcmcgKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBrZXksIHJl
dCA9IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBqcXVlcnkgb2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlzQXJyYXkgPSBlbGVtcyBpbnN0YW5jZW9mIGpRdWVyeSB8fCBsZW5ndGggIT09IHVu
ZGVmaW5lZCAmJiB0eXBlb2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiAoICggbGVuZ3RoID4gMCAm
JiBlbGVtc1sgMCBdICYmIGVsZW1zWyBsZW5ndGggLTEgXSApIHx8IGxlbmd0aCA9PT0gMCB8fCBq
UXVlcnkuaXNBcnJheSggZWxlbXMgKSApIDsKKworICAgICAgICAgICAgICAgIC8vIEdvIHRocm91
Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpcgorICAg
ICAgICAgICAgICAgIGlmICggaXNBcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVj
dCwKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICgga2V5IGluIGVsZW1zICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGNhbGxiYWNrKCBlbGVtc1sga2V5IF0sIGtleSwgYXJnICk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGbGF0dGVuIGFueSBuZXN0
ZWQgYXJyYXlzCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtdLCBy
ZXQgKTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9y
IG9iamVjdHMKKyAgICAgICAgZ3VpZDogMSwKKworICAgICAgICAvLyBCaW5kIGEgZnVuY3Rpb24g
dG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKKyAgICAgICAg
Ly8gYXJndW1lbnRzLgorICAgICAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgewor
ICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IGZuWyBjb250ZXh0IF07CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0ID0gZm47CisgICAgICAgICAgICAgICAgICAgICAgICBmbiA9
IHRtcDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBRdWljayBjaGVj
ayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYworICAgICAg
ICAgICAgICAgIC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJl
dHVybiB1bmRlZmluZWQuCisgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24o
IGZuICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlZCBiaW5kCisgICAg
ICAgICAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSggY29udGV4dCwgYXJncy5jb25jYXQoIHNs
aWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhl
IHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWQKKyAgICAgICAg
ICAgICAgICBwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgcHJveHkuZ3VpZCB8fCBq
UXVlcnkuZ3VpZCsrOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5OworICAgICAgICB9
LAorCisgICAgICAgIC8vIE11dGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1
ZXMgdG8gYSBjb2xsZWN0aW9uCisgICAgICAgIC8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5
IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgorICAgICAgICBhY2Nlc3M6IGZ1bmN0aW9u
KCBlbGVtcywga2V5LCB2YWx1ZSwgZXhlYywgZm4sIHBhc3MgKSB7CisgICAgICAgICAgICAgICAg
dmFyIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKKworICAgICAgICAgICAgICAgIC8vIFNldHRpbmcg
bWFueSBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yga2V5ID09PSAib2Jq
ZWN0IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBrIGluIGtleSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmFjY2VzcyggZWxlbXMsIGss
IGtleVtrXSwgZXhlYywgZm4sIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbXM7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gU2V0dGluZyBvbmUgYXR0cmlidXRlCisgICAgICAgICAgICAg
ICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gT3B0aW9uYWxseSwgZnVuY3Rpb24gdmFsdWVzIGdldCBleGVjdXRlZCBpZiBleGVjIGlzIHRy
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMgPSAhcGFzcyAmJiBleGVjICYmIGpRdWVy
eS5pc0Z1bmN0aW9uKHZhbHVlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZuKCBlbGVtc1tpXSwga2V5LCBleGVjID8gdmFsdWUuY2FsbCggZWxlbXNbaV0sIGksIGZu
KCBlbGVtc1tpXSwga2V5ICkgKSA6IHZhbHVlLCBwYXNzICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtczsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBHZXR0aW5nIGFuIGF0dHJpYnV0ZQorICAg
ICAgICAgICAgICAgIHJldHVybiBsZW5ndGggPyBmbiggZWxlbXNbMF0sIGtleSApIDogdW5kZWZp
bmVkOworICAgICAgICB9LAorCisgICAgICAgIG5vdzogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgLy8gVXNlIG9mIGpRdWVyeS5icm93c2VyIGlzIGZyb3duZWQgdXBvbi4KKyAgICAgICAgLy8g
TW9yZSBkZXRhaWxzOiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1V0aWxpdGllcy9qUXVlcnkuYnJv
d3NlcgorICAgICAgICB1YU1hdGNoOiBmdW5jdGlvbiggdWEgKSB7CisgICAgICAgICAgICAgICAg
dWEgPSB1YS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gcndl
YmtpdC5leGVjKCB1YSApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICByb3BlcmEuZXhlYygg
dWEgKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgcm1zaWUuZXhlYyggdWEgKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgdWEuaW5kZXhPZigiY29tcGF0aWJsZSIpIDwgMCAmJiBybW96
aWxsYS5leGVjKCB1YSApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBbXTsKKworICAgICAg
ICAgICAgICAgIHJldHVybiB7IGJyb3dzZXI6IG1hdGNoWzFdIHx8ICIiLCB2ZXJzaW9uOiBtYXRj
aFsyXSB8fCAiMCIgfTsKKyAgICAgICAgfSwKKworICAgICAgICBzdWI6IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGpRdWVyeVN1Yiggc2VsZWN0b3IsIGNvbnRleHQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGpRdWVyeVN1Yi5mbi5pbml0KCBz
ZWxlY3RvciwgY29udGV4dCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBq
UXVlcnkuZXh0ZW5kKCB0cnVlLCBqUXVlcnlTdWIsIHRoaXMgKTsKKyAgICAgICAgICAgICAgICBq
UXVlcnlTdWIuc3VwZXJjbGFzcyA9IHRoaXM7CisgICAgICAgICAgICAgICAgalF1ZXJ5U3ViLmZu
ID0galF1ZXJ5U3ViLnByb3RvdHlwZSA9IHRoaXMoKTsKKyAgICAgICAgICAgICAgICBqUXVlcnlT
dWIuZm4uY29uc3RydWN0b3IgPSBqUXVlcnlTdWI7CisgICAgICAgICAgICAgICAgalF1ZXJ5U3Vi
LnN1YiA9IHRoaXMuc3ViOworICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5mbi5pbml0ID0gZnVu
Y3Rpb24gaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQg
aW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0ID0galF1ZXJ5U3ViKCBjb250ZXh0ICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZm4uaW5pdC5jYWxs
KCB0aGlzLCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeVN1YiApOworICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgalF1ZXJ5U3ViLmZuLmluaXQucHJvdG90eXBlID0galF1
ZXJ5U3ViLmZuOworICAgICAgICAgICAgICAgIHZhciByb290alF1ZXJ5U3ViID0galF1ZXJ5U3Vi
KGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5U3ViOworICAgICAgICB9
LAorCisgICAgICAgIGJyb3dzZXI6IHt9Cit9KTsKKworLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5
cGUgbWFwCitqUXVlcnkuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5
IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSwgZnVuY3Rpb24oaSwgbmFtZSkgeworICAg
ICAgICBjbGFzczJ0eXBlWyAiW29iamVjdCAiICsgbmFtZSArICJdIiBdID0gbmFtZS50b0xvd2Vy
Q2FzZSgpOworfSk7CisKK2Jyb3dzZXJNYXRjaCA9IGpRdWVyeS51YU1hdGNoKCB1c2VyQWdlbnQg
KTsKK2lmICggYnJvd3Nlck1hdGNoLmJyb3dzZXIgKSB7CisgICAgICAgIGpRdWVyeS5icm93c2Vy
WyBicm93c2VyTWF0Y2guYnJvd3NlciBdID0gdHJ1ZTsKKyAgICAgICAgalF1ZXJ5LmJyb3dzZXIu
dmVyc2lvbiA9IGJyb3dzZXJNYXRjaC52ZXJzaW9uOworfQorCisvLyBEZXByZWNhdGVkLCB1c2Ug
alF1ZXJ5LmJyb3dzZXIud2Via2l0IGluc3RlYWQKK2lmICggalF1ZXJ5LmJyb3dzZXIud2Via2l0
ICkgeworICAgICAgICBqUXVlcnkuYnJvd3Nlci5zYWZhcmkgPSB0cnVlOworfQorCisvLyBJRSBk
b2Vzbid0IG1hdGNoIG5vbi1icmVha2luZyBzcGFjZXMgd2l0aCBccworaWYgKCBybm90d2hpdGUu
dGVzdCggIlx4QTAiICkgKSB7CisgICAgICAgIHRyaW1MZWZ0ID0gL15bXHNceEEwXSsvOworICAg
ICAgICB0cmltUmlnaHQgPSAvW1xzXHhBMF0rJC87Cit9CisKKy8vIEFsbCBqUXVlcnkgb2JqZWN0
cyBzaG91bGQgcG9pbnQgYmFjayB0byB0aGVzZQorcm9vdGpRdWVyeSA9IGpRdWVyeShkb2N1bWVu
dCk7CisKKy8vIENsZWFudXAgZnVuY3Rpb25zIGZvciB0aGUgZG9jdW1lbnQgcmVhZHkgbWV0aG9k
CitpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgIERPTUNvbnRlbnRM
b2FkZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVu
dExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7
CisgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCk7CisgICAgICAgIH07CisKK30gZWxzZSBp
ZiAoIGRvY3VtZW50LmF0dGFjaEV2ZW50ICkgeworICAgICAgICBET01Db250ZW50TG9hZGVkID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBh
dCBsZWFzdCwgaW4gY2FzZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0
NDMpLgorICAgICAgICAgICAgICAgIGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBs
ZXRlIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCAi
b25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOworICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LnJlYWR5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Owor
fQorCisvLyBUaGUgRE9NIHJlYWR5IGNoZWNrIGZvciBJbnRlcm5ldCBFeHBsb3JlcgorZnVuY3Rp
b24gZG9TY3JvbGxDaGVjaygpIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNSZWFkeSApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIC8vIElmIElFIGlzIHVzZWQsIHVzZSB0aGUgdHJpY2sgYnkgRGllZ28gUGVyaW5p
CisgICAgICAgICAgICAgICAgLy8gaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVu
dExvYWRlZC8KKyAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3Jv
bGwoImxlZnQiKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dCggZG9TY3JvbGxDaGVjaywgMSApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucworICAg
ICAgICBqUXVlcnkucmVhZHkoKTsKK30KKworcmV0dXJuIGpRdWVyeTsKKworfSkoKTsKKworCit2
YXIgLy8gUHJvbWlzZSBtZXRob2RzCisgICAgICAgIHByb21pc2VNZXRob2RzID0gImRvbmUgZmFp
bCBpc1Jlc29sdmVkIGlzUmVqZWN0ZWQgcHJvbWlzZSB0aGVuIGFsd2F5cyBwaXBlIi5zcGxpdCgg
IiAiICksCisgICAgICAgIC8vIFN0YXRpYyByZWZlcmVuY2UgdG8gc2xpY2UKKyAgICAgICAgc2xp
Y2VEZWZlcnJlZCA9IFtdLnNsaWNlOworCitqUXVlcnkuZXh0ZW5kKHsKKyAgICAgICAgLy8gQ3Jl
YXRlIGEgc2ltcGxlIGRlZmVycmVkIChvbmUgY2FsbGJhY2tzIGxpc3QpCisgICAgICAgIF9EZWZl
cnJlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIC8vIGNhbGxiYWNrcyBsaXN0
CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHN0b3JlZCBbIGNvbnRleHQgLCBhcmdzIF0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgZmlyaW5n
IHdoZW4gYWxyZWFkeSBkb2luZyBzbworICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxhZyB0byBrbm93IGlmIHRoZSBkZWZlcnJlZCBo
YXMgYmVlbiBjYW5jZWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBkZWZlcnJlZCBpdHNlbGYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkICA9IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBkb25lKCBmMSwgZjIsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9uZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhY2FuY2VsbGVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2ZpcmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBmaXJlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2ZpcmVkID0gZmlyZWQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVkID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsZW5ndGggPSBh
cmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gYXJnc1sgaSBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0g
alF1ZXJ5LnR5cGUoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiYXJyYXkiICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLmRvbmUuYXBwbHkoIGRlZmVycmVkLCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09
ICJmdW5jdGlvbiIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goIGVsZW0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBfZmlyZWQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkLnJlc29sdmVXaXRoKCBfZmlyZWRbIDAgXSwgX2ZpcmVkWyAxIF0gKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aXRoIGdpdmVu
IGNvbnRleHQgYW5kIGFyZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2
ZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWNhbmNlbGxlZCAmJiAhZmlyZWQgJiYgIWZpcmluZyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1h
a2Ugc3VyZSBhcmdzIGFyZSBhdmFpbGFibGUgKCM4NDIxKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MgfHwgW107CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmcgPSAxOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIGNh
bGxiYWNrc1sgMCBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zaGlmdCgpLmFwcGx5KCBjb250ZXh0
LCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaXJlZCA9IFsgY29udGV4dCwgYXJncyBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmcgPSAwOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHdpdGggdGhp
cyBhcyBjb250ZXh0IGFuZCBnaXZlbiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEhhcyB0aGlzIGRlZmVycmVkIGJlZW4gcmVzb2x2ZWQ/CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhISggZmlyaW5nIHx8IGZpcmVk
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FuY2VsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FuY2VsbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja3MgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHJldHVybiBkZWZl
cnJlZDsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBGdWxsIGZsZWRnZWQgZGVmZXJyZWQgKHR3
byBjYWxsYmFja3MgbGlzdCkKKyAgICAgICAgRGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkgewor
ICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZhaWxEZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U7CisgICAgICAgICAgICAgICAgLy8gQWRkIGVy
cm9yRGVmZXJyZWQgbWV0aG9kcywgdGhlbiBhbmQgcHJvbWlzZQorICAgICAgICAgICAgICAgIGpR
dWVyeS5leHRlbmQoIGRlZmVycmVkLCB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVuOiBm
dW5jdGlvbiggZG9uZUNhbGxiYWNrcywgZmFpbENhbGxiYWNrcyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQuZG9uZSggZG9uZUNhbGxiYWNrcyApLmZhaWwoIGZh
aWxDYWxsYmFja3MgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
YWx3YXlzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGRlZmVycmVkLmRvbmUuYXBwbHkoIGRlZmVycmVkLCBhcmd1bWVudHMgKS5mYWlsLmFwcGx5
KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICBmYWlsOiBmYWlsRGVmZXJyZWQuZG9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlamVjdFdpdGg6IGZhaWxEZWZlcnJlZC5yZXNvbHZlV2l0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlamVjdDogZmFpbERlZmVycmVkLnJlc29sdmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWlsRGVmZXJyZWQuaXNSZXNvbHZlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBpcGU6IGZ1bmN0aW9uKCBmbkRvbmUsIGZuRmFpbCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5j
dGlvbiggbmV3RGVmZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmVhY2goIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbmU6IFsgZm5Eb25lLCAicmVzb2x2ZSIgXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6IFsgZm5GYWlsLCAicmVqZWN0IiBd
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oIGhh
bmRsZXIsIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgZm4gPSBkYXRhWyAwIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IGRhdGFbIDEgXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgaGFuZGxlciBdKGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybmVkID0gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybmVkLnByb21pc2UoKS50aGVuKCBuZXdEZWZlci5yZXNv
bHZlLCBuZXdEZWZlci5yZWplY3QgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV3RGVmZXJbIGFjdGlvbiArICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IG5ld0RlZmVy
IDogdGhpcywgWyByZXR1cm5lZCBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyBoYW5kbGVy
IF0oIG5ld0RlZmVyWyBhY3Rpb24gXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5wcm9taXNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0
IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9i
amVjdAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvYmogPT0gbnVsbCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHByb21pc2UgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJv
bWlzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IG9iaiA9IHt9OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBpID0gcHJvbWlzZU1ldGhvZHMubGVuZ3RoOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9ialsgcHJvbWlzZU1ldGhvZHNbaV0gXSA9IGRlZmVycmVkWyBwcm9taXNl
TWV0aG9kc1tpXSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IG9ubHkgb25lIGNhbGxiYWNrIGxpc3Qgd2lsbCBiZSB1c2VkCisgICAgICAgICAgICAgICAgZGVm
ZXJyZWQuZG9uZSggZmFpbERlZmVycmVkLmNhbmNlbCApLmZhaWwoIGRlZmVycmVkLmNhbmNlbCAp
OworICAgICAgICAgICAgICAgIC8vIFVuZXhwb3NlIGNhbmNlbAorICAgICAgICAgICAgICAgIGRl
bGV0ZSBkZWZlcnJlZC5jYW5jZWw7CisgICAgICAgICAgICAgICAgLy8gQ2FsbCBnaXZlbiBmdW5j
IGlmIGFueQorICAgICAgICAgICAgICAgIGlmICggZnVuYyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZDsKKyAgICAgICAgfSwKKworICAgICAg
ICAvLyBEZWZlcnJlZCBoZWxwZXIKKyAgICAgICAgd2hlbjogZnVuY3Rpb24oIGZpcnN0UGFyYW0g
KSB7CisgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3Mu
bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBsZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZCA9IGxlbmd0aCA8PSAxICYmIGZpcnN0UGFyYW0gJiYg
alF1ZXJ5LmlzRnVuY3Rpb24oIGZpcnN0UGFyYW0ucHJvbWlzZSApID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RQYXJhbSA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5EZWZlcnJlZCgpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29s
dmVGdW5jKCBpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCB2
YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sgaSBdID0gYXJn
dW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZURlZmVycmVkLmNhbGwoIGFyZ3VtZW50cywgMCApIDog
dmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISggLS1jb3VudCAp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmFuZ2Ug
YnVnIGluIEZGNDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBW
YWx1ZXMgY2hhbmdlZCBvbnRvIHRoZSBhcmd1bWVudHMgb2JqZWN0IHNvbWV0aW1lcyBlbmQgdXAg
YXMgdW5kZWZpbmVkIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG91dHNpZGUgdGhlICQud2hlbiBtZXRob2QuIENsb25pbmcgdGhlIG9iamVjdCBpbnRv
IGEgZnJlc2ggYXJyYXkgc29sdmVzIHRoZSBpc3N1ZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBkZWZlcnJlZCwgc2xpY2VEZWZl
cnJlZC5jYWxsKCBhcmdzLCAwICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCBsZW5ndGggPiAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
KCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBhcmdzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZ3NbIGkgXS5wcm9taXNlICkg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sgaSBdLnBy
b21pc2UoKS50aGVuKCByZXNvbHZlRnVuYyhpKSwgZGVmZXJyZWQucmVqZWN0ICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLS1jb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhY291bnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
LnJlc29sdmVXaXRoKCBkZWZlcnJlZCwgYXJncyApOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGRlZmVycmVkICE9PSBmaXJzdFBhcmFtICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGRlZmVycmVk
LCBsZW5ndGggPyBbIGZpcnN0UGFyYW0gXSA6IFtdICk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CisgICAgICAgIH0KK30pOwor
CisKKworalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7CisKKyAgICAgICAgdmFyIGRpdiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICksCisgICAgICAgICAgICAgICAgZG9jdW1l
bnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAorICAgICAgICAgICAgICAgIGFs
bCwKKyAgICAgICAgICAgICAgICBhLAorICAgICAgICAgICAgICAgIHNlbGVjdCwKKyAgICAgICAg
ICAgICAgICBvcHQsCisgICAgICAgICAgICAgICAgaW5wdXQsCisgICAgICAgICAgICAgICAgbWFy
Z2luRGl2LAorICAgICAgICAgICAgICAgIHN1cHBvcnQsCisgICAgICAgICAgICAgICAgZnJhZ21l
bnQsCisgICAgICAgICAgICAgICAgYm9keSwKKyAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudFBh
cmVudCwKKyAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0
RWxlbWVudFN0eWxlLAorICAgICAgICAgICAgICAgIHRkcywKKyAgICAgICAgICAgICAgICBldmVu
dHMsCisgICAgICAgICAgICAgICAgZXZlbnROYW1lLAorICAgICAgICAgICAgICAgIGksCisgICAg
ICAgICAgICAgICAgaXNTdXBwb3J0ZWQ7CisKKyAgICAgICAgLy8gUHJlbGltaW5hcnkgdGVzdHMK
KyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwgInQiKTsKKyAgICAgICAgZGl2
LmlubmVySFRNTCA9ICIgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxl
PSd0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVj
a2JveCcvPiI7CisKKworICAgICAgICBhbGwgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICIq
IiApOworICAgICAgICBhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiYSIgKVsgMCBdOwor
CisgICAgICAgIC8vIENhbid0IGdldCBiYXNpYyB0ZXN0IHN1cHBvcnQKKyAgICAgICAgaWYgKCAh
YWxsIHx8ICFhbGwubGVuZ3RoIHx8ICFhICkgeworICAgICAgICAgICAgICAgIHJldHVybiB7fTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcnN0IGJhdGNoIG9mIHN1cHBvcnRzIHRlc3RzCisg
ICAgICAgIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzZWxlY3QiICk7CisgICAg
ICAgIG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0
aW9uIikgKTsKKyAgICAgICAgaW5wdXQgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJpbnB1
dCIgKVsgMCBdOworCisgICAgICAgIHN1cHBvcnQgPSB7CisgICAgICAgICAgICAgICAgLy8gSUUg
c3RyaXBzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIC5pbm5lckhUTUwgaXMgdXNlZAorICAgICAg
ICAgICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlOiAoIGRpdi5maXJzdENoaWxkLm5vZGVUeXBlID09
PSAzICksCisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0Ym9keSBlbGVtZW50
cyBhcmVuJ3QgYXV0b21hdGljYWxseSBpbnNlcnRlZAorICAgICAgICAgICAgICAgIC8vIElFIHdp
bGwgaW5zZXJ0IHRoZW0gaW50byBlbXB0eSB0YWJsZXMKKyAgICAgICAgICAgICAgICB0Ym9keTog
IWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggInRib2R5IiApLmxlbmd0aCwKKworICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29y
cmVjdGx5IGJ5IGlubmVySFRNTAorICAgICAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgYSB3
cmFwcGVyIGVsZW1lbnQgaW4gSUUKKyAgICAgICAgICAgICAgICBodG1sU2VyaWFsaXplOiAhIWRp
di5nZXRFbGVtZW50c0J5VGFnTmFtZSggImxpbmsiICkubGVuZ3RoLAorCisgICAgICAgICAgICAg
ICAgLy8gR2V0IHRoZSBzdHlsZSBpbmZvcm1hdGlvbiBmcm9tIGdldEF0dHJpYnV0ZQorICAgICAg
ICAgICAgICAgIC8vIChJRSB1c2VzIC5jc3NUZXh0IGluc3RlYWQpCisgICAgICAgICAgICAgICAg
c3R5bGU6IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpICksCisKKyAgICAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBVUkxzIGFyZW4ndCBtYW5pcHVsYXRlZAorICAgICAg
ICAgICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRlZmF1bHQpCisgICAgICAgICAgICAg
ICAgaHJlZk5vcm1hbGl6ZWQ6ICggYS5nZXRBdHRyaWJ1dGUoICJocmVmIiApID09PSAiL2EiICks
CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhp
c3RzCisgICAgICAgICAgICAgICAgLy8gKElFIHVzZXMgZmlsdGVyIGluc3RlYWQpCisgICAgICAg
ICAgICAgICAgLy8gVXNlIGEgcmVnZXggdG8gd29yayBhcm91bmQgYSBXZWJLaXQgaXNzdWUuIFNl
ZSAjNTE0NQorICAgICAgICAgICAgICAgIG9wYWNpdHk6IC9eMC41NSQvLnRlc3QoIGEuc3R5bGUu
b3BhY2l0eSApLAorCisgICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0
ZW5jZQorICAgICAgICAgICAgICAgIC8vIChJRSB1c2VzIHN0eWxlRmxvYXQgaW5zdGVhZCBvZiBj
c3NGbG9hdCkKKyAgICAgICAgICAgICAgICBjc3NGbG9hdDogISFhLnN0eWxlLmNzc0Zsb2F0LAor
CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgbm8gdmFsdWUgaXMgc3BlY2lm
aWVkIGZvciBhIGNoZWNrYm94CisgICAgICAgICAgICAgICAgLy8gdGhhdCBpdCBkZWZhdWx0cyB0
byAib24iLgorICAgICAgICAgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gIiIgaW5zdGVh
ZCkKKyAgICAgICAgICAgICAgICBjaGVja09uOiAoIGlucHV0LnZhbHVlID09PSAib24iICksCisK
KyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNlbGVjdGVkLWJ5LWRlZmF1bHQg
b3B0aW9uIGhhcyBhIHdvcmtpbmcgc2VsZWN0ZWQgcHJvcGVydHkuCisgICAgICAgICAgICAgICAg
Ly8gKFdlYktpdCBkZWZhdWx0cyB0byBmYWxzZSBpbnN0ZWFkIG9mIHRydWUsIElFIHRvbywgaWYg
aXQncyBpbiBhbiBvcHRncm91cCkKKyAgICAgICAgICAgICAgICBvcHRTZWxlY3RlZDogb3B0LnNl
bGVjdGVkLAorCisgICAgICAgICAgICAgICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxD
YXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQv
c2V0QXR0cmlidXRlIChpZTYvNykKKyAgICAgICAgICAgICAgICBnZXRTZXRBdHRyaWJ1dGU6IGRp
di5jbGFzc05hbWUgIT09ICJ0IiwKKworICAgICAgICAgICAgICAgIC8vIFdpbGwgYmUgZGVmaW5l
ZCBsYXRlcgorICAgICAgICAgICAgICAgIHN1Ym1pdEJ1YmJsZXM6IHRydWUsCisgICAgICAgICAg
ICAgICAgY2hhbmdlQnViYmxlczogdHJ1ZSwKKyAgICAgICAgICAgICAgICBmb2N1c2luQnViYmxl
czogZmFsc2UsCisgICAgICAgICAgICAgICAgZGVsZXRlRXhwYW5kbzogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICBub0Nsb25lRXZlbnQ6IHRydWUsCisgICAgICAgICAgICAgICAgaW5saW5lQmxvY2tO
ZWVkc0xheW91dDogZmFsc2UsCisgICAgICAgICAgICAgICAgc2hyaW5rV3JhcEJsb2NrczogZmFs
c2UsCisgICAgICAgICAgICAgICAgcmVsaWFibGVNYXJnaW5SaWdodDogdHJ1ZQorICAgICAgICB9
OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBjaGVja2VkIHN0YXR1cyBpcyBwcm9wZXJseSBjbG9u
ZWQKKyAgICAgICAgaW5wdXQuY2hlY2tlZCA9IHRydWU7CisgICAgICAgIHN1cHBvcnQubm9DbG9u
ZUNoZWNrZWQgPSBpbnB1dC5jbG9uZU5vZGUoIHRydWUgKS5jaGVja2VkOworCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZW4n
dCBtYXJrZWQgYXMgZGlzYWJsZWQKKyAgICAgICAgLy8gKFdlYktpdCBtYXJrcyB0aGVtIGFzIGRp
c2FibGVkKQorICAgICAgICBzZWxlY3QuZGlzYWJsZWQgPSB0cnVlOworICAgICAgICBzdXBwb3J0
Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDsKKworICAgICAgICAvLyBUZXN0IHRvIHNlZSBp
ZiBpdCdzIHBvc3NpYmxlIHRvIGRlbGV0ZSBhbiBleHBhbmRvIGZyb20gYW4gZWxlbWVudAorICAg
ICAgICAvLyBGYWlscyBpbiBJbnRlcm5ldCBFeHBsb3JlcgorICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIGRlbGV0ZSBkaXYudGVzdDsKKyAgICAgICAgfSBjYXRjaCggZSApIHsKKyAgICAg
ICAgICAgICAgICBzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICggIWRpdi5hZGRFdmVudExpc3RlbmVyICYmIGRpdi5hdHRhY2hFdmVudCAmJiBk
aXYuZmlyZUV2ZW50ICkgeworICAgICAgICAgICAgICAgIGRpdi5hdHRhY2hFdmVudCggIm9uY2xp
Y2siLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb25pbmcgYSBu
b2RlIHNob3VsZG4ndCBjb3B5IG92ZXIgYW55CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBi
b3VuZCBldmVudCBoYW5kbGVycyAoSUUgZG9lcyB0aGlzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3VwcG9ydC5ub0Nsb25lRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBkaXYuY2xvbmVOb2RlKCB0cnVlICkuZmlyZUV2ZW50KCAib25jbGljayIg
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIGlmIGEgcmFkaW8gbWFpbnRhaW5zIGl0
J3MgdmFsdWUKKyAgICAgICAgLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIERPTQorICAg
ICAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgICAgIGlu
cHV0LnZhbHVlID0gInQiOworICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAicmFk
aW8iKTsKKyAgICAgICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsK
KworICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCAiY2hlY2tlZCIpOworICAg
ICAgICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7CisgICAgICAgIGZyYWdtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGls
ZCggZGl2LmZpcnN0Q2hpbGQgKTsKKworICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBjbG9uZSBj
aGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMKKyAgICAgICAgc3VwcG9ydC5jaGVj
a0Nsb25lID0gZnJhZ21lbnQuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFz
dENoaWxkLmNoZWNrZWQ7CisKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICIiOworCisgICAgICAg
IC8vIEZpZ3VyZSBvdXQgaWYgdGhlIFczQyBib3ggbW9kZWwgd29ya3MgYXMgZXhwZWN0ZWQKKyAg
ICAgICAgZGl2LnN0eWxlLndpZHRoID0gZGl2LnN0eWxlLnBhZGRpbmdMZWZ0ID0gIjFweCI7CisK
KyAgICAgICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiYm9keSIgKVsg
MCBdOworICAgICAgICAvLyBXZSB1c2Ugb3VyIG93biwgaW52aXNpYmxlLCBib2R5IHVubGVzcyB0
aGUgYm9keSBpcyBhbHJlYWR5IHByZXNlbnQKKyAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSB1
c2UgYSBkaXYgKCM5MjM5KQorICAgICAgICB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoIGJvZHkgPyAiZGl2IiA6ICJib2R5IiApOworICAgICAgICB0ZXN0RWxlbWVudFN0eWxl
ID0geworICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICJoaWRkZW4iLAorICAgICAgICAgICAg
ICAgIHdpZHRoOiAwLAorICAgICAgICAgICAgICAgIGhlaWdodDogMCwKKyAgICAgICAgICAgICAg
ICBib3JkZXI6IDAsCisgICAgICAgICAgICAgICAgbWFyZ2luOiAwLAorICAgICAgICAgICAgICAg
IGJhY2tncm91bmQ6ICJub25lIgorICAgICAgICB9OworICAgICAgICBpZiAoIGJvZHkgKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGVzdEVsZW1lbnRTdHlsZSwgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICJhYnNvbHV0ZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0OiAiLTEwMDBweCIsCisgICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICIt
MTAwMHB4IgorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGZvciAoIGkg
aW4gdGVzdEVsZW1lbnRTdHlsZSApIHsKKyAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHls
ZVsgaSBdID0gdGVzdEVsZW1lbnRTdHlsZVsgaSBdOworICAgICAgICB9CisgICAgICAgIHRlc3RF
bGVtZW50LmFwcGVuZENoaWxkKCBkaXYgKTsKKyAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQgPSBi
b2R5IHx8IGRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQuaW5zZXJ0
QmVmb3JlKCB0ZXN0RWxlbWVudCwgdGVzdEVsZW1lbnRQYXJlbnQuZmlyc3RDaGlsZCApOworCisg
ICAgICAgIC8vIENoZWNrIGlmIGEgZGlzY29ubmVjdGVkIGNoZWNrYm94IHdpbGwgcmV0YWluIGl0
cyBjaGVja2VkCisgICAgICAgIC8vIHZhbHVlIG9mIHRydWUgYWZ0ZXIgYXBwZW5kZWQgdG8gdGhl
IERPTSAoSUU2LzcpCisgICAgICAgIHN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNr
ZWQ7CisKKyAgICAgICAgc3VwcG9ydC5ib3hNb2RlbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0gMjsK
KworICAgICAgICBpZiAoICJ6b29tIiBpbiBkaXYuc3R5bGUgKSB7CisgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5l
LWJsb2NrCisgICAgICAgICAgICAgICAgLy8gZWxlbWVudHMgd2hlbiBzZXR0aW5nIHRoZWlyIGRp
c3BsYXkgdG8gJ2lubGluZScgYW5kIGdpdmluZworICAgICAgICAgICAgICAgIC8vIHRoZW0gbGF5
b3V0CisgICAgICAgICAgICAgICAgLy8gKElFIDwgOCBkb2VzIHRoaXMpCisgICAgICAgICAgICAg
ICAgZGl2LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKKyAgICAgICAgICAgICAgICBkaXYuc3R5
bGUuem9vbSA9IDE7CisgICAgICAgICAgICAgICAgc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5
b3V0ID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDIgKTsKKworICAgICAgICAgICAgICAgIC8vIENo
ZWNrIGlmIGVsZW1lbnRzIHdpdGggbGF5b3V0IHNocmluay13cmFwIHRoZWlyIGNoaWxkcmVuCisg
ICAgICAgICAgICAgICAgLy8gKElFIDYgZG9lcyB0aGlzKQorICAgICAgICAgICAgICAgIGRpdi5z
dHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8ZGl2
IHN0eWxlPSd3aWR0aDo0cHg7Jz48L2Rpdj4iOworICAgICAgICAgICAgICAgIHN1cHBvcnQuc2hy
aW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdpZHRoICE9PSAyICk7CisgICAgICAgIH0KKwor
ICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRkaW5nOjA7
Ym9yZGVyOjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IjsKKyAg
ICAgICAgdGRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGQiICk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWlnaHQgd2hl
biB0aGV5IGFyZSBzZXQKKyAgICAgICAgLy8gdG8gZGlzcGxheTpub25lIGFuZCB0aGVyZSBhcmUg
c3RpbGwgb3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCisgICAgICAgIC8vIHRhYmxlIHJv
dzsgaWYgc28sIG9mZnNldFdpZHRoL0hlaWdodCBhcmUgbm90IHJlbGlhYmxlIGZvciB1c2Ugd2hl
bgorICAgICAgICAvLyBkZXRlcm1pbmluZyBpZiBhbiBlbGVtZW50IGhhcyBiZWVuIGhpZGRlbiBk
aXJlY3RseSB1c2luZworICAgICAgICAvLyBkaXNwbGF5Om5vbmUgKGl0IGlzIHN0aWxsIHNhZmUg
dG8gdXNlIG9mZnNldHMgaWYgYSBwYXJlbnQgZWxlbWVudCBpcworICAgICAgICAvLyBoaWRkZW47
IGRvbiBzYWZldHkgZ29nZ2xlcyBhbmQgc2VlIGJ1ZyAjNDUxMiBmb3IgbW9yZSBpbmZvcm1hdGlv
bikuCisgICAgICAgIC8vIChvbmx5IElFIDggZmFpbHMgdGhpcyB0ZXN0KQorICAgICAgICBpc1N1
cHBvcnRlZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7CisKKyAgICAgICAgdGRz
WyAwIF0uc3R5bGUuZGlzcGxheSA9ICIiOworICAgICAgICB0ZHNbIDEgXS5zdHlsZS5kaXNwbGF5
ID0gIm5vbmUiOworCisgICAgICAgIC8vIENoZWNrIGlmIGVtcHR5IHRhYmxlIGNlbGxzIHN0aWxs
IGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0CisgICAgICAgIC8vIChJRSA8IDggZmFpbCB0aGlzIHRl
c3QpCisgICAgICAgIHN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzID0gaXNTdXBwb3J0ZWQg
JiYgKCB0ZHNbIDAgXS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKKyAgICAgICAgZGl2LmlubmVySFRN
TCA9ICIiOworCisgICAgICAgIC8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFu
ZCBubyBtYXJnaW4tcmlnaHQgaW5jb3JyZWN0bHkKKyAgICAgICAgLy8gZ2V0cyBjb21wdXRlZCBt
YXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiBGb3IgbW9yZQorICAgICAg
ICAvLyBpbmZvIHNlZSBidWcgIzMzMzMKKyAgICAgICAgLy8gRmFpbHMgaW4gV2ViS2l0IGJlZm9y
ZSBGZWIgMjAxMSBuaWdodGxpZXMKKyAgICAgICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENv
bXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAg
IGlmICggZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZSApIHsKKyAgICAgICAgICAgICAgICBtYXJnaW5EaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCAiZGl2IiApOworICAgICAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS53aWR0
aCA9ICIwIjsKKyAgICAgICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSAi
MCI7CisgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBtYXJnaW5EaXYgKTsKKyAgICAg
ICAgICAgICAgICBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgPQorICAgICAgICAgICAgICAg
ICAgICAgICAgKCBwYXJzZUludCggKCBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0
eWxlKCBtYXJnaW5EaXYsIG51bGwgKSB8fCB7IG1hcmdpblJpZ2h0OiAwIH0gKS5tYXJnaW5SaWdo
dCwgMTAgKSB8fCAwICkgPT09IDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1vdmUgdGhl
IGJvZHkgZWxlbWVudCB3ZSBhZGRlZAorICAgICAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSAi
IjsKKyAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQucmVtb3ZlQ2hpbGQoIHRlc3RFbGVtZW50ICk7
CisKKyAgICAgICAgLy8gVGVjaG5pcXVlIGZyb20gSnVyaXkgWmF5dHNldgorICAgICAgICAvLyBo
dHRwOi8vdGhpbmt3ZWIyLmNvbS9wcm9qZWN0cy9wcm90b3R5cGUvZGV0ZWN0aW5nLWV2ZW50LXN1
cHBvcnQtd2l0aG91dC1icm93c2VyLXNuaWZmaW5nLworICAgICAgICAvLyBXZSBvbmx5IGNhcmUg
YWJvdXQgdGhlIGNhc2Ugd2hlcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHN5c3RlbXMKKyAgICAgICAg
Ly8gYXJlIHVzZWQsIG5hbWVseSBpbiBJRS4gU2hvcnQtY2lyY3VpdGluZyBoZXJlIGhlbHBzIHVz
IHRvCisgICAgICAgIC8vIGF2b2lkIGFuIGV2YWwgY2FsbCAoaW4gc2V0QXR0cmlidXRlKSB3aGlj
aCBjYW4gY2F1c2UgQ1NQCisgICAgICAgIC8vIHRvIGdvIGhheXdpcmUuIFNlZTogaHR0cHM6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vU2VjdXJpdHkvQ1NQCisgICAgICAgIGlmICggZGl2LmF0
dGFjaEV2ZW50ICkgeworICAgICAgICAgICAgICAgIGZvciggaSBpbiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdWJtaXQ6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IDEs
CisgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2luOiAxCisgICAgICAgICAgICAgICAgfSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJvbiIgKyBpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBkaXYgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzU3VwcG9ydGVkICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCBldmVudE5hbWUsICJyZXR1cm47
IiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggdHlw
ZW9mIGRpdlsgZXZlbnROYW1lIF0gPT09ICJmdW5jdGlvbiIgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRbIGkgKyAiQnViYmxlcyIg
XSA9IGlzU3VwcG9ydGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIE51bGwgY29ubmVjdGVkIGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCisgICAgICAg
IHRlc3RFbGVtZW50ID0gZnJhZ21lbnQgPSBzZWxlY3QgPSBvcHQgPSBib2R5ID0gbWFyZ2luRGl2
ID0gZGl2ID0gaW5wdXQgPSBudWxsOworCisgICAgICAgIHJldHVybiBzdXBwb3J0OworfSkoKTsK
KworLy8gS2VlcCB0cmFjayBvZiBib3hNb2RlbAoralF1ZXJ5LmJveE1vZGVsID0galF1ZXJ5LnN1
cHBvcnQuYm94TW9kZWw7CisKKworCisKK3ZhciByYnJhY2UgPSAvXig/Olx7LipcfXxcWy4qXF0p
JC8sCisgICAgICAgIHJtdWx0aURhc2ggPSAvKFtBLVpdKS9nOworCitqUXVlcnkuZXh0ZW5kKHsK
KyAgICAgICAgY2FjaGU6IHt9LAorCisgICAgICAgIC8vIFBsZWFzZSB1c2Ugd2l0aCBjYXV0aW9u
CisgICAgICAgIHV1aWQ6IDAsCisKKyAgICAgICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2Yg
alF1ZXJ5IG9uIHRoZSBwYWdlCisgICAgICAgIC8vIE5vbi1kaWdpdHMgcmVtb3ZlZCB0byBtYXRj
aCByaW5saW5lalF1ZXJ5CisgICAgICAgIGV4cGFuZG86ICJqUXVlcnkiICsgKCBqUXVlcnkuZm4u
anF1ZXJ5ICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAorCisgICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgZWxlbWVudHMgdGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBp
ZiB5b3UKKyAgICAgICAgLy8gYXR0ZW1wdCB0byBhZGQgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIHRo
ZW0uCisgICAgICAgIG5vRGF0YTogeworICAgICAgICAgICAgICAgICJlbWJlZCI6IHRydWUsCisg
ICAgICAgICAgICAgICAgLy8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxhc2ggKHdoaWNo
IGhhbmRsZSBleHBhbmRvcykKKyAgICAgICAgICAgICAgICAib2JqZWN0IjogImNsc2lkOkQyN0NE
QjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsCisgICAgICAgICAgICAgICAgImFwcGxl
dCI6IHRydWUKKyAgICAgICAgfSwKKworICAgICAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5ub2RlVHlwZSA/IGpRdWVyeS5jYWNoZVsg
ZWxlbVtqUXVlcnkuZXhwYW5kb10gXSA6IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gISFlbGVtICYmICFpc0VtcHR5RGF0YU9iamVjdCggZWxlbSApOwor
ICAgICAgICB9LAorCisgICAgICAgIGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhLCBw
dnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhalF1
ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgdGhpc0NhY2hlLCBy
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRv
LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QnlOYW1lID0gdHlwZW9mIG5hbWUgPT09ICJz
dHJpbmciLAorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGhhbmRsZSBE
T00gbm9kZXMgYW5kIEpTIG9iamVjdHMgZGlmZmVyZW50bHkgYmVjYXVzZSBJRTYtNworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY2FuJ3QgR0Mgb2JqZWN0IHJlZmVyZW5jZXMgcHJvcGVybHkg
YWNyb3NzIHRoZSBET00tSlMgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9k
ZSA9IGVsZW0ubm9kZVR5cGUsCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgRE9N
IG5vZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9iamVjdCBkYXRhIGlzCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgb2JqZWN0
IHNvIEdDIGNhbiBvY2N1ciBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBj
YWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE9ubHkgZGVmaW5pbmcgYW4gSUQgZm9yIEpTIG9iamVjdHMgaWYgaXRzIGNhY2hl
IGFscmVhZHkgZXhpc3RzIGFsbG93cworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNv
ZGUgdG8gc2hvcnRjdXQgb24gdGhlIHNhbWUgcGF0aCBhcyBhIERPTSBub2RlIHdpdGggbm8gY2Fj
aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5LmV4
cGFuZG8gXSA6IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gJiYgalF1ZXJ5LmV4cGFuZG87CisKKyAg
ICAgICAgICAgICAgICAvLyBBdm9pZCBkb2luZyBhbnkgbW9yZSB3b3JrIHRoYW4gd2UgbmVlZCB0
byB3aGVuIHRyeWluZyB0byBnZXQgZGF0YSBvbiBhbgorICAgICAgICAgICAgICAgIC8vIG9iamVj
dCB0aGF0IGhhcyBubyBkYXRhIGF0IGFsbAorICAgICAgICAgICAgICAgIGlmICggKCFpZCB8fCAo
cHZ0ICYmIGlkICYmIChjYWNoZVsgaWQgXSAmJiAhY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0p
KSkgJiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoICFpZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgRE9NIG5vZGVzIG5l
ZWQgYSBuZXcgdW5pcXVlIElEIGZvciBlYWNoIGVsZW1lbnQgc2luY2UgdGhlaXIgZGF0YQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGlzTm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSA9IGlkID0gKytqUXVlcnkudXVpZDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlkID0galF1ZXJ5LmV4cGFuZG87CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCAhY2FjaGVbIGlkIF0g
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9IHt9OworCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkuIEF2
b2lkcyBleHBvc2luZyBqUXVlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGFkYXRh
IG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0IGlzIHNlcmlhbGl6ZWQgdXNpbmcK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpTT04uc3RyaW5naWZ5CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFpc05vZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFuIG9iamVj
dCBjYW4gYmUgcGFzc2VkIHRvIGpRdWVyeS5kYXRhIGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFp
cjsgdGhpcyBnZXRzCisgICAgICAgICAgICAgICAgLy8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRv
IHRoZSBleGlzdGluZyBjYWNoZQorICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIG5hbWUgPT09
ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBwdnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdID0galF1ZXJ5LmV4dGVuZChjYWNoZVsgaWQgXVsg
aW50ZXJuYWxLZXkgXSwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9IGpRdWVyeS5leHRl
bmQoY2FjaGVbIGlkIF0sIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOwor
CisgICAgICAgICAgICAgICAgLy8gSW50ZXJuYWwgalF1ZXJ5IGRhdGEgaXMgc3RvcmVkIGluIGEg
c2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3MgZGF0YQorICAgICAgICAgICAgICAg
IC8vIGNhY2hlIGluIG9yZGVyIHRvIGF2b2lkIGtleSBjb2xsaXNpb25zIGJldHdlZW4gaW50ZXJu
YWwgZGF0YSBhbmQgdXNlci1kZWZpbmVkCisgICAgICAgICAgICAgICAgLy8gZGF0YQorICAgICAg
ICAgICAgICAgIGlmICggcHZ0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGhp
c0NhY2hlWyBpbnRlcm5hbEtleSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzQ2FjaGVbIGludGVybmFsS2V5IF0gPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hlID0gdGhpc0NhY2hlWyBpbnRl
cm5hbEtleSBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggZGF0
YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hlWyBq
UXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEuNSBPTkxZLiBJdCB3
aWxsIGJlIHJlbW92ZWQgaW4gMS42LiBVc2VycyBzaG91bGQKKyAgICAgICAgICAgICAgICAvLyBu
b3QgYXR0ZW1wdCB0byBpbnNwZWN0IHRoZSBpbnRlcm5hbCBldmVudHMgb2JqZWN0IHVzaW5nIGpR
dWVyeS5kYXRhLCBhcyB0aGlzCisgICAgICAgICAgICAgICAgLy8gaW50ZXJuYWwgZGF0YSBvYmpl
Y3QgaXMgdW5kb2N1bWVudGVkIGFuZCBzdWJqZWN0IHRvIGNoYW5nZS4KKyAgICAgICAgICAgICAg
ICBpZiAoIG5hbWUgPT09ICJldmVudHMiICYmICF0aGlzQ2FjaGVbbmFtZV0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdICYmIHRoaXND
YWNoZVsgaW50ZXJuYWxLZXkgXS5ldmVudHM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIGJvdGggY29udmVydGVkLXRvLWNhbWVsIGFuZCBub24tY29u
dmVydGVkIGRhdGEgcHJvcGVydHkgbmFtZXMKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGRhdGEg
cHJvcGVydHkgd2FzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIGlmICggZ2V0QnlOYW1lICkg
eworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBUcnkgdG8gZmluZCBhcy1pcyBw
cm9wZXJ0eSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIG5h
bWUgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBmb3IgbnVsbHx1bmRlZmlu
ZWQgcHJvcGVydHkgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgPT0gbnVs
bCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCB0
aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXQgPSB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSB0aGlzQ2FjaGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfSwKKworICAgICAgICByZW1vdmVEYXRhOiBmdW5j
dGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworICAgICAg
ICAgICAgICAgIGlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgdmFyIHRoaXNDYWNoZSwKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVmZXJlbmNl
IHRvIGludGVybmFsIGRhdGEgY2FjaGUga2V5CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRl
cm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAorCisgICAgICAgICAgICAgICAgICAgICAgICBpc05v
ZGUgPSBlbGVtLm5vZGVUeXBlLAorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgalF1
ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBqUXVl
cnkuZXhwYW5kbzsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgbm8g
Y2FjaGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0LCB0aGVyZSBpcyBubworICAgICAgICAgICAgICAg
IC8vIHB1cnBvc2UgaW4gY29udGludWluZworICAgICAgICAgICAgICAgIGlmICggIWNhY2hlWyBp
ZCBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICggbmFtZSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0gOiBjYWNo
ZVsgaWQgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzQ2FjaGUgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBpbnRlcm9wZXJhYmxl
IHJlbW92YWwgb2YgaHlwaGVuYXRlZCBvciBjYW1lbGNhc2VkIGtleXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhdGhpc0NhY2hlWyBuYW1lIF0gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5h
bWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzQ2FjaGVbIG5hbWUgXTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIGxlZnQgaW4gdGhl
IGNhY2hlLCB3ZSB3YW50IHRvIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdCh0aGlz
Q2FjaGUpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNlZSBqUXVl
cnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIGlmICggcHZ0ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtl
eSBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBwYXJl
bnQgY2FjaGUgdW5sZXNzIHRoZSBpbnRlcm5hbCBkYXRhIG9iamVjdAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaGFkIGJlZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBpbiBpdAorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhaXNFbXB0eURhdGFPYmplY3QoY2FjaGVbIGlkIF0pICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIGludGVy
bmFsQ2FjaGUgPSBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXTsKKworICAgICAgICAgICAgICAg
IC8vIEJyb3dzZXJzIHRoYXQgZmFpbCBleHBhbmRvIGRlbGV0aW9uIGFsc28gcmVmdXNlIHRvIGRl
bGV0ZSBleHBhbmRvcyBvbgorICAgICAgICAgICAgICAgIC8vIHRoZSB3aW5kb3csIGJ1dCBpdCB3
aWxsIGFsbG93IGl0IG9uIGFsbCBvdGhlciBKUyBvYmplY3RzOyBvdGhlciBicm93c2VycworICAg
ICAgICAgICAgICAgIC8vIGRvbid0IGNhcmUKKyAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhh
dCBgY2FjaGVgIGlzIG5vdCBhIHdpbmRvdyBvYmplY3QgIzEwMDgwCisgICAgICAgICAgICAgICAg
aWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvIHx8ICFjYWNoZS5zZXRJbnRlcnZhbCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSBu
dWxsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFdlIGRlc3Ryb3ll
ZCB0aGUgZW50aXJlIHVzZXIgY2FjaGUgYXQgb25jZSBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4K
KyAgICAgICAgICAgICAgICAvLyBpdGVyYXRpbmcgdGhyb3VnaCBlYWNoIGtleSwgYnV0IHdlIG5l
ZWQgdG8gY29udGludWUgdG8gcGVyc2lzdCBpbnRlcm5hbAorICAgICAgICAgICAgICAgIC8vIGRh
dGEgaWYgaXQgZXhpc3RlZAorICAgICAgICAgICAgICAgIGlmICggaW50ZXJuYWxDYWNoZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdID0ge307CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkuIEF2b2lkcyBl
eHBvc2luZyBqUXVlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGFkYXRhIG9uIHBs
YWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0IGlzIHNlcmlhbGl6ZWQgdXNpbmcKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEpTT04uc3RyaW5naWZ5CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFpc05vZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSA9
IGludGVybmFsQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG5lZWQg
dG8gZWxpbWluYXRlIHRoZSBleHBhbmRvIG9uIHRoZSBub2RlIHRvIGF2b2lkCisgICAgICAgICAg
ICAgICAgLy8gZmFsc2UgbG9va3VwcyBpbiB0aGUgY2FjaGUgZm9yIGVudHJpZXMgdGhhdCBubyBs
b25nZXIgZXhpc3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBpc05vZGUgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJRSBkb2VzIG5vdCBhbGxvdyB1cyB0byBkZWxldGUgZXhw
YW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBu
b3IgZG9lcyBpdCBoYXZlIGEgcmVtb3ZlQXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5v
ZGVzOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbXVzdCBoYW5kbGUgYWxsIG9mIHRo
ZXNlIGNhc2VzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LmRl
bGV0ZUV4cGFuZG8gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBl
bGVtWyBqUXVlcnkuZXhwYW5kbyBdOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bVsgalF1ZXJ5LmV4cGFuZG8gXSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8vIEZvciBpbnRlcm5hbCB1
c2Ugb25seS4KKyAgICAgICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgdHJ1
ZSApOworICAgICAgICB9LAorCisgICAgICAgIC8vIEEgbWV0aG9kIGZvciBkZXRlcm1pbmluZyBp
ZiBhIERPTSBub2RlIGNhbiBoYW5kbGUgdGhlIGRhdGEgZXhwYW5kbworICAgICAgICBhY2NlcHRE
YXRhOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5h
bWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBqUXVlcnkubm9EYXRh
WyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICEobWF0Y2ggPT09IHRydWUgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKSAhPT0gbWF0
Y2gpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cit9KTsKKworalF1ZXJ5LmZuLmV4
dGVuZCh7CisgICAgICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworICAgICAgICAg
ICAgICAgIHZhciBkYXRhID0gbnVsbDsKKworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGtl
eSA9PT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMu
bGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5
LmRhdGEoIHRoaXNbMF0gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHRoaXNbMF0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGF0dHIgPSB0aGlzWzBdLmF0dHJpYnV0ZXMsIG5hbWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gYXR0ci5sZW5ndGg7IGkg
PCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lID0gYXR0cltpXS5uYW1lOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUuaW5kZXhPZiggImRhdGEtIiApID09PSAwICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zdWJzdHJpbmcoNSkgKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhQXR0
ciggdGhpc1swXSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRh
OworCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQoIi4iKTsKKyAgICAgICAgICAgICAg
ICBwYXJ0c1sxXSA9IHBhcnRzWzFdID8gIi4iICsgcGFydHNbMV0gOiAiIjsKKworICAgICAgICAg
ICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEgPSB0aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIiArIHBhcnRzWzFdICsgIiEi
LCBbcGFydHNbMF1dKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZldGNo
IGFueSBpbnRlcm5hbGx5IHN0b3JlZCBkYXRhIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmxlbmd0aCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlzWzBdLCBrZXkgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFBdHRyKCB0aGlzWzBd
LCBrZXksIGRhdGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBwYXJ0c1sxXSA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSggcGFydHNbMF0gKSA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE7CisKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzID0galF1ZXJ5KCB0
aGlzICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFsg
cGFydHNbMF0sIHZhbHVlIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRo
aXMudHJpZ2dlckhhbmRsZXIoICJzZXREYXRhIiArIHBhcnRzWzFdICsgIiEiLCBhcmdzICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlzLCBrZXksIHZh
bHVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRyaWdnZXJIYW5k
bGVyKCAiY2hhbmdlRGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgYXJncyApOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAg
IHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1v
dmVEYXRhKCB0aGlzLCBrZXkgKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorfSk7
CisKK2Z1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7CisgICAgICAgIC8vIElm
IG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkKKyAgICAgICAg
Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlCisgICAgICAgIGlmICggZGF0
YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgICAg
ICAgICB2YXIgbmFtZSA9ICJkYXRhLSIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0kMSIg
KS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgICAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmli
dXRlKCBuYW1lICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3Ry
aW5nIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAidHJ1ZSIgPyB0cnVlIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gIm51bGwiID8gbnVsbCA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICFqUXVlcnkuaXNOYU4oIGRhdGEgKSA/IHBhcnNl
RmxvYXQoIGRhdGEgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2goIGUgKSB7fQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRhdGEgKTsKKworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZp
bmVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkYXRh
OworfQorCisvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkgdG8gYWxsb3cgb2Jq
ZWN0cyB3aXRoIGEgc2luZ2xlIHRvSlNPTgorLy8gcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZCBl
bXB0eSBvYmplY3RzOyB0aGlzIHByb3BlcnR5IGFsd2F5cyBleGlzdHMgaW4KKy8vIG9yZGVyIHRv
IG1ha2Ugc3VyZSBKU09OLnN0cmluZ2lmeSBkb2VzIG5vdCBleHBvc2UgaW50ZXJuYWwgbWV0YWRh
dGEKK2Z1bmN0aW9uIGlzRW1wdHlEYXRhT2JqZWN0KCBvYmogKSB7CisgICAgICAgIGZvciAoIHZh
ciBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG5hbWUgIT09ICJ0b0pTT04i
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworfQorCisKKworCitmdW5j
dGlvbiBoYW5kbGVRdWV1ZU1hcmtEZWZlciggZWxlbSwgdHlwZSwgc3JjICkgeworICAgICAgICB2
YXIgZGVmZXJEYXRhS2V5ID0gdHlwZSArICJkZWZlciIsCisgICAgICAgICAgICAgICAgcXVldWVE
YXRhS2V5ID0gdHlwZSArICJxdWV1ZSIsCisgICAgICAgICAgICAgICAgbWFya0RhdGFLZXkgPSB0
eXBlICsgIm1hcmsiLAorICAgICAgICAgICAgICAgIGRlZmVyID0galF1ZXJ5LmRhdGEoIGVsZW0s
IGRlZmVyRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICk7CisgICAgICAgIGlmICggZGVmZXIgJiYK
KyAgICAgICAgICAgICAgICAoIHNyYyA9PT0gInF1ZXVlIiB8fCAhalF1ZXJ5LmRhdGEoIGVsZW0s
IHF1ZXVlRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgKSAmJgorICAgICAgICAgICAgICAgICgg
c3JjID09PSAibWFyayIgfHwgIWpRdWVyeS5kYXRhKCBlbGVtLCBtYXJrRGF0YUtleSwgdW5kZWZp
bmVkLCB0cnVlICkgKSApIHsKKyAgICAgICAgICAgICAgICAvLyBHaXZlIHJvb20gZm9yIGhhcmQt
Y29kZWQgY2FsbGJhY2tzIHRvIGZpcmUgZmlyc3QKKyAgICAgICAgICAgICAgICAvLyBhbmQgZXZl
bnR1YWxseSBtYXJrL3F1ZXVlIHNvbWV0aGluZyBlbHNlIG9uIHRoZSBlbGVtZW50CisgICAgICAg
ICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFqUXVlcnkuZGF0YSggZWxlbSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUg
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhalF1ZXJ5LmRhdGEoIGVsZW0s
IG1hcmtEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIGRlZmVyRGF0YUtleSwgdHJ1ZSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlci5yZXNvbHZlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgMCApOworICAgICAgICB9
Cit9CisKK2pRdWVyeS5leHRlbmQoeworCisgICAgICAgIF9tYXJrOiBmdW5jdGlvbiggZWxlbSwg
dHlwZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gKHR5cGUgfHwgImZ4IikgKyAibWFyayI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSwgKGpRdWVyeS5kYXRhKGVsZW0sdHlwZSx1
bmRlZmluZWQsdHJ1ZSkgfHwgMCkgKyAxLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICB9LAorCisgICAgICAgIF91bm1hcms6IGZ1bmN0aW9uKCBmb3JjZSwgZWxlbSwgdHlwZSAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIGZvcmNlICE9PSB0cnVlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0g
Zm9yY2U7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGtleSA9IHR5cGUgKyAibWFyayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50ID0gZm9yY2UgPyAwIDogKCAoalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgdW5kZWZpbmVkLCB0
cnVlKSB8fCAxICkgLSAxICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvdW50ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggZWxlbSwga2V5
LCBjb3VudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIGtleSwg
dHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVRdWV1ZU1hcmtE
ZWZlciggZWxlbSwgdHlwZSwgIm1hcmsiICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIHF1ZXVlOiBmdW5jdGlvbigg
ZWxlbSwgdHlwZSwgZGF0YSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gKHR5cGUgfHwgImZ4IikgKyAicXVldWUiOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSwgdW5k
ZWZpbmVkLCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZCB1cCBkZXF1
ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIXEgfHwgalF1ZXJ5LmlzQXJyYXkoZGF0YSkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGpRdWVyeS5kYXRhKCBlbGVtLCB0eXBl
LCBqUXVlcnkubWFrZUFycmF5KGRhdGEpLCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcS5wdXNoKCBkYXRhICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBx
IHx8IFtdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBkZXF1ZXVl
OiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKKyAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8
fCAiZngiOworCisgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVt
LCB0eXBlICksCisgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcjsKKworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGlu
ZWwKKyAgICAgICAgICAgICAgICBpZiAoIGZuID09PSAiaW5wcm9ncmVzcyIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKCBmbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVp
bmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcXVldWUudW5zaGlmdCgiaW5wcm9ncmVzcyIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKGVs
ZW0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZGVxdWV1ZShlbGVtLCB0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggIXF1ZXVlLmxlbmd0aCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1
ZXVlIiwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUXVldWVNYXJrRGVm
ZXIoIGVsZW0sIHR5cGUsICJxdWV1ZSIgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0K
K30pOworCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICAgICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBl
LCBkYXRhICkgeworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmci
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHR5cGU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlID0gImZ4IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbMF0sIHR5cGUgKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0
YSApOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVl
dWVbMF0gIT09ICJpbnByb2dyZXNzIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgZGVxdWV1ZTogZnVu
Y3Rpb24oIHR5cGUgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBl
ICk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIC8vIEJhc2VkIG9m
ZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi4KKyAgICAg
ICAgLy8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRl
bGF5LworICAgICAgICBkZWxheTogZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7CisgICAgICAgICAg
ICAgICAgdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbdGltZV0gfHwgdGltZSA6
IHRpbWU7CisgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9LCB0
aW1lICk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIGNsZWFyUXVl
dWU6IGZ1bmN0aW9uKCB0eXBlICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXVl
KCB0eXBlIHx8ICJmeCIsIFtdICk7CisgICAgICAgIH0sCisgICAgICAgIC8vIEdldCBhIHByb21p
c2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKKyAgICAgICAgLy8gYXJl
IGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpCisgICAgICAgIHByb21pc2U6IGZ1
bmN0aW9uKCB0eXBlLCBvYmplY3QgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlw
ZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSB0eXBl
OworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKyAgICAgICAgICAg
ICAgICB2YXIgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRzID0gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlbGVtZW50
cy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDEsCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlckRhdGFLZXkgPSB0eXBlICsgImRlZmVyIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHF1ZXVlRGF0YUtleSA9IHR5cGUgKyAicXVldWUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbWFya0RhdGFLZXkgPSB0eXBlICsgIm1hcmsiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdG1wOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmUoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRz
IF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgd2hpbGUoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
IHRtcCA9IGpRdWVyeS5kYXRhKCBlbGVtZW50c1sgaSBdLCBkZWZlckRhdGFLZXksIHVuZGVmaW5l
ZCwgdHJ1ZSApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBq
UXVlcnkuZGF0YSggZWxlbWVudHNbIGkgXSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUg
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIG1hcmtEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSAp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEo
IGVsZW1lbnRzWyBpIF0sIGRlZmVyRGF0YUtleSwgalF1ZXJ5Ll9EZWZlcnJlZCgpLCB0cnVlICkg
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0bXAuZG9uZSggcmVzb2x2ZSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXNvbHZl
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVyLnByb21pc2UoKTsKKyAgICAgICAgfQor
fSk7CisKKworCisKK3ZhciByY2xhc3MgPSAvW1xuXHRccl0vZywKKyAgICAgICAgcnNwYWNlID0g
L1xzKy8sCisgICAgICAgIHJyZXR1cm4gPSAvXHIvZywKKyAgICAgICAgcnR5cGUgPSAvXig/OmJ1
dHRvbnxpbnB1dCkkL2ksCisgICAgICAgIHJmb2N1c2FibGUgPSAvXig/OmJ1dHRvbnxpbnB1dHxv
YmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKKyAgICAgICAgcmNsaWNrYWJsZSA9IC9eYSg/OnJl
YSk/JC9pLAorICAgICAgICByYm9vbGVhbiA9IC9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5j
fGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3Bl
bnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLAorICAgICAgICBub2RlSG9v
aywgYm9vbEhvb2s7CisKK2pRdWVyeS5mbi5leHRlbmQoeworICAgICAgICBhdHRyOiBmdW5jdGlv
biggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3Mo
IHRoaXMsIG5hbWUsIHZhbHVlLCB0cnVlLCBqUXVlcnkuYXR0ciApOworICAgICAgICB9LAorCisg
ICAgICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9LAorICAgICAgICAKKyAgICAgICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBuYW1lLCB2YWx1ZSwg
dHJ1ZSwgalF1ZXJ5LnByb3AgKTsKKyAgICAgICAgfSwKKyAgICAgICAgCisgICAgICAgIHJlbW92
ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnku
cHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeS9jYXRjaCBoYW5k
bGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92aW5nIGEgcHJvcGVydHkgb24g
d2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc1sgbmFtZSBdID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1sgbmFtZSBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBjYXRjaCggZSApIHt9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisK
KyAgICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2
YXIgY2xhc3NOYW1lcywgaSwgbCwgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldENs
YXNzLCBjLCBjbDsKKworICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZh
bHVlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCBqICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMg
KS5hZGRDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICggdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxpdCggcnNwYWNlICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBs
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBp
IF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWVsZW0uY2xhc3NOYW1lICYmIGNsYXNzTmFtZXMubGVuZ3RoID09PSAxICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSB2
YWx1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDbGFz
cyA9ICIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBjbGFzc05hbWVzLmxl
bmd0aDsgYyA8IGNsOyBjKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIX5zZXRDbGFzcy5pbmRleE9mKCAiICIgKyBjbGFz
c05hbWVzWyBjIF0gKyAiICIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDbGFzcyArPSBjbGFzc05hbWVzWyBj
IF0gKyAiICI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNldENsYXNzICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgcmVtb3ZlQ2xh
c3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lcywg
aSwgbCwgZWxlbSwgY2xhc3NOYW1lLCBjLCBjbDsKKworICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlz
LmNsYXNzTmFtZSkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0g
InN0cmluZyIpIHx8IHZhbHVlID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc05hbWVzID0gKHZhbHVlIHx8ICIiKS5zcGxpdCggcnNwYWNlICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
KysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09
PSAxICYmIGVsZW0uY2xhc3NOYW1lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAoIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICIp
LnJlcGxhY2UoIHJjbGFzcywgIiAiICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBjbGFzc05hbWVzLmxlbmd0aDsgYyA8
IGNsOyBjKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCIgIiArIGNsYXNzTmFt
ZXNbIGMgXSArICIgIiwgIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gIiI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisK
KyAgICAgICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBpc0Jvb2wgPSB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIjsKKworICAgICAgICAg
ICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyggdmFsdWUuY2Fs
bCh0aGlzLCBpLCB0aGlzLmNsYXNzTmFtZSwgc3RhdGVWYWwpLCBzdGF0ZVZhbCApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBjbGFzc05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZiA9IGpRdWVyeSggdGhpcyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gc3RhdGVWYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KCByc3BhY2UgKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVz
WyBpKysgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGVyYXRlZCBsaXN0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6
ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmWyBzdGF0ZSA/ICJhZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiIF0o
IGNsYXNzTmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5
cGUgPT09ICJib29sZWFuIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0aGlzLmNsYXNzTmFtZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMu
Y2xhc3NOYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0b2dnbGUgd2hvbGUgY2xhc3NOYW1lCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05h
bWUgfHwgdmFsdWUgPT09IGZhbHNlID8gIiIgOiBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNz
TmFtZV9fIiApIHx8ICIiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0
b3IgKSB7CisgICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsg
IiAiOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBp
IDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzW2ldLm5vZGVU
eXBlID09PSAxICYmICgiICIgKyB0aGlzW2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xh
c3MsICIgIikuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9LAorCisgICAgICAgIHZhbDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgICAg
IHZhciBob29rcywgcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbMF07
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCAhYXJndW1lbnRzLmxlbmd0
aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5h
bWUudG9Mb3dlckNhc2UoKSBdIHx8IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF07CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29r
cyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IGVsZW0udmFsdWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHR5cGVvZiByZXQgPT09ICJzdHJpbmciID8gCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNl
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5yZXBsYWNlKHJy
ZXR1cm4sICIiKSA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlcgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9PSBudWxsID8gIiIgOiByZXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFy
IGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKworICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwgdmFsOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBpc0Z1bmN0aW9uICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBzZWxmLnZhbCgpICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWwgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgIiI7IGNvbnZlcnQgbnVt
YmVycyB0byBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsID09IG51bGwg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9ICIiOworICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSAiIjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1hcCh2YWwsIGZ1bmN0aW9uICgg
dmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9y
bWFsIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhvb2tzIHx8ICEoInNl
dCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZh
bDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorfSk7CisKK2pRdWVyeS5leHRlbmQoeworICAgICAgICB2YWxIb29rczogeworICAgICAg
ICAgICAgICAgIG9wdGlvbjogeworICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRl
cy52YWx1ZSBpcyB1bmRlZmluZWQgaW4gQmxhY2tiZXJyeSA0LjcgYnV0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0uYXR0cmlidXRlcy52YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF2YWwgfHwgdmFsLnNwZWNpZmll
ZCA/IGVsZW0udmFsdWUgOiBlbGVtLnRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBzZWxlY3Q6IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVjdC1vbmUi
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGhpbmcgd2FzIHNlbGVj
dGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPCAwICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IG9uZSA/IGluZGV4IDogMCwg
bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7IGkgPCBtYXg7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0
aW9uc1sgaSBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBv
cHRncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0
aW9uLnNlbGVjdGVkICYmIChqUXVlcnkuc3VwcG9ydC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlz
YWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09PSBudWxsKSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW9w
dGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJl
bnROb2RlLCAib3B0Z3JvdXAiICkpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0
aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBz
ZWxlY3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG9uZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZhbHVl
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRml4ZXMgQnVnICMyNTUxIC0tIHNlbGVjdC52YWwoKSBicm9rZW4gaW4gSUUgYWZ0ZXIg
Zm9ybS5yZXNldCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25lICYm
ICF2YWx1ZXMubGVuZ3RoICYmIG9wdGlvbnMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkoIG9wdGlvbnNbIGluZGV4IF0gKS52
YWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGpRdWVy
eS5tYWtlQXJyYXkoIHZhbHVlICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGpRdWVyeS5pbkFy
cmF5KCBqUXVlcnkodGhpcykudmFsKCksIHZhbHVlcyApID49IDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIXZhbHVlcy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0s
CisKKyAgICAgICAgYXR0ckZuOiB7CisgICAgICAgICAgICAgICAgdmFsOiB0cnVlLAorICAgICAg
ICAgICAgICAgIGNzczogdHJ1ZSwKKyAgICAgICAgICAgICAgICBodG1sOiB0cnVlLAorICAgICAg
ICAgICAgICAgIHRleHQ6IHRydWUsCisgICAgICAgICAgICAgICAgZGF0YTogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICB3aWR0aDogdHJ1ZSwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IHRydWUsCisg
ICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIAorICAgICAg
ICBhdHRyRml4OiB7CisgICAgICAgICAgICAgICAgLy8gQWx3YXlzIG5vcm1hbGl6ZSB0byBlbnN1
cmUgaG9vayB1c2FnZQorICAgICAgICAgICAgICAgIHRhYmluZGV4OiAidGFiSW5kZXgiCisgICAg
ICAgIH0sCisgICAgICAgIAorICAgICAgICBhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFs
dWUsIHBhc3MgKSB7CisgICAgICAgICAgICAgICAgdmFyIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBkb24ndCBnZXQvc2V0IGF0dHJp
YnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisgICAgICAgICAgICAg
ICAgaWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0g
MiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBwYXNzICYmIG5hbWUgaW4galF1ZXJ5
LmF0dHJGbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkoIGVsZW0g
KVsgbmFtZSBdKCB2YWx1ZSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkCisg
ICAgICAgICAgICAgICAgaWYgKCAhKCJnZXRBdHRyaWJ1dGUiIGluIGVsZW0pICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSAp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5p
c1hNTERvYyggZWxlbSApOworCisgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBuYW1l
IGlmIG5lZWRlZAorICAgICAgICAgICAgICAgIGlmICggbm90eG1sICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5hdHRyRml4WyBuYW1lIF0gfHwgbmFtZTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhvb2tzICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBVc2UgYm9vbEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJib29sZWFuLnRlc3QoIG5hbWUg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGJv
b2xIb29rOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBub2RlSG9v
ayBpZiBhdmFpbGFibGUoIElFNi83ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggbm9kZUhvb2sgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaG9va3MgPSBub2RlSG9vazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYgbm90eG1sICYm
IChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCAiIiArIHZhbHVlICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYm
IG5vdHhtbCAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRl
KCBuYW1lICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRy
aWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSBudWxsID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5kZWZpbmVkIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICByZW1vdmVBdHRy
OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWU7
CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5hdHRyRml4WyBuYW1lIF0gfHwgbmFtZTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUsICIiICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBm
YWxzZSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHJib29sZWFuLnRlc3QoIG5hbWUgKSAmJiAocHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFt
ZSBdIHx8IG5hbWUpIGluIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgYXR0ckhvb2tzOiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlv
biggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGNhbid0IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJlIGNoYW5nZWQgKHNpbmNlIGl0IGNh
dXNlcyBwcm9ibGVtcyBpbiBJRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBydHlwZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5wYXJlbnROb2RlICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggInR5cGUg
cHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09
ICJyYWRpbyIgJiYgalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIHR5cGUgb24gYSBy
YWRpbyBidXR0b24gYWZ0ZXIgdGhlIHZhbHVlIHJlc2V0cyB0aGUgdmFsdWUgaW4gSUU2LTkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB2YWx1ZSB0byBp
dCdzIGRlZmF1bHQgaW4gY2FzZSB0eXBlIGlzIHNldCBhZnRlciB2YWx1ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGVsZW1lbnQgY3JlYXRp
b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gZWxl
bS52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNl
dEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdmFsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAvLyBVc2UgdGhlIHZhbHVlIHByb3BlcnR5IGZvciBiYWNrIGNvbXBhdAorICAgICAgICAg
ICAgICAgIC8vIFVzZSB0aGUgbm9kZUhvb2sgZm9yIGJ1dHRvbiBlbGVtZW50cyBpbiBJRTYvNyAo
IzE5NTQpCisgICAgICAgICAgICAgICAgdmFsdWU6IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiAp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
SG9vay5nZXQoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSBpbiBlbGVtID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVs
ZW0sIHZhbHVlLCBuYW1lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUhvb2suc2V0KCBl
bGVtLCB2YWx1ZSwgbmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0
IHNldEF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBwcm9wRml4OiB7CisgICAgICAgICAg
ICAgICAgdGFiaW5kZXg6ICJ0YWJJbmRleCIsCisgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICJy
ZWFkT25seSIsCisgICAgICAgICAgICAgICAgImZvciI6ICJodG1sRm9yIiwKKyAgICAgICAgICAg
ICAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIiwKKyAgICAgICAgICAgICAgICBtYXhsZW5ndGg6ICJt
YXhMZW5ndGgiLAorICAgICAgICAgICAgICAgIGNlbGxzcGFjaW5nOiAiY2VsbFNwYWNpbmciLAor
ICAgICAgICAgICAgICAgIGNlbGxwYWRkaW5nOiAiY2VsbFBhZGRpbmciLAorICAgICAgICAgICAg
ICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKKyAgICAgICAgICAgICAgICBjb2xzcGFuOiAiY29sU3Bh
biIsCisgICAgICAgICAgICAgICAgdXNlbWFwOiAidXNlTWFwIiwKKyAgICAgICAgICAgICAgICBm
cmFtZWJvcmRlcjogImZyYW1lQm9yZGVyIiwKKyAgICAgICAgICAgICAgICBjb250ZW50ZWRpdGFi
bGU6ICJjb250ZW50RWRpdGFibGUiCisgICAgICAgIH0sCisgICAgICAgIAorICAgICAgICBwcm9w
OiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgdmFyIG5U
eXBlID0gZWxlbS5ub2RlVHlwZTsKKworICAgICAgICAgICAgICAgIC8vIGRvbid0IGdldC9zZXQg
cHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKKyAgICAgICAg
ICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBl
ID09PSAyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgcmV0LCBob29rcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxE
b2MoIGVsZW0gKTsKKworICAgICAgICAgICAgICAgIGlmICggbm90eG1sICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rcworICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9v
a3MgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIChlbGVtWyBuYW1lIF0gPSB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVt
LCBuYW1lICkpICE9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0OworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgCisg
ICAgICAgIHByb3BIb29rczogeworICAgICAgICAgICAgICAgIHRhYkluZGV4OiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0
aGUgY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Js
b2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVl
cy13aXRoLWphdmFzY3JpcHQvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBh
dHRyaWJ1dGVOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVOb2RlICYmIGF0dHJp
YnV0ZU5vZGUuc3BlY2lmaWVkID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJzZUludCggYXR0cmlidXRlTm9kZS52YWx1ZSwgMTAgKSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1l
ICkgfHwgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfSk7
CisKKy8vIEFkZCB0aGUgdGFiaW5kZXggcHJvcEhvb2sgdG8gYXR0ckhvb2tzIGZvciBiYWNrLWNv
bXBhdAoralF1ZXJ5LmF0dHJIb29rcy50YWJJbmRleCA9IGpRdWVyeS5wcm9wSG9va3MudGFiSW5k
ZXg7CisKKy8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcworYm9vbEhvb2sgPSB7CisgICAg
ICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgLy8gQWxp
Z24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzCisgICAg
ICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGF0dHJpYnV0ZSBwcmVzZW5jZSB3aGVyZSBzb21l
IGJvb2xlYW5zIGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgdmFyIGF0dHJOb2Rl
OworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSApID09PSB0
cnVlIHx8ICggYXR0ck5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIGF0
dHJOb2RlLm5vZGVWYWx1ZSAhPT0gZmFsc2UgPworICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZS50b0xvd2VyQ2FzZSgpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lOworICAgICAgICAgICAgICAgIGlmICggdmFsdWUg
PT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGJvb2xlYW4g
YXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgdHJ1ZSBzaW5jZSB3ZSBrbm93IGF0
IHRoaXMgcG9pbnQgaXQncyB0eXBlIGJvb2xlYW4gYW5kIG5vdCBmYWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUgc2FtZSBuYW1lIGFu
ZCBzZXQgdGhlIERPTSBwcm9wZXJ0eQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUg
PSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHByb3BOYW1lIGluIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE9ubHkgc2V0IHRoZSBJREwgc3BlY2lmaWNhbGx5IGlmIGl0IGFscmVhZHkgZXhpc3Rz
IG9uIHRoZSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIHBy
b3BOYW1lIF0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgp
ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBuYW1lOworICAg
ICAgICB9Cit9OworCisvLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcgc29t
ZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQoraWYgKCAhalF1ZXJ5LnN1cHBvcnQu
Z2V0U2V0QXR0cmlidXRlICkgeworICAgICAgICAKKyAgICAgICAgLy8gVXNlIHRoaXMgZm9yIGFu
eSBhdHRyaWJ1dGUgaW4gSUU2LzcKKyAgICAgICAgLy8gVGhpcyBmaXhlcyBhbG1vc3QgZXZlcnkg
SUU2LzcgaXNzdWUKKyAgICAgICAgbm9kZUhvb2sgPSBqUXVlcnkudmFsSG9va3MuYnV0dG9uID0g
eworICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcmV0OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBSZXR1cm4gdW5kZWZpbmVkIGlmIG5vZGVWYWx1ZSBpcyBlbXB0eSBzdHJpbmcKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXQgJiYgcmV0Lm5vZGVWYWx1ZSAhPT0gIiIgPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQubm9kZVZhbHVlIDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGV4aXN0aW5nIG9yIGNyZWF0ZSBhIG5ldyBhdHRy
aWJ1dGUgbm9kZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0
cmlidXRlTm9kZSggbmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmV0ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkb2N1bWVudC5jcmVhdGVB
dHRyaWJ1dGUoIG5hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5z
ZXRBdHRyaWJ1dGVOb2RlKCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0Lm5vZGVWYWx1ZSA9IHZhbHVlICsgIiIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICAvLyBTZXQgd2lkdGggYW5k
IGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmcoIEJ1ZyAjODE1MCAp
CisgICAgICAgIC8vIFRoaXMgaXMgZm9yIHJlbW92YWxzCisgICAgICAgIGpRdWVyeS5lYWNoKFsg
IndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgICAgICAgICAg
ICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJI
b29rc1sgbmFtZSBdLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSA9PT0gIiIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS5zZXRBdHRyaWJ1dGUoIG5hbWUsICJhdXRvIiApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKK30KKworCisvLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwg
Y2FsbCBvbiBJRQoraWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7CisgICAg
ICAgIGpRdWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiwgIndpZHRoIiwgImhlaWdodCIgXSwgZnVu
Y3Rpb24oIGksIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFt
ZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/IHVu
ZGVmaW5lZCA6IHJldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7Cit9CisKK2lmICggIWpRdWVyeS5zdXBwb3J0LnN0eWxlICkgewor
ICAgICAgICBqUXVlcnkuYXR0ckhvb2tzLnN0eWxlID0geworICAgICAgICAgICAgICAgIGdldDog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdW5k
ZWZpbmVkIGluIHRoZSBjYXNlIG9mIGVtcHR5IHN0cmluZworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm9ybWFsaXplIHRvIGxvd2VyY2FzZSBzaW5jZSBJRSB1cHBlcmNhc2VzIGNzcyBwcm9w
ZXJ0eSBuYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc3R5bGUuY3Nz
VGV4dC50b0xvd2VyQ2FzZSgpIHx8IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChlbGVtLnN0eWxlLmNzc1RleHQgPSAiIiArIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgIH07Cit9CisKKy8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0
aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBhbiBvcHRpb24KKy8vIEFjY2Vzc2luZyB0
aGUgcGFyZW50J3Mgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eSBmaXhlcyBpdAoraWYgKCAhalF1ZXJ5
LnN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7CisgICAgICAgIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0
ZWQgPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkLCB7CisgICAgICAg
ICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcGFyZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQu
c2VsZWN0ZWRJbmRleDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3MDEKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQucGFyZW50Tm9kZS5z
ZWxlY3RlZEluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0pOworfQorCisvLyBSYWRpb3MgYW5kIGNoZWNr
Ym94ZXMgZ2V0dGVyL3NldHRlcgoraWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tPbiApIHsKKyAg
ICAgICAgalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0geworICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1
cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYgYSB2YWx1ZSBpc24ndCBzcGVjaWZpZWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIp
ID09PSBudWxsID8gIm9uIiA6IGVsZW0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7Cit9CitqUXVlcnkuZWFjaChbICJyYWRp
byIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGpRdWVyeS52YWxIb29rc1sg
dGhpcyBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0sIHsKKyAgICAg
ICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXko
IGpRdWVyeShlbGVtKS52YWwoKSwgdmFsdWUgKSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0pOworfSk7CisKKworCisKK3ZhciBy
bmFtZXNwYWNlcyA9IC9cLiguKikkLywKKyAgICAgICAgcmZvcm1FbGVtcyA9IC9eKD86dGV4dGFy
ZWF8aW5wdXR8c2VsZWN0KSQvaSwKKyAgICAgICAgcnBlcmlvZCA9IC9cLi9nLAorICAgICAgICBy
c3BhY2VzID0gLyAvZywKKyAgICAgICAgcmVzY2FwZSA9IC9bXlx3XHMufGBdL2csCisgICAgICAg
IGZjbGVhbnVwID0gZnVuY3Rpb24oIG5tICkgeworICAgICAgICAgICAgICAgIHJldHVybiBubS5y
ZXBsYWNlKHJlc2NhcGUsICJcXCQmIik7CisgICAgICAgIH07CisKKy8qCisgKiBBIG51bWJlciBv
ZiBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgZm9yIG1hbmFnaW5nIGV2ZW50cy4KKyAqIE1hbnkgb2Yg
dGhlIGlkZWFzIGJlaGluZCB0aGlzIGNvZGUgb3JpZ2luYXRlZCBmcm9tCisgKiBEZWFuIEVkd2Fy
ZHMnIGFkZEV2ZW50IGxpYnJhcnkuCisgKi8KK2pRdWVyeS5ldmVudCA9IHsKKworICAgICAgICAv
LyBCaW5kIGFuIGV2ZW50IHRvIGFuIGVsZW1lbnQKKyAgICAgICAgLy8gT3JpZ2luYWwgYnkgRGVh
biBFZHdhcmRzCisgICAgICAgIGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBk
YXRhICkgeworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVt
Lm5vZGVUeXBlID09PSA4ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggaGFuZGxlciA9PT0gZmFsc2Ug
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gcmV0dXJuRmFsc2U7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggIWhhbmRsZXIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGaXhlcyBidWcgIzcyMjkuIEZpeCByZWNvbW1lbmRlZCBieSBqZGFsdG9uCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgdmFyIGhhbmRsZU9iakluLCBoYW5kbGVPYmo7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9i
akluID0gaGFuZGxlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVP
YmpJbi5oYW5kbGVyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBiZWluZyBleGVjdXRlZCBoYXMgYSB1bmlxdWUgSUQK
KyAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVyLmd1aWQgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUK
KyAgICAgICAgICAgICAgICB2YXIgZWxlbURhdGEgPSBqUXVlcnkuX2RhdGEoIGVsZW0gKTsKKwor
ICAgICAgICAgICAgICAgIC8vIElmIG5vIGVsZW1EYXRhIGlzIGZvdW5kIHRoZW4gd2UgbXVzdCBi
ZSB0cnlpbmcgdG8gYmluZCB0byBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gYmFubmVk
IG5vRGF0YSBlbGVtZW50cworICAgICAgICAgICAgICAgIGlmICggIWVsZW1EYXRhICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHZhciBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZTsKKworICAgICAgICAgICAgICAg
IGlmICggIWV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1EYXRhLmV2ZW50
cyA9IGV2ZW50cyA9IHt9OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICggIWV2ZW50SGFuZGxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURhdGEuaGFu
ZGxlID0gZXZlbnRIYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50
LnRyaWdnZXIoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBh
biBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIg
JiYgKCFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSkgPworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5oYW5kbGUuYXBwbHko
IGV2ZW50SGFuZGxlLmVsZW0sIGFyZ3VtZW50cyApIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFkZCBlbGVtIGFzIGEgcHJv
cGVydHkgb2YgdGhlIGhhbmRsZSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dG8gcHJldmVudCBhIG1lbW9yeSBsZWFrIHdpdGggbm9uLW5hdGl2ZSBldmVudHMgaW4gSUUuCisg
ICAgICAgICAgICAgICAgZXZlbnRIYW5kbGUuZWxlbSA9IGVsZW07CisKKyAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCisgICAgICAg
ICAgICAgICAgLy8galF1ZXJ5KC4uLikuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOwor
ICAgICAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoIiAiKTsKKworICAgICAgICAgICAg
ICAgIHZhciB0eXBlLCBpID0gMCwgbmFtZXNwYWNlczsKKworICAgICAgICAgICAgICAgIHdoaWxl
ICggKHR5cGUgPSB0eXBlc1sgaSsrIF0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlT2JqID0gaGFuZGxlT2JqSW4gPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXh0ZW5kKHt9LCBoYW5kbGVPYmpJbikgOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7IGhhbmRsZXI6IGhhbmRsZXIsIGRhdGE6IGRhdGEgfTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTmFtZXNwYWNlZCBldmVudCBoYW5kbGVycworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoIi4iKSA+IC0xICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID0gbmFtZXNwYWNl
cy5zbGljZSgwKS5zb3J0KCkuam9pbigiLiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gW107
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPSAi
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlT2JqLnR5cGUgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaGFu
ZGxlT2JqLmd1aWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9i
ai5ndWlkID0gaGFuZGxlci5ndWlkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbGlzdCBvZiBmdW5jdGlvbnMg
Ym91bmQgdG8gdGhpcyBldmVudAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJz
ID0gZXZlbnRzWyB0eXBlIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNp
YWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFoYW5kbGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBhIHNwZWNpYWwgZXZlbnQgaGFuZGxlcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVy
L2F0dGFjaEV2ZW50IGlmIHRoZSBzcGVjaWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVs
ZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpbmQgdGhlIGdsb2JhbCBldmVu
dCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5
cGUsIGV2ZW50SGFuZGxlLCBmYWxzZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYXR0YWNoRXZlbnQoICJv
biIgKyB0eXBlLCBldmVudEhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwu
YWRkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLmFkZC5jYWxs
KCBlbGVtLCBoYW5kbGVPYmogKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiB0byB0aGUg
ZWxlbWVudCdzIGhhbmRsZXIgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMu
cHVzaCggaGFuZGxlT2JqICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdHJh
Y2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9u
CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE51bGxpZnkgZWxl
bSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQorICAgICAgICAgICAgICAgIGVsZW0gPSBu
dWxsOworICAgICAgICB9LAorCisgICAgICAgIGdsb2JhbDoge30sCisKKyAgICAgICAgLy8gRGV0
YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50CisgICAgICAgIHJl
bW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBwb3MgKSB7CisgICAgICAgICAg
ICAgICAgLy8gZG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKyAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0g
OCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXIgPT09IGZhbHNlICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlciA9IHJldHVybkZhbHNlOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHZhciByZXQsIHR5cGUsIGZuLCBqLCBpID0gMCwgYWxsLCBuYW1l
c3BhY2VzLCBuYW1lc3BhY2UsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxlT2JqLCBvcmlnVHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1EYXRhID0galF1ZXJ5Lmhhc0RhdGEoIGVs
ZW0gKSAmJiBqUXVlcnkuX2RhdGEoIGVsZW0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50cyA9IGVsZW1EYXRhICYmIGVsZW1EYXRhLmV2ZW50czsKKworICAgICAgICAgICAgICAgIGlm
ICggIWVsZW1EYXRhIHx8ICFldmVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gdHlwZXMgaXMgYWN0
dWFsbHkgYW4gZXZlbnQgb2JqZWN0IGhlcmUKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVzICYm
IHR5cGVzLnR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gdHlwZXMu
aGFuZGxlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzID0gdHlwZXMudHlwZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyBm
b3IgdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoICF0eXBlcyB8fCB0eXBlb2YgdHlw
ZXMgPT09ICJzdHJpbmciICYmIHR5cGVzLmNoYXJBdCgwKSA9PT0gIi4iICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZXMgPSB0eXBlcyB8fCAiIjsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlcyApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIGV2
ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQorICAgICAgICAgICAgICAgIC8vIGpRdWVyeSguLi4p
LnVuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOworICAgICAgICAgICAgICAgIHR5cGVz
ID0gdHlwZXMuc3BsaXQoIiAiKTsKKworICAgICAgICAgICAgICAgIHdoaWxlICggKHR5cGUgPSB0
eXBlc1sgaSsrIF0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ1R5cGUgPSB0eXBl
OworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFsbCA9IHR5cGUuaW5kZXhPZigiLiIpIDwgMDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWVzcGFjZXMgPSBbXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhYWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOYW1lc3BhY2Vk
IGV2ZW50IGhhbmRsZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFj
ZXMgPSB0eXBlLnNwbGl0KCIuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZXNwYWNlID0gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIG5hbWVzcGFjZXMuc2xpY2UoMCkuc29y
dCgpLCBmY2xlYW51cCApLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSArICIoXFwufCQpIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlw
ZSA9IGV2ZW50c1sgdHlwZSBdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFldmVu
dFR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFo
YW5kbGVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsg
aiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGogXTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYWxsIHx8IG5hbWVzcGFjZS50ZXN0KCBo
YW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCBvcmlnVHlwZSwgaGFu
ZGxlT2JqLmhhbmRsZXIsIGogKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0g
alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggaiA9IHBvcyB8fCAwOyBqIDwgZXZlbnRUeXBlLmxlbmd0aDsgaisrICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGog
XTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXIuZ3VpZCA9
PT0gaGFuZGxlT2JqLmd1aWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcmVtb3ZlIHRoZSBnaXZlbiBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gdHlwZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYWxsIHx8IG5hbWVzcGFj
ZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBvcyA9PSBudWxsICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUu
c3BsaWNlKCBqLS0sIDEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwg
aGFuZGxlT2JqICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3MgIT0gbnVsbCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIG5vIG1v
cmUgaGFuZGxlcnMgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXZlbnRUeXBl
Lmxlbmd0aCA9PT0gMCB8fCBwb3MgIT0gbnVsbCAmJiBldmVudFR5cGUubGVuZ3RoID09PSAxICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzcGVjaWFsLnRlYXJkb3du
IHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcyApID09PSBmYWxzZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3Zl
RXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
bnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1sgdHlw
ZSBdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2Vk
CisgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlID0gZWxlbURhdGEuaGFuZGxlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGUgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZS5lbGVtID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmV2ZW50czsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtRGF0YS5oYW5kbGU7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGVsZW1EYXRhICkg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBl
bGVtLCB1bmRlZmluZWQsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIAorICAgICAgICAvLyBFdmVudHMgdGhh
dCBhcmUgc2FmZSB0byBzaG9ydC1jaXJjdWl0IGlmIG5vIGhhbmRsZXJzIGFyZSBhdHRhY2hlZC4K
KyAgICAgICAgLy8gTmF0aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgdGhleSBt
YXkgaGF2ZSBpbmxpbmUgaGFuZGxlcnMuCisgICAgICAgIGN1c3RvbUV2ZW50OiB7CisgICAgICAg
ICAgICAgICAgImdldERhdGEiOiB0cnVlLAorICAgICAgICAgICAgICAgICJzZXREYXRhIjogdHJ1
ZSwKKyAgICAgICAgICAgICAgICAiY2hhbmdlRGF0YSI6IHRydWUKKyAgICAgICAgfSwKKworICAg
ICAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyAp
IHsKKyAgICAgICAgICAgICAgICAvLyBFdmVudCBvYmplY3Qgb3IgZXZlbnQgdHlwZQorICAgICAg
ICAgICAgICAgIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCBldmVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWVzcGFjZXMgPSBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1
c2l2ZTsKKworICAgICAgICAgICAgICAgIGlmICggdHlwZS5pbmRleE9mKCIhIikgPj0gMCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZSBldmVudHMgdHJpZ2dlciBvbmx5
IGZvciB0aGUgZXhhY3QgZXZlbnQgKG5vIG5hbWVzcGFjZXMpCisgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gdHlwZS5zbGljZSgwLCAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBl
eGNsdXNpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICggdHlwZS5pbmRleE9mKCIuIikgPj0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUg
aW4gaGFuZGxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNw
bGl0KCIuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlm
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCAoIWVsZW0gfHwgalF1ZXJ5LmV2ZW50
LmN1c3RvbUV2ZW50WyB0eXBlIF0pICYmICFqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBqUXVlcnkgaGFuZGxlcnMgZm9yIHRoaXMg
ZXZlbnQgdHlwZSwgYW5kIGl0IGNhbid0IGhhdmUgaW5saW5lIGhhbmRsZXJzCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIEV2ZW50LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZl
bnQgdHlwZSBzdHJpbmcKKyAgICAgICAgICAgICAgICBldmVudCA9IHR5cGVvZiBldmVudCA9PT0g
Im9iamVjdCIgPworICAgICAgICAgICAgICAgICAgICAgICAgLy8galF1ZXJ5LkV2ZW50IG9iamVj
dAorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gPyBldmVu
dCA6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3QgbGl0ZXJhbAorICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgZXZlbnQgKSA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBKdXN0IHRoZSBldmVudCB0eXBlIChzdHJpbmcpCisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlICk7CisKKyAgICAgICAgICAg
ICAgICBldmVudC50eXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICBldmVudC5leGNsdXNpdmUg
PSBleGNsdXNpdmU7CisgICAgICAgICAgICAgICAgZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNl
cy5qb2luKCIuIik7CisgICAgICAgICAgICAgICAgZXZlbnQubmFtZXNwYWNlX3JlID0gbmV3IFJl
Z0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSArICIoXFwu
fCQpIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gdHJpZ2dlckhhbmRs
ZXIoKSBhbmQgZ2xvYmFsIGV2ZW50cyBkb24ndCBidWJibGUgb3IgcnVuIHRoZSBkZWZhdWx0IGFj
dGlvbgorICAgICAgICAgICAgICAgIGlmICggb25seUhhbmRsZXJzIHx8ICFlbGVtICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCisgICAgICAgICAg
ICAgICAgaWYgKCAhZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFN0
b3AgdGF1bnRpbmcgdGhlIGRhdGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdh
eXMgYXR0YWNoIHRvIGRvY3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFj
aCggalF1ZXJ5LmNhY2hlLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaW50ZXJuYWxLZXkgdmFyaWFibGUgaXMganVzdCB1c2VkIHRvIG1ha2UgaXQgZWFz
aWVyIHRvIGZpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHBvdGVu
dGlhbGx5IGNoYW5nZSB0aGlzIHN0dWZmIGxhdGVyOyBjdXJyZW50bHkgaXQganVzdAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludHMgdG8galF1ZXJ5LmV4cGFuZG8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVybmFsS2V5ID0galF1ZXJ5LmV4
cGFuZG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxD
YWNoZSA9IHRoaXNbIGludGVybmFsS2V5IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggaW50ZXJuYWxDYWNoZSAmJiBpbnRlcm5hbENhY2hlLmV2ZW50cyAmJiBpbnRlcm5h
bENhY2hlLmV2ZW50c1sgdHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBldmVudCwgZGF0YSwgaW50ZXJuYWxDYWNo
ZS5oYW5kbGUuZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBkbyBldmVudHMg
b24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENs
ZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZAorICAgICAgICAgICAg
ICAgIGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBldmVudC50YXJn
ZXQgPSBlbGVtOworCisgICAgICAgICAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEg
YW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAorICAg
ICAgICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBqUXVlcnkubWFrZUFycmF5KCBkYXRh
ICkgOiBbXTsKKyAgICAgICAgICAgICAgICBkYXRhLnVuc2hpZnQoIGV2ZW50ICk7CisKKyAgICAg
ICAgICAgICAgICB2YXIgY3VyID0gZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElF
IGRvZXNuJ3QgbGlrZSBtZXRob2QgbmFtZXMgd2l0aCBhIGNvbG9uICgjMzUzMywgIzgyNzIpCisg
ICAgICAgICAgICAgICAgICAgICAgICBvbnR5cGUgPSB0eXBlLmluZGV4T2YoIjoiKSA8IDAgPyAi
b24iICsgdHlwZSA6ICIiOworCisgICAgICAgICAgICAgICAgLy8gRmlyZSBldmVudCBvbiB0aGUg
Y3VycmVudCBlbGVtZW50LCB0aGVuIGJ1YmJsZSB1cCB0aGUgRE9NIHRyZWUKKyAgICAgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlID0galF1ZXJ5Ll9k
YXRhKCBjdXIsICJoYW5kbGUiICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmN1
cnJlbnRUYXJnZXQgPSBjdXI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmFwcGx5KCBjdXIsIGRh
dGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVHJpZ2dlciBhbiBpbmxpbmUgYm91bmQgc2NyaXB0CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG9udHlwZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgJiYgY3VyWyBvbnR5
cGUgXSAmJiBjdXJbIG9udHlwZSBdLmFwcGx5KCBjdXIsIGRhdGEgKSA9PT0gZmFsc2UgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdWJi
bGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCBjdXIub3duZXJEb2N1bWVudCB8fCBjdXIgPT09IGV2
ZW50LnRhcmdldC5vd25lckRvY3VtZW50ICYmIHdpbmRvdzsKKyAgICAgICAgICAgICAgICB9IHdo
aWxlICggY3VyICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICk7CisKKyAgICAgICAg
ICAgICAgICAvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQg
bm93CisgICAgICAgICAgICAgICAgaWYgKCAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIXNwZWNpYWwuX2RlZmF1bHQgfHwgc3Bl
Y2lhbC5fZGVmYXVsdC5jYWxsKCBlbGVtLm93bmVyRG9jdW1lbnQsIGV2ZW50ICkgPT09IGZhbHNl
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHR5cGUgPT09ICJjbGljayIg
JiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYSIgKSkgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGVs
ZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0
aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0
aGUgZXZlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbid0IHVzZSBh
biAuaXNGdW5jdGlvbikoKSBjaGVjayBoZXJlIGJlY2F1c2UgSUU2LzcgZmFpbHMgdGhhdCB0ZXN0
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTw5IGRpZXMgb24gZm9jdXMg
dG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KSwgbWF5IHdhbnQgdG8gcmV2aXNpdCBhIHRyeS9jYXRj
aC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9udHlwZSAmJiBlbGVtWyB0eXBlIF0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24n
dCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9k
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQgPSBl
bGVtWyBvbnR5cGUgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBvbGQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9
IHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtWyB0eXBlIF0oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBpZUVycm9yICkge30K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9sZCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG9sZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7CisgICAgICAgIH0sCisKKyAgICAgICAg
aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICAgICAgZXZlbnQgPSBqUXVl
cnkuZXZlbnQuZml4KCBldmVudCB8fCB3aW5kb3cuZXZlbnQgKTsKKyAgICAgICAgICAgICAgICAv
LyBTbmFwc2hvdCB0aGUgaGFuZGxlcnMgbGlzdCBzaW5jZSBhIGNhbGxlZCBoYW5kbGVyIG1heSBh
ZGQvcmVtb3ZlIGV2ZW50cy4KKyAgICAgICAgICAgICAgICB2YXIgaGFuZGxlcnMgPSAoKGpRdWVy
eS5fZGF0YSggdGhpcywgImV2ZW50cyIgKSB8fCB7fSlbIGV2ZW50LnR5cGUgXSB8fCBbXSkuc2xp
Y2UoMCksCisgICAgICAgICAgICAgICAgICAgICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2
ZSAmJiAhZXZlbnQubmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMsIDAgKTsKKworICAgICAgICAgICAg
ICAgIC8vIFVzZSB0aGUgZml4LWVkIEV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBu
YXRpdmUgZXZlbnQKKyAgICAgICAgICAgICAgICBhcmdzWzBdID0gZXZlbnQ7CisgICAgICAgICAg
ICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaiA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGogPCBsOyBqKysgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgMSkgYmUgbm9uLWV4Y2x1
c2l2ZSBhbmQgaGF2ZSBubyBuYW1lc3BhY2UsIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyAyKSBoYXZlIG5hbWVzcGFjZShzKSBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUg
Ym91bmQgZXZlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJ1bl9hbGwgfHwgZXZl
bnQubmFtZXNwYWNlX3JlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyBpbiBhIHJlZmVyZW5jZSB0byB0aGUgaGFu
ZGxlciBmdW5jdGlvbiBpdHNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U28gdGhhdCB3ZSBjYW4gbGF0ZXIgcmVtb3ZlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50LmhhbmRsZXIgPSBoYW5kbGVPYmouaGFuZGxlcjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGhhbmRsZU9iai5oYW5kbGVy
LmFwcGx5KCB0aGlzLCBhcmdzICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBldmVudC5yZXN1bHQgPSByZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXQgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQ
cm9wYWdhdGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0Owor
ICAgICAgICB9LAorCisgICAgICAgIHByb3BzOiAiYWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUg
YnViYmxlcyBidXR0b24gY2FuY2VsYWJsZSBjaGFyQ29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtl
eSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0YWlsIGV2ZW50UGhhc2UgZnJvbUVsZW1lbnQgaGFuZGxl
ciBrZXlDb2RlIGxheWVyWCBsYXllclkgbWV0YUtleSBuZXdWYWx1ZSBvZmZzZXRYIG9mZnNldFkg
cGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWROb2RlIHJlbGF0ZWRUYXJnZXQgc2NyZWVuWCBz
Y3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFyZ2V0IHRvRWxlbWVudCB2aWV3IHdoZWVsRGVs
dGEgd2hpY2giLnNwbGl0KCIgIiksCisKKyAgICAgICAgZml4OiBmdW5jdGlvbiggZXZlbnQgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudDsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyBzdG9yZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IG9iamVj
dAorICAgICAgICAgICAgICAgIC8vIGFuZCAiY2xvbmUiIHRvIHNldCByZWFkLW9ubHkgcHJvcGVy
dGllcworICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZXZlbnQ7CisgICAgICAg
ICAgICAgICAgZXZlbnQgPSBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKKworICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gdGhpcy5wcm9wcy5sZW5ndGgsIHByb3A7IGk7ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IHRoaXMucHJvcHNbIC0taSBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGaXggdGFyZ2V0IHByb3Bl
cnR5LCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyAjMTkyNSB3aGVyZSBzcmNFbGVtZW50
IG1pZ2h0IG5vdCBiZSBkZWZpbmVkIGVpdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnQudGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudCB8fCBkb2N1bWVudDsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0YXJnZXQgaXMgYSB0ZXh0bm9kZSAo
c2FmYXJpKQorICAgICAgICAgICAgICAgIGlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAz
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0
LnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWRk
IHJlbGF0ZWRUYXJnZXQsIGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgIGlmICggIWV2ZW50
LnJlbGF0ZWRUYXJnZXQgJiYgZXZlbnQuZnJvbUVsZW1lbnQgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID0gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50
LnRhcmdldCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50OworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlWC9ZIGlmIG1pc3Np
bmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LnBh
Z2VYID09IG51bGwgJiYgZXZlbnQuY2xpZW50WCAhPSBudWxsICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGV2ZW50RG9jdW1lbnQgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8
fCBkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gZXZlbnRE
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvZHkgPSBldmVudERvY3VtZW50LmJvZHk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50LnBhZ2VYID0gZXZlbnQuY2xpZW50WCArIChkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9k
eSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCkgLSAoZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJv
ZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDApOworICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnQucGFnZVkgPSBldmVudC5jbGllbnRZICsgKGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5
ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9k
eSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCisgICAgICAgICAgICAgICAgaWYg
KCBldmVudC53aGljaCA9PSBudWxsICYmIChldmVudC5jaGFyQ29kZSAhPSBudWxsIHx8IGV2ZW50
LmtleUNvZGUgIT0gbnVsbCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC53aGlj
aCA9IGV2ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNv
ZGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWRkIG1ldGFLZXkg
dG8gbm9uLU1hYyBicm93c2VycyAodXNlIGN0cmwgZm9yIFBDJ3MgYW5kIE1ldGEgZm9yIE1hY3Mp
CisgICAgICAgICAgICAgICAgaWYgKCAhZXZlbnQubWV0YUtleSAmJiBldmVudC5jdHJsS2V5ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubWV0YUtleSA9IGV2ZW50LmN0cmxLZXk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBj
bGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodAorICAgICAgICAgICAg
ICAgIC8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0Cisg
ICAgICAgICAgICAgICAgaWYgKCAhZXZlbnQud2hpY2ggJiYgZXZlbnQuYnV0dG9uICE9PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC53aGljaCA9IChldmVudC5i
dXR0b24gJiAxID8gMSA6ICggZXZlbnQuYnV0dG9uICYgMiA/IDMgOiAoIGV2ZW50LmJ1dHRvbiAm
IDQgPyAyIDogMCApICkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJl
dHVybiBldmVudDsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBEZXByZWNhdGVkLCB1c2UgalF1
ZXJ5Lmd1aWQgaW5zdGVhZAorICAgICAgICBndWlkOiAxRTgsCisKKyAgICAgICAgLy8gRGVwcmVj
YXRlZCwgdXNlIGpRdWVyeS5wcm94eSBpbnN0ZWFkCisgICAgICAgIHByb3h5OiBqUXVlcnkucHJv
eHksCisKKyAgICAgICAgc3BlY2lhbDogeworICAgICAgICAgICAgICAgIHJlYWR5OiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHJlYWR5IGV2ZW50IGlzIHNldHVw
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cDogalF1ZXJ5LmJpbmRSZWFkeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRlYXJkb3duOiBqUXVlcnkubm9vcAorICAgICAgICAgICAgICAg
IH0sCisKKyAgICAgICAgICAgICAgICBsaXZlOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGQ6IGZ1bmN0aW9uKCBoYW5kbGVPYmogKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZUNvbnZlcnQoIGhhbmRsZU9iai5vcmlnVHlwZSwgaGFuZGxlT2JqLnNl
bGVjdG9yICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmV4dGVuZCh7fSwgaGFuZGxlT2JqLCB7aGFuZGxlcjogbGl2ZUhhbmRsZXIsIGd1aWQ6IGhhbmRs
ZU9iai5oYW5kbGVyLmd1aWR9KSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiggaGFuZGxlT2JqICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCBs
aXZlQ29udmVydCggaGFuZGxlT2JqLm9yaWdUeXBlLCBoYW5kbGVPYmouc2VsZWN0b3IgKSwgaGFu
ZGxlT2JqICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwK
KworICAgICAgICAgICAgICAgIGJlZm9yZXVubG9hZDogeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0dXA6IGZ1bmN0aW9uKCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGRvIHRoaXMg
c3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBqUXVlcnkuaXNXaW5kb3coIHRoaXMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5sb2FkID0gZXZlbnRIYW5kbGU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbiggbmFtZXNwYWNl
cywgZXZlbnRIYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dGhpcy5vbmJlZm9yZXVubG9hZCA9PT0gZXZlbnRIYW5kbGUgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmJlZm9yZXVubG9hZCA9IG51bGw7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK307CisKK2pRdWVyeS5yZW1vdmVFdmVudCA9
IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgPworICAgICAgICBmdW5jdGlvbiggZWxlbSwg
dHlwZSwgaGFuZGxlICkgeworICAgICAgICAgICAgICAgIGlmICggZWxlbS5yZW1vdmVFdmVudExp
c3RlbmVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVFdmVudExpc3Rl
bmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9
IDoKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0uZGV0YWNoRXZlbnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLmRldGFjaEV2ZW50KCAib24iICsgdHlwZSwgaGFuZGxlICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICB9OworCitqUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsK
KyAgICAgICAgLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3Jk
CisgICAgICAgIGlmICggIXRoaXMucHJldmVudERlZmF1bHQgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEV2ZW50IG9iamVjdAorICAgICAgICBpZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7CisgICAgICAgICAgICAgICAg
dGhpcy50eXBlID0gc3JjLnR5cGU7CisKKyAgICAgICAgICAgICAgICAvLyBFdmVudHMgYnViYmxp
bmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAorICAg
ICAgICAgICAgICAgIC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0
IHRoZSBjb3JyZWN0IHZhbHVlLgorICAgICAgICAgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVu
dGVkID0gKHNyYy5kZWZhdWx0UHJldmVudGVkIHx8IHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2Ug
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5nZXRQcmV2ZW50RGVmYXVsdCAmJiBzcmMu
Z2V0UHJldmVudERlZmF1bHQoKSkgPyByZXR1cm5UcnVlIDogcmV0dXJuRmFsc2U7CisKKyAgICAg
ICAgLy8gRXZlbnQgdHlwZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMu
dHlwZSA9IHNyYzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFB1dCBleHBsaWNpdGx5IHByb3Zp
ZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0CisgICAgICAgIGlmICggcHJvcHMg
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIHRpbWVTdGFtcCBpcyBidWdneSBmb3Igc29tZSBldmVudHMgb24g
RmlyZWZveCgjMzg0MykKKyAgICAgICAgLy8gU28gd2Ugd29uJ3QgcmVseSBvbiB0aGUgbmF0aXZl
IHZhbHVlCisgICAgICAgIHRoaXMudGltZVN0YW1wID0galF1ZXJ5Lm5vdygpOworCisgICAgICAg
IC8vIE1hcmsgaXQgYXMgZml4ZWQKKyAgICAgICAgdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRy
dWU7Cit9OworCitmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworfQorZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkg
dGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZworLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
MjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5o
dG1sCitqUXVlcnkuRXZlbnQucHJvdG90eXBlID0geworICAgICAgICBwcmV2ZW50RGVmYXVsdDog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBy
ZXR1cm5UcnVlOworCisgICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7
CisgICAgICAgICAgICAgICAgaWYgKCAhZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpZiBwcmV2ZW50
RGVmYXVsdCBleGlzdHMgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAorICAgICAgICAgICAg
ICAgIGlmICggZS5wcmV2ZW50RGVmYXVsdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUu
cHJldmVudERlZmF1bHQoKTsKKworICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQgdGhl
IHJldHVyblZhbHVlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBmYWxzZSAoSUUp
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0
dXJuVmFsdWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
IHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pc1By
b3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAgICAgICAgICB2YXIgZSA9
IHRoaXMub3JpZ2luYWxFdmVudDsKKyAgICAgICAgICAgICAgICBpZiAoICFlICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwg
ZXZlbnQKKyAgICAgICAgICAgICAgICBpZiAoIGUuc3RvcFByb3BhZ2F0aW9uICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCB0aGUgY2FuY2VsQnViYmxlIHByb3Bl
cnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVlIChJRSkKKyAgICAgICAgICAgICAgICBl
LmNhbmNlbEJ1YmJsZSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAgIHN0b3BJbW1lZGlhdGVQ
cm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pc0ltbWVkaWF0
ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisgICAgICAgICAgICAgICAgdGhpcy5z
dG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfSwKKyAgICAgICAgaXNEZWZhdWx0UHJldmVudGVk
OiByZXR1cm5GYWxzZSwKKyAgICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNl
LAorICAgICAgICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKK307
CisKKy8vIENoZWNrcyBpZiBhbiBldmVudCBoYXBwZW5lZCBvbiBhbiBlbGVtZW50IHdpdGhpbiBh
bm90aGVyIGVsZW1lbnQKKy8vIFVzZWQgaW4galF1ZXJ5LmV2ZW50LnNwZWNpYWwubW91c2VlbnRl
ciBhbmQgbW91c2VsZWF2ZSBoYW5kbGVycwordmFyIHdpdGhpbkVsZW1lbnQgPSBmdW5jdGlvbigg
ZXZlbnQgKSB7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgbW91c2Uob3ZlcnxvdXQpIGFyZSBzdGls
bCB3aXRoaW4gdGhlIHNhbWUgcGFyZW50IGVsZW1lbnQKKyAgICAgICAgdmFyIHJlbGF0ZWQgPSBl
dmVudC5yZWxhdGVkVGFyZ2V0LAorICAgICAgICAgICAgICAgIGluc2lkZSA9IGZhbHNlLAorICAg
ICAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGU7CisKKyAgICAgICAgZXZlbnQudHlw
ZSA9IGV2ZW50LmRhdGE7CisKKyAgICAgICAgaWYgKCByZWxhdGVkICE9PSB0aGlzICkgeworCisg
ICAgICAgICAgICAgICAgaWYgKCByZWxhdGVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aW5zaWRlID0galF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCByZWxhdGVkICk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCAhaW5zaWRlICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50VHlwZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0KK30sCisKKy8vIEluIGNhc2Ugb2YgZXZlbnQgZGVsZWdh
dGlvbiwgd2Ugb25seSBuZWVkIHRvIHJlbmFtZSB0aGUgZXZlbnQudHlwZSwKKy8vIGxpdmVIYW5k
bGVyIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0LgorZGVsZWdhdGUgPSBmdW5jdGlvbiggZXZl
bnQgKSB7CisgICAgICAgIGV2ZW50LnR5cGUgPSBldmVudC5kYXRhOworICAgICAgICBqUXVlcnku
ZXZlbnQuaGFuZGxlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKK307CisKKy8vIENyZWF0ZSBt
b3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGV2ZW50cworalF1ZXJ5LmVhY2goeworICAgICAgICBt
b3VzZWVudGVyOiAibW91c2VvdmVyIiwKKyAgICAgICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0Igor
fSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKKyAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxb
IG9yaWcgXSA9IHsKKyAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCBmaXgsIGRhdGEg
JiYgZGF0YS5zZWxlY3RvciA/IGRlbGVnYXRlIDogd2l0aGluRWxlbWVudCwgb3JpZyApOworICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBkYXRh
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywg
Zml4LCBkYXRhICYmIGRhdGEuc2VsZWN0b3IgPyBkZWxlZ2F0ZSA6IHdpdGhpbkVsZW1lbnQgKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07Cit9KTsKKworLy8gc3VibWl0IGRlbGVnYXRp
b24KK2lmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMgKSB7CisKKyAgICAgICAgalF1
ZXJ5LmV2ZW50LnNwZWNpYWwuc3VibWl0ID0geworICAgICAgICAgICAgICAgIHNldHVwOiBmdW5j
dGlvbiggZGF0YSwgbmFtZXNwYWNlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWpRdWVyeS5ub2RlTmFtZSggdGhpcywgImZvcm0iICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQodGhpcywgImNsaWNrLnNwZWNpYWxTdWJtaXQi
LCBmdW5jdGlvbiggZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBBdm9pZCB0cmlnZ2VyaW5nIGVycm9yIG9uIG5vbi1leGlzdGVudCB0eXBlIGF0dHJpYnV0
ZSBpbiBJRSBWTUwgKCM3MDcxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBlbGVtID0gZS50YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkg
fHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS50eXBlIDogIiI7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICh0eXBlID09PSAi
c3VibWl0IiB8fCB0eXBlID09PSAiaW1hZ2UiKSAmJiBqUXVlcnkoIGVsZW0gKS5jbG9zZXN0KCJm
b3JtIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJpZ2dlciggInN1Ym1pdCIsIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2
ZW50LmFkZCh0aGlzLCAia2V5cHJlc3Muc3BlY2lhbFN1Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJn
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBl
bGVtLCAiYnV0dG9uIiApID8gZWxlbS50eXBlIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICh0eXBlID09PSAidGV4dCIgfHwgdHlwZSA9PT0gInBh
c3N3b3JkIikgJiYgalF1ZXJ5KCBlbGVtICkuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCAmJiBlLmtl
eUNvZGUgPT09IDEzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJpZ2dlciggInN1Ym1pdCIsIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgdGVhcmRvd246
IGZ1bmN0aW9uKCBuYW1lc3BhY2VzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmV2ZW50LnJlbW92ZSggdGhpcywgIi5zcGVjaWFsU3VibWl0IiApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKKworfQorCisvLyBjaGFuZ2UgZGVsZWdhdGlvbiwgaGFwcGVucyBoZXJl
IHNvIHdlIGhhdmUgYmluZC4KK2lmICggIWpRdWVyeS5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMgKSB7
CisKKyAgICAgICAgdmFyIGNoYW5nZUZpbHRlcnMsCisKKyAgICAgICAgZ2V0VmFsID0gZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkubm9kZU5hbWUo
IGVsZW0sICJpbnB1dCIgKSA/IGVsZW0udHlwZSA6ICIiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsID0gZWxlbS52YWx1ZTsKKworICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInJh
ZGlvIiB8fCB0eXBlID09PSAiY2hlY2tib3giICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFsID0gZWxlbS5jaGVja2VkOworCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9
PT0gInNlbGVjdC1tdWx0aXBsZSIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBl
bGVtLnNlbGVjdGVkSW5kZXggPiAtMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5tYXAoIGVsZW0ub3B0aW9ucywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc2VsZWN0ZWQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oIi0iKSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIiOworCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1
ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsID0gZWxlbS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgIH0sCisKKyAgICAgICAgdGVzdENoYW5nZSA9
IGZ1bmN0aW9uIHRlc3RDaGFuZ2UoIGUgKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBl
LnRhcmdldCwgZGF0YSwgdmFsOworCisgICAgICAgICAgICAgICAgaWYgKCAhcmZvcm1FbGVtcy50
ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgZWxlbS5yZWFkT25seSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBk
YXRhID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2NoYW5nZV9kYXRhIiApOworICAgICAgICAgICAg
ICAgIHZhbCA9IGdldFZhbChlbGVtKTsKKworICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50
IGRhdGEgd2lsbCBiZSBhbHNvIHJldHJpZXZlZCBieSBiZWZvcmVhY3RpdmF0ZQorICAgICAgICAg
ICAgICAgIGlmICggZS50eXBlICE9PSAiZm9jdXNvdXQiIHx8IGVsZW0udHlwZSAhPT0gInJhZGlv
IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFu
Z2VfZGF0YSIsIHZhbCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICggZGF0YSA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gZGF0YSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEgIT0gbnVsbCB8fCB2YWwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlLnR5
cGUgPSAiY2hhbmdlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUubGl2ZUZpcmVkID0gdW5k
ZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUs
IGFyZ3VtZW50c1sxXSwgZWxlbSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwor
ICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFuZ2UgPSB7CisgICAgICAgICAgICAgICAg
ZmlsdGVyczogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNvdXQ6IHRlc3RDaGFuZ2Us
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZWRlYWN0aXZhdGU6IHRlc3RDaGFuZ2Us
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiggZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRhcmdldCwgdHlwZSA9IGpR
dWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApID8gZWxlbS50eXBlIDogIiI7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAicmFkaW8iIHx8IHR5cGUg
PT09ICJjaGVja2JveCIgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDaGFuZ2UuY2FsbCgg
dGhpcywgZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgaGFz
IHRvIGJlIGNhbGxlZCBiZWZvcmUgc3VibWl0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBL
ZXlkb3duIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBrZXlwcmVzcywgd2hpY2ggaXMgdXNlZCBpbiBz
dWJtaXQtZXZlbnQgZGVsZWdhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjog
ZnVuY3Rpb24oIGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVt
ID0gZS50YXJnZXQsIHR5cGUgPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSA/IGVs
ZW0udHlwZSA6ICIiOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGUu
a2V5Q29kZSA9PT0gMTMgJiYgIWpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInRleHRhcmVhIiApICkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5rZXlDb2RlID09
PSAzMiAmJiAodHlwZSA9PT0gImNoZWNrYm94IiB8fCB0eXBlID09PSAicmFkaW8iKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAic2VsZWN0LW11
bHRpcGxlIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
Q2hhbmdlLmNhbGwoIHRoaXMsIGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQmVmb3JlYWN0aXZhdGUgaGFwcGVucyBhbHNvIGJlZm9yZSB0aGUgcHJldmlvdXMgZWxlbWVu
dCBpcyBibHVycmVkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIHRoaXMgZXZlbnQg
eW91IGNhbid0IHRyaWdnZXIgYSBjaGFuZ2UgZXZlbnQsIGJ1dCB5b3UgY2FuIHN0b3JlCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAg
ICAgYmVmb3JlYWN0aXZhdGU6IGZ1bmN0aW9uKCBlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiLCBnZXRWYWwoZWxlbSkg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBkYXRhLCBuYW1lc3BhY2VzICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnR5cGUgPT09ICJmaWxlIiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBjaGFu
Z2VGaWx0ZXJzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQuYWRkKCB0aGlzLCB0eXBlICsgIi5zcGVjaWFsQ2hhbmdlIiwgY2hhbmdlRmlsdGVyc1t0eXBl
XSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7CisgICAgICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbiggbmFtZXNwYWNlcyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsICIu
c3BlY2lhbENoYW5nZSIgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJmb3Jt
RWxlbXMudGVzdCggdGhpcy5ub2RlTmFtZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBjaGFuZ2VGaWx0ZXJzID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdl
LmZpbHRlcnM7CisKKyAgICAgICAgLy8gSGFuZGxlIHdoZW4gdGhlIGlucHV0IGlzIC5mb2N1cygp
J2QKKyAgICAgICAgY2hhbmdlRmlsdGVycy5mb2N1cyA9IGNoYW5nZUZpbHRlcnMuYmVmb3JlYWN0
aXZhdGU7Cit9CisKK2Z1bmN0aW9uIHRyaWdnZXIoIHR5cGUsIGVsZW0sIGFyZ3MgKSB7CisgICAg
ICAgIC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50
IG9uZS4KKyAgICAgICAgLy8gRmFrZSBvcmlnaW5hbEV2ZW50IHRvIGF2b2lkIGRvbm9yJ3Mgc3Rv
cFByb3BhZ2F0aW9uLCBidXQgaWYgdGhlCisgICAgICAgIC8vIHNpbXVsYXRlZCBldmVudCBwcmV2
ZW50cyBkZWZhdWx0IHRoZW4gd2UgZG8gdGhlIHNhbWUgb24gdGhlIGRvbm9yLgorICAgICAgICAv
LyBEb24ndCBwYXNzIGFyZ3Mgb3IgcmVtZW1iZXIgbGl2ZUZpcmVkOyB0aGV5IGFwcGx5IHRvIHRo
ZSBkb25vciBldmVudC4KKyAgICAgICAgdmFyIGV2ZW50ID0galF1ZXJ5LmV4dGVuZCgge30sIGFy
Z3NbIDAgXSApOworICAgICAgICBldmVudC50eXBlID0gdHlwZTsKKyAgICAgICAgZXZlbnQub3Jp
Z2luYWxFdmVudCA9IHt9OworICAgICAgICBldmVudC5saXZlRmlyZWQgPSB1bmRlZmluZWQ7Cisg
ICAgICAgIGpRdWVyeS5ldmVudC5oYW5kbGUuY2FsbCggZWxlbSwgZXZlbnQgKTsKKyAgICAgICAg
aWYgKCBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKKyAgICAgICAgICAgICAgICBhcmdz
WyAwIF0ucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfQorfQorCisvLyBDcmVhdGUgImJ1YmJs
aW5nIiBmb2N1cyBhbmQgYmx1ciBldmVudHMKK2lmICggIWpRdWVyeS5zdXBwb3J0LmZvY3VzaW5C
dWJibGVzICkgeworICAgICAgICBqUXVlcnkuZWFjaCh7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6
ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKKworICAgICAgICAgICAgICAg
IC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciB3aGlsZSBzb21lb25lIHdhbnRz
IGZvY3VzaW4vZm9jdXNvdXQKKyAgICAgICAgICAgICAgICB2YXIgYXR0YWNoZXMgPSAwOworCisg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0geworICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGF0dGFjaGVzKysgPT09IDAgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFu
ZGxlciwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIC0tYXR0YWNo
ZXMgPT09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoIGRv
bm9yICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9ub3IgZXZlbnQgaXMgYWx3YXlz
IGEgbmF0aXZlIG9uZTsgZml4IGl0IGFuZCBzd2l0Y2ggaXRzIHR5cGUuCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBMZXQgZm9jdXNpbi9vdXQgaGFuZGxlciBjYW5jZWwgdGhlIGRvbm9yIGZv
Y3VzL2JsdXIgZXZlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGpRdWVyeS5l
dmVudC5maXgoIGRvbm9yICk7CisgICAgICAgICAgICAgICAgICAgICAgICBlLnR5cGUgPSBmaXg7
CisgICAgICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQgPSB7fTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlLnRhcmdldCAp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25vci5wcmV2ZW50RGVmYXVsdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fSk7Cit9CisKK2pRdWVyeS5lYWNoKFsiYmluZCIsICJvbmUiXSwgZnVuY3Rpb24oIGksIG5hbWUg
KSB7CisgICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHR5cGUsIGRhdGEsIGZu
ICkgeworICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyOworCisgICAgICAgICAgICAgICAgLy8g
SGFuZGxlIG9iamVjdCBsaXRlcmFscworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUg
PT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBp
biB0eXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBuYW1lIF0o
a2V5LCBkYXRhLCB0eXBlW2tleV0sIGZuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMiB8fCBkYXRhID09PSBm
YWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKCBuYW1lID09PSAib25lIiApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeSggdGhpcyApLnVuYmluZCggZXZlbnQsIGhhbmRsZXIgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVu
dHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVyLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBmbjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJ1bmxvYWQiICYm
IG5hbWUgIT09ICJvbmUiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmUoIHR5
cGUsIGRhdGEsIGZuICk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRo
aXNbaV0sIHR5cGUsIGhhbmRsZXIsIGRhdGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgfTsKK30pOworCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICAgICAgdW5iaW5kOiBmdW5jdGlv
biggdHlwZSwgZm4gKSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG9iamVjdCBsaXRlcmFs
cworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUgPT09ICJvYmplY3QiICYmICF0eXBl
LnByZXZlbnREZWZhdWx0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGtl
eSBpbiB0eXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuYmlu
ZChrZXksIHR5cGVba2V5XSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXNbaV0sIHR5cGUsIGZuICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9u
KCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmxpdmUoIHR5cGVzLCBkYXRhLCBmbiwgc2VsZWN0b3IgKTsKKyAgICAgICAgfSwKKworICAg
ICAgICB1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDAgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy51bmJpbmQoICJsaXZlIiApOworCisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRpZSggdHlw
ZXMsIG51bGwsIGZuLCBzZWxlY3RvciApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KworICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24o
IHR5cGUsIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRh
LCB0aGlzWzBdLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAg
ICAgIHRvZ2dsZTogZnVuY3Rpb24oIGZuICkgeworICAgICAgICAgICAgICAgIC8vIFNhdmUgcmVm
ZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNzIGluIGNsb3N1cmUKKyAgICAgICAgICAgICAg
ICB2YXIgYXJncyA9IGFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGd1aWQgPSBm
bi5ndWlkIHx8IGpRdWVyeS5ndWlkKyssCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rp
b24gdG8gZXhlY3V0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdFRv
Z2dsZSA9ICggalF1ZXJ5LmRhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1aWQgKSB8fCAw
ICkgJSBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhp
cywgImxhc3RUb2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBjbGlja3Mgc3RvcAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBleGVjdXRlIHRoZSBmdW5jdGlv
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1sgbGFzdFRvZ2ds
ZSBdLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBsaW5rIGFsbCB0aGUgZnVuY3Rpb25zLCBz
byBhbnkgb2YgdGhlbSBjYW4gdW5iaW5kIHRoaXMgY2xpY2sgaGFuZGxlcgorICAgICAgICAgICAg
ICAgIHRvZ2dsZXIuZ3VpZCA9IGd1aWQ7CisgICAgICAgICAgICAgICAgd2hpbGUgKCBpIDwgYXJn
cy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWyBpKysgXS5ndWlkID0g
Z3VpZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5j
bGljayggdG9nZ2xlciApOworICAgICAgICB9LAorCisgICAgICAgIGhvdmVyOiBmdW5jdGlvbigg
Zm5PdmVyLCBmbk91dCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZWVudGVy
KCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsKKyAgICAgICAgfQorfSk7
CisKK3ZhciBsaXZlTWFwID0geworICAgICAgICBmb2N1czogImZvY3VzaW4iLAorICAgICAgICBi
bHVyOiAiZm9jdXNvdXQiLAorICAgICAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKKyAgICAg
ICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0IgorfTsKKworalF1ZXJ5LmVhY2goWyJsaXZlIiwgImRp
ZSJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKyAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBm
dW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuLCBvcmlnU2VsZWN0b3IgLyogSW50ZXJuYWwgVXNlIE9u
bHkgKi8gKSB7CisgICAgICAgICAgICAgICAgdmFyIHR5cGUsIGkgPSAwLCBtYXRjaCwgbmFtZXNw
YWNlcywgcHJlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gb3JpZ1Nl
bGVjdG9yIHx8IHRoaXMuc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
ID0gb3JpZ1NlbGVjdG9yID8gdGhpcyA6IGpRdWVyeSggdGhpcy5jb250ZXh0ICk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgJiYgIXR5cGVzLnByZXZl
bnREZWZhdWx0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiB0
eXBlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFsgbmFtZSBd
KCBrZXksIGRhdGEsIHR5cGVzW2tleV0sIHNlbGVjdG9yICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gImRpZSIgJiYgIXR5cGVz
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ1NlbGVjdG9y
ICYmIG9yaWdTZWxlY3Rvci5jaGFyQXQoMCkgPT09ICIuIiApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC51bmJpbmQoIG9yaWdTZWxlY3RvciApOworCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoIGRhdGEgPT09IGZhbHNlIHx8IGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGRhdGEgfHwgcmV0dXJuRmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHR5cGVzID0gKHR5cGVzIHx8ICIiKS5zcGxpdCgiICIpOworCisg
ICAgICAgICAgICAgICAgd2hpbGUgKCAodHlwZSA9IHR5cGVzWyBpKysgXSkgIT0gbnVsbCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcm5hbWVzcGFjZXMuZXhlYyggdHlwZSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9ICIiOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG1hdGNoICkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZXNwYWNlcyA9IG1hdGNoWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gdHlwZS5yZXBsYWNlKCBybmFtZXNwYWNlcywgIiIgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAi
aG92ZXIiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKCAi
bW91c2VlbnRlciIgKyBuYW1lc3BhY2VzLCAibW91c2VsZWF2ZSIgKyBuYW1lc3BhY2VzICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVUeXBlID0gdHlwZTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXZlTWFwWyB0eXBlIF0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goIGxpdmVNYXBbIHR5cGUgXSArIG5h
bWVzcGFjZXMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUg
KyBuYW1lc3BhY2VzOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gKGxpdmVNYXBbIHR5cGUgXSB8fCB0eXBl
KSArIG5hbWVzcGFjZXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gImxpdmUiICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBiaW5kIGxpdmUgaGFuZGxlcgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGwgPSBjb250ZXh0Lmxlbmd0aDsgaiA8IGw7IGor
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQuYWRkKCBjb250ZXh0W2pdLCAibGl2ZS4iICsgbGl2ZUNvbnZlcnQoIHR5cGUsIHNlbGVjdG9y
ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRh
dGE6IGRhdGEsIHNlbGVjdG9yOiBzZWxlY3RvciwgaGFuZGxlcjogZm4sIG9yaWdUeXBlOiB0eXBl
LCBvcmlnSGFuZGxlcjogZm4sIHByZVR5cGU6IHByZVR5cGUgfSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuYmluZCBsaXZlIGhhbmRsZXIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC51bmJpbmQoICJsaXZlLiIgKyBs
aXZlQ29udmVydCggdHlwZSwgc2VsZWN0b3IgKSwgZm4gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgfTsKK30pOworCitmdW5jdGlvbiBsaXZlSGFuZGxlciggZXZlbnQgKSB7CisgICAg
ICAgIHZhciBzdG9wLCBtYXhMZXZlbCwgcmVsYXRlZCwgbWF0Y2gsIGhhbmRsZU9iaiwgZWxlbSwg
aiwgaSwgbCwgZGF0YSwgY2xvc2UsIG5hbWVzcGFjZSwgcmV0LAorICAgICAgICAgICAgICAgIGVs
ZW1zID0gW10sCisgICAgICAgICAgICAgICAgc2VsZWN0b3JzID0gW10sCisgICAgICAgICAgICAg
ICAgZXZlbnRzID0galF1ZXJ5Ll9kYXRhKCB0aGlzLCAiZXZlbnRzIiApOworCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB3ZSBhdm9pZCBub24tbGVmdC1jbGljayBidWJibGluZyBpbiBGaXJlZm94ICgj
Mzg2MSkgYW5kIGRpc2FibGVkIGVsZW1lbnRzIGluIElFICgjNjkxMSkKKyAgICAgICAgaWYgKCBl
dmVudC5saXZlRmlyZWQgPT09IHRoaXMgfHwgIWV2ZW50cyB8fCAhZXZlbnRzLmxpdmUgfHwgZXZl
bnQudGFyZ2V0LmRpc2FibGVkIHx8IGV2ZW50LmJ1dHRvbiAmJiBldmVudC50eXBlID09PSAiY2xp
Y2siICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICggZXZlbnQubmFtZXNwYWNlICkgeworICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IG5ldyBS
ZWdFeHAoIihefFxcLikiICsgZXZlbnQubmFtZXNwYWNlLnNwbGl0KCIuIikuam9pbigiXFwuKD86
LipcXC4pPyIpICsgIihcXC58JCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50LmxpdmVG
aXJlZCA9IHRoaXM7CisKKyAgICAgICAgdmFyIGxpdmUgPSBldmVudHMubGl2ZS5zbGljZSgwKTsK
KworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGxpdmUubGVuZ3RoOyBqKysgKSB7CisgICAgICAg
ICAgICAgICAgaGFuZGxlT2JqID0gbGl2ZVtqXTsKKworICAgICAgICAgICAgICAgIGlmICggaGFu
ZGxlT2JqLm9yaWdUeXBlLnJlcGxhY2UoIHJuYW1lc3BhY2VzLCAiIiApID09PSBldmVudC50eXBl
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2goIGhhbmRsZU9iai5z
ZWxlY3RvciApOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpdmUuc3BsaWNlKCBqLS0sIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBtYXRjaCA9IGpRdWVyeSggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggc2Vs
ZWN0b3JzLCBldmVudC5jdXJyZW50VGFyZ2V0ICk7CisKKyAgICAgICAgZm9yICggaSA9IDAsIGwg
PSBtYXRjaC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgY2xvc2UgPSBt
YXRjaFtpXTsKKworICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbGl2ZS5sZW5ndGg7
IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGxpdmVbal07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2xvc2Uuc2VsZWN0b3IgPT09IGhhbmRsZU9i
ai5zZWxlY3RvciAmJiAoIW5hbWVzcGFjZSB8fCBuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5h
bWVzcGFjZSApKSAmJiAhY2xvc2UuZWxlbS5kaXNhYmxlZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbSA9IGNsb3NlLmVsZW07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbGF0ZWQgPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRob3NlIHR3byBldmVudHMgcmVxdWlyZSBhZGRpdGlvbmFsIGNoZWNraW5nCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlT2JqLnByZVR5cGUgPT09ICJt
b3VzZWVudGVyIiB8fCBoYW5kbGVPYmoucHJlVHlwZSA9PT0gIm1vdXNlbGVhdmUiICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBoYW5kbGVP
YmoucHJlVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxh
dGVkID0galF1ZXJ5KCBldmVudC5yZWxhdGVkVGFyZ2V0ICkuY2xvc2VzdCggaGFuZGxlT2JqLnNl
bGVjdG9yIClbMF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgbm90IHRvIGFjY2lkZW50YWxseSBtYXRjaCBhIGNoaWxkIGVsZW1lbnQgd2l0
aCB0aGUgc2FtZSBzZWxlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcmVsYXRlZCAmJiBqUXVlcnkuY29udGFpbnMoIGVsZW0sIHJlbGF0ZWQgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQg
PSBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIXJlbGF0ZWQgfHwgcmVsYXRlZCAhPT0gZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtcy5wdXNoKHsgZWxlbTogZWxlbSwgaGFu
ZGxlT2JqOiBoYW5kbGVPYmosIGxldmVsOiBjbG9zZS5sZXZlbCB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoIGkgPSAwLCBsID0gZWxlbXMubGVu
Z3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgIG1hdGNoID0gZWxlbXNbaV07CisK
KyAgICAgICAgICAgICAgICBpZiAoIG1heExldmVsICYmIG1hdGNoLmxldmVsID4gbWF4TGV2ZWwg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2guZWxlbTsKKyAgICAg
ICAgICAgICAgICBldmVudC5kYXRhID0gbWF0Y2guaGFuZGxlT2JqLmRhdGE7CisgICAgICAgICAg
ICAgICAgZXZlbnQuaGFuZGxlT2JqID0gbWF0Y2guaGFuZGxlT2JqOworCisgICAgICAgICAgICAg
ICAgcmV0ID0gbWF0Y2guaGFuZGxlT2JqLm9yaWdIYW5kbGVyLmFwcGx5KCBtYXRjaC5lbGVtLCBh
cmd1bWVudHMgKTsKKworICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSB8fCBldmVu
dC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF4
TGV2ZWwgPSBtYXRjaC5sZXZlbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQg
PT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdG9wOworfQor
CitmdW5jdGlvbiBsaXZlQ29udmVydCggdHlwZSwgc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVy
biAodHlwZSAmJiB0eXBlICE9PSAiKiIgPyB0eXBlICsgIi4iIDogIiIpICsgc2VsZWN0b3IucmVw
bGFjZShycGVyaW9kLCAiYCIpLnJlcGxhY2UocnNwYWNlcywgIiYiKTsKK30KKworalF1ZXJ5LmVh
Y2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxv
YWQgY2xpY2sgZGJsY2xpY2sgIiArCisgICAgICAgICJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1v
dmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKKyAgICAgICAg
ImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiKS5zcGxp
dCgiICIpLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKworICAgICAgICAvLyBIYW5kbGUgZXZlbnQg
YmluZGluZworICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIGZuID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gbnVsbDsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxl
bmd0aCA+IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kKCBuYW1lLCBkYXRh
LCBmbiApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlciggbmFtZSApOwor
ICAgICAgICB9OworCisgICAgICAgIGlmICggalF1ZXJ5LmF0dHJGbiApIHsKKyAgICAgICAgICAg
ICAgICBqUXVlcnkuYXR0ckZuWyBuYW1lIF0gPSB0cnVlOworICAgICAgICB9Cit9KTsKKworCisK
Ky8qIQorICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUKKyAqICBDb3B5cmlnaHQgMjAxMSwg
VGhlIERvam8gRm91bmRhdGlvbgorICogIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQsIEJTRCwgYW5k
IEdQTCBMaWNlbnNlcy4KKyAqICBNb3JlIGluZm9ybWF0aW9uOiBodHRwOi8vc2l6emxlanMuY29t
LworICovCisoZnVuY3Rpb24oKXsKKwordmFyIGNodW5rZXIgPSAvKCg/OlwoKD86XChbXigpXStc
KXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSsp
K1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9n
LAorICAgICAgICBkb25lID0gMCwKKyAgICAgICAgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLAorICAgICAgICBoYXNEdXBsaWNhdGUgPSBmYWxzZSwKKyAgICAgICAgYmFzZUhh
c0R1cGxpY2F0ZSA9IHRydWUsCisgICAgICAgIHJCYWNrc2xhc2ggPSAvXFwvZywKKyAgICAgICAg
ck5vbldvcmQgPSAvXFcvOworCisvLyBIZXJlIHdlIGNoZWNrIGlmIHRoZSBKYXZhU2NyaXB0IGVu
Z2luZSBpcyB1c2luZyBzb21lIHNvcnQgb2YKKy8vIG9wdGltaXphdGlvbiB3aGVyZSBpdCBkb2Vz
IG5vdCBhbHdheXMgY2FsbCBvdXIgY29tcGFyaXNpb24KKy8vIGZ1bmN0aW9uLiBJZiB0aGF0IGlz
IHRoZSBjYXNlLCBkaXNjYXJkIHRoZSBoYXNEdXBsaWNhdGUgdmFsdWUuCisvLyAgIFRodXMgZmFy
IHRoYXQgaW5jbHVkZXMgR29vZ2xlIENocm9tZS4KK1swLCAwXS5zb3J0KGZ1bmN0aW9uKCkgewor
ICAgICAgICBiYXNlSGFzRHVwbGljYXRlID0gZmFsc2U7CisgICAgICAgIHJldHVybiAwOworfSk7
CisKK3ZhciBTaXp6bGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNl
ZWQgKSB7CisgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOworICAgICAgICBjb250ZXh0
ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworICAgICAgICB2YXIgb3JpZ0NvbnRleHQgPSBjb250
ZXh0OworCisgICAgICAgIGlmICggY29udGV4dC5ub2RlVHlwZSAhPT0gMSAmJiBjb250ZXh0Lm5v
ZGVUeXBlICE9PSA5ICkgeworICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKCAhc2VsZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSAi
c3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBtLCBzZXQsIGNoZWNrU2V0LCBleHRyYSwgcmV0LCBjdXIsIHBvcCwgaSwK
KyAgICAgICAgICAgICAgICBwcnVuZSA9IHRydWUsCisgICAgICAgICAgICAgICAgY29udGV4dFhN
TCA9IFNpenpsZS5pc1hNTCggY29udGV4dCApLAorICAgICAgICAgICAgICAgIHBhcnRzID0gW10s
CisgICAgICAgICAgICAgICAgc29GYXIgPSBzZWxlY3RvcjsKKyAgICAgICAgCisgICAgICAgIC8v
IFJlc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2h1bmtlciByZWdleHAgKHN0YXJ0IGZyb20gaGVh
ZCkKKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGNodW5rZXIuZXhlYyggIiIgKTsKKyAg
ICAgICAgICAgICAgICBtID0gY2h1bmtlci5leGVjKCBzb0ZhciApOworCisgICAgICAgICAgICAg
ICAgaWYgKCBtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc29GYXIgPSBtWzNdOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCggbVsxXSAp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtWzJdICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IG1bM107CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoIG0gKTsKKworICAgICAgICBp
ZiAoIHBhcnRzLmxlbmd0aCA+IDEgJiYgb3JpZ1BPUy5leGVjKCBzZWxlY3RvciApICkgeworCisg
ICAgICAgICAgICAgICAgaWYgKCBwYXJ0cy5sZW5ndGggPT09IDIgJiYgRXhwci5yZWxhdGl2ZVsg
cGFydHNbMF0gXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IHBvc1Byb2Nlc3Mo
IHBhcnRzWzBdICsgcGFydHNbMV0sIGNvbnRleHQgKTsKKworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBFeHByLnJlbGF0aXZlWyBwYXJ0c1sw
XSBdID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyBjb250ZXh0IF0gOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUoIHBhcnRzLnNoaWZ0KCksIGNvbnRl
eHQgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBwYXJ0cy5sZW5ndGggKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gcGFydHMuc2hpZnQo
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVb
IHNlbGVjdG9yIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZWN0b3IgKz0gcGFydHMuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0ID0gcG9zUHJvY2Vzcyggc2VsZWN0b3IsIHNldCApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0
IGlmIHRoZSByb290IHNlbGVjdG9yIGlzIGFuIElECisgICAgICAgICAgICAgICAgLy8gKGJ1dCBu
b3QgaWYgaXQnbGwgYmUgZmFzdGVyIGlmIHRoZSBpbm5lciBzZWxlY3RvciBpcyBhbiBJRCkKKyAg
ICAgICAgICAgICAgICBpZiAoICFzZWVkICYmIHBhcnRzLmxlbmd0aCA+IDEgJiYgY29udGV4dC5u
b2RlVHlwZSA9PT0gOSAmJiAhY29udGV4dFhNTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFeHByLm1hdGNoLklELnRlc3QocGFydHNbMF0pICYmICFFeHByLm1hdGNoLklELnRl
c3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pICkgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSBTaXp6bGUuZmluZCggcGFydHMuc2hpZnQoKSwgY29udGV4dCwgY29udGV4dFhNTCAp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHJldC5leHByID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQg
KVswXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zZXRbMF07CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0ICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gc2VlZCA/CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgZXhwcjogcGFydHMucG9wKCksIHNldDogbWFrZUFycmF5KHNlZWQpIH0gOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZmluZCggcGFydHMucG9wKCksIHBh
cnRzLmxlbmd0aCA9PT0gMSAmJiAocGFydHNbMF0gPT09ICJ+IiB8fCBwYXJ0c1swXSA9PT0gIisi
KSAmJiBjb250ZXh0LnBhcmVudE5vZGUgPyBjb250ZXh0LnBhcmVudE5vZGUgOiBjb250ZXh0LCBj
b250ZXh0WE1MICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IHJldC5leHByID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcmV0LmV4cHIs
IHJldC5zZXQgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zZXQ7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFydHMubGVuZ3RoID4gMCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXQgPSBtYWtlQXJyYXkoIHNldCApOwor
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcnVuZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHBhcnRzLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gcGFydHMucG9wKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcCA9IGN1cjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFFeHByLnJlbGF0aXZlWyBjdXIgXSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3AgPSBwYXJ0cy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcG9wID09IG51bGwgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gY29udGV4dDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEV4cHIucmVsYXRpdmVbIGN1ciBdKCBjaGVja1NldCwgcG9wLCBjb250ZXh0WE1M
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXQgPSBwYXJ0cyA9IFtdOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWNoZWNrU2V0ICkgeworICAg
ICAgICAgICAgICAgIGNoZWNrU2V0ID0gc2V0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAh
Y2hlY2tTZXQgKSB7CisgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBjdXIgfHwgc2VsZWN0
b3IgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdG9TdHJpbmcuY2FsbChjaGVja1NldCkg
PT09ICJbb2JqZWN0IEFycmF5XSIgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhcHJ1bmUgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMsIGNo
ZWNrU2V0ICk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb250ZXh0ICYmIGNvbnRl
eHQubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0g
MDsgY2hlY2tTZXRbaV0gIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGNoZWNrU2V0W2ldICYmIChjaGVja1NldFtpXSA9PT0gdHJ1ZSB8fCBjaGVj
a1NldFtpXS5ub2RlVHlwZSA9PT0gMSAmJiBTaXp6bGUuY29udGFpbnMoY29udGV4dCwgY2hlY2tT
ZXRbaV0pKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRzLnB1c2goIHNldFtpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGNoZWNrU2V0W2ldICE9IG51bGw7IGkr
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjaGVja1NldFtpXSAm
JiBjaGVja1NldFtpXS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIHNldFtpXSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWFrZUFycmF5KCBj
aGVja1NldCwgcmVzdWx0cyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBleHRyYSApIHsK
KyAgICAgICAgICAgICAgICBTaXp6bGUoIGV4dHJhLCBvcmlnQ29udGV4dCwgcmVzdWx0cywgc2Vl
ZCApOworICAgICAgICAgICAgICAgIFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0czsKK307CisKK1NpenpsZS51bmlxdWVTb3J0
ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7CisgICAgICAgIGlmICggc29ydE9yZGVyICkgeworICAg
ICAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IGJhc2VIYXNEdXBsaWNhdGU7CisgICAgICAgICAg
ICAgICAgcmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKKworICAgICAgICAgICAgICAgIGlmICgg
aGFzRHVwbGljYXRlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAx
OyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCByZXN1bHRzW2ldID09PSByZXN1bHRzWyBpIC0gMSBdICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuc3BsaWNlKCBpLS0sIDEgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1
bHRzOworfTsKKworU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgc2V0ICkgeworICAg
ICAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBzZXQgKTsKK307CisKK1Npenps
ZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggbm9kZSwgZXhwciApIHsKKyAgICAgICAgcmV0
dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgW25vZGVdICkubGVuZ3RoID4gMDsKK307CisK
K1NpenpsZS5maW5kID0gZnVuY3Rpb24oIGV4cHIsIGNvbnRleHQsIGlzWE1MICkgeworICAgICAg
ICB2YXIgc2V0OworCisgICAgICAgIGlmICggIWV4cHIgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFtdOworICAgICAgICB9CisKKyAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gRXhwci5v
cmRlci5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEV4cHIub3JkZXJbaV07CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlw
ZSBdLmV4ZWMoIGV4cHIgKSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdCA9
IG1hdGNoWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guc3BsaWNlKCAxLCAxICk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGVmdC5zdWJzdHIoIGxlZnQubGVuZ3Ro
IC0gMSApICE9PSAiXFwiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aFsxXSA9IChtYXRjaFsxXSB8fCAiIikucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gRXhwci5maW5kWyB0eXBlIF0oIG1hdGNo
LCBjb250ZXh0LCBpc1hNTCApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggc2V0ICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhc2V0ICkgeworICAgICAgICAgICAg
ICAgIHNldCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZp
bmVkIiA/CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCAiKiIgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBbXTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB7IHNldDogc2V0LCBleHByOiBleHByIH07Cit9OworCitTaXp6bGUuZmls
dGVyID0gZnVuY3Rpb24oIGV4cHIsIHNldCwgaW5wbGFjZSwgbm90ICkgeworICAgICAgICB2YXIg
bWF0Y2gsIGFueUZvdW5kLAorICAgICAgICAgICAgICAgIG9sZCA9IGV4cHIsCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gW10sCisgICAgICAgICAgICAgICAgY3VyTG9vcCA9IHNldCwKKyAgICAg
ICAgICAgICAgICBpc1hNTEZpbHRlciA9IHNldCAmJiBzZXRbMF0gJiYgU2l6emxlLmlzWE1MKCBz
ZXRbMF0gKTsKKworICAgICAgICB3aGlsZSAoIGV4cHIgJiYgc2V0Lmxlbmd0aCApIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBFeHByLmZpbHRlciApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggKG1hdGNoID0gRXhwci5sZWZ0TWF0Y2hbIHR5cGUgXS5leGVjKCBl
eHByICkpICE9IG51bGwgJiYgbWF0Y2hbMl0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBmb3VuZCwgaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWx0ZXIgPSBFeHByLmZpbHRlclsgdHlwZSBdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtYXRjaFsxXTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoLnNwbGljZSgxLDEpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbGVmdC5zdWJzdHIoIGxlZnQubGVuZ3RoIC0gMSApID09PSAiXFwiICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjdXJMb29wID09PSByZXN1bHQgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEV4cHIu
cHJlRmlsdGVyWyB0eXBlIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2ggPSBFeHByLnByZUZpbHRlclsgdHlwZSBdKCBtYXRjaCwgY3VyTG9vcCwgaW5w
bGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MRmlsdGVyICk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueUZvdW5kID0gZm91bmQgPSB0cnVlOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2gg
PT09IHRydWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG1hdGNoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgKGl0ZW0gPSBjdXJMb29wW2ldKSAhPSBudWxs
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGl0ZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gZmlsdGVyKCBpdGVtLCBtYXRjaCwgaSwgY3VyTG9vcCAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgcGFzcyA9IG5vdCBeICEhZm91bmQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnBsYWNlICYmIGZvdW5kICE9IG51
bGwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBwYXNzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55Rm91bmQgPSB0
cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3BbaV0gPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggcGFzcyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgg
aXRlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFueUZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZm91bmQgIT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpbnBsYWNlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTG9v
cCA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gZXhwci5yZXBs
YWNlKCBFeHByLm1hdGNoWyB0eXBlIF0sICIiICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFhbnlGb3VuZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIEltcHJvcGVyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICBpZiAoIGV4cHIgPT09
IG9sZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYW55Rm91bmQgPT0gbnVsbCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBleHByICk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIG9sZCA9IGV4cHI7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gY3VyTG9vcDsKK307CisKK1NpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cg
KSB7CisgICAgICAgIHRocm93ICJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9u
OiAiICsgbXNnOworfTsKKwordmFyIEV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0geworICAgICAg
ICBvcmRlcjogWyAiSUQiLCAiTkFNRSIsICJUQUciIF0sCisKKyAgICAgICAgbWF0Y2g6IHsKKyAg
ICAgICAgICAgICAgICBJRDogLyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAorICAg
ICAgICAgICAgICAgIENMQVNTOiAvXC4oKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAor
ICAgICAgICAgICAgICAgIE5BTUU6IC9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwt
XXxcXC4pKylbJyJdKlxdLywKKyAgICAgICAgICAgICAgICBBVFRSOiAvXFtccyooKD86W1x3XHUw
MGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/
Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLywKKyAgICAgICAgICAgICAgICBU
QUc6IC9eKCg/Oltcd1x1MDBjMC1cdUZGRkZcKlwtXXxcXC4pKykvLAorICAgICAgICAgICAgICAg
IENISUxEOiAvOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlwoXHMqKGV2ZW58b2RkfCg/
OlsrXC1dP1xkK3woPzpbK1wtXT9cZCopP25ccyooPzpbK1wtXVxzKlxkKyk/KSlccypcKSk/LywK
KyAgICAgICAgICAgICAgICBQT1M6IC86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2Rk
KSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLAorICAgICAgICAgICAgICAgIFBTRVVETzogLzoo
KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwpXStcKXxb
XlwoXCldKikrKVwyXCkpPy8KKyAgICAgICAgfSwKKworICAgICAgICBsZWZ0TWF0Y2g6IHt9LAor
CisgICAgICAgIGF0dHJNYXA6IHsKKyAgICAgICAgICAgICAgICAiY2xhc3MiOiAiY2xhc3NOYW1l
IiwKKyAgICAgICAgICAgICAgICAiZm9yIjogImh0bWxGb3IiCisgICAgICAgIH0sCisKKyAgICAg
ICAgYXR0ckhhbmRsZTogeworICAgICAgICAgICAgICAgIGhyZWY6IGZ1bmN0aW9uKCBlbGVtICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAiaHJl
ZiIgKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHR5cGU6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmli
dXRlKCAidHlwZSIgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAg
cmVsYXRpdmU6IHsKKyAgICAgICAgICAgICAgICAiKyI6IGZ1bmN0aW9uKGNoZWNrU2V0LCBwYXJ0
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1BhcnRTdHIgPSB0eXBlb2YgcGFydCA9
PT0gInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFnID0gaXNQ
YXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlzUGFydFN0ck5vdFRhZyA9IGlzUGFydFN0ciAmJiAhaXNUYWc7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaXNUYWcgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGNo
ZWNrU2V0Lmxlbmd0aCwgZWxlbTsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAoZWxlbSA9IGNoZWNrU2V0W2ldKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbS5wcmV2aW91c1Np
YmxpbmcpICYmIGVsZW0ubm9kZVR5cGUgIT09IDEgKSB7fQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBpc1BhcnRTdHJOb3RUYWcgfHwgZWxl
bSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBhcnQgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSB8fCBmYWxzZSA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID09PSBwYXJ0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNQYXJ0U3RyTm90VGFnICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZmlsdGVyKCBwYXJ0LCBj
aGVja1NldCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0sCisKKyAgICAgICAgICAgICAgICAiPiI6IGZ1bmN0aW9uKCBjaGVja1NldCwgcGFydCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc1BhcnRTdHIgPSB0eXBlb2YgcGFydCA9PT0gInN0cmluZyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsID0gY2hlY2tTZXQubGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGlzUGFydFN0ciAmJiAhck5vbldvcmQudGVzdCggcGFydCApICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gY2hlY2tTZXRbaV07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50
ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBwYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9
PT0gcGFydCA/IHBhcmVudCA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbSA9IGNoZWNrU2V0W2ldOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBpc1BhcnRTdHIgPworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVu
dE5vZGUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnBhcmVudE5vZGUgPT09IHBhcnQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1BhcnRTdHIgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcGFydCwg
Y2hlY2tTZXQsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
ICAgICAiIjogZnVuY3Rpb24oY2hlY2tTZXQsIHBhcnQsIGlzWE1MKXsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBub2RlQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvbmVOYW1lID0gZG9uZSsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a0ZuID0gZGlyQ2hlY2s7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHBh
cnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVDaGVjayA9IHBhcnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm4oICJwYXJlbnRO
b2RlIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICk7CisgICAg
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICJ+IjogZnVuY3Rpb24oIGNoZWNrU2V0
LCBwYXJ0LCBpc1hNTCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlQ2hlY2ss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVOYW1lID0gZG9uZSsrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGlyQ2hlY2s7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9u
V29yZC50ZXN0KCBwYXJ0ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVDaGVjayA9IHBhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr
Rm4gPSBkaXJOb2RlQ2hlY2s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNoZWNrRm4oICJwcmV2aW91c1NpYmxpbmciLCBwYXJ0LCBkb25lTmFt
ZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisKKyAgICAgICAgZmluZDogeworICAgICAgICAgICAgICAgIElEOiBmdW5jdGlvbigg
bWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxl
bWVudEJ5SWQobWF0Y2hbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBD
aGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIg
aW4gdGhlIGRvY3VtZW50ICM2OTYzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtICYmIG0ucGFyZW50Tm9kZSA/IFttXSA6IFtdOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBOQU1FOiBmdW5jdGlv
biggbWF0Y2gsIGNvbnRleHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVv
ZiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1l
KCBtYXRjaFsxXSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IHJlc3VsdHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0c1tpXS5nZXRBdHRyaWJ1dGUo
Im5hbWUiKSA9PT0gbWF0Y2hbMV0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXQucHVzaCggcmVzdWx0c1tpXSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQubGVuZ3Ro
ID09PSAwID8gbnVsbCA6IHJldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRl
eHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVs
ZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIG1hdGNoWzFd
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICBwcmVGaWx0ZXI6IHsKKyAgICAgICAgICAgICAgICBDTEFTUzogZnVuY3Rp
b24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCwgaXNYTUwgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaCA9ICIgIiArIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNr
c2xhc2gsICIiICkgKyAiICI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNYTUwg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBlbGVtOyAoZWxlbSA9IGN1ckxvb3BbaV0pICE9IG51bGw7IGkrKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm90IF4gKGVsZW0uY2xhc3NOYW1lICYmICgi
ICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSgvW1x0XG5ccl0vZywgIiAiKS5pbmRl
eE9mKG1hdGNoKSA+PSAwKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCBlbGVtICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBpbnBsYWNlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTG9vcFtp
XSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgICAgIElEOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV0ucmVwbGFjZSggckJhY2tzbGFzaCwgIiIg
KTsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlvbigg
bWF0Y2gsIGN1ckxvb3AgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hb
MV0ucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAg
ICAgIH0sCisKKyAgICAgICAgICAgICAgICBDSElMRDogZnVuY3Rpb24oIG1hdGNoICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW1hdGNoWzJdICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoWzJdID0gbWF0Y2hbMl0ucmVwbGFjZSgvXlwrfFxzKi9nLCAnJyk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2UgZXF1YXRpb25zIGxpa2Ug
J2V2ZW4nLCAnb2RkJywgJzUnLCAnMm4nLCAnM24rMicsICc0bi0xJywgJy1uKzYnCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0ID0gLygtPykoXGQqKSg/Om4oWytcLV0/
XGQqKSk/Ly5leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoWzJdID09PSAiZXZlbiIgJiYgIjJuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIgJiYgIjJuKzEi
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIS9cRC8udGVzdCgg
bWF0Y2hbMl0gKSAmJiAiMG4rIiArIG1hdGNoWzJdIHx8IG1hdGNoWzJdKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlcnMgKGZpcnN0KW4r
KGxhc3QpIGluY2x1ZGluZyBpZiB0aGV5IGFyZSBuZWdhdGl2ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaFsyXSA9ICh0ZXN0WzFdICsgKHRlc3RbMl0gfHwgMSkpIC0gMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbM10gPSB0ZXN0WzNdIC0gMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxl
LmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRvIG5vcm1hbCBjYWNoaW5nIHN5c3RlbQor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMF0gPSBkb25lKys7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAgICAgQVRUUjogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQs
IG5vdCwgaXNYTUwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNo
WzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNYTUwgJiYgRXhwci5h
dHRyTWFwW25hbWVdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsx
XSA9IEV4cHIuYXR0ck1hcFtuYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGlmIGFuIHVuLXF1b3RlZCB2YWx1ZSB3YXMg
dXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbNF0gPSAoIG1hdGNoWzRdIHx8IG1h
dGNoWzVdIHx8ICIiICkucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBtYXRjaFsyXSA9PT0gIn49IiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hbNF0gPSAiICIgKyBtYXRjaFs0XSArICIgIjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNo
OworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBQU0VVRE86IGZ1bmN0aW9u
KCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG1hdGNoWzFdID09PSAibm90IiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgY29tcGxleCBleHByZXNz
aW9uLCBvciBhIHNpbXBsZSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAoIGNodW5rZXIuZXhlYyhtYXRjaFszXSkgfHwgIiIgKS5sZW5ndGggPiAxIHx8IC9eXHcvLnRl
c3QobWF0Y2hbM10pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoWzNdID0gU2l6emxlKG1hdGNoWzNdLCBudWxsLCBudWxsLCBjdXJMb29wKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBTaXp6bGUuZmlsdGVyKG1hdGNoWzNdLCBj
dXJMb29wLCBpbnBsYWNlLCB0cnVlIF4gbm90KTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaC5hcHBseSggcmVzdWx0LCByZXQg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggRXhwci5tYXRjaC5QT1MudGVzdCggbWF0Y2hbMF0gKSB8fCBFeHByLm1hdGNoLkNISUxE
LnRlc3QoIG1hdGNoWzBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgICAgIFBPUzogZnVuY3Rpb24oIG1hdGNoICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2gudW5zaGlmdCggdHJ1ZSApOworCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICAKKyAgICAgICAgZmlsdGVyczogeworICAgICAgICAgICAgICAgIGVuYWJsZWQ6
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0u
ZGlzYWJsZWQgPT09IGZhbHNlICYmIGVsZW0udHlwZSAhPT0gImhpZGRlbiI7CisgICAgICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbiggZWxlbSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBjaGVja2VkOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmNoZWNrZWQgPT09
IHRydWU7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBzZWxlY3RlZDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOworICAg
ICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhZWxlbS5maXJzdENoaWxkOwor
ICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWVsZW0uZmlyc3RDaGlsZDsK
KyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiggZWxl
bSwgaSwgbWF0Y2ggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFTaXp6bGUo
IG1hdGNoWzNdLCBlbGVtICkubGVuZ3RoOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgICAgICBoZWFkZXI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICgvaFxkL2kpLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKKyAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCAidHlwZSIgKSwg
dHlwZSA9IGVsZW0udHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFNiBhbmQgNyB3
aWxsIG1hcCBlbGVtLnR5cGUgdG8gJ3RleHQnIGZvciBuZXcgSFRNTDUgdHlwZXMgKHNlYXJjaCwg
ZXRjKSAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVh
ZCB0byB0ZXN0IHRoaXMgY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAidGV4dCIgPT09IHR5cGUgJiYg
KCBhdHRyID09PSB0eXBlIHx8IGF0dHIgPT09IG51bGwgKTsKKyAgICAgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAgICAgcmFkaW86IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0
IiAmJiAicmFkaW8iID09PSBlbGVtLnR5cGU7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgICAgIGNoZWNrYm94OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYg
ImNoZWNrYm94IiA9PT0gZWxlbS50eXBlOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgICAgICBmaWxlOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgImZpbGUi
ID09PSBlbGVtLnR5cGU7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIHBh
c3N3b3JkOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInBhc3N3b3JkIiA9
PT0gZWxlbS50eXBlOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBzdWJt
aXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUg
PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmICJzdWJtaXQi
ID09PSBlbGVtLnR5cGU7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGlt
YWdlOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgImltYWdlIiA9PT0gZWxl
bS50eXBlOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICByZXNldDogZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
bmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgInJlc2V0IiA9PT0gZWxl
bS50eXBlOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBidXR0b246IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVt
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bmFtZSA9PT0gImlucHV0IiAmJiAiYnV0dG9uIiA9PT0gZWxlbS50eXBlIHx8IG5hbWUgPT09ICJi
dXR0b24iOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBpbnB1dDogZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC9pbnB1dHxz
ZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kpLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKKyAgICAgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVu
dC5hY3RpdmVFbGVtZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAg
c2V0RmlsdGVyczogeworICAgICAgICAgICAgICAgIGZpcnN0OiBmdW5jdGlvbiggZWxlbSwgaSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpID09PSAwOworICAgICAgICAgICAg
ICAgIH0sCisKKyAgICAgICAgICAgICAgICBsYXN0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2gs
IGFycmF5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IGFycmF5Lmxl
bmd0aCAtIDE7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGV2ZW46IGZ1
bmN0aW9uKCBlbGVtLCBpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgJSAy
ID09PSAwOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBvZGQ6IGZ1bmN0
aW9uKCBlbGVtLCBpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgJSAyID09
PSAxOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBsdDogZnVuY3Rpb24o
IGVsZW0sIGksIG1hdGNoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
YXRjaFszXSAtIDA7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGd0OiBm
dW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaSA+IG1hdGNoWzNdIC0gMDsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgbnRoOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hbM10gLSAwID09PSBpOworICAgICAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgICAgICBlcTogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzNdIC0gMCA9PT0gaTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgIGZpbHRlcjogeworICAgICAgICAgICAgICAgIFBTRVVE
TzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoLCBpLCBhcnJheSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBuYW1lID0gbWF0Y2hbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbHRlciA9IEV4cHIuZmlsdGVyc1sgbmFtZSBdOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGZpbHRlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgPT09ICJjb250YWlucyIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVy
VGV4dCB8fCBTaXp6bGUuZ2V0VGV4dChbIGVsZW0gXSkgfHwgIiIpLmluZGV4T2YobWF0Y2hbM10p
ID49IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgPT09ICJu
b3QiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90ID0gbWF0Y2hb
M107CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBs
ID0gbm90Lmxlbmd0aDsgaiA8IGw7IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG5vdFtqXSA9PT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2l6emxlLmVycm9yKCBuYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIENISUxEOiBmdW5jdGlv
biggZWxlbSwgbWF0Y2ggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG1h
dGNoWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggdHlwZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAib25seSI6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgImZpcnN0IjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpICkgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlw
ZSA9PT0gMSApIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0
eXBlID09PSAiZmlyc3QiICkgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlID0gZWxlbTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJsYXN0
IjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2Rl
ID0gbm9kZS5uZXh0U2libGluZykgKSAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAibnRoIjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3QgPSBtYXRjaFsyXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtYXRjaFszXTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3QgPT09IDEgJiYg
bGFzdCA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9uZU5hbWUgPSBtYXRjaFswXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9
IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBwYXJlbnQgJiYgKHBhcmVudC5zaXpjYWNoZSAhPT0gZG9uZU5hbWUg
fHwgIWVsZW0ubm9kZUluZGV4KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIG5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9k
ZSA9IG5vZGUubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLm5vZGVJbmRleCA9ICsrY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zaXpjYWNoZSA9IGRvbmVOYW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZGlmZiA9IGVsZW0ubm9kZUluZGV4IC0gbGFzdDsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3QgPT09IDAgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlmZiA9PT0gMDsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCBkaWZm
ICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIElEOiBmdW5jdGlvbiggZWxlbSwgbWF0
Y2ggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0g
MSAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gbWF0Y2g7CisgICAgICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgICAgIFRBRzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtYXRjaCA9PT0gIioiICYmIGVsZW0ubm9kZVR5
cGUgPT09IDEpIHx8IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2g7CisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDTEFTUzog
ZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICgiICIgKyAoZWxlbS5jbGFzc05hbWUgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpICsg
IiAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZiggbWF0Y2ggKSA+
IC0xOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBBVFRSOiBmdW5jdGlv
biggZWxlbSwgbWF0Y2ggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1h
dGNoWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByLmF0
dHJIYW5kbGVbIG5hbWUgXSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRXhwci5hdHRySGFuZGxlWyBuYW1lIF0oIGVsZW0gKSA6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbVsgbmFtZSBdICE9IG51bGwgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgbmFtZSBdIDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZ2V0QXR0cmli
dXRlKCBuYW1lICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVz
dWx0ICsgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtYXRjaFsy
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSBtYXRjaFs0XTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gIiE9IiA6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPT09ICI9IiA/CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID09PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPT09ICIqPSIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5p
bmRleE9mKGNoZWNrKSA+PSAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9PT0gIn49IiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiICIgKyB2YWx1
ZSArICIgIikuaW5kZXhPZihjaGVjaykgPj0gMCA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICFjaGVjayA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICYm
IHJlc3VsdCAhPT0gZmFsc2UgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID09PSAiIT0iID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IGNo
ZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gIl49IiA/Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmluZGV4T2YoY2hlY2spID09PSAw
IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gIiQ9IiA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnN1YnN0cih2YWx1ZS5sZW5ndGggLSBj
aGVjay5sZW5ndGgpID09PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPT09ICJ8PSIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
PT0gY2hlY2sgfHwgdmFsdWUuc3Vic3RyKDAsIGNoZWNrLmxlbmd0aCArIDEpID09PSBjaGVjayAr
ICItIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICBQT1M6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCwg
aSwgYXJyYXkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNoWzJd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBFeHByLnNldEZpbHRl
cnNbIG5hbWUgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaWx0ZXIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIoIGVsZW0sIGksIG1h
dGNoLCBhcnJheSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgfQorfTsKKwordmFyIG9yaWdQT1MgPSBFeHByLm1hdGNoLlBPUywKKyAgICAg
ICAgZmVzY2FwZSA9IGZ1bmN0aW9uKGFsbCwgbnVtKXsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IlxcIiArIChudW0gLSAwICsgMSk7CisgICAgICAgIH07CisKK2ZvciAoIHZhciB0eXBlIGluIEV4
cHIubWF0Y2ggKSB7CisgICAgICAgIEV4cHIubWF0Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAoIEV4
cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UgKyAoLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291
cmNlKSApOworICAgICAgICBFeHByLmxlZnRNYXRjaFsgdHlwZSBdID0gbmV3IFJlZ0V4cCggLyhe
KD86LnxccnxcbikqPykvLnNvdXJjZSArIEV4cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UucmVwbGFj
ZSgvXFwoXGQrKS9nLCBmZXNjYXBlKSApOworfQorCit2YXIgbWFrZUFycmF5ID0gZnVuY3Rpb24o
IGFycmF5LCByZXN1bHRzICkgeworICAgICAgICBhcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKCBhcnJheSwgMCApOworCisgICAgICAgIGlmICggcmVzdWx0cyApIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMsIGFycmF5ICk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biBhcnJheTsKK307CisKKy8vIFBlcmZvcm0gYSBzaW1wbGUgY2hlY2sgdG8gZGV0ZXJtaW5lIGlm
IHRoZSBicm93c2VyIGlzIGNhcGFibGUgb2YKKy8vIGNvbnZlcnRpbmcgYSBOb2RlTGlzdCB0byBh
biBhcnJheSB1c2luZyBidWlsdGluIG1ldGhvZHMuCisvLyBBbHNvIHZlcmlmaWVzIHRoYXQgdGhl
IHJldHVybmVkIGFycmF5IGhvbGRzIERPTSBub2RlcworLy8gKHdoaWNoIGlzIG5vdCB0aGUgY2Fz
ZSBpbiB0aGUgQmxhY2tiZXJyeSBicm93c2VyKQordHJ5IHsKKyAgICAgICAgQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLCAwIClb
MF0ubm9kZVR5cGU7CisKKy8vIFByb3ZpZGUgYSBmYWxsYmFjayBtZXRob2QgaWYgaXQgZG9lcyBu
b3Qgd29yaworfSBjYXRjaCggZSApIHsKKyAgICAgICAgbWFrZUFycmF5ID0gZnVuY3Rpb24oIGFy
cmF5LCByZXN1bHRzICkgeworICAgICAgICAgICAgICAgIHZhciBpID0gMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAgICAgICAgICAgICAgICBpZiAo
IHRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAiW29iamVjdCBBcnJheV0iICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoIHJldCwgYXJyYXkgKTsK
KworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiBhcnJheS5sZW5ndGggPT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggYXJyYXlb
aV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCA7IGFycmF5W2ldOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0LnB1c2goIGFycmF5W2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9OworfQorCit2YXIgc29ydE9yZGVy
LCBzaWJsaW5nQ2hlY2s7CisKK2lmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uICkgeworICAgICAgICBzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCAhYS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8gLTEg
OiAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBhLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogMTsKKyAgICAgICAgfTsKKworfSBlbHNl
IHsKKyAgICAgICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhlIG5vZGVzIGFyZSBpZGVudGljYWwsIHdlIGNhbiBleGl0IGVhcmx5CisgICAgICAg
ICAgICAgICAgaWYgKCBhID09PSBiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVw
bGljYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAg
ICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5kZXggKGluIElFKSBpZiBp
dCdzIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
YS5zb3VyY2VJbmRleCAmJiBiLnNvdXJjZUluZGV4ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4OworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHZhciBhbCwgYmwsCisgICAgICAgICAgICAgICAgICAgICAg
ICBhcCA9IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgYnAgPSBbXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF1cCA9IGEucGFyZW50Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJ1cCA9IGIucGFyZW50Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGF1cDsK
KworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MgKG9yIGlkZW50
aWNhbCkgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2sKKyAgICAgICAgICAgICAgICBpZiAoIGF1cCA9
PT0gYnVwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjaygg
YSwgYiApOworCisgICAgICAgICAgICAgICAgLy8gSWYgbm8gcGFyZW50cyB3ZXJlIGZvdW5kIHRo
ZW4gdGhlIG5vZGVzIGFyZSBkaXNjb25uZWN0ZWQKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCAhYXVwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggIWJ1cCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSB0aGV5J3JlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSB0cmVlIHNvIHdlIG5lZWQKKyAgICAgICAg
ICAgICAgICAvLyB0byBidWlsZCB1cCBhIGZ1bGwgbGlzdCBvZiB0aGUgcGFyZW50Tm9kZXMgZm9y
IGNvbXBhcmlzb24KKyAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOworICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY3VyID0gYnVwOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicC51bnNoaWZ0KCBjdXIgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGFsID0gYXAubGVuZ3RoOworICAgICAgICAgICAgICAgIGJsID0gYnAubGVuZ3RoOwor
CisgICAgICAgICAgICAgICAgLy8gU3RhcnQgd2Fsa2luZyBkb3duIHRoZSB0cmVlIGxvb2tpbmcg
Zm9yIGEgZGlzY3JlcGFuY3kKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBh
bCAmJiBpIDwgYmw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXBbaV0g
IT09IGJwW2ldICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2li
bGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBXZSBlbmRlZCBzb21lcGxhY2Ug
dXAgdGhlIHRyZWUgc28gZG8gYSBzaWJsaW5nIGNoZWNrCisgICAgICAgICAgICAgICAgcmV0dXJu
IGkgPT09IGFsID8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYSwgYnBb
aV0sIC0xICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZ0NoZWNrKCBhcFtpXSwg
YiwgMSApOworICAgICAgICB9OworCisgICAgICAgIHNpYmxpbmdDaGVjayA9IGZ1bmN0aW9uKCBh
LCBiLCByZXQgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBhID09PSBiICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB2YXIgY3VyID0gYS5uZXh0U2libGluZzsKKworICAgICAgICAgICAgICAgIHdoaWxl
ICggY3VyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIgPT09IGIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLm5leHRTaWJs
aW5nOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICB9OworfQorCisvLyBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyZWl2aW5nIHRoZSB0ZXh0
IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2RlcworU2l6emxlLmdldFRleHQgPSBmdW5jdGlv
biggZWxlbXMgKSB7CisgICAgICAgIHZhciByZXQgPSAiIiwgZWxlbTsKKworICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGVsZW1zW2ldOyBpKysgKSB7CisgICAgICAgICAgICAgICAgZWxlbSA9IGVs
ZW1zW2ldOworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGZyb20gdGV4dCBub2Rl
cyBhbmQgQ0RBVEEgbm9kZXMKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09
IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gNCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCArPSBlbGVtLm5vZGVWYWx1ZTsKKworICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIGV2ZXJ5
dGhpbmcgZWxzZSwgZXhjZXB0IGNvbW1lbnQgbm9kZXMKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBlbGVtLm5vZGVUeXBlICE9PSA4ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ICs9IFNpenpsZS5nZXRUZXh0KCBlbGVtLmNoaWxkTm9kZXMgKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworfTsKKworLy8gQ2hlY2sgdG8gc2Vl
IGlmIHRoZSBicm93c2VyIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZSB3aGVuCisvLyBxdWVyeWlu
ZyBieSBnZXRFbGVtZW50QnlJZCAoYW5kIHByb3ZpZGUgYSB3b3JrYXJvdW5kKQorKGZ1bmN0aW9u
KCl7CisgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGluamVjdCBhIGZha2UgaW5wdXQgZWxlbWVu
dCB3aXRoIGEgc3BlY2lmaWVkIG5hbWUKKyAgICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKSwKKyAgICAgICAgICAgICAgICBpZCA9ICJzY3JpcHQiICsgKG5ldyBE
YXRlKCkpLmdldFRpbWUoKSwKKyAgICAgICAgICAgICAgICByb290ID0gZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50OworCisgICAgICAgIGZvcm0uaW5uZXJIVE1MID0gIjxhIG5hbWU9JyIgKyBpZCAr
ICInLz4iOworCisgICAgICAgIC8vIEluamVjdCBpdCBpbnRvIHRoZSByb290IGVsZW1lbnQsIGNo
ZWNrIGl0cyBzdGF0dXMsIGFuZCByZW1vdmUgaXQgcXVpY2tseQorICAgICAgICByb290Lmluc2Vy
dEJlZm9yZSggZm9ybSwgcm9vdC5maXJzdENoaWxkICk7CisKKyAgICAgICAgLy8gVGhlIHdvcmth
cm91bmQgaGFzIHRvIGRvIGFkZGl0aW9uYWwgY2hlY2tzIGFmdGVyIGEgZ2V0RWxlbWVudEJ5SWQK
KyAgICAgICAgLy8gV2hpY2ggc2xvd3MgdGhpbmdzIGRvd24gZm9yIG90aGVyIGJyb3dzZXJzICho
ZW5jZSB0aGUgYnJhbmNoaW5nKQorICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCBpZCApICkgeworICAgICAgICAgICAgICAgIEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBtYXRj
aCwgY29udGV4dCwgaXNYTUwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVv
ZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5kZWZpbmVkIiAmJiAhaXNYTUwgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZChtYXRjaFsxXSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG0gPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQgPT09IG1h
dGNoWzFdIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIG0u
Z2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWUgPT09IG1hdGNoWzFdID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttXSA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBFeHByLmZpbHRl
ci5JRCA9IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gInVuZGVmaW5lZCIg
JiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBub2RlICYmIG5vZGUubm9kZVZhbHVlID09
PSBtYXRjaDsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcm9vdC5y
ZW1vdmVDaGlsZCggZm9ybSApOworCisgICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisg
ICAgICAgIHJvb3QgPSBmb3JtID0gbnVsbDsKK30pKCk7CisKKyhmdW5jdGlvbigpeworICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGJyb3dzZXIgcmV0dXJucyBvbmx5IGVsZW1lbnRzCisg
ICAgICAgIC8vIHdoZW4gZG9pbmcgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKQorCisgICAgICAg
IC8vIENyZWF0ZSBhIGZha2UgZWxlbWVudAorICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCgiIikgKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgbm8gY29tbWVudHMgYXJl
IGZvdW5kCisgICAgICAgIGlmICggZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3Ro
ID4gMCApIHsKKyAgICAgICAgICAgICAgICBFeHByLmZpbmQuVEFHID0gZnVuY3Rpb24oIG1hdGNo
LCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBjb250
ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIG1hdGNoWzFdID09PSAiKiIgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciB0bXAgPSBbXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDA7IHJlc3VsdHNbaV07IGkrKyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdHNbaV0ubm9kZVR5cGUgPT09IDEgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVz
aCggcmVzdWx0c1tpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB0bXA7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgYW4gYXR0cmli
dXRlIHJldHVybnMgbm9ybWFsaXplZCBocmVmIGF0dHJpYnV0ZXMKKyAgICAgICAgZGl2LmlubmVy
SFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKKworICAgICAgICBpZiAoIGRpdi5maXJzdENoaWxk
ICYmIHR5cGVvZiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUgIT09ICJ1bmRlZmluZWQiICYm
CisgICAgICAgICAgICAgICAgICAgICAgICBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhy
ZWYiKSAhPT0gIiMiICkgeworCisgICAgICAgICAgICAgICAgRXhwci5hdHRySGFuZGxlLmhyZWYg
PSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
LmdldEF0dHJpYnV0ZSggImhyZWYiLCAyICk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisgICAgICAgIGRpdiA9IG51bGw7
Cit9KSgpOworCitpZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7CisgICAgICAgIChm
dW5jdGlvbigpeworICAgICAgICAgICAgICAgIHZhciBvbGRTaXp6bGUgPSBTaXp6bGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gIl9fc2l6emxlX18iOworCisgICAgICAgICAg
ICAgICAgZGl2LmlubmVySFRNTCA9ICI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7CisKKyAgICAgICAg
ICAgICAgICAvLyBTYWZhcmkgY2FuJ3QgaGFuZGxlIHVwcGVyY2FzZSBvciB1bmljb2RlIGNoYXJh
Y3RlcnMgd2hlbgorICAgICAgICAgICAgICAgIC8vIGluIHF1aXJrcyBtb2RlLgorICAgICAgICAg
ICAgICAgIGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwgJiYgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwo
Ii5URVNUIikubGVuZ3RoID09PSAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAgICAgU2l6emxlID0g
ZnVuY3Rpb24oIHF1ZXJ5LCBjb250ZXh0LCBleHRyYSwgc2VlZCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBPbmx5IHVzZSBxdWVyeVNlbGVjdG9yQWxsIG9uIG5vbi1YTUwgZG9jdW1l
bnRzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAoSUQgc2VsZWN0b3JzIGRvbid0IHdvcmsg
aW4gbm9uLUhUTUwgZG9jdW1lbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc2Vl
ZCAmJiAhU2l6emxlLmlzWE1MKGNvbnRleHQpICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTZWUgaWYgd2UgZmluZCBhIHNlbGVjdG9yIHRvIHNwZWVkIHVwCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eKFx3KyQpfF5cLihbXHdcLV0r
JCl8XiMoW1x3XC1dKyQpLy5leGVjKCBxdWVyeSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAo
Y29udGV4dC5ub2RlVHlwZSA9PT0gMSB8fCBjb250ZXh0Lm5vZGVUeXBlID09PSA5KSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxl
KCJUQUciKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0
Y2hbMV0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBxdWVyeSAp
LCBleHRyYSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUo
Ii5DTEFTUyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggbWF0Y2hbMl0gJiYgRXhwci5maW5kLkNMQVNTICYmIGNvbnRleHQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgg
bWF0Y2hbMl0gKSwgZXh0cmEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y29udGV4dC5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCJib2R5IikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYm9keSBlbGVtZW50IG9ubHkgZXhpc3RzIG9u
Y2UsIG9wdGltaXplIGZpbmRpbmcgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHF1ZXJ5ID09PSAiYm9keSIgJiYgY29udGV4dC5ib2R5ICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJh
eSggWyBjb250ZXh0LmJvZHkgXSwgZXh0cmEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIiNJRCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2ggJiYgbWF0Y2hbM10gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGNv
bnRleHQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzNdICk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2gg
d2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRv
Y3VtZW50ICM2OTYzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVtcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBlbGVtLmlkID09PSBtYXRjaFszXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBb
IGVsZW0gXSwgZXh0cmEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoIFtdLCBleHRyYSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KSwgZXh0cmEg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKHFzYUVy
cm9yKSB7fQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHFTQSB3b3JrcyBz
dHJhbmdlbHkgb24gRWxlbWVudC1yb290ZWQgcXVlcmllcworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4
dHJhIElEIG9uIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
ZCB3b3JraW5nIHVwIGZyb20gdGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUg
dGVjaG5pcXVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSA4IGRvZXNu
J3Qgd29yayBvbiBvYmplY3QgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBvbGRDb250ZXh0ID0gY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCA9IGNvbnRleHQuZ2V0QXR0cmli
dXRlKCAiaWQiICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuaWQgPSBvbGQgfHwgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNQYXJlbnQgPSBjb250ZXh0LnBhcmVudE5vZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUhpZXJhcmNoeVNl
bGVjdG9yID0gL15ccypbK35dLy50ZXN0KCBxdWVyeSApOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb2xkICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIG5p
ZCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWQgPSBuaWQu
cmVwbGFjZSggLycvZywgIlxcJCYiICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciAmJiBoYXNQYXJlbnQgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wYXJl
bnROb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZWxhdGl2ZUhpZXJhcmNo
eVNlbGVjdG9yIHx8IGhhc1BhcmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5xdWVy
eVNlbGVjdG9yQWxsKCAiW2lkPSciICsgbmlkICsgIiddICIgKyBxdWVyeSApLCBleHRyYSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChwc2V1ZG9FcnJvcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvbGQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9sZENvbnRleHQucmVtb3ZlQXR0cmlidXRlKCAiaWQiICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gb2xkU2l6emxlKHF1ZXJ5LCBjb250ZXh0LCBleHRyYSwgc2VlZCk7
CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGZvciAoIHZhciBwcm9wIGlu
IG9sZFNpenpsZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZVsgcHJvcCBdID0g
b2xkU2l6emxlWyBwcm9wIF07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKKyAgICAgICAgICAgICAgICBkaXYgPSBudWxsOworICAg
ICAgICB9KSgpOworfQorCisoZnVuY3Rpb24oKXsKKyAgICAgICAgdmFyIGh0bWwgPSBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQsCisgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IGh0bWwubWF0Y2hl
c1NlbGVjdG9yIHx8IGh0bWwubW96TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwud2Via2l0TWF0Y2hl
c1NlbGVjdG9yIHx8IGh0bWwubXNNYXRjaGVzU2VsZWN0b3I7CisKKyAgICAgICAgaWYgKCBtYXRj
aGVzICkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxl
IHRvIGRvIG1hdGNoZXNTZWxlY3RvcgorICAgICAgICAgICAgICAgIC8vIG9uIGEgZGlzY29ubmVj
dGVkIG5vZGUgKElFIDkgZmFpbHMgdGhpcykKKyAgICAgICAgICAgICAgICB2YXIgZGlzY29ubmVj
dGVkTWF0Y2ggPSAhbWF0Y2hlcy5jYWxsKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiAp
LCAiZGl2IiApLAorICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvV29ya3MgPSBmYWxzZTsK
KworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVzLmNhbGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgIlt0
ZXN0IT0nJ106c2l6emxlIiApOworICAgICAgICAKKyAgICAgICAgICAgICAgICB9IGNhdGNoKCBw
c2V1ZG9FcnJvciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkb1dvcmtzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBTaXp6bGUubWF0Y2hlc1Nl
bGVjdG9yID0gZnVuY3Rpb24oIG5vZGUsIGV4cHIgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxz
KlxdL2csICI9JyQxJ10iKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhU2l6emxl
LmlzWE1MKCBub2RlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHNldWRvV29y
a3MgfHwgIUV4cHIubWF0Y2guUFNFVURPLnRlc3QoIGV4cHIgKSAmJiAhLyE9Ly50ZXN0KCBleHBy
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBub2RlLCBleHByICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3Ig
cmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0IHx8ICFkaXNjb25uZWN0ZWRNYXRj
aCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBi
ZSBpbiBhIGRvY3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOSwgc28gY2hlY2sgZm9y
IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLmRvY3VtZW50ICYmIG5vZGUuZG9jdW1lbnQubm9kZVR5cGUgIT09
IDExICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2l6emxl
KGV4cHIsIG51bGwsIG51bGwsIFtub2RlXSkubGVuZ3RoID4gMDsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICB9Cit9KSgpOworCisoZnVuY3Rpb24oKXsKKyAgICAgICAgdmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAi
PGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iOworCisg
ICAgICAgIC8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xhc3NuYW1lIChpbiA5LjYpCisg
ICAgICAgIC8vIEFsc28sIG1ha2Ugc3VyZSB0aGF0IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgYWN0
dWFsbHkgZXhpc3RzCisgICAgICAgIGlmICggIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8
IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoID09PSAwICkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNhZmFyaSBjYWNoZXMg
Y2xhc3MgYXR0cmlidXRlcywgZG9lc24ndCBjYXRjaCBjaGFuZ2VzIChpbiAzLjIpCisgICAgICAg
IGRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOworCisgICAgICAgIGlmICggZGl2LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggPT09IDEgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBFeHByLm9yZGVyLnNwbGljZSgx
LCAwLCAiQ0xBU1MiKTsKKyAgICAgICAgRXhwci5maW5kLkNMQVNTID0gZnVuY3Rpb24oIG1hdGNo
LCBjb250ZXh0LCBpc1hNTCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09ICJ1bmRlZmluZWQiICYmICFpc1hNTCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUobWF0Y2hbMV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICAv
LyByZWxlYXNlIG1lbW9yeSBpbiBJRQorICAgICAgICBkaXYgPSBudWxsOworfSkoKTsKKworZnVu
Y3Rpb24gZGlyTm9kZUNoZWNrKCBkaXIsIGN1ciwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hl
Y2ssIGlzWE1MICkgeworICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBjaGVja1NldFtp
XTsKKworICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBtYXRjaCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0g
ZWxlbVtkaXJdOworCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5zaXpjYWNoZSA9PT0gZG9u
ZU5hbWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2gg
PSBjaGVja1NldFtlbGVtLnNpenNldF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYg
IWlzWE1MICl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5z
aXpjYWNoZSA9IGRvbmVOYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uc2l6c2V0ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09PSBjdXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2ggPSBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1bZGlyXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBtYXRj
aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworZnVuY3Rpb24gZGlyQ2hlY2so
IGRpciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKSB7CisgICAg
ICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGNoZWNrU2V0W2ldOworCisgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0gPSBlbGVtW2Rpcl07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNpemNhY2hlID09
PSBkb25lTmFtZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaCA9IGNoZWNrU2V0W2VsZW0uc2l6c2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0g
MSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc1hN
TCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0uc2l6Y2FjaGUgPSBkb25lTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiBjdXIgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBjdXIgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBTaXp6bGUuZmlsdGVyKCBjdXIsIFtlbGVtXSApLmxlbmd0aCA+IDAgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGVsZW07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtID0gZWxlbVtkaXJdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IG1hdGNoOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorfQorCitpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyApIHsK
KyAgICAgICAgU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGEgIT09IGIgJiYgKGEuY29udGFpbnMgPyBhLmNvbnRhaW5zKGIpIDogdHJ1
ZSk7CisgICAgICAgIH07CisKK30gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHsKKyAgICAgICAgU2l6emxlLmNvbnRhaW5zID0gZnVu
Y3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEhKGEuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24oYikgJiAxNik7CisgICAgICAgIH07CisKK30gZWxzZSB7CisgICAgICAgIFNp
enpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfTsKK30KKworU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgIC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQg
ZG9lc24ndCB5ZXQgZXhpc3QKKyAgICAgICAgLy8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGlu
IElFIC0gIzQ4MzMpIAorICAgICAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gKGVsZW0gPyBlbGVt
Lm93bmVyRG9jdW1lbnQgfHwgZWxlbSA6IDApLmRvY3VtZW50RWxlbWVudDsKKworICAgICAgICBy
ZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRN
TCIgOiBmYWxzZTsKK307CisKK3ZhciBwb3NQcm9jZXNzID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBj
b250ZXh0ICkgeworICAgICAgICB2YXIgbWF0Y2gsCisgICAgICAgICAgICAgICAgdG1wU2V0ID0g
W10sCisgICAgICAgICAgICAgICAgbGF0ZXIgPSAiIiwKKyAgICAgICAgICAgICAgICByb290ID0g
Y29udGV4dC5ub2RlVHlwZSA/IFtjb250ZXh0XSA6IGNvbnRleHQ7CisKKyAgICAgICAgLy8gUG9z
aXRpb24gc2VsZWN0b3JzIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgZmlsdGVyCisgICAgICAgIC8v
IEFuZCBzbyBtdXN0IDpub3QocG9zaXRpb25hbCkgc28gd2UgbW92ZSBhbGwgUFNFVURPcyB0byB0
aGUgZW5kCisgICAgICAgIHdoaWxlICggKG1hdGNoID0gRXhwci5tYXRjaC5QU0VVRE8uZXhlYygg
c2VsZWN0b3IgKSkgKSB7CisgICAgICAgICAgICAgICAgbGF0ZXIgKz0gbWF0Y2hbMF07CisgICAg
ICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKCBFeHByLm1hdGNoLlBTRVVE
TywgIiIgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNlbGVjdG9yID0gRXhwci5yZWxhdGl2ZVtz
ZWxlY3Rvcl0gPyBzZWxlY3RvciArICIqIiA6IHNlbGVjdG9yOworCisgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IHJvb3QubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAg
IFNpenpsZSggc2VsZWN0b3IsIHJvb3RbaV0sIHRtcFNldCApOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIFNpenpsZS5maWx0ZXIoIGxhdGVyLCB0bXBTZXQgKTsKK307CisKKy8vIEVYUE9T
RQoralF1ZXJ5LmZpbmQgPSBTaXp6bGU7CitqUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7
CitqUXVlcnkuZXhwclsiOiJdID0galF1ZXJ5LmV4cHIuZmlsdGVyczsKK2pRdWVyeS51bmlxdWUg
PSBTaXp6bGUudW5pcXVlU29ydDsKK2pRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7CitqUXVl
cnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7CitqUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29u
dGFpbnM7CisKKworfSkoKTsKKworCit2YXIgcnVudGlsID0gL1VudGlsJC8sCisgICAgICAgIHJw
YXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLAorICAgICAgICAv
LyBOb3RlOiBUaGlzIFJlZ0V4cCBzaG91bGQgYmUgaW1wcm92ZWQsIG9yIGxpa2VseSBwdWxsZWQg
ZnJvbSBTaXp6bGUKKyAgICAgICAgcm11bHRpc2VsZWN0b3IgPSAvLC8sCisgICAgICAgIGlzU2lt
cGxlID0gL14uW146I1xbXC4sXSokLywKKyAgICAgICAgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UsCisgICAgICAgIFBPUyA9IGpRdWVyeS5leHByLm1hdGNoLlBPUywKKyAgICAgICAgLy8g
bWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcg
ZnJvbSBhIHVuaXF1ZSBzZXQKKyAgICAgICAgZ3VhcmFudGVlZFVuaXF1ZSA9IHsKKyAgICAgICAg
ICAgICAgICBjaGlsZHJlbjogdHJ1ZSwKKyAgICAgICAgICAgICAgICBjb250ZW50czogdHJ1ZSwK
KyAgICAgICAgICAgICAgICBuZXh0OiB0cnVlLAorICAgICAgICAgICAgICAgIHByZXY6IHRydWUK
KyAgICAgICAgfTsKKworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAgICAgIGZpbmQ6IGZ1bmN0aW9u
KCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICBpLCBsOworCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2Vs
ZWN0b3IgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gc2VsZi5sZW5ndGg7IGkgPCBsOyBpKysgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29u
dGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB2YXIgcmV0ID0gdGhpcy5wdXNoU3RhY2soICIiLCAiZmluZCIsIHNlbGVjdG9yICks
CisgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIG4sIHI7CisKKyAgICAgICAgICAgICAg
ICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbGVuZ3RoID0gcmV0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5maW5kKCBzZWxlY3RvciwgdGhpc1tpXSwgcmV0ICk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXN1bHRzIGFyZSB1bmlxdWUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggbiA9IGxlbmd0aDsgbiA8IHJldC5sZW5ndGg7IG4r
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCByID0g
MDsgciA8IGxlbmd0aDsgcisrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXRbcl0gPT09IHJldFtuXSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZShuLS0s
IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9
LAorCisgICAgICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKKyAgICAgICAgICAgICAgICB2
YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmlsdGVyKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBsID0gdGFyZ2V0cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ld
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICBub3Q6
IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNo
U3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciwgZmFsc2UpLCAibm90Iiwgc2VsZWN0b3IpOwor
ICAgICAgICB9LAorCisgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9y
LCB0cnVlKSwgImZpbHRlciIsIHNlbGVjdG9yICk7CisgICAgICAgIH0sCisKKyAgICAgICAgaXM6
IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFzZWxlY3Rv
ciAmJiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5sZW5ndGggPiAwIDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyKCBzZWxlY3RvciApLmxlbmd0aCA+IDAgKTsK
KyAgICAgICAgfSwKKworICAgICAgICBjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250
ZXh0ICkgeworICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXSwgaSwgbCwgY3VyID0gdGhpc1sw
XTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBBcnJheQorICAgICAgICAg
ICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHNlbGVjdG9ycyApICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG1hdGNoLCBzZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlcyA9IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZXZlbCA9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyICYmIHNlbGVjdG9y
cy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
LCBsID0gc2VsZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW1hdGNoZXNbIHNlbGVjdG9y
IF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaGVzWyBzZWxlY3RvciBdID0gUE9TLnRlc3QoIHNlbGVjdG9yICkgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVj
dG9yLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgJiYg
Y3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBjb250ZXh0ICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHNlbGVjdG9yIGluIG1hdGNoZXMgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG1h
dGNoZXNbIHNlbGVjdG9yIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbWF0Y2guanF1ZXJ5ID8gbWF0Y2guaW5kZXgoIGN1ciApID4gLTEg
OiBqUXVlcnkoIGN1ciApLmlzKCBtYXRjaCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCh7IHNlbGVjdG9yOiBzZWxl
Y3RvciwgZWxlbTogY3VyLCBsZXZlbDogbGV2ZWwgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGV2ZWwrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFN0cmluZworICAgICAg
ICAgICAgICAgIHZhciBwb3MgPSBQT1MudGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVj
dG9ycyAhPT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkoIHNlbGVjdG9ycywgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDA7CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9
IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
ID0gdGhpc1tpXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcG9zID8gcG9zLmluZGV4KGN1cikg
PiAtMSA6IGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvcihjdXIsIHNlbGVjdG9ycykgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGN1ciApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY3VyIHx8ICFjdXIub3duZXJEb2N1bWVudCB8
fCBjdXIgPT09IGNvbnRleHQgfHwgY3VyLm5vZGVUeXBlID09PSAxMSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHJldCA9IHJldC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0
ICkgOiByZXQ7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwg
ImNsb3Nlc3QiLCBzZWxlY3RvcnMgKTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBEZXRlcm1p
bmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluCisgICAgICAgIC8vIHRoZSBtYXRj
aGVkIHNldCBvZiBlbGVtZW50cworICAgICAgICBpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7CisK
KyAgICAgICAgICAgICAgICAvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudAor
ICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApID8gdGhpcy5wcmV2QWxsKCku
bGVuZ3RoIDogLTE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaW5k
ZXggaW4gc2VsZWN0b3IKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3Ry
aW5nIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSgg
dGhpc1swXSwgalF1ZXJ5KCBlbGVtICkgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnQKKyAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50
IGlzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6
IGVsZW0sIHRoaXMgKTsKKyAgICAgICAgfSwKKworICAgICAgICBhZGQ6IGZ1bmN0aW9uKCBzZWxl
Y3RvciwgY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICB2YXIgc2V0ID0gdHlwZW9mIHNlbGVj
dG9yID09PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eSggc2VsZWN0b3IsIGNvbnRleHQgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxl
Y3RvciBdIDogc2VsZWN0b3IgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA9IGpRdWVy
eS5tZXJnZSggdGhpcy5nZXQoKSwgc2V0ICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5wdXNoU3RhY2soIGlzRGlzY29ubmVjdGVkKCBzZXRbMF0gKSB8fCBpc0Rpc2Nvbm5lY3RlZCgg
YWxsWzBdICkgPworICAgICAgICAgICAgICAgICAgICAgICAgYWxsIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS51bmlxdWUoIGFsbCApICk7CisgICAgICAgIH0sCisKKyAgICAgICAg
YW5kU2VsZjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKCB0
aGlzLnByZXZPYmplY3QgKTsKKyAgICAgICAgfQorfSk7CisKKy8vIEEgcGFpbmZ1bGx5IHNpbXBs
ZSBjaGVjayB0byBzZWUgaWYgYW4gZWxlbWVudCBpcyBkaXNjb25uZWN0ZWQKKy8vIGZyb20gYSBk
b2N1bWVudCAoc2hvdWxkIGJlIGltcHJvdmVkLCB3aGVyZSBmZWFzaWJsZSkuCitmdW5jdGlvbiBp
c0Rpc2Nvbm5lY3RlZCggbm9kZSApIHsKKyAgICAgICAgcmV0dXJuICFub2RlIHx8ICFub2RlLnBh
cmVudE5vZGUgfHwgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSAxMTsKK30KKworalF1ZXJ5
LmVhY2goeworICAgICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
ICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKKyAgICAg
ICAgfSwKKyAgICAgICAgcGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiApOworICAgICAgICB9LAor
ICAgICAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCAp
OworICAgICAgICB9LAorICAgICAgICBuZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4galF1ZXJ5Lm50aCggZWxlbSwgMiwgIm5leHRTaWJsaW5nIiApOworICAg
ICAgICB9LAorICAgICAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5Lm50aCggZWxlbSwgMiwgInByZXZpb3VzU2libGluZyIgKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKKyAgICAgICAgfSwK
KyAgICAgICAgcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgICAgIH0sCisg
ICAgICAgIG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRpbCApOwor
ICAgICAgICB9LAorICAgICAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCAp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2li
bGluZyIsIHVudGlsICk7CisgICAgICAgIH0sCisgICAgICAgIHNpYmxpbmdzOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0ucGFy
ZW50Tm9kZS5maXJzdENoaWxkLCBlbGVtICk7CisgICAgICAgIH0sCisgICAgICAgIGNoaWxkcmVu
OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxp
bmcoIGVsZW0uZmlyc3RDaGlsZCApOworICAgICAgICB9LAorICAgICAgICBjb250ZW50czogZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSgg
ZWxlbSwgImlmcmFtZSIgKSA/CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNvbnRlbnRE
b2N1bWVudCB8fCBlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggZWxlbS5jaGlsZE5vZGVzICk7CisgICAgICAgIH0K
K30sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKKyAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBm
dW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgIHZhciByZXQgPSBq
UXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSB2YXJpYWJsZSAnYXJncycgd2FzIGludHJvZHVjZWQgaW4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2NvbW1pdC81MmEwMjM4
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBDaHJv
bWUgMTAgKERldikgYW5kIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9p
c3N1ZXMvZGV0YWlsP2lkPTEwNTAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBzbGlj
ZS5jYWxsKGFyZ3VtZW50cyk7CisKKyAgICAgICAgICAgICAgICBpZiAoICFydW50aWwudGVzdCgg
bmFtZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB1bnRpbDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yICYmIHR5cGVv
ZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQg
PSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0ICk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5sZW5ndGggPiAxICYmICFndWFyYW50ZWVkVW5pcXVl
WyBuYW1lIF0gPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldDsKKworICAgICAgICAgICAgICAg
IGlmICggKHRoaXMubGVuZ3RoID4gMSB8fCBybXVsdGlzZWxlY3Rvci50ZXN0KCBzZWxlY3RvciAp
KSAmJiBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gcmV0LnJldmVyc2UoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwgYXJncy5qb2luKCIsIikgKTsK
KyAgICAgICAgfTsKK30pOworCitqUXVlcnkuZXh0ZW5kKHsKKyAgICAgICAgZmlsdGVyOiBmdW5j
dGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG5vdCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbXMubGVuZ3RoID09
PSAxID8KKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3Rv
cihlbGVtc1swXSwgZXhwcikgPyBbIGVsZW1zWzBdIF0gOiBbXSA6CisgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzKGV4cHIsIGVsZW1zKTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBkaXI6IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkgeworICAgICAgICAgICAg
ICAgIHZhciBtYXRjaGVkID0gW10sCisgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBlbGVt
WyBkaXIgXTsKKworICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAh
PT0gOSAmJiAodW50aWwgPT09IHVuZGVmaW5lZCB8fCBjdXIubm9kZVR5cGUgIT09IDEgfHwgIWpR
dWVyeSggY3VyICkuaXMoIHVudGlsICkpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBjdXIubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoZWQucHVzaCggY3VyICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXIgPSBjdXJbZGlyXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQ7CisgICAgICAgIH0sCisKKyAgICAgICAgbnRoOiBm
dW5jdGlvbiggY3VyLCByZXN1bHQsIGRpciwgZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSByZXN1bHQgfHwgMTsKKyAgICAgICAgICAgICAgICB2YXIgbnVtID0gMDsKKworICAgICAg
ICAgICAgICAgIGZvciAoIDsgY3VyOyBjdXIgPSBjdXJbZGlyXSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICsrbnVtID09PSByZXN1bHQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBj
dXI7CisgICAgICAgIH0sCisKKyAgICAgICAgc2libGluZzogZnVuY3Rpb24oIG4sIGVsZW0gKSB7
CisgICAgICAgICAgICAgICAgdmFyIHIgPSBbXTsKKworICAgICAgICAgICAgICAgIGZvciAoIDsg
bjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG4u
bm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgci5wdXNoKCBuICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgIH0KK30pOwor
CisvLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5k
IG5vdAorZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgeworCisg
ICAgICAgIC8vIENhbid0IHBhc3MgbnVsbCBvciB1bmRlZmluZWQgdG8gaW5kZXhPZiBpbiBGaXJl
Zm94IDQKKyAgICAgICAgLy8gU2V0IHRvIDAgdG8gc2tpcCBzdHJpbmcgY2hlY2sKKyAgICAgICAg
cXVhbGlmaWVyID0gcXVhbGlmaWVyIHx8IDA7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggcXVhbGlmaWVyICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVw
KGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciByZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsID09PSBrZWVwOworICAgICAgICAgICAgICAg
IH0pOworCisgICAgICAgIH0gZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtID09PSBxdWFsaWZpZXIp
ID09PSBrZWVwOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIH0gZWxzZSBpZiAoIHR5
cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgIHZhciBmaWx0
ZXJlZCA9IGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgaWYgKCBpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZmlsdGVyKHF1YWxp
ZmllciwgZmlsdGVyZWQsICFrZWVwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBm
aWx0ZXJlZCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIChqUXVlcnkuaW5BcnJheSggZWxlbSwgcXVhbGlmaWVyICkgPj0gMCkgPT09
IGtlZXA7CisgICAgICAgIH0pOworfQorCisKKworCit2YXIgcmlubGluZWpRdWVyeSA9IC8galF1
ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csCisgICAgICAgIHJsZWFkaW5nV2hpdGVzcGFjZSA9IC9e
XHMrLywKKyAgICAgICAgcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8
aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZywKKyAgICAgICAgcnRh
Z05hbWUgPSAvPChbXHc6XSspLywKKyAgICAgICAgcnRib2R5ID0gLzx0Ym9keS9pLAorICAgICAg
ICByaHRtbCA9IC88fCYjP1x3KzsvLAorICAgICAgICBybm9jYWNoZSA9IC88KD86c2NyaXB0fG9i
amVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksCisgICAgICAgIC8vIGNoZWNrZWQ9ImNoZWNrZWQi
IG9yIGNoZWNrZWQKKyAgICAgICAgcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5j
aGVja2VkLikvaSwKKyAgICAgICAgcnNjcmlwdFR5cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9p
LAorICAgICAgICByY2xlYW5TY3JpcHQgPSAvXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pLywKKyAg
ICAgICAgd3JhcE1hcCA9IHsKKyAgICAgICAgICAgICAgICBvcHRpb246IFsgMSwgIjxzZWxlY3Qg
bXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAorICAgICAgICAgICAgICAgIGxl
Z2VuZDogWyAxLCAiPGZpZWxkc2V0PiIsICI8L2ZpZWxkc2V0PiIgXSwKKyAgICAgICAgICAgICAg
ICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKKyAgICAgICAgICAgICAgICB0
cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiIgXSwKKyAgICAgICAg
ICAgICAgICB0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+IiwgIjwvdHI+PC90Ym9keT48L3Rh
YmxlPiIgXSwKKyAgICAgICAgICAgICAgICBjb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9k
eT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCisgICAgICAgICAgICAgICAg
YXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAorICAgICAgICAgICAgICAgIF9kZWZhdWx0
OiBbIDAsICIiLCAiIiBdCisgICAgICAgIH07CisKK3dyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFw
Lm9wdGlvbjsKK3dyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91
cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7Cit3cmFwTWFwLnRoID0gd3JhcE1h
cC50ZDsKKworLy8gSUUgY2FuJ3Qgc2VyaWFsaXplIDxsaW5rPiBhbmQgPHNjcmlwdD4gdGFncyBu
b3JtYWxseQoraWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsKKyAgICAgICAg
d3JhcE1hcC5fZGVmYXVsdCA9IFsgMSwgImRpdjxkaXY+IiwgIjwvZGl2PiIgXTsKK30KKworalF1
ZXJ5LmZuLmV4dGVuZCh7CisgICAgICAgIHRleHQ6IGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAg
ICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24odGV4dCkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHQoIHRleHQuY2FsbCh0aGlzLCBpLCBzZWxm
LnRleHQoKSkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHRleHQgIT09ICJvYmplY3QiICYmIHRl
eHQgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmVtcHR5KCkuYXBwZW5kKCAodGhpc1swXSAmJiB0aGlzWzBdLm93bmVyRG9jdW1lbnQgfHwgZG9j
dW1lbnQpLmNyZWF0ZVRleHROb2RlKCB0ZXh0ICkgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnRleHQoIHRoaXMgKTsKKyAgICAgICAgfSwKKwor
ICAgICAgICB3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlzLCBpKSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKCB0aGlzWzBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1l
bnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQgKS5lcSgwKS5jbG9u
ZSh0cnVlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdLnBhcmVudE5v
ZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3Jl
KCB0aGlzWzBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXAubWFwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgZWxlbSA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgJiYgZWxlbS5maXJzdENoaWxkLm5vZGVUeXBlID09
PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBl
bGVtLmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pLmFwcGVuZCggdGhpcyApOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIHdyYXBJbm5lcjog
ZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggaHRtbCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbihpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlz
KS53cmFwSW5uZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1
ZXJ5KCB0aGlzICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0g
c2VsZi5jb250ZW50cygpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnRlbnRz
Lmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMud3Jh
cEFsbCggaHRtbCApOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCggaHRtbCApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAg
ICAgIHdyYXA6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMg
KS53cmFwQWxsKCBodG1sICk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgdW53cmFwOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5w
YXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
alF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pLmVuZCgpOwor
ICAgICAgICB9LAorCisgICAgICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCggZWxlbSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9LAorCisgICAgICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlz
LmZpcnN0Q2hpbGQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZhbHNlLCBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5w
YXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYXJndW1lbnRzLmxlbmd0aCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZXQgPSBqUXVlcnkoYXJndW1lbnRzWzBd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wdXNoLmFwcGx5KCBzZXQsIHRoaXMudG9B
cnJheSgpICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2so
IHNldCwgImJlZm9yZSIsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKworICAgICAgICBhZnRlcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0
aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0
QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNldCA9IHRoaXMucHVzaFN0YWNrKCB0aGlzLCAi
YWZ0ZXIiLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wdXNoLmFw
cGx5KCBzZXQsIGpRdWVyeShhcmd1bWVudHNbMF0pLnRvQXJyYXkoKSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisK
KyAgICAgICAgLy8ga2VlcERhdGEgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LS1kbyBub3QgZG9j
dW1lbnQKKyAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhICkgewor
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSB0aGlzW2ldKSAh
PSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciB8
fCBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgWyBlbGVtIF0gKS5sZW5ndGggKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUg
PT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggWyBlbGVtIF0g
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxl
bSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgIH0sCisKKyAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBp
KysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBh
bmQgcHJldmVudCBtZW1vcnkgbGVha3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBh
bnkgcmVtYWluaW5nIG5vZGVzCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0u
Zmlyc3RDaGlsZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1v
dmVDaGlsZCggZWxlbS5maXJzdENoaWxkICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
IH0sCisKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFu
ZEV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICBkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50
cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOworICAgICAgICAgICAgICAgIGRlZXBE
YXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMg
OiBkZWVwRGF0YUFuZEV2ZW50czsKKworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcCgg
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5jbG9u
ZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbMF0gJiYgdGhpc1swXS5ub2RlVHlwZSA9PT0gMSA/
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbMF0uaW5uZXJIVE1MLnJlcGxh
Y2UocmlubGluZWpRdWVyeSwgIiIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVsbDsKKworICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0
IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBl
b2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9jYWNoZS50ZXN0KCB2YWx1ZSApICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAoalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwg
IXJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCB2YWx1ZSApKSAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgIXdyYXBNYXBbIChydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdKVsxXS50
b0xvd2VyQ2FzZSgpIF0gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFs
dWUucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQg
bWVtb3J5IGxlYWtzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggdGhpc1tpXS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiKiIpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzW2ldLmlubmVySFRNTCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dz
IGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oaSl7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5odG1sKCB2YWx1ZS5jYWxsKHRoaXMs
IGksIHNlbGYuaHRtbCgpKSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eSgp
LmFwcGVuZCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24o
IHZhbHVlICkgeworICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVu
dE5vZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
ZWxlbWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NIGJlZm9yZSB0aGV5IGFyZSBpbnNlcnRl
ZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBjYW4gaGVscCBmaXggcmVwbGFjaW5n
IGEgcGFyZW50IHdpdGggY2hpbGQgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpLCBvbGQgPSBz
ZWxmLmh0bWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnJlcGxhY2VXaXRoKCB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBvbGQgKSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggdmFsdWUgKS5k
ZXRhY2goKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmUoKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5leHQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KG5leHQpLmJlZm9yZSggdmFsdWUg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkocGFyZW50KS5hcHBlbmQoIHZhbHVl
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5sZW5ndGggPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVl
KCkgOiB2YWx1ZSksICJyZXBsYWNlV2l0aCIsIHZhbHVlICkgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAg
ICAgICBkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7CisgICAgICAgIH0sCisKKyAgICAgICAg
ZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdHMsIGZpcnN0LCBmcmFnbWVudCwgcGFyZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
aXB0cyA9IFtdOworCisgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdt
ZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0CisgICAgICAgICAgICAgICAgaWYg
KCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9uZSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAzICYm
IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5kb21NYW5pcCggYXJn
cywgdGFibGUsIGNhbGxiYWNrLCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKHZhbHVlKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9
IGpRdWVyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9
IHZhbHVlLmNhbGwodGhpcywgaSwgdGFibGUgPyBzZWxmLmh0bWwoKSA6IHVuZGVmaW5lZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9tTWFuaXAoIGFyZ3MsIHRhYmxl
LCBjYWxsYmFjayApOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50ID0gdmFsdWUgJiYgdmFsdWUucGFyZW50Tm9kZTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gYSBmcmFnbWVudCwganVzdCB1c2UgdGhhdCBp
bnN0ZWFkIG9mIGJ1aWxkaW5nIGEgbmV3IG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuc3VwcG9ydC5wYXJlbnROb2RlICYmIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUg
PT09IDExICYmIHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gdGhpcy5sZW5ndGggKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB7IGZyYWdtZW50OiBwYXJl
bnQgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBhcmdzLCB0
aGlzLCBzY3JpcHRzICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYWdtZW50ID0gcmVzdWx0cy5mcmFnbWVudDsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmcmFnbWVudCA9IGZyYWdtZW50
LmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmly
c3QgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlID0gdGFibGUgJiYg
alF1ZXJ5Lm5vZGVOYW1lKCBmaXJzdCwgInRyIiApOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoLCBsYXN0SW5kZXggPSBs
IC0gMTsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjay5jYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFibGUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByb290KHRoaXNbaV0sIGZpcnN0KSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbaV0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB3ZSBkbyBub3QgbGVhayBtZW1vcnkgYnkgaW5hZHZlcnRlbnRseSBkaXNjYXJkaW5nCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3Jp
Z2luYWwgZnJhZ21lbnQgKHdoaWNoIG1pZ2h0IGhhdmUgYXR0YWNoZWQgZGF0YSkgaW5zdGVhZCBv
ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNp
bmcgaXQ7IGluIGFkZGl0aW9uLCB1c2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IG9iamVjdCBmb3Ig
dGhlIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGl0ZW0gaW5zdGVhZCBvZiBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAgYmVpbmcgZW1w
dGllZCBpbmNvcnJlY3RseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaW4gY2VydGFpbiBzaXR1YXRpb25zIChCdWcgIzgwNzApLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJhZ21lbnRzIGZyb20g
dGhlIGZyYWdtZW50IGNhY2hlIG11c3QgYWx3YXlzIGJlIGNsb25lZCBhbmQgbmV2ZXIgdXNlZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gcGxh
Y2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRzLmNhY2hlYWJsZSB8fCAobCA+IDEgJiYgaSA8IGxhc3RJbmRleCkgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xvbmUo
IGZyYWdtZW50LCB0cnVlLCB0cnVlICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBzY3JpcHRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmVhY2goIHNjcmlwdHMsIGV2YWxTY3JpcHQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorfSk7CisKK2Z1bmN0aW9uIHJvb3QoIGVsZW0sIGN1ciApIHsKKyAgICAgICAgcmV0
dXJuIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAidGFibGUiKSA/CisgICAgICAgICAgICAgICAgKGVs
ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0gfHwKKyAgICAgICAgICAgICAgICBl
bGVtLmFwcGVuZENoaWxkKGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIp
KSkgOgorICAgICAgICAgICAgICAgIGVsZW07Cit9CisKK2Z1bmN0aW9uIGNsb25lQ29weUV2ZW50
KCBzcmMsIGRlc3QgKSB7CisKKyAgICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFq
UXVlcnkuaGFzRGF0YSggc3JjICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCisgICAgICAg
ICAgICAgICAgb2xkRGF0YSA9IGpRdWVyeS5kYXRhKCBzcmMgKSwKKyAgICAgICAgICAgICAgICBj
dXJEYXRhID0galF1ZXJ5LmRhdGEoIGRlc3QsIG9sZERhdGEgKTsKKworICAgICAgICAvLyBTd2l0
Y2ggdG8gdXNlIHRoZSBpbnRlcm5hbCBkYXRhIG9iamVjdCwgaWYgaXQgZXhpc3RzLCBmb3IgdGhl
IG5leHQKKyAgICAgICAgLy8gc3RhZ2Ugb2YgZGF0YSBjb3B5aW5nCisgICAgICAgIGlmICggKG9s
ZERhdGEgPSBvbGREYXRhWyBpbnRlcm5hbEtleSBdKSApIHsKKyAgICAgICAgICAgICAgICB2YXIg
ZXZlbnRzID0gb2xkRGF0YS5ldmVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1ckRhdGEgPSBjdXJEYXRhWyBpbnRlcm5hbEtleSBdID0galF1ZXJ5LmV4dGVuZCh7fSwgb2xk
RGF0YSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGV2ZW50cyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBjdXJEYXRhLmhhbmRsZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1ckRhdGEuZXZlbnRzID0ge307CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciB0eXBlIGluIGV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQo
IGRlc3QsIHR5cGUgKyAoIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNlID8gIi4iIDogIiIg
KSArIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNlLCBldmVudHNbIHR5cGUgXVsgaSBdLCBl
dmVudHNbIHR5cGUgXVsgaSBdLmRhdGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorfQorCitmdW5jdGlvbiBjbG9uZUZpeEF0dHJpYnV0ZXMoIHNyYywgZGVzdCApIHsKKyAg
ICAgICAgdmFyIG5vZGVOYW1lOworCisgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGRvIGFu
eXRoaW5nIGZvciBub24tRWxlbWVudHMKKyAgICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAx
ICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNs
ZWFyQXR0cmlidXRlcyByZW1vdmVzIHRoZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50
LAorICAgICAgICAvLyBidXQgYWxzbyByZW1vdmVzIHRoZSBhdHRhY2hFdmVudCBldmVudHMsIHdo
aWNoIHdlICpkbyogd2FudAorICAgICAgICBpZiAoIGRlc3QuY2xlYXJBdHRyaWJ1dGVzICkgewor
ICAgICAgICAgICAgICAgIGRlc3QuY2xlYXJBdHRyaWJ1dGVzKCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBtZXJnZUF0dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1lcmdlcyBiYWNrIG9u
IHRoZQorICAgICAgICAvLyBvcmlnaW5hbCBhdHRyaWJ1dGVzLCBub3QgdGhlIGV2ZW50cworICAg
ICAgICBpZiAoIGRlc3QubWVyZ2VBdHRyaWJ1dGVzICkgeworICAgICAgICAgICAgICAgIGRlc3Qu
bWVyZ2VBdHRyaWJ1dGVzKCBzcmMgKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vZGVOYW1lID0g
ZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgIC8vIElFNi04IGZhaWwgdG8g
Y2xvbmUgY2hpbGRyZW4gaW5zaWRlIG9iamVjdCBlbGVtZW50cyB0aGF0IHVzZQorICAgICAgICAv
LyB0aGUgcHJvcHJpZXRhcnkgY2xhc3NpZCBhdHRyaWJ1dGUgdmFsdWUgKHJhdGhlciB0aGFuIHRo
ZSB0eXBlCisgICAgICAgIC8vIGF0dHJpYnV0ZSkgdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgY29u
dGVudCB0byBkaXNwbGF5CisgICAgICAgIGlmICggbm9kZU5hbWUgPT09ICJvYmplY3QiICkgewor
ICAgICAgICAgICAgICAgIGRlc3Qub3V0ZXJIVE1MID0gc3JjLm91dGVySFRNTDsKKworICAgICAg
ICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiAmJiAoc3JjLnR5cGUgPT09ICJjaGVj
a2JveCIgfHwgc3JjLnR5cGUgPT09ICJyYWRpbyIpICkgeworICAgICAgICAgICAgICAgIC8vIElF
Ni04IGZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2ti
b3gKKyAgICAgICAgICAgICAgICAvLyBvciByYWRpbyBidXR0b24uIFdvcnNlLCBJRTYtNyBmYWls
IHRvIGdpdmUgdGhlIGNsb25lZCBlbGVtZW50CisgICAgICAgICAgICAgICAgLy8gYSBjaGVja2Vk
IGFwcGVhcmFuY2UgaWYgdGhlIGRlZmF1bHRDaGVja2VkIHZhbHVlIGlzbid0IGFsc28gc2V0Cisg
ICAgICAgICAgICAgICAgaWYgKCBzcmMuY2hlY2tlZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJRTYtNyBnZXQgY29uZnVzZWQg
YW5kIGVuZCB1cCBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGNsb25lZAorICAgICAgICAgICAgICAg
IC8vIGNoZWNrYm94L3JhZGlvIGJ1dHRvbiB0byBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiAi
b24iCisgICAgICAgICAgICAgICAgaWYgKCBkZXN0LnZhbHVlICE9PSBzcmMudmFsdWUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnZhbHVlID0gc3JjLnZhbHVlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAvLyBJRTYtOCBmYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVk
IG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZAorICAgICAgICAvLyBzdGF0ZSB3aGVuIGNs
b25pbmcgb3B0aW9ucworICAgICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9wdGlvbiIg
KSB7CisgICAgICAgICAgICAgICAgZGVzdC5zZWxlY3RlZCA9IHNyYy5kZWZhdWx0U2VsZWN0ZWQ7
CisKKyAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhl
IGNvcnJlY3QgdmFsdWUgd2hlbgorICAgICAgICAvLyBjbG9uaW5nIG90aGVyIHR5cGVzIG9mIGlu
cHV0IGZpZWxkcworICAgICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBu
b2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKKyAgICAgICAgICAgICAgICBkZXN0LmRlZmF1bHRW
YWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBFdmVudCBk
YXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5kbworICAg
ICAgICAvLyBnZXRzIGNvcGllZCB0b28KKyAgICAgICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIGpR
dWVyeS5leHBhbmRvICk7Cit9CisKK2pRdWVyeS5idWlsZEZyYWdtZW50ID0gZnVuY3Rpb24oIGFy
Z3MsIG5vZGVzLCBzY3JpcHRzICkgeworICAgICAgICB2YXIgZnJhZ21lbnQsIGNhY2hlYWJsZSwg
Y2FjaGVyZXN1bHRzLCBkb2M7CisKKyAgLy8gbm9kZXMgbWF5IGNvbnRhaW4gZWl0aGVyIGFuIGV4
cGxpY2l0IGRvY3VtZW50IG9iamVjdCwKKyAgLy8gYSBqUXVlcnkgY29sbGVjdGlvbiBvciBjb250
ZXh0IG9iamVjdC4KKyAgLy8gSWYgbm9kZXNbMF0gY29udGFpbnMgYSB2YWxpZCBvYmplY3QgdG8g
YXNzaWduIHRvIGRvYworICBpZiAoIG5vZGVzICYmIG5vZGVzWzBdICkgeworICAgIGRvYyA9IG5v
ZGVzWzBdLm93bmVyRG9jdW1lbnQgfHwgbm9kZXNbMF07CisgIH0KKworICAvLyBFbnN1cmUgdGhh
dCBhbiBhdHRyIG9iamVjdCBkb2Vzbid0IGluY29ycmVjdGx5IHN0YW5kIGluIGFzIGEgZG9jdW1l
bnQgb2JqZWN0CisgICAgICAgIC8vIENocm9tZSBhbmQgRmlyZWZveCBzZWVtIHRvIGFsbG93IHRo
aXMgdG8gb2NjdXIgYW5kIHdpbGwgdGhyb3cgZXhjZXB0aW9uCisgICAgICAgIC8vIEZpeGVzICM4
OTUwCisgICAgICAgIGlmICggIWRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ICkgeworICAgICAg
ICAgICAgICAgIGRvYyA9IGRvY3VtZW50OworICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSBj
YWNoZSAic21hbGwiICgxLzIgS0IpIEhUTUwgc3RyaW5ncyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdp
dGggdGhlIG1haW4gZG9jdW1lbnQKKyAgICAgICAgLy8gQ2xvbmluZyBvcHRpb25zIGxvc2VzIHRo
ZSBzZWxlY3RlZCBzdGF0ZSwgc28gZG9uJ3QgY2FjaGUgdGhlbQorICAgICAgICAvLyBJRSA2IGRv
ZXNuJ3QgbGlrZSBpdCB3aGVuIHlvdSBwdXQgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50cyBp
biBhIGZyYWdtZW50CisgICAgICAgIC8vIEFsc28sIFdlYktpdCBkb2VzIG5vdCBjbG9uZSAnY2hl
Y2tlZCcgYXR0cmlidXRlcyBvbiBjbG9uZU5vZGUsIHNvIGRvbid0IGNhY2hlCisgICAgICAgIGlm
ICggYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICJzdHJpbmciICYmIGFy
Z3NbMF0ubGVuZ3RoIDwgNTEyICYmIGRvYyA9PT0gZG9jdW1lbnQgJiYKKyAgICAgICAgICAgICAg
ICBhcmdzWzBdLmNoYXJBdCgwKSA9PT0gIjwiICYmICFybm9jYWNoZS50ZXN0KCBhcmdzWzBdICkg
JiYgKGpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGFyZ3NbMF0g
KSkgKSB7CisKKyAgICAgICAgICAgICAgICBjYWNoZWFibGUgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgY2FjaGVyZXN1bHRzID0galF1ZXJ5LmZyYWdtZW50c1sgYXJnc1swXSBdOworICAgICAg
ICAgICAgICAgIGlmICggY2FjaGVyZXN1bHRzICYmIGNhY2hlcmVzdWx0cyAhPT0gMSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY2FjaGVyZXN1bHRzOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWZyYWdtZW50ICkgeworICAgICAg
ICAgICAgICAgIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAg
ICAgICAgICAgICBqUXVlcnkuY2xlYW4oIGFyZ3MsIGRvYywgZnJhZ21lbnQsIHNjcmlwdHMgKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICggY2FjaGVhYmxlICkgeworICAgICAgICAgICAgICAg
IGpRdWVyeS5mcmFnbWVudHNbIGFyZ3NbMF0gXSA9IGNhY2hlcmVzdWx0cyA/IGZyYWdtZW50IDog
MTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7IGZyYWdtZW50OiBmcmFnbWVudCwgY2Fj
aGVhYmxlOiBjYWNoZWFibGUgfTsKK307CisKK2pRdWVyeS5mcmFnbWVudHMgPSB7fTsKKworalF1
ZXJ5LmVhY2goeworICAgICAgICBhcHBlbmRUbzogImFwcGVuZCIsCisgICAgICAgIHByZXBlbmRU
bzogInByZXBlbmQiLAorICAgICAgICBpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLAorICAgICAgICBp
bnNlcnRBZnRlcjogImFmdGVyIiwKKyAgICAgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgor
fSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgeworICAgICAgICBqUXVlcnkuZm5bIG5hbWUg
XSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmV0ID0gW10s
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksCisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlz
WzBdLnBhcmVudE5vZGU7CisKKyAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCAmJiBwYXJlbnQu
bm9kZVR5cGUgPT09IDExICYmIHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSAmJiBpbnNl
cnQubGVuZ3RoID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0WyBvcmln
aW5hbCBdKCB0aGlzWzBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
KworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDAsIGwgPSBpbnNlcnQubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSAoaSA+IDAgPyB0aGlzLmNsb25lKHRy
dWUpIDogdGhpcykuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eSggaW5zZXJ0W2ldIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IHJldC5jb25jYXQoIGVsZW1zICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFj
ayggcmV0LCBuYW1lLCBpbnNlcnQuc2VsZWN0b3IgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgIH07Cit9KTsKKworZnVuY3Rpb24gZ2V0QWxsKCBlbGVtICkgeworICAgICAgICBpZiAoICJn
ZXRFbGVtZW50c0J5VGFnTmFtZSIgaW4gZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICk7CisKKyAgICAgICAgfSBlbHNlIGlmICgg
InF1ZXJ5U2VsZWN0b3JBbGwiIGluIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW0ucXVlcnlTZWxlY3RvckFsbCggIioiICk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gW107CisgICAgICAgIH0KK30KKworLy8gVXNlZCBpbiBjbGVhbiwgZml4
ZXMgdGhlIGRlZmF1bHRDaGVja2VkIHByb3BlcnR5CitmdW5jdGlvbiBmaXhEZWZhdWx0Q2hlY2tl
ZCggZWxlbSApIHsKKyAgICAgICAgaWYgKCBlbGVtLnR5cGUgPT09ICJjaGVja2JveCIgfHwgZWxl
bS50eXBlID09PSAicmFkaW8iICkgeworICAgICAgICAgICAgICAgIGVsZW0uZGVmYXVsdENoZWNr
ZWQgPSBlbGVtLmNoZWNrZWQ7CisgICAgICAgIH0KK30KKy8vIEZpbmRzIGFsbCBpbnB1dHMgYW5k
IHBhc3NlcyB0aGVtIHRvIGZpeERlZmF1bHRDaGVja2VkCitmdW5jdGlvbiBmaW5kSW5wdXRzKCBl
bGVtICkgeworICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApICkg
eworICAgICAgICAgICAgICAgIGZpeERlZmF1bHRDaGVja2VkKCBlbGVtICk7CisgICAgICAgIH0g
ZWxzZSBpZiAoICJnZXRFbGVtZW50c0J5VGFnTmFtZSIgaW4gZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICBqUXVlcnkuZ3JlcCggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSwgZml4
RGVmYXVsdENoZWNrZWQgKTsKKyAgICAgICAgfQorfQorCitqUXVlcnkuZXh0ZW5kKHsKKyAgICAg
ICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50
cyApIHsKKyAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSh0cnVlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjRWxlbWVudHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaTsKKworICAgICAgICAgICAgICAgIGlmICggKCFqUXVlcnkuc3VwcG9ydC5u
b0Nsb25lRXZlbnQgfHwgIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5v
ZGVUeXBlID09PSAxMSkgJiYgIWpRdWVyeS5pc1hNTERvYyhlbGVtKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElFIGNvcGllcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50IHdo
ZW4gdXNpbmcgY2xvbmVOb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGluZyBk
ZXRhY2hFdmVudCBvbiB0aGUgY2xvbmUgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBvcmlnaW5hbC4gSW4gb3JkZXIgdG8gZ2V0
IGFyb3VuZCB0aGlzLCB3ZSB1c2Ugc29tZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJv
cHJpZXRhcnkgbWV0aG9kcyB0byBjbGVhciB0aGUgZXZlbnRzLiBUaGFua3MgdG8gTW9vVG9vbHMK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGd1eXMgZm9yIHRoaXMgaG90bmVzcy4KKworICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBlbGVtLCBjbG9uZSApOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2luZyBTaXp6bGUgaGVyZSBpcyBjcmF6eSBz
bG93LCBzbyB3ZSB1c2UgZ2V0RWxlbWVudHNCeVRhZ05hbWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0
QWxsKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRB
bGwoIGNsb25lICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlv
biBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0aGUgbGVuZ3RoIHByb3BlcnR5CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFyZSBjbG9uaW5nIHRoZSBi
b2R5IGFuZCBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50cyBv
biB0aGUgcGFnZSBoYXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG5vZGUg
aXMgbm90IG51bGw7IEZpeGVzICM5NTg3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZGVzdEVsZW1lbnRzW2ldICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50
c1tpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ29w
eSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQorICAgICAgICAgICAg
ICAgIGlmICggZGF0YUFuZEV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb25l
Q29weUV2ZW50KCBlbGVtLCBjbG9uZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGRlZXBEYXRhQW5kRXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
cmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIHNyY0Vs
ZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZGVzdEVsZW1lbnRzID0gbnVsbDsKKworICAg
ICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAorICAgICAgICAgICAgICAgIHJl
dHVybiBjbG9uZTsKKyAgICAgICAgfSwKKworICAgICAgICBjbGVhbjogZnVuY3Rpb24oIGVsZW1z
LCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hl
Y2tTY3JpcHRUeXBlOworCisgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9j
dW1lbnQ7CisKKyAgICAgICAgICAgICAgICAvLyAhY29udGV4dC5jcmVhdGVFbGVtZW50IGZhaWxz
IGluIElFIHdpdGggYW4gZXJyb3IgYnV0IHJldHVybnMgdHlwZW9mICdvYmplY3QnCisgICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5jcmVhdGVFbGVtZW50ID09PSAidW5kZWZpbmVk
IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0Lm93bmVyRG9j
dW1lbnQgfHwgY29udGV4dFswXSAmJiBjb250ZXh0WzBdLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1l
bnQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdLCBq
OworCisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGVsZW1z
W2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVv
ZiBlbGVtID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbSArPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENvbnZlcnQgaHRtbCBzdHJpbmcgaW50byBET00gbm9kZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJpbmciICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNvbnRleHQuY3JlYXRl
VGV4dE5vZGUoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXggIlhIVE1M
Ii1zdHlsZSB0YWdzIGluIGFsbCBicm93c2VycworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0gPSBlbGVtLnJlcGxhY2UocnhodG1sVGFnLCAiPCQxPjwvJDI+Iik7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmltIHdoaXRl
c3BhY2UsIG90aGVyd2lzZSBpbmRleE9mIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gKHJ0YWdOYW1lLmV4ZWMo
IGVsZW0gKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3
cmFwTWFwLl9kZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVwdGggPSB3cmFwWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvIHRvIGh0bWwgYW5k
IGJhY2ssIHRoZW4gcGVlbCBvZmYgZXh0cmEgd3JhcHBlcnMKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gd3JhcFsxXSArIGVsZW0gKyB3cmFw
WzJdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0
byB0aGUgcmlnaHQgZGVwdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIGRlcHRoLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXYgPSBkaXYubGFzdENoaWxkOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFJlbW92ZSBJRSdzIGF1dG9pbnNlcnRlZCA8dGJvZHk+IGZyb20gdGFibGUgZnJh
Z21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1
ZXJ5LnN1cHBvcnQudGJvZHkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJp
b3VzIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBoYXNCb2R5ID0gcnRib2R5LnRlc3QoZWxlbSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRib2R5ID0gdGFnID09PSAidGFi
bGUiICYmICFoYXNCb2R5ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuZmlyc3RDaGlsZCAmJiBkaXYuZmlyc3RDaGls
ZC5jaGlsZE5vZGVzIDoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3Ig
PHRmb290PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyYXBbMV0gPT09ICI8dGFibGU+IiAmJiAhaGFzQm9keSA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXYuY2hpbGROb2RlcyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IHRib2R5
Lmxlbmd0aCAtIDE7IGogPj0gMCA7IC0taiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5
WyBqIF0sICJ0Ym9keSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0Ym9keVsgaiBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRib2R5WyBqIF0gKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGNvbXBsZXRlbHkga2lsbHMgbGVhZGluZyB3aGl0
ZXNwYWNlIHdoZW4gaW5uZXJIVE1MIGlzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSAmJiBy
bGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxlbSApICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVh
dGVUZXh0Tm9kZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0
Q2hpbGQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZGl2LmNoaWxkTm9k
ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXRzIGRlZmF1bHRDaGVj
a2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2JveGVzCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhYm91dCB0byBiZSBhcHBlbmRlZCB0byB0aGUgRE9NIGluIElFIDYvNyAoIzgwNjApCisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtWzBdICYmIHR5cGVvZiAobGVuID0gZWxlbS5sZW5ndGgp
ID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBqID0gMDsgaiA8IGxlbjsgaisrICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmluZElucHV0cyggZWxlbVtqXSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaW5kSW5wdXRzKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBlbGVtLm5vZGVUeXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQu
cHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoIGZyYWdtZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tT
Y3JpcHRUeXBlID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhZWxlbS50eXBlIHx8IHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyByZXRbaV07IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzY3JpcHRzICYmIGpRdWVyeS5ub2RlTmFtZSggcmV0W2ldLCAic2NyaXB0IiApICYm
ICghcmV0W2ldLnR5cGUgfHwgcmV0W2ldLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gInRleHQvamF2
YXNjcmlwdCIpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmlwdHMucHVzaCggcmV0W2ldLnBhcmVudE5vZGUgPyByZXRbaV0ucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZCggcmV0W2ldICkgOiByZXRbaV0gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggcmV0W2ldLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGpzVGFncyA9IGpRdWVyeS5ncmVwKCByZXRbaV0uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoICJzY3JpcHQiICksIGNoZWNrU2NyaXB0VHlwZSApOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuc3BsaWNlLmFw
cGx5KCByZXQsIFtpICsgMSwgMF0uY29uY2F0KCBqc1RhZ3MgKSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggcmV0W2ldICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9LAorCisg
ICAgICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkgeworICAgICAgICAgICAgICAgIHZh
ciBkYXRhLCBpZCwgY2FjaGUgPSBqUXVlcnkuY2FjaGUsIGludGVybmFsS2V5ID0galF1ZXJ5LmV4
cGFuZG8sIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvOworCisg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGVsZW1zW2ldKSAh
PSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5h
bWUgJiYgalF1ZXJ5Lm5vRGF0YVtlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBlbGVtWyBqUXVlcnkuZXhw
YW5kbyBdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlkICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gY2FjaGVbIGlkIF0gJiYgY2FjaGVbIGlkIF1b
IGludGVybmFsS2V5IF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBk
YXRhICYmIGRhdGEuZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciB0eXBlIGluIGRhdGEuZXZlbnRzICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2
b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBl
bGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bGwg
dGhlIERPTSByZWZlcmVuY2UgdG8gYXZvaWQgSUU2LzcvOCBsZWFrICgjNzA1NCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuaGFuZGxlICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oYW5kbGUu
ZWxlbSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkZWxldGVFeHBhbmRvICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmli
dXRlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVt
b3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hl
WyBpZCBdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorfSk7CisKK2Z1bmN0aW9uIGV2YWxTY3JpcHQoIGksIGVsZW0gKSB7CisgICAgICAg
IGlmICggZWxlbS5zcmMgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmFqYXgoeworICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0
IgorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGpRdWVyeS5nbG9iYWxFdmFsKCAoIGVsZW0udGV4dCB8fCBlbGVtLnRleHRDb250ZW50IHx8IGVs
ZW0uaW5uZXJIVE1MIHx8ICIiICkucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiLyokMCovIiApICk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgfQor
fQorCisKKworCit2YXIgcmFscGhhID0gL2FscGhhXChbXildKlwpL2ksCisgICAgICAgIHJvcGFj
aXR5ID0gL29wYWNpdHk9KFteKV0qKS8sCisgICAgICAgIC8vIGZpeGVkIGZvciBJRTksIHNlZSAj
ODM0NgorICAgICAgICBydXBwZXIgPSAvKFtBLVpdfF5tcykvZywKKyAgICAgICAgcm51bXB4ID0g
L14tP1xkKyg/OnB4KT8kL2ksCisgICAgICAgIHJudW0gPSAvXi0/XGQvLAorICAgICAgICBycmVs
TnVtID0gL14oW1wtK10pPShbXC0rLlxkZV0rKS8sCisKKyAgICAgICAgY3NzU2hvdyA9IHsgcG9z
aXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2si
IH0sCisgICAgICAgIGNzc1dpZHRoID0gWyAiTGVmdCIsICJSaWdodCIgXSwKKyAgICAgICAgY3Nz
SGVpZ2h0ID0gWyAiVG9wIiwgIkJvdHRvbSIgXSwKKyAgICAgICAgY3VyQ1NTLAorCisgICAgICAg
IGdldENvbXB1dGVkU3R5bGUsCisgICAgICAgIGN1cnJlbnRTdHlsZTsKKworalF1ZXJ5LmZuLmNz
cyA9IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgLy8gU2V0dGluZyAndW5kZWZp
bmVkJyBpcyBhIG5vLW9wCisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB2
YWx1ZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIG5hbWUsIHZhbHVl
LCB0cnVlLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgfSk7Cit9OworCitqUXVlcnkuZXh0
ZW5kKHsKKyAgICAgICAgLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlk
aW5nIHRoZSBkZWZhdWx0CisgICAgICAgIC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRp
bmcgYSBzdHlsZSBwcm9wZXJ0eQorICAgICAgICBjc3NIb29rczogeworICAgICAgICAgICAgICAg
IG9wYWNpdHk6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0s
IGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1
dGVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNp
dHkiLCAib3BhY2l0eSIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlbGVtLnN0eWxlLm9wYWNpdHk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisKKyAgICAgICAgLy8gRXhjbHVkZSB0aGUgZm9sbG93aW5nIGNzcyBwcm9wZXJ0
aWVzIHRvIGFkZCBweAorICAgICAgICBjc3NOdW1iZXI6IHsKKyAgICAgICAgICAgICAgICAiZmls
bE9wYWNpdHkiOiB0cnVlLAorICAgICAgICAgICAgICAgICJmb250V2VpZ2h0IjogdHJ1ZSwKKyAg
ICAgICAgICAgICAgICAibGluZUhlaWdodCI6IHRydWUsCisgICAgICAgICAgICAgICAgIm9wYWNp
dHkiOiB0cnVlLAorICAgICAgICAgICAgICAgICJvcnBoYW5zIjogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICAid2lkb3dzIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAiekluZGV4IjogdHJ1ZSwKKyAg
ICAgICAgICAgICAgICAiem9vbSI6IHRydWUKKyAgICAgICAgfSwKKworICAgICAgICAvLyBBZGQg
aW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCisgICAgICAg
IC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWUKKyAgICAgICAgY3NzUHJvcHM6IHsKKyAg
ICAgICAgICAgICAgICAvLyBub3JtYWxpemUgZmxvYXQgY3NzIHByb3BlcnR5CisgICAgICAgICAg
ICAgICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxvYXQgPyAiY3NzRmxvYXQiIDogInN0
eWxlRmxvYXQiCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxl
IHByb3BlcnR5IG9uIGEgRE9NIE5vZGUKKyAgICAgICAgc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBu
YW1lLCB2YWx1ZSwgZXh0cmEgKSB7CisgICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHN0eWxl
cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCisgICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8
fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5
bGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRo
IHRoZSByaWdodCBuYW1lCisgICAgICAgICAgICAgICAgdmFyIHJldCwgdHlwZSwgb3JpZ05hbWUg
PSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZSA9IGVsZW0uc3R5bGUsIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOworCisg
ICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCBvcmln
TmFtZTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1
ZQorICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09KSB0byBy
ZWxhdGl2ZSBudW1iZXJzLiAjNzM0NQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBl
ID09PSAic3RyaW5nIiAmJiAocmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoICsoIHJldFsxXSArIDEpICogK3Jl
dFsyXSApICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAjOTIzNworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gIm51bWJlciI7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IE5hTiBh
bmQgbnVsbCB2YWx1ZXMgYXJlbid0IHNldC4gU2VlOiAjNzExNgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB2YWx1ZSA9PSBudWxsIHx8IHR5cGUgPT09ICJudW1iZXIiICYmIGlzTmFOKCB2
YWx1ZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEg
bnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWlu
IENTUyBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAi
bnVtYmVyIiAmJiAhalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gInB4IjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRl
ZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVl
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tz
KSB8fCAodmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlICkpICE9PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdyYXBwZWQgdG8gcHJldmVudCBJ
RSBmcm9tIHRocm93aW5nIGVycm9ycyB3aGVuICdpbnZhbGlkJyB2YWx1ZXMgYXJlIHByb3ZpZGVk
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAjNTUwOQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0
aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29r
cyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3
aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKworICAgICAgICBjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSApIHsK
KyAgICAgICAgICAgICAgICB2YXIgcmV0LCBob29rczsKKworICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAgICAg
ICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisgICAgICAgICAgICAgICAg
aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKKyAgICAgICAgICAgICAgICBuYW1lID0g
alF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgbmFtZTsKKworICAgICAgICAgICAgICAgIC8vIGNz
c0Zsb2F0IG5lZWRzIGEgc3BlY2lhbCB0cmVhdG1lbnQKKyAgICAgICAgICAgICAgICBpZiAoIG5h
bWUgPT09ICJjc3NGbG9hdCIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImZs
b2F0IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGhvb2sg
d2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQorICAgICAgICAg
ICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCgg
ZWxlbSwgdHJ1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGlmIGEg
d2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAorICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGN1ckNTUyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjdXJDU1MoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0s
CisKKyAgICAgICAgLy8gQSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBpbmcgaW4vb3V0IENTUyBw
cm9wZXJ0aWVzIHRvIGdldCBjb3JyZWN0IGNhbGN1bGF0aW9ucworICAgICAgICBzd2FwOiBmdW5j
dGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgdmFyIG9s
ZCA9IHt9OworCisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFu
ZCBpbnNlcnQgdGhlIG5ldyBvbmVzCisgICAgICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4g
b3B0aW9ucyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5z
dHlsZVsgbmFtZSBdOworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBd
ID0gb3B0aW9uc1sgbmFtZSBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNhbGxiYWNrLmNhbGwoIGVsZW0gKTsKKworICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUg
b2xkIHZhbHVlcworICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfSk7CisKKy8vIERFUFJFQ0FURUQsIFVzZSBq
UXVlcnkuY3NzKCkgaW5zdGVhZAoralF1ZXJ5LmN1ckNTUyA9IGpRdWVyeS5jc3M7CisKK2pRdWVy
eS5lYWNoKFsiaGVpZ2h0IiwgIndpZHRoIl0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgICAg
ICBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKKyAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ub2Zmc2V0V2lkdGggIT09IDAg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFdI
KCBlbGVtLCBuYW1lLCBleHRyYSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5z
d2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGdldFdIKCBlbGVtLCBuYW1lLCBleHRyYSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJudW1weC50ZXN0KCB2YWx1ZSApICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbmVnYXRpdmUgd2lkdGggYW5k
IGhlaWdodCB2YWx1ZXMgIzE1OTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBwYXJzZUZsb2F0KCB2YWx1ZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdmFsdWUgPj0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUgKyAicHgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07Cit9KTsKKworaWYgKCAhalF1ZXJ5LnN1
cHBvcnQub3BhY2l0eSApIHsKKyAgICAgICAgalF1ZXJ5LmNzc0hvb2tzLm9wYWNpdHkgPSB7Cisg
ICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJRSB1c2VzIGZpbHRlcnMgZm9yIG9wYWNpdHkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByb3BhY2l0eS50ZXN0KCAoY29tcHV0ZWQgJiYgZWxlbS5j
dXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0ZXIgOiBlbGVtLnN0eWxlLmZpbHRl
cikgfHwgIiIgKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcGFyc2VGbG9h
dCggUmVnRXhwLiQxICkgLyAxMDAgKSArICIiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcHV0ZWQgPyAiMSIgOiAiIjsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgc3R5bGUgPSBlbGVtLnN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BhY2l0eSA9IGpRdWVyeS5pc05hTiggdmFsdWUgKSA/ICIiIDog
ImFscGhhKG9wYWNpdHk9IiArIHZhbHVlICogMTAwICsgIikiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWx0ZXIgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLmZpbHRl
ciB8fCBzdHlsZS5maWx0ZXIgfHwgIiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElF
IGhhcyB0cm91YmxlIHdpdGggb3BhY2l0eSBpZiBpdCBkb2VzIG5vdCBoYXZlIGxheW91dAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgaXQgYnkgc2V0dGluZyB0aGUgem9vbSBsZXZl
bAorICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuem9vbSA9IDE7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGlmIHNldHRpbmcgb3BhY2l0eSB0byAxLCBhbmQgbm8gb3RoZXIgZmls
dGVycyBleGlzdCAtIGF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBhdHRyaWJ1dGUgIzY2NTIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPj0gMSAmJiBqUXVlcnkudHJpbSggZmls
dGVyLnJlcGxhY2UoIHJhbHBoYSwgIiIgKSApID09PSAiIiApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIHN0eWxlLmZpbHRlciB0byBudWxsLCAiIiAmICIg
IiBzdGlsbCBsZWF2ZSAiZmlsdGVyOiIgaW4gdGhlIGNzc1RleHQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaWYgImZpbHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5
cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gYXZvaWQgdGhpcworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUgaXMgSUUgT25seSwgYnV0IHNv
IGFwcGFyZW50bHkgaXMgdGhpcyBjb2RlIHBhdGguLi4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCAiZmlsdGVyIiApOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHRoZXJlIGlzIG5vIGZpbHRlciBzdHls
ZSBhcHBsaWVkIGluIGEgY3NzIHJ1bGUsIHdlIGFyZSBkb25lCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHNldCBuZXcgZmlsdGVyIHZh
bHVlcworICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuZmlsdGVyID0gcmFscGhhLnRlc3Qo
IGZpbHRlciApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnJlcGxh
Y2UoIHJhbHBoYSwgb3BhY2l0eSApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsdGVyICsgIiAiICsgb3BhY2l0eTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07Cit9
CisKK2pRdWVyeShmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gVGhpcyBob29rIGNhbm5vdCBiZSBh
ZGRlZCB1bnRpbCBET00gcmVhZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0CisgICAgICAgIC8v
IGZvciBpdCBpcyBub3QgcnVuIHVudGlsIGFmdGVyIERPTSByZWFkeQorICAgICAgICBpZiAoICFq
UXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgeworICAgICAgICAgICAgICAgIGpR
dWVyeS5jc3NIb29rcy5tYXJnaW5SaWdodCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdl
dDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdy
b25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV29yayBhcm91bmQgYnkgdGVtcG9yYXJpbHkgc2V0dGluZyBlbGVtZW50IGRpc3BsYXkg
dG8gaW5saW5lLWJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zd2FwKCBlbGVtLCB7ICJk
aXNwbGF5IjogImlubGluZS1ibG9jayIgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGN1ckNTUyggZWxlbSwgIm1h
cmdpbi1yaWdodCIsICJtYXJnaW5SaWdodCIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gZWxlbS5zdHlsZS5tYXJnaW5SaWdodDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0K
K30pOworCitpZiAoIGRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3
LmdldENvbXB1dGVkU3R5bGUgKSB7CisgICAgICAgIGdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlv
biggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmV0LCBkZWZhdWx0Vmlldywg
Y29tcHV0ZWRTdHlsZTsKKworICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoIHJ1
cHBlciwgIi0kMSIgKS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKCAhKGRl
ZmF1bHRWaWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKCAoY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUoIGVsZW0sIG51bGwgKSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQg
PSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcmV0ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVy
RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBlbGVtICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJl
dHVybiByZXQ7CisgICAgICAgIH07Cit9CisKK2lmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
LmN1cnJlbnRTdHlsZSApIHsKKyAgICAgICAgY3VycmVudFN0eWxlID0gZnVuY3Rpb24oIGVsZW0s
IG5hbWUgKSB7CisgICAgICAgICAgICAgICAgdmFyIGxlZnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJlbnRTdHlsZVsgbmFtZSBd
LAorICAgICAgICAgICAgICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYg
ZWxlbS5ydW50aW1lU3R5bGVbIG5hbWUgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
ID0gZWxlbS5zdHlsZTsKKworICAgICAgICAgICAgICAgIC8vIEZyb20gdGhlIGF3ZXNvbWUgaGFj
ayBieSBEZWFuIEVkd2FyZHMKKyAgICAgICAgICAgICAgICAvLyBodHRwOi8vZXJpay5lYWUubmV0
L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCisKKyAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBwaXhlbCBudW1i
ZXIKKyAgICAgICAgICAgICAgICAvLyBidXQgYSBudW1iZXIgdGhhdCBoYXMgYSB3ZWlyZCBlbmRp
bmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKKyAgICAgICAgICAgICAgICBpZiAo
ICFybnVtcHgudGVzdCggcmV0ICkgJiYgcm51bS50ZXN0KCByZXQgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnQgPSBzdHlsZS5sZWZ0OworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJzTGVmdCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVudFN0eWxl
LmxlZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS5sZWZ0ID0gbmFtZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogKHJldCB8fCAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHN0eWxlLnBpeGVsTGVmdCArICJweCI7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0OworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCByc0xlZnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0ucnVudGltZVN0eWxlLmxlZnQgPSByc0xlZnQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0g
IiIgPyAiYXV0byIgOiByZXQ7CisgICAgICAgIH07Cit9CisKK2N1ckNTUyA9IGdldENvbXB1dGVk
U3R5bGUgfHwgY3VycmVudFN0eWxlOworCitmdW5jdGlvbiBnZXRXSCggZWxlbSwgbmFtZSwgZXh0
cmEgKSB7CisKKyAgICAgICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHkKKyAgICAgICAg
dmFyIHZhbCA9IG5hbWUgPT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZz
ZXRIZWlnaHQsCisgICAgICAgICAgICAgICAgd2hpY2ggPSBuYW1lID09PSAid2lkdGgiID8gY3Nz
V2lkdGggOiBjc3NIZWlnaHQ7CisKKyAgICAgICAgaWYgKCB2YWwgPiAwICkgeworICAgICAgICAg
ICAgICAgIGlmICggZXh0cmEgIT09ICJib3JkZXIiICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmVhY2goIHdoaWNoLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhZXh0cmEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5n
IiArIHRoaXMgKSApIHx8IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gIm1hcmdpbiIgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxv
YXQoIGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgdGhpcyApICkgfHwgMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWwgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgImJvcmRl
ciIgKyB0aGlzICsgIldpZHRoIiApICkgfHwgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbCArICJweCI7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3Nh
cnkKKyAgICAgICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBuYW1lICk7CisgICAgICAgIGlm
ICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICB2YWwgPSBlbGVt
LnN0eWxlWyBuYW1lIF0gfHwgMDsKKyAgICAgICAgfQorICAgICAgICAvLyBOb3JtYWxpemUgIiIs
IGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQorICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KCB2
YWwgKSB8fCAwOworCisgICAgICAgIC8vIEFkZCBwYWRkaW5nLCBib3JkZXIsIG1hcmdpbgorICAg
ICAgICBpZiAoIGV4dHJhICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCB3aGljaCwg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCgg
alF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgdGhpcyApICkgfHwgMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJi
b3JkZXIiICsgdGhpcyArICJXaWR0aCIgKSApIHx8IDA7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGpRdWVy
eS5jc3MoIGVsZW0sIGV4dHJhICsgdGhpcyApICkgfHwgMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB2
YWwgKyAicHgiOworfQorCitpZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHByLmZpbHRlcnMg
KSB7CisgICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZWxlbS5vZmZzZXRXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGVsZW0ub2Zmc2V0SGVpZ2h0OworCisgICAgICAg
ICAgICAgICAgcmV0dXJuICh3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09IDApIHx8ICghalF1ZXJ5
LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzICYmIChlbGVtLnN0eWxlLmRpc3BsYXkgfHwg
alF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkpID09PSAibm9uZSIpOworICAgICAgICB9Owor
CisgICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkg
eworICAgICAgICAgICAgICAgIHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVs
ZW0gKTsKKyAgICAgICAgfTsKK30KKworCisKKwordmFyIHIyMCA9IC8lMjAvZywKKyAgICAgICAg
cmJyYWNrZXQgPSAvXFtcXSQvLAorICAgICAgICByQ1JMRiA9IC9ccj9cbi9nLAorICAgICAgICBy
aGFzaCA9IC8jLiokLywKKyAgICAgICAgcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5d
Kilccj8kL21nLCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hhcmFjdGVyIGF0IEVPTAorICAgICAgICBy
aW5wdXQgPSAvXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlk
ZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8
d2VlaykkL2ksCisgICAgICAgIC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29s
IGRldGVjdGlvbgorICAgICAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcFwt
c3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCisgICAgICAgIHJub0Nv
bnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAorICAgICAgICBycHJvdG9jb2wgPSAvXlwvXC8vLAor
ICAgICAgICBycXVlcnkgPSAvXD8vLAorICAgICAgICByc2NyaXB0ID0gLzxzY3JpcHRcYltePF0q
KD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksCisgICAgICAgIHJzZWxlY3RU
ZXh0YXJlYSA9IC9eKD86c2VsZWN0fHRleHRhcmVhKS9pLAorICAgICAgICByc3BhY2VzQWpheCA9
IC9ccysvLAorICAgICAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCisgICAgICAgIHJ1cmwgPSAv
XihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspKT8pPy8sCisKKyAgICAg
ICAgLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZAorICAgICAgICBfbG9hZCA9
IGpRdWVyeS5mbi5sb2FkLAorCisgICAgICAgIC8qIFByZWZpbHRlcnMKKyAgICAgICAgICogMSkg
VGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9q
c29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKKyAgICAgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoK
KyAgICAgICAgICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydAorICAgICAgICAg
KiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBz
LnByb2Nlc3NEYXRhIGlzIHRydWUpCisgICAgICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUK
KyAgICAgICAgICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAg
ICAgICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5k
IFRIRU4gY29udGludWUgZG93biB0byAiKiIgaWYgbmVlZGVkCisgICAgICAgICAqLworICAgICAg
ICBwcmVmaWx0ZXJzID0ge30sCisKKyAgICAgICAgLyogVHJhbnNwb3J0cyBiaW5kaW5ncworICAg
ICAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAgICAgICAqIDIpIHRoZSBjYXRjaGFs
bCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCisgICAgICAgICAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0
YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQK
KyAgICAgICAgICovCisgICAgICAgIHRyYW5zcG9ydHMgPSB7fSwKKworICAgICAgICAvLyBEb2N1
bWVudCBsb2NhdGlvbgorICAgICAgICBhamF4TG9jYXRpb24sCisKKyAgICAgICAgLy8gRG9jdW1l
bnQgbG9jYXRpb24gc2VnbWVudHMKKyAgICAgICAgYWpheExvY1BhcnRzLAorICAgICAgICAKKyAg
ICAgICAgLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVz
dCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uCisgICAgICAgIGFsbFR5cGVzID0g
WyIqLyJdICsgWyIqIl07CisKKy8vICM4MTM4LCBJRSBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uIHdo
ZW4gYWNjZXNzaW5nCisvLyBhIGZpZWxkIGZyb20gd2luZG93LmxvY2F0aW9uIGlmIGRvY3VtZW50
LmRvbWFpbiBoYXMgYmVlbiBzZXQKK3RyeSB7CisgICAgICAgIGFqYXhMb2NhdGlvbiA9IGxvY2F0
aW9uLmhyZWY7Cit9IGNhdGNoKCBlICkgeworICAgICAgICAvLyBVc2UgdGhlIGhyZWYgYXR0cmli
dXRlIG9mIGFuIEEgZWxlbWVudAorICAgICAgICAvLyBzaW5jZSBJRSB3aWxsIG1vZGlmeSBpdCBn
aXZlbiBkb2N1bWVudC5sb2NhdGlvbgorICAgICAgICBhamF4TG9jYXRpb24gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCAiYSIgKTsKKyAgICAgICAgYWpheExvY2F0aW9uLmhyZWYgPSAiIjsKKyAg
ICAgICAgYWpheExvY2F0aW9uID0gYWpheExvY2F0aW9uLmhyZWY7Cit9CisKKy8vIFNlZ21lbnQg
bG9jYXRpb24gaW50byBwYXJ0cworYWpheExvY1BhcnRzID0gcnVybC5leGVjKCBhamF4TG9jYXRp
b24udG9Mb3dlckNhc2UoKSApIHx8IFtdOworCisvLyBCYXNlICJjb25zdHJ1Y3RvciIgZm9yIGpR
dWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydAorZnVuY3Rpb24gYWRk
VG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7CisKKyAgICAgICAgLy8gZGF0
YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKKyAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YVR5cGVzID0gZGF0YVR5cGVFeHBy
ZXNzaW9uLnRvTG93ZXJDYXNlKCkuc3BsaXQoIHJzcGFjZXNBamF4ICksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZW5ndGggPSBkYXRhVHlwZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VCZWZvcmU7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Np
b24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcig7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkgXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY29udHJvbCBpZiB3ZSdyZSBh
c2tlZCB0byBhZGQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
eSBleGlzdGluZyBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNl
QmVmb3JlID0gL15cKy8udGVzdCggZGF0YVR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBwbGFjZUJlZm9yZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlLnN1YnN0ciggMSApIHx8ICIqIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaXN0ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlw
ZSBdIHx8IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFk
ZCB0byB0aGUgc3RydWN0dXJlIGFjY29yZGluZ2x5CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RbIHBsYWNlQmVmb3JlID8gInVuc2hpZnQiIDogInB1c2giIF0oIGZ1bmMgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07
Cit9CisKKy8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJh
bnNwb3J0cworZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVy
ZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwKKyAgICAgICAgICAgICAgICBkYXRh
VHlwZSAvKiBpbnRlcm5hbCAqLywgaW5zcGVjdGVkIC8qIGludGVybmFsICovICkgeworCisgICAg
ICAgIGRhdGFUeXBlID0gZGF0YVR5cGUgfHwgb3B0aW9ucy5kYXRhVHlwZXNbIDAgXTsKKyAgICAg
ICAgaW5zcGVjdGVkID0gaW5zcGVjdGVkIHx8IHt9OworCisgICAgICAgIGluc3BlY3RlZFsgZGF0
YVR5cGUgXSA9IHRydWU7CisKKyAgICAgICAgdmFyIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBl
IF0sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gbGlz
dCA/IGxpc3QubGVuZ3RoIDogMCwKKyAgICAgICAgICAgICAgICBleGVjdXRlT25seSA9ICggc3Ry
dWN0dXJlID09PSBwcmVmaWx0ZXJzICksCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uOworCisg
ICAgICAgIGZvcig7IGkgPCBsZW5ndGggJiYgKCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICk7
IGkrKyApIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBsaXN0WyBpIF0oIG9wdGlvbnMs
IG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnb3Qg
cmVkaXJlY3RlZCB0byBhbm90aGVyIGRhdGFUeXBlCisgICAgICAgICAgICAgICAgLy8gd2UgdHJ5
IHRoZXJlIGlmIGV4ZWN1dGluZyBvbmx5IGFuZCBub3QgZG9uZSBhbHJlYWR5CisgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0aW9uID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWV4ZWN1dGVPbmx5IHx8IGluc3BlY3RlZFsgc2VsZWN0aW9uIF0g
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIHNlbGVjdGlvbiApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmlsdGVy
c09yVHJhbnNwb3J0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwgc2VsZWN0
aW9uLCBpbnNwZWN0ZWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UncmUgb25seSBleGVjdXRpbmcgb3Ig
bm90aGluZyB3YXMgc2VsZWN0ZWQKKyAgICAgICAgLy8gd2UgdHJ5IHRoZSBjYXRjaGFsbCBkYXRh
VHlwZSBpZiBub3QgZG9uZSBhbHJlYWR5CisgICAgICAgIGlmICggKCBleGVjdXRlT25seSB8fCAh
c2VsZWN0aW9uICkgJiYgIWluc3BlY3RlZFsgIioiIF0gKSB7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhI
UiwgIioiLCBpbnNwZWN0ZWQgKTsKKyAgICAgICAgfQorICAgICAgICAvLyB1bm5lY2Vzc2FyeSB3
aGVuIG9ubHkgZXhlY3V0aW5nIChwcmVmaWx0ZXJzKQorICAgICAgICAvLyBidXQgaXQnbGwgYmUg
aWdub3JlZCBieSB0aGUgY2FsbGVyIGluIHRoYXQgY2FzZQorICAgICAgICByZXR1cm4gc2VsZWN0
aW9uOworfQorCisvLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnMKKy8vIHRoYXQg
dGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQorLy8gRml4ZXMg
Izk4ODcKK2Z1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkgeworICAgICAgICB2YXIg
a2V5LCBkZWVwLAorICAgICAgICAgICAgICAgIGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0
aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTsKKyAgICAgICAgZm9yKCBrZXkgaW4gc3JjICkgeworICAg
ICAgICAgICAgICAgIGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwg
KCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBkZWVwICkgeworICAgICAgICAgICAgICAgIGpRdWVy
eS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApOworICAgICAgICB9Cit9CisKK2pRdWVyeS5m
bi5leHRlbmQoeworICAgICAgICBsb2FkOiBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNr
ICkgeworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYgX2xv
YWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMs
IGFyZ3VtZW50cyApOworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gYSByZXF1ZXN0IGlm
IG5vIGVsZW1lbnRzIGFyZSBiZWluZyByZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCAhdGhpcy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgb2ZmID0gdXJsLmlu
ZGV4T2YoICIgIiApOworICAgICAgICAgICAgICAgIGlmICggb2ZmID49IDAgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSB1cmwuc2xpY2UoIG9mZiwgdXJsLmxlbmd0
aCApOworICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGEgR0VU
IHJlcXVlc3QKKyAgICAgICAgICAgICAgICB2YXIgdHlwZSA9ICJHRVQiOworCisgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkCisgICAgICAgICAg
ICAgICAgaWYgKCBwYXJhbXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdz
IGEgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIHBhcmFtcyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBh
c3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayA9IHBhcmFtczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndp
c2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zID0galF1ZXJ5LnBhcmFtKCBwYXJhbXMsIGpRdWVyeS5hamF4U2V0
dGluZ3MudHJhZGl0aW9uYWwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9ICJQT1NUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICAv
LyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKKyAgICAgICAgICAgICAgICBqUXVlcnkuYWph
eCh7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogImh0
bWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyYW1zLAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ29tcGxldGUgY2FsbGJhY2sgKHJlc3BvbnNlVGV4dCBpcyB1c2VkIGlu
dGVybmFsbHkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oIGpx
WEhSLCBzdGF0dXMsIHJlc3BvbnNlVGV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gU3RvcmUgdGhlIHJlc3BvbnNlIGFzIHNwZWNpZmllZCBieSB0aGUganFYSFIgb2Jq
ZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCA9IGpxWEhS
LnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc3Vj
Y2Vzc2Z1bCwgaW5qZWN0IHRoZSBIVE1MIGludG8gYWxsIHRoZSBtYXRjaGVkIGVsZW1lbnRzCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgganFYSFIuaXNSZXNvbHZlZCgpICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICM0ODI1OiBHZXQg
dGhlIGFjdHVhbCByZXNwb25zZSBpbiBjYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYSBkYXRhRmlsdGVyIGlzIHByZXNlbnQgaW4gYWpheFNldHRpbmdzCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuZG9uZShmdW5jdGlv
biggciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3BvbnNlVGV4dCA9IHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlm
IGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgPworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgZGl2IHRvIGhvbGQgdGhl
IHJlc3VsdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeSgiPGRpdj4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBp
biwgcmVtb3ZpbmcgdGhlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgYW55ICdQZXJtaXNzaW9uIERlbmll
ZCcgZXJyb3JzIGluIElFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5hcHBlbmQocmVzcG9uc2VUZXh0LnJlcGxhY2UocnNjcmlwdCwgIiIp
KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIExvY2F0ZSB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHNlbGVjdG9yKSA6CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5v
dCwganVzdCBpbmplY3QgdGhlIGZ1bGwgcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVRleHQgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5lYWNoKCBjYWxsYmFjaywgWyByZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfSwKKworICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOworICAgICAg
ICB9LAorCisgICAgICAgIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggdGhpcy5lbGVtZW50cyAp
IDogdGhpczsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVu
Y3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgJiYgIXRo
aXMuZGlzYWJsZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB0aGlzLmNo
ZWNrZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUgKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbnB1dC50ZXN0KCB0aGlzLnR5cGUg
KSApOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbigg
aSwgZWxlbSApeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGpRdWVyeSggdGhp
cyApLnZhbCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09IG51bGwg
PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzQXJyYXkoIHZhbCApID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWws
IGkgKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4i
ICkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZh
bHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07CisgICAgICAgICAgICAgICAgfSku
Z2V0KCk7CisgICAgICAgIH0KK30pOworCisvLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMg
Zm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cworalF1ZXJ5LmVhY2goICJhamF4U3RhcnQg
YWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3Bs
aXQoICIgIiApLCBmdW5jdGlvbiggaSwgbyApeworICAgICAgICBqUXVlcnkuZm5bIG8gXSA9IGZ1
bmN0aW9uKCBmICl7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmluZCggbywgZiApOwor
ICAgICAgICB9OworfSk7CisKK2pRdWVyeS5lYWNoKCBbICJnZXQiLCAicG9zdCIgXSwgZnVuY3Rp
b24oIGksIG1ldGhvZCApIHsKKyAgICAgICAgalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1
cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgeworICAgICAgICAgICAgICAgIC8vIHNoaWZ0IGFy
Z3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCisgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWpheCh7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBtZXRob2QsCisgICAgICAgICAgICAgICAgICAg
ICAgICB1cmw6IHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFUeXBlOiB0eXBlCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH07Cit9
KTsKKworalF1ZXJ5LmV4dGVuZCh7CisKKyAgICAgICAgZ2V0U2NyaXB0OiBmdW5jdGlvbiggdXJs
LCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1
bmRlZmluZWQsIGNhbGxiYWNrLCAic2NyaXB0IiApOworICAgICAgICB9LAorCisgICAgICAgIGdl
dEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCAianNvbiIgKTsKKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVj
dCBpbnRvIHRhcmdldAorICAgICAgICAvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0
aW5ncyBmaWVsZHMuCisgICAgICAgIC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50
byBhamF4U2V0dGluZ3MuCisgICAgICAgIGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0
dGluZ3MgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzZXR0aW5ncyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0CisgICAgICAgICAgICAg
ICAgICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5k
aW5nIGFqYXhTZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSB0YXJn
ZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBqUXVlcnkuYWpheFNldHRpbmdz
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQs
IHNldHRpbmdzICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgfSwK
KworICAgICAgICBhamF4U2V0dGluZ3M6IHsKKyAgICAgICAgICAgICAgICB1cmw6IGFqYXhMb2Nh
dGlvbiwKKyAgICAgICAgICAgICAgICBpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBhamF4
TG9jUGFydHNbIDEgXSApLAorICAgICAgICAgICAgICAgIGdsb2JhbDogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogImFwcGxp
Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsCisgICAgICAgICAgICAgICAgcHJvY2Vzc0Rh
dGE6IHRydWUsCisgICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsCisgICAgICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgICAgICB0aW1lb3V0OiAwLAorICAgICAgICAgICAgICAgIGRhdGE6IG51
bGwsCisgICAgICAgICAgICAgICAgZGF0YVR5cGU6IG51bGwsCisgICAgICAgICAgICAgICAgdXNl
cm5hbWU6IG51bGwsCisgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IG51bGwsCisgICAgICAgICAg
ICAgICAgY2FjaGU6IG51bGwsCisgICAgICAgICAgICAgICAgdHJhZGl0aW9uYWw6IGZhbHNlLAor
ICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LAorICAgICAgICAgICAgICAgICovCisKKyAgICAg
ICAgICAgICAgICBhY2NlcHRzOiB7CisgICAgICAgICAgICAgICAgICAgICAgICB4bWw6ICJhcHBs
aWNhdGlvbi94bWwsIHRleHQveG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6ICJ0
ZXh0L2h0bWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAor
ICAgICAgICAgICAgICAgICAgICAgICAganNvbjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2
YXNjcmlwdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiKiI6IGFsbFR5cGVzCisgICAgICAg
ICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB4bWw6IC94bWwvLAorICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogL2h0
bWwvLAorICAgICAgICAgICAgICAgICAgICAgICAganNvbjogL2pzb24vCisgICAgICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgICAgIHJlc3BvbnNlRmllbGRzOiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhNTCIsCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0OiAicmVzcG9uc2VUZXh0IgorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAg
ICAvLyBMaXN0IG9mIGRhdGEgY29udmVydGVycworICAgICAgICAgICAgICAgIC8vIDEpIGtleSBm
b3JtYXQgaXMgInNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBp
bi1iZXR3ZWVuKQorICAgICAgICAgICAgICAgIC8vIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioi
IGNhbiBiZSB1c2VkIGZvciBzb3VyY2VfdHlwZQorICAgICAgICAgICAgICAgIGNvbnZlcnRlcnM6
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0
CisgICAgICAgICAgICAgICAgICAgICAgICAiKiB0ZXh0Ijogd2luZG93LlN0cmluZywKKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3Jt
YXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAidGV4dCBodG1sIjogdHJ1ZSwKKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lv
bgorICAgICAgICAgICAgICAgICAgICAgICAgInRleHQganNvbiI6IGpRdWVyeS5wYXJzZUpTT04s
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRleHQgYXMgeG1sCisgICAgICAg
ICAgICAgICAgICAgICAgICAidGV4dCB4bWwiOiBqUXVlcnkucGFyc2VYTUwKKyAgICAgICAgICAg
ICAgICB9LAorCisgICAgICAgICAgICAgICAgLy8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3Qg
YmUgZGVlcCBleHRlbmRlZDoKKyAgICAgICAgICAgICAgICAvLyB5b3UgY2FuIGFkZCB5b3VyIG93
biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmCisgICAgICAgICAgICAgICAgLy8gYW5kIHdoZW4geW91
IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKKyAgICAgICAgICAgICAgICAvLyBkZWVwIGV4
dGVuZGVkIChzZWUgYWpheEV4dGVuZCkKKyAgICAgICAgICAgICAgICBmbGF0T3B0aW9uczogewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHVybDogdHJ1ZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAg
ICBhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMg
KSwKKyAgICAgICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0
cmFuc3BvcnRzICksCisKKyAgICAgICAgLy8gTWFpbiBtZXRob2QKKyAgICAgICAgYWpheDogZnVu
Y3Rpb24oIHVybCwgb3B0aW9ucyApIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHVybCBpcyBh
biBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlCisgICAgICAgICAgICAgICAgaWYg
KCB0eXBlb2YgdXJsID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMgPSB1cmw7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1bmRlZmluZWQ7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRm9yY2Ugb3B0aW9ucyB0byBi
ZSBhbiBvYmplY3QKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKwor
ICAgICAgICAgICAgICAgIHZhciAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMg
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrcyBjb250ZXh0CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3MgdGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2FzIHBy
b3ZpZGVkIGluIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaWYg
aXQncyBhIERPTSBub2RlIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dCA9IGNhbGxiYWNrQ29udGV4dCAhPT0gcyAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8
fCBjYWxsYmFja0NvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgKSA/CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCAp
IDogalF1ZXJ5LmV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmZXJyZWRzCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tz
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9
LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZNb2RpZmllZCBrZXkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmTW9kaWZpZWRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBI
ZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdEhlYWRlcnMgPSB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RI
ZWFkZXJzTmFtZXMgPSB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3BvbnNlIGhl
YWRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRyYW5zcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZW91dCBoYW5kbGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVvdXRUaW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyb3Nz
LWRvbWFpbiBkZXRlY3Rpb24gdmFycworICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUganFYSFIgc3RhdGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvIGtub3cg
aWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZAorICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyZUdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHZhcmlh
YmxlCisgICAgICAgICAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRmFrZSB4aHIKKyAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSID0geworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5U3RhdGU6IDAsCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXRlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxu
YW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSBy
ZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFs
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFJhdyBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWxsUmVz
cG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBu
dWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0
aW9uKCBrZXkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG1hdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3Rh
dGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHt9OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRj
aFsgMiBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoID09PSB1bmRlZmluZWQgPyBudWxsIDogbWF0Y2g7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24o
IHR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
c3RhdGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzLm1pbWVUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gc3RhdHVzVGV4dCB8
fCAiYWJvcnQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dHJhbnNwb3J0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhbnNwb3J0LmFib3J0KCBzdGF0dXNUZXh0ICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvbmUoIDAsIHN0YXR1c1RleHQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIENh
bGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQorICAgICAgICAgICAgICAgIC8vIEl0
IGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFy
ZWQKKyAgICAgICAgICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiAod2hpY2gg
d291bGQgYmUgbW9yZSBsb2dpY2FsIGFuZCByZWFkYWJsZSkKKyAgICAgICAgICAgICAgICBmdW5j
dGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU3RhdGUgaXMgImRvbmUiIG5vdworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aW1l
b3V0IGlmIGl0IGV4aXN0cworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aW1lb3V0VGlt
ZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCggdGlt
ZW91dFRpbWVyICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xs
ZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRo
ZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJh
bnNwb3J0ID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSBy
ZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNT
dHJpbmcgPSBoZWFkZXJzIHx8ICIiOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQg
cmVhZHlTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IHN0
YXR1cyA+IDAgPyA0IDogMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzU3VjY2Vz
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlcyA/IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMs
IGpxWEhSLCByZXNwb25zZXMgKSA6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdE1vZGlmaWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
dGFnOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUg
dHlwZSBjaGFpbmluZworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPj0gMjAw
ICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNCApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1O
b25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBsYXN0TW9kaWZpZWQgPSBqcVhIUi5nZXRS
ZXNwb25zZUhlYWRlciggIkxhc3QtTW9kaWZpZWQiICkgKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9k
aWZpZWRLZXkgXSA9IGxhc3RNb2RpZmllZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAoIGV0YWcgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkV0YWciICkgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBp
Zk1vZGlmaWVkS2V5IF0gPSBldGFnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBtb2RpZmllZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA9PT0gMzA0ICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdWNjZXNzID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGRhdGEKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNl
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
dXNUZXh0ID0gInN1Y2Nlc3MiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNTdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBwYXJzZXJlcnJvcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJwYXJzZXJl
cnJvciI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvciA9IGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHRyYWN0IGVy
cm9yIGZyb20gc3RhdHVzVGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aGVuIG5vcm1hbGl6ZSBzdGF0dXNUZXh0IGFuZCBzdGF0dXMgZm9yIG5vbi1hYm9ydHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBzdGF0dXNUZXh0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiggIXN0YXR1c1RleHQgfHwgc3RhdHVzICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAiZXJyb3Ii
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwg
MCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIg
b2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXMgPSBzdGF0dXM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXNUZXh0ID0gIiIgKyAoIG5hdGl2ZVN0
YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
dWNjZXNzL0Vycm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNh
bGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1Rl
eHQsIGVycm9yIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNj
ZXNzIiA6ICJFcnJvciIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENv
bXBsZXRlCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkLnJlc29sdmVX
aXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIs
IFsganFYSFIsIHMgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5k
bGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdG9wIiApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQXR0YWNoIGRlZmVycmVk
cworICAgICAgICAgICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7CisgICAgICAgICAg
ICAgICAganFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7CisgICAgICAgICAgICAgICAganFYSFIu
ZXJyb3IgPSBqcVhIUi5mYWlsOworICAgICAgICAgICAgICAgIGpxWEhSLmNvbXBsZXRlID0gY29t
cGxldGVEZWZlcnJlZC5kb25lOworCisgICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVu
dCBjYWxsYmFja3MKKyAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlID0gZnVuY3Rpb24o
IG1hcCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWFwICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHN0YXRlIDwgMiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IoIHRtcCBpbiBtYXAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlWyB0bXAgXSA9IFsgc3RhdHVzQ29kZVt0
bXBdLCBtYXBbdG1wXSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBtYXBbIGpxWEhSLnN0YXR1cyBdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnRoZW4oIHRtcCwg
dG1wICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgaGFzaCBjaGFyYWN0ZXIg
KCM3NTMxOiBhbmQgc3RyaW5nIHByb21vdGlvbikKKyAgICAgICAgICAgICAgICAvLyBBZGQgcHJv
dG9jb2wgaWYgbm90IHByb3ZpZGVkICgjNTg2NjogSUU3IGlzc3VlIHdpdGggcHJvdG9jb2wtbGVz
cyB1cmxzKQorICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVy
IGlmIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIHMudXJsID0gKCAoIHVybCB8fCBzLnVybCAp
ICsgIiIgKS5yZXBsYWNlKCByaGFzaCwgIiIgKS5yZXBsYWNlKCBycHJvdG9jb2wsIGFqYXhMb2NQ
YXJ0c1sgMSBdICsgIi8vIiApOworCisgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRhVHlw
ZXMgbGlzdAorICAgICAgICAgICAgICAgIHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0
YVR5cGUgfHwgIioiICkudG9Mb3dlckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKTsKKworICAg
ICAgICAgICAgICAgIC8vIERldGVybWluZSBpZiBhIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGlu
IG9yZGVyCisgICAgICAgICAgICAgICAgaWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJ1cmwuZXhlYyggcy51cmwudG9Mb3dlckNh
c2UoKSApOworICAgICAgICAgICAgICAgICAgICAgICAgcy5jcm9zc0RvbWFpbiA9ICEhKCBwYXJ0
cyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAxIF0gIT0gYWph
eExvY1BhcnRzWyAxIF0gfHwgcGFydHNbIDIgXSAhPSBhamF4TG9jUGFydHNbIDIgXSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcGFydHNbIDMgXSB8fCAoIHBh
cnRzWyAxIF0gPT09ICJodHRwOiIgPyA4MCA6IDQ0MyApICkgIT0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggYWpheExvY1BhcnRzWyAzIF0gfHwgKCBh
amF4TG9jUGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSApCisgICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZworICAgICAgICAgICAgICAgIGlm
ICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0
YSwgcy50cmFkaXRpb25hbCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIEFwcGx5IHByZWZpbHRlcnMKKyAgICAgICAgICAgICAgICBpbnNwZWN0UHJlZmlsdGVyc09y
VHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTsKKworICAgICAgICAg
ICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsZXIsIHN0b3Ag
dGhlcmUKKyAgICAgICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRv
CisgICAgICAgICAgICAgICAgZmlyZUdsb2JhbHMgPSBzLmdsb2JhbDsKKworICAgICAgICAgICAg
ICAgIC8vIFVwcGVyY2FzZSB0aGUgdHlwZQorICAgICAgICAgICAgICAgIHMudHlwZSA9IHMudHlw
ZS50b1VwcGVyQ2FzZSgpOworCisgICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHJlcXVl
c3QgaGFzIGNvbnRlbnQKKyAgICAgICAgICAgICAgICBzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVu
dC50ZXN0KCBzLnR5cGUgKTsKKworICAgICAgICAgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBz
ZXQgb2YgcmVxdWVzdHMKKyAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVy
eS5hY3RpdmUrKyA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC50cmlnZ2VyKCAiYWpheFN0YXJ0IiApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250
ZW50CisgICAgICAgICAgICAgICAgaWYgKCAhcy5oYXNDb250ZW50ICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJs
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuZGF0YSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6
ICI/IiApICsgcy5kYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjOTY4
MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLmRhdGE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBpZk1v
ZGlmaWVkS2V5IGJlZm9yZSBhZGRpbmcgdGhlIGFudGktY2FjaGUgcGFyYW1ldGVyCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5ID0gcy51cmw7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBpZiBuZWVkZWQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHRzID0galF1ZXJ5Lm5vdygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSByZXBsYWNpbmcgXz0gaWYgaXQgaXMgdGhl
cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzLnVybC5y
ZXBsYWNlKCBydHMsICIkMV89IiArIHRzICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaWYgbm90aGluZyB3YXMgcmVwbGFjZWQsIGFkZCB0aW1lc3RhbXAgdG8gdGhlIGVu
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnVybCA9IHJldCArICggKHJldCA9
PT0gcy51cmwgKSA/ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArICJfPSIg
KyB0cyA6ICIiICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBp
cyBiZWluZyBzZW50CisgICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50
ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiQ29udGVudC1U
eXBlIiwgcy5jb250ZW50VHlwZSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVh
ZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCisgICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9k
aWZpZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5ID0gaWZNb2Rp
ZmllZEtleSB8fCBzLnVybDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lmxh
c3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVl
cnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmV0YWdbIGlmTW9kaWZp
ZWRLZXkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVx
dWVzdEhlYWRlciggIklmLU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBd
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVw
ZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQorICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RI
ZWFkZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBd
ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hY2NlcHRzWyBzLmRhdGFUeXBl
c1swXSBdICsgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxsVHlwZXMgKyAi
OyBxPTAuMDEiIDogIiIgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWNj
ZXB0c1sgIioiIF0KKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgZm9yIGhlYWRlcnMgb3B0aW9uCisgICAgICAgICAgICAgICAgZm9yICggaSBpbiBzLmhlYWRl
cnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBp
LCBzLmhlYWRlcnNbIGkgXSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnQKKyAgICAg
ICAgICAgICAgICBpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxs
YmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVh
ZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuYWJvcnQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRz
CisgICAgICAgICAgICAgICAgZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21w
bGV0ZTogMSB9ICkgeworICAgICAgICAgICAgICAgICAgICAgICAganFYSFJbIGkgXSggc1sgaSBd
ICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gR2V0IHRyYW5zcG9y
dAorICAgICAgICAgICAgICAgIHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3Bv
cnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOworCisgICAgICAgICAgICAgICAg
Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CisgICAgICAgICAgICAgICAgaWYgKCAh
dHJhbnNwb3J0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSggLTEsICJObyBUcmFu
c3BvcnQiICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGpxWEhSLnJlYWR5U3RhdGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2Vu
ZCBnbG9iYWwgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50
cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVvdXQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLmFib3J0KCAi
dGltZW91dCIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcy50aW1lb3V0
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJz
LCBkb25lICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3Ig
aWYgbm90IGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8
IDIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSggLTEs
IGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHJldGhyb3cg
b3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBlICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVu
dHMgb3IgYSBzZXQgb2YKKyAgICAgICAgLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5n
CisgICAgICAgIHBhcmFtOiBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHMgPSBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCA9IGZ1bmN0aW9u
KCBrZXksIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB2
YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFs
dWUgKSA/IHZhbHVlKCkgOiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKyBlbmNvZGVV
UklDb21wb25lbnQoIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgLy8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMu
MiBiZWhhdmlvci4KKyAgICAgICAgICAgICAgICBpZiAoIHRyYWRpdGlvbmFsID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4
U2V0dGluZ3MudHJhZGl0aW9uYWw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJy
YXkgb2YgZm9ybSBlbGVtZW50cy4KKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5
KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCisg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAi
b2xkIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXIKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHByZWZpeCBpbiBhICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJh
ZGl0aW9uYWwsIGFkZCApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6
YXRpb24KKyAgICAgICAgICAgICAgICByZXR1cm4gcy5qb2luKCAiJiIgKS5yZXBsYWNlKCByMjAs
ICIrIiApOworICAgICAgICB9Cit9KTsKKworZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwg
b2JqLCB0cmFkaXRpb25hbCwgYWRkICkgeworICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBv
YmogKSApIHsKKyAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KKyAgICAg
ICAgICAgICAgICBqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJy
YXkgaXRlbSBhcyBhIHNjYWxhci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRk
KCBwcmVmaXgsIHYgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXJyYXkgaXRlbSBpcyBub24tc2NhbGFy
IChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1
aXR5IGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHJhY2sgKGFzIG9mIDEuMC4wKSBjYW4ndCBjdXJyZW50bHkgZGVzZXJpYWxpemUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVzdGVkIGFycmF5cyBwcm9wZXJseSwgYW5kIGF0
dGVtcHRpbmcgdG8gZG8gc28gbWF5IGNhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGEgc2VydmVyIGVycm9yLiBQb3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sn
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNlcmlhbGl6YXRpb24gYWxn
b3JpdGhtIG9yIHRvIHByb3ZpZGUgYW4gb3B0aW9uIG9yIGZsYWcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdG8gZm9yY2UgYXJyYXkgc2VyaWFsaXphdGlvbiB0byBiZSBzaGFs
bG93LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4
ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgfHwgalF1ZXJ5LmlzQXJyYXkodikgPyBp
IDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIH0gZWxzZSBpZiAoICF0cmFk
aXRpb25hbCAmJiBvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiApIHsKKyAg
ICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uCisgICAgICAgICAgICAgICAg
Zm9yICggdmFyIG5hbWUgaW4gb2JqICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQ
YXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25h
bCwgYWRkICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gU2VyaWFsaXplIHNjYWxhciBpdGVtLgorICAgICAgICAgICAgICAgIGFkZCgg
cHJlZml4LCBvYmogKTsKKyAgICAgICAgfQorfQorCisvLyBUaGlzIGlzIHN0aWxsIG9uIHRoZSBq
UXVlcnkgb2JqZWN0Li4uIGZvciBub3cKKy8vIFdhbnQgdG8gbW92ZSB0aGlzIHRvIGpRdWVyeS5h
amF4IHNvbWUgZGF5CitqUXVlcnkuZXh0ZW5kKHsKKworICAgICAgICAvLyBDb3VudGVyIGZvciBo
b2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXMKKyAgICAgICAgYWN0aXZlOiAwLAor
CisgICAgICAgIC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3QK
KyAgICAgICAgbGFzdE1vZGlmaWVkOiB7fSwKKyAgICAgICAgZXRhZzoge30KKworfSk7CisKKy8q
IEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDoKKyAqIC0gc2V0cyBhbGwgcmVz
cG9uc2VYWFggZmllbGRzIGFjY29yZGluZ2x5CisgKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlw
ZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQor
ICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCisgKi8KK2Z1bmN0aW9uIGFq
YXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7CisKKyAgICAgICAgdmFy
IGNvbnRlbnRzID0gcy5jb250ZW50cywKKyAgICAgICAgICAgICAgICBkYXRhVHlwZXMgPSBzLmRh
dGFUeXBlcywKKyAgICAgICAgICAgICAgICByZXNwb25zZUZpZWxkcyA9IHMucmVzcG9uc2VGaWVs
ZHMsCisgICAgICAgICAgICAgICAgY3QsCisgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAg
ICAgICAgICBmaW5hbERhdGFUeXBlLAorICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGU7CisK
KyAgICAgICAgLy8gRmlsbCByZXNwb25zZVhYWCBmaWVsZHMKKyAgICAgICAgZm9yKCB0eXBlIGlu
IHJlc3BvbnNlRmllbGRzICkgeworICAgICAgICAgICAgICAgIGlmICggdHlwZSBpbiByZXNwb25z
ZXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUlsgcmVzcG9uc2VGaWVsZHNbdHlw
ZV0gXSA9IHJlc3BvbnNlc1sgdHlwZSBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGlu
IHRoZSBwcm9jZXNzCisgICAgICAgIHdoaWxlKCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgewor
ICAgICAgICAgICAgICAgIGRhdGFUeXBlcy5zaGlmdCgpOworICAgICAgICAgICAgICAgIGlmICgg
Y3QgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0ID0gcy5taW1l
VHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggImNvbnRlbnQtdHlwZSIgKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkZWFs
aW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKKyAgICAgICAgaWYgKCBjdCApIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3Qg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQo
IHR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVk
IGRhdGFUeXBlCisgICAgICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgewor
ICAgICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCisg
ICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAi
ICIgKyBkYXRhVHlwZXNbMF0gXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmluYWxEYXRhVHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhZmlyc3REYXRhVHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zmlyc3REYXRhVHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZQorICAg
ICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5
cGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCisgICAg
ICAgIC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCisgICAgICAg
IC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAgICAgICAgaWYgKCBm
aW5hbERhdGFUeXBlICkgeworICAgICAgICAgICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0g
ZGF0YVR5cGVzWyAwIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZXMudW5z
aGlmdCggZmluYWxEYXRhVHlwZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07CisgICAgICAgIH0KK30KKworLy8g
Q2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNw
b25zZQorZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlICkgeworCisgICAgICAgIC8v
IEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisgICAgICAgIGlmICggcy5kYXRhRmls
dGVyICkgeworICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25z
ZSwgcy5kYXRhVHlwZSApOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRhdGFUeXBlcyA9IHMu
ZGF0YVR5cGVzLAorICAgICAgICAgICAgICAgIGNvbnZlcnRlcnMgPSB7fSwKKyAgICAgICAgICAg
ICAgICBpLAorICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBk
YXRhVHlwZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgIHRtcCwKKyAgICAgICAgICAgICAgICAv
LyBDdXJyZW50IGFuZCBwcmV2aW91cyBkYXRhVHlwZXMKKyAgICAgICAgICAgICAgICBjdXJyZW50
ID0gZGF0YVR5cGVzWyAwIF0sCisgICAgICAgICAgICAgICAgcHJldiwKKyAgICAgICAgICAgICAg
ICAvLyBDb252ZXJzaW9uIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICBjb252ZXJzaW9uLAor
ICAgICAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBj
b252LAorICAgICAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZnVuY3Rpb25zICh0cmFuc2l0aXZl
IGNvbnZlcnNpb24pCisgICAgICAgICAgICAgICAgY29udjEsCisgICAgICAgICAgICAgICAgY29u
djI7CisKKyAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGNoYWluCisgICAgICAg
IGZvciggaSA9IDE7IGkgPCBsZW5ndGg7IGkrKyApIHsKKworICAgICAgICAgICAgICAgIC8vIENy
ZWF0ZSBjb252ZXJ0ZXJzIG1hcAorICAgICAgICAgICAgICAgIC8vIHdpdGggbG93ZXJjYXNlZCBr
ZXlzCisgICAgICAgICAgICAgICAgaWYgKCBpID09PSAxICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yKCBrZXkgaW4gcy5jb252ZXJ0ZXJzICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiggdHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyc1sga2V5LnRvTG93ZXJDYXNlKCkg
XSA9IHMuY29udmVydGVyc1sga2V5IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIGRhdGFUeXBlcworICAgICAgICAgICAgICAgIHByZXYgPSBj
dXJyZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBkYXRhVHlwZXNbIGkgXTsKKworICAg
ICAgICAgICAgICAgIC8vIElmIGN1cnJlbnQgaXMgYXV0byBkYXRhVHlwZSwgdXBkYXRlIGl0IHRv
IHByZXYKKyAgICAgICAgICAgICAgICBpZiggY3VycmVudCA9PT0gIioiICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudCA9IHByZXY7CisgICAgICAgICAgICAgICAgLy8gSWYgbm8g
YXV0byBhbmQgZGF0YVR5cGVzIGFyZSBhY3R1YWxseSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBwcmV2ICE9PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjb252ZXJ0ZXIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnZlcnNpb24gPSBwcmV2ICsgIiAiICsgY3VycmVudDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252ZXJzaW9uIF0gfHwgY29udmVydGVy
c1sgIiogIiArIGN1cnJlbnQgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
cmUgaXMgbm8gZGlyZWN0IGNvbnZlcnRlciwgc2VhcmNoIHRyYW5zaXRpdmVseQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhY29udiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udjIgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciggY29udjEgaW4gY29udmVydGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0bXAgPSBjb252MS5zcGxpdCggIiAiICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBbIDAgXSA9PT0gcHJldiB8fCB0bXBbIDAg
XSA9PT0gIioiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udjIgPSBjb252ZXJ0ZXJzWyB0bXBbMV0gKyAiICIgKyBjdXJyZW50IF07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYyICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb252MSA9IGNvbnZlcnRlcnNbIGNvbnYxIF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udjEgPT09IHRydWUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udiA9IGNvbnYyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb252MiA9PT0gdHJ1ZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb252ID0gY29udjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCBubyBjb252
ZXJ0ZXIsIGRpc3BhdGNoIGFuIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEo
IGNvbnYgfHwgY29udjIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmVycm9yKCAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBjb252ZXJzaW9uLnJlcGxhY2UoIiAi
LCIgdG8gIikgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIGZvdW5kIGNvbnZlcnRlciBpcyBub3QgYW4gZXF1aXZhbGVuY2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB3aXRoIDEgb3IgMiBjb252ZXJ0ZXJzIGFjY29y
ZGluZ2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29udiA/
IGNvbnYoIHJlc3BvbnNlICkgOiBjb252MiggY29udjEocmVzcG9uc2UpICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiByZXNwb25zZTsKK30KKworCisKKwordmFyIGpzYyA9IGpRdWVyeS5ub3coKSwKKyAgICAg
ICAganNyZSA9IC8oXD0pXD8oJnwkKXxcP1w/L2k7CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGlu
Z3MKK2pRdWVyeS5hamF4U2V0dXAoeworICAgICAgICBqc29ucDogImNhbGxiYWNrIiwKKyAgICAg
ICAganNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS5leHBhbmRvICsgIl8iICsgKCBqc2MrKyApOworICAgICAgICB9Cit9KTsKKworLy8gRGV0
ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJl
cXVlc3RzCitqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywg
b3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7CisKKyAgICAgICAgdmFyIGluc3BlY3REYXRhID0g
cy5jb250ZW50VHlwZSA9PT0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIgJiYK
KyAgICAgICAgICAgICAgICAoIHR5cGVvZiBzLmRhdGEgPT09ICJzdHJpbmciICk7CisKKyAgICAg
ICAgaWYgKCBzLmRhdGFUeXBlc1sgMCBdID09PSAianNvbnAiIHx8CisgICAgICAgICAgICAgICAg
cy5qc29ucCAhPT0gZmFsc2UgJiYgKCBqc3JlLnRlc3QoIHMudXJsICkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdERhdGEgJiYganNyZS50ZXN0KCBzLmRhdGEgKSAp
ICkgeworCisgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlQ29udGFpbmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAganNvbnBDYWxsYmFjayA9IHMuanNvbnBDYWxsYmFjayA9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJh
Y2sgKSA/IHMuanNvbnBDYWxsYmFjaygpIDogcy5qc29ucENhbGxiYWNrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXMgPSB3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVybCA9IHMudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSA9IHMuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgPSAiJDEiICsganNv
bnBDYWxsYmFjayArICIkMiI7CisKKyAgICAgICAgICAgICAgICBpZiAoIHMuanNvbnAgIT09IGZh
bHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoIGpzcmUs
IHJlcGxhY2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy51cmwgPT09IHVybCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnNwZWN0RGF0YSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5yZXBs
YWNlKCBqc3JlLCByZXBsYWNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgPT09IGRhdGEgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGNhbGxiYWNr
IG1hbnVhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9
ICgvXD8vLnRlc3QoIHVybCApID8gIiYiIDogIj8iKSArIHMuanNvbnAgKyAiPSIgKyBqc29ucENh
bGxiYWNrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcy51cmwg
PSB1cmw7CisgICAgICAgICAgICAgICAgcy5kYXRhID0gZGF0YTsKKworICAgICAgICAgICAgICAg
IC8vIEluc3RhbGwgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICB3aW5kb3dbIGpzb25wQ2FsbGJh
Y2sgXSA9IGZ1bmN0aW9uKCByZXNwb25zZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlQ29udGFpbmVyID0gWyByZXNwb25zZSBdOworICAgICAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgICAgICAvLyBDbGVhbi11cCBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGpxWEhS
LmFsd2F5cyhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBjYWxs
YmFjayBiYWNrIHRvIHByZXZpb3VzIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICB3aW5k
b3dbIGpzb25wQ2FsbGJhY2sgXSA9IHByZXZpb3VzOworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1
bmN0aW9uKCBwcmV2aW91cyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAg
ICAgLy8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4
ZWN1dGlvbgorICAgICAgICAgICAgICAgIHMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VDb250YWlu
ZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvcigganNv
bnBDYWxsYmFjayArICIgd2FzIG5vdCBjYWxsZWQiICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAg
XTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgLy8gZm9yY2UganNvbiBk
YXRhVHlwZQorICAgICAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CisKKyAg
ICAgICAgICAgICAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKKyAgICAgICAgICAgICAgICByZXR1
cm4gInNjcmlwdCI7CisgICAgICAgIH0KK30pOworCisKKworCisvLyBJbnN0YWxsIHNjcmlwdCBk
YXRhVHlwZQoralF1ZXJ5LmFqYXhTZXR1cCh7CisgICAgICAgIGFjY2VwdHM6IHsKKyAgICAgICAg
ICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQs
IGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKKyAgICAg
ICAgfSwKKyAgICAgICAgY29udGVudHM6IHsKKyAgICAgICAgICAgICAgICBzY3JpcHQ6IC9qYXZh
c2NyaXB0fGVjbWFzY3JpcHQvCisgICAgICAgIH0sCisgICAgICAgIGNvbnZlcnRlcnM6IHsKKyAg
ICAgICAgICAgICAgICAidGV4dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30p
OworCisvLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGdsb2JhbAoralF1ZXJ5LmFq
YXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKKyAgICAgICAgaWYgKCBzLmNh
Y2hlID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcy5jYWNoZSA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgICAgICAg
ICBzLnR5cGUgPSAiR0VUIjsKKyAgICAgICAgICAgICAgICBzLmdsb2JhbCA9IGZhbHNlOworICAg
ICAgICB9Cit9KTsKKworLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0CitqUXVlcnku
YWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKHMpIHsKKworICAgICAgICAvLyBUaGlz
IHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIHJlcXVlc3RzCisgICAgICAg
IGlmICggcy5jcm9zc0RvbWFpbiApIHsKKworICAgICAgICAgICAgICAgIHZhciBzY3JpcHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSggImhlYWQiIClbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgeworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzY3JpcHQiICk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gImFzeW5j
IjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuc2NyaXB0Q2hhcnNl
dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuY2hh
cnNldCA9IHMuc2NyaXB0Q2hhcnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzLnVybDsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRhY2ggaGFuZGxlcnMgZm9y
IGFsbCBicm93c2VycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25s
b2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkg
eworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Fib3J0
IHx8ICFzY3JpcHQucmVhZHlTdGF0ZSB8fCAvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KCBzY3JpcHQu
cmVhZHlTdGF0ZSApICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgbWVtb3J5IGxlYWsgaW4gSUUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25y
ZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGVhZCAmJiBzY3JpcHQucGFyZW50
Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCA9IHVuZGVm
aW5lZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2FsbGJhY2sgaWYgbm90IGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayggMjAwLCAic3VjY2Vz
cyIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiBhcHBlbmRDaGlsZCAgdG8gY2lyY3VtdmVudCBh
biBJRTYgYnVnLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFyaXNl
cyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5IGFuZCAjNDM3OCkuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIGhlYWQuZmly
c3RDaGlsZCApOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAg
ICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHNjcmlwdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JpcHQub25sb2FkKCAwLCAxICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAg
ICAgICB9Cit9KTsKKworCisKKwordmFyIC8vICM1MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxs
IGtlZXAgY29ubmVjdGlvbnMgYWxpdmUgaWYgd2UgZG9uJ3QgYWJvcnQgb24gdW5sb2FkCisgICAg
ICAgIHhock9uVW5sb2FkQWJvcnQgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIC8vIEFib3J0IGFsbCBwZW5kaW5nIHJlcXVlc3RzCisgICAgICAg
ICAgICAgICAgZm9yICggdmFyIGtleSBpbiB4aHJDYWxsYmFja3MgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB4aHJDYWxsYmFja3NbIGtleSBdKCAwLCAxICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICB9IDogZmFsc2UsCisgICAgICAgIHhocklkID0gMCwKKyAgICAgICAgeGhyQ2Fs
bGJhY2tzOworCisvLyBGdW5jdGlvbnMgdG8gY3JlYXRlIHhocnMKK2Z1bmN0aW9uIGNyZWF0ZVN0
YW5kYXJkWEhSKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
d2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgIH0gY2F0Y2goIGUgKSB7fQorfQorCitm
dW5jdGlvbiBjcmVhdGVBY3RpdmVYSFIoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiAp
OworICAgICAgICB9IGNhdGNoKCBlICkge30KK30KKworLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9i
amVjdAorLy8gKFRoaXMgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYWpheFNldHRpbmdzIGZvciBiYWNr
d2FyZCBjb21wYXRpYmlsaXR5KQoralF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSB3aW5kb3cuQWN0
aXZlWE9iamVjdCA/CisgICAgICAgIC8qIE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVybHkKKyAg
ICAgICAgICogaW1wbGVtZW50IHRoZSBYTUxIdHRwUmVxdWVzdCBpbiBJRTcgKGNhbid0IHJlcXVl
c3QgbG9jYWwgZmlsZXMpLAorICAgICAgICAgKiBzbyB3ZSB1c2UgdGhlIEFjdGl2ZVhPYmplY3Qg
d2hlbiBpdCBpcyBhdmFpbGFibGUKKyAgICAgICAgICogQWRkaXRpb25hbGx5IFhNTEh0dHBSZXF1
ZXN0IGNhbiBiZSBkaXNhYmxlZCBpbiBJRTcvSUU4IHNvCisgICAgICAgICAqIHdlIG5lZWQgYSBm
YWxsYmFjay4KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiAhdGhpcy5pc0xvY2FsICYmIGNyZWF0ZVN0YW5kYXJkWEhSKCkgfHwgY3JlYXRl
QWN0aXZlWEhSKCk7CisgICAgICAgIH0gOgorICAgICAgICAvLyBGb3IgYWxsIG90aGVyIGJyb3dz
ZXJzLCB1c2UgdGhlIHN0YW5kYXJkIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAorICAgICAgICBjcmVh
dGVTdGFuZGFyZFhIUjsKKworLy8gRGV0ZXJtaW5lIHN1cHBvcnQgcHJvcGVydGllcworKGZ1bmN0
aW9uKCB4aHIgKSB7CisgICAgICAgIGpRdWVyeS5leHRlbmQoIGpRdWVyeS5zdXBwb3J0LCB7Cisg
ICAgICAgICAgICAgICAgYWpheDogISF4aHIsCisgICAgICAgICAgICAgICAgY29yczogISF4aHIg
JiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHIgKQorICAgICAgICB9KTsKK30pKCBqUXVlcnku
YWpheFNldHRpbmdzLnhocigpICk7CisKKy8vIENyZWF0ZSB0cmFuc3BvcnQgaWYgdGhlIGJyb3dz
ZXIgY2FuIHByb3ZpZGUgYW4geGhyCitpZiAoIGpRdWVyeS5zdXBwb3J0LmFqYXggKSB7CisKKyAg
ICAgICAgalF1ZXJ5LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oIHMgKSB7CisgICAgICAgICAgICAg
ICAgLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxI
dHRwUmVxdWVzdAorICAgICAgICAgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1ZXJ5
LnN1cHBvcnQuY29ycyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNr
OworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgeGhyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IHMueGhyKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlbiB0aGUgc29ja2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzc2luZyBudWxs
IHVzZXJuYW1lLCBnZW5lcmF0ZXMgYSBsb2dpbiBwb3B1cCBvbiBPcGVyYSAoIzI4NjUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnVzZXJuYW1lICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4o
IHMudHlwZSwgcy51cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlwZSwgcy51
cmwsIHMuYXN5bmMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSBjdXN0
b20gZmllbGRzIGlmIHByb3ZpZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzLnhockZpZWxkcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gcy54aHJGaWVsZHMgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoclsgaSBdID0g
cy54aHJGaWVsZHNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdmVycmlkZSBtaW1l
IHR5cGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUo
IHMubWltZVR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYLVJlcXVlc3Rl
ZC1XaXRoIGhlYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHBy
ZWZsaWdodCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
a2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJl
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChpdCBjYW4gYWx3
YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVw
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBzYW1lLWRv
bWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXMuY3Jvc3NEb21h
aW4gJiYgIWhlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgiXSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRo
IiBdID0gIlhNTEh0dHBSZXF1ZXN0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBO
ZWVkIGFuIGV4dHJhIHRyeS9jYXRjaCBmb3IgY3Jvc3MgZG9tYWluIHJlcXVlc3RzIGluIEZpcmVm
b3ggMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpIGluIGhl
YWRlcnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBfICkge30KKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgdGhlIHJlcXVlc3QKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSByYWlzZSBh
biBleGNlcHRpb24gd2hpY2ggaXMgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBoYW5kbGVkIGluIGpRdWVyeS5hamF4IChzbyBubyB0cnkvY2F0Y2gg
aGVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCgg
KCBzLmhhc0NvbnRlbnQgJiYgcy5kYXRhICkgfHwgbnVsbCApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlzdGVuZXIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Rh
dHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXNUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRo
cm93cyBleGNlcHRpb25zIHdoZW4gYWNjZXNzaW5nIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGFuIHhociB3aGVuIGEgbmV0
d29yayBlcnJvciBvY2N1cmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBodHRwOi8vaGVscGZ1bC5rbm9icy1kaWFscy5jb20vaW5kZXgucGhwL0Nv
bXBvbmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4ODAwNDAxMTFfKE5TX0VSUk9SX05PVF9B
VkFJTEFCTEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQgb3IgY29tcGxldGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjYWxsYmFjayAmJiAoIGlzQWJvcnQgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgY2FsbGVkIG9uY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHVuZGVmaW5l
ZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIERvIG5vdCBrZWVwIGFzIGFjdGl2ZSBhbnltb3JlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBoYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1
ZXJ5Lm5vb3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB4aHJDYWxsYmFja3NbIGhhbmRsZSBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gYWJvcnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGlzQWJvcnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYm9ydCBpdCBtYW51YWxseSBp
ZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhoci5hYm9ydCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzcG9uc2VzID0ge307CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgPSB4aHIu
cmVzcG9uc2VYTUw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCByZXNwb25zZSBsaXN0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHhtbCAmJiB4bWwuZG9jdW1lbnRFbGVtZW50IC8qICM0OTU4
ICovICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMueG1sID0geG1sOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLnRleHQgPSB4aHIucmVzcG9u
c2VUZXh0OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRpb24g
d2hlbiBhY2Nlc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXR1c1RleHQgZm9yIGZhdWx0eSBj
cm9zcy1kb21haW4gcmVxdWVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2goIGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5vcm1hbGl6ZSB3aXRo
IFdlYmtpdCBnaXZpbmcgYW4gZW1wdHkgc3RhdHVzVGV4dAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXNUZXh0ID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZpbHRlciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUgZGF0YTogYXNzdW1lIGEg
c3VjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdl
dCBub3RpZmllZCwgdGhhdCdzIHRoZSBiZXN0IHdlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZG8g
Z2l2ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0
dXMgJiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXMgPSByZXNwb25zZXMudGV4dCA/IDIwMCA6IDQwNDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElFIC0gIzE0NTA6IHNvbWV0aW1lcyByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUg
MjA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDEyMjMgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDIwNDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2goIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcGxldGUoIC0xLCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBjb21wbGV0ZSBpZiBuZWVk
ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cmVzcG9uc2VzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb21wbGV0ZSggc3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXMsIHJl
c3BvbnNlSGVhZGVycyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBz
eW5jIG1vZGUgb3IgaXQncyBpbiBjYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFuZCBoYXMgYmVlbiByZXRyaWV2ZWQgZGlyZWN0bHkgKElFNiAmIElFNykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIG1h
bnVhbGx5IGZpcmUgdGhlIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhcy5hc3luYyB8fCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9ICsreGhySWQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHho
ck9uVW5sb2FkQWJvcnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2FsbGJhY2tzIGxp
c3QgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFuZCBhdHRhY2ggdGhlIHVubG9hZCBoYW5kbGVyCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXhockNh
bGxiYWNrcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3MgPSB7fTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHdp
bmRvdyApLnVubG9hZCggeGhyT25VbmxvYWRBYm9ydCApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0byBsaXN0IG9mIGFj
dGl2ZSB4aHJzIGNhbGxiYWNrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3NbIGhhbmRsZSBdID0gY2FsbGJhY2s7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gY2FsbGJhY2s7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soMCwxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICB9KTsKK30KKworCisKKwordmFyIGVsZW1kaXNwbGF5ID0ge30sCisgICAgICAg
IGlmcmFtZSwgaWZyYW1lRG9jLAorICAgICAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8
aGlkZSkkLywKKyAgICAgICAgcmZ4bnVtID0gL14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16JV0q
KSQvaSwKKyAgICAgICAgdGltZXJJZCwKKyAgICAgICAgZnhBdHRycyA9IFsKKyAgICAgICAgICAg
ICAgICAvLyBoZWlnaHQgYW5pbWF0aW9ucworICAgICAgICAgICAgICAgIFsgImhlaWdodCIsICJt
YXJnaW5Ub3AiLCAibWFyZ2luQm90dG9tIiwgInBhZGRpbmdUb3AiLCAicGFkZGluZ0JvdHRvbSIg
XSwKKyAgICAgICAgICAgICAgICAvLyB3aWR0aCBhbmltYXRpb25zCisgICAgICAgICAgICAgICAg
WyAid2lkdGgiLCAibWFyZ2luTGVmdCIsICJtYXJnaW5SaWdodCIsICJwYWRkaW5nTGVmdCIsICJw
YWRkaW5nUmlnaHQiIF0sCisgICAgICAgICAgICAgICAgLy8gb3BhY2l0eSBhbmltYXRpb25zCisg
ICAgICAgICAgICAgICAgWyAib3BhY2l0eSIgXQorICAgICAgICBdLAorICAgICAgICBmeE5vdzsK
KworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAgICAgIHNob3c6IGZ1bmN0aW9uKCBzcGVlZCwgZWFz
aW5nLCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbSwgZGlzcGxheTsKKwor
ICAgICAgICAgICAgICAgIGlmICggc3BlZWQgfHwgc3BlZWQgPT09IDAgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBnZW5GeCgic2hvdyIsIDMpLCBzcGVl
ZCwgZWFzaW5nLCBjYWxsYmFjayk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBqID0gdGhpcy5sZW5ndGg7IGkgPCBq
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzW2ld
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZWxlbS5z
dHlsZS5kaXNwbGF5OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBp
dCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlaW5nIGhp
ZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRpc3BsYXkiKSAmJiBk
aXNwbGF5ID09PSAibm9uZSIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVy
cmlkZGVuIHdpdGggZGlzcGxheTogbm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGluIGEgc3R5bGVzaGVldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBicm93
c2VyIHN0eWxlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Zm9yIHN1Y2ggYW4gZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZGlzcGxheSA9PT0gIiIgJiYgalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkg
PT09ICJub25lIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5fZGF0YShlbGVtLCAib2xkZGlzcGxheSIsIGRlZmF1bHREaXNwbGF5KGVs
ZW0ubm9kZU5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBkaXNwbGF5IG9mIG1v
c3Qgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3cKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtID0gdGhpc1tpXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gIiIgfHwgZGlzcGxheSA9PT0g
Im5vbmUiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0galF1ZXJ5Ll9kYXRhKGVsZW0sICJvbGRkaXNwbGF5Iikg
fHwgIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICBoaWRlOiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2Fs
bGJhY2sgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzcGVlZCB8fCBzcGVlZCA9PT0gMCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIGdlbkZ4KCJoaWRl
IiwgMyksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKKworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGogPSB0aGlzLmxl
bmd0aDsgaSA8IGo7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0aGlzW2ldLnN0eWxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGhpc1tpXSwgImRpc3BsYXkiICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpc3BsYXkgIT09ICJu
b25lIiAmJiAhalF1ZXJ5Ll9kYXRhKCB0aGlzW2ldLCAib2xkZGlzcGxheSIgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSgg
dGhpc1tpXSwgIm9sZGRpc3BsYXkiLCBkaXNwbGF5ICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNl
dCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvdworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBqOyBpKysgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdGhpc1tpXS5zdHlsZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8vIFNhdmUgdGhlIG9sZCB0b2dnbGUgZnVu
Y3Rpb24KKyAgICAgICAgX3RvZ2dsZTogalF1ZXJ5LmZuLnRvZ2dsZSwKKworICAgICAgICB0b2dn
bGU6IGZ1bmN0aW9uKCBmbiwgZm4yLCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICB2YXIg
Ym9vbCA9IHR5cGVvZiBmbiA9PT0gImJvb2xlYW4iOworCisgICAgICAgICAgICAgICAgaWYgKCBq
UXVlcnkuaXNGdW5jdGlvbihmbikgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oZm4yKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7
CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsIHx8IGJvb2wgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IGJvb2wgPyBmbiA6IGpRdWVyeSh0aGlz
KS5pcygiOmhpZGRlbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnko
dGhpcylbIHN0YXRlID8gInNob3ciIDogImhpZGUiIF0oKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuYW5pbWF0ZShnZW5GeCgidG9nZ2xlIiwgMyksIGZuLCBmbjIsIGNhbGxiYWNrKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgfSwKKworICAgICAgICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2Fs
bGJhY2sgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKCI6aGlkZGVuIiku
Y3NzKCJvcGFjaXR5IiwgMCkuc2hvdygpLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmFuaW1hdGUoe29wYWNpdHk6IHRvfSwgc3BlZWQsIGVhc2luZywgY2Fs
bGJhY2spOworICAgICAgICB9LAorCisgICAgICAgIGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBz
cGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICB2YXIgb3B0YWxsID0g
alF1ZXJ5LnNwZWVkKHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKKworICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goIG9wdGFsbC5jb21wbGV0ZSwgWyBmYWxzZSBdICk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRG8gbm90IGNoYW5nZSByZWZl
cmVuY2VkIHByb3BlcnRpZXMgYXMgcGVyLXByb3BlcnR5IGVhc2luZyB3aWxsIGJlIGxvc3QKKyAg
ICAgICAgICAgICAgICBwcm9wID0galF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKTsKKworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzWyBvcHRhbGwucXVldWUgPT09IGZhbHNlID8gImVhY2giIDog
InF1ZXVlIiBdKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gWFhYICd0
aGlzJyBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhIG5vZGVOYW1lIHdoZW4gcnVubmluZyB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRlc3Qgc3VpdGUKKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBvcHRhbGwucXVldWUgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuX21hcmsoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdCA9IGpRdWVyeS5leHRlbmQo
IHt9LCBvcHRhbGwgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFbGVtZW50
ID0gdGhpcy5ub2RlVHlwZSA9PT0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGlkZGVuID0gaXNFbGVtZW50ICYmIGpRdWVyeSh0aGlzKS5pcygiOmhpZGRlbiIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB2YWwsIHAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3BsYXksIGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnRzLCBzdGFydCwgZW5kLCB1bml0OworCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyB3aWxsIHN0b3JlIHBlciBwcm9wZXJ0eSBlYXNpbmcgYW5kIGJlIHVzZWQgdG8gZGV0ZXJtaW5l
IHdoZW4gYW4gYW5pbWF0aW9uIGlzIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgICAgICBv
cHQuYW5pbWF0ZWRQcm9wZXJ0aWVzID0ge307CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIHAgaW4gcHJvcCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBw
cm9wZXJ0eSBuYW1lIG5vcm1hbGl6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIHAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBwICE9PSBuYW1lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3BbIG5hbWUgXSA9IHByb3BbIHAgXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcFsgcCBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
ID0gcHJvcFsgbmFtZSBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVh
c2luZyByZXNvbHV0aW9uOiBwZXIgcHJvcGVydHkgPiBvcHQuc3BlY2lhbEVhc2luZyA+IG9wdC5l
YXNpbmcgPiAnc3dpbmcnIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9wZXJ0aWVzWyBuYW1lIF0gPSB2YWxbIDEg
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwcm9wWyBu
YW1lIF0gPSB2YWxbIDAgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQ
cm9wZXJ0aWVzWyBuYW1lIF0gPSBvcHQuc3BlY2lhbEVhc2luZyAmJiBvcHQuc3BlY2lhbEVhc2lu
Z1sgbmFtZSBdIHx8IG9wdC5lYXNpbmcgfHwgJ3N3aW5nJzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFs
ID09PSAiaGlkZSIgJiYgaGlkZGVuIHx8IHZhbCA9PT0gInNob3ciICYmICFoaWRkZW4gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdC5jb21wbGV0
ZS5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzRWxlbWVudCAmJiAoIG5hbWUgPT09
ICJoZWlnaHQiIHx8IG5hbWUgPT09ICJ3aWR0aCIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBub3RoaW5nIHNuZWFrcyBvdXQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWNvcmQgYWxsIDMg
b3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUg
d2hlbiBvdmVyZmxvd1ggYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gb3ZlcmZsb3dZIGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQub3ZlcmZsb3cgPSBbIHRoaXMuc3R5bGUub3Zl
cmZsb3csIHRoaXMuc3R5bGUub3ZlcmZsb3dYLCB0aGlzLnN0eWxlLm92ZXJmbG93WSBdOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGRpc3BsYXkgcHJv
cGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWlnaHQvd2lkdGgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0
aGF0IGFyZSBoYXZpbmcgd2lkdGgvaGVpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYW5pbWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGpRdWVyeS5jc3MoIHRoaXMsICJkaXNwbGF5IiApID09PSAiaW5saW5lIiAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuY3NzKCB0aGlzLCAiZmxvYXQiICkgPT09ICJub25lIiApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0
LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUt
YmxvY2siOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXkoIHRoaXMubm9kZU5hbWUgKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbmxpbmUtbGV2ZWwgZWxlbWVudHMgYWNjZXB0IGlubGluZS1ibG9jazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2stbGV2
ZWwgZWxlbWVudHMgbmVlZCB0byBiZSBpbmxpbmUgd2l0aCBsYXlvdXQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09
PSAiaW5saW5lIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2Nr
IjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuc3R5bGUuem9vbSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHQub3ZlcmZsb3cg
IT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5v
dmVyZmxvdyA9ICJoaWRkZW4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBwIGluIHByb3AgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGUgPSBuZXcgalF1ZXJ5LmZ4KCB0aGlzLCBvcHQsIHAgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcHJvcFsgcCBdOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcmZ4dHlwZXMudGVzdCh2YWwpICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbIHZhbCA9PT0gInRvZ2dsZSIgPyBoaWRk
ZW4gPyAic2hvdyIgOiAiaGlkZSIgOiB2YWwgXSgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFydHMgPSByZnhudW0uZXhlYyggdmFsICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSBlLmN1cigpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBwYXJ0cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHBhcnNlRmxvYXQoIHBhcnRzWzJdICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0ID0gcGFy
dHNbM10gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwIF0gPyAiIiA6ICJweCIgKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBj
b21wdXRlIHN0YXJ0aW5nIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHVuaXQgIT09ICJweCIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggdGhpcywg
cCwgKGVuZCB8fCAxKSArIHVuaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICgoZW5kIHx8IDEpIC8gZS5jdXIoKSkgKiBz
dGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LnN0eWxlKCB0aGlzLCBwLCBzdGFydCArIHVuaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhICs9Ly09IHRva2VuIHdhcyBw
cm92aWRlZCwgd2UncmUgZG9pbmcgYSByZWxhdGl2ZSBhbmltYXRpb24KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFydHNbMV0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9
ICggKHBhcnRzWyAxIF0gPT09ICItPSIgPyAtMSA6IDEpICogZW5kICkgKyBzdGFydDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXN0b20oIHN0YXJ0LCBl
bmQsIHVuaXQgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
LmN1c3RvbSggc3RhcnQsIHZhbCwgIiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIEpTIHN0
cmljdCBjb21wbGlhbmNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICBzdG9wOiBmdW5jdGlvbigg
Y2xlYXJRdWV1ZSwgZ290b0VuZCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNsZWFyUXVldWUg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlKFtdKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdGltZXJzID0galF1ZXJ5LnRpbWVycywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaSA9IHRpbWVycy5sZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBjbGVhciBtYXJrZXIgY291bnRlcnMgaWYgd2Uga25vdyB0aGV5IHdvbid0IGJl
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFnb3RvRW5kICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX3VubWFyayggdHJ1ZSwgdGhpcyApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0g
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGltZXJzW2ldLmVsZW0g
PT09IHRoaXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGdvdG9FbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGZvcmNlIHRoZSBuZXh0IHN0ZXAgdG8gYmUgdGhlIGxhc3QKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyc1tpXSh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKGksIDEpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvLyBzdGFydCB0aGUgbmV4dCBpbiB0aGUg
cXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkCisgICAgICAgICAgICAgICAgaWYg
KCAhZ290b0VuZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVxdWV1ZSgpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9CisKK30pOworCisvLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1
biBzeW5jaHJvbm91c2x5CitmdW5jdGlvbiBjcmVhdGVGeE5vdygpIHsKKyAgICAgICAgc2V0VGlt
ZW91dCggY2xlYXJGeE5vdywgMCApOworICAgICAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5u
b3coKSApOworfQorCitmdW5jdGlvbiBjbGVhckZ4Tm93KCkgeworICAgICAgICBmeE5vdyA9IHVu
ZGVmaW5lZDsKK30KKworLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFy
ZCBhbmltYXRpb24KK2Z1bmN0aW9uIGdlbkZ4KCB0eXBlLCBudW0gKSB7CisgICAgICAgIHZhciBv
YmogPSB7fTsKKworICAgICAgICBqUXVlcnkuZWFjaCggZnhBdHRycy5jb25jYXQuYXBwbHkoW10s
IGZ4QXR0cnMuc2xpY2UoMCxudW0pKSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgb2Jq
WyB0aGlzIF0gPSB0eXBlOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gb2JqOworfQor
CisvLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCitqUXVlcnkuZWFj
aCh7CisgICAgICAgIHNsaWRlRG93bjogZ2VuRngoInNob3ciLCAxKSwKKyAgICAgICAgc2xpZGVV
cDogZ2VuRngoImhpZGUiLCAxKSwKKyAgICAgICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUi
LCAxKSwKKyAgICAgICAgZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LAorICAgICAgICBmYWRl
T3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LAorICAgICAgICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6
ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKKyAgICAgICAgalF1ZXJ5
LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICk7CisgICAgICAgIH07Cit9KTsKKworalF1ZXJ5LmV4dGVuZCh7CisgICAgICAgIHNw
ZWVkOiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7CisgICAgICAgICAgICAgICAgdmFy
IG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5k
KHt9LCBzcGVlZCkgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZm4gfHwg
IWZuICYmIGVhc2luZyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1
cmF0aW9uOiBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhc2luZzogZm4gJiYgZWFz
aW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oZWFzaW5nKSAmJiBlYXNpbmcKKyAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgb3B0LmR1cmF0aW9uID0galF1ZXJ5
LmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygb3B0LmR1cmF0aW9uID09PSAibnVtYmVyIiA/IG9wdC5kdXJh
dGlvbiA6CisgICAgICAgICAgICAgICAgICAgICAgICBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4
LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNbb3B0LmR1cmF0aW9uXSA6IGpRdWVyeS5meC5zcGVl
ZHMuX2RlZmF1bHQ7CisKKyAgICAgICAgICAgICAgICAvLyBRdWV1ZWluZworICAgICAgICAgICAg
ICAgIG9wdC5vbGQgPSBvcHQuY29tcGxldGU7CisgICAgICAgICAgICAgICAgb3B0LmNvbXBsZXRl
ID0gZnVuY3Rpb24oIG5vVW5tYXJrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBq
UXVlcnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHQucXVldWUgIT09IGZhbHNlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcyApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbm9Vbm1hcmsgIT09IGZhbHNlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX3VubWFyayggdGhpcyAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3B0OworICAgICAgICB9LAorCisgICAgICAgIGVhc2luZzogewor
ICAgICAgICAgICAgICAgIGxpbmVhcjogZnVuY3Rpb24oIHAsIG4sIGZpcnN0TnVtLCBkaWZmICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TnVtICsgZGlmZiAqIHA7Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBzd2luZzogZnVuY3Rpb24oIHAsIG4s
IGZpcnN0TnVtLCBkaWZmICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoLU1h
dGguY29zKHAqTWF0aC5QSSkvMikgKyAwLjUpICogZGlmZiArIGZpcnN0TnVtOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICB0aW1lcnM6IFtdLAorCisgICAgICAgIGZ4
OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCApIHsKKyAgICAgICAgICAgICAgICB0aGlz
Lm9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICAgICAgICAgIHRoaXMuZWxlbSA9IGVsZW07Cisg
ICAgICAgICAgICAgICAgdGhpcy5wcm9wID0gcHJvcDsKKworICAgICAgICAgICAgICAgIG9wdGlv
bnMub3JpZyA9IG9wdGlvbnMub3JpZyB8fCB7fTsKKyAgICAgICAgfQorCit9KTsKKworalF1ZXJ5
LmZ4LnByb3RvdHlwZSA9IHsKKyAgICAgICAgLy8gU2ltcGxlIGZ1bmN0aW9uIGZvciBzZXR0aW5n
IGEgc3R5bGUgdmFsdWUKKyAgICAgICAgdXBkYXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIChqUXVlcnkuZnguc3RlcFt0aGlzLnBy
b3BdIHx8IGpRdWVyeS5meC5zdGVwLl9kZWZhdWx0KSggdGhpcyApOworICAgICAgICB9LAorCisg
ICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBzaXplCisgICAgICAgIGN1cjogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmVsZW1bdGhpcy5wcm9wXSAhPSBudWxsICYmICgh
dGhpcy5lbGVtLnN0eWxlIHx8IHRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdID09IG51bGwpICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbVsgdGhpcy5wcm9wIF07
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHBhcnNlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHIgPSBqUXVlcnkuY3NzKCB0aGlzLmVsZW0sIHRoaXMucHJvcCAp
OworICAgICAgICAgICAgICAgIC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQg
ImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMCwKKyAgICAgICAgICAgICAgICAvLyBjb21wbGV4IHZh
bHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcyBpcywKKyAgICAgICAg
ICAgICAgICAvLyBzaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxv
YXQuCisgICAgICAgICAgICAgICAgcmV0dXJuIGlzTmFOKCBwYXJzZWQgPSBwYXJzZUZsb2F0KCBy
ICkgKSA/ICFyIHx8IHIgPT09ICJhdXRvIiA/IDAgOiByIDogcGFyc2VkOworICAgICAgICB9LAor
CisgICAgICAgIC8vIFN0YXJ0IGFuIGFuaW1hdGlvbiBmcm9tIG9uZSBudW1iZXIgdG8gYW5vdGhl
cgorICAgICAgICBjdXN0b206IGZ1bmN0aW9uKCBmcm9tLCB0bywgdW5pdCApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBmeCA9IGpR
dWVyeS5meDsKKworICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gZnhOb3cgfHwgY3Jl
YXRlRnhOb3coKTsKKyAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ID0gZnJvbTsKKyAgICAgICAg
ICAgICAgICB0aGlzLmVuZCA9IHRvOworICAgICAgICAgICAgICAgIHRoaXMudW5pdCA9IHVuaXQg
fHwgdGhpcy51bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgdGhpcy5wcm9wIF0gPyAiIiA6ICJw
eCIgKTsKKyAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IHRoaXMuc3RhcnQ7CisgICAgICAgICAg
ICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXRlID0gMDsKKworICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIHQoIGdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5z
dGVwKGdvdG9FbmQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHQuZWxl
bSA9IHRoaXMuZWxlbTsKKworICAgICAgICAgICAgICAgIGlmICggdCgpICYmIGpRdWVyeS50aW1l
cnMucHVzaCh0KSAmJiAhdGltZXJJZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVy
SWQgPSBzZXRJbnRlcnZhbCggZngudGljaywgZnguaW50ZXJ2YWwgKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gU2ltcGxlICdzaG93JyBmdW5jdGlvbgorICAg
ICAgICBzaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB3aGVy
ZSB3ZSBzdGFydGVkLCBzbyB0aGF0IHdlIGNhbiBnbyBiYWNrIHRvIGl0IGxhdGVyCisgICAgICAg
ICAgICAgICAgdGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXSA9IGpRdWVyeS5zdHlsZSggdGhp
cy5lbGVtLCB0aGlzLnByb3AgKTsKKyAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAvLyBCZWdpbiB0aGUgYW5pbWF0aW9uCisgICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ugc3RhcnQgYXQgYSBzbWFsbCB3aWR0aC9oZWln
aHQgdG8gYXZvaWQgYW55CisgICAgICAgICAgICAgICAgLy8gZmxhc2ggb2YgY29udGVudAorICAg
ICAgICAgICAgICAgIHRoaXMuY3VzdG9tKHRoaXMucHJvcCA9PT0gIndpZHRoIiB8fCB0aGlzLnBy
b3AgPT09ICJoZWlnaHQiID8gMSA6IDAsIHRoaXMuY3VyKCkpOworCisgICAgICAgICAgICAgICAg
Ly8gU3RhcnQgYnkgc2hvd2luZyB0aGUgZWxlbWVudAorICAgICAgICAgICAgICAgIGpRdWVyeSgg
dGhpcy5lbGVtICkuc2hvdygpOworICAgICAgICB9LAorCisgICAgICAgIC8vIFNpbXBsZSAnaGlk
ZScgZnVuY3Rpb24KKyAgICAgICAgaGlkZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
Ly8gUmVtZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZCwgc28gdGhhdCB3ZSBjYW4gZ28gYmFjayB0byBp
dCBsYXRlcgorICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF0gPSBq
UXVlcnkuc3R5bGUoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7CisgICAgICAgICAgICAgICAgdGhp
cy5vcHRpb25zLmhpZGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy8gQmVnaW4gdGhlIGFu
aW1hdGlvbgorICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksIDApOworICAg
ICAgICB9LAorCisgICAgICAgIC8vIEVhY2ggc3RlcCBvZiBhbiBhbmltYXRpb24KKyAgICAgICAg
c3RlcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgdmFyIHQgPSBmeE5v
dyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWUs
CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpcy5lbGVtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGksIG47CisKKyAgICAgICAgICAgICAgICBpZiAoIGdvdG9FbmQgfHwgdCA+PSBvcHRpb25z
LmR1cmF0aW9uICsgdGhpcy5zdGFydFRpbWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLm5vdyA9IHRoaXMuZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSB0
aGlzLnN0YXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzWyB0aGlz
LnByb3AgXSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gb3B0
aW9ucy5hbmltYXRlZFByb3BlcnRpZXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXNbaV0gIT09IHRydWUgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZG9uZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIG92ZXJmbG93CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggb3B0aW9ucy5vdmVyZmxvdyAhPSBudWxsICYmICFqUXVlcnkuc3Vw
cG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmVhY2goIFsgIiIsICJYIiwgIlkiIF0sIGZ1bmN0aW9uIChpbmRl
eCwgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uc3R5bGVbICJvdmVyZmxvdyIgKyB2YWx1ZSBdID0gb3B0aW9ucy5vdmVyZmxvd1tp
bmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBIaWRlIHRoZSBlbGVtZW50IGlmIHRoZSAiaGlkZSIgb3BlcmF0aW9uIHdhcyBk
b25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5oaWRlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShlbGVtKS5o
aWRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgcHJvcGVydGllcywgaWYgdGhlIGl0ZW0g
aGFzIGJlZW4gaGlkZGVuIG9yIHNob3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggb3B0aW9ucy5oaWRlIHx8IG9wdGlvbnMuc2hvdyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgcCBpbiBvcHRpb25zLmFuaW1hdGVkUHJv
cGVydGllcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcCwgb3B0aW9ucy5vcmlnW3BdICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhlY3V0ZSB0
aGUgY29tcGxldGUgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucy5jb21wbGV0ZS5jYWxsKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGFzc2ljYWwgZWFzaW5nIGNh
bm5vdCBiZSB1c2VkIHdpdGggYW4gSW5maW5pdHkgZHVyYXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggb3B0aW9ucy5kdXJhdGlvbiA9PSBJbmZpbml0eSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3cgPSB0OworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHQgLSB0aGlz
LnN0YXJ0VGltZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9
IG4gLyBvcHRpb25zLmR1cmF0aW9uOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFBlcmZvcm0gdGhlIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVsdHMgdG8gc3dpbmcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSBqUXVlcnkuZWFzaW5nWyBvcHRp
b25zLmFuaW1hdGVkUHJvcGVydGllc1sgdGhpcy5wcm9wIF0gXSggdGhpcy5zdGF0ZSwgbiwgMCwg
MSwgb3B0aW9ucy5kdXJhdGlvbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLm5vdyA9IHRoaXMuc3RhcnQgKyAoKHRoaXMuZW5kIC0gdGhpcy5zdGFydCkgKiB0aGlzLnBv
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBQZXJmb3JtIHRoZSBuZXh0IHN0ZXAgb2YgdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy51cGRhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorfTsKKworalF1ZXJ5LmV4dGVuZCggalF1ZXJ5
LmZ4LCB7CisgICAgICAgIHRpY2s6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZvciAo
IHZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzLCBpID0gMCA7IGkgPCB0aW1lcnMubGVuZ3RoIDsg
KytpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGltZXJzW2ldKCkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoaS0tLCAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoICF0aW1lcnMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmZ4LnN0b3AoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAg
aW50ZXJ2YWw6IDEzLAorCisgICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKKyAgICAgICAgICAgICAgICB0aW1lcklkID0g
bnVsbDsKKyAgICAgICAgfSwKKworICAgICAgICBzcGVlZHM6IHsKKyAgICAgICAgICAgICAgICBz
bG93OiA2MDAsCisgICAgICAgICAgICAgICAgZmFzdDogMjAwLAorICAgICAgICAgICAgICAgIC8v
IERlZmF1bHQgc3BlZWQKKyAgICAgICAgICAgICAgICBfZGVmYXVsdDogNDAwCisgICAgICAgIH0s
CisKKyAgICAgICAgc3RlcDogeworICAgICAgICAgICAgICAgIG9wYWNpdHk6IGZ1bmN0aW9uKCBm
eCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZnguZWxlbSwgIm9w
YWNpdHkiLCBmeC5ub3cgKTsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAg
X2RlZmF1bHQ6IGZ1bmN0aW9uKCBmeCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZnguZWxlbS5zdHlsZSAmJiBmeC5lbGVtLnN0eWxlWyBmeC5wcm9wIF0gIT0gbnVsbCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnguZWxlbS5zdHlsZVsgZngucHJvcCBdID0g
KGZ4LnByb3AgPT09ICJ3aWR0aCIgfHwgZngucHJvcCA9PT0gImhlaWdodCIgPyBNYXRoLm1heCgw
LCBmeC5ub3cpIDogZngubm93KSArIGZ4LnVuaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeC5lbGVtWyBmeC5wcm9w
IF0gPSBmeC5ub3c7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICB9Cit9KTsKKworaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0
ZXJzICkgeworICAgICAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGpRdWVyeS50aW1l
cnMsIGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ID09PSBmbi5lbGVtOworICAgICAgICAgICAgICAgIH0pLmxlbmd0aDsKKyAgICAgICAgfTsKK30K
KworLy8gVHJ5IHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgZGlzcGxheSB2YWx1ZSBvZiBhbiBlbGVt
ZW50CitmdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CisKKyAgICAgICAgaWYg
KCAhZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgYm9k
eSA9IGRvY3VtZW50LmJvZHksCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0galF1ZXJ5
KCAiPCIgKyBub2RlTmFtZSArICI+IiApLmFwcGVuZFRvKCBib2R5ICksCisgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNwbGF5ID0gZWxlbS5jc3MoICJkaXNwbGF5IiApOworCisgICAgICAgICAg
ICAgICAgZWxlbS5yZW1vdmUoKTsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzaW1wbGUg
d2F5IGZhaWxzLAorICAgICAgICAgICAgICAgIC8vIGdldCBlbGVtZW50J3MgcmVhbCBkZWZhdWx0
IGRpc3BsYXkgYnkgYXR0YWNoaW5nIGl0IHRvIGEgdGVtcCBpZnJhbWUKKyAgICAgICAgICAgICAg
ICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiB8fCBkaXNwbGF5ID09PSAiIiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE5vIGlmcmFtZSB0byB1c2UgeWV0LCBzbyBjcmVhdGUgaXQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlmcmFtZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlmcmFtZSIg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLmZyYW1lQm9yZGVyID0g
aWZyYW1lLndpZHRoID0gaWZyYW1lLmhlaWdodCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoIGlmcmFtZSAp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjYWNoZWFibGUgY29weSBv
ZiB0aGUgaWZyYW1lIGRvY3VtZW50IG9uIGZpcnN0IGNhbGwuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJRSBhbmQgT3BlcmEgd2lsbCBhbGxvdyB1cyB0byByZXVzZSB0aGUgaWZyYW1lRG9j
IHdpdGhvdXQgcmUtd3JpdGluZyB0aGUgZmFrZSBIVE1MCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBkb2N1bWVudCB0byBpdDsgV2ViS2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVzaW5n
IHRoZSBpZnJhbWUgZG9jdW1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpZnJh
bWVEb2MgfHwgIWlmcmFtZS5jcmVhdGVFbGVtZW50ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlmcmFtZS5j
b250ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWZyYW1lRG9jLndyaXRlKCAoIGRvY3VtZW50LmNvbXBhdE1vZGUgPT09ICJDU1MxQ29tcGF0
IiA/ICI8IWRvY3R5cGUgaHRtbD4iIDogIiIgKSArICI8aHRtbD48Ym9keT4iICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZURvYy5jbG9zZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gaWZyYW1lRG9j
LmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
cmFtZURvYy5ib2R5LmFwcGVuZENoaWxkKCBlbGVtICk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgYm9keS5yZW1vdmVDaGlsZCggaWZyYW1lICk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNw
bGF5CisgICAgICAgICAgICAgICAgZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBkaXNwbGF5Owor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdOworfQor
CisKKworCit2YXIgcnRhYmxlID0gL150KD86YWJsZXxkfGgpJC9pLAorICAgICAgICBycm9vdCA9
IC9eKD86Ym9keXxodG1sKSQvaTsKKworaWYgKCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiBpbiBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQgKSB7CisgICAgICAgIGpRdWVyeS5mbi5vZmZzZXQgPSBm
dW5jdGlvbiggb3B0aW9ucyApIHsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF0s
IGJveDsKKworICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25z
LCBpICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8ICFlbGVtLm93bmVyRG9jdW1lbnQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5ib2R5ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNl
dCggZWxlbSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OworICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KKworICAgICAgICAgICAgICAgIHZhciBk
b2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVt
ID0gZG9jLmRvY3VtZW50RWxlbWVudDsKKworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3
ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgZGlzY29ubmVjdGVkIERPTSBub2RlCisgICAgICAgICAg
ICAgICAgaWYgKCAhYm94IHx8ICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3ggPyB7IHRvcDogYm94LnRvcCwgbGVm
dDogYm94LmxlZnQgfSA6IHsgdG9wOiAwLCBsZWZ0OiAwIH07CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdpbiA9IGdldFdpbmRvdyhkb2MpLAorICAgICAgICAgICAgICAgICAgICAgICAgY2xp
ZW50VG9wICA9IGRvY0VsZW0uY2xpZW50VG9wICB8fCBib2R5LmNsaWVudFRvcCAgfHwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNsaWVudExlZnQgPSBkb2NFbGVtLmNsaWVudExlZnQgfHwg
Ym9keS5jbGllbnRMZWZ0IHx8IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3Ag
ID0gd2luLnBhZ2VZT2Zmc2V0IHx8IGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYmIGRvY0VsZW0u
c2Nyb2xsVG9wICB8fCBib2R5LnNjcm9sbFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQgfHwgalF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYg
ZG9jRWxlbS5zY3JvbGxMZWZ0IHx8IGJvZHkuc2Nyb2xsTGVmdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRvcCAgPSBib3gudG9wICArIHNjcm9sbFRvcCAgLSBjbGllbnRUb3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICBsZWZ0ID0gYm94LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVm
dDsKKworICAgICAgICAgICAgICAgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH07Cisg
ICAgICAgIH07CisKK30gZWxzZSB7CisgICAgICAgIGpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlv
biggb3B0aW9ucyApIHsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF07CisKKyAg
ICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKCAhZWxlbSB8fCAhZWxlbS5vd25lckRvY3VtZW50ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQuYm9keSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkub2Zmc2V0LmJvZHlPZmZzZXQoIGVsZW0gKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBqUXVlcnkub2Zmc2V0LmluaXRp
YWxpemUoKTsKKworICAgICAgICAgICAgICAgIHZhciBjb21wdXRlZFN0eWxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2T2Zmc2V0UGFyZW50ID0gZWxlbSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgYm9keSA9IGRvYy5ib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZpZXcg
PSBkb2MuZGVmYXVsdFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q29tcHV0ZWRT
dHlsZSA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwg
bnVsbCApIDogZWxlbS5jdXJyZW50U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICB0b3Ag
PSBlbGVtLm9mZnNldFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBlbGVtLm9m
ZnNldExlZnQ7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnRO
b2RlKSAmJiBlbGVtICE9PSBib2R5ICYmIGVsZW0gIT09IGRvY0VsZW0gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuc3VwcG9ydHNGaXhlZFBvc2l0aW9uICYm
IHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAiZml4ZWQiICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3ID8gZGVm
YXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKSA6IGVsZW0uY3VycmVudFN0eWxl
OworICAgICAgICAgICAgICAgICAgICAgICAgdG9wICAtPSBlbGVtLnNjcm9sbFRvcDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gZWxlbS5zY3JvbGxMZWZ0OworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0gPT09IG9mZnNldFBhcmVudCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9wICArPSBlbGVtLm9mZnNldFRvcDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBlbGVtLm9mZnNldExlZnQ7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0LmRvZXNOb3RBZGRCb3Jk
ZXIgJiYgIShqUXVlcnkub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzICYmIHJ0
YWJsZS50ZXN0KGVsZW0ubm9kZU5hbWUpKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9w
V2lkdGggICkgfHwgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0ICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoICkgfHwgMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZPZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50Owor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGpRdWVyeS5vZmZzZXQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlICYmIGNv
bXB1dGVkU3R5bGUub3ZlcmZsb3cgIT09ICJ2aXNpYmxlIiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlclRv
cFdpZHRoICApIHx8IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKz0g
cGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGggKSB8fCAwOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q29tcHV0
ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKCBwcmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gInJlbGF0aXZlIiB8fCBw
cmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0b3AgICs9IGJvZHkub2Zmc2V0VG9wOworICAgICAgICAgICAgICAgICAgICAg
ICAgbGVmdCArPSBib2R5Lm9mZnNldExlZnQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiAmJiBwcmV2
Q29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gImZpeGVkIiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRvcCAgKz0gTWF0aC5tYXgoIGRvY0VsZW0uc2Nyb2xsVG9wLCBib2R5LnNjcm9sbFRv
cCApOworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBNYXRoLm1heCggZG9jRWxlbS5z
Y3JvbGxMZWZ0LCBib2R5LnNjcm9sbExlZnQgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OworICAgICAgICB9Owor
fQorCitqUXVlcnkub2Zmc2V0ID0geworICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHksIGNvbnRhaW5lciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBpbm5lckRpdiwgY2hlY2tEaXYsIHRhYmxlLCB0
ZCwgYm9keU1hcmdpblRvcCA9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpblRv
cCIpICkgfHwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSAiPGRpdiBzdHlsZT0n
cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQg
IzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7Jz48ZGl2PjwvZGl2PjwvZGl2Pjx0
YWJsZSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRl
cjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7JyBjZWxscGFk
ZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjsKKwor
ICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIGNvbnRhaW5lci5zdHlsZSwgeyBwb3NpdGlv
bjogImFic29sdXRlIiwgdG9wOiAwLCBsZWZ0OiAwLCBtYXJnaW46IDAsIGJvcmRlcjogMCwgd2lk
dGg6ICIxcHgiLCBoZWlnaHQ6ICIxcHgiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiB9ICk7CisKKyAg
ICAgICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAgICAgICAgICAg
ICBib2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKKyAgICAg
ICAgICAgICAgICBpbm5lckRpdiA9IGNvbnRhaW5lci5maXJzdENoaWxkOworICAgICAgICAgICAg
ICAgIGNoZWNrRGl2ID0gaW5uZXJEaXYuZmlyc3RDaGlsZDsKKyAgICAgICAgICAgICAgICB0ZCA9
IGlubmVyRGl2Lm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDsKKworICAgICAgICAg
ICAgICAgIHRoaXMuZG9lc05vdEFkZEJvcmRlciA9IChjaGVja0Rpdi5vZmZzZXRUb3AgIT09IDUp
OworICAgICAgICAgICAgICAgIHRoaXMuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHMgPSAo
dGQub2Zmc2V0VG9wID09PSA1KTsKKworICAgICAgICAgICAgICAgIGNoZWNrRGl2LnN0eWxlLnBv
c2l0aW9uID0gImZpeGVkIjsKKyAgICAgICAgICAgICAgICBjaGVja0Rpdi5zdHlsZS50b3AgPSAi
MjBweCI7CisKKyAgICAgICAgICAgICAgICAvLyBzYWZhcmkgc3VidHJhY3RzIHBhcmVudCBib3Jk
ZXIgd2lkdGggaGVyZSB3aGljaCBpcyA1cHgKKyAgICAgICAgICAgICAgICB0aGlzLnN1cHBvcnRz
Rml4ZWRQb3NpdGlvbiA9IChjaGVja0Rpdi5vZmZzZXRUb3AgPT09IDIwIHx8IGNoZWNrRGl2Lm9m
ZnNldFRvcCA9PT0gMTUpOworICAgICAgICAgICAgICAgIGNoZWNrRGl2LnN0eWxlLnBvc2l0aW9u
ID0gY2hlY2tEaXYuc3R5bGUudG9wID0gIiI7CisKKyAgICAgICAgICAgICAgICBpbm5lckRpdi5z
dHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOworICAgICAgICAgICAgICAgIGlubmVyRGl2LnN0eWxl
LnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKworICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3Rz
Qm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlID0gKGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0gLTUp
OworCisgICAgICAgICAgICAgICAgdGhpcy5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNl
dCA9IChib2R5Lm9mZnNldFRvcCAhPT0gYm9keU1hcmdpblRvcCk7CisKKyAgICAgICAgICAgICAg
ICBib2R5LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKKyAgICAgICAgICAgICAgICBqUXVlcnku
b2Zmc2V0LmluaXRpYWxpemUgPSBqUXVlcnkubm9vcDsKKyAgICAgICAgfSwKKworICAgICAgICBi
b2R5T2Zmc2V0OiBmdW5jdGlvbiggYm9keSApIHsKKyAgICAgICAgICAgICAgICB2YXIgdG9wID0g
Ym9keS5vZmZzZXRUb3AsCisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gYm9keS5vZmZz
ZXRMZWZ0OworCisgICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5pbml0aWFsaXplKCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuZG9lc05vdEluY2x1ZGVNYXJnaW5J
bkJvZHlPZmZzZXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxv
YXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpblRvcCIpICkgfHwgMDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhib2R5LCAibWFyZ2luTGVm
dCIpICkgfHwgMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OworICAgICAgICB9LAorCisgICAgICAgIHNldE9mZnNl
dDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7CisgICAgICAgICAgICAgICAgdmFyIHBv
c2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgInBvc2l0aW9uIiApOworCisgICAgICAgICAgICAg
ICAgLy8gc2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBv
biBzdGF0aWMgZWxlbQorICAgICAgICAgICAgICAgIGlmICggcG9zaXRpb24gPT09ICJzdGF0aWMi
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxh
dGl2ZSI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIGN1ckVsZW0g
PSBqUXVlcnkoIGVsZW0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1ck9mZnNldCA9IGN1
ckVsZW0ub2Zmc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJDU1NUb3AgPSBqUXVl
cnkuY3NzKCBlbGVtLCAidG9wIiApLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ1NTTGVm
dCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsY3VsYXRlUG9zaXRpb24gPSAocG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24g
PT09ICJmaXhlZCIpICYmIGpRdWVyeS5pbkFycmF5KCJhdXRvIiwgW2N1ckNTU1RvcCwgY3VyQ1NT
TGVmdF0pID4gLTEsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyA9IHt9LCBjdXJQb3Np
dGlvbiA9IHt9LCBjdXJUb3AsIGN1ckxlZnQ7CisKKyAgICAgICAgICAgICAgICAvLyBuZWVkIHRv
IGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBh
dXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKKyAgICAgICAgICAg
ICAgICBpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJM
ZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0
ICkgfHwgMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBjdXJPZmZzZXQgKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy50b3AgIT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcHMudG9wID0gKG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRv
cCkgKyBjdXJUb3A7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChvcHRp
b25zLmxlZnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMubGVmdCA9
IChvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCkgKyBjdXJMZWZ0OworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJFbGVt
LmNzcyggcHJvcHMgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK307CisKKworalF1
ZXJ5LmZuLmV4dGVuZCh7CisgICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoICF0aGlzWzBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0
aGlzWzBdLAorCisgICAgICAgICAgICAgICAgLy8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQKKyAg
ICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpLAorCisgICAg
ICAgICAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cworICAgICAgICAgICAgICAgIG9mZnNl
dCAgICAgICA9IHRoaXMub2Zmc2V0KCksCisgICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0g
cnJvb3QudGVzdChvZmZzZXRQYXJlbnRbMF0ubm9kZU5hbWUpID8geyB0b3A6IDAsIGxlZnQ6IDAg
fSA6IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKKworICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0
IGVsZW1lbnQgbWFyZ2lucworICAgICAgICAgICAgICAgIC8vIG5vdGU6IHdoZW4gYW4gZWxlbWVu
dCBoYXMgbWFyZ2luOiBhdXRvIHRoZSBvZmZzZXRMZWZ0IGFuZCBtYXJnaW5MZWZ0CisgICAgICAg
ICAgICAgICAgLy8gYXJlIHRoZSBzYW1lIGluIFNhZmFyaSBjYXVzaW5nIG9mZnNldC5sZWZ0IHRv
IGluY29ycmVjdGx5IGJlIDAKKyAgICAgICAgICAgICAgICBvZmZzZXQudG9wICAtPSBwYXJzZUZs
b2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5Ub3AiKSApIHx8IDA7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0LmxlZnQgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAibWFyZ2luTGVm
dCIpICkgfHwgMDsKKworICAgICAgICAgICAgICAgIC8vIEFkZCBvZmZzZXRQYXJlbnQgYm9yZGVy
cworICAgICAgICAgICAgICAgIHBhcmVudE9mZnNldC50b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVy
eS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVyVG9wV2lkdGgiKSApIHx8IDA7CisgICAgICAg
ICAgICAgICAgcGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZz
ZXRQYXJlbnRbMF0sICJib3JkZXJMZWZ0V2lkdGgiKSApIHx8IDA7CisKKyAgICAgICAgICAgICAg
ICAvLyBTdWJ0cmFjdCB0aGUgdHdvIG9mZnNldHMKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRPZmZzZXQu
dG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRP
ZmZzZXQubGVmdAorICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgb2Zm
c2V0UGFyZW50OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0g
dGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJlbnQubm9k
ZU5hbWUpICYmIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0YXRp
YyIpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBv
ZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudDsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorfSk7CisKKworLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9s
bFRvcCBtZXRob2RzCitqUXVlcnkuZWFjaCggWyJMZWZ0IiwgIlRvcCJdLCBmdW5jdGlvbiggaSwg
bmFtZSApIHsKKyAgICAgICAgdmFyIG1ldGhvZCA9ICJzY3JvbGwiICsgbmFtZTsKKworICAgICAg
ICBqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZWxlbSwgd2luOworCisgICAgICAgICAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyAwIF07CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICB3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBzY3JvbGwgb2Zmc2V0CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd2luID8gKCJwYWdlWE9mZnNldCIgaW4gd2luKSA/IHdpblsgaSA/
ICJwYWdlWU9mZnNldCIgOiAicGFnZVhPZmZzZXQiIF0gOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiB3aW4uZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50WyBtZXRob2QgXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpbi5kb2N1bWVudC5ib2R5WyBtZXRob2QgXSA6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1bIG1ldGhvZCBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIFNldCB0aGUgc2Nyb2xsIG9mZnNldAorICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aW4gPSBn
ZXRXaW5kb3coIHRoaXMgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3aW4gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaSA/IHZhbCA6IGpRdWVyeSggd2luICku
c2Nyb2xsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBtZXRob2QgXSA9IHZhbDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKK30pOwor
CitmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuaXNX
aW5kb3coIGVsZW0gKSA/CisgICAgICAgICAgICAgICAgZWxlbSA6CisgICAgICAgICAgICAgICAg
ZWxlbS5ub2RlVHlwZSA9PT0gOSA/CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmRlZmF1
bHRWaWV3IHx8IGVsZW0ucGFyZW50V2luZG93IDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZh
bHNlOworfQorCisKKworCisvLyBDcmVhdGUgd2lkdGgsIGhlaWdodCwgaW5uZXJIZWlnaHQsIGlu
bmVyV2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKK2pRdWVyeS5lYWNo
KFsgIkhlaWdodCIsICJXaWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisKKyAgICAgICAg
dmFyIHR5cGUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgLy8gaW5uZXJIZWlnaHQg
YW5kIGlubmVyV2lkdGgKKyAgICAgICAgalF1ZXJ5LmZuWyAiaW5uZXIiICsgbmFtZSBdID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdOworICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtICYmIGVsZW0uc3R5bGUgPworICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgInBhZGRpbmciICkgKSA6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBudWxsOworICAgICAgICB9OworCisgICAgICAgIC8vIG91
dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoCisgICAgICAgIGpRdWVyeS5mblsgIm91dGVyIiArIG5h
bWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4gKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0
aGlzWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtICYmIGVsZW0uc3R5bGUgPworICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwg
bWFyZ2luID8gIm1hcmdpbiIgOiAiYm9yZGVyIiApICkgOgorICAgICAgICAgICAgICAgICAgICAg
ICAgbnVsbDsKKyAgICAgICAgfTsKKworICAgICAgICBqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0
aW9uKCBzaXplICkgeworICAgICAgICAgICAgICAgIC8vIEdldCB3aW5kb3cgd2lkdGggb3IgaGVp
Z2h0CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdOworICAgICAgICAgICAgICAg
IGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZSA9PSBu
dWxsID8gbnVsbCA6IHRoaXM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2l6ZSApICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZlsgdHlwZSBdKCBzaXplLmNhbGwoIHRoaXMsIGksIHNlbGZbIHR5
cGUgXSgpICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmVyeW9uZSBlbHNlIHVzZSBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQgb3IgZG9jdW1lbnQuYm9keSBkZXBlbmRpbmcgb24gUXVpcmtzIHZzIFN0YW5k
YXJkcyBtb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAzcmQgY29uZGl0aW9uIGFsbG93
cyBOb2tpYSBzdXBwb3J0LCBhcyBpdCBzdXBwb3J0cyB0aGUgZG9jRWxlbSBwcm9wIGJ1dCBub3Qg
Q1NTMUNvbXBhdAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0VsZW1Qcm9wID0gZWxl
bS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQiICsgbmFtZSBdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZWxlbS5kb2N1bWVudC5ib2R5OworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gIkNT
UzFDb21wYXQiICYmIGRvY0VsZW1Qcm9wIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvZHkgJiYgYm9keVsgImNsaWVudCIgKyBuYW1lIF0gfHwgZG9jRWxlbVByb3A7CisKKyAg
ICAgICAgICAgICAgICAvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgv
SGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBNYXRoLm1heCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5kb2N1
bWVudEVsZW1lbnRbImNsaWVudCIgKyBuYW1lXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5ib2R5WyJzY3JvbGwiICsgbmFtZV0sIGVsZW0uZG9jdW1lbnRFbGVtZW50WyJz
Y3JvbGwiICsgbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9k
eVsib2Zmc2V0IiArIG5hbWVdLCBlbGVtLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IiArIG5hbWVd
CisgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgLy8gR2V0IG9y
IHNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBzaXplID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgb3JpZyA9IGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gcGFyc2VGbG9hdCggb3JpZyApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4galF1ZXJ5LmlzTmFOKCByZXQgKSA/IG9yaWcgOiByZXQ7CisKKyAgICAg
ICAgICAgICAgICAvLyBTZXQgdGhlIHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCAoZGVm
YXVsdCB0byBwaXhlbHMgaWYgdmFsdWUgaXMgdW5pdGxlc3MpCisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNzcyggdHlwZSwgdHlw
ZW9mIHNpemUgPT09ICJzdHJpbmciID8gc2l6ZSA6IHNpemUgKyAicHgiICk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9OworCit9KTsKKworCisvLyBFeHBvc2UgalF1ZXJ5IHRvIHRoZSBn
bG9iYWwgb2JqZWN0Cit3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Cit9KSh3aW5k
b3cpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9t
YWVvL3dlYi9saWIvbW9vdG9vbHMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3Vy
Y2VzL2Ryb21hZW8vd2ViL2xpYi9tb290b29scy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZmM3MjZiMjc4MDIxOGU1ZDU3NmY2NzRmOGUzZDg5OTIxNmU4ZmYwMy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0Ry
b21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xpYi9tb290b29scy5qcworKysgL2Rldi9udWxs
CkBAIC0xLDM5NDYgKzAsMCBAQAotLyoKLVNjcmlwdDogQ29yZS5qcwotICAgICAgICBNb29Ub29s
cyAtIE15IE9iamVjdCBPcmllbnRlZCBKYXZhU2NyaXB0IFRvb2xzLgotCi1MaWNlbnNlOgotICAg
ICAgICBNSVQtc3R5bGUgbGljZW5zZS4KLQotQ29weXJpZ2h0OgotICAgICAgICBDb3B5cmlnaHQg
KGMpIDIwMDYtMjAwOCBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cDovL21hZDRtaWxrLm5ldC8pLgot
Ci1Db2RlICYgRG9jdW1lbnRhdGlvbjoKLSAgICAgICAgW1RoZSBNb29Ub29scyBwcm9kdWN0aW9u
IHRlYW1dKGh0dHA6Ly9tb290b29scy5uZXQvZGV2ZWxvcGVycy8pLgotCi1JbnNwaXJhdGlvbjoK
LSAgICAgICAgLSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0
cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMp
IDIwMDYgRGVhbiBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXSho
dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocCkKLSAgICAgICAg
LSBTb21lIGZ1bmN0aW9uYWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3By
b3RvdHlwZWpzLm9yZykgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtN
SVQgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBo
cCkKLSovCi0KLXZhciBNb29Ub29scyA9IHsKLSAgICAgICAgJ3ZlcnNpb24nOiAnMS4yLjEnLAot
ICAgICAgICAnYnVpbGQnOiAnMGQ0ODQ1YWFiM2Q5YTRmZGVlMmYwZDRhNmRkNTkyMTBlNGI2OTdj
ZicKLX07Ci0KLXZhciBOYXRpdmUgPSBmdW5jdGlvbihvcHRpb25zKXsKLSAgICAgICAgb3B0aW9u
cyA9IG9wdGlvbnMgfHwge307Ci0gICAgICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lOwotICAg
ICAgICB2YXIgbGVnYWN5ID0gb3B0aW9ucy5sZWdhY3k7Ci0gICAgICAgIHZhciBwcm90ZWN0ID0g
b3B0aW9ucy5wcm90ZWN0OwotICAgICAgICB2YXIgbWV0aG9kcyA9IG9wdGlvbnMuaW1wbGVtZW50
OwotICAgICAgICB2YXIgZ2VuZXJpY3MgPSBvcHRpb25zLmdlbmVyaWNzOwotICAgICAgICB2YXIg
aW5pdGlhbGl6ZSA9IG9wdGlvbnMuaW5pdGlhbGl6ZTsKLSAgICAgICAgdmFyIGFmdGVySW1wbGVt
ZW50ID0gb3B0aW9ucy5hZnRlckltcGxlbWVudCB8fCBmdW5jdGlvbigpe307Ci0gICAgICAgIHZh
ciBvYmplY3QgPSBpbml0aWFsaXplIHx8IGxlZ2FjeTsKLSAgICAgICAgZ2VuZXJpY3MgPSBnZW5l
cmljcyAhPT0gZmFsc2U7Ci0KLSAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yID0gTmF0aXZlOwot
ICAgICAgICBvYmplY3QuJGZhbWlseSA9IHtuYW1lOiAnbmF0aXZlJ307Ci0gICAgICAgIGlmIChs
ZWdhY3kgJiYgaW5pdGlhbGl6ZSkgb2JqZWN0LnByb3RvdHlwZSA9IGxlZ2FjeS5wcm90b3R5cGU7
Ci0gICAgICAgIG9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBvYmplY3Q7Ci0KLSAgICAg
ICAgaWYgKG5hbWUpewotICAgICAgICAgICAgICAgIHZhciBmYW1pbHkgPSBuYW1lLnRvTG93ZXJD
YXNlKCk7Ci0gICAgICAgICAgICAgICAgb2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0ge25hbWU6
IGZhbWlseX07Ci0gICAgICAgICAgICAgICAgTmF0aXZlLnR5cGl6ZShvYmplY3QsIGZhbWlseSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgYWRkID0gZnVuY3Rpb24ob2JqLCBuYW1lLCBtZXRo
b2QsIGZvcmNlKXsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3RlY3QgfHwgZm9yY2UgfHwgIW9i
ai5wcm90b3R5cGVbbmFtZV0pIG9iai5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7Ci0gICAgICAg
ICAgICAgICAgaWYgKGdlbmVyaWNzKSBOYXRpdmUuZ2VuZXJpY2l6ZShvYmosIG5hbWUsIHByb3Rl
Y3QpOwotICAgICAgICAgICAgICAgIGFmdGVySW1wbGVtZW50LmNhbGwob2JqLCBuYW1lLCBtZXRo
b2QpOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmo7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
b2JqZWN0LmFsaWFzID0gZnVuY3Rpb24oYTEsIGEyLCBhMyl7Ci0gICAgICAgICAgICAgICAgaWYg
KHR5cGVvZiBhMSA9PSAnc3RyaW5nJyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGEx
ID0gdGhpcy5wcm90b3R5cGVbYTFdKSkgcmV0dXJuIGFkZCh0aGlzLCBhMiwgYTEsIGEzKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgYSBpbiBhMSkgdGhpcy5h
bGlhcyhhLCBhMVthXSwgYTIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICB9OwotCi0gICAgICAgIG9iamVjdC5pbXBsZW1lbnQgPSBmdW5jdGlvbihhMSwgYTIsIGEzKXsK
LSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGExID09ICdzdHJpbmcnKSByZXR1cm4gYWRkKHRo
aXMsIGExLCBhMiwgYTMpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIHAgaW4gYTEpIGFkZCh0
aGlzLCBwLCBhMVtwXSwgYTIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICB9OwotCi0gICAgICAgIGlmIChtZXRob2RzKSBvYmplY3QuaW1wbGVtZW50KG1ldGhvZHMpOwot
Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci19OwotCi1OYXRpdmUuZ2VuZXJpY2l6ZSA9IGZ1bmN0
aW9uKG9iamVjdCwgcHJvcGVydHksIGNoZWNrKXsKLSAgICAgICAgaWYgKCghY2hlY2sgfHwgIW9i
amVjdFtwcm9wZXJ0eV0pICYmIHR5cGVvZiBvYmplY3QucHJvdG90eXBlW3Byb3BlcnR5XSA9PSAn
ZnVuY3Rpb24nKSBvYmplY3RbcHJvcGVydHldID0gZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAg
ICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5wcm90b3R5cGVbcHJvcGVydHldLmFwcGx5KGFyZ3Mu
c2hpZnQoKSwgYXJncyk7Ci0gICAgICAgIH07Ci19OwotCi1OYXRpdmUuaW1wbGVtZW50ID0gZnVu
Y3Rpb24ob2JqZWN0cywgcHJvcGVydGllcyl7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
b2JqZWN0cy5sZW5ndGg7IGkgPCBsOyBpKyspIG9iamVjdHNbaV0uaW1wbGVtZW50KHByb3BlcnRp
ZXMpOwotfTsKLQotTmF0aXZlLnR5cGl6ZSA9IGZ1bmN0aW9uKG9iamVjdCwgZmFtaWx5KXsKLSAg
ICAgICAgaWYgKCFvYmplY3QudHlwZSkgb2JqZWN0LnR5cGUgPSBmdW5jdGlvbihpdGVtKXsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gKCR0eXBlKGl0ZW0pID09PSBmYW1pbHkpOwotICAgICAgICB9
OwotfTsKLQotKGZ1bmN0aW9uKCl7Ci0gICAgICAgIHZhciBuYXRpdmVzID0geydBcnJheSc6IEFy
cmF5LCAnRGF0ZSc6IERhdGUsICdGdW5jdGlvbic6IEZ1bmN0aW9uLCAnTnVtYmVyJzogTnVtYmVy
LCAnUmVnRXhwJzogUmVnRXhwLCAnU3RyaW5nJzogU3RyaW5nfTsKLSAgICAgICAgZm9yICh2YXIg
biBpbiBuYXRpdmVzKSBuZXcgTmF0aXZlKHtuYW1lOiBuLCBpbml0aWFsaXplOiBuYXRpdmVzW25d
LCBwcm90ZWN0OiB0cnVlfSk7Ci0KLSAgICAgICAgdmFyIHR5cGVzID0geydib29sZWFuJzogQm9v
bGVhbiwgJ25hdGl2ZSc6IE5hdGl2ZSwgJ29iamVjdCc6IE9iamVjdH07Ci0gICAgICAgIGZvciAo
dmFyIHQgaW4gdHlwZXMpIE5hdGl2ZS50eXBpemUodHlwZXNbdF0sIHQpOwotCi0gICAgICAgIHZh
ciBnZW5lcmljcyA9IHsKLSAgICAgICAgICAgICAgICAnQXJyYXknOiBbImNvbmNhdCIsICJpbmRl
eE9mIiwgImpvaW4iLCAibGFzdEluZGV4T2YiLCAicG9wIiwgInB1c2giLCAicmV2ZXJzZSIsICJz
aGlmdCIsICJzbGljZSIsICJzb3J0IiwgInNwbGljZSIsICJ0b1N0cmluZyIsICJ1bnNoaWZ0Iiwg
InZhbHVlT2YiXSwKLSAgICAgICAgICAgICAgICAnU3RyaW5nJzogWyJjaGFyQXQiLCAiY2hhckNv
ZGVBdCIsICJjb25jYXQiLCAiaW5kZXhPZiIsICJsYXN0SW5kZXhPZiIsICJtYXRjaCIsICJyZXBs
YWNlIiwgInNlYXJjaCIsICJzbGljZSIsICJzcGxpdCIsICJzdWJzdHIiLCAic3Vic3RyaW5nIiwg
InRvTG93ZXJDYXNlIiwgInRvVXBwZXJDYXNlIiwgInZhbHVlT2YiXQotICAgICAgICB9OwotICAg
ICAgICBmb3IgKHZhciBnIGluIGdlbmVyaWNzKXsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gZ2VuZXJpY3NbZ10ubGVuZ3RoOyBpLS07KSBOYXRpdmUuZ2VuZXJpY2l6ZSh3aW5kb3dbZ10s
IGdlbmVyaWNzW2ddW2ldLCB0cnVlKTsKLSAgICAgICAgfTsKLX0pKCk7Ci0KLXZhciBIYXNoID0g
bmV3IE5hdGl2ZSh7Ci0KLSAgICAgICAgbmFtZTogJ0hhc2gnLAotCi0gICAgICAgIGluaXRpYWxp
emU6IGZ1bmN0aW9uKG9iamVjdCl7Ci0gICAgICAgICAgICAgICAgaWYgKCR0eXBlKG9iamVjdCkg
PT0gJ2hhc2gnKSBvYmplY3QgPSAkdW5saW5rKG9iamVjdC5nZXRDbGVhbigpKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB0aGlzW2tleV0gPSBvYmplY3Rba2V5XTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi19KTsKLQotSGFzaC5p
bXBsZW1lbnQoewotCi0gICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcyl7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBmbi5jYWxsKGJpbmQsIHRoaXNba2V5XSwg
a2V5LCB0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0
Q2xlYW46IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgdmFyIGNsZWFuID0ge307Ci0gICAg
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMpewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkgY2xlYW5ba2V5XSA9IHRoaXNba2V5XTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFuOwotICAgICAg
ICB9LAotCi0gICAgICAgIGdldExlbmd0aDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB2
YXIgbGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcyl7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBsZW5n
dGgrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDsK
LSAgICAgICAgfQotCi19KTsKLQotSGFzaC5hbGlhcygnZm9yRWFjaCcsICdlYWNoJyk7Ci0KLUFy
cmF5LmltcGxlbWVudCh7Ci0KLSAgICAgICAgZm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpewot
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
KyspIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7Ci0gICAgICAgIH0KLQotfSk7Ci0K
LUFycmF5LmFsaWFzKCdmb3JFYWNoJywgJ2VhY2gnKTsKLQotZnVuY3Rpb24gJEEoaXRlcmFibGUp
ewotICAgICAgICBpZiAoaXRlcmFibGUuaXRlbSl7Ci0gICAgICAgICAgICAgICAgdmFyIGFycmF5
ID0gW107Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVyYWJsZS5sZW5n
dGg7IGkgPCBsOyBpKyspIGFycmF5W2ldID0gaXRlcmFibGVbaV07Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGFycmF5OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChpdGVyYWJsZSk7Ci19OwotCi1mdW5jdGlvbiAkYXJndW1lbnRzKGkpewotICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRz
W2ldOwotICAgICAgICB9OwotfTsKLQotZnVuY3Rpb24gJGNoayhvYmopewotICAgICAgICByZXR1
cm4gISEob2JqIHx8IG9iaiA9PT0gMCk7Ci19OwotCi1mdW5jdGlvbiAkY2xlYXIodGltZXIpewot
ICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOwotICAgICAgICBjbGVhckludGVydmFsKHRpbWVy
KTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci19OwotCi1mdW5jdGlvbiAkZGVmaW5lZChvYmopewot
ICAgICAgICByZXR1cm4gKG9iaiAhPSB1bmRlZmluZWQpOwotfTsKLQotZnVuY3Rpb24gJGVhY2go
aXRlcmFibGUsIGZuLCBiaW5kKXsKLSAgICAgICAgdmFyIHR5cGUgPSAkdHlwZShpdGVyYWJsZSk7
Ci0gICAgICAgICgodHlwZSA9PSAnYXJndW1lbnRzJyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8
fCB0eXBlID09ICdhcnJheScpID8gQXJyYXkgOiBIYXNoKS5lYWNoKGl0ZXJhYmxlLCBmbiwgYmlu
ZCk7Ci19OwotCi1mdW5jdGlvbiAkZW1wdHkoKXt9OwotCi1mdW5jdGlvbiAkZXh0ZW5kKG9yaWdp
bmFsLCBleHRlbmRlZCl7Ci0gICAgICAgIGZvciAodmFyIGtleSBpbiAoZXh0ZW5kZWQgfHwge30p
KSBvcmlnaW5hbFtrZXldID0gZXh0ZW5kZWRba2V5XTsKLSAgICAgICAgcmV0dXJuIG9yaWdpbmFs
OwotfTsKLQotZnVuY3Rpb24gJEgob2JqZWN0KXsKLSAgICAgICAgcmV0dXJuIG5ldyBIYXNoKG9i
amVjdCk7Ci19OwotCi1mdW5jdGlvbiAkbGFtYmRhKHZhbHVlKXsKLSAgICAgICAgcmV0dXJuICh0
eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykgPyB2YWx1ZSA6IGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB9OwotfTsKLQotZnVuY3Rpb24gJG1lcmdl
KCl7Ci0gICAgICAgIHZhciBtaXggPSB7fTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBh
cmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKLSAgICAgICAgICAgICAgICB2YXIgb2JqZWN0
ID0gYXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAgIGlmICgkdHlwZShvYmplY3QpICE9ICdv
YmplY3QnKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0
KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcCA9IG9iamVjdFtrZXldLCBtcCA9IG1p
eFtrZXldOwotICAgICAgICAgICAgICAgICAgICAgICAgbWl4W2tleV0gPSAobXAgJiYgJHR5cGUo
b3ApID09ICdvYmplY3QnICYmICR0eXBlKG1wKSA9PSAnb2JqZWN0JykgPyAkbWVyZ2UobXAsIG9w
KSA6ICR1bmxpbmsob3ApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbWl4OwotfTsKLQotZnVuY3Rpb24gJHBpY2soKXsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKLSAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzW2ldICE9IHVuZGVmaW5lZCkgcmV0dXJuIGFyZ3VtZW50c1tpXTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLX07Ci0KLWZ1bmN0aW9uICRyYW5kb20obWluLCBt
YXgpewotICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1p
biArIDEpICsgbWluKTsKLX07Ci0KLWZ1bmN0aW9uICRzcGxhdChvYmopewotICAgICAgICB2YXIg
dHlwZSA9ICR0eXBlKG9iaik7Ci0gICAgICAgIHJldHVybiAodHlwZSkgPyAoKHR5cGUgIT0gJ2Fy
cmF5JyAmJiB0eXBlICE9ICdhcmd1bWVudHMnKSA/IFtvYmpdIDogb2JqKSA6IFtdOwotfTsKLQot
dmFyICR0aW1lID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKXsKLSAgICAgICAgcmV0dXJuICtuZXcg
RGF0ZTsKLX07Ci0KLWZ1bmN0aW9uICR0cnkoKXsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwg
PSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKLSAgICAgICAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1tpXSgpOwotICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZSl7fQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotfTsK
LQotZnVuY3Rpb24gJHR5cGUob2JqKXsKLSAgICAgICAgaWYgKG9iaiA9PSB1bmRlZmluZWQpIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG9iai4kZmFtaWx5KSByZXR1cm4gKG9iai4kZmFtaWx5
Lm5hbWUgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKG9iaikpID8gZmFsc2UgOiBvYmouJGZhbWls
eS5uYW1lOwotICAgICAgICBpZiAob2JqLm5vZGVOYW1lKXsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKG9iai5ub2RlVHlwZSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVy
biAnZWxlbWVudCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAoL1xT
LykudGVzdChvYmoubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmoubGVuZ3RoID09ICdu
dW1iZXInKXsKLSAgICAgICAgICAgICAgICBpZiAob2JqLmNhbGxlZSkgcmV0dXJuICdhcmd1bWVu
dHMnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iai5pdGVtKSByZXR1cm4gJ2NvbGxlY3Rp
b24nOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqOwotfTsKLQotZnVuY3Rp
b24gJHVubGluayhvYmplY3QpewotICAgICAgICB2YXIgdW5saW5rZWQ7Ci0gICAgICAgIHN3aXRj
aCAoJHR5cGUob2JqZWN0KSl7Ci0gICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHVubGlua2VkID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBwIGluIG9iamVjdCkgdW5saW5rZWRbcF0gPSAkdW5saW5rKG9iamVjdFtwXSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnaGFzaCc6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZCA9IG5ldyBIYXNoKG9iamVjdCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnYXJyYXknOgotICAgICAg
ICAgICAgICAgICAgICAgICAgdW5saW5rZWQgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gb2JqZWN0Lmxlbmd0aDsgaSA8IGw7IGkrKykgdW5saW5rZWRb
aV0gPSAkdW5saW5rKG9iamVjdFtpXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG9iamVjdDsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdW5saW5rZWQ7Ci19OwotCi0KLS8qCi1TY3JpcHQ6IEJyb3dzZXIuanMKLSAgICAgICAgVGhl
IEJyb3dzZXIgQ29yZS4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFsaXphdGlvbiwgV2luZG93IGFu
ZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guCi0KLUxpY2Vuc2U6Ci0gICAgICAgIE1J
VC1zdHlsZSBsaWNlbnNlLgotKi8KLQotdmFyIEJyb3dzZXIgPSAkbWVyZ2UoewotCi0gICAgICAg
IEVuZ2luZToge25hbWU6ICd1bmtub3duJywgdmVyc2lvbjogMH0sCi0KLSAgICAgICAgUGxhdGZv
cm06IHtuYW1lOiAod2luZG93Lm9yaWVudGF0aW9uICE9IHVuZGVmaW5lZCkgPyAnaXBvZCcgOiAo
bmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpIHx8IFsnb3RoZXInXSlb
MF0udG9Mb3dlckNhc2UoKX0sCi0KLSAgICAgICAgRmVhdHVyZXM6IHt4cGF0aDogISEoZG9jdW1l
bnQuZXZhbHVhdGUpLCBhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSwgcXVlcnk6ICEhKGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IpfSwKLQotICAgICAgICBQbHVnaW5zOiB7fSwKLQotICAgICAgICBFbmdp
bmVzOiB7Ci0KLSAgICAgICAgICAgICAgICBwcmVzdG86IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKCF3aW5kb3cub3BlcmEpID8gZmFsc2UgOiAoKGFyZ3VtZW50
cy5jYWxsZWUuY2FsbGVyKSA/IDk2MCA6ICgoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSkgPyA5NTAgOiA5MjUpKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAg
dHJpZGVudDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIXdp
bmRvdy5BY3RpdmVYT2JqZWN0KSA/IGZhbHNlIDogKCh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpID8g
NSA6IDQpOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICB3ZWJraXQ6IGZ1
bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5hdmlnYXRvci50YWlu
dEVuYWJsZWQpID8gZmFsc2UgOiAoKEJyb3dzZXIuRmVhdHVyZXMueHBhdGgpID8gKChCcm93c2Vy
LkZlYXR1cmVzLnF1ZXJ5KSA/IDUyNSA6IDQyMCkgOiA0MTkpOwotICAgICAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgICAgICBnZWNrbzogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAoZG9jdW1lbnQuZ2V0Qm94T2JqZWN0Rm9yID09IHVuZGVmaW5lZCkgPyBm
YWxzZSA6ICgoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgPyAxOSA6IDE4KTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi19LCBCcm93c2VyIHx8IHt9KTsKLQotQnJv
d3Nlci5QbGF0Zm9ybVtCcm93c2VyLlBsYXRmb3JtLm5hbWVdID0gdHJ1ZTsKLQotQnJvd3Nlci5k
ZXRlY3QgPSBmdW5jdGlvbigpewotCi0gICAgICAgIGZvciAodmFyIGVuZ2luZSBpbiB0aGlzLkVu
Z2luZXMpewotICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gdGhpcy5FbmdpbmVzW2VuZ2lu
ZV0oKTsKLSAgICAgICAgICAgICAgICBpZiAodmVyc2lvbil7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLkVuZ2luZSA9IHtuYW1lOiBlbmdpbmUsIHZlcnNpb246IHZlcnNpb259OwotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5FbmdpbmVbZW5naW5lXSA9IHRoaXMuRW5naW5lW2Vu
Z2luZSArIHZlcnNpb25dID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7bmFtZTogZW5n
aW5lLCB2ZXJzaW9uOiB2ZXJzaW9ufTsKLQotfTsKLQotQnJvd3Nlci5kZXRlY3QoKTsKLQotQnJv
d3Nlci5SZXF1ZXN0ID0gZnVuY3Rpb24oKXsKLSAgICAgICAgcmV0dXJuICR0cnkoZnVuY3Rpb24o
KXsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgICAg
IH0sIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0
KCdNU1hNTDIuWE1MSFRUUCcpOwotICAgICAgICB9KTsKLX07Ci0KLUJyb3dzZXIuRmVhdHVyZXMu
eGhyID0gISEoQnJvd3Nlci5SZXF1ZXN0KCkpOwotCi1Ccm93c2VyLlBsdWdpbnMuRmxhc2ggPSAo
ZnVuY3Rpb24oKXsKLSAgICAgICAgdmFyIHZlcnNpb24gPSAoJHRyeShmdW5jdGlvbigpewotICAg
ICAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3IucGx1Z2luc1snU2hvY2t3YXZlIEZsYXNoJ10u
ZGVzY3JpcHRpb247Ci0gICAgICAgIH0sIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCcpLkdl
dFZhcmlhYmxlKCckdmVyc2lvbicpOwotICAgICAgICB9KSB8fCAnMCByMCcpLm1hdGNoKC9cZCsv
Zyk7Ci0gICAgICAgIHJldHVybiB7dmVyc2lvbjogcGFyc2VJbnQodmVyc2lvblswXSB8fCAwICsg
Jy4nICsgdmVyc2lvblsxXSB8fCAwKSwgYnVpbGQ6IHBhcnNlSW50KHZlcnNpb25bMl0gfHwgMCl9
OwotfSkoKTsKLQotZnVuY3Rpb24gJGV4ZWModGV4dCl7Ci0gICAgICAgIGlmICghdGV4dCkgcmV0
dXJuIHRleHQ7Ci0gICAgICAgIGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7Ci0gICAgICAgICAgICAg
ICAgd2luZG93LmV4ZWNTY3JpcHQodGV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwotICAg
ICAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0
Jyk7Ci0gICAgICAgICAgICAgICAgc2NyaXB0WyhCcm93c2VyLkVuZ2luZS53ZWJraXQgJiYgQnJv
d3Nlci5FbmdpbmUudmVyc2lvbiA8IDQyMCkgPyAnaW5uZXJUZXh0JyA6ICd0ZXh0J10gPSB0ZXh0
OwotICAgICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKLSAg
ICAgICAgICAgICAgICBkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRleHQ7Ci19OwotCi1OYXRpdmUuVUlEID0gMTsKLQotdmFyICR1
aWQgPSAoQnJvd3Nlci5FbmdpbmUudHJpZGVudCkgPyBmdW5jdGlvbihpdGVtKXsKLSAgICAgICAg
cmV0dXJuIChpdGVtLnVpZCB8fCAoaXRlbS51aWQgPSBbTmF0aXZlLlVJRCsrXSkpWzBdOwotfSA6
IGZ1bmN0aW9uKGl0ZW0pewotICAgICAgICByZXR1cm4gaXRlbS51aWQgfHwgKGl0ZW0udWlkID0g
TmF0aXZlLlVJRCsrKTsKLX07Ci0KLXZhciBXaW5kb3cgPSBuZXcgTmF0aXZlKHsKLQotICAgICAg
ICBuYW1lOiAnV2luZG93JywKLQotICAgICAgICBsZWdhY3k6IChCcm93c2VyLkVuZ2luZS50cmlk
ZW50KSA/IG51bGw6IHdpbmRvdy5XaW5kb3csCi0KLSAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rp
b24od2luKXsKLSAgICAgICAgICAgICAgICAkdWlkKHdpbik7Ci0gICAgICAgICAgICAgICAgaWYg
KCF3aW4uRWxlbWVudCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aW4uRWxlbWVudCA9ICRl
bXB0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCcm93c2VyLkVuZ2luZS53ZWJraXQp
IHdpbi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsgLy9maXhlcyBzYWZhcmkgMgot
ICAgICAgICAgICAgICAgICAgICAgICAgd2luLkVsZW1lbnQucHJvdG90eXBlID0gKEJyb3dzZXIu
RW5naW5lLndlYmtpdCkgPyB3aW5kb3dbIltbRE9NRWxlbWVudC5wcm90b3R5cGVdXSJdIDoge307
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdpbi5kb2N1bWVudC53aW5kb3cg
PSB3aW47Ci0gICAgICAgICAgICAgICAgcmV0dXJuICRleHRlbmQod2luLCBXaW5kb3cuUHJvdG90
eXBlKTsKLSAgICAgICAgfSwKLQotICAgICAgICBhZnRlckltcGxlbWVudDogZnVuY3Rpb24ocHJv
cGVydHksIHZhbHVlKXsKLSAgICAgICAgICAgICAgICB3aW5kb3dbcHJvcGVydHldID0gV2luZG93
LlByb3RvdHlwZVtwcm9wZXJ0eV0gPSB2YWx1ZTsKLSAgICAgICAgfQotCi19KTsKLQotV2luZG93
LlByb3RvdHlwZSA9IHskZmFtaWx5OiB7bmFtZTogJ3dpbmRvdyd9fTsKLQotbmV3IFdpbmRvdyh3
aW5kb3cpOwotCi12YXIgRG9jdW1lbnQgPSBuZXcgTmF0aXZlKHsKLQotICAgICAgICBuYW1lOiAn
RG9jdW1lbnQnLAotCi0gICAgICAgIGxlZ2FjeTogKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpID8g
bnVsbDogd2luZG93LkRvY3VtZW50LAotCi0gICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGRv
Yyl7Ci0gICAgICAgICAgICAgICAgJHVpZChkb2MpOwotICAgICAgICAgICAgICAgIGRvYy5oZWFk
ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07Ci0gICAgICAgICAgICAgICAg
ZG9jLmh0bWwgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXTsKLSAgICAgICAg
ICAgICAgICBpZiAoQnJvd3Nlci5FbmdpbmUudHJpZGVudCAmJiBCcm93c2VyLkVuZ2luZS52ZXJz
aW9uIDw9IDQpICR0cnkoZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5l
eGVjQ29tbWFuZCgiQmFja2dyb3VuZEltYWdlQ2FjaGUiLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp
IGRvYy53aW5kb3cuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkb2Mud2luZG93LmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIGFyZ3Vt
ZW50cy5jYWxsZWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZG9jLmhlYWQgPSBkb2MuaHRt
bCA9IGRvYy53aW5kb3cgPSBudWxsOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIHJldHVybiAkZXh0ZW5kKGRvYywgRG9jdW1lbnQuUHJvdG90eXBlKTsKLSAgICAgICAgfSwK
LQotICAgICAgICBhZnRlckltcGxlbWVudDogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXsKLSAg
ICAgICAgICAgICAgICBkb2N1bWVudFtwcm9wZXJ0eV0gPSBEb2N1bWVudC5Qcm90b3R5cGVbcHJv
cGVydHldID0gdmFsdWU7Ci0gICAgICAgIH0KLQotfSk7Ci0KLURvY3VtZW50LlByb3RvdHlwZSA9
IHskZmFtaWx5OiB7bmFtZTogJ2RvY3VtZW50J319OwotCi1uZXcgRG9jdW1lbnQoZG9jdW1lbnQp
OwotCi0KLS8qCi1TY3JpcHQ6IEFycmF5LmpzCi0gICAgICAgIENvbnRhaW5zIEFycmF5IFByb3Rv
dHlwZXMgbGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLgotCi1MaWNlbnNlOgotICAgICAg
ICBNSVQtc3R5bGUgbGljZW5zZS4KLSovCi0KLUFycmF5LmltcGxlbWVudCh7Ci0KLSAgICAgICAg
ZXZlcnk6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSwK
LQotICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKLSAgICAgICAgICAgICAgICB2
YXIgcmVzdWx0cyA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKyspewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZuLmNh
bGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJlc3VsdHMucHVzaCh0aGlzW2ldKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgY2xlYW46IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbHRlcigkZGVmaW5lZCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaW5kZXhPZjogZnVu
Y3Rpb24oaXRlbSwgZnJvbSl7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMubGVuZ3Ro
OwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwg
bGVuICsgZnJvbSkgOiBmcm9tIHx8IDA7IGkgPCBsZW47IGkrKyl7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSwKLQotICAgICAgICBtYXA6
IGZ1bmN0aW9uKGZuLCBiaW5kKXsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOwot
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
KyspIHJlc3VsdHNbaV0gPSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpOwotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICB9LAotCi0gICAgICAgIHNvbWU6IGZ1
bmN0aW9uKGZuLCBiaW5kKXsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbi5j
YWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9LAotCi0gICAgICAg
IGFzc29jaWF0ZTogZnVuY3Rpb24oa2V5cyl7Ci0gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHt9
LCBsZW5ndGggPSBNYXRoLm1pbih0aGlzLmxlbmd0aCwga2V5cy5sZW5ndGgpOwotICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG9ialtrZXlzW2ldXSA9IHRo
aXNbaV07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iajsKLSAgICAgICAgfSwKLQotICAgICAg
ICBsaW5rOiBmdW5jdGlvbihvYmplY3QpewotICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7
fTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwg
bDsgaSsrKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3Qp
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0odGhpc1tp
XSkpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXld
ID0gdGhpc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgb2JqZWN0W2tleV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfSwKLQotICAgICAgICBjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJv
bSl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAt
MTsKLSAgICAgICAgfSwKLQotICAgICAgICBleHRlbmQ6IGZ1bmN0aW9uKGFycmF5KXsKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKykg
dGhpcy5wdXNoKGFycmF5W2ldKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAg
ICAgfSwKLQotICAgICAgICBnZXRMYXN0OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJl
dHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIDogbnVsbDsKLSAgICAg
ICAgfSwKLQotICAgICAgICBnZXRSYW5kb206IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0aGlzWyRyYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0g
OiBudWxsOwotICAgICAgICB9LAotCi0gICAgICAgIGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pewot
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250YWlucyhpdGVtKSkgdGhpcy5wdXNoKGl0ZW0p
OwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGNv
bWJpbmU6IGZ1bmN0aW9uKGFycmF5KXsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5W2ldKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBlcmFzZTog
ZnVuY3Rpb24oaXRlbSl7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3Ro
OyBpLS07IGkpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IGl0ZW0p
IHRoaXMuc3BsaWNlKGksIDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBlbXB0eTogZnVuY3Rpb24oKXsKLSAg
ICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmxhdHRlbjogZnVuY3Rpb24oKXsKLSAgICAgICAg
ICAgICAgICB2YXIgYXJyYXkgPSBbXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB0eXBlID0gJHR5cGUodGhpc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5
cGUpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBhcnJheS5jb25j
YXQoKHR5cGUgPT0gJ2FycmF5JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdh
cmd1bWVudHMnKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9LAotCi0g
ICAgICAgIGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7Ci0gICAgICAgICAgICAgICAgaWYgKHRo
aXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIHZhciByZ2IgPSB0
aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFs
dWUubGVuZ3RoID09IDEpIHZhbHVlICs9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLnRvSW50KDE2KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gKGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJzsKLSAgICAgICAg
fSwKLQotICAgICAgICByZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpewotICAgICAgICAgICAgICAg
IGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIGlmICh0
aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAndHJhbnNw
YXJlbnQnOwotICAgICAgICAgICAgICAgIHZhciBoZXggPSBbXTsKLSAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
Yml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsg
aGV4LmpvaW4oJycpOwotICAgICAgICB9Ci0KLX0pOwotCi0KLS8qCi1TY3JpcHQ6IEZ1bmN0aW9u
LmpzCi0gICAgICAgIENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlrZSBjcmVhdGUsIGJp
bmQsIHBhc3MsIGFuZCBkZWxheS4KLQotTGljZW5zZToKLSAgICAgICAgTUlULXN0eWxlIGxpY2Vu
c2UuCi0qLwotCi1GdW5jdGlvbi5pbXBsZW1lbnQoewotCi0gICAgICAgIGV4dGVuZDogZnVuY3Rp
b24ocHJvcGVydGllcyl7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJv
cGVydGllcykgdGhpc1twcm9wZXJ0eV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5XTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGU6IGZ1bmN0
aW9uKG9wdGlvbnMpewotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAg
ICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oZXZlbnQpewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBvcHRp
b25zLmFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoYXJncyAhPSB1
bmRlZmluZWQpID8gJHNwbGF0KGFyZ3MpIDogQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAob3B0aW9u
cy5ldmVudCkgPyAxIDogMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5l
dmVudCkgYXJncyA9IFtldmVudCB8fCB3aW5kb3cuZXZlbnRdLmV4dGVuZChhcmdzKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5zID0gZnVuY3Rpb24oKXsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXBwbHkob3B0aW9ucy5iaW5kIHx8IG51
bGwsIGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcHRpb25zLmRlbGF5KSByZXR1cm4gc2V0VGltZW91dChyZXR1cm5zLCBvcHRp
b25zLmRlbGF5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBlcmlvZGlj
YWwpIHJldHVybiBzZXRJbnRlcnZhbChyZXR1cm5zLCBvcHRpb25zLnBlcmlvZGljYWwpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXR0ZW1wdCkgcmV0dXJuICR0cnkocmV0
dXJucyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJucygpOwotICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcnVuOiBmdW5jdGlvbihhcmdzLCBi
aW5kKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseShiaW5kLCAkc3BsYXQoYXJn
cykpOwotICAgICAgICB9LAotCi0gICAgICAgIHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpewot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSh7YmluZDogYmluZCwgYXJndW1lbnRz
OiBhcmdzfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYmluZDogZnVuY3Rpb24oYmluZCwgYXJn
cyl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHtiaW5kOiBiaW5kLCBhcmd1
bWVudHM6IGFyZ3N9KTsKLSAgICAgICAgfSwKLQotICAgICAgICBiaW5kV2l0aEV2ZW50OiBmdW5j
dGlvbihiaW5kLCBhcmdzKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe2Jp
bmQ6IGJpbmQsIGFyZ3VtZW50czogYXJncywgZXZlbnQ6IHRydWV9KTsKLSAgICAgICAgfSwKLQot
ICAgICAgICBhdHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6IGJpbmQsIGFyZ3VtZW50czogYXJncywgYXR0ZW1wdDog
dHJ1ZX0pKCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGVsYXk6IGZ1bmN0aW9uKGRlbGF5LCBi
aW5kLCBhcmdzKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6IGJp
bmQsIGFyZ3VtZW50czogYXJncywgZGVsYXk6IGRlbGF5fSkoKTsKLSAgICAgICAgfSwKLQotICAg
ICAgICBwZXJpb2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6IGJpbmQsIGFyZ3VtZW50czogYXJn
cywgcGVyaW9kaWNhbDogcGVyaW9kaWNhbH0pKCk7Ci0gICAgICAgIH0KLQotfSk7Ci0KLQotLyoK
LVNjcmlwdDogTnVtYmVyLmpzCi0gICAgICAgIENvbnRhaW5zIE51bWJlciBQcm90b3R5cGVzIGxp
a2UgbGltaXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuCi0KLUxpY2Vuc2U6Ci0gICAgICAgIE1J
VC1zdHlsZSBsaWNlbnNlLgotKi8KLQotTnVtYmVyLmltcGxlbWVudCh7Ci0KLSAgICAgICAgbGlt
aXQ6IGZ1bmN0aW9uKG1pbiwgbWF4KXsKLSAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4o
bWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTsKLSAgICAgICAgfSwKLQotICAgICAgICByb3VuZDog
ZnVuY3Rpb24ocHJlY2lzaW9uKXsKLSAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBNYXRoLnBv
dygxMCwgcHJlY2lzaW9uIHx8IDApOwotICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5k
KHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uOwotICAgICAgICB9LAotCi0gICAgICAgIHRp
bWVzOiBmdW5jdGlvbihmbiwgYmluZCl7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzOyBpKyspIGZuLmNhbGwoYmluZCwgaSwgdGhpcyk7Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgdG9GbG9hdDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VG
bG9hdCh0aGlzKTsKLSAgICAgICAgfSwKLQotICAgICAgICB0b0ludDogZnVuY3Rpb24oYmFzZSl7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApOwotICAg
ICAgICB9Ci0KLX0pOwotCi1OdW1iZXIuYWxpYXMoJ3RpbWVzJywgJ2VhY2gnKTsKLQotKGZ1bmN0
aW9uKG1hdGgpewotICAgICAgICB2YXIgbWV0aG9kcyA9IHt9OwotICAgICAgICBtYXRoLmVhY2go
ZnVuY3Rpb24obmFtZSl7Ci0gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXJbbmFtZV0pIG1ldGhv
ZHNbbmFtZV0gPSBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1h
dGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7Ci0gICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci0gICAgICAgIE51bWJlci5pbXBsZW1lbnQobWV0
aG9kcyk7Ci19KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFuMicsICdjZWls
JywgJ2NvcycsICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAncG93JywgJ3Np
bicsICdzcXJ0JywgJ3RhbiddKTsKLQotCi0vKgotU2NyaXB0OiBTdHJpbmcuanMKLSAgICAgICAg
Q29udGFpbnMgU3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRl
c3QsIGFuZCB0b0ludC4KLQotTGljZW5zZToKLSAgICAgICAgTUlULXN0eWxlIGxpY2Vuc2UuCi0q
LwotCi1TdHJpbmcuaW1wbGVtZW50KHsKLQotICAgICAgICB0ZXN0OiBmdW5jdGlvbihyZWdleCwg
cGFyYW1zKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gKCh0eXBlb2YgcmVnZXggPT0gJ3N0cmlu
ZycpID8gbmV3IFJlZ0V4cChyZWdleCwgcGFyYW1zKSA6IHJlZ2V4KS50ZXN0KHRoaXMpOwotICAg
ICAgICB9LAotCi0gICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIHNlcGFyYXRvcil7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzZXBhcmF0b3IpID8gKHNlcGFyYXRvciArIHRoaXMg
KyBzZXBhcmF0b3IpLmluZGV4T2Yoc2VwYXJhdG9yICsgc3RyaW5nICsgc2VwYXJhdG9yKSA+IC0x
IDogdGhpcy5pbmRleE9mKHN0cmluZykgPiAtMTsKLSAgICAgICAgfSwKLQotICAgICAgICB0cmlt
OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL15ccyt8
XHMrJC9nLCAnJyk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY2xlYW46IGZ1bmN0aW9uKCl7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwot
ICAgICAgICB9LAotCi0gICAgICAgIGNhbWVsQ2FzZTogZnVuY3Rpb24oKXsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC8tXEQvZywgZnVuY3Rpb24obWF0Y2gpewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpOwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAgIGh5cGhlbmF0ZTogZnVu
Y3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9bQS1aXS9nLCBm
dW5jdGlvbihtYXRjaCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCctJyArIG1h
dGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSwKLQotICAgICAgICBjYXBpdGFsaXplOiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnJlcGxhY2UoL1xiW2Etel0vZywgZnVuY3Rpb24obWF0Y2gpewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigp
ewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xd
XC9cXF0pL2csICdcXCQxJyk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgdG9JbnQ6IGZ1bmN0aW9u
KGJhc2UpewotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEw
KTsKLSAgICAgICAgfSwKLQotICAgICAgICB0b0Zsb2F0OiBmdW5jdGlvbigpewotICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMpOwotICAgICAgICB9LAotCi0gICAgICAgIGhl
eFRvUmdiOiBmdW5jdGlvbihhcnJheSl7Ci0gICAgICAgICAgICAgICAgdmFyIGhleCA9IHRoaXMu
bWF0Y2goL14jPyhcd3sxLDJ9KShcd3sxLDJ9KShcd3sxLDJ9KSQvKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpIDogbnVsbDsKLSAg
ICAgICAgfSwKLQotICAgICAgICByZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpewotICAgICAgICAg
ICAgICAgIHZhciByZ2IgPSB0aGlzLm1hdGNoKC9cZHsxLDN9L2cpOwotICAgICAgICAgICAgICAg
IHJldHVybiAocmdiKSA/IHJnYi5yZ2JUb0hleChhcnJheSkgOiBudWxsOwotICAgICAgICB9LAot
Ci0gICAgICAgIHN0cmlwU2NyaXB0czogZnVuY3Rpb24ob3B0aW9uKXsKLSAgICAgICAgICAgICAg
ICB2YXIgc2NyaXB0cyA9ICcnOwotICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gdGhpcy5yZXBs
YWNlKC88c2NyaXB0W14+XSo+KFtcc1xTXSo/KTxcL3NjcmlwdD4vZ2ksIGZ1bmN0aW9uKCl7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzICs9IGFyZ3VtZW50c1sxXSArICdcbic7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gdHJ1ZSkgJGV4ZWMoc2NyaXB0cyk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoJHR5cGUob3B0aW9uKSA9PSAnZnVuY3Rpb24nKSBvcHRpb24o
c2NyaXB0cywgdGV4dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgc3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdleHApewotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2UocmVnZXhwIHx8ICgvXFw/XHsoW157fV0rKVx9
L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bWF0Y2guY2hhckF0KDApID09ICdcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAob2JqZWN0W25hbWVdICE9IHVuZGVmaW5lZCkgPyBvYmpl
Y3RbbmFtZV0gOiAnJzsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi19KTsKLQot
Ci0vKgotU2NyaXB0OiBIYXNoLmpzCi0gICAgICAgIENvbnRhaW5zIEhhc2ggUHJvdG90eXBlcy4g
UHJvdmlkZXMgYSBtZWFucyBmb3Igb3ZlcmNvbWluZyB0aGUgSmF2YVNjcmlwdCBwcmFjdGljYWwg
aW1wb3NzaWJpbGl0eSBvZiBleHRlbmRpbmcgbmF0aXZlIE9iamVjdHMuCi0KLUxpY2Vuc2U6Ci0g
ICAgICAgIE1JVC1zdHlsZSBsaWNlbnNlLgotKi8KLQotSGFzaC5pbXBsZW1lbnQoewotCi0gICAg
ICAgIGhhczogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKLQotICAgICAgICBrZXlP
ZjogZnVuY3Rpb24odmFsdWUpewotICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlz
KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkg
JiYgdGhpc1trZXldID09PSB2YWx1ZSkgcmV0dXJuIGtleTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaGFzVmFs
dWU6IGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gKEhhc2gua2V5T2Yo
dGhpcywgdmFsdWUpICE9PSBudWxsKTsKLSAgICAgICAgfSwKLQotICAgICAgICBleHRlbmQ6IGZ1
bmN0aW9uKHByb3BlcnRpZXMpewotICAgICAgICAgICAgICAgIEhhc2guZWFjaChwcm9wZXJ0aWVz
LCBmdW5jdGlvbih2YWx1ZSwga2V5KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhc2guc2V0
KHRoaXMsIGtleSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGNvbWJpbmU6IGZ1bmN0
aW9uKHByb3BlcnRpZXMpewotICAgICAgICAgICAgICAgIEhhc2guZWFjaChwcm9wZXJ0aWVzLCBm
dW5jdGlvbih2YWx1ZSwga2V5KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhc2guaW5jbHVk
ZSh0aGlzLCBrZXksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBlcmFzZTogZnVuY3Rp
b24oa2V5KXsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBk
ZWxldGUgdGhpc1trZXldOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
LAotCi0gICAgICAgIGdldDogZnVuY3Rpb24oa2V5KXsKLSAgICAgICAgICAgICAgICByZXR1cm4g
KHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkgPyB0aGlzW2tleV0gOiBudWxsOwotICAgICAgICB9
LAotCi0gICAgICAgIHNldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSl7Ci0gICAgICAgICAgICAgICAg
aWYgKCF0aGlzW2tleV0gfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB0aGlzW2tleV0gPSB2
YWx1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAg
ICBlbXB0eTogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICBIYXNoLmVhY2godGhpcywgZnVu
Y3Rpb24odmFsdWUsIGtleSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tr
ZXldOwotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGluY2x1ZGU6IGZ1bmN0aW9uKGtleSwgdmFsdWUp
ewotICAgICAgICAgICAgICAgIHZhciBrID0gdGhpc1trZXldOwotICAgICAgICAgICAgICAgIGlm
IChrID09IHVuZGVmaW5lZCkgdGhpc1trZXldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbWFwOiBmdW5jdGlvbihmbiwgYmluZCl7
Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgSGFzaDsKLSAgICAgICAgICAgICAg
ICBIYXNoLmVhY2godGhpcywgZnVuY3Rpb24odmFsdWUsIGtleSl7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRzLnNldChrZXksIGZuLmNhbGwoYmluZCwgdmFsdWUsIGtleSwgdGhpcykp
OwotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHRzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oZm4sIGJpbmQpewot
ICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gbmV3IEhhc2g7Ci0gICAgICAgICAgICAgICAg
SGFzaC5lYWNoKHRoaXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGtleSwgdGhpcykpIHJlc3VsdHMuc2V0KGtl
eSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHRzOwotICAgICAgICB9LAotCi0gICAgICAgIGV2ZXJ5OiBmdW5jdGlvbihmbiwg
YmluZCl7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMpewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhZm4uY2FsbChi
aW5kLCB0aGlzW2tleV0sIGtleSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc29tZTog
ZnVuY3Rpb24oZm4sIGJpbmQpewotICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlz
KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkg
JiYgZm4uY2FsbChiaW5kLCB0aGlzW2tleV0sIGtleSkpIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgZ2V0S2V5czogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtd
OwotICAgICAgICAgICAgICAgIEhhc2guZWFjaCh0aGlzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpOwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgIHJldHVybiBrZXlzOwotICAgICAgICB9LAotCi0gICAgICAg
IGdldFZhbHVlczogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107
Ci0gICAgICAgICAgICAgICAgSGFzaC5lYWNoKHRoaXMsIGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOwotICAgICAgICB9LAotCi0gICAgICAg
IHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKGJhc2UpewotICAgICAgICAgICAgICAgIHZhciBxdWVy
eVN0cmluZyA9IFtdOwotICAgICAgICAgICAgICAgIEhhc2guZWFjaCh0aGlzLCBmdW5jdGlvbih2
YWx1ZSwga2V5KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlKSBrZXkgPSBiYXNl
ICsgJ1snICsga2V5ICsgJ10nOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJHR5cGUodmFsdWUpKXsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gSGFzaC50b1F1
ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnYXJyYXknOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBxcyA9IHt9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlLmVhY2goZnVuY3Rpb24odmFsLCBpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHFzW2ldID0gdmFsOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEhhc2gudG9RdWVyeVN0cmluZyhxcywga2V5KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsdWUgIT0gdW5kZWZpbmVkKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmcuam9pbign
JicpOwotICAgICAgICB9Ci0KLX0pOwotCi1IYXNoLmFsaWFzKHtrZXlPZjogJ2luZGV4T2YnLCBo
YXNWYWx1ZTogJ2NvbnRhaW5zJ30pOwotCi0KLS8qCi1TY3JpcHQ6IEV2ZW50LmpzCi0gICAgICAg
IENvbnRhaW5zIHRoZSBFdmVudCBOYXRpdmUsIHRvIG1ha2UgdGhlIGV2ZW50IG9iamVjdCBjb21w
bGV0ZWx5IGNyb3NzYnJvd3Nlci4KLQotTGljZW5zZToKLSAgICAgICAgTUlULXN0eWxlIGxpY2Vu
c2UuCi0qLwotCi12YXIgRXZlbnQgPSBuZXcgTmF0aXZlKHsKLQotICAgICAgICBuYW1lOiAnRXZl
bnQnLAotCi0gICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGV2ZW50LCB3aW4pewotICAgICAg
ICAgICAgICAgIHdpbiA9IHdpbiB8fCB3aW5kb3c7Ci0gICAgICAgICAgICAgICAgdmFyIGRvYyA9
IHdpbi5kb2N1bWVudDsKLSAgICAgICAgICAgICAgICBldmVudCA9IGV2ZW50IHx8IHdpbi5ldmVu
dDsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7Ci0g
ICAgICAgICAgICAgICAgdGhpcy4kZXh0ZW5kZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHZh
ciB0eXBlID0gZXZlbnQudHlwZTsKLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQu
dGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHRhcmdl
dCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7Ci0K
LSAgICAgICAgICAgICAgICBpZiAodHlwZS50ZXN0KC9rZXkvKSl7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgY29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIga2V5ID0gRXZlbnQuS2V5cy5rZXlPZihjb2RlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICdrZXlkb3duJyl7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBmS2V5ID0gY29kZSAtIDExMTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGZLZXkgPiAwICYmIGZLZXkgPCAxMykga2V5ID0gJ2YnICsg
ZktleTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGtleSA9IGtleSB8fCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLm1hdGNoKC8oY2xpY2t8bW91c2V8bWVudSkv
aSkpewotICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gKCFkb2MuY29tcGF0TW9kZSB8fCBk
b2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlID0gewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4OiBldmVudC5wYWdlWCB8fCBldmVudC5jbGllbnRYICsgZG9jLnNjcm9sbExl
ZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50LnBhZ2VZIHx8IGV2
ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wCi0gICAgICAgICAgICAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaWVudCA9IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeDogKGV2ZW50LnBhZ2VYKSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBhZ2VY
T2Zmc2V0IDogZXZlbnQuY2xpZW50WCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eTogKGV2ZW50LnBhZ2VZKSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQu
Y2xpZW50WQotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0eXBlLm1hdGNoKC9ET01Nb3VzZVNjcm9sbHxtb3VzZXdoZWVsLykpewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2hlZWwgPSAoZXZlbnQud2hlZWxEZWx0YSkg
PyBldmVudC53aGVlbERlbHRhIC8gMTIwIDogLShldmVudC5kZXRhaWwgfHwgMCkgLyAzOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0
Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0gMykgfHwgKGV2ZW50LmJ1dHRvbiA9PSAyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGVkID0gbnVsbDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0eXBlLm1hdGNoKC9vdmVyfG91dC8pKXsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdtb3VzZW92ZXInOiByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdl
dCB8fCBldmVudC5mcm9tRWxlbWVudDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnbW91c2VvdXQnOiByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRh
cmdldCB8fCBldmVudC50b0VsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZnVuY3Rpb24oKXsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVsYXRlZCAmJiBy
ZWxhdGVkLm5vZGVUeXBlID09IDMpIHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNyZWF0ZSh7YXR0ZW1wdDogQnJvd3Nlci5Fbmdp
bmUuZ2Vja299KSgpKSByZWxhdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuICRleHRlbmQodGhp
cywgewotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTogdHlwZSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTog
cGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudDogY2xpZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgcmlnaHRDbGljazogcmlnaHRDbGljaywKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgd2hlZWw6IHdoZWVsLAotCi0gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVk
VGFyZ2V0OiByZWxhdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQs
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBrZXk6IGtleSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQ6IGV2ZW50
LnNoaWZ0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDogZXZlbnQuY3RybEtl
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsdDogZXZlbnQuYWx0S2V5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgbWV0YTogZXZlbnQubWV0YUtleQotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICB9Ci0KLX0pOwotCi1FdmVudC5LZXlzID0gbmV3IEhhc2goewotICAgICAgICAnZW50
ZXInOiAxMywKLSAgICAgICAgJ3VwJzogMzgsCi0gICAgICAgICdkb3duJzogNDAsCi0gICAgICAg
ICdsZWZ0JzogMzcsCi0gICAgICAgICdyaWdodCc6IDM5LAotICAgICAgICAnZXNjJzogMjcsCi0g
ICAgICAgICdzcGFjZSc6IDMyLAotICAgICAgICAnYmFja3NwYWNlJzogOCwKLSAgICAgICAgJ3Rh
Yic6IDksCi0gICAgICAgICdkZWxldGUnOiA0NgotfSk7Ci0KLUV2ZW50LmltcGxlbWVudCh7Ci0K
LSAgICAgICAgc3RvcDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5z
dG9wUHJvcGFnYXRpb24oKS5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB9LAotCi0gICAgICAg
IHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5l
dmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcHJldmVudERlZmF1
bHQ6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXZlbnQucHJldmVudERl
ZmF1bHQpIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgICAgICBlbHNl
IHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKLSAgICAgICAgfQotCi19KTsKLQotCi0vKgotU2NyaXB0OiBDbGFzcy5qcwotICAgICAg
ICBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2lseSBjcmVhdGluZywgZXh0ZW5k
aW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMuCi0KLUxpY2Vuc2U6Ci0gICAg
ICAgIE1JVC1zdHlsZSBsaWNlbnNlLgotKi8KLQotdmFyIENsYXNzID0gbmV3IE5hdGl2ZSh7Ci0K
LSAgICAgICAgbmFtZTogJ0NsYXNzJywKLQotICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihw
cm9wZXJ0aWVzKXsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7
fTsKLSAgICAgICAgICAgICAgICB2YXIga2xhc3MgPSBmdW5jdGlvbigpewotICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMpewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoJHR5cGUodGhpc1trZXldKSAhPSAnZnVuY3Rpb24nKSB0aGlzW2tleV0g
PSAkdW5saW5rKHRoaXNba2V5XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0ga2xhc3M7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoQ2xhc3MucHJvdG90eXBpbmcpIHJldHVybiB0aGlzOwotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gKHRoaXMuaW5pdGlhbGl6ZSkgPyB0aGlzLmlu
aXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRoaXM7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5pbml0aWFsaXplKSB0aGlz
Lm9wdGlvbnMuaW5pdGlhbGl6ZS5jYWxsKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluc3RhbmNlOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBm
b3IgKHZhciBtdXRhdG9yIGluIENsYXNzLk11dGF0b3JzKXsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghcHJvcGVydGllc1ttdXRhdG9yXSkgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0aWVzID0gQ2xhc3MuTXV0YXRvcnNbbXV0YXRvcl0ocHJvcGVydGllcywg
cHJvcGVydGllc1ttdXRhdG9yXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJv
cGVydGllc1ttdXRhdG9yXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAk
ZXh0ZW5kKGtsYXNzLCB0aGlzKTsKLSAgICAgICAgICAgICAgICBrbGFzcy5jb25zdHJ1Y3RvciA9
IENsYXNzOwotICAgICAgICAgICAgICAgIGtsYXNzLnByb3RvdHlwZSA9IHByb3BlcnRpZXM7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGtsYXNzOwotICAgICAgICB9Ci0KLX0pOwotCi1DbGFzcy5N
dXRhdG9ycyA9IHsKLQotICAgICAgICBFeHRlbmRzOiBmdW5jdGlvbihzZWxmLCBrbGFzcyl7Ci0g
ICAgICAgICAgICAgICAgQ2xhc3MucHJvdG90eXBpbmcgPSBrbGFzcy5wcm90b3R5cGU7Ci0gICAg
ICAgICAgICAgICAgdmFyIHN1YmNsYXNzID0gbmV3IGtsYXNzOwotICAgICAgICAgICAgICAgIGRl
bGV0ZSBzdWJjbGFzcy5wYXJlbnQ7Ci0gICAgICAgICAgICAgICAgc3ViY2xhc3MgPSBDbGFzcy5p
bmhlcml0KHN1YmNsYXNzLCBzZWxmKTsKLSAgICAgICAgICAgICAgICBkZWxldGUgQ2xhc3MucHJv
dG90eXBpbmc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1YmNsYXNzOwotICAgICAgICB9LAot
Ci0gICAgICAgIEltcGxlbWVudHM6IGZ1bmN0aW9uKHNlbGYsIGtsYXNzZXMpewotICAgICAgICAg
ICAgICAgICRzcGxhdChrbGFzc2VzKS5lYWNoKGZ1bmN0aW9uKGtsYXNzKXsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENsYXNzLnByb3RvdHlpbmcgPSBrbGFzczsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICRleHRlbmQoc2VsZiwgKCR0eXBlKGtsYXNzKSA9PSAnY2xhc3MnKSA/IG5ldyBrbGFz
cyA6IGtsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBDbGFzcy5wcm90b3R5
cGluZzsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjsK
LSAgICAgICAgfQotCi19OwotCi1DbGFzcy5leHRlbmQoewotCi0gICAgICAgIGluaGVyaXQ6IGZ1
bmN0aW9uKG9iamVjdCwgcHJvcGVydGllcyl7Ci0gICAgICAgICAgICAgICAgdmFyIGNhbGxlciA9
IGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBp
biBwcm9wZXJ0aWVzKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdmVycmlkZSA9IHBy
b3BlcnRpZXNba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IG9i
amVjdFtrZXldOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSAkdHlwZShvdmVy
cmlkZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMgJiYgdHlwZSA9PSAn
ZnVuY3Rpb24nKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJyaWRl
ICE9IHByZXZpb3VzKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FsbGVyKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG92ZXJyaWRlLl9fcGFyZW50ID0gcHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IG92ZXJyaWRlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcy5vdmVycmlkZShvYmplY3Qs
IGtleSwgb3ZlcnJpZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmKHR5cGUgPT0gJ29iamVjdCcpewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3Rba2V5XSA9ICRtZXJnZShwcmV2aW91cywgb3ZlcnJpZGUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0W2tleV0gPSBvdmVycmlkZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2FsbGVyKSBvYmplY3Qu
cGFyZW50ID0gZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmd1
bWVudHMuY2FsbGVlLmNhbGxlci5fX3BhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAg
ICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAg
ICB9LAotCi0gICAgICAgIG92ZXJyaWRlOiBmdW5jdGlvbihvYmplY3QsIG5hbWUsIG1ldGhvZCl7
Ci0gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IENsYXNzLnByb3RvdHlwaW5nOwotICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnQgJiYgb2JqZWN0W25hbWVdICE9IHBhcmVudFtuYW1lXSkgcGFy
ZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICB2YXIgb3ZlcnJpZGUgPSBmdW5jdGlvbigpewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5wYXJlbnQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudCA/IHBhcmVudFtuYW1lXSA6
IG9iamVjdFtuYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1ldGhv
ZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5w
YXJlbnQgPSBwcmV2aW91czsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIG9iamVjdFtuYW1lXSA9IG92ZXJy
aWRlOwotICAgICAgICB9Ci0KLX0pOwotCi1DbGFzcy5pbXBsZW1lbnQoewotCi0gICAgICAgIGlt
cGxlbWVudDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSB0aGlzLnBy
b3RvdHlwZTsKLSAgICAgICAgICAgICAgICAkZWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uKHByb3Bl
cnRpZXMpewotICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MuaW5oZXJpdChwcm90bywgcHJv
cGVydGllcyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH0KLQotfSk7Ci0KLQotLyoKLVNjcmlwdDogQ2xhc3MuRXh0cmFzLmpzCi0g
ICAgICAgIENvbnRhaW5zIFV0aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBp
bnRvIHlvdXIgb3duIENsYXNzZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9u
IHRhc2tzLgotCi1MaWNlbnNlOgotICAgICAgICBNSVQtc3R5bGUgbGljZW5zZS4KLSovCi0KLXZh
ciBDaGFpbiA9IG5ldyBDbGFzcyh7Ci0KLSAgICAgICAgJGNoYWluOiBbXSwKLQotICAgICAgICBj
aGFpbjogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB0aGlzLiRjaGFpbi5leHRlbmQoQXJy
YXkuZmxhdHRlbihhcmd1bWVudHMpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgfSwKLQotICAgICAgICBjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICh0aGlzLiRjaGFpbi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpIDogZmFsc2U7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY2xlYXJD
aGFpbjogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB0aGlzLiRjaGFpbi5lbXB0eSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLX0pOwotCi12YXIgRXZl
bnRzID0gbmV3IENsYXNzKHsKLQotICAgICAgICAkZXZlbnRzOiB7fSwKLQotICAgICAgICBhZGRF
dmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGludGVybmFsKXsKLSAgICAgICAgICAgICAgICB0eXBl
ID0gRXZlbnRzLnJlbW92ZU9uKHR5cGUpOwotICAgICAgICAgICAgICAgIGlmIChmbiAhPSAkZW1w
dHkpewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZXZlbnRzW3R5cGVdID0gdGhpcy4k
ZXZlbnRzW3R5cGVdIHx8IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZXZlbnRz
W3R5cGVdLmluY2x1ZGUoZm4pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVybmFs
KSBmbi5pbnRlcm5hbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGFkZEV2ZW50czogZnVuY3Rpb24o
ZXZlbnRzKXsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5h
ZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICB9LAotCi0gICAgICAgIGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywg
ZGVsYXkpewotICAgICAgICAgICAgICAgIHR5cGUgPSBFdmVudHMucmVtb3ZlT24odHlwZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0aGlzLiRldmVudHMgfHwgIXRoaXMuJGV2ZW50c1t0eXBlXSkg
cmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgdGhpcy4kZXZlbnRzW3R5cGVdLmVhY2goZnVu
Y3Rpb24oZm4pewotICAgICAgICAgICAgICAgICAgICAgICAgZm4uY3JlYXRlKHsnYmluZCc6IHRo
aXMsICdkZWxheSc6IGRlbGF5LCAnYXJndW1lbnRzJzogYXJnc30pKCk7Ci0gICAgICAgICAgICAg
ICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKLSAgICAgICAgICAgICAg
ICB0eXBlID0gRXZlbnRzLnJlbW92ZU9uKHR5cGUpOwotICAgICAgICAgICAgICAgIGlmICghdGhp
cy4kZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICBpZiAoIWZuLmlu
dGVybmFsKSB0aGlzLiRldmVudHNbdHlwZV0uZXJhc2UoZm4pOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIHJlbW92ZUV2ZW50czogZnVuY3Rpb24o
ZXZlbnRzKXsKLSAgICAgICAgICAgICAgICBpZiAoJHR5cGUoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5y
ZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChldmVu
dHMpIGV2ZW50cyA9IEV2ZW50cy5yZW1vdmVPbihldmVudHMpOwotICAgICAgICAgICAgICAgIGZv
ciAodmFyIHR5cGUgaW4gdGhpcy4kZXZlbnRzKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChldmVudHMgJiYgZXZlbnRzICE9IHR5cGUpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07IGkpIHRoaXMucmVtb3ZlRXZlbnQodHlw
ZSwgZm5zW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH0KLQotfSk7Ci0KLUV2ZW50cy5yZW1vdmVPbiA9IGZ1bmN0aW9uKHN0cmlu
Zyl7Ci0gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9u
KGZ1bGwsIGZpcnN0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnRvTG93ZXJDYXNl
KCk7Ci0gICAgICAgIH0pOwotfTsKLQotdmFyIE9wdGlvbnMgPSBuZXcgQ2xhc3MoewotCi0gICAg
ICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25z
ID0gJG1lcmdlLnJ1bihbdGhpcy5vcHRpb25zXS5leHRlbmQoYXJndW1lbnRzKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLmFkZEV2ZW50KSByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAg
ICBmb3IgKHZhciBvcHRpb24gaW4gdGhpcy5vcHRpb25zKXsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgkdHlwZSh0aGlzLm9wdGlvbnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9e
b25bQS1aXS8pLnRlc3Qob3B0aW9uKSkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmFkZEV2ZW50KG9wdGlvbiwgdGhpcy5vcHRpb25zW29wdGlvbl0pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc1tvcHRpb25dOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi19KTsKLQot
Ci0vKgotU2NyaXB0OiBFbGVtZW50LmpzCi0gICAgICAgIE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRh
bnQgaXRlbXMgaW4gTW9vVG9vbHMuIENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBk
b2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLAotICAgICAg
ICB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxl
bWVudHMuCi0KLUxpY2Vuc2U6Ci0gICAgICAgIE1JVC1zdHlsZSBsaWNlbnNlLgotKi8KLQotdmFy
IEVsZW1lbnQgPSBuZXcgTmF0aXZlKHsKLQotICAgICAgICBuYW1lOiAnRWxlbWVudCcsCi0KLSAg
ICAgICAgbGVnYWN5OiB3aW5kb3cuRWxlbWVudCwKLQotICAgICAgICBpbml0aWFsaXplOiBmdW5j
dGlvbih0YWcsIHByb3BzKXsKLSAgICAgICAgICAgICAgICB2YXIga29uc3RydWN0b3IgPSBFbGVt
ZW50LkNvbnN0cnVjdG9ycy5nZXQodGFnKTsKLSAgICAgICAgICAgICAgICBpZiAoa29uc3RydWN0
b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVv
ZiB0YWcgPT0gJ3N0cmluZycpIHJldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KHRhZywgcHJvcHMp
OwotICAgICAgICAgICAgICAgIHJldHVybiAkKHRhZykuc2V0KHByb3BzKTsKLSAgICAgICAgfSwK
LQotICAgICAgICBhZnRlckltcGxlbWVudDogZnVuY3Rpb24oa2V5LCB2YWx1ZSl7Ci0gICAgICAg
ICAgICAgICAgRWxlbWVudC5Qcm90b3R5cGVba2V5XSA9IHZhbHVlOwotICAgICAgICAgICAgICAg
IGlmIChBcnJheVtrZXldKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgRWxlbWVudHMuaW1wbGVt
ZW50KGtleSwgZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9
IFtdLCBlbGVtZW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgaiA9IHRoaXMubGVuZ3RoOyBpIDwgajsgaSsrKXsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHJldHVybnMgPSB0aGlzW2ldW2tleV0uYXBwbHkodGhpc1tpXSwgYXJn
dW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChyZXR1
cm5zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzKSBlbGVt
ZW50cyA9ICgkdHlwZShyZXR1cm5zKSA9PSAnZWxlbWVudCcpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtZW50cykgPyBuZXcg
RWxlbWVudHMoaXRlbXMpIDogaXRlbXM7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LQotfSk7Ci0KLUVsZW1lbnQuUHJvdG90eXBlID0geyRmYW1pbHk6IHtuYW1lOiAnZWxlbWVudCd9
fTsKLQotRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSBuZXcgSGFzaDsKLQotdmFyIElGcmFtZSA9IG5l
dyBOYXRpdmUoewotCi0gICAgICAgIG5hbWU6ICdJRnJhbWUnLAotCi0gICAgICAgIGdlbmVyaWNz
OiBmYWxzZSwKLQotICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpewotICAgICAgICAgICAg
ICAgIHZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge3Byb3BlcnRpZXM6IE9iamVj
dC50eXBlLCBpZnJhbWU6ICRkZWZpbmVkfSk7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BzID0g
cGFyYW1zLnByb3BlcnRpZXMgfHwge307Ci0gICAgICAgICAgICAgICAgdmFyIGlmcmFtZSA9ICQo
cGFyYW1zLmlmcmFtZSkgfHwgZmFsc2U7Ci0gICAgICAgICAgICAgICAgdmFyIG9ubG9hZCA9IHBy
b3BzLm9ubG9hZCB8fCAkZW1wdHk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHByb3BzLm9ubG9h
ZDsKLSAgICAgICAgICAgICAgICBwcm9wcy5pZCA9IHByb3BzLm5hbWUgPSAkcGljayhwcm9wcy5p
ZCwgcHJvcHMubmFtZSwgaWZyYW1lLmlkLCBpZnJhbWUubmFtZSwgJ0lGcmFtZV8nICsgJHRpbWUo
KSk7Ci0gICAgICAgICAgICAgICAgaWZyYW1lID0gbmV3IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJh
bWUnLCBwcm9wcyk7Ci0gICAgICAgICAgICAgICAgdmFyIG9uRnJhbWVMb2FkID0gZnVuY3Rpb24o
KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gJHRyeShmdW5jdGlvbigpewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lLmNvbnRlbnRXaW5k
b3cubG9jYXRpb24uaG9zdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGhvc3QgJiYgaG9zdCA9PSB3aW5kb3cubG9jYXRpb24uaG9zdCl7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aW4gPSBuZXcgV2luZG93KGlm
cmFtZS5jb250ZW50V2luZG93KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3
IERvY3VtZW50KGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJGV4dGVuZCh3aW4uRWxlbWVudC5wcm90b3R5cGUsIEVsZW1lbnQu
UHJvdG90eXBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9ubG9hZC5jYWxsKGlmcmFtZS5jb250ZW50V2luZG93LCBpZnJhbWUuY29udGVudFdp
bmRvdy5kb2N1bWVudCk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAod2lu
ZG93LmZyYW1lc1twcm9wcy5pZF0pID8gb25GcmFtZUxvYWQoKSA6IGlmcmFtZS5hZGRMaXN0ZW5l
cignbG9hZCcsIG9uRnJhbWVMb2FkKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lOwot
ICAgICAgICB9Ci0KLX0pOwotCi12YXIgRWxlbWVudHMgPSBuZXcgTmF0aXZlKHsKLQotICAgICAg
ICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50cywgb3B0aW9ucyl7Ci0gICAgICAgICAgICAg
ICAgb3B0aW9ucyA9ICRleHRlbmQoe2RkdXA6IHRydWUsIGNhc2g6IHRydWV9LCBvcHRpb25zKTsK
LSAgICAgICAgICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzIHx8IFtdOwotICAgICAgICAgICAg
ICAgIGlmIChvcHRpb25zLmRkdXAgfHwgb3B0aW9ucy5jYXNoKXsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB1bmlxdWVzID0ge30sIHJldHVybmVkID0gW107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbCA9ICQuZWxlbWVudChlbGVt
ZW50c1tpXSwgIW9wdGlvbnMuY2FzaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvcHRpb25zLmRkdXApewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh1bmlxdWVzW2VsLnVpZF0pIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuaXF1ZXNbZWwudWlkXSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuZWQucHVzaChlbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtZW50cyA9IHJldHVybmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gKG9wdGlvbnMuY2FzaCkgPyAkZXh0ZW5kKGVsZW1lbnRzLCB0aGlz
KSA6IGVsZW1lbnRzOwotICAgICAgICB9Ci0KLX0pOwotCi1FbGVtZW50cy5pbXBsZW1lbnQoewot
Ci0gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oZmlsdGVyLCBiaW5kKXsKLSAgICAgICAgICAgICAg
ICBpZiAoIWZpbHRlcikgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBF
bGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVvZiBmaWx0ZXIgPT0gJ3N0cmluZycpID8g
ZnVuY3Rpb24oaXRlbSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5tYXRj
aChmaWx0ZXIpOwotICAgICAgICAgICAgICAgIH0gOiBmaWx0ZXIsIGJpbmQpKTsKLSAgICAgICAg
fQotCi19KTsKLQotRG9jdW1lbnQuaW1wbGVtZW50KHsKLQotICAgICAgICBuZXdFbGVtZW50OiBm
dW5jdGlvbih0YWcsIHByb3BzKXsKLSAgICAgICAgICAgICAgICBpZiAoQnJvd3Nlci5FbmdpbmUu
dHJpZGVudCAmJiBwcm9wcyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBbJ25hbWUnLCAndHlw
ZScsICdjaGVja2VkJ10uZWFjaChmdW5jdGlvbihhdHRyaWJ1dGUpewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXByb3BzW2F0dHJpYnV0ZV0pIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFnICs9ICcgJyArIGF0dHJpYnV0ZSArICc9IicgKyBw
cm9wc1thdHRyaWJ1dGVdICsgJyInOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlICE9ICdjaGVja2VkJykgZGVsZXRlIHByb3BzW2F0dHJpYnV0ZV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9ICc8
JyArIHRhZyArICc+JzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICQuZWxlbWVudCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTsKLSAgICAgICAg
fSwKLQotICAgICAgICBuZXdUZXh0Tm9kZTogZnVuY3Rpb24odGV4dCl7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgZ2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0V2luZG93OiBmdW5jdGlvbigpewotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLndpbmRvdzsKLSAgICAgICAgfQotCi19KTsKLQotV2luZG93Lmlt
cGxlbWVudCh7Ci0KLSAgICAgICAgJDogZnVuY3Rpb24oZWwsIG5vY2FzaCl7Ci0gICAgICAgICAg
ICAgICAgaWYgKGVsICYmIGVsLiRmYW1pbHkgJiYgZWwudWlkKSByZXR1cm4gZWw7Ci0gICAgICAg
ICAgICAgICAgdmFyIHR5cGUgPSAkdHlwZShlbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgk
W3R5cGVdKSA/ICRbdHlwZV0oZWwsIG5vY2FzaCwgdGhpcy5kb2N1bWVudCkgOiBudWxsOwotICAg
ICAgICB9LAotCi0gICAgICAgICQkOiBmdW5jdGlvbihzZWxlY3Rvcil7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSAmJiB0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmlu
ZycpIHJldHVybiB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzKHNlbGVjdG9yKTsKLSAgICAgICAg
ICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFy
cmF5LmZsYXR0ZW4oYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IGFyZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBpdGVtID0gYXJnc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJHR5cGUo
aXRlbSkpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbGVtZW50Jzog
ZWxlbWVudHMucHVzaChpdGVtKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3N0cmluZyc6IGVsZW1lbnRzLmV4dGVuZCh0aGlzLmRvY3VtZW50LmdldEVsZW1l
bnRzKGl0ZW0sIHRydWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50cyhlbGVtZW50cyk7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgZ2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0V2lu
ZG93OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
Ci0KLX0pOwotCi0kLnN0cmluZyA9IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7Ci0gICAgICAg
IGlkID0gZG9jLmdldEVsZW1lbnRCeUlkKGlkKTsKLSAgICAgICAgcmV0dXJuIChpZCkgPyAkLmVs
ZW1lbnQoaWQsIG5vY2FzaCkgOiBudWxsOwotfTsKLQotJC5lbGVtZW50ID0gZnVuY3Rpb24oZWws
IG5vY2FzaCl7Ci0gICAgICAgICR1aWQoZWwpOwotICAgICAgICBpZiAoIW5vY2FzaCAmJiAhZWwu
JGZhbWlseSAmJiAhKC9eb2JqZWN0fGVtYmVkJC9pKS50ZXN0KGVsLnRhZ05hbWUpKXsKLSAgICAg
ICAgICAgICAgICB2YXIgcHJvdG8gPSBFbGVtZW50LlByb3RvdHlwZTsKLSAgICAgICAgICAgICAg
ICBmb3IgKHZhciBwIGluIHByb3RvKSBlbFtwXSA9IHByb3RvW3BdOwotICAgICAgICB9OwotICAg
ICAgICByZXR1cm4gZWw7Ci19OwotCi0kLm9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBk
b2MpewotICAgICAgICBpZiAob2JqLnRvRWxlbWVudCkgcmV0dXJuICQuZWxlbWVudChvYmoudG9F
bGVtZW50KGRvYyksIG5vY2FzaCk7Ci0gICAgICAgIHJldHVybiBudWxsOwotfTsKLQotJC50ZXh0
bm9kZSA9ICQud2hpdGVzcGFjZSA9ICQud2luZG93ID0gJC5kb2N1bWVudCA9ICRhcmd1bWVudHMo
MCk7Ci0KLU5hdGl2ZS5pbXBsZW1lbnQoW0VsZW1lbnQsIERvY3VtZW50XSwgewotCi0gICAgICAg
IGdldEVsZW1lbnQ6IGZ1bmN0aW9uKHNlbGVjdG9yLCBub2Nhc2gpewotICAgICAgICAgICAgICAg
IHJldHVybiAkKHRoaXMuZ2V0RWxlbWVudHMoc2VsZWN0b3IsIHRydWUpWzBdIHx8IG51bGwsIG5v
Y2FzaCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKHRhZ3Ms
IG5vY2FzaCl7Ci0gICAgICAgICAgICAgICAgdGFncyA9IHRhZ3Muc3BsaXQoJywnKTsKLSAgICAg
ICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICB2YXIgZGR1cCA9
ICh0YWdzLmxlbmd0aCA+IDEpOwotICAgICAgICAgICAgICAgIHRhZ3MuZWFjaChmdW5jdGlvbih0
YWcpewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRpYWwgPSB0aGlzLmdldEVsZW1l
bnRzQnlUYWdOYW1lKHRhZy50cmltKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgKGRkdXAp
ID8gZWxlbWVudHMuZXh0ZW5kKHBhcnRpYWwpIDogZWxlbWVudHMgPSBwYXJ0aWFsOwotICAgICAg
ICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWxlbWVudHMo
ZWxlbWVudHMsIHtkZHVwOiBkZHVwLCBjYXNoOiAhbm9jYXNofSk7Ci0gICAgICAgIH0KLQotfSk7
Ci0KLShmdW5jdGlvbigpewotCi12YXIgY29sbGVjdGVkID0ge30sIHN0b3JhZ2UgPSB7fTsKLXZh
ciBwcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdzZWxlY3RlZCcsIHRleHRhcmVh
OiAoQnJvd3Nlci5FbmdpbmUud2Via2l0ICYmIEJyb3dzZXIuRW5naW5lLnZlcnNpb24gPCA0MjAp
ID8gJ2lubmVySFRNTCcgOiAndmFsdWUnfTsKLQotdmFyIGdldCA9IGZ1bmN0aW9uKHVpZCl7Ci0g
ICAgICAgIHJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7fSkpOwotfTsK
LQotdmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSwgcmV0YWluKXsKLSAgICAgICAgaWYgKCFpdGVt
KSByZXR1cm47Ci0gICAgICAgIHZhciB1aWQgPSBpdGVtLnVpZDsKLSAgICAgICAgaWYgKEJyb3dz
ZXIuRW5naW5lLnRyaWRlbnQpewotICAgICAgICAgICAgICAgIGlmIChpdGVtLmNsZWFyQXR0cmli
dXRlcyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSByZXRhaW4gJiYgaXRl
bS5jbG9uZU5vZGUoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGVhckF0
dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbG9uZSkgaXRlbS5tZXJn
ZUF0dHJpYnV0ZXMoY2xvbmUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5yZW1v
dmVFdmVudHMpewotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5yZW1vdmVFdmVudHMoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCgvb2JqZWN0L2kpLnRlc3Qo
aXRlbS50YWdOYW1lKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIGl0
ZW0pewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1bcF0g
PT0gJ2Z1bmN0aW9uJykgaXRlbVtwXSA9ICRlbXB0eTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuZGlzcG9zZShpdGVtKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgCi0gICAgICAgIGlmICghdWlkKSByZXR1cm47
Ci0gICAgICAgIGNvbGxlY3RlZFt1aWRdID0gc3RvcmFnZVt1aWRdID0gbnVsbDsKLX07Ci0KLXZh
ciBwdXJnZSA9IGZ1bmN0aW9uKCl7Ci0gICAgICAgIEhhc2guZWFjaChjb2xsZWN0ZWQsIGNsZWFu
KTsKLSAgICAgICAgaWYgKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpICRBKGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSkuZWFjaChjbGVhbik7Ci0gICAgICAgIGlmICh3aW5k
b3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7Ci0gICAgICAgIGNvbGxlY3RlZCA9
IHN0b3JhZ2UgPSBudWxsOwotfTsKLQotdmFyIHdhbGsgPSBmdW5jdGlvbihlbGVtZW50LCB3YWxr
LCBzdGFydCwgbWF0Y2gsIGFsbCwgbm9jYXNoKXsKLSAgICAgICAgdmFyIGVsID0gZWxlbWVudFtz
dGFydCB8fCB3YWxrXTsKLSAgICAgICAgdmFyIGVsZW1lbnRzID0gW107Ci0gICAgICAgIHdoaWxl
IChlbCl7Ci0gICAgICAgICAgICAgICAgaWYgKGVsLm5vZGVUeXBlID09IDEgJiYgKCFtYXRjaCB8
fCBFbGVtZW50Lm1hdGNoKGVsLCBtYXRjaCkpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghYWxsKSByZXR1cm4gJChlbCwgbm9jYXNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnRzLnB1c2goZWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbCA9
IGVsW3dhbGtdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoYWxsKSA/IG5ldyBFbGVtZW50
cyhlbGVtZW50cywge2RkdXA6IGZhbHNlLCBjYXNoOiAhbm9jYXNofSkgOiBudWxsOwotfTsKLQot
dmFyIGF0dHJpYnV0ZXMgPSB7Ci0gICAgICAgICdodG1sJzogJ2lubmVySFRNTCcsCi0gICAgICAg
ICdjbGFzcyc6ICdjbGFzc05hbWUnLAotICAgICAgICAnZm9yJzogJ2h0bWxGb3InLAotICAgICAg
ICAndGV4dCc6IChCcm93c2VyLkVuZ2luZS50cmlkZW50IHx8IChCcm93c2VyLkVuZ2luZS53ZWJr
aXQgJiYgQnJvd3Nlci5FbmdpbmUudmVyc2lvbiA8IDQyMCkpID8gJ2lubmVyVGV4dCcgOiAndGV4
dENvbnRlbnQnCi19OwotdmFyIGJvb2xzID0gWydjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcs
ICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsICdkaXNhYmxlZCcsICdyZWFkb25seScs
ICdtdWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsICdkZWZlciddOwotdmFyIGNhbWVs
cyA9IFsndmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5nJywg
J2NvbFNwYW4nLCAnZnJhbWVCb3JkZXInLCAnbWF4TGVuZ3RoJywgJ3JlYWRPbmx5JywgJ3Jvd1Nw
YW4nLCAndGFiSW5kZXgnLCAndXNlTWFwJ107Ci0KLUhhc2guZXh0ZW5kKGF0dHJpYnV0ZXMsIGJv
b2xzLmFzc29jaWF0ZShib29scykpOwotSGFzaC5leHRlbmQoYXR0cmlidXRlcywgY2FtZWxzLmFz
c29jaWF0ZShjYW1lbHMubWFwKFN0cmluZy50b0xvd2VyQ2FzZSkpKTsKLQotdmFyIGluc2VydGVy
cyA9IHsKLQotICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpewotICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUpIGVsZW1lbnQucGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYWZ0
ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpewotICAgICAgICAgICAgICAgIGlmICghZWxl
bWVudC5wYXJlbnROb2RlKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgdmFyIG5leHQgPSBlbGVt
ZW50Lm5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgIChuZXh0KSA/IGVsZW1lbnQucGFyZW50
Tm9kZS5pbnNlcnRCZWZvcmUoY29udGV4dCwgbmV4dCkgOiBlbGVtZW50LnBhcmVudE5vZGUuYXBw
ZW5kQ2hpbGQoY29udGV4dCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYm90dG9tOiBmdW5jdGlv
bihjb250ZXh0LCBlbGVtZW50KXsKLSAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KGNvbnRleHQpOwotICAgICAgICB9LAotCi0gICAgICAgIHRvcDogZnVuY3Rpb24oY29udGV4dCwg
ZWxlbWVudCl7Ci0gICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gZWxlbWVudC5maXJzdENoaWxk
OwotICAgICAgICAgICAgICAgIChmaXJzdCkgPyBlbGVtZW50Lmluc2VydEJlZm9yZShjb250ZXh0
LCBmaXJzdCkgOiBlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRleHQpOwotICAgICAgICB9Ci0KLX07
Ci0KLWluc2VydGVycy5pbnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tOwotCi1IYXNoLmVhY2goaW5z
ZXJ0ZXJzLCBmdW5jdGlvbihpbnNlcnRlciwgd2hlcmUpewotCi0gICAgICAgIHdoZXJlID0gd2hl
cmUuY2FwaXRhbGl6ZSgpOwotCi0gICAgICAgIEVsZW1lbnQuaW1wbGVtZW50KCdpbmplY3QnICsg
d2hlcmUsIGZ1bmN0aW9uKGVsKXsKLSAgICAgICAgICAgICAgICBpbnNlcnRlcih0aGlzLCAkKGVs
LCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIEVsZW1lbnQuaW1wbGVtZW50KCdncmFiJyArIHdoZXJlLCBmdW5jdGlvbihlbCl7Ci0g
ICAgICAgICAgICAgICAgaW5zZXJ0ZXIoJChlbCwgdHJ1ZSksIHRoaXMpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICB9KTsKLQotfSk7Ci0KLUVsZW1lbnQuaW1wbGVtZW50
KHsKLQotICAgICAgICBzZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKXsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKCR0eXBlKHByb3ApKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ29i
amVjdCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcHJv
cCkgdGhpcy5zZXQocCwgcHJvcFtwXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVz
LmdldChwcm9wKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnR5ICYm
IHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuYXBwbHkodGhpcywgQXJyYXkuc2xpY2UoYXJn
dW1lbnRzLCAxKSkgOiB0aGlzLnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgZ2V0OiBmdW5jdGlvbihwcm9wKXsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBF
bGVtZW50LlByb3BlcnRpZXMuZ2V0KHByb3ApOwotICAgICAgICAgICAgICAgIHJldHVybiAocHJv
cGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5LmdldC5hcHBseSh0aGlzLCBBcnJheS5z
bGljZShhcmd1bWVudHMsIDEpKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgZXJhc2U6IGZ1bmN0aW9uKHByb3ApewotICAgICAgICAgICAgICAgIHZhciBw
cm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllcy5nZXQocHJvcCk7Ci0gICAgICAgICAgICAgICAg
KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3BlcnR5LmVyYXNlLmFwcGx5KHRoaXMp
IDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfSwKLQotICAgICAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oYXR0cmlidXRl
LCB2YWx1ZSl7Ci0gICAgICAgICAgICAgICAgdmFyIGtleSA9IGF0dHJpYnV0ZXNbYXR0cmlidXRl
XTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5y
ZW1vdmVQcm9wZXJ0eShhdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgYm9v
bHNbYXR0cmlidXRlXSkgdmFsdWUgPSAhIXZhbHVlOwotICAgICAgICAgICAgICAgIChrZXkpID8g
dGhpc1trZXldID0gdmFsdWUgOiB0aGlzLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsICcnICsgdmFs
dWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAg
IHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpewotICAgICAgICAgICAgICAgIGZv
ciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNldFByb3BlcnR5KGF0dHJpYnV0
ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgfSwKLQotICAgICAgICBnZXRQcm9wZXJ0eTogZnVuY3Rpb24oYXR0cmlidXRlKXsK
LSAgICAgICAgICAgICAgICB2YXIga2V5ID0gYXR0cmlidXRlc1thdHRyaWJ1dGVdOwotICAgICAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IChrZXkpID8gdGhpc1trZXldIDogdGhpcy5nZXRBdHRyaWJ1
dGUoYXR0cmlidXRlLCAyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGJvb2xzW2F0dHJpYnV0
ZV0pID8gISF2YWx1ZSA6IChrZXkpID8gdmFsdWUgOiB2YWx1ZSB8fCBudWxsOwotICAgICAgICB9
LAotCi0gICAgICAgIGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAg
dmFyIGFyZ3MgPSAkQShhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIHJldHVybiBhcmdzLm1h
cCh0aGlzLmdldFByb3BlcnR5LCB0aGlzKS5hc3NvY2lhdGUoYXJncyk7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgcmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9uKGF0dHJpYnV0ZSl7Ci0gICAgICAgICAg
ICAgICAgdmFyIGtleSA9IGF0dHJpYnV0ZXNbYXR0cmlidXRlXTsKLSAgICAgICAgICAgICAgICAo
a2V5KSA/IHRoaXNba2V5XSA9IChrZXkgJiYgYm9vbHNbYXR0cmlidXRlXSkgPyBmYWxzZSA6ICcn
IDogdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICByZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlv
bigpewotICAgICAgICAgICAgICAgIEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVBy
b3BlcnR5LCB0aGlzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwK
LQotICAgICAgICBoYXNDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lKXsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5jbGFzc05hbWUuY29udGFpbnMoY2xhc3NOYW1lLCAnICcpOwotICAgICAg
ICB9LAotCi0gICAgICAgIGFkZENsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUpewotICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpKSB0aGlzLmNsYXNzTmFtZSA9ICh0
aGlzLmNsYXNzTmFtZSArICcgJyArIGNsYXNzTmFtZSkuY2xlYW4oKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICByZW1vdmVDbGFzczogZnVuY3Rp
b24oY2xhc3NOYW1lKXsKLSAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xh
c3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxzKScgKyBjbGFzc05hbWUgKyAnKD86XFxz
fCQpJyksICckMScpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAot
Ci0gICAgICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUpewotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSkgPyB0aGlzLnJlbW92ZUNsYXNzKGNs
YXNzTmFtZSkgOiB0aGlzLmFkZENsYXNzKGNsYXNzTmFtZSk7Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgYWRvcHQ6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgQXJyYXkuZmxhdHRlbihhcmd1
bWVudHMpLmVhY2goZnVuY3Rpb24oZWxlbWVudCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bGVtZW50ID0gJChlbGVtZW50LCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50KSB0aGlzLmFwcGVuZENoaWxkKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIH0sIHRo
aXMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAg
IGFwcGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUp
OwotICAgICAgICB9LAotCi0gICAgICAgIGdyYWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7Ci0gICAg
ICAgICAgICAgICAgaW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSgkKGVsLCB0cnVlKSwgdGhp
cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
aW5qZWN0OiBmdW5jdGlvbihlbCwgd2hlcmUpewotICAgICAgICAgICAgICAgIGluc2VydGVyc1t3
aGVyZSB8fCAnYm90dG9tJ10odGhpcywgJChlbCwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7
Ci0gICAgICAgICAgICAgICAgZWwgPSAkKGVsLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBlbC5w
YXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLCBlbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgd3JhcHM6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7
Ci0gICAgICAgICAgICAgICAgZWwgPSAkKGVsLCB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihlbCwgd2hlcmUpOwotICAgICAgICB9LAotCi0gICAg
ICAgIGdldFByZXZpb3VzOiBmdW5jdGlvbihtYXRjaCwgbm9jYXNoKXsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gd2Fsayh0aGlzLCAncHJldmlvdXNTaWJsaW5nJywgbnVsbCwgbWF0Y2gsIGZhbHNl
LCBub2Nhc2gpOwotICAgICAgICB9LAotCi0gICAgICAgIGdldEFsbFByZXZpb3VzOiBmdW5jdGlv
bihtYXRjaCwgbm9jYXNoKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Fsayh0aGlzLCAncHJl
dmlvdXNTaWJsaW5nJywgbnVsbCwgbWF0Y2gsIHRydWUsIG5vY2FzaCk7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgZ2V0TmV4dDogZnVuY3Rpb24obWF0Y2gsIG5vY2FzaCl7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdhbGsodGhpcywgJ25leHRTaWJsaW5nJywgbnVsbCwgbWF0Y2gsIGZhbHNlLCBu
b2Nhc2gpOwotICAgICAgICB9LAotCi0gICAgICAgIGdldEFsbE5leHQ6IGZ1bmN0aW9uKG1hdGNo
LCBub2Nhc2gpewotICAgICAgICAgICAgICAgIHJldHVybiB3YWxrKHRoaXMsICduZXh0U2libGlu
ZycsIG51bGwsIG1hdGNoLCB0cnVlLCBub2Nhc2gpOwotICAgICAgICB9LAotCi0gICAgICAgIGdl
dEZpcnN0OiBmdW5jdGlvbihtYXRjaCwgbm9jYXNoKXsKLSAgICAgICAgICAgICAgICByZXR1cm4g
d2Fsayh0aGlzLCAnbmV4dFNpYmxpbmcnLCAnZmlyc3RDaGlsZCcsIG1hdGNoLCBmYWxzZSwgbm9j
YXNoKTsKLSAgICAgICAgfSwKLQotICAgICAgICBnZXRMYXN0OiBmdW5jdGlvbihtYXRjaCwgbm9j
YXNoKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Fsayh0aGlzLCAncHJldmlvdXNTaWJsaW5n
JywgJ2xhc3RDaGlsZCcsIG1hdGNoLCBmYWxzZSwgbm9jYXNoKTsKLSAgICAgICAgfSwKLQotICAg
ICAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uKG1hdGNoLCBub2Nhc2gpewotICAgICAgICAgICAgICAg
IHJldHVybiB3YWxrKHRoaXMsICdwYXJlbnROb2RlJywgbnVsbCwgbWF0Y2gsIGZhbHNlLCBub2Nh
c2gpOwotICAgICAgICB9LAotCi0gICAgICAgIGdldFBhcmVudHM6IGZ1bmN0aW9uKG1hdGNoLCBu
b2Nhc2gpewotICAgICAgICAgICAgICAgIHJldHVybiB3YWxrKHRoaXMsICdwYXJlbnROb2RlJywg
bnVsbCwgbWF0Y2gsIHRydWUsIG5vY2FzaCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0Q2hp
bGRyZW46IGZ1bmN0aW9uKG1hdGNoLCBub2Nhc2gpewotICAgICAgICAgICAgICAgIHJldHVybiB3
YWxrKHRoaXMsICduZXh0U2libGluZycsICdmaXJzdENoaWxkJywgbWF0Y2gsIHRydWUsIG5vY2Fz
aCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0V2luZG93OiBmdW5jdGlvbigpewotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93OwotICAgICAgICB9LAot
Ci0gICAgICAgIGdldERvY3VtZW50OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLm93bmVyRG9jdW1lbnQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0RWxlbWVudEJ5
SWQ6IGZ1bmN0aW9uKGlkLCBub2Nhc2gpewotICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMu
b3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFl
bCkgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgcGFyZW50ID0gZWwucGFy
ZW50Tm9kZTsgcGFyZW50ICE9IHRoaXM7IHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlKXsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50KSByZXR1cm4gbnVsbDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuICQuZWxlbWVudChlbCwgbm9jYXNoKTsK
LSAgICAgICAgfSwKLQotICAgICAgICBnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnRzKCRBKHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0
aW9uKG9wdGlvbil7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnNlbGVj
dGVkOwotICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAgfSwKLQotICAgICAgICBnZXRDb21w
dXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
Y3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJyZW50U3R5bGVbcHJvcGVydHkuY2FtZWxDYXNl
KCldOwotICAgICAgICAgICAgICAgIHZhciBjb21wdXRlZCA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5k
ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpOwotICAgICAgICAgICAgICAg
IHJldHVybiAoY29tcHV0ZWQpID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZShbcHJvcGVydHku
aHlwaGVuYXRlKCldKSA6IG51bGw7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgdG9RdWVyeVN0cmlu
ZzogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBbXTsKLSAg
ICAgICAgICAgICAgICB0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScs
IHRydWUpLmVhY2goZnVuY3Rpb24oZWwpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFl
bC5uYW1lIHx8IGVsLmRpc2FibGVkKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdzZWxlY3QnKSA/IEVsZW1l
bnQuZ2V0U2VsZWN0ZWQoZWwpLm1hcChmdW5jdGlvbihvcHQpewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gb3B0LnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSkgOiAoKGVsLnR5cGUgPT0gJ3JhZGlvJyB8fCBlbC50eXBlID09ICdjaGVja2JveCcpICYmICFl
bC5jaGVja2VkKSA/IG51bGwgOiBlbC52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICRz
cGxhdCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2YWwpewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVzaChl
bC5uYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTsKLSAgICAgICAgfSwKLQotICAgICAgICBjbG9uZTogZnVu
Y3Rpb24oY29udGVudHMsIGtlZXBpZCl7Ci0gICAgICAgICAgICAgICAgY29udGVudHMgPSBjb250
ZW50cyAhPT0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5v
ZGUoY29udGVudHMpOwotICAgICAgICAgICAgICAgIHZhciBjbGVhbiA9IGZ1bmN0aW9uKG5vZGUs
IGVsZW1lbnQpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFrZWVwaWQpIG5vZGUucmVt
b3ZlQXR0cmlidXRlKCdpZCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEJyb3dzZXIu
RW5naW5lLnRyaWRlbnQpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNs
ZWFyQXR0cmlidXRlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm1l
cmdlQXR0cmlidXRlcyhlbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3VpZCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS5vcHRpb25zKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbm8gPSBub2RlLm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBuby5sZW5n
dGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0ZWQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJD
YXNlKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgJiYgZWxlbWVudFtwcm9w
XSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07Ci0gICAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgICAgIGlmIChjb250ZW50cyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
Y2UgPSBjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLCB0ZSA9IHRoaXMuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBj
ZS5sZW5ndGg7IGktLTspIGNsZWFuKGNlW2ldLCB0ZVtpXSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgY2xlYW4oY2xvbmUsIHRoaXMpOwotICAgICAgICAgICAgICAgIHJl
dHVybiAkKGNsb25lKTsKLSAgICAgICAgfSwKLQotICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigp
ewotICAgICAgICAgICAgICAgIEVsZW1lbnQuZW1wdHkodGhpcyk7Ci0gICAgICAgICAgICAgICAg
RWxlbWVudC5kaXNwb3NlKHRoaXMpOwotICAgICAgICAgICAgICAgIGNsZWFuKHRoaXMsIHRydWUp
OwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9LAotCi0gICAgICAgIGVt
cHR5OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICRBKHRoaXMuY2hpbGROb2RlcykuZWFj
aChmdW5jdGlvbihub2RlKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuZGVzdHJv
eShub2RlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfSwKLQotICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbigpewotICAgICAgICAg
ICAgICAgIHJldHVybiAodGhpcy5wYXJlbnROb2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZCh0aGlzKSA6IHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaGFzQ2hpbGQ6IGZ1bmN0
aW9uKGVsKXsKLSAgICAgICAgICAgICAgICBlbCA9ICQoZWwsIHRydWUpOwotICAgICAgICAgICAg
ICAgIGlmICghZWwpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoQnJvd3Nlci5F
bmdpbmUud2Via2l0ICYmIEJyb3dzZXIuRW5naW5lLnZlcnNpb24gPCA0MjApIHJldHVybiAkQSh0
aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKGVsLnRhZ05hbWUpKS5jb250YWlucyhlbCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICh0aGlzLmNvbnRhaW5zKSA/ICh0aGlzICE9IGVsICYmIHRoaXMu
Y29udGFpbnMoZWwpKSA6ICEhKHRoaXMuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWwpICYgMTYp
OwotICAgICAgICB9LAotCi0gICAgICAgIG1hdGNoOiBmdW5jdGlvbih0YWcpewotICAgICAgICAg
ICAgICAgIHJldHVybiAoIXRhZyB8fCAodGFnID09IHRoaXMpIHx8IChFbGVtZW50LmdldCh0aGlz
LCAndGFnJykgPT0gdGFnKSk7Ci0gICAgICAgIH0KLQotfSk7Ci0KLU5hdGl2ZS5pbXBsZW1lbnQo
W0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLCB7Ci0KLSAgICAgICAgYWRkTGlzdGVuZXI6IGZ1
bmN0aW9uKHR5cGUsIGZuKXsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAndW5sb2FkJyl7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkID0gZm4sIHNlbGYgPSB0aGlzOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZm4gPSBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKCd1bmxvYWQnLCBmbik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY29s
bGVjdGVkW3RoaXMudWlkXSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBl
LCBmbiwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24n
ICsgdHlwZSwgZm4pOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAot
Ci0gICAgICAgIHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhpcy5yZW1vdmVFdmVudExpc3Rl
bmVyKHR5cGUsIGZuLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmRldGFjaEV2
ZW50KCdvbicgKyB0eXBlLCBmbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgcmV0cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXsKLSAg
ICAgICAgICAgICAgICB2YXIgc3RvcmFnZSA9IGdldCh0aGlzLnVpZCksIHByb3AgPSBzdG9yYWdl
W3Byb3BlcnR5XTsKLSAgICAgICAgICAgICAgICBpZiAoZGZsdCAhPSB1bmRlZmluZWQgJiYgcHJv
cCA9PSB1bmRlZmluZWQpIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICRwaWNrKHByb3ApOwotICAgICAgICB9LAotCi0gICAgICAgIHN0b3Jl
OiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpewotICAgICAgICAgICAgICAgIHZhciBzdG9yYWdl
ID0gZ2V0KHRoaXMudWlkKTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlW3Byb3BlcnR5XSA9IHZh
bHVlOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAg
IGVsaW1pbmF0ZTogZnVuY3Rpb24ocHJvcGVydHkpewotICAgICAgICAgICAgICAgIHZhciBzdG9y
YWdlID0gZ2V0KHRoaXMudWlkKTsKLSAgICAgICAgICAgICAgICBkZWxldGUgc3RvcmFnZVtwcm9w
ZXJ0eV07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotfSk7Ci0K
LXdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywgcHVyZ2UpOwotCi19KSgpOwotCi1FbGVtZW50
LlByb3BlcnRpZXMgPSBuZXcgSGFzaDsKLQotRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0gewot
Ci0gICAgICAgIHNldDogZnVuY3Rpb24oc3R5bGUpewotICAgICAgICAgICAgICAgIHRoaXMuc3R5
bGUuY3NzVGV4dCA9IHN0eWxlOwotICAgICAgICB9LAotCi0gICAgICAgIGdldDogZnVuY3Rpb24o
KXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0OwotICAgICAgICB9
LAotCi0gICAgICAgIGVyYXNlOiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHRoaXMuc3R5
bGUuY3NzVGV4dCA9ICcnOwotICAgICAgICB9Ci0KLX07Ci0KLUVsZW1lbnQuUHJvcGVydGllcy50
YWcgPSB7Ci0KLSAgICAgICAgZ2V0OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgfQotCi19OwotCi1FbGVtZW50
LlByb3BlcnRpZXMuaHRtbCA9IChmdW5jdGlvbigpewotICAgICAgICB2YXIgd3JhcHBlciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotCi0gICAgICAgIHZhciB0cmFuc2xhdGlvbnMg
PSB7Ci0gICAgICAgICAgICAgICAgdGFibGU6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddLAot
ICAgICAgICAgICAgICAgIHNlbGVjdDogWzEsICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSwKLSAg
ICAgICAgICAgICAgICB0Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFi
bGU+J10sCi0gICAgICAgICAgICAgICAgdHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwv
dHI+PC90Ym9keT48L3RhYmxlPiddCi0gICAgICAgIH07Ci0gICAgICAgIHRyYW5zbGF0aW9ucy50
aGVhZCA9IHRyYW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTsKLQotICAgICAg
ICB2YXIgaHRtbCA9IHsKLSAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5qb2lu
KCcnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwID0gQnJvd3Nlci5FbmdpbmUu
dHJpZGVudCAmJiB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh3cmFwKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGZpcnN0ID0gd3JhcHBlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qu
aW5uZXJIVE1MID0gd3JhcFsxXSArIGh0bWwgKyB3cmFwWzJdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gd3JhcFswXTsgaS0tOykgZmlyc3QgPSBmaXJzdC5m
aXJzdENoaWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCku
YWRvcHQoZmlyc3QuY2hpbGROb2Rlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlubmVySFRNTCA9IGh0bWw7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9
OwotCi0gICAgICAgIGh0bWwuZXJhc2UgPSBodG1sLnNldDsKLQotICAgICAgICByZXR1cm4gaHRt
bDsKLX0pKCk7Ci0KLWlmIChCcm93c2VyLkVuZ2luZS53ZWJraXQgJiYgQnJvd3Nlci5FbmdpbmUu
dmVyc2lvbiA8IDQyMCkgRWxlbWVudC5Qcm9wZXJ0aWVzLnRleHQgPSB7Ci0gICAgICAgIGdldDog
ZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5pbm5lclRleHQpIHJldHVybiB0
aGlzLmlubmVyVGV4dDsKLSAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHRoaXMub3duZXJEb2N1
bWVudC5uZXdFbGVtZW50KCdkaXYnLCB7aHRtbDogdGhpcy5pbm5lckhUTUx9KS5pbmplY3QodGhp
cy5vd25lckRvY3VtZW50LmJvZHkpOwotICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gdGVtcC5p
bm5lclRleHQ7Ci0gICAgICAgICAgICAgICAgdGVtcC5kZXN0cm95KCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgIH0KLX07Ci0KLQotLyoKLVNjcmlwdDogRWxlbWVudC5F
dmVudC5qcwotICAgICAgICBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0
aCBldmVudHMsIGFuZCBjdXN0b20gRXZlbnRzLgotCi1MaWNlbnNlOgotICAgICAgICBNSVQtc3R5
bGUgbGljZW5zZS4KLSovCi0KLUVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5j
dGlvbihldmVudHMpewotICAgICAgICB0aGlzLmFkZEV2ZW50cyhldmVudHMpOwotfX07Ci0KLU5h
dGl2ZS5pbXBsZW1lbnQoW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLCB7Ci0KLSAgICAgICAg
YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKLSAgICAgICAgICAgICAgICB2YXIgZXZlbnRz
ID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJywge30pOwotICAgICAgICAgICAgICAgIGV2ZW50c1t0
eXBlXSA9IGV2ZW50c1t0eXBlXSB8fCB7J2tleXMnOiBbXSwgJ3ZhbHVlcyc6IFtdfTsKLSAgICAg
ICAgICAgICAgICBpZiAoZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhp
czsKLSAgICAgICAgICAgICAgICBldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTsKLSAgICAgICAg
ICAgICAgICB2YXIgcmVhbFR5cGUgPSB0eXBlLCBjdXN0b20gPSBFbGVtZW50LkV2ZW50cy5nZXQo
dHlwZSksIGNvbmRpdGlvbiA9IGZuLCBzZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgICBpZiAo
Y3VzdG9tKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXN0b20ub25BZGQpIGN1c3Rv
bS5vbkFkZC5jYWxsKHRoaXMsIGZuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXN0
b20uY29uZGl0aW9uKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
ID0gZnVuY3Rpb24oZXZlbnQpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjdXN0b20uY29uZGl0aW9uLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm4gZm4uY2Fs
bCh0aGlzLCBldmVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFsVHlwZSA9IGN1
c3RvbS5iYXNlIHx8IHJlYWxUeXBlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB2YXIgZGVmbiA9IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Zm4uY2FsbChzZWxmKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHZhciBu
YXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTsKLSAgICAgICAgICAg
ICAgICBpZiAobmF0aXZlRXZlbnQpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2
ZUV2ZW50ID09IDIpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuID0gZnVu
Y3Rpb24oZXZlbnQpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50ID0gbmV3IEV2ZW50KGV2ZW50LCBzZWxmLmdldFdpbmRvdygpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uLmNhbGwoc2VsZiwgZXZlbnQp
ID09PSBmYWxzZSkgZXZlbnQuc3RvcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGV2ZW50c1t0eXBlXS52YWx1ZXMucHVzaChkZWZuKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICByZW1vdmVFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pewotICAgICAgICAgICAgICAgIHZhciBldmVudHMgPSB0aGlzLnJldHJp
ZXZlKCdldmVudHMnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5
cGVdKSByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB2YXIgcG9zID0gZXZlbnRzW3R5cGVd
LmtleXMuaW5kZXhPZihmbik7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA9PSAtMSkgcmV0dXJu
IHRoaXM7Ci0gICAgICAgICAgICAgICAgZXZlbnRzW3R5cGVdLmtleXMuc3BsaWNlKHBvcywgMSk7
Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZXZlbnRzW3R5cGVdLnZhbHVlcy5zcGxpY2Uo
cG9zLCAxKVswXTsKLSAgICAgICAgICAgICAgICB2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHMu
Z2V0KHR5cGUpOwotICAgICAgICAgICAgICAgIGlmIChjdXN0b20pewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGN1c3RvbS5vblJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywg
Zm4pOwotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGN1c3RvbS5iYXNlIHx8IHR5cGU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAoRWxlbWVudC5OYXRp
dmVFdmVudHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2YWx1ZSkgOiB0aGlz
OwotICAgICAgICB9LAotCi0gICAgICAgIGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQoZXZl
bnQsIGV2ZW50c1tldmVudF0pOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICB9LAotCi0gICAgICAgIHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXsKLSAgICAgICAg
ICAgICAgICBpZiAoJHR5cGUoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBl
dmVudHNbdHlwZV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmll
dmUoJ2V2ZW50cycpOwotICAgICAgICAgICAgICAgIGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlz
OwotICAgICAgICAgICAgICAgIGlmICghZXZlbnRzKXsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3ZlRXZlbnRzKHR5cGUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoYXR0YWNoZWRbZXZlbnRzXSl7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoYXR0YWNoZWRbZXZlbnRzXS5rZXlzWzBdKSB0aGlzLnJlbW92ZUV2ZW50KGV2
ZW50cywgYXR0YWNoZWRbZXZlbnRzXS5rZXlzWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGF0dGFjaGVkW2V2ZW50c10gPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaXJlRXZlbnQ6IGZ1bmN0
aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXsKLSAgICAgICAgICAgICAgICB2YXIgZXZlbnRzID0gdGhp
cy5yZXRyaWV2ZSgnZXZlbnRzJyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFldmVudHMgfHwgIWV2
ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgZXZlbnRzW3R5cGVdLmtl
eXMuZWFjaChmdW5jdGlvbihmbil7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbi5jcmVhdGUo
eydiaW5kJzogdGhpcywgJ2RlbGF5JzogZGVsYXksICdhcmd1bWVudHMnOiBhcmdzfSkoKTsKLSAg
ICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgfSwKLQotICAgICAgICBjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7Ci0g
ICAgICAgICAgICAgICAgZnJvbSA9ICQoZnJvbSk7Ci0gICAgICAgICAgICAgICAgdmFyIGZldmVu
dHMgPSBmcm9tLnJldHJpZXZlKCdldmVudHMnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZldmVu
dHMpIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgIGlmICghdHlwZSl7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBldlR5cGUgaW4gZmV2ZW50cykgdGhpcy5jbG9uZUV2ZW50
cyhmcm9tLCBldlR5cGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmV2ZW50c1t0eXBl
XSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5j
dGlvbihmbil7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnQo
dHlwZSwgZm4pOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLX0pOwot
Ci1FbGVtZW50Lk5hdGl2ZUV2ZW50cyA9IHsKLSAgICAgICAgY2xpY2s6IDIsIGRibGNsaWNrOiAy
LCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIsIGNvbnRleHRtZW51OiAyLCAvL21vdXNlIGJ1dHRv
bnMKLSAgICAgICAgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8vbW91c2Ugd2hl
ZWwKLSAgICAgICAgbW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxl
Y3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50Ci0gICAgICAgIGtleWRv
d246IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZAotICAgICAgICBmb2N1czog
MiwgYmx1cjogMiwgY2hhbmdlOiAyLCByZXNldDogMiwgc2VsZWN0OiAyLCBzdWJtaXQ6IDIsIC8v
Zm9ybSBlbGVtZW50cwotICAgICAgICBsb2FkOiAxLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9hZDog
MiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRlY2hh
bmdlOiAxLCAvL3dpbmRvdwotICAgICAgICBlcnJvcjogMSwgYWJvcnQ6IDEsIHNjcm9sbDogMSAv
L21pc2MKLX07Ci0KLShmdW5jdGlvbigpewotCi12YXIgJGNoZWNrID0gZnVuY3Rpb24oZXZlbnQp
ewotICAgICAgICB2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7Ci0gICAgICAgIGlm
IChyZWxhdGVkID09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChyZWxhdGVk
ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gKCR0eXBlKHRoaXMpICE9
ICdkb2N1bWVudCcgJiYgcmVsYXRlZCAhPSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwn
ICYmICF0aGlzLmhhc0NoaWxkKHJlbGF0ZWQpKTsKLX07Ci0KLUVsZW1lbnQuRXZlbnRzID0gbmV3
IEhhc2goewotCi0gICAgICAgIG1vdXNlZW50ZXI6IHsKLSAgICAgICAgICAgICAgICBiYXNlOiAn
bW91c2VvdmVyJywKLSAgICAgICAgICAgICAgICBjb25kaXRpb246ICRjaGVjawotICAgICAgICB9
LAotCi0gICAgICAgIG1vdXNlbGVhdmU6IHsKLSAgICAgICAgICAgICAgICBiYXNlOiAnbW91c2Vv
dXQnLAotICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogJGNoZWNrCi0gICAgICAgIH0sCi0KLSAg
ICAgICAgbW91c2V3aGVlbDogewotICAgICAgICAgICAgICAgIGJhc2U6IChCcm93c2VyLkVuZ2lu
ZS5nZWNrbykgPyAnRE9NTW91c2VTY3JvbGwnIDogJ21vdXNld2hlZWwnCi0gICAgICAgIH0KLQot
fSk7Ci0KLX0pKCk7Ci0KLQotLyoKLVNjcmlwdDogRWxlbWVudC5TdHlsZS5qcwotICAgICAgICBD
b250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxlbWVu
dHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuCi0KLUxpY2Vuc2U6Ci0gICAgICAgIE1JVC1zdHlsZSBs
aWNlbnNlLgotKi8KLQotRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1bmN0aW9u
KHN0eWxlcyl7Ci0gICAgICAgIHRoaXMuc2V0U3R5bGVzKHN0eWxlcyk7Ci19fTsKLQotRWxlbWVu
dC5Qcm9wZXJ0aWVzLm9wYWNpdHkgPSB7Ci0KLSAgICAgICAgc2V0OiBmdW5jdGlvbihvcGFjaXR5
LCBub3Zpc2liaWxpdHkpewotICAgICAgICAgICAgICAgIGlmICghbm92aXNpYmlsaXR5KXsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGFjaXR5ID09IDApewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHlsZS52aXNpYmlsaXR5ICE9ICdoaWRkZW4nKSB0
aGlzLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0eWxl
LnZpc2liaWxpdHkgIT0gJ3Zpc2libGUnKSB0aGlzLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJs
ZSc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3R5bGUgfHwgIXRoaXMuY3VycmVudFN0eWxlLmhh
c0xheW91dCkgdGhpcy5zdHlsZS56b29tID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoQnJvd3Nl
ci5FbmdpbmUudHJpZGVudCkgdGhpcy5zdHlsZS5maWx0ZXIgPSAob3BhY2l0eSA9PSAxKSA/ICcn
IDogJ2FscGhhKG9wYWNpdHk9JyArIG9wYWNpdHkgKiAxMDAgKyAnKSc7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTsKLSAgICAgICAgICAgICAgICB0aGlzLnN0
b3JlKCdvcGFjaXR5Jywgb3BhY2l0eSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0OiBmdW5j
dGlvbigpewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHJpZXZlKCdvcGFjaXR5Jywg
MSk7Ci0gICAgICAgIH0KLQotfTsKLQotRWxlbWVudC5pbXBsZW1lbnQoewotCi0gICAgICAgIHNl
dE9wYWNpdHk6IGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5z
ZXQoJ29wYWNpdHknLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0T3Bh
Y2l0eTogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ29wYWNp
dHknKTsKLSAgICAgICAgfSwKLQotICAgICAgICBzZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHks
IHZhbHVlKXsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KXsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ29wYWNpdHknOiByZXR1cm4gdGhpcy5zZXQoJ29wYWNpdHknLCBw
YXJzZUZsb2F0KHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmbG9hdCc6
IHByb3BlcnR5ID0gKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpID8gJ3N0eWxlRmxvYXQnIDogJ2Nz
c0Zsb2F0JzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBw
cm9wZXJ0eS5jYW1lbENhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoJHR5cGUodmFsdWUpICE9
ICdzdHJpbmcnKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSAoRWxlbWVudC5T
dHlsZXMuZ2V0KHByb3BlcnR5KSB8fCAnQCcpLnNwbGl0KCcgJyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9ICRzcGxhdCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwgaSl7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFwW2ldKSByZXR1cm4gJyc7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoJHR5cGUodmFsKSA9PSAnbnVtYmVy
JykgPyBtYXBbaV0ucmVwbGFjZSgnQCcsIE1hdGgucm91bmQodmFsKSkgOiB2YWw7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9KS5qb2luKCcgJyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgdGhpcy5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBnZXRTdHlsZTogZnVuY3Rpb24ocHJv
cGVydHkpewotICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkpewotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnb3BhY2l0eSc6IHJldHVybiB0aGlzLmdldCgnb3BhY2l0eScpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmxvYXQnOiBwcm9wZXJ0eSA9IChCcm93c2Vy
LkVuZ2luZS50cmlkZW50KSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9hdCc7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHkuY2FtZWxDYXNlKCk7
Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc3R5bGVbcHJvcGVydHldOwotICAg
ICAgICAgICAgICAgIGlmICghJGNoayhyZXN1bHQpKXsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgc3R5bGUgaW4g
RWxlbWVudC5TaG9ydFN0eWxlcyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwcm9wZXJ0eSAhPSBzdHlsZSkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIHMgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJlc3VsdC5w
dXNoKHRoaXMuZ2V0U3R5bGUocykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0
eSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5nKHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3JnYmE/XChbXGRccyxdK1wp
Lyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3IpIHJlc3VsdCA9IHJlc3VsdC5y
ZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hleCgpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKEJyb3dzZXIuRW5naW5lLnByZXN0byB8fCAoQnJvd3Nlci5F
bmdpbmUudHJpZGVudCAmJiAhJGNoayhwYXJzZUludChyZXN1bHQpKSkpewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHByb3BlcnR5LnRlc3QoL14oaGVpZ2h0fHdpZHRoKSQvKSl7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSAocHJvcGVydHkgPT0gJ3dp
ZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQnXSA6IFsndG9wJywgJ2JvdHRvbSddLCBzaXplID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmVhY2goZnVuY3Rpb24odmFs
dWUpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKz0gdGhp
cy5nZXRTdHlsZSgnYm9yZGVyLScgKyB2YWx1ZSArICctd2lkdGgnKS50b0ludCgpICsgdGhpcy5n
ZXRTdHlsZSgncGFkZGluZy0nICsgdmFsdWUpLnRvSW50KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpc1snb2Zmc2V0JyArIHByb3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgoQnJvd3Nlci5FbmdpbmUucHJlc3RvKSAmJiBTdHJpbmcocmVzdWx0KS50ZXN0KCdweCcpKSBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LnRlc3Qo
Lyhib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcpLykpIHJldHVybiAnMHB4JzsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfSwK
LQotICAgICAgICBzZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7Ci0gICAgICAgICAgICAgICAg
Zm9yICh2YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5
bGVdKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAg
ICBnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9
OwotICAgICAgICAgICAgICAgIEFycmF5LmVhY2goYXJndW1lbnRzLCBmdW5jdGlvbihrZXkpewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtleSk7
Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotCi19KTsKLQotRWxlbWVudC5TdHlsZXMgPSBuZXcgSGFzaCh7Ci0gICAg
ICAgIGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgnLCByaWdodDogJ0BweCcs
Ci0gICAgICAgIHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4JywgbWF4V2lkdGg6ICdAcHgnLCBt
YXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1pbkhlaWdodDogJ0BweCcsCi0gICAg
ICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tncm91bmRQb3NpdGlvbjog
J0BweCBAcHgnLCBjb2xvcjogJ3JnYihALCBALCBAKScsCi0gICAgICAgIGZvbnRTaXplOiAnQHB4
JywgbGV0dGVyU3BhY2luZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChA
cHggQHB4IEBweCBAcHgpJywKLSAgICAgICAgbWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFk
ZGluZzogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHgg
QCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApJywKLSAgICAgICAgYm9yZGVyV2lkdGg6
ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjog
J3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKScsCi0g
ICAgICAgIHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9udFdlaWdodDogJ0AnLCB0ZXh0SW5k
ZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnCi19KTsKLQotRWxlbWVudC5TaG9ydFN0eWxlcyA9IHtt
YXJnaW46IHt9LCBwYWRkaW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3Jk
ZXJTdHlsZToge30sIGJvcmRlckNvbG9yOiB7fX07Ci0KLVsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRv
bScsICdMZWZ0J10uZWFjaChmdW5jdGlvbihkaXJlY3Rpb24pewotICAgICAgICB2YXIgU2hvcnQg
PSBFbGVtZW50LlNob3J0U3R5bGVzOwotICAgICAgICB2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7
Ci0gICAgICAgIFsnbWFyZ2luJywgJ3BhZGRpbmcnXS5lYWNoKGZ1bmN0aW9uKHN0eWxlKXsKLSAg
ICAgICAgICAgICAgICB2YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlvbjsKLSAgICAgICAgICAgICAg
ICBTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdAcHgnOwotICAgICAgICB9KTsKLSAgICAg
ICAgdmFyIGJkID0gJ2JvcmRlcicgKyBkaXJlY3Rpb247Ci0gICAgICAgIFNob3J0LmJvcmRlclti
ZF0gPSBBbGxbYmRdID0gJ0BweCBAIHJnYihALCBALCBAKSc7Ci0gICAgICAgIHZhciBiZHcgPSBi
ZCArICdXaWR0aCcsIGJkcyA9IGJkICsgJ1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InOwotICAg
ICAgICBTaG9ydFtiZF0gPSB7fTsKLSAgICAgICAgU2hvcnQuYm9yZGVyV2lkdGhbYmR3XSA9IFNo
b3J0W2JkXVtiZHddID0gQWxsW2Jkd10gPSAnQHB4JzsKLSAgICAgICAgU2hvcnQuYm9yZGVyU3R5
bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7Ci0gICAgICAgIFNob3J0
LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFsbFtiZGNdID0gJ3JnYihALCBA
LCBAKSc7Ci19KTsKLQotCi0vKgotU2NyaXB0OiBFbGVtZW50LkRpbWVuc2lvbnMuanMKLSAgICAg
ICAgQ29udGFpbnMgbWV0aG9kcyB0byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlv
bmluZyBvZiBFbGVtZW50cyBhbmQgdGhlIHdpbmRvdyBvYmplY3QuCi0KLUxpY2Vuc2U6Ci0gICAg
ICAgIE1JVC1zdHlsZSBsaWNlbnNlLgotCi1DcmVkaXRzOgotICAgICAgICAtIEVsZW1lbnQgcG9z
aXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRwOi8vcW9veGRvby5vcmcvKSBjb2Rl
IGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNlbnNlXShodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvbGdwbC5odG1sKS4KLSAgICAgICAgLSBWaWV3cG9ydCBkaW1lbnNpb25zIGJh
c2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS8pIGNvZGUsIFtCU0Qg
TGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xpY2Vuc2UuaHRtbCkuCi0q
LwotCi0oZnVuY3Rpb24oKXsKLQotRWxlbWVudC5pbXBsZW1lbnQoewotCi0gICAgICAgIHNjcm9s
bFRvOiBmdW5jdGlvbih4LCB5KXsKLSAgICAgICAgICAgICAgICBpZiAoaXNCb2R5KHRoaXMpKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
c2Nyb2xsTGVmdCA9IHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCA9
IHk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICB9LAotCi0gICAgICAgIGdldFNpemU6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRI
ZWlnaHR9OwotICAgICAgICB9LAotCi0gICAgICAgIGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7
Ci0gICAgICAgICAgICAgICAgaWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93
KCkuZ2V0U2Nyb2xsU2l6ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiB7eDogdGhpcy5zY3Jv
bGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWlnaHR9OwotICAgICAgICB9LAotCi0gICAgICAgIGdl
dFNjcm9sbDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICBpZiAoaXNCb2R5KHRoaXMpKSBy
ZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4ge3g6IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9OwotICAgICAgICB9LAot
Ci0gICAgICAgIGdldFNjcm9sbHM6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgdmFyIGVs
ZW1lbnQgPSB0aGlzLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTsKLSAgICAgICAgICAgICAgICB3
aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBvc2l0aW9uLnggKz0gZWxlbWVudC5zY3JvbGxMZWZ0OwotICAgICAgICAgICAgICAgICAg
ICAgICAgcG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9sbFRvcDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAgICAgICAgfSwKLQotICAgICAgICBn
ZXRPZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQg
PSB0aGlzOwotICAgICAgICAgICAgICAgIGlmIChpc0JvZHkoZWxlbWVudCkpIHJldHVybiBudWxs
OwotICAgICAgICAgICAgICAgIGlmICghQnJvd3Nlci5FbmdpbmUudHJpZGVudCkgcmV0dXJuIGVs
ZW1lbnQub2Zmc2V0UGFyZW50OwotICAgICAgICAgICAgICAgIHdoaWxlICgoZWxlbWVudCA9IGVs
ZW1lbnQucGFyZW50Tm9kZSkgJiYgIWlzQm9keShlbGVtZW50KSl7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycp
IHJldHVybiBlbGVtZW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgfSwKLQotICAgICAgICBnZXRPZmZzZXRzOiBmdW5jdGlvbigpewot
ICAgICAgICAgICAgICAgIGlmIChCcm93c2VyLkVuZ2luZS50cmlkZW50KXsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGh0
bWwgPSB0aGlzLmdldERvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50OwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYm91
bmQubGVmdCArIGh0bWwuc2Nyb2xsTGVmdCAtIGh0bWwuY2xpZW50TGVmdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeTogYm91bmQudG9wICsgaHRtbC5zY3JvbGxUb3AgLSBodG1s
LmNsaWVudFRvcAotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAs
IHk6IDB9OwotICAgICAgICAgICAgICAgIGlmIChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlv
bjsKLQotICAgICAgICAgICAgICAgIHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkp
ewotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExl
ZnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0
VG9wOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQnJvd3Nlci5FbmdpbmUuZ2Vja28p
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJvcmRlckJveChlbGVtZW50
KSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueCAr
PSBsZWZ0Qm9yZGVyKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvc2l0aW9uLnkgKz0gdG9wQm9yZGVyKGVsZW1lbnQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBw
YXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwYXJlbnQgJiYgc3R5bGVTdHJpbmcocGFyZW50LCAnb3ZlcmZsb3cnKSAhPSAndmlz
aWJsZScpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9u
LnggKz0gbGVmdEJvcmRlcihwYXJlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvc2l0aW9uLnkgKz0gdG9wQm9yZGVyKHBhcmVudCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
ZWxlbWVudCAhPSB0aGlzICYmIEJyb3dzZXIuRW5naW5lLndlYmtpdCl7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gbGVmdEJvcmRlcihlbGVtZW50KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueSArPSB0b3BCb3JkZXIoZWxl
bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKEJyb3dzZXIuRW5naW5lLmdlY2tvICYmICFib3JkZXJCb3godGhp
cykpewotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueCAtPSBsZWZ0Qm9yZGVyKHRo
aXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueSAtPSB0b3BCb3JkZXIodGhp
cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
LSAgICAgICAgfSwKLQotICAgICAgICBnZXRQb3NpdGlvbjogZnVuY3Rpb24ocmVsYXRpdmUpewot
ICAgICAgICAgICAgICAgIGlmIChpc0JvZHkodGhpcykpIHJldHVybiB7eDogMCwgeTogMH07Ci0g
ICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLCBzY3JvbGwgPSB0
aGlzLmdldFNjcm9sbHMoKTsKLSAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB7eDogb2Zm
c2V0LnggLSBzY3JvbGwueCwgeTogb2Zmc2V0LnkgLSBzY3JvbGwueX07Ci0gICAgICAgICAgICAg
ICAgdmFyIHJlbGF0aXZlUG9zaXRpb24gPSAocmVsYXRpdmUgJiYgKHJlbGF0aXZlID0gJChyZWxh
dGl2ZSkpKSA/IHJlbGF0aXZlLmdldFBvc2l0aW9uKCkgOiB7eDogMCwgeTogMH07Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHt4OiBwb3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54LCB5OiBw
b3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlvbi55fTsKLSAgICAgICAgfSwKLQotICAgICAgICBn
ZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7Ci0gICAgICAgICAgICAgICAgaWYgKGlz
Qm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTsKLSAg
ICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLCBz
aXplID0gdGhpcy5nZXRTaXplKCk7Ci0gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHtsZWZ0OiBw
b3NpdGlvbi54LCB0b3A6IHBvc2l0aW9uLnksIHdpZHRoOiBzaXplLngsIGhlaWdodDogc2l6ZS55
fTsKLSAgICAgICAgICAgICAgICBvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0aDsKLSAg
ICAgICAgICAgICAgICBvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG9iajsKLSAgICAgICAgfSwKLQotICAgICAgICBjb21wdXRlUG9zaXRp
b246IGZ1bmN0aW9uKG9iail7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHtsZWZ0OiBvYmoueCAt
IHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4tbGVmdCcpLCB0b3A6IG9iai55IC0gc3R5bGVOdW1i
ZXIodGhpcywgJ21hcmdpbi10b3AnKX07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcG9zaXRpb246
IGZ1bmN0aW9uKG9iail7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRo
aXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpOwotICAgICAgICB9Ci0KLX0pOwotCi1OYXRpdmUuaW1w
bGVtZW50KFtEb2N1bWVudCwgV2luZG93XSwgewotCi0gICAgICAgIGdldFNpemU6IGZ1bmN0aW9u
KCl7Ci0gICAgICAgICAgICAgICAgdmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKEJyb3dzZXIuRW5naW5lLnByZXN0byB8fCBCcm93c2VyLkVuZ2luZS53ZWJr
aXQpIHJldHVybiB7eDogd2luLmlubmVyV2lkdGgsIHk6IHdpbi5pbm5lckhlaWdodH07Ci0gICAg
ICAgICAgICAgICAgdmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgsIHk6IGRvYy5jbGllbnRIZWlnaHR9Owot
ICAgICAgICB9LAotCi0gICAgICAgIGdldFNjcm9sbDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAg
ICAgICB2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKTsKLSAgICAgICAgICAgICAgICB2YXIgZG9j
ID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4ge3g6IHdp
bi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwgeTogd2luLnBhZ2VZT2Zmc2V0IHx8IGRv
Yy5zY3JvbGxUb3B9OwotICAgICAgICB9LAotCi0gICAgICAgIGdldFNjcm9sbFNpemU6IGZ1bmN0
aW9uKCl7Ci0gICAgICAgICAgICAgICAgdmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7
Ci0gICAgICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMuZ2V0U2l6ZSgpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgu
bWF4KGRvYy5zY3JvbGxIZWlnaHQsIG1pbi55KX07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0
UG9zaXRpb246IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHt4OiAwLCB5OiAw
fTsKLSAgICAgICAgfSwKLQotICAgICAgICBnZXRDb29yZGluYXRlczogZnVuY3Rpb24oKXsKLSAg
ICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwg
aGVpZ2h0OiBzaXplLnksIHdpZHRoOiBzaXplLnh9OwotICAgICAgICB9Ci0KLX0pOwotCi0vLyBw
cml2YXRlIG1ldGhvZHMKLQotdmFyIHN0eWxlU3RyaW5nID0gRWxlbWVudC5nZXRDb21wdXRlZFN0
eWxlOwotCi1mdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50LCBzdHlsZSl7Ci0gICAgICAgIHJl
dHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHlsZSkudG9JbnQoKSB8fCAwOwotfTsKLQotZnVu
Y3Rpb24gYm9yZGVyQm94KGVsZW1lbnQpewotICAgICAgICByZXR1cm4gc3R5bGVTdHJpbmcoZWxl
bWVudCwgJy1tb3otYm94LXNpemluZycpID09ICdib3JkZXItYm94JzsKLX07Ci0KLWZ1bmN0aW9u
IHRvcEJvcmRlcihlbGVtZW50KXsKLSAgICAgICAgcmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQs
ICdib3JkZXItdG9wLXdpZHRoJyk7Ci19OwotCi1mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVsZW1lbnQp
ewotICAgICAgICByZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRo
Jyk7Ci19OwotCi1mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7Ci0gICAgICAgIHJldHVybiAoL14o
Pzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7Ci19OwotCi1mdW5jdGlvbiBn
ZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpewotICAgICAgICB2YXIgZG9jID0gZWxlbWVudC5nZXRE
b2N1bWVudCgpOwotICAgICAgICByZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0
TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTsKLX07Ci0KLX0pKCk7
Ci0KLS8vYWxpYXNlcwotCi1OYXRpdmUuaW1wbGVtZW50KFtXaW5kb3csIERvY3VtZW50LCBFbGVt
ZW50XSwgewotCi0gICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5nZXRTaXplKCkueTsKLSAgICAgICAgfSwKLQotICAgICAgICBnZXRXaWR0
aDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTaXplKCkueDsK
LSAgICAgICAgfSwKLQotICAgICAgICBnZXRTY3JvbGxUb3A6IGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTsKLSAgICAgICAgfSwKLQotICAgICAg
ICBnZXRTY3JvbGxMZWZ0OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmdldFNjcm9sbCgpLng7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0U2Nyb2xsSGVpZ2h0OiBm
dW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS55
OwotICAgICAgICB9LAotCi0gICAgICAgIGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpewotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54OwotICAgICAgICB9LAot
Ci0gICAgICAgIGdldFRvcDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5nZXRQb3NpdGlvbigpLnk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0TGVmdDogZnVuY3Rp
b24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7Ci0gICAg
ICAgIH0KLQotfSk7Ci0KLQotLyoKLVNjcmlwdDogU2VsZWN0b3JzLmpzCi0gICAgICAgIEFkZHMg
YWR2YW5jZWQgQ1NTIFF1ZXJ5aW5nIGNhcGFiaWxpdGllcyBmb3IgdGFyZ2V0aW5nIGVsZW1lbnRz
LiBBbHNvIGluY2x1ZGVzIHBzZXVkb3NlbGVjdG9ycyBzdXBwb3J0LgotCi1MaWNlbnNlOgotICAg
ICAgICBNSVQtc3R5bGUgbGljZW5zZS4KLSovCi0KLU5hdGl2ZS5pbXBsZW1lbnQoW0RvY3VtZW50
LCBFbGVtZW50XSwgewotCi0gICAgICAgIGdldEVsZW1lbnRzOiBmdW5jdGlvbihleHByZXNzaW9u
LCBub2Nhc2gpewotICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnNwbGl0
KCcsJyk7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW1zLCBsb2NhbCA9IHt9OwotICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXhwcmVzc2lvbi5sZW5ndGg7IGkgPCBsOyBpKysp
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gZXhwcmVzc2lvbltpXSwg
ZWxlbWVudHMgPSBTZWxlY3RvcnMuVXRpbHMuc2VhcmNoKHRoaXMsIHNlbGVjdG9yLCBsb2NhbCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAwICYmIGVsZW1lbnRzLml0ZW0pIGVs
ZW1lbnRzID0gJEEoZWxlbWVudHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSAo
aSA9PSAwKSA/IGVsZW1lbnRzIDogKGl0ZW1zLml0ZW0pID8gJEEoaXRlbXMpLmNvbmNhdChlbGVt
ZW50cykgOiBpdGVtcy5jb25jYXQoZWxlbWVudHMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnRzKGl0ZW1zLCB7ZGR1cDogKGV4cHJlc3Npb24u
bGVuZ3RoID4gMSksIGNhc2g6ICFub2Nhc2h9KTsKLSAgICAgICAgfQotCi19KTsKLQotRWxlbWVu
dC5pbXBsZW1lbnQoewotCi0gICAgICAgIG1hdGNoOiBmdW5jdGlvbihzZWxlY3Rvcil7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFzZWxlY3RvciB8fCAoc2VsZWN0b3IgPT0gdGhpcykpIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIHZhciB0YWdpZCA9IFNlbGVjdG9ycy5VdGlscy5wYXJzZVRh
Z0FuZElEKHNlbGVjdG9yKTsKLSAgICAgICAgICAgICAgICB2YXIgdGFnID0gdGFnaWRbMF0sIGlk
ID0gdGFnaWRbMV07Ci0gICAgICAgICAgICAgICAgaWYgKCFTZWxlY3RvcnMuRmlsdGVycy5ieUlE
KHRoaXMsIGlkKSB8fCAhU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcodGhpcywgdGFnKSkgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIHZhciBwYXJzZWQgPSBTZWxlY3RvcnMuVXRpbHMucGFy
c2VTZWxlY3RvcihzZWxlY3Rvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZWQpID8g
U2VsZWN0b3JzLlV0aWxzLmZpbHRlcih0aGlzLCBwYXJzZWQsIHt9KSA6IHRydWU7Ci0gICAgICAg
IH0KLQotfSk7Ci0KLXZhciBTZWxlY3RvcnMgPSB7Q2FjaGU6IHtudGg6IHt9LCBwYXJzZWQ6IHt9
fX07Ci0KLVNlbGVjdG9ycy5SZWdFeHBzID0gewotICAgICAgICBpZDogKC8jKFtcdy1dKykvKSwK
LSAgICAgICAgdGFnOiAoL14oXHcrfFwqKS8pLAotICAgICAgICBxdWljazogKC9eKFx3K3xcKikk
LyksCi0gICAgICAgIHNwbGl0dGVyOiAoL1xzKihbKz5+XHNdKVxzKihbYS16QS1aIy4qOlxbXSkv
ZyksCi0gICAgICAgIGNvbWJpbmVkOiAoL1wuKFtcdy1dKyl8XFsoXHcrKSg/OihbISpeJH58XT89
KShbIiddPykoW15cNF0qPylcNCk/XF18OihbXHctXSspKD86XChbIiddPyguKj8pP1siJ10/XCl8
JCkvZykKLX07Ci0KLVNlbGVjdG9ycy5VdGlscyA9IHsKLQotICAgICAgICBjaGs6IGZ1bmN0aW9u
KGl0ZW0sIHVuaXF1ZXMpewotICAgICAgICAgICAgICAgIGlmICghdW5pcXVlcykgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgdmFyIHVpZCA9ICR1aWQoaXRlbSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF1bmlxdWVzW3VpZF0pIHJldHVybiB1bmlxdWVzW3VpZF0gPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSwKLQotICAgICAgICBwYXJzZU50aEFy
Z3VtZW50OiBmdW5jdGlvbihhcmd1bWVudCl7Ci0gICAgICAgICAgICAgICAgaWYgKFNlbGVjdG9y
cy5DYWNoZS5udGhbYXJndW1lbnRdKSByZXR1cm4gU2VsZWN0b3JzLkNhY2hlLm50aFthcmd1bWVu
dF07Ci0gICAgICAgICAgICAgICAgdmFyIHBhcnNlZCA9IGFyZ3VtZW50Lm1hdGNoKC9eKFsrLV0/
XGQqKT8oW2Etel0rKT8oWystXT9cZCopPyQvKTsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNl
ZCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHZhciBpbnRhID0gcGFyc2VJbnQocGFy
c2VkWzFdKTsKLSAgICAgICAgICAgICAgICB2YXIgYSA9IChpbnRhIHx8IGludGEgPT09IDApID8g
aW50YSA6IDE7Ci0gICAgICAgICAgICAgICAgdmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwgZmFs
c2U7Ci0gICAgICAgICAgICAgICAgdmFyIGIgPSBwYXJzZUludChwYXJzZWRbM10pIHx8IDA7Ci0g
ICAgICAgICAgICAgICAgaWYgKGEgIT0gMCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiLS07
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYiA8IDEpIGIgKz0gYTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChiID49IGEpIGIgLT0gYTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzcGVjaWFsID0gJ2luZGV4JzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChzcGVjaWFsKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24n
OiBwYXJzZWQgPSB7YTogYSwgYjogYiwgc3BlY2lhbDogJ24nfTsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdvZGQnOiBwYXJzZWQgPSB7YTogMiwgYjogMCwgc3BlY2lhbDog
J24nfTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdldmVuJzogcGFyc2Vk
ID0ge2E6IDIsIGI6IDEsIHNwZWNpYWw6ICduJ307IGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnZmlyc3QnOiBwYXJzZWQgPSB7YTogMCwgc3BlY2lhbDogJ2luZGV4J307IGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGFzdCc6IHBhcnNlZCA9IHtzcGVj
aWFsOiAnbGFzdC1jaGlsZCd9OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J29ubHknOiBwYXJzZWQgPSB7c3BlY2lhbDogJ29ubHktY2hpbGQnfTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBwYXJzZWQgPSB7YTogKGEgLSAxKSwgc3BlY2lhbDog
J2luZGV4J307Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9ycy5DYWNoZS5udGhbYXJndW1lbnRdID0gcGFyc2VkOwotICAgICAgICB9LAotCi0gICAg
ICAgIHBhcnNlU2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKXsKLSAgICAgICAgICAgICAgICBp
ZiAoU2VsZWN0b3JzLkNhY2hlLnBhcnNlZFtzZWxlY3Rvcl0pIHJldHVybiBTZWxlY3RvcnMuQ2Fj
aGUucGFyc2VkW3NlbGVjdG9yXTsKLSAgICAgICAgICAgICAgICB2YXIgbSwgcGFyc2VkID0ge2Ns
YXNzZXM6IFtdLCBwc2V1ZG9zOiBbXSwgYXR0cmlidXRlczogW119OwotICAgICAgICAgICAgICAg
IHdoaWxlICgobSA9IFNlbGVjdG9ycy5SZWdFeHBzLmNvbWJpbmVkLmV4ZWMoc2VsZWN0b3IpKSl7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY24gPSBtWzFdLCBhbiA9IG1bMl0sIGFvID0g
bVszXSwgYXYgPSBtWzVdLCBwbiA9IG1bNl0sIHBhID0gbVs3XTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjbil7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5j
bGFzc2VzLnB1c2goY24pOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwbil7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBTZWxlY3RvcnMu
UHNldWRvLmdldChwbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJz
ZXIpIHBhcnNlZC5wc2V1ZG9zLnB1c2goe3BhcnNlcjogcGFyc2VyLCBhcmd1bWVudDogcGF9KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBwYXJzZWQuYXR0cmlidXRlcy5w
dXNoKHtuYW1lOiBwbiwgb3BlcmF0b3I6ICc9JywgdmFsdWU6IHBhfSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGFuKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7bmFtZTogYW4sIG9wZXJhdG9yOiBhbywgdmFsdWU6
IGF2fSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICghcGFyc2VkLmNsYXNzZXMubGVuZ3RoKSBkZWxldGUgcGFyc2VkLmNs
YXNzZXM7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQuYXR0cmlidXRlcy5sZW5ndGgpIGRl
bGV0ZSBwYXJzZWQuYXR0cmlidXRlczsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZC5wc2V1
ZG9zLmxlbmd0aCkgZGVsZXRlIHBhcnNlZC5wc2V1ZG9zOwotICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VkLmNsYXNzZXMgJiYgIXBhcnNlZC5hdHRyaWJ1dGVzICYmICFwYXJzZWQucHNldWRvcykg
cGFyc2VkID0gbnVsbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JzLkNhY2hlLnBh
cnNlZFtzZWxlY3Rvcl0gPSBwYXJzZWQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcGFyc2VUYWdB
bmRJRDogZnVuY3Rpb24oc2VsZWN0b3IpewotICAgICAgICAgICAgICAgIHZhciB0YWcgPSBzZWxl
Y3Rvci5tYXRjaChTZWxlY3RvcnMuUmVnRXhwcy50YWcpOwotICAgICAgICAgICAgICAgIHZhciBp
ZCA9IHNlbGVjdG9yLm1hdGNoKFNlbGVjdG9ycy5SZWdFeHBzLmlkKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gWyh0YWcpID8gdGFnWzFdIDogJyonLCAoaWQpID8gaWRbMV0gOiBmYWxzZV07Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgZmlsdGVyOiBmdW5jdGlvbihpdGVtLCBwYXJzZWQsIGxvY2Fs
KXsKLSAgICAgICAgICAgICAgICB2YXIgaTsKLSAgICAgICAgICAgICAgICBpZiAocGFyc2VkLmNs
YXNzZXMpewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gcGFyc2VkLmNsYXNzZXMu
bGVuZ3RoOyBpLS07IGkpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY24g
PSBwYXJzZWQuY2xhc3Nlc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFTZWxlY3RvcnMuRmlsdGVycy5ieUNsYXNzKGl0ZW0sIGNuKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAocGFyc2VkLmF0dHJpYnV0ZXMpewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
ID0gcGFyc2VkLmF0dHJpYnV0ZXMubGVuZ3RoOyBpLS07IGkpewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgYXR0ID0gcGFyc2VkLmF0dHJpYnV0ZXNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghU2VsZWN0b3JzLkZpbHRlcnMuYnlBdHRyaWJ1dGUo
aXRlbSwgYXR0Lm5hbWUsIGF0dC5vcGVyYXRvciwgYXR0LnZhbHVlKSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAocGFyc2VkLnBzZXVkb3MpewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
ID0gcGFyc2VkLnBzZXVkb3MubGVuZ3RoOyBpLS07IGkpewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcHNkID0gcGFyc2VkLnBzZXVkb3NbaV07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghU2VsZWN0b3JzLkZpbHRlcnMuYnlQc2V1ZG8oaXRlbSwgcHNk
LnBhcnNlciwgcHNkLmFyZ3VtZW50LCBsb2NhbCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0QnlUYWdBbmRJRDogZnVuY3Rpb24oY3R4
LCB0YWcsIGlkKXsKLSAgICAgICAgICAgICAgICBpZiAoaWQpewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGl0ZW0gPSAoY3R4LmdldEVsZW1lbnRCeUlkKSA/IGN0eC5nZXRFbGVtZW50QnlJ
ZChpZCwgdHJ1ZSkgOiBFbGVtZW50LmdldEVsZW1lbnRCeUlkKGN0eCwgaWQsIHRydWUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtICYmIFNlbGVjdG9ycy5GaWx0ZXJzLmJ5
VGFnKGl0ZW0sIHRhZykpID8gW2l0ZW1dIDogW107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZ2V0RWxlbWVudHNCeVRhZ05hbWUo
dGFnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc2VhcmNoOiBm
dW5jdGlvbihzZWxmLCBleHByZXNzaW9uLCBsb2NhbCl7Ci0gICAgICAgICAgICAgICAgdmFyIHNw
bGl0dGVycyA9IFtdOwotCi0gICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IGV4cHJlc3Np
b24udHJpbSgpLnJlcGxhY2UoU2VsZWN0b3JzLlJlZ0V4cHMuc3BsaXR0ZXIsIGZ1bmN0aW9uKG0w
LCBtMSwgbTIpewotICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZXJzLnB1c2gobTEpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc6KScgKyBtMjsKLSAgICAgICAgICAgICAg
ICB9KS5zcGxpdCgnOiknKTsKLQotICAgICAgICAgICAgICAgIHZhciBpdGVtcywgZmlsdGVyZWQs
IGl0ZW07Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNlbGVjdG9ycy5s
ZW5ndGg7IGkgPCBsOyBpKyspewotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0
b3IgPSBzZWxlY3RvcnNbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAg
JiYgU2VsZWN0b3JzLlJlZ0V4cHMucXVpY2sudGVzdChzZWxlY3RvcikpewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IHNlbGYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoc2Vs
ZWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0
dGVyID0gc3BsaXR0ZXJzW2kgLSAxXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRh
Z2lkID0gU2VsZWN0b3JzLlV0aWxzLnBhcnNlVGFnQW5kSUQoc2VsZWN0b3IpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRhZ2lkWzBdLCBpZCA9IHRhZ2lkWzFdOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKXsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbXMgPSBTZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdBbmRJRChzZWxmLCB0YWcs
IGlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB1bmlxdWVzID0ge30sIGZvdW5kID0gW107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBrID0gaXRlbXMubGVuZ3RoOyBq
IDwgazsgaisrKSBmb3VuZCA9IFNlbGVjdG9ycy5HZXR0ZXJzW3NwbGl0dGVyXShmb3VuZCwgaXRl
bXNbal0sIHRhZywgaWQsIHVuaXF1ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpdGVtcyA9IGZvdW5kOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gU2VsZWN0b3JzLlV0aWxzLnBhcnNlU2VsZWN0b3Io
c2VsZWN0b3IpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkKXsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQgPSBbXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDAsIG4gPSBpdGVtcy5sZW5ndGg7IG0gPCBu
OyBtKyspewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBp
dGVtc1ttXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2Vs
ZWN0b3JzLlV0aWxzLmZpbHRlcihpdGVtLCBwYXJzZWQsIGxvY2FsKSkgZmlsdGVyZWQucHVzaChp
dGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVtcyA9IGZpbHRlcmVkOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1z
OwotCi0gICAgICAgIH0KLQotfTsKLQotU2VsZWN0b3JzLkdldHRlcnMgPSB7Ci0KLSAgICAgICAg
JyAnOiBmdW5jdGlvbihmb3VuZCwgc2VsZiwgdGFnLCBpZCwgdW5pcXVlcyl7Ci0gICAgICAgICAg
ICAgICAgdmFyIGl0ZW1zID0gU2VsZWN0b3JzLlV0aWxzLmdldEJ5VGFnQW5kSUQoc2VsZiwgdGFn
LCBpZCk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7
IGkgPCBsOyBpKyspewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWxlY3RvcnMuVXRpbHMuY2hrKGl0ZW0s
IHVuaXF1ZXMpKSBmb3VuZC5wdXNoKGl0ZW0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgJz4nOiBmdW5jdGlv
bihmb3VuZCwgc2VsZiwgdGFnLCBpZCwgdW5pcXVlcyl7Ci0gICAgICAgICAgICAgICAgdmFyIGNo
aWxkcmVuID0gU2VsZWN0b3JzLlV0aWxzLmdldEJ5VGFnQW5kSUQoc2VsZiwgdGFnLCBpZCk7Ci0g
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBs
OyBpKyspewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQucGFyZW50Tm9kZSA9PSBzZWxmICYm
IFNlbGVjdG9ycy5VdGlscy5jaGsoY2hpbGQsIHVuaXF1ZXMpKSBmb3VuZC5wdXNoKGNoaWxkKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAg
ICB9LAotCi0gICAgICAgICcrJzogZnVuY3Rpb24oZm91bmQsIHNlbGYsIHRhZywgaWQsIHVuaXF1
ZXMpewotICAgICAgICAgICAgICAgIHdoaWxlICgoc2VsZiA9IHNlbGYubmV4dFNpYmxpbmcpKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLm5vZGVUeXBlID09IDEpewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VsZWN0b3JzLlV0aWxzLmNoayhzZWxmLCB1
bmlxdWVzKSAmJiBTZWxlY3RvcnMuRmlsdGVycy5ieVRhZyhzZWxmLCB0YWcpICYmIFNlbGVjdG9y
cy5GaWx0ZXJzLmJ5SUQoc2VsZiwgaWQpKSBmb3VuZC5wdXNoKHNlbGYpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAgICB9
LAotCi0gICAgICAgICd+JzogZnVuY3Rpb24oZm91bmQsIHNlbGYsIHRhZywgaWQsIHVuaXF1ZXMp
ewotICAgICAgICAgICAgICAgIHdoaWxlICgoc2VsZiA9IHNlbGYubmV4dFNpYmxpbmcpKXsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLm5vZGVUeXBlID09IDEpewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVNlbGVjdG9ycy5VdGlscy5jaGsoc2VsZiwgdW5p
cXVlcykpIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VsZWN0
b3JzLkZpbHRlcnMuYnlUYWcoc2VsZiwgdGFnKSAmJiBTZWxlY3RvcnMuRmlsdGVycy5ieUlEKHNl
bGYsIGlkKSkgZm91bmQucHVzaChzZWxmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAgICB9
Ci0KLX07Ci0KLVNlbGVjdG9ycy5GaWx0ZXJzID0gewotCi0gICAgICAgIGJ5VGFnOiBmdW5jdGlv
bihzZWxmLCB0YWcpewotICAgICAgICAgICAgICAgIHJldHVybiAodGFnID09ICcqJyB8fCAoc2Vs
Zi50YWdOYW1lICYmIHNlbGYudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09IHRhZykpOwotICAgICAg
ICB9LAotCi0gICAgICAgIGJ5SUQ6IGZ1bmN0aW9uKHNlbGYsIGlkKXsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gKCFpZCB8fCAoc2VsZi5pZCAmJiBzZWxmLmlkID09IGlkKSk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgYnlDbGFzczogZnVuY3Rpb24oc2VsZiwga2xhc3MpewotICAgICAgICAgICAg
ICAgIHJldHVybiAoc2VsZi5jbGFzc05hbWUgJiYgc2VsZi5jbGFzc05hbWUuY29udGFpbnMoa2xh
c3MsICcgJykpOwotICAgICAgICB9LAotCi0gICAgICAgIGJ5UHNldWRvOiBmdW5jdGlvbihzZWxm
LCBwYXJzZXIsIGFyZ3VtZW50LCBsb2NhbCl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ci5jYWxsKHNlbGYsIGFyZ3VtZW50LCBsb2NhbCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYnlB
dHRyaWJ1dGU6IGZ1bmN0aW9uKHNlbGYsIG5hbWUsIG9wZXJhdG9yLCB2YWx1ZSl7Ci0gICAgICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IEVsZW1lbnQucHJvdG90eXBlLmdldFByb3BlcnR5LmNhbGwo
c2VsZiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiAob3BlcmF0
b3IgPT0gJyE9Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvcGVyYXRvciB8fCB2YWx1ZSA9PSB1
bmRlZmluZWQpIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3Ip
ewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnPSc6IHJldHVybiAocmVzdWx0ID09IHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyo9JzogcmV0dXJuIChyZXN1bHQu
Y29udGFpbnModmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ149JzogcmV0
dXJuIChyZXN1bHQuc3Vic3RyKDAsIHZhbHVlLmxlbmd0aCkgPT0gdmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnJD0nOiByZXR1cm4gKHJlc3VsdC5zdWJzdHIocmVzdWx0Lmxl
bmd0aCAtIHZhbHVlLmxlbmd0aCkgPT0gdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnIT0nOiByZXR1cm4gKHJlc3VsdCAhPSB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICd+PSc6IHJldHVybiByZXN1bHQuY29udGFpbnModmFsdWUsICcgJyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICd8PSc6IHJldHVybiByZXN1bHQuY29udGFpbnModmFs
dWUsICctJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi19OwotCi1TZWxlY3RvcnMuUHNldWRvID0gbmV3IEhhc2goewotCi0g
ICAgICAgIC8vIHczYyBwc2V1ZG8gc2VsZWN0b3JzCi0KLSAgICAgICAgY2hlY2tlZDogZnVuY3Rp
b24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja2VkOwotICAgICAgICB9LAot
Ci0gICAgICAgIGVtcHR5OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVybiAhKHRo
aXMuaW5uZXJUZXh0IHx8IHRoaXMudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDsKLSAgICAgICAg
fSwKLQotICAgICAgICBub3Q6IGZ1bmN0aW9uKHNlbGVjdG9yKXsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gIUVsZW1lbnQubWF0Y2godGhpcywgc2VsZWN0b3IpOwotICAgICAgICB9LAotCi0gICAg
ICAgIGNvbnRhaW5zOiBmdW5jdGlvbih0ZXh0KXsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHRo
aXMuaW5uZXJUZXh0IHx8IHRoaXMudGV4dENvbnRlbnQgfHwgJycpLmNvbnRhaW5zKHRleHQpOwot
ICAgICAgICB9LAotCi0gICAgICAgICdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9ycy5Qc2V1ZG8uaW5kZXguY2FsbCh0aGlzLCAwKTsKLSAg
ICAgICAgfSwKLQotICAgICAgICAnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAg
ICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzOwotICAgICAgICAgICAgICAgIHdoaWxlICgoZWxlbWVu
dCA9IGVsZW1lbnQubmV4dFNpYmxpbmcpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgJ29ubHkt
Y2hpbGQnOiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gdGhpczsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXM7Ci0g
ICAgICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fSwKLQotICAgICAgICAnbnRoLWNoaWxkJzogZnVuY3Rpb24oYXJndW1lbnQsIGxvY2FsKXsKLSAg
ICAgICAgICAgICAgICBhcmd1bWVudCA9IChhcmd1bWVudCA9PSB1bmRlZmluZWQpID8gJ24nIDog
YXJndW1lbnQ7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcnNlZCA9IFNlbGVjdG9ycy5VdGlscy5w
YXJzZU50aEFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAocGFyc2VkLnNw
ZWNpYWwgIT0gJ24nKSByZXR1cm4gU2VsZWN0b3JzLlBzZXVkb1twYXJzZWQuc3BlY2lhbF0uY2Fs
bCh0aGlzLCBwYXJzZWQuYSwgbG9jYWwpOwotICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7
Ci0gICAgICAgICAgICAgICAgbG9jYWwucG9zaXRpb25zID0gbG9jYWwucG9zaXRpb25zIHx8IHt9
OwotICAgICAgICAgICAgICAgIHZhciB1aWQgPSAkdWlkKHRoaXMpOwotICAgICAgICAgICAgICAg
IGlmICghbG9jYWwucG9zaXRpb25zW3VpZF0pewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHNlbGYgPSB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChzZWxmID0gc2Vs
Zi5wcmV2aW91c1NpYmxpbmcpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNlbGYubm9kZVR5cGUgIT0gMSkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50ICsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9z
aXRpb24gPSBsb2NhbC5wb3NpdGlvbnNbJHVpZChzZWxmKV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwb3NpdGlvbiAhPSB1bmRlZmluZWQpewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gcG9zaXRpb24gKyBjb3VudDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYWwucG9zaXRpb25zW3VpZF0gPSBjb3VudDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChsb2NhbC5wb3NpdGlvbnNbdWlkXSAlIHBh
cnNlZC5hID09IHBhcnNlZC5iKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBjdXN0b20gcHNl
dWRvIHNlbGVjdG9ycwotCi0gICAgICAgIGluZGV4OiBmdW5jdGlvbihpbmRleCl7Ci0gICAgICAg
ICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLCBjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAg
d2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c1NpYmxpbmcpKXsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlID09IDEgJiYgKytjb3VudCA+IGluZGV4
KSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biAoY291bnQgPT0gaW5kZXgpOwotICAgICAgICB9LAotCi0gICAgICAgIGV2ZW46IGZ1bmN0aW9u
KGFyZ3VtZW50LCBsb2NhbCl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9ycy5Qc2V1
ZG9bJ250aC1jaGlsZCddLmNhbGwodGhpcywgJzJuKzEnLCBsb2NhbCk7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgb2RkOiBmdW5jdGlvbihhcmd1bWVudCwgbG9jYWwpewotICAgICAgICAgICAgICAg
IHJldHVybiBTZWxlY3RvcnMuUHNldWRvWydudGgtY2hpbGQnXS5jYWxsKHRoaXMsICcybicsIGxv
Y2FsKTsKLSAgICAgICAgfQotCi19KTsKLQotCi0vKgotU2NyaXB0OiBEb21yZWFkeS5qcwotICAg
ICAgICBDb250YWlucyB0aGUgZG9tcmVhZHkgY3VzdG9tIGV2ZW50LgotCi1MaWNlbnNlOgotICAg
ICAgICBNSVQtc3R5bGUgbGljZW5zZS4KLSovCi0KLUVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0g
ewotCi0gICAgICAgIG9uQWRkOiBmdW5jdGlvbihmbil7Ci0gICAgICAgICAgICAgICAgaWYgKEJy
b3dzZXIubG9hZGVkKSBmbi5jYWxsKHRoaXMpOwotICAgICAgICB9Ci0KLX07Ci0KLShmdW5jdGlv
bigpewotCi0gICAgICAgIHZhciBkb21yZWFkeSA9IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAg
ICAgaWYgKEJyb3dzZXIubG9hZGVkKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgQnJvd3Nlci5s
b2FkZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHdpbmRvdy5maXJlRXZlbnQoJ2RvbXJlYWR5
Jyk7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFkeScpOwotICAg
ICAgICB9OwotCi0gICAgICAgIGlmIChCcm93c2VyLkVuZ2luZS50cmlkZW50KXsKLSAgICAgICAg
ICAgICAgICB2YXIgdGVtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAg
ICAgICAgICAgIChmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAgICAgKCR0cnkoZnVu
Y3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5kb1Njcm9sbCgn
bGVmdCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh0ZW1wKS5p
bmplY3QoZG9jdW1lbnQuYm9keSkuc2V0KCdodG1sJywgJ3RlbXAnKS5kaXNwb3NlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9KSkgPyBkb21yZWFkeSgpIDogYXJndW1lbnRzLmNhbGxlZS5k
ZWxheSg1MCk7Ci0gICAgICAgICAgICAgICAgfSkoKTsKLSAgICAgICAgfSBlbHNlIGlmIChCcm93
c2VyLkVuZ2luZS53ZWJraXQgJiYgQnJvd3Nlci5FbmdpbmUudmVyc2lvbiA8IDUyNSl7Ci0gICAg
ICAgICAgICAgICAgKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoWydsb2Fk
ZWQnLCAnY29tcGxldGUnXS5jb250YWlucyhkb2N1bWVudC5yZWFkeVN0YXRlKSkgPyBkb21yZWFk
eSgpIDogYXJndW1lbnRzLmNhbGxlZS5kZWxheSg1MCk7Ci0gICAgICAgICAgICAgICAgfSkoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnQoJ2xvYWQn
LCBkb21yZWFkeSk7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnQoJ0RPTUNvbnRl
bnRMb2FkZWQnLCBkb21yZWFkeSk7Ci0gICAgICAgIH0KLQotfSkoKTsKLQotCi0vKgotU2NyaXB0
OiBKU09OLmpzCi0gICAgICAgIEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci4KLQotTGljZW5zZToK
LSAgICAgICAgTUlULXN0eWxlIGxpY2Vuc2UuCi0KLVNlZSBBbHNvOgotICAgICAgICA8aHR0cDov
L3d3dy5qc29uLm9yZy8+Ci0qLwotCi12YXIgSlNPTiA9IG5ldyBIYXNoKHsKLQotICAgICAgICAk
c3BlY2lhbENoYXJzOiB7J1xiJzogJ1xcYicsICdcdCc6ICdcXHQnLCAnXG4nOiAnXFxuJywgJ1xm
JzogJ1xcZicsICdccic6ICdcXHInLCAnIicgOiAnXFwiJywgJ1xcJzogJ1xcXFwnfSwKLQotICAg
ICAgICAkcmVwbGFjZUNoYXJzOiBmdW5jdGlvbihjaHIpewotICAgICAgICAgICAgICAgIHJldHVy
biBKU09OLiRzcGVjaWFsQ2hhcnNbY2hyXSB8fCAnXFx1MDAnICsgTWF0aC5mbG9vcihjaHIuY2hh
ckNvZGVBdCgpIC8gMTYpLnRvU3RyaW5nKDE2KSArIChjaHIuY2hhckNvZGVBdCgpICUgMTYpLnRv
U3RyaW5nKDE2KTsKLSAgICAgICAgfSwKLQotICAgICAgICBlbmNvZGU6IGZ1bmN0aW9uKG9iail7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoICgkdHlwZShvYmopKXsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ3N0cmluZyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAnIicgKyBvYmoucmVwbGFjZSgvW1x4MDAtXHgxZlxcIl0vZywgSlNPTi4kcmVwbGFjZUNo
YXJzKSArICciJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FycmF5JzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbJyArIFN0cmluZyhvYmoubWFwKEpT
T04uZW5jb2RlKS5maWx0ZXIoJGRlZmluZWQpKSArICddJzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgc3RyaW5nID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEhhc2guZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uKSBzdHJpbmcucHVz
aChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3sn
ICsgc3RyaW5nICsgJ30nOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzog
Y2FzZSAnYm9vbGVhbic6IHJldHVybiBTdHJpbmcob2JqKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgZmFsc2U6IHJldHVybiAnbnVsbCc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9LAotCi0gICAgICAgIGRlY29kZTogZnVu
Y3Rpb24oc3RyaW5nLCBzZWN1cmUpewotICAgICAgICAgICAgICAgIGlmICgkdHlwZShzdHJpbmcp
ICE9ICdzdHJpbmcnIHx8ICFzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDsKLSAgICAgICAgICAg
ICAgICBpZiAoc2VjdXJlICYmICEoL15bLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11IFxuXHJcdF0q
JC8pLnRlc3Qoc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCAnQCcpLnJlcGxhY2UoLyJbXiJcXFxuXHJd
KiIvZywgJycpKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoJygn
ICsgc3RyaW5nICsgJyknKTsKLSAgICAgICAgfQotCi19KTsKLQotTmF0aXZlLmltcGxlbWVudChb
SGFzaCwgQXJyYXksIFN0cmluZywgTnVtYmVyXSwgewotCi0gICAgICAgIHRvSlNPTjogZnVuY3Rp
b24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5lbmNvZGUodGhpcyk7Ci0gICAgICAg
IH0KLQotfSk7Ci0KLQotLyoKLVNjcmlwdDogQ29va2llLmpzCi0gICAgICAgIENsYXNzIGZvciBj
cmVhdGluZywgbG9hZGluZywgYW5kIHNhdmluZyBicm93c2VyIENvb2tpZXMuCi0KLUxpY2Vuc2U6
Ci0gICAgICAgIE1JVC1zdHlsZSBsaWNlbnNlLgotCi1DcmVkaXRzOgotICAgICAgICBCYXNlZCBv
biB0aGUgZnVuY3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3Jn
KS4KLSovCi0KLXZhciBDb29raWUgPSBuZXcgQ2xhc3MoewotCi0gICAgICAgIEltcGxlbWVudHM6
IE9wdGlvbnMsCi0KLSAgICAgICAgb3B0aW9uczogewotICAgICAgICAgICAgICAgIHBhdGg6IGZh
bHNlLAotICAgICAgICAgICAgICAgIGRvbWFpbjogZmFsc2UsCi0gICAgICAgICAgICAgICAgZHVy
YXRpb246IGZhbHNlLAotICAgICAgICAgICAgICAgIHNlY3VyZTogZmFsc2UsCi0gICAgICAgICAg
ICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaW5pdGlhbGl6
ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXsKLSAgICAgICAgICAgICAgICB0aGlzLmtleSA9IGtl
eTsKLSAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAgICAgICAgICAgICB2YWx1
ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
b3B0aW9ucy5kb21haW4pIHZhbHVlICs9ICc7IGRvbWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFp
bjsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBhdGgpIHZhbHVlICs9ICc7IHBh
dGg9JyArIHRoaXMub3B0aW9ucy5wYXRoOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlv
bnMuZHVyYXRpb24pewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgp
ICsgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogMjQgKiA2MCAqIDYwICogMTAwMCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSArPSAnOyBleHBpcmVzPScgKyBkYXRlLnRvR01UU3RyaW5n
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMu
c2VjdXJlKSB2YWx1ZSArPSAnOyBzZWN1cmUnOwotICAgICAgICAgICAgICAgIHRoaXMub3B0aW9u
cy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVlOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIHJlYWQ6IGZ1bmN0aW9uKCl7
Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tp
ZS5tYXRjaCgnKD86Xnw7KVxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtd
KiknKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBvbmVu
dCh2YWx1ZVsxXSkgOiBudWxsOwotICAgICAgICB9LAotCi0gICAgICAgIGRpc3Bvc2U6IGZ1bmN0
aW9uKCl7Ci0gICAgICAgICAgICAgICAgbmV3IENvb2tpZSh0aGlzLmtleSwgJG1lcmdlKHRoaXMu
b3B0aW9ucywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotfSk7Ci0KLUNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtl
eSwgdmFsdWUsIG9wdGlvbnMpewotICAgICAgICByZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlv
bnMpLndyaXRlKHZhbHVlKTsKLX07Ci0KLUNvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXsKLSAg
ICAgICAgcmV0dXJuIG5ldyBDb29raWUoa2V5KS5yZWFkKCk7Ci19OwotCi1Db29raWUuZGlzcG9z
ZSA9IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7Ci0gICAgICAgIHJldHVybiBuZXcgQ29va2llKGtl
eSwgb3B0aW9ucykuZGlzcG9zZSgpOwotfTsKLQotCi0vKgotU2NyaXB0OiBTd2lmZi5qcwotICAg
ICAgICBXcmFwcGVyIGZvciBlbWJlZGRpbmcgU1dGIG1vdmllcy4gU3VwcG9ydHMgKGFuZCBmaXhl
cykgRXh0ZXJuYWwgSW50ZXJmYWNlIENvbW11bmljYXRpb24uCi0KLUxpY2Vuc2U6Ci0gICAgICAg
IE1JVC1zdHlsZSBsaWNlbnNlLgotCi1DcmVkaXRzOgotICAgICAgICBGbGFzaCBkZXRlY3Rpb24g
JiBJbnRlcm5ldCBFeHBsb3JlciArIEZsYXNoIFBsYXllciA5IGZpeCBpbnNwaXJlZCBieSBTV0ZP
YmplY3QuCi0qLwotCi12YXIgU3dpZmYgPSBuZXcgQ2xhc3MoewotCi0gICAgICAgIEltcGxlbWVu
dHM6IFtPcHRpb25zXSwKLQotICAgICAgICBvcHRpb25zOiB7Ci0gICAgICAgICAgICAgICAgaWQ6
IG51bGwsCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiAxLAotICAgICAgICAgICAgICAgIHdpZHRo
OiAxLAotICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogbnVsbCwKLSAgICAgICAgICAgICAgICBw
cm9wZXJ0aWVzOiB7fSwKLSAgICAgICAgICAgICAgICBwYXJhbXM6IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHF1YWxpdHk6ICdoaWdoJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93
U2NyaXB0QWNjZXNzOiAnYWx3YXlzJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHdNb2RlOiAn
dHJhbnNwYXJlbnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgc3dMaXZlQ29ubmVjdDogdHJ1
ZQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgY2FsbEJhY2tzOiB7fSwKLSAg
ICAgICAgICAgICAgICB2YXJzOiB7fQotICAgICAgICB9LAotCi0gICAgICAgIHRvRWxlbWVudDog
ZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3Q7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ocGF0aCwgb3B0aW9ucyl7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9ICdTd2lmZl8nICsgJHRpbWUoKTsKLQotICAgICAg
ICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKLSAgICAgICAgICAgICAgICBvcHRp
b25zID0gdGhpcy5vcHRpb25zOwotICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuaWQgPSBv
cHRpb25zLmlkIHx8IHRoaXMuaW5zdGFuY2U7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5l
ciA9ICQob3B0aW9ucy5jb250YWluZXIpOwotCi0gICAgICAgICAgICAgICAgU3dpZmYuQ2FsbEJh
Y2tzW3RoaXMuaW5zdGFuY2VdID0ge307Ci0KLSAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0g
b3B0aW9ucy5wYXJhbXMsIHZhcnMgPSBvcHRpb25zLnZhcnMsIGNhbGxCYWNrcyA9IG9wdGlvbnMu
Y2FsbEJhY2tzOwotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gJGV4dGVuZCh7aGVp
Z2h0OiBvcHRpb25zLmhlaWdodCwgd2lkdGg6IG9wdGlvbnMud2lkdGh9LCBvcHRpb25zLnByb3Bl
cnRpZXMpOwotCi0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotCi0gICAgICAgICAg
ICAgICAgZm9yICh2YXIgY2FsbEJhY2sgaW4gY2FsbEJhY2tzKXsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFN3aWZmLkNhbGxCYWNrc1t0aGlzLmluc3RhbmNlXVtjYWxsQmFja10gPSAoZnVuY3Rp
b24ob3B0aW9uKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9w
dGlvbi5hcHBseShzZWxmLm9iamVjdCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pKGNhbGxCYWNrc1tjYWxs
QmFja10pOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyc1tjYWxsQmFja10gPSAnU3dpZmYu
Q2FsbEJhY2tzLicgKyB0aGlzLmluc3RhbmNlICsgJy4nICsgY2FsbEJhY2s7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcGFyYW1zLmZsYXNoVmFycyA9IEhhc2gudG9RdWVy
eVN0cmluZyh2YXJzKTsKLSAgICAgICAgICAgICAgICBpZiAoQnJvd3Nlci5FbmdpbmUudHJpZGVu
dCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmNsYXNzaWQgPSAnY2xzaWQ6
RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwJzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy5tb3ZpZSA9IHBhdGg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudHlwZSA9ICdhcHBsaWNhdGlvbi94LXNo
b2Nrd2F2ZS1mbGFzaCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRhdGEg
PSBwYXRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgYnVpbGQgPSAn
PG9iamVjdCBpZD0iJyArIGlkICsgJyInOwotICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3Bl
cnR5IGluIHByb3BlcnRpZXMpIGJ1aWxkICs9ICcgJyArIHByb3BlcnR5ICsgJz0iJyArIHByb3Bl
cnRpZXNbcHJvcGVydHldICsgJyInOwotICAgICAgICAgICAgICAgIGJ1aWxkICs9ICc+JzsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBwYXJhbSBpbiBwYXJhbXMpewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcmFtc1twYXJhbV0pIGJ1aWxkICs9ICc8cGFyYW0gbmFtZT0iJyArIHBh
cmFtICsgJyIgdmFsdWU9IicgKyBwYXJhbXNbcGFyYW1dICsgJyIgLz4nOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBidWlsZCArPSAnPC9vYmplY3Q+JzsKLSAgICAgICAgICAg
ICAgICB0aGlzLm9iamVjdCA9ICgoY29udGFpbmVyKSA/IGNvbnRhaW5lci5lbXB0eSgpIDogbmV3
IEVsZW1lbnQoJ2RpdicpKS5zZXQoJ2h0bWwnLCBidWlsZCkuZmlyc3RDaGlsZDsKLSAgICAgICAg
fSwKLQotICAgICAgICByZXBsYWNlczogZnVuY3Rpb24oZWxlbWVudCl7Ci0gICAgICAgICAgICAg
ICAgZWxlbWVudCA9ICQoZWxlbWVudCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5w
YXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLnRvRWxlbWVudCgpLCBlbGVtZW50KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBpbmplY3Q6IGZ1
bmN0aW9uKGVsZW1lbnQpewotICAgICAgICAgICAgICAgICQoZWxlbWVudCwgdHJ1ZSkuYXBwZW5k
Q2hpbGQodGhpcy50b0VsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgcmVtb3RlOiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAg
IHJldHVybiBTd2lmZi5yZW1vdGUuYXBwbHkoU3dpZmYsIFt0aGlzLnRvRWxlbWVudCgpXS5leHRl
bmQoYXJndW1lbnRzKSk7Ci0gICAgICAgIH0KLQotfSk7Ci0KLVN3aWZmLkNhbGxCYWNrcyA9IHt9
OwotCi1Td2lmZi5yZW1vdGUgPSBmdW5jdGlvbihvYmosIGZuKXsKLSAgICAgICAgdmFyIHJzID0g
b2JqLkNhbGxGdW5jdGlvbignPGludm9rZSBuYW1lPSInICsgZm4gKyAnIiByZXR1cm50eXBlPSJq
YXZhc2NyaXB0Ij4nICsgX19mbGFzaF9fYXJndW1lbnRzVG9YTUwoYXJndW1lbnRzLCAyKSArICc8
L2ludm9rZT4nKTsKLSAgICAgICAgcmV0dXJuIGV2YWwocnMpOwotfTsKLQotCi0vKgotU2NyaXB0
OiBGeC5qcwotICAgICAgICBDb250YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJl
IGV4dGVuZGVkIGJ5IGFsbCBvdGhlciBGeCBDbGFzc2VzLgotCi1MaWNlbnNlOgotICAgICAgICBN
SVQtc3R5bGUgbGljZW5zZS4KLSovCi0KLXZhciBGeCA9IG5ldyBDbGFzcyh7Ci0KLSAgICAgICAg
SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnNdLAotCi0gICAgICAgIG9wdGlvbnM6
IHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgIG9uU3RhcnQ6ICRlbXB0eSwK
LSAgICAgICAgICAgICAgICBvbkNhbmNlbDogJGVtcHR5LAotICAgICAgICAgICAgICAgIG9uQ29t
cGxldGU6ICRlbXB0eSwKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGZwczog
NTAsCi0gICAgICAgICAgICAgICAgdW5pdDogZmFsc2UsCi0gICAgICAgICAgICAgICAgZHVyYXRp
b246IDUwMCwKLSAgICAgICAgICAgICAgICBsaW5rOiAnaWdub3JlJwotICAgICAgICB9LAotCi0g
ICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpewotICAgICAgICAgICAgICAgIHRo
aXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlzOwotICAgICAgICAgICAgICAgIHRoaXMu
c2V0T3B0aW9ucyhvcHRpb25zKTsKLSAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZHVyYXRp
b24gPSBGeC5EdXJhdGlvbnNbdGhpcy5vcHRpb25zLmR1cmF0aW9uXSB8fCB0aGlzLm9wdGlvbnMu
ZHVyYXRpb24udG9JbnQoKTsKLSAgICAgICAgICAgICAgICB2YXIgd2FpdCA9IHRoaXMub3B0aW9u
cy53YWl0OwotICAgICAgICAgICAgICAgIGlmICh3YWl0ID09PSBmYWxzZSkgdGhpcy5vcHRpb25z
LmxpbmsgPSAnY2FuY2VsJzsKLSAgICAgICAgfSwKLQotICAgICAgICBnZXRUcmFuc2l0aW9uOiBm
dW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihwKXsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAtKE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjsK
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIHN0ZXA6IGZ1bmN0aW9u
KCl7Ci0gICAgICAgICAgICAgICAgdmFyIHRpbWUgPSAkdGltZSgpOwotICAgICAgICAgICAgICAg
IGlmICh0aW1lIDwgdGhpcy50aW1lICsgdGhpcy5vcHRpb25zLmR1cmF0aW9uKXsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbigodGltZSAtIHRoaXMu
dGltZSkgLyB0aGlzLm9wdGlvbnMuZHVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEpKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodGhp
cy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb21wbGV0ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAg
ICAgICBzZXQ6IGZ1bmN0aW9uKG5vdyl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vdzsKLSAg
ICAgICAgfSwKLQotICAgICAgICBjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpewot
ICAgICAgICAgICAgICAgIHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBkZWx0YSk7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgY2hlY2s6IGZ1bmN0aW9uKGNhbGxlcil7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLnRpbWVyKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KHRoaXMub3B0aW9ucy5saW5rKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhbmNl
bCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnY2hhaW4nOiB0aGlzLmNoYWluKGNhbGxlci5iaW5kKHRoaXMsIEFycmF5LnNsaWNlKGFy
Z3VtZW50cywgMSkpKTsgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc3RhcnQ6IGZ1bmN0
aW9uKGZyb20sIHRvKXsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2soYXJndW1lbnRz
LmNhbGxlZSwgZnJvbSwgdG8pKSByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB0aGlzLmZy
b20gPSBmcm9tOwotICAgICAgICAgICAgICAgIHRoaXMudG8gPSB0bzsKLSAgICAgICAgICAgICAg
ICB0aGlzLnRpbWUgPSAwOwotICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHRoaXMu
Z2V0VHJhbnNpdGlvbigpOwotICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpOwotICAg
ICAgICAgICAgICAgIHRoaXMub25TdGFydCgpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICB9LAotCi0gICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpewotICAgICAgICAg
ICAgICAgIGlmICh0aGlzLnN0b3BUaW1lcigpKSB0aGlzLm9uQ29tcGxldGUoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBjYW5jZWw6IGZ1bmN0
aW9uKCl7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RvcFRpbWVyKCkpIHRoaXMub25DYW5j
ZWwoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAg
ICBvblN0YXJ0OiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KCdz
dGFydCcsIHRoaXMuc3ViamVjdCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgb25Db21wbGV0ZTog
ZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0
aGlzLnN1YmplY3QpOwotICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYWxsQ2hhaW4oKSkgdGhp
cy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1YmplY3QpOwotICAgICAgICB9LAot
Ci0gICAgICAgIG9uQ2FuY2VsOiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHRoaXMuZmly
ZUV2ZW50KCdjYW5jZWwnLCB0aGlzLnN1YmplY3QpLmNsZWFyQ2hhaW4oKTsKLSAgICAgICAgfSwK
LQotICAgICAgICBwYXVzZTogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB0aGlzLnN0b3BU
aW1lcigpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAg
ICAgIHJlc3VtZTogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBz
dG9wVGltZXI6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVyKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdGhpcy50aW1lID0gJHRpbWUoKSAtIHRoaXMu
dGltZTsKLSAgICAgICAgICAgICAgICB0aGlzLnRpbWVyID0gJGNsZWFyKHRoaXMudGltZXIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9LAotCi0gICAgICAgIHN0YXJ0
VGltZXI6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICB0aGlzLnRpbWUgPSAkdGltZSgpIC0gdGhpcy50aW1l
OwotICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSB0aGlzLnN0ZXAucGVyaW9kaWNhbChNYXRo
LnJvdW5kKDEwMDAgLyB0aGlzLm9wdGlvbnMuZnBzKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotfSk7Ci0KLUZ4LmNvbXB1dGUgPSBmdW5jdGlvbihm
cm9tLCB0bywgZGVsdGEpewotICAgICAgICByZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZy
b207Ci19OwotCi1GeC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAn
bG9uZyc6IDEwMDB9OwotCi0KLS8qCi1TY3JpcHQ6IEZ4LkNTUy5qcwotICAgICAgICBDb250YWlu
cyB0aGUgQ1NTIGFuaW1hdGlvbiBsb2dpYy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4
LkVsZW1lbnRzLgotCi1MaWNlbnNlOgotICAgICAgICBNSVQtc3R5bGUgbGljZW5zZS4KLSovCi0K
LUZ4LkNTUyA9IG5ldyBDbGFzcyh7Ci0KLSAgICAgICAgRXh0ZW5kczogRngsCi0KLSAgICAgICAg
Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVjdAotCi0gICAgICAgIHByZXBhcmU6IGZ1
bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpewotICAgICAgICAgICAgICAgIHZhbHVl
cyA9ICRzcGxhdCh2YWx1ZXMpOwotICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMxID0gdmFsdWVz
WzFdOwotICAgICAgICAgICAgICAgIGlmICghJGNoayh2YWx1ZXMxKSl7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXNbMV0gPSB2YWx1ZXNbMF07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZXNbMF0gPSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHZhbHVlcy5tYXAodGhpcy5wYXJzZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiBwYXJzZWRbMF0sIHRvOiBwYXJzZWRbMV19
OwotICAgICAgICB9LAotCi0gICAgICAgIC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheQot
Ci0gICAgICAgIHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7Ci0gICAgICAgICAgICAgICAgdmFsdWUg
PSAkbGFtYmRhKHZhbHVlKSgpOwotICAgICAgICAgICAgICAgIHZhbHVlID0gKHR5cGVvZiB2YWx1
ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDogJHNwbGF0KHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YWwgPSBTdHJpbmcodmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgRnguQ1NTLlBhcnNlcnMu
ZWFjaChmdW5jdGlvbihwYXJzZXIsIGtleSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChmb3VuZCkgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcGFyc2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgkY2hrKHBhcnNlZCkpIGZvdW5kID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjog
cGFyc2VyfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZm91bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vy
cy5TdHJpbmd9OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAgIC8vY29tcHV0ZXMgYnkgYSBmcm9t
IGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLgotCi0gICAgICAg
IGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7Ci0gICAgICAgICAgICAgICAgdmFy
IGNvbXB1dGVkID0gW107Ci0gICAgICAgICAgICAgICAgKE1hdGgubWluKGZyb20ubGVuZ3RoLCB0
by5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21wdXRlKGZyb21baV0udmFsdWUs
IHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5wYXJzZXJ9KTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBjb21wdXRlZC4kZmFtaWx5ID0ge25hbWU6ICdm
eDpjc3M6dmFsdWUnfTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZWQ7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgLy9zZXJ2ZXMgdGhlIHZhbHVlIGFzIHNldHRhYmxlCi0KLSAgICAgICAg
c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXsKLSAgICAgICAgICAgICAgICBpZiAoJHR5cGUo
dmFsdWUpICE9ICdmeDpjc3M6dmFsdWUnKSB2YWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpOwotICAg
ICAgICAgICAgICAgIHZhciByZXR1cm5lZCA9IFtdOwotICAgICAgICAgICAgICAgIHZhbHVlLmVh
Y2goZnVuY3Rpb24oYml0KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkID0gcmV0
dXJuZWQuY29uY2F0KGJpdC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkOwotICAgICAgICB9
LAotCi0gICAgICAgIC8vcmVuZGVycyB0aGUgY2hhbmdlIHRvIGFuIGVsZW1lbnQKLQotICAgICAg
ICByZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCl7Ci0gICAg
ICAgICAgICAgICAgZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2YWx1ZSwg
dW5pdCkpOwotICAgICAgICB9LAotCi0gICAgICAgIC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdl
IGNzcyB0byBmaW5kIHRoZSB2YWx1ZXMgZm9yIGEgc2VsZWN0b3IKLQotICAgICAgICBzZWFyY2g6
IGZ1bmN0aW9uKHNlbGVjdG9yKXsKLSAgICAgICAgICAgICAgICBpZiAoRnguQ1NTLkNhY2hlW3Nl
bGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl07Ci0gICAgICAgICAgICAgICAg
dmFyIHRvID0ge307Ci0gICAgICAgICAgICAgICAgQXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNo
ZWV0cywgZnVuY3Rpb24oc2hlZXQsIGopewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhy
ZWYgPSBzaGVldC5ocmVmOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhyZWYgJiYgaHJl
Zi5jb250YWlucygnOi8vJykgJiYgIWhyZWYuY29udGFpbnMoZG9jdW1lbnQuZG9tYWluKSkgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGVzID0gc2hlZXQucnVsZXMgfHwg
c2hlZXQuY3NzUnVsZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5lYWNoKHJ1bGVz
LCBmdW5jdGlvbihydWxlLCBpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFydWxlLnN0eWxlKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQu
cmVwbGFjZSgvXlx3Ky8sIGZ1bmN0aW9uKG0pewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pIDogbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzZWxlY3RvclRleHQgfHwgIXNlbGVjdG9yVGV4dC50ZXN0KCdeJyArIHNlbGVjdG9yICsg
JyQnKSkgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LlN0
eWxlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBzdHlsZSl7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0
U3R5bGVzW3N0eWxlXSkgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b1tzdHlsZV0gPSAodmFsdWUudGVzdCgvXnJnYi8p
KSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSA9IHRvOwot
ICAgICAgICB9Ci0KLX0pOwotCi1GeC5DU1MuQ2FjaGUgPSB7fTsKLQotRnguQ1NTLlBhcnNlcnMg
PSBuZXcgSGFzaCh7Ci0KLSAgICAgICAgQ29sb3I6IHsKLSAgICAgICAgICAgICAgICBwYXJzZTog
ZnVuY3Rpb24odmFsdWUpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1hdGNo
KC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUuaGV4VG9SZ2IodHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXGQrKSxc
cyooXGQrKSxccyooXGQrKS8pKSkgPyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGNvbXB1dGU6IGZ1bmN0
aW9uKGZyb20sIHRvLCBkZWx0YSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJv
bS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21baV0sIHRvW2ldLCBkZWx0YSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgICAgICBzZXJ2ZTogZnVuY3Rpb24odmFsdWUpewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwK
LQotICAgICAgICBOdW1iZXI6IHsKLSAgICAgICAgICAgICAgICBwYXJzZTogcGFyc2VGbG9hdCwK
LSAgICAgICAgICAgICAgICBjb21wdXRlOiBGeC5jb21wdXRlLAotICAgICAgICAgICAgICAgIHNl
cnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKHVuaXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9LAotCi0gICAgICAgIFN0cmluZzogewotICAgICAgICAgICAgICAgIHBhcnNlOiAkbGFt
YmRhKGZhbHNlKSwKLSAgICAgICAgICAgICAgICBjb21wdXRlOiAkYXJndW1lbnRzKDEpLAotICAg
ICAgICAgICAgICAgIHNlcnZlOiAkYXJndW1lbnRzKDApCi0gICAgICAgIH0KLQotfSk7Ci0KLQot
LyoKLVNjcmlwdDogRnguVHdlZW4uanMKLSAgICAgICAgRm9ybWVybHkgRnguU3R5bGUsIGVmZmVj
dCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFuIGVsZW1lbnQuCi0KLUxpY2Vu
c2U6Ci0gICAgICAgIE1JVC1zdHlsZSBsaWNlbnNlLgotKi8KLQotRnguVHdlZW4gPSBuZXcgQ2xh
c3MoewotCi0gICAgICAgIEV4dGVuZHM6IEZ4LkNTUywKLQotICAgICAgICBpbml0aWFsaXplOiBm
dW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQg
PSB0aGlzLnN1YmplY3QgPSAkKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIHRoaXMucGFyZW50
KG9wdGlvbnMpOwotICAgICAgICB9LAotCi0gICAgICAgIHNldDogZnVuY3Rpb24ocHJvcGVydHks
IG5vdyl7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBub3cgPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVu
dCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRpb25zLnVuaXQpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0
eSwgZnJvbSwgdG8pewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVjayhhcmd1bWVudHMu
Y2FsbGVlLCBwcm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAg
ICB2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICB0
aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Muc2hpZnQoKTsKLSAg
ICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhp
cy5wcm9wZXJ0eSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KHBh
cnNlZC5mcm9tLCBwYXJzZWQudG8pOwotICAgICAgICB9Ci0KLX0pOwotCi1FbGVtZW50LlByb3Bl
cnRpZXMudHdlZW4gPSB7Ci0KLSAgICAgICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKXsKLSAgICAg
ICAgICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpOwotICAgICAgICAg
ICAgICAgIGlmICh0d2VlbikgdHdlZW4uY2FuY2VsKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWxpbWluYXRlKCd0d2VlbicpLnN0b3JlKCd0d2VlbjpvcHRpb25zJywgJGV4dGVuZCh7
bGluazogJ2NhbmNlbCd9LCBvcHRpb25zKSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0OiBm
dW5jdGlvbihvcHRpb25zKXsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyB8fCAhdGhpcy5y
ZXRyaWV2ZSgndHdlZW4nKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyB8
fCAhdGhpcy5yZXRyaWV2ZSgndHdlZW46b3B0aW9ucycpKSB0aGlzLnNldCgndHdlZW4nLCBvcHRp
b25zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUoJ3R3ZWVuJywgbmV3IEZ4
LlR3ZWVuKHRoaXMsIHRoaXMucmV0cmlldmUoJ3R3ZWVuOm9wdGlvbnMnKSkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSgndHdlZW4nKTsK
LSAgICAgICAgfQotCi19OwotCi1FbGVtZW50LmltcGxlbWVudCh7Ci0KLSAgICAgICAgdHdlZW46
IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7Ci0gICAgICAgICAgICAgICAgdGhpcy5nZXQo
J3R3ZWVuJykuc3RhcnQoYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgfSwKLQotICAgICAgICBmYWRlOiBmdW5jdGlvbihob3cpewotICAgICAgICAgICAg
ICAgIHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyksIG8gPSAnb3BhY2l0eScsIHRvZ2dsZTsK
LSAgICAgICAgICAgICAgICBob3cgPSAkcGljayhob3csICd0b2dnbGUnKTsKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGhvdyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbic6IGZh
ZGUuc3RhcnQobywgMSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3V0
JzogZmFkZS5zdGFydChvLCAwKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdzaG93JzogZmFkZS5zZXQobywgMSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnaGlkZSc6IGZhZGUuc2V0KG8sIDApOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3RvZ2dsZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBm
bGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywgdGhpcy5nZXQoJ29wYWNpdHknKSA9PSAx
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZS5zdGFydChvLCAoZmxhZykg
PyAwIDogMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUoJ2Zh
ZGU6ZmxhZycsICFmbGFnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xl
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogZmFkZS5zdGFydChvLCBhcmd1bWVudHMpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRvZ2dsZSkgdGhpcy5lbGltaW5hdGUoJ2ZhZGU6
ZmxhZycpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAg
ICAgIGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVuZCl7Ci0gICAgICAgICAgICAgICAgaWYg
KCFlbmQpewotICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGln
aGxpZ2h0Om9yaWdpbmFsJywgdGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IChlbmQgPT0gJ3RyYW5zcGFyZW50JykgPyAnI2Zm
ZicgOiBlbmQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciB0d2VlbiA9
IHRoaXMuZ2V0KCd0d2VlbicpOwotICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0KCdiYWNrZ3Jv
dW5kLWNvbG9yJywgc3RhcnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywg
dGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJykpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdHdlZW4uY2FsbENoYWluKCk7Ci0gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi19KTsKLQotCi0vKgot
U2NyaXB0OiBGeC5Nb3JwaC5qcwotICAgICAgICBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0
byB0cmFuc2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQg
dXNpbmcgYW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuCi0K
LUxpY2Vuc2U6Ci0gICAgICAgIE1JVC1zdHlsZSBsaWNlbnNlLgotKi8KLQotRnguTW9ycGggPSBu
ZXcgQ2xhc3MoewotCi0gICAgICAgIEV4dGVuZHM6IEZ4LkNTUywKLQotICAgICAgICBpbml0aWFs
aXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKLSAgICAgICAgICAgICAgICB0aGlzLmVs
ZW1lbnQgPSB0aGlzLnN1YmplY3QgPSAkKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIHRoaXMu
cGFyZW50KG9wdGlvbnMpOwotICAgICAgICB9LAotCi0gICAgICAgIHNldDogZnVuY3Rpb24obm93
KXsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93ID0gdGhp
cy5zZWFyY2gobm93KTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIG5vdykgdGhpcy5y
ZW5kZXIodGhpcy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBjb21wdXRlOiBm
dW5jdGlvbihmcm9tLCB0bywgZGVsdGEpewotICAgICAgICAgICAgICAgIHZhciBub3cgPSB7fTsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50
KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vdzsKLSAg
ICAgICAgfSwKLQotICAgICAgICBzdGFydDogZnVuY3Rpb24ocHJvcGVydGllcyl7Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5jYWxsZWUsIHByb3BlcnRpZXMpKSBy
ZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0
cmluZycpIHByb3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTsKLSAgICAgICAgICAg
ICAgICB2YXIgZnJvbSA9IHt9LCB0byA9IHt9OwotICAgICAgICAgICAgICAgIGZvciAodmFyIHAg
aW4gcHJvcGVydGllcyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gdGhp
cy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmcm9tW3BdID0gcGFyc2VkLmZyb207Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0b1twXSA9IHBhcnNlZC50bzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTsKLSAgICAgICAgfQotCi19KTsKLQotRWxlbWVu
dC5Qcm9wZXJ0aWVzLm1vcnBoID0gewotCi0gICAgICAgIHNldDogZnVuY3Rpb24ob3B0aW9ucyl7
Ci0gICAgICAgICAgICAgICAgdmFyIG1vcnBoID0gdGhpcy5yZXRyaWV2ZSgnbW9ycGgnKTsKLSAg
ICAgICAgICAgICAgICBpZiAobW9ycGgpIG1vcnBoLmNhbmNlbCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVsaW1pbmF0ZSgnbW9ycGgnKS5zdG9yZSgnbW9ycGg6b3B0aW9ucycsICRl
eHRlbmQoe2xpbms6ICdjYW5jZWwnfSwgb3B0aW9ucykpOwotICAgICAgICB9LAotCi0gICAgICAg
IGdldDogZnVuY3Rpb24ob3B0aW9ucyl7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgfHwg
IXRoaXMucmV0cmlldmUoJ21vcnBoJykpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9w
dGlvbnMgfHwgIXRoaXMucmV0cmlldmUoJ21vcnBoOm9wdGlvbnMnKSkgdGhpcy5zZXQoJ21vcnBo
Jywgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlKCdtb3JwaCcs
IG5ldyBGeC5Nb3JwaCh0aGlzLCB0aGlzLnJldHJpZXZlKCdtb3JwaDpvcHRpb25zJykpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV0cmlldmUoJ21v
cnBoJyk7Ci0gICAgICAgIH0KLQotfTsKLQotRWxlbWVudC5pbXBsZW1lbnQoewotCi0gICAgICAg
IG1vcnBoOiBmdW5jdGlvbihwcm9wcyl7Ci0gICAgICAgICAgICAgICAgdGhpcy5nZXQoJ21vcnBo
Jykuc3RhcnQocHJvcHMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
Ci0KLX0pOwotCi0KLS8qCi1TY3JpcHQ6IEZ4LlRyYW5zaXRpb25zLmpzCi0gICAgICAgIENvbnRh
aW5zIGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2Yg
dGhlIEZ4IENsYXNzZXMuCi0KLUxpY2Vuc2U6Ci0gICAgICAgIE1JVC1zdHlsZSBsaWNlbnNlLgot
Ci1DcmVkaXRzOgotICAgICAgICBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQZW5uZXIsIDxo
dHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFuZCBvcHRpbWl6
ZWQgdG8gYmUgdXNlZCB3aXRoIE1vb1Rvb2xzLgotKi8KLQotRnguaW1wbGVtZW50KHsKLQotICAg
ICAgICBnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHZhciB0cmFu
cyA9IHRoaXMub3B0aW9ucy50cmFuc2l0aW9uIHx8IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUlu
T3V0OwotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnMgPT0gJ3N0cmluZycpewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0cmFucy5zcGxpdCgnOicpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdHJhbnMgPSBGeC5UcmFuc2l0aW9uczsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRyYW5zID0gdHJhbnNbZGF0YVswXV0gfHwgdHJhbnNbZGF0YVswXS5jYXBpdGFs
aXplKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbMV0pIHRyYW5zID0gdHJh
bnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsyXSA/IGRhdGFbMl0uY2Fw
aXRhbGl6ZSgpIDogJycpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRyYW5zOwotICAgICAgICB9Ci0KLX0pOwotCi1GeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24o
dHJhbnNpdGlvbiwgcGFyYW1zKXsKLSAgICAgICAgcGFyYW1zID0gJHNwbGF0KHBhcmFtcyk7Ci0g
ICAgICAgIHJldHVybiAkZXh0ZW5kKHRyYW5zaXRpb24sIHsKLSAgICAgICAgICAgICAgICBlYXNl
SW46IGZ1bmN0aW9uKHBvcyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNp
dGlvbihwb3MsIHBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBl
YXNlT3V0OiBmdW5jdGlvbihwb3MpewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEg
LSB0cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICBlYXNlSW5PdXQ6IGZ1bmN0aW9uKHBvcyl7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKHBvcyA8PSAwLjUpID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIC8g
MiA6ICgyIC0gdHJhbnNpdGlvbigyICogKDEgLSBwb3MpLCBwYXJhbXMpKSAvIDI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICB9KTsKLX07Ci0KLUZ4LlRyYW5zaXRpb25zID0gbmV3IEhhc2go
ewotCi0gICAgICAgIGxpbmVhcjogJGFyZ3VtZW50cygwKQotCi19KTsKLQotRnguVHJhbnNpdGlv
bnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpewotICAgICAgICBmb3IgKHZhciB0cmFu
c2l0aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBG
eC5UcmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTsKLX07Ci0KLUZ4LlRyYW5zaXRp
b25zLmV4dGVuZCh7Ci0KLSAgICAgICAgUG93OiBmdW5jdGlvbihwLCB4KXsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTWF0aC5wb3cocCwgeFswXSB8fCA2KTsKLSAgICAgICAgfSwKLQotICAgICAg
ICBFeHBvOiBmdW5jdGlvbihwKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwg
OCAqIChwIC0gMSkpOwotICAgICAgICB9LAotCi0gICAgICAgIENpcmM6IGZ1bmN0aW9uKHApewot
ICAgICAgICAgICAgICAgIHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29zKHApKTsKLSAgICAg
ICAgfSwKLQotICAgICAgICBTaW5lOiBmdW5jdGlvbihwKXsKLSAgICAgICAgICAgICAgICByZXR1
cm4gMSAtIE1hdGguc2luKCgxIC0gcCkgKiBNYXRoLlBJIC8gMik7Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgQmFjazogZnVuY3Rpb24ocCwgeCl7Ci0gICAgICAgICAgICAgICAgeCA9IHhbMF0gfHwg
MS42MTg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KHAsIDIpICogKCh4ICsgMSkg
KiBwIC0geCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgQm91bmNlOiBmdW5jdGlvbihwKXsKLSAg
ICAgICAgICAgICAgICB2YXIgdmFsdWU7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDAs
IGIgPSAxOyAxOyBhICs9IGIsIGIgLz0gMil7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cCA+PSAoNyAtIDQgKiBhKSAvIDExKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEgKiBwKSAvIDQsIDIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgICAgICB9LAotCi0gICAgICAgIEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpewotICAgICAg
ICAgICAgICAgIHJldHVybiBNYXRoLnBvdygyLCAxMCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAg
KiBNYXRoLlBJICogKHhbMF0gfHwgMSkgLyAzKTsKLSAgICAgICAgfQotCi19KTsKLQotWydRdWFk
JywgJ0N1YmljJywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBp
KXsKLSAgICAgICAgRnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlv
bihmdW5jdGlvbihwKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5wb3cocCwgW2kgKyAy
XSk7Ci0gICAgICAgIH0pOwotfSk7Ci0KLQotLyoKLVNjcmlwdDogUmVxdWVzdC5qcwotICAgICAg
ICBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhUVFBSZXF1ZXN0
LgotCi1MaWNlbnNlOgotICAgICAgICBNSVQtc3R5bGUgbGljZW5zZS4KLSovCi0KLXZhciBSZXF1
ZXN0ID0gbmV3IENsYXNzKHsKLQotICAgICAgICBJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywg
T3B0aW9uc10sCi0KLSAgICAgICAgb3B0aW9uczogey8qCi0gICAgICAgICAgICAgICAgb25SZXF1
ZXN0OiAkZW1wdHksCi0gICAgICAgICAgICAgICAgb25Db21wbGV0ZTogJGVtcHR5LAotICAgICAg
ICAgICAgICAgIG9uQ2FuY2VsOiAkZW1wdHksCi0gICAgICAgICAgICAgICAgb25TdWNjZXNzOiAk
ZW1wdHksCi0gICAgICAgICAgICAgICAgb25GYWlsdXJlOiAkZW1wdHksCi0gICAgICAgICAgICAg
ICAgb25FeGNlcHRpb246ICRlbXB0eSwqLwotICAgICAgICAgICAgICAgIHVybDogJycsCi0gICAg
ICAgICAgICAgICAgZGF0YTogJycsCi0gICAgICAgICAgICAgICAgaGVhZGVyczogewotICAgICAg
ICAgICAgICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRleHQv
aHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJwotICAgICAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsCi0gICAgICAgICAgICAgICAgZm9ybWF0OiBm
YWxzZSwKLSAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JywKLSAgICAgICAgICAgICAgICBs
aW5rOiAnaWdub3JlJywKLSAgICAgICAgICAgICAgICBpc1N1Y2Nlc3M6IG51bGwsCi0gICAgICAg
ICAgICAgICAgZW11bGF0aW9uOiB0cnVlLAotICAgICAgICAgICAgICAgIHVybEVuY29kZWQ6IHRy
dWUsCi0gICAgICAgICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsCi0gICAgICAgICAgICAgICAg
ZXZhbFNjcmlwdHM6IGZhbHNlLAotICAgICAgICAgICAgICAgIGV2YWxSZXNwb25zZTogZmFsc2UK
LSAgICAgICAgfSwKLQotICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXsKLSAg
ICAgICAgICAgICAgICB0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVlc3QoKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5v
cHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nl
c3M7Ci0gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhhc2godGhpcy5vcHRpb25z
LmhlYWRlcnMpOwotICAgICAgICB9LAotCi0gICAgICAgIG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9u
KCl7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMueGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAhdGhp
cy5ydW5uaW5nKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAwOwotICAgICAgICAgICAgICAgICR0cnko
ZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy54
aHIuc3RhdHVzOwotICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnN0YXR1cykpewot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5y
ZXNwb25zZVRleHQsIHhtbDogdGhpcy54aHIucmVzcG9uc2VYTUx9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2UudGV4dCwgdGhpcy5yZXNwb25zZS54
bWwpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnJlc3BvbnNlID0ge3RleHQ6IG51bGwsIHhtbDogbnVsbH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmZhaWx1cmUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgdGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlID0gJGVtcHR5OwotICAgICAgICB9LAotCi0g
ICAgICAgIGlzU3VjY2VzczogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gKCh0
aGlzLnN0YXR1cyA+PSAyMDApICYmICh0aGlzLnN0YXR1cyA8IDMwMCkpOwotICAgICAgICB9LAot
Ci0gICAgICAgIHByb2Nlc3NTY3JpcHRzOiBmdW5jdGlvbih0ZXh0KXsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0Lyku
dGVzdCh0aGlzLmdldEhlYWRlcignQ29udGVudC10eXBlJykpKSByZXR1cm4gJGV4ZWModGV4dCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMub3B0aW9ucy5l
dmFsU2NyaXB0cyk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc3VjY2VzczogZnVuY3Rpb24odGV4
dCwgeG1sKXsKLSAgICAgICAgICAgICAgICB0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3Jp
cHRzKHRleHQpLCB4bWwpOwotICAgICAgICB9LAotCi0gICAgICAgIG9uU3VjY2VzczogZnVuY3Rp
b24oKXsKLSAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVu
dHMpLmZpcmVFdmVudCgnc3VjY2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgZmFpbHVyZTogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICB0aGlz
Lm9uRmFpbHVyZSgpOwotICAgICAgICB9LAotCi0gICAgICAgIG9uRmFpbHVyZTogZnVuY3Rpb24o
KXsKLSAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQo
J2ZhaWx1cmUnLCB0aGlzLnhocik7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0SGVhZGVyOiBm
dW5jdGlvbihuYW1lLCB2YWx1ZSl7Ci0gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldChu
YW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgZ2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXsKLSAgICAgICAgICAgICAgICByZXR1
cm4gJHRyeShmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
eGhyLmdldFJlc3BvbnNlSGVhZGVyKG5hbWUpOwotICAgICAgICAgICAgICAgIH0uYmluZCh0aGlz
KSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY2hlY2s6IGZ1bmN0aW9uKGNhbGxlcil7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
ICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspewotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4oY2FsbGVyLmJpbmQodGhpcywgQXJy
YXkuc2xpY2UoYXJndW1lbnRzLCAxKSkpOyByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSwKLQotICAgICAgICBz
ZW5kOiBmdW5jdGlvbihvcHRpb25zKXsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2so
YXJndW1lbnRzLmNhbGxlZSwgb3B0aW9ucykpIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAg
IHRoaXMucnVubmluZyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICB2YXIgdHlwZSA9ICR0eXBl
KG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUg
PT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9OwotCi0gICAgICAgICAgICAg
ICAgdmFyIG9sZCA9IHRoaXMub3B0aW9uczsKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gJGV4
dGVuZCh7ZGF0YTogb2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwg
b3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9
IG9wdGlvbnMudXJsLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDsKLQotICAgICAgICAgICAgICAg
IHN3aXRjaCAoJHR5cGUoZGF0YSkpewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZWxl
bWVudCc6IGRhdGEgPSAkKGRhdGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzogZGF0YSA9IEhhc2gudG9R
dWVyeVN0cmluZyhkYXRhKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9y
bWF0ID0gJ2Zvcm1hdD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEgPSAoZGF0YSkgPyBmb3JtYXQgKyAnJicgKyBkYXRhIDogZm9ybWF0OwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW11bGF0
aW9uICYmIFsncHV0JywgJ2RlbGV0ZSddLmNvbnRhaW5zKG1ldGhvZCkpewotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9kOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21l
dGhvZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICdwb3N0JzsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnVybEVuY29kZWQg
JiYgbWV0aG9kID09ICdwb3N0Jyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2Rp
bmcgPSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9u
cy5lbmNvZGluZyA6ICcnOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNl
dCgnQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgKyBl
bmNvZGluZyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGRhdGEg
JiYgbWV0aG9kID09ICdnZXQnKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCAr
ICh1cmwuY29udGFpbnMoJz8nKSA/ICcmJyA6ICc/JykgKyBkYXRhOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGhpcy54aHIub3BlbihtZXRob2QudG9VcHBlckNhc2UoKSwgdXJsLCB0aGlzLm9wdGlvbnMu
YXN5bmMpOwotCi0gICAgICAgICAgICAgICAgdGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmhl
YWRlcnMuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KXsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueGhyLnNldFJlcXVl
c3RIZWFkZXIoa2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChl
KXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQoJ2V4Y2Vw
dGlvbicsIFtrZXksIHZhbHVlXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCgncmVx
dWVzdCcpOwotICAgICAgICAgICAgICAgIHRoaXMueGhyLnNlbmQoZGF0YSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25TdGF0ZUNoYW5nZSgpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGNhbmNlbDog
ZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRo
aXM7Ci0gICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgdGhpcy54aHIuYWJvcnQoKTsKLSAgICAgICAgICAgICAgICB0aGlzLnhoci5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSAkZW1wdHk7Ci0gICAgICAgICAgICAgICAgdGhpcy54aHIgPSBuZXcgQnJvd3Nl
ci5SZXF1ZXN0KCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLX0pOwotCi0oZnVuY3Rp
b24oKXsKLQotdmFyIG1ldGhvZHMgPSB7fTsKLVsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0
ZScsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVMRVRFJ10uZWFjaChmdW5jdGlvbihtZXRob2Qp
ewotICAgICAgICBtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbigpewotICAgICAgICAgICAgICAg
IHZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge3VybDogU3RyaW5nLnR5cGUsIGRh
dGE6ICRkZWZpbmVkfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VuZCgkZXh0ZW5k
KHBhcmFtcywge21ldGhvZDogbWV0aG9kLnRvTG93ZXJDYXNlKCl9KSk7Ci0gICAgICAgIH07Ci19
KTsKLQotUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7Ci0KLX0pKCk7Ci0KLUVsZW1lbnQuUHJv
cGVydGllcy5zZW5kID0gewotCi0gICAgICAgIHNldDogZnVuY3Rpb24ob3B0aW9ucyl7Ci0gICAg
ICAgICAgICAgICAgdmFyIHNlbmQgPSB0aGlzLnJldHJpZXZlKCdzZW5kJyk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNlbmQpIHNlbmQuY2FuY2VsKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZWxpbWluYXRlKCdzZW5kJykuc3RvcmUoJ3NlbmQ6b3B0aW9ucycsICRleHRlbmQoewotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDog
dGhpcy5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJykKLSAg
ICAgICAgICAgICAgICB9LCBvcHRpb25zKSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0OiBm
dW5jdGlvbihvcHRpb25zKXsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyB8fCAhdGhpcy5y
ZXRyaWV2ZSgnc2VuZCcpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zIHx8
ICF0aGlzLnJldHJpZXZlKCdzZW5kOm9wdGlvbnMnKSkgdGhpcy5zZXQoJ3NlbmQnLCBvcHRpb25z
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUoJ3NlbmQnLCBuZXcgUmVxdWVz
dCh0aGlzLnJldHJpZXZlKCdzZW5kOm9wdGlvbnMnKSkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpOwotICAgICAgICB9Ci0K
LX07Ci0KLUVsZW1lbnQuaW1wbGVtZW50KHsKLQotICAgICAgICBzZW5kOiBmdW5jdGlvbih1cmwp
ewotICAgICAgICAgICAgICAgIHZhciBzZW5kZXIgPSB0aGlzLmdldCgnc2VuZCcpOwotICAgICAg
ICAgICAgICAgIHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIub3B0
aW9ucy51cmx9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi19
KTsKLQotCi0vKgotU2NyaXB0OiBSZXF1ZXN0LkhUTUwuanMKLSAgICAgICAgRXh0ZW5kcyB0aGUg
YmFzaWMgUmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rp
bmcgd2l0aCBIVE1MIHJlc3BvbnNlcy4KLQotTGljZW5zZToKLSAgICAgICAgTUlULXN0eWxlIGxp
Y2Vuc2UuCi0qLwotCi1SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3MoewotCi0gICAgICAgIEV4dGVu
ZHM6IFJlcXVlc3QsCi0KLSAgICAgICAgb3B0aW9uczogewotICAgICAgICAgICAgICAgIHVwZGF0
ZTogZmFsc2UsCi0gICAgICAgICAgICAgICAgZXZhbFNjcmlwdHM6IHRydWUsCi0gICAgICAgICAg
ICAgICAgZmlsdGVyOiBmYWxzZQotICAgICAgICB9LAotCi0gICAgICAgIHByb2Nlc3NIVE1MOiBm
dW5jdGlvbih0ZXh0KXsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC88
Ym9keVtePl0qPihbXHNcU10qPyk8XC9ib2R5Pi9pKTsKLSAgICAgICAgICAgICAgICB0ZXh0ID0g
KG1hdGNoKSA/IG1hdGNoWzFdIDogdGV4dDsKLQotICAgICAgICAgICAgICAgIHZhciBjb250YWlu
ZXIgPSBuZXcgRWxlbWVudCgnZGl2Jyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gJHRyeShm
dW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSAnPHJvb3Q+JyAr
IHRleHQgKyAnPC9yb290PicsIGRvYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCcm93
c2VyLkVuZ2luZS50cmlkZW50KXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9j
ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxET00nKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9jLmFzeW5jID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvYy5sb2FkWE1MKHJvb3QpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gbmV3IERPTVBh
cnNlcigpLnBhcnNlRnJvbVN0cmluZyhyb290LCAndGV4dC94bWwnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgPSBkb2MuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ3Jvb3QnKVswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwLCBrID0gcm9vdC5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGs7IGkrKyl7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IEVsZW1lbnQuY2xvbmUocm9vdC5j
aGlsZE5vZGVzW2ldLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkKSBjb250YWluZXIuZ3JhYihjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyOwotICAgICAg
ICAgICAgICAgIH0pIHx8IGNvbnRhaW5lci5zZXQoJ2h0bWwnLCB0ZXh0KTsKLSAgICAgICAgfSwK
LQotICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXsKLSAgICAgICAgICAgICAgICB2YXIg
b3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlOwotCi0gICAg
ICAgICAgICAgICAgcmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNj
cmlwdCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5qYXZhc2NyaXB0ID0gc2Ny
aXB0OwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgdmFyIHRlbXAgPSB0
aGlzLnByb2Nlc3NIVE1MKHJlc3BvbnNlLmh0bWwpOwotCi0gICAgICAgICAgICAgICAgcmVzcG9u
c2UudHJlZSA9IHRlbXAuY2hpbGROb2RlczsKLSAgICAgICAgICAgICAgICByZXNwb25zZS5lbGVt
ZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMoJyonKTsKLQotICAgICAgICAgICAgICAgIGlmIChvcHRp
b25zLmZpbHRlcikgcmVzcG9uc2UudHJlZSA9IHJlc3BvbnNlLmVsZW1lbnRzLmZpbHRlcihvcHRp
b25zLmZpbHRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudXBkYXRlKSAkKG9wdGlv
bnMudXBkYXRlKS5lbXB0eSgpLnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpOwotICAgICAgICAg
ICAgICAgIGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSAkZXhlYyhyZXNwb25zZS5qYXZhc2NyaXB0
KTsKLQotICAgICAgICAgICAgICAgIHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3Bv
bnNlLmVsZW1lbnRzLCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTsKLSAgICAg
ICAgfQotCi19KTsKLQotRWxlbWVudC5Qcm9wZXJ0aWVzLmxvYWQgPSB7Ci0KLSAgICAgICAgc2V0
OiBmdW5jdGlvbihvcHRpb25zKXsKLSAgICAgICAgICAgICAgICB2YXIgbG9hZCA9IHRoaXMucmV0
cmlldmUoJ2xvYWQnKTsKLSAgICAgICAgICAgICAgICBpZiAobG9hZCkgbG9hZC5jYW5jZWwoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGltaW5hdGUoJ2xvYWQnKS5zdG9yZSgnbG9h
ZDpvcHRpb25zJywgJGV4dGVuZCh7ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIHVwZGF0ZTog
dGhpcywgbWV0aG9kOiAnZ2V0J30sIG9wdGlvbnMpKTsKLSAgICAgICAgfSwKLQotICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpewotICAgICAgICAgICAgICAgIGlmIChvcHRpb25zIHx8ICEg
dGhpcy5yZXRyaWV2ZSgnbG9hZCcpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRp
b25zIHx8ICF0aGlzLnJldHJpZXZlKCdsb2FkOm9wdGlvbnMnKSkgdGhpcy5zZXQoJ2xvYWQnLCBv
cHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUoJ2xvYWQnLCBuZXcg
UmVxdWVzdC5IVE1MKHRoaXMucmV0cmlldmUoJ2xvYWQ6b3B0aW9ucycpKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHJpZXZlKCdsb2FkJyk7Ci0g
ICAgICAgIH0KLQotfTsKLQotRWxlbWVudC5pbXBsZW1lbnQoewotCi0gICAgICAgIGxvYWQ6IGZ1
bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgdGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5Lmxp
bmsoYXJndW1lbnRzLCB7ZGF0YTogT2JqZWN0LnR5cGUsIHVybDogU3RyaW5nLnR5cGV9KSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotfSk7Ci0KLQotLyoKLVNj
cmlwdDogUmVxdWVzdC5KU09OLmpzCi0gICAgICAgIEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3Qg
Q2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBK
U09OIGRhdGEuCi0KLUxpY2Vuc2U6Ci0gICAgICAgIE1JVC1zdHlsZSBsaWNlbnNlLgotKi8KLQot
UmVxdWVzdC5KU09OID0gbmV3IENsYXNzKHsKLQotICAgICAgICBFeHRlbmRzOiBSZXF1ZXN0LAot
Ci0gICAgICAgIG9wdGlvbnM6IHsKLSAgICAgICAgICAgICAgICBzZWN1cmU6IHRydWUKLSAgICAg
ICAgfSwKLQotICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXsKLSAgICAgICAg
ICAgICAgICB0aGlzLnBhcmVudChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICB0aGlzLmhlYWRl
cnMuZXh0ZW5kKHsnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnWC1SZXF1ZXN0JzogJ0pT
T04nfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc3VjY2VzczogZnVuY3Rpb24odGV4dCl7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZS5qc29uID0gSlNPTi5kZWNvZGUodGV4dCwgdGhp
cy5vcHRpb25zLnNlY3VyZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5vblN1Y2Nlc3ModGhpcy5y
ZXNwb25zZS5qc29uLCB0ZXh0KTsKLSAgICAgICAgfQotCi19KTsKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL3Byb3RvdHlwZS0x
LjcuanMgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xp
Yi9wcm90b3R5cGUtMS43LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyYzNkNzU3Y2FhNGFkOWMwYjJkZGZlZTVi
Y2M1NDIyMjRkMWM0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21h
ZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xpYi9wcm90b3R5cGUtMS43LmpzCkBAIC0wLDAgKzEs
NjA4MiBAQAorLyogIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAxLjcK
KyAqICAoYykgMjAwNS0yMDEwIFNhbSBTdGVwaGVuc29uCisgKgorICogIFByb3RvdHlwZSBpcyBm
cmVlbHkgZGlzdHJpYnV0YWJsZSB1bmRlciB0aGUgdGVybXMgb2YgYW4gTUlULXN0eWxlIGxpY2Vu
c2UuCisgKiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgUHJvdG90eXBlIHdlYiBzaXRlOiBodHRwOi8v
d3d3LnByb3RvdHlwZWpzLm9yZy8KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordmFyIFBy
b3RvdHlwZSA9IHsKKworICBWZXJzaW9uOiAnMS43JywKKworICBCcm93c2VyOiAoZnVuY3Rpb24o
KXsKKyAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50OworICAgIHZhciBpc09wZXJhID0g
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5vcGVyYSkgPT0gJ1tvYmplY3Qg
T3BlcmFdJzsKKyAgICByZXR1cm4geworICAgICAgSUU6ICAgICAgICAgICAgICEhd2luZG93LmF0
dGFjaEV2ZW50ICYmICFpc09wZXJhLAorICAgICAgT3BlcmE6ICAgICAgICAgIGlzT3BlcmEsCisg
ICAgICBXZWJLaXQ6ICAgICAgICAgdWEuaW5kZXhPZignQXBwbGVXZWJLaXQvJykgPiAtMSwKKyAg
ICAgIEdlY2tvOiAgICAgICAgICB1YS5pbmRleE9mKCdHZWNrbycpID4gLTEgJiYgdWEuaW5kZXhP
ZignS0hUTUwnKSA9PT0gLTEsCisgICAgICBNb2JpbGVTYWZhcmk6ICAgL0FwcGxlLipNb2JpbGUv
LnRlc3QodWEpCisgICAgfQorICB9KSgpLAorCisgIEJyb3dzZXJGZWF0dXJlczogeworICAgIFhQ
YXRoOiAhIWRvY3VtZW50LmV2YWx1YXRlLAorCisgICAgU2VsZWN0b3JzQVBJOiAhIWRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IsCisKKyAgICBFbGVtZW50RXh0ZW5zaW9uczogKGZ1bmN0aW9uKCkgewor
ICAgICAgdmFyIGNvbnN0cnVjdG9yID0gd2luZG93LkVsZW1lbnQgfHwgd2luZG93LkhUTUxFbGVt
ZW50OworICAgICAgcmV0dXJuICEhKGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLnByb3RvdHlw
ZSk7CisgICAgfSkoKSwKKyAgICBTcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25zOiAoZnVuY3Rpb24o
KSB7CisgICAgICBpZiAodHlwZW9mIHdpbmRvdy5IVE1MRGl2RWxlbWVudCAhPT0gJ3VuZGVmaW5l
ZCcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2JyksCisgICAgICAgICAgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2Zvcm0nKSwKKyAgICAgICAgICBpc1N1cHBvcnRlZCA9IGZhbHNlOworCisgICAgICBpZiAo
ZGl2WydfX3Byb3RvX18nXSAmJiAoZGl2WydfX3Byb3RvX18nXSAhPT0gZm9ybVsnX19wcm90b19f
J10pKSB7CisgICAgICAgIGlzU3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgZGl2
ID0gZm9ybSA9IG51bGw7CisKKyAgICAgIHJldHVybiBpc1N1cHBvcnRlZDsKKyAgICB9KSgpCisg
IH0sCisKKyAgU2NyaXB0RnJhZ21lbnQ6ICc8c2NyaXB0W14+XSo+KFtcXFNcXHNdKj8pPFwvc2Ny
aXB0PicsCisgIEpTT05GaWx0ZXI6IC9eXC9cKi1zZWN1cmUtKFtcc1xTXSopXCpcL1xzKiQvLAor
CisgIGVtcHR5RnVuY3Rpb246IGZ1bmN0aW9uKCkgeyB9LAorCisgIEs6IGZ1bmN0aW9uKHgpIHsg
cmV0dXJuIHggfQorfTsKKworaWYgKFByb3RvdHlwZS5Ccm93c2VyLk1vYmlsZVNhZmFyaSkKKyAg
UHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5TcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25zID0gZmFs
c2U7CisKKwordmFyIEFic3RyYWN0ID0geyB9OworCisKK3ZhciBUcnkgPSB7CisgIHRoZXNlOiBm
dW5jdGlvbigpIHsKKyAgICB2YXIgcmV0dXJuVmFsdWU7CisKKyAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIg
bGFtYmRhID0gYXJndW1lbnRzW2ldOworICAgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuVmFsdWUg
PSBsYW1iZGEoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9IGNhdGNoIChlKSB7IH0KKyAgICB9
CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgIH0KK307CisKKy8qIEJhc2VkIG9uIEFsZXgg
QXJuZWxsJ3MgaW5oZXJpdGFuY2UgaW1wbGVtZW50YXRpb24uICovCisKK3ZhciBDbGFzcyA9IChm
dW5jdGlvbigpIHsKKworICB2YXIgSVNfRE9OVEVOVU1fQlVHR1kgPSAoZnVuY3Rpb24oKXsKKyAg
ICBmb3IgKHZhciBwIGluIHsgdG9TdHJpbmc6IDEgfSkgeworICAgICAgaWYgKHAgPT09ICd0b1N0
cmluZycpIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0pKCk7CisK
KyAgZnVuY3Rpb24gc3ViY2xhc3MoKSB7fTsKKyAgZnVuY3Rpb24gY3JlYXRlKCkgeworICAgIHZh
ciBwYXJlbnQgPSBudWxsLCBwcm9wZXJ0aWVzID0gJEEoYXJndW1lbnRzKTsKKyAgICBpZiAoT2Jq
ZWN0LmlzRnVuY3Rpb24ocHJvcGVydGllc1swXSkpCisgICAgICBwYXJlbnQgPSBwcm9wZXJ0aWVz
LnNoaWZ0KCk7CisKKyAgICBmdW5jdGlvbiBrbGFzcygpIHsKKyAgICAgIHRoaXMuaW5pdGlhbGl6
ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIH0KKworICAgIE9iamVjdC5leHRlbmQoa2xh
c3MsIENsYXNzLk1ldGhvZHMpOworICAgIGtsYXNzLnN1cGVyY2xhc3MgPSBwYXJlbnQ7CisgICAg
a2xhc3Muc3ViY2xhc3NlcyA9IFtdOworCisgICAgaWYgKHBhcmVudCkgeworICAgICAgc3ViY2xh
c3MucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsKKyAgICAgIGtsYXNzLnByb3RvdHlwZSA9
IG5ldyBzdWJjbGFzczsKKyAgICAgIHBhcmVudC5zdWJjbGFzc2VzLnB1c2goa2xhc3MpOworICAg
IH0KKworICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDsgaSA8
IGxlbmd0aDsgaSsrKQorICAgICAga2xhc3MuYWRkTWV0aG9kcyhwcm9wZXJ0aWVzW2ldKTsKKwor
ICAgIGlmICgha2xhc3MucHJvdG90eXBlLmluaXRpYWxpemUpCisgICAgICBrbGFzcy5wcm90b3R5
cGUuaW5pdGlhbGl6ZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOworCisgICAga2xhc3MucHJv
dG90eXBlLmNvbnN0cnVjdG9yID0ga2xhc3M7CisgICAgcmV0dXJuIGtsYXNzOworICB9CisKKyAg
ZnVuY3Rpb24gYWRkTWV0aG9kcyhzb3VyY2UpIHsKKyAgICB2YXIgYW5jZXN0b3IgICA9IHRoaXMu
c3VwZXJjbGFzcyAmJiB0aGlzLnN1cGVyY2xhc3MucHJvdG90eXBlLAorICAgICAgICBwcm9wZXJ0
aWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsKKworICAgIGlmIChJU19ET05URU5VTV9CVUdHWSkg
eworICAgICAgaWYgKHNvdXJjZS50b1N0cmluZyAhPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
KQorICAgICAgICBwcm9wZXJ0aWVzLnB1c2goInRvU3RyaW5nIik7CisgICAgICBpZiAoc291cmNl
LnZhbHVlT2YgIT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKQorICAgICAgICBwcm9wZXJ0aWVz
LnB1c2goInZhbHVlT2YiKTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
cHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgdmFyIHByb3BlcnR5
ID0gcHJvcGVydGllc1tpXSwgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHldOworICAgICAgaWYgKGFu
Y2VzdG9yICYmIE9iamVjdC5pc0Z1bmN0aW9uKHZhbHVlKSAmJgorICAgICAgICAgIHZhbHVlLmFy
Z3VtZW50TmFtZXMoKVswXSA9PSAiJHN1cGVyIikgeworICAgICAgICB2YXIgbWV0aG9kID0gdmFs
dWU7CisgICAgICAgIHZhbHVlID0gKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7IHJldHVybiBhbmNlc3RvclttXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9Owor
ICAgICAgICB9KShwcm9wZXJ0eSkud3JhcChtZXRob2QpOworCisgICAgICAgIHZhbHVlLnZhbHVl
T2YgPSBtZXRob2QudmFsdWVPZi5iaW5kKG1ldGhvZCk7CisgICAgICAgIHZhbHVlLnRvU3RyaW5n
ID0gbWV0aG9kLnRvU3RyaW5nLmJpbmQobWV0aG9kKTsKKyAgICAgIH0KKyAgICAgIHRoaXMucHJv
dG90eXBlW3Byb3BlcnR5XSA9IHZhbHVlOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9
CisKKyAgcmV0dXJuIHsKKyAgICBjcmVhdGU6IGNyZWF0ZSwKKyAgICBNZXRob2RzOiB7CisgICAg
ICBhZGRNZXRob2RzOiBhZGRNZXRob2RzCisgICAgfQorICB9OworfSkoKTsKKyhmdW5jdGlvbigp
IHsKKworICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKKyAgICAg
IE5VTExfVFlQRSA9ICdOdWxsJywKKyAgICAgIFVOREVGSU5FRF9UWVBFID0gJ1VuZGVmaW5lZCcs
CisgICAgICBCT09MRUFOX1RZUEUgPSAnQm9vbGVhbicsCisgICAgICBOVU1CRVJfVFlQRSA9ICdO
dW1iZXInLAorICAgICAgU1RSSU5HX1RZUEUgPSAnU3RyaW5nJywKKyAgICAgIE9CSkVDVF9UWVBF
ID0gJ09iamVjdCcsCisgICAgICBGVU5DVElPTl9DTEFTUyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScs
CisgICAgICBCT09MRUFOX0NMQVNTID0gJ1tvYmplY3QgQm9vbGVhbl0nLAorICAgICAgTlVNQkVS
X0NMQVNTID0gJ1tvYmplY3QgTnVtYmVyXScsCisgICAgICBTVFJJTkdfQ0xBU1MgPSAnW29iamVj
dCBTdHJpbmddJywKKyAgICAgIEFSUkFZX0NMQVNTID0gJ1tvYmplY3QgQXJyYXldJywKKyAgICAg
IERBVEVfQ0xBU1MgPSAnW29iamVjdCBEYXRlXScsCisgICAgICBOQVRJVkVfSlNPTl9TVFJJTkdJ
RllfU1VQUE9SVCA9IHdpbmRvdy5KU09OICYmCisgICAgICAgIHR5cGVvZiBKU09OLnN0cmluZ2lm
eSA9PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgICBKU09OLnN0cmluZ2lmeSgwKSA9PT0gJzAnICYm
CisgICAgICAgIHR5cGVvZiBKU09OLnN0cmluZ2lmeShQcm90b3R5cGUuSykgPT09ICd1bmRlZmlu
ZWQnOworCisgIGZ1bmN0aW9uIFR5cGUobykgeworICAgIHN3aXRjaChvKSB7CisgICAgICBjYXNl
IG51bGw6IHJldHVybiBOVUxMX1RZUEU7CisgICAgICBjYXNlICh2b2lkIDApOiByZXR1cm4gVU5E
RUZJTkVEX1RZUEU7CisgICAgfQorICAgIHZhciB0eXBlID0gdHlwZW9mIG87CisgICAgc3dpdGNo
KHR5cGUpIHsKKyAgICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gQk9PTEVBTl9UWVBFOworICAg
ICAgY2FzZSAnbnVtYmVyJzogIHJldHVybiBOVU1CRVJfVFlQRTsKKyAgICAgIGNhc2UgJ3N0cmlu
Zyc6ICByZXR1cm4gU1RSSU5HX1RZUEU7CisgICAgfQorICAgIHJldHVybiBPQkpFQ1RfVFlQRTsK
KyAgfQorCisgIGZ1bmN0aW9uIGV4dGVuZChkZXN0aW5hdGlvbiwgc291cmNlKSB7CisgICAgZm9y
ICh2YXIgcHJvcGVydHkgaW4gc291cmNlKQorICAgICAgZGVzdGluYXRpb25bcHJvcGVydHldID0g
c291cmNlW3Byb3BlcnR5XTsKKyAgICByZXR1cm4gZGVzdGluYXRpb247CisgIH0KKworICBmdW5j
dGlvbiBpbnNwZWN0KG9iamVjdCkgeworICAgIHRyeSB7CisgICAgICBpZiAoaXNVbmRlZmluZWQo
b2JqZWN0KSkgcmV0dXJuICd1bmRlZmluZWQnOworICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkg
cmV0dXJuICdudWxsJzsKKyAgICAgIHJldHVybiBvYmplY3QuaW5zcGVjdCA/IG9iamVjdC5pbnNw
ZWN0KCkgOiBTdHJpbmcob2JqZWN0KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBpZiAoZSBp
bnN0YW5jZW9mIFJhbmdlRXJyb3IpIHJldHVybiAnLi4uJzsKKyAgICAgIHRocm93IGU7CisgICAg
fQorICB9CisKKyAgZnVuY3Rpb24gdG9KU09OKHZhbHVlKSB7CisgICAgcmV0dXJuIFN0cignJywg
eyAnJzogdmFsdWUgfSwgW10pOworICB9CisKKyAgZnVuY3Rpb24gU3RyKGtleSwgaG9sZGVyLCBz
dGFjaykgeworICAgIHZhciB2YWx1ZSA9IGhvbGRlcltrZXldLAorICAgICAgICB0eXBlID0gdHlw
ZW9mIHZhbHVlOworCisgICAgaWYgKFR5cGUodmFsdWUpID09PSBPQkpFQ1RfVFlQRSAmJiB0eXBl
b2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7CisgICAgICB2YWx1ZSA9IHZhbHVlLnRv
SlNPTihrZXkpOworICAgIH0KKworICAgIHZhciBfY2xhc3MgPSBfdG9TdHJpbmcuY2FsbCh2YWx1
ZSk7CisKKyAgICBzd2l0Y2ggKF9jbGFzcykgeworICAgICAgY2FzZSBOVU1CRVJfQ0xBU1M6Cisg
ICAgICBjYXNlIEJPT0xFQU5fQ0xBU1M6CisgICAgICBjYXNlIFNUUklOR19DTEFTUzoKKyAgICAg
ICAgdmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCk7CisgICAgfQorCisgICAgc3dpdGNoICh2YWx1ZSkg
eworICAgICAgY2FzZSBudWxsOiByZXR1cm4gJ251bGwnOworICAgICAgY2FzZSB0cnVlOiByZXR1
cm4gJ3RydWUnOworICAgICAgY2FzZSBmYWxzZTogcmV0dXJuICdmYWxzZSc7CisgICAgfQorCisg
ICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgIGNhc2Ug
J3N0cmluZyc6CisgICAgICAgIHJldHVybiB2YWx1ZS5pbnNwZWN0KHRydWUpOworICAgICAgY2Fz
ZSAnbnVtYmVyJzoKKyAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1
ZSkgOiAnbnVsbCc7CisgICAgICBjYXNlICdvYmplY3QnOgorCisgICAgICAgIGZvciAodmFyIGkg
PSAwLCBsZW5ndGggPSBzdGFjay5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
IGlmIChzdGFja1tpXSA9PT0gdmFsdWUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyB9CisgICAg
ICAgIH0KKyAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7CisKKyAgICAgICAgdmFyIHBhcnRpYWwg
PSBbXTsKKyAgICAgICAgaWYgKF9jbGFzcyA9PT0gQVJSQVlfQ0xBU1MpIHsKKyAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciBzdHIgPSBTdHIoaSwgdmFsdWUsIHN0YWNrKTsKKyAgICAgICAgICAg
IHBhcnRpYWwucHVzaCh0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJyA/ICdudWxsJyA6IHN0cik7
CisgICAgICAgICAgfQorICAgICAgICAgIHBhcnRpYWwgPSAnWycgKyBwYXJ0aWFsLmpvaW4oJywn
KSArICddJzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5r
ZXlzKHZhbHVlKTsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV0sIHN0
ciA9IFN0cihrZXksIHZhbHVlLCBzdGFjayk7CisgICAgICAgICAgICBpZiAodHlwZW9mIHN0ciAh
PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChrZXkuaW5zcGVj
dCh0cnVlKSsgJzonICsgc3RyKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg
ICAgIHBhcnRpYWwgPSAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JzsKKyAgICAgICAgfQor
ICAgICAgICBzdGFjay5wb3AoKTsKKyAgICAgICAgcmV0dXJuIHBhcnRpYWw7CisgICAgfQorICB9
CisKKyAgZnVuY3Rpb24gc3RyaW5naWZ5KG9iamVjdCkgeworICAgIHJldHVybiBKU09OLnN0cmlu
Z2lmeShvYmplY3QpOworICB9CisKKyAgZnVuY3Rpb24gdG9RdWVyeVN0cmluZyhvYmplY3QpIHsK
KyAgICByZXR1cm4gJEgob2JqZWN0KS50b1F1ZXJ5U3RyaW5nKCk7CisgIH0KKworICBmdW5jdGlv
biB0b0hUTUwob2JqZWN0KSB7CisgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QudG9IVE1MID8g
b2JqZWN0LnRvSFRNTCgpIDogU3RyaW5nLmludGVycHJldChvYmplY3QpOworICB9CisKKyAgZnVu
Y3Rpb24ga2V5cyhvYmplY3QpIHsKKyAgICBpZiAoVHlwZShvYmplY3QpICE9PSBPQkpFQ1RfVFlQ
RSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IH0KKyAgICB2YXIgcmVzdWx0cyA9IFtdOworICAg
IGZvciAodmFyIHByb3BlcnR5IGluIG9iamVjdCkgeworICAgICAgaWYgKG9iamVjdC5oYXNPd25Q
cm9wZXJ0eShwcm9wZXJ0eSkpIHsKKyAgICAgICAgcmVzdWx0cy5wdXNoKHByb3BlcnR5KTsKKyAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH0KKworICBmdW5jdGlvbiB2YWx1
ZXMob2JqZWN0KSB7CisgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICBmb3IgKHZhciBwcm9wZXJ0
eSBpbiBvYmplY3QpCisgICAgICByZXN1bHRzLnB1c2gob2JqZWN0W3Byb3BlcnR5XSk7CisgICAg
cmV0dXJuIHJlc3VsdHM7CisgIH0KKworICBmdW5jdGlvbiBjbG9uZShvYmplY3QpIHsKKyAgICBy
ZXR1cm4gZXh0ZW5kKHsgfSwgb2JqZWN0KTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzRWxlbWVudChv
YmplY3QpIHsKKyAgICByZXR1cm4gISEob2JqZWN0ICYmIG9iamVjdC5ub2RlVHlwZSA9PSAxKTsK
KyAgfQorCisgIGZ1bmN0aW9uIGlzQXJyYXkob2JqZWN0KSB7CisgICAgcmV0dXJuIF90b1N0cmlu
Zy5jYWxsKG9iamVjdCkgPT09IEFSUkFZX0NMQVNTOworICB9CisKKyAgdmFyIGhhc05hdGl2ZUlz
QXJyYXkgPSAodHlwZW9mIEFycmF5LmlzQXJyYXkgPT0gJ2Z1bmN0aW9uJykKKyAgICAmJiBBcnJh
eS5pc0FycmF5KFtdKSAmJiAhQXJyYXkuaXNBcnJheSh7fSk7CisKKyAgaWYgKGhhc05hdGl2ZUlz
QXJyYXkpIHsKKyAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKKyAgfQorCisgIGZ1bmN0aW9u
IGlzSGFzaChvYmplY3QpIHsKKyAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgSGFzaDsKKyAg
fQorCisgIGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqZWN0KSB7CisgICAgcmV0dXJuIF90b1N0cmlu
Zy5jYWxsKG9iamVjdCkgPT09IEZVTkNUSU9OX0NMQVNTOworICB9CisKKyAgZnVuY3Rpb24gaXNT
dHJpbmcob2JqZWN0KSB7CisgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iamVjdCkgPT09IFNU
UklOR19DTEFTUzsKKyAgfQorCisgIGZ1bmN0aW9uIGlzTnVtYmVyKG9iamVjdCkgeworICAgIHJl
dHVybiBfdG9TdHJpbmcuY2FsbChvYmplY3QpID09PSBOVU1CRVJfQ0xBU1M7CisgIH0KKworICBm
dW5jdGlvbiBpc0RhdGUob2JqZWN0KSB7CisgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iamVj
dCkgPT09IERBVEVfQ0xBU1M7CisgIH0KKworICBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmplY3Qp
IHsKKyAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gInVuZGVmaW5lZCI7CisgIH0KKworICBl
eHRlbmQoT2JqZWN0LCB7CisgICAgZXh0ZW5kOiAgICAgICAgZXh0ZW5kLAorICAgIGluc3BlY3Q6
ICAgICAgIGluc3BlY3QsCisgICAgdG9KU09OOiAgICAgICAgTkFUSVZFX0pTT05fU1RSSU5HSUZZ
X1NVUFBPUlQgPyBzdHJpbmdpZnkgOiB0b0pTT04sCisgICAgdG9RdWVyeVN0cmluZzogdG9RdWVy
eVN0cmluZywKKyAgICB0b0hUTUw6ICAgICAgICB0b0hUTUwsCisgICAga2V5czogICAgICAgICAg
T2JqZWN0LmtleXMgfHwga2V5cywKKyAgICB2YWx1ZXM6ICAgICAgICB2YWx1ZXMsCisgICAgY2xv
bmU6ICAgICAgICAgY2xvbmUsCisgICAgaXNFbGVtZW50OiAgICAgaXNFbGVtZW50LAorICAgIGlz
QXJyYXk6ICAgICAgIGlzQXJyYXksCisgICAgaXNIYXNoOiAgICAgICAgaXNIYXNoLAorICAgIGlz
RnVuY3Rpb246ICAgIGlzRnVuY3Rpb24sCisgICAgaXNTdHJpbmc6ICAgICAgaXNTdHJpbmcsCisg
ICAgaXNOdW1iZXI6ICAgICAgaXNOdW1iZXIsCisgICAgaXNEYXRlOiAgICAgICAgaXNEYXRlLAor
ICAgIGlzVW5kZWZpbmVkOiAgIGlzVW5kZWZpbmVkCisgIH0pOworfSkoKTsKK09iamVjdC5leHRl
bmQoRnVuY3Rpb24ucHJvdG90eXBlLCAoZnVuY3Rpb24oKSB7CisgIHZhciBzbGljZSA9IEFycmF5
LnByb3RvdHlwZS5zbGljZTsKKworICBmdW5jdGlvbiB1cGRhdGUoYXJyYXksIGFyZ3MpIHsKKyAg
ICB2YXIgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGgsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOwor
ICAgIHdoaWxlIChsZW5ndGgtLSkgYXJyYXlbYXJyYXlMZW5ndGggKyBsZW5ndGhdID0gYXJnc1ts
ZW5ndGhdOworICAgIHJldHVybiBhcnJheTsKKyAgfQorCisgIGZ1bmN0aW9uIG1lcmdlKGFycmF5
LCBhcmdzKSB7CisgICAgYXJyYXkgPSBzbGljZS5jYWxsKGFycmF5LCAwKTsKKyAgICByZXR1cm4g
dXBkYXRlKGFycmF5LCBhcmdzKTsKKyAgfQorCisgIGZ1bmN0aW9uIGFyZ3VtZW50TmFtZXMoKSB7
CisgICAgdmFyIG5hbWVzID0gdGhpcy50b1N0cmluZygpLm1hdGNoKC9eW1xzXChdKmZ1bmN0aW9u
W14oXSpcKChbXildKilcKS8pWzFdCisgICAgICAucmVwbGFjZSgvXC9cLy4qP1tcclxuXXxcL1wq
KD86LnxbXHJcbl0pKj9cKlwvL2csICcnKQorICAgICAgLnJlcGxhY2UoL1xzKy9nLCAnJykuc3Bs
aXQoJywnKTsKKyAgICByZXR1cm4gbmFtZXMubGVuZ3RoID09IDEgJiYgIW5hbWVzWzBdID8gW10g
OiBuYW1lczsKKyAgfQorCisgIGZ1bmN0aW9uIGJpbmQoY29udGV4dCkgeworICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoIDwgMiAmJiBPYmplY3QuaXNVbmRlZmluZWQoYXJndW1lbnRzWzBdKSkgcmV0
dXJuIHRoaXM7CisgICAgdmFyIF9fbWV0aG9kID0gdGhpcywgYXJncyA9IHNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAxKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgYSA9IG1lcmdl
KGFyZ3MsIGFyZ3VtZW50cyk7CisgICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkoY29udGV4dCwg
YSk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gYmluZEFzRXZlbnRMaXN0ZW5lcihjb250ZXh0
KSB7CisgICAgdmFyIF9fbWV0aG9kID0gdGhpcywgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRz
LCAxKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIHZhciBhID0gdXBkYXRl
KFtldmVudCB8fCB3aW5kb3cuZXZlbnRdLCBhcmdzKTsKKyAgICAgIHJldHVybiBfX21ldGhvZC5h
cHBseShjb250ZXh0LCBhKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBjdXJyeSgpIHsKKyAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzOworICAgIHZhciBfX21ldGhvZCA9
IHRoaXMsIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7CisgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgeworICAgICAgdmFyIGEgPSBtZXJnZShhcmdzLCBhcmd1bWVudHMpOworICAgICAgcmV0
dXJuIF9fbWV0aG9kLmFwcGx5KHRoaXMsIGEpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGRl
bGF5KHRpbWVvdXQpIHsKKyAgICB2YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0gc2xpY2UuY2Fs
bChhcmd1bWVudHMsIDEpOworICAgIHRpbWVvdXQgPSB0aW1lb3V0ICogMTAwMDsKKyAgICByZXR1
cm4gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gX19tZXRob2Qu
YXBwbHkoX19tZXRob2QsIGFyZ3MpOworICAgIH0sIHRpbWVvdXQpOworICB9CisKKyAgZnVuY3Rp
b24gZGVmZXIoKSB7CisgICAgdmFyIGFyZ3MgPSB1cGRhdGUoWzAuMDFdLCBhcmd1bWVudHMpOwor
ICAgIHJldHVybiB0aGlzLmRlbGF5LmFwcGx5KHRoaXMsIGFyZ3MpOworICB9CisKKyAgZnVuY3Rp
b24gd3JhcCh3cmFwcGVyKSB7CisgICAgdmFyIF9fbWV0aG9kID0gdGhpczsKKyAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7CisgICAgICB2YXIgYSA9IHVwZGF0ZShbX19tZXRob2QuYmluZCh0aGlzKV0s
IGFyZ3VtZW50cyk7CisgICAgICByZXR1cm4gd3JhcHBlci5hcHBseSh0aGlzLCBhKTsKKyAgICB9
CisgIH0KKworICBmdW5jdGlvbiBtZXRob2RpemUoKSB7CisgICAgaWYgKHRoaXMuX21ldGhvZGl6
ZWQpIHJldHVybiB0aGlzLl9tZXRob2RpemVkOworICAgIHZhciBfX21ldGhvZCA9IHRoaXM7Cisg
ICAgcmV0dXJuIHRoaXMuX21ldGhvZGl6ZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBhID0g
dXBkYXRlKFt0aGlzXSwgYXJndW1lbnRzKTsKKyAgICAgIHJldHVybiBfX21ldGhvZC5hcHBseShu
dWxsLCBhKTsKKyAgICB9OworICB9CisKKyAgcmV0dXJuIHsKKyAgICBhcmd1bWVudE5hbWVzOiAg
ICAgICBhcmd1bWVudE5hbWVzLAorICAgIGJpbmQ6ICAgICAgICAgICAgICAgIGJpbmQsCisgICAg
YmluZEFzRXZlbnRMaXN0ZW5lcjogYmluZEFzRXZlbnRMaXN0ZW5lciwKKyAgICBjdXJyeTogICAg
ICAgICAgICAgICBjdXJyeSwKKyAgICBkZWxheTogICAgICAgICAgICAgICBkZWxheSwKKyAgICBk
ZWZlcjogICAgICAgICAgICAgICBkZWZlciwKKyAgICB3cmFwOiAgICAgICAgICAgICAgICB3cmFw
LAorICAgIG1ldGhvZGl6ZTogICAgICAgICAgIG1ldGhvZGl6ZQorICB9Cit9KSgpKTsKKworCisK
KyhmdW5jdGlvbihwcm90bykgeworCisKKyAgZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7CisgICAg
cmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSArICctJyArCisgICAgICAodGhpcy5nZXRVVENN
b250aCgpICsgMSkudG9QYWRkZWRTdHJpbmcoMikgKyAnLScgKworICAgICAgdGhpcy5nZXRVVENE
YXRlKCkudG9QYWRkZWRTdHJpbmcoMikgKyAnVCcgKworICAgICAgdGhpcy5nZXRVVENIb3Vycygp
LnRvUGFkZGVkU3RyaW5nKDIpICsgJzonICsKKyAgICAgIHRoaXMuZ2V0VVRDTWludXRlcygpLnRv
UGFkZGVkU3RyaW5nKDIpICsgJzonICsKKyAgICAgIHRoaXMuZ2V0VVRDU2Vjb25kcygpLnRvUGFk
ZGVkU3RyaW5nKDIpICsgJ1onOworICB9CisKKworICBmdW5jdGlvbiB0b0pTT04oKSB7CisgICAg
cmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTsKKyAgfQorCisgIGlmICghcHJvdG8udG9JU09TdHJp
bmcpIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7CisgIGlmICghcHJvdG8udG9KU09O
KSBwcm90by50b0pTT04gPSB0b0pTT047CisKK30pKERhdGUucHJvdG90eXBlKTsKKworCitSZWdF
eHAucHJvdG90eXBlLm1hdGNoID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0OworCitSZWdFeHAuZXNj
YXBlID0gZnVuY3Rpb24oc3RyKSB7CisgIHJldHVybiBTdHJpbmcoc3RyKS5yZXBsYWNlKC8oWy4q
Kz9ePSE6JHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cit9OwordmFyIFBlcmlvZGljYWxFeGVj
dXRlciA9IENsYXNzLmNyZWF0ZSh7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNhbGxiYWNrLCBm
cmVxdWVuY3kpIHsKKyAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgdGhpcy5mcmVx
dWVuY3kgPSBmcmVxdWVuY3k7CisgICAgdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcgPSBmYWxzZTsK
KworICAgIHRoaXMucmVnaXN0ZXJDYWxsYmFjaygpOworICB9LAorCisgIHJlZ2lzdGVyQ2FsbGJh
Y2s6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCh0aGlzLm9uVGlt
ZXJFdmVudC5iaW5kKHRoaXMpLCB0aGlzLmZyZXF1ZW5jeSAqIDEwMDApOworICB9LAorCisgIGV4
ZWN1dGU6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY2FsbGJhY2sodGhpcyk7CisgIH0sCisKKyAg
c3RvcDogZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnRpbWVyKSByZXR1cm47CisgICAgY2xl
YXJJbnRlcnZhbCh0aGlzLnRpbWVyKTsKKyAgICB0aGlzLnRpbWVyID0gbnVsbDsKKyAgfSwKKwor
ICBvblRpbWVyRXZlbnQ6IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5jdXJyZW50bHlFeGVj
dXRpbmcpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5leGVjdXRlKCk7CisgICAgICAgIHRoaXMuY3VycmVudGx5RXhl
Y3V0aW5nID0gZmFsc2U7CisgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdGhpcy5jdXJyZW50
bHlFeGVjdXRpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhyb3cgZTsKKyAgICAgIH0KKyAgICB9Cisg
IH0KK30pOworT2JqZWN0LmV4dGVuZChTdHJpbmcsIHsKKyAgaW50ZXJwcmV0OiBmdW5jdGlvbih2
YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsdWUpOwor
ICB9LAorICBzcGVjaWFsQ2hhcjogeworICAgICdcYic6ICdcXGInLAorICAgICdcdCc6ICdcXHQn
LAorICAgICdcbic6ICdcXG4nLAorICAgICdcZic6ICdcXGYnLAorICAgICdccic6ICdcXHInLAor
ICAgICdcXCc6ICdcXFxcJworICB9Cit9KTsKKworT2JqZWN0LmV4dGVuZChTdHJpbmcucHJvdG90
eXBlLCAoZnVuY3Rpb24oKSB7CisgIHZhciBOQVRJVkVfSlNPTl9QQVJTRV9TVVBQT1JUID0gd2lu
ZG93LkpTT04gJiYKKyAgICB0eXBlb2YgSlNPTi5wYXJzZSA9PT0gJ2Z1bmN0aW9uJyAmJgorICAg
IEpTT04ucGFyc2UoJ3sidGVzdCI6IHRydWV9JykudGVzdDsKKworICBmdW5jdGlvbiBwcmVwYXJl
UmVwbGFjZW1lbnQocmVwbGFjZW1lbnQpIHsKKyAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24ocmVw
bGFjZW1lbnQpKSByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgdmFyIHRlbXBsYXRlID0gbmV3IFRl
bXBsYXRlKHJlcGxhY2VtZW50KTsKKyAgICByZXR1cm4gZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJu
IHRlbXBsYXRlLmV2YWx1YXRlKG1hdGNoKSB9OworICB9CisKKyAgZnVuY3Rpb24gZ3N1YihwYXR0
ZXJuLCByZXBsYWNlbWVudCkgeworICAgIHZhciByZXN1bHQgPSAnJywgc291cmNlID0gdGhpcywg
bWF0Y2g7CisgICAgcmVwbGFjZW1lbnQgPSBwcmVwYXJlUmVwbGFjZW1lbnQocmVwbGFjZW1lbnQp
OworCisgICAgaWYgKE9iamVjdC5pc1N0cmluZyhwYXR0ZXJuKSkKKyAgICAgIHBhdHRlcm4gPSBS
ZWdFeHAuZXNjYXBlKHBhdHRlcm4pOworCisgICAgaWYgKCEocGF0dGVybi5sZW5ndGggfHwgcGF0
dGVybi5zb3VyY2UpKSB7CisgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50KCcnKTsKKyAg
ICAgIHJldHVybiByZXBsYWNlbWVudCArIHNvdXJjZS5zcGxpdCgnJykuam9pbihyZXBsYWNlbWVu
dCkgKyByZXBsYWNlbWVudDsKKyAgICB9CisKKyAgICB3aGlsZSAoc291cmNlLmxlbmd0aCA+IDAp
IHsKKyAgICAgIGlmIChtYXRjaCA9IHNvdXJjZS5tYXRjaChwYXR0ZXJuKSkgeworICAgICAgICBy
ZXN1bHQgKz0gc291cmNlLnNsaWNlKDAsIG1hdGNoLmluZGV4KTsKKyAgICAgICAgcmVzdWx0ICs9
IFN0cmluZy5pbnRlcnByZXQocmVwbGFjZW1lbnQobWF0Y2gpKTsKKyAgICAgICAgc291cmNlICA9
IHNvdXJjZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CisgICAgICB9IGVs
c2UgeworICAgICAgICByZXN1bHQgKz0gc291cmNlLCBzb3VyY2UgPSAnJzsKKyAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGZ1bmN0aW9uIHN1YihwYXR0ZXJuLCBy
ZXBsYWNlbWVudCwgY291bnQpIHsKKyAgICByZXBsYWNlbWVudCA9IHByZXBhcmVSZXBsYWNlbWVu
dChyZXBsYWNlbWVudCk7CisgICAgY291bnQgPSBPYmplY3QuaXNVbmRlZmluZWQoY291bnQpID8g
MSA6IGNvdW50OworCisgICAgcmV0dXJuIHRoaXMuZ3N1YihwYXR0ZXJuLCBmdW5jdGlvbihtYXRj
aCkgeworICAgICAgaWYgKC0tY291bnQgPCAwKSByZXR1cm4gbWF0Y2hbMF07CisgICAgICByZXR1
cm4gcmVwbGFjZW1lbnQobWF0Y2gpOworICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gc2Nhbihw
YXR0ZXJuLCBpdGVyYXRvcikgeworICAgIHRoaXMuZ3N1YihwYXR0ZXJuLCBpdGVyYXRvcik7Cisg
ICAgcmV0dXJuIFN0cmluZyh0aGlzKTsKKyAgfQorCisgIGZ1bmN0aW9uIHRydW5jYXRlKGxlbmd0
aCwgdHJ1bmNhdGlvbikgeworICAgIGxlbmd0aCA9IGxlbmd0aCB8fCAzMDsKKyAgICB0cnVuY2F0
aW9uID0gT2JqZWN0LmlzVW5kZWZpbmVkKHRydW5jYXRpb24pID8gJy4uLicgOiB0cnVuY2F0aW9u
OworICAgIHJldHVybiB0aGlzLmxlbmd0aCA+IGxlbmd0aCA/CisgICAgICB0aGlzLnNsaWNlKDAs
IGxlbmd0aCAtIHRydW5jYXRpb24ubGVuZ3RoKSArIHRydW5jYXRpb24gOiBTdHJpbmcodGhpcyk7
CisgIH0KKworICBmdW5jdGlvbiBzdHJpcCgpIHsKKyAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9e
XHMrLywgJycpLnJlcGxhY2UoL1xzKyQvLCAnJyk7CisgIH0KKworICBmdW5jdGlvbiBzdHJpcFRh
Z3MoKSB7CisgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvPFx3KyhccysoIlteIl0qInwnW14nXSon
fFtePl0pKyk/Pnw8XC9cdys+L2dpLCAnJyk7CisgIH0KKworICBmdW5jdGlvbiBzdHJpcFNjcmlw
dHMoKSB7CisgICAgcmV0dXJuIHRoaXMucmVwbGFjZShuZXcgUmVnRXhwKFByb3RvdHlwZS5TY3Jp
cHRGcmFnbWVudCwgJ2ltZycpLCAnJyk7CisgIH0KKworICBmdW5jdGlvbiBleHRyYWN0U2NyaXB0
cygpIHsKKyAgICB2YXIgbWF0Y2hBbGwgPSBuZXcgUmVnRXhwKFByb3RvdHlwZS5TY3JpcHRGcmFn
bWVudCwgJ2ltZycpLAorICAgICAgICBtYXRjaE9uZSA9IG5ldyBSZWdFeHAoUHJvdG90eXBlLlNj
cmlwdEZyYWdtZW50LCAnaW0nKTsKKyAgICByZXR1cm4gKHRoaXMubWF0Y2gobWF0Y2hBbGwpIHx8
IFtdKS5tYXAoZnVuY3Rpb24oc2NyaXB0VGFnKSB7CisgICAgICByZXR1cm4gKHNjcmlwdFRhZy5t
YXRjaChtYXRjaE9uZSkgfHwgWycnLCAnJ10pWzFdOworICAgIH0pOworICB9CisKKyAgZnVuY3Rp
b24gZXZhbFNjcmlwdHMoKSB7CisgICAgcmV0dXJuIHRoaXMuZXh0cmFjdFNjcmlwdHMoKS5tYXAo
ZnVuY3Rpb24oc2NyaXB0KSB7IHJldHVybiBldmFsKHNjcmlwdCkgfSk7CisgIH0KKworICBmdW5j
dGlvbiBlc2NhcGVIVE1MKCkgeworICAgIHJldHVybiB0aGlzLnJlcGxhY2UoLyYvZywnJmFtcDsn
KS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKTsKKyAgfQorCisgIGZ1
bmN0aW9uIHVuZXNjYXBlSFRNTCgpIHsKKyAgICByZXR1cm4gdGhpcy5zdHJpcFRhZ3MoKS5yZXBs
YWNlKC8mbHQ7L2csJzwnKS5yZXBsYWNlKC8mZ3Q7L2csJz4nKS5yZXBsYWNlKC8mYW1wOy9nLCcm
Jyk7CisgIH0KKworCisgIGZ1bmN0aW9uIHRvUXVlcnlQYXJhbXMoc2VwYXJhdG9yKSB7CisgICAg
dmFyIG1hdGNoID0gdGhpcy5zdHJpcCgpLm1hdGNoKC8oW14/I10qKSgjLiopPyQvKTsKKyAgICBp
ZiAoIW1hdGNoKSByZXR1cm4geyB9OworCisgICAgcmV0dXJuIG1hdGNoWzFdLnNwbGl0KHNlcGFy
YXRvciB8fCAnJicpLmluamVjdCh7IH0sIGZ1bmN0aW9uKGhhc2gsIHBhaXIpIHsKKyAgICAgIGlm
ICgocGFpciA9IHBhaXIuc3BsaXQoJz0nKSlbMF0pIHsKKyAgICAgICAgdmFyIGtleSA9IGRlY29k
ZVVSSUNvbXBvbmVudChwYWlyLnNoaWZ0KCkpLAorICAgICAgICAgICAgdmFsdWUgPSBwYWlyLmxl
bmd0aCA+IDEgPyBwYWlyLmpvaW4oJz0nKSA6IHBhaXJbMF07CisKKyAgICAgICAgaWYgKHZhbHVl
ICE9IHVuZGVmaW5lZCkgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpOworCisgICAg
ICAgIGlmIChrZXkgaW4gaGFzaCkgeworICAgICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXkoaGFz
aFtrZXldKSkgaGFzaFtrZXldID0gW2hhc2hba2V5XV07CisgICAgICAgICAgaGFzaFtrZXldLnB1
c2godmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaGFzaFtrZXldID0gdmFsdWU7Cisg
ICAgICB9CisgICAgICByZXR1cm4gaGFzaDsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIHRv
QXJyYXkoKSB7CisgICAgcmV0dXJuIHRoaXMuc3BsaXQoJycpOworICB9CisKKyAgZnVuY3Rpb24g
c3VjYygpIHsKKyAgICByZXR1cm4gdGhpcy5zbGljZSgwLCB0aGlzLmxlbmd0aCAtIDEpICsKKyAg
ICAgIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5jaGFyQ29kZUF0KHRoaXMubGVuZ3RoIC0gMSkg
KyAxKTsKKyAgfQorCisgIGZ1bmN0aW9uIHRpbWVzKGNvdW50KSB7CisgICAgcmV0dXJuIGNvdW50
IDwgMSA/ICcnIDogbmV3IEFycmF5KGNvdW50ICsgMSkuam9pbih0aGlzKTsKKyAgfQorCisgIGZ1
bmN0aW9uIGNhbWVsaXplKCkgeworICAgIHJldHVybiB0aGlzLnJlcGxhY2UoLy0rKC4pPy9nLCBm
dW5jdGlvbihtYXRjaCwgY2hyKSB7CisgICAgICByZXR1cm4gY2hyID8gY2hyLnRvVXBwZXJDYXNl
KCkgOiAnJzsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIGNhcGl0YWxpemUoKSB7CisgICAg
cmV0dXJuIHRoaXMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN1YnN0cmluZygxKS50
b0xvd2VyQ2FzZSgpOworICB9CisKKyAgZnVuY3Rpb24gdW5kZXJzY29yZSgpIHsKKyAgICByZXR1
cm4gdGhpcy5yZXBsYWNlKC86Oi9nLCAnLycpCisgICAgICAgICAgICAgICAucmVwbGFjZSgvKFtB
LVpdKykoW0EtWl1bYS16XSkvZywgJyQxXyQyJykKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKC8o
W2EtelxkXSkoW0EtWl0pL2csICckMV8kMicpCisgICAgICAgICAgICAgICAucmVwbGFjZSgvLS9n
LCAnXycpCisgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IGRhc2hlcml6ZSgpIHsKKyAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9fL2csICctJyk7CisgIH0K
KworICBmdW5jdGlvbiBpbnNwZWN0KHVzZURvdWJsZVF1b3RlcykgeworICAgIHZhciBlc2NhcGVk
U3RyaW5nID0gdGhpcy5yZXBsYWNlKC9bXHgwMC1ceDFmXFxdL2csIGZ1bmN0aW9uKGNoYXJhY3Rl
cikgeworICAgICAgaWYgKGNoYXJhY3RlciBpbiBTdHJpbmcuc3BlY2lhbENoYXIpIHsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZy5zcGVjaWFsQ2hhcltjaGFyYWN0ZXJdOworICAgICAgfQorICAgICAg
cmV0dXJuICdcXHUwMCcgKyBjaGFyYWN0ZXIuY2hhckNvZGVBdCgpLnRvUGFkZGVkU3RyaW5nKDIs
IDE2KTsKKyAgICB9KTsKKyAgICBpZiAodXNlRG91YmxlUXVvdGVzKSByZXR1cm4gJyInICsgZXNj
YXBlZFN0cmluZy5yZXBsYWNlKC8iL2csICdcXCInKSArICciJzsKKyAgICByZXR1cm4gIiciICsg
ZXNjYXBlZFN0cmluZy5yZXBsYWNlKC8nL2csICdcXFwnJykgKyAiJyI7CisgIH0KKworICBmdW5j
dGlvbiB1bmZpbHRlckpTT04oZmlsdGVyKSB7CisgICAgcmV0dXJuIHRoaXMucmVwbGFjZShmaWx0
ZXIgfHwgUHJvdG90eXBlLkpTT05GaWx0ZXIsICckMScpOworICB9CisKKyAgZnVuY3Rpb24gaXNK
U09OKCkgeworICAgIHZhciBzdHIgPSB0aGlzOworICAgIGlmIChzdHIuYmxhbmsoKSkgcmV0dXJu
IGZhbHNlOworICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEt
ZkEtRl17NH0pL2csICdAJyk7CisgICAgc3RyID0gc3RyLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8
dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCAnXScp
OworICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oPzpefDp8LCkoPzpccypcWykrL2csICcnKTsKKyAg
ICByZXR1cm4gKC9eW1xdLDp7fVxzXSokLykudGVzdChzdHIpOworICB9CisKKyAgZnVuY3Rpb24g
ZXZhbEpTT04oc2FuaXRpemUpIHsKKyAgICB2YXIganNvbiA9IHRoaXMudW5maWx0ZXJKU09OKCks
CisgICAgICAgIGN4ID0gL1tcdTAwMDBcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUx
N2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1
ZmZmZl0vZzsKKyAgICBpZiAoY3gudGVzdChqc29uKSkgeworICAgICAganNvbiA9IGpzb24ucmVw
bGFjZShjeCwgZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgcmV0dXJuICdcXHUnICsgKCcwMDAwJyAr
IGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsKKyAgICAgIH0pOworICAg
IH0KKyAgICB0cnkgeworICAgICAgaWYgKCFzYW5pdGl6ZSB8fCBqc29uLmlzSlNPTigpKSByZXR1
cm4gZXZhbCgnKCcgKyBqc29uICsgJyknKTsKKyAgICB9IGNhdGNoIChlKSB7IH0KKyAgICB0aHJv
dyBuZXcgU3ludGF4RXJyb3IoJ0JhZGx5IGZvcm1lZCBKU09OIHN0cmluZzogJyArIHRoaXMuaW5z
cGVjdCgpKTsKKyAgfQorCisgIGZ1bmN0aW9uIHBhcnNlSlNPTigpIHsKKyAgICB2YXIganNvbiA9
IHRoaXMudW5maWx0ZXJKU09OKCk7CisgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbik7CisgIH0K
KworICBmdW5jdGlvbiBpbmNsdWRlKHBhdHRlcm4pIHsKKyAgICByZXR1cm4gdGhpcy5pbmRleE9m
KHBhdHRlcm4pID4gLTE7CisgIH0KKworICBmdW5jdGlvbiBzdGFydHNXaXRoKHBhdHRlcm4pIHsK
KyAgICByZXR1cm4gdGhpcy5sYXN0SW5kZXhPZihwYXR0ZXJuLCAwKSA9PT0gMDsKKyAgfQorCisg
IGZ1bmN0aW9uIGVuZHNXaXRoKHBhdHRlcm4pIHsKKyAgICB2YXIgZCA9IHRoaXMubGVuZ3RoIC0g
cGF0dGVybi5sZW5ndGg7CisgICAgcmV0dXJuIGQgPj0gMCAmJiB0aGlzLmluZGV4T2YocGF0dGVy
biwgZCkgPT09IGQ7CisgIH0KKworICBmdW5jdGlvbiBlbXB0eSgpIHsKKyAgICByZXR1cm4gdGhp
cyA9PSAnJzsKKyAgfQorCisgIGZ1bmN0aW9uIGJsYW5rKCkgeworICAgIHJldHVybiAvXlxzKiQv
LnRlc3QodGhpcyk7CisgIH0KKworICBmdW5jdGlvbiBpbnRlcnBvbGF0ZShvYmplY3QsIHBhdHRl
cm4pIHsKKyAgICByZXR1cm4gbmV3IFRlbXBsYXRlKHRoaXMsIHBhdHRlcm4pLmV2YWx1YXRlKG9i
amVjdCk7CisgIH0KKworICByZXR1cm4geworICAgIGdzdWI6ICAgICAgICAgICBnc3ViLAorICAg
IHN1YjogICAgICAgICAgICBzdWIsCisgICAgc2NhbjogICAgICAgICAgIHNjYW4sCisgICAgdHJ1
bmNhdGU6ICAgICAgIHRydW5jYXRlLAorICAgIHN0cmlwOiAgICAgICAgICBTdHJpbmcucHJvdG90
eXBlLnRyaW0gfHwgc3RyaXAsCisgICAgc3RyaXBUYWdzOiAgICAgIHN0cmlwVGFncywKKyAgICBz
dHJpcFNjcmlwdHM6ICAgc3RyaXBTY3JpcHRzLAorICAgIGV4dHJhY3RTY3JpcHRzOiBleHRyYWN0
U2NyaXB0cywKKyAgICBldmFsU2NyaXB0czogICAgZXZhbFNjcmlwdHMsCisgICAgZXNjYXBlSFRN
TDogICAgIGVzY2FwZUhUTUwsCisgICAgdW5lc2NhcGVIVE1MOiAgIHVuZXNjYXBlSFRNTCwKKyAg
ICB0b1F1ZXJ5UGFyYW1zOiAgdG9RdWVyeVBhcmFtcywKKyAgICBwYXJzZVF1ZXJ5OiAgICAgdG9R
dWVyeVBhcmFtcywKKyAgICB0b0FycmF5OiAgICAgICAgdG9BcnJheSwKKyAgICBzdWNjOiAgICAg
ICAgICAgc3VjYywKKyAgICB0aW1lczogICAgICAgICAgdGltZXMsCisgICAgY2FtZWxpemU6ICAg
ICAgIGNhbWVsaXplLAorICAgIGNhcGl0YWxpemU6ICAgICBjYXBpdGFsaXplLAorICAgIHVuZGVy
c2NvcmU6ICAgICB1bmRlcnNjb3JlLAorICAgIGRhc2hlcml6ZTogICAgICBkYXNoZXJpemUsCisg
ICAgaW5zcGVjdDogICAgICAgIGluc3BlY3QsCisgICAgdW5maWx0ZXJKU09OOiAgIHVuZmlsdGVy
SlNPTiwKKyAgICBpc0pTT046ICAgICAgICAgaXNKU09OLAorICAgIGV2YWxKU09OOiAgICAgICBO
QVRJVkVfSlNPTl9QQVJTRV9TVVBQT1JUID8gcGFyc2VKU09OIDogZXZhbEpTT04sCisgICAgaW5j
bHVkZTogICAgICAgIGluY2x1ZGUsCisgICAgc3RhcnRzV2l0aDogICAgIHN0YXJ0c1dpdGgsCisg
ICAgZW5kc1dpdGg6ICAgICAgIGVuZHNXaXRoLAorICAgIGVtcHR5OiAgICAgICAgICBlbXB0eSwK
KyAgICBibGFuazogICAgICAgICAgYmxhbmssCisgICAgaW50ZXJwb2xhdGU6ICAgIGludGVycG9s
YXRlCisgIH07Cit9KSgpKTsKKwordmFyIFRlbXBsYXRlID0gQ2xhc3MuY3JlYXRlKHsKKyAgaW5p
dGlhbGl6ZTogZnVuY3Rpb24odGVtcGxhdGUsIHBhdHRlcm4pIHsKKyAgICB0aGlzLnRlbXBsYXRl
ID0gdGVtcGxhdGUudG9TdHJpbmcoKTsKKyAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuIHx8IFRl
bXBsYXRlLlBhdHRlcm47CisgIH0sCisKKyAgZXZhbHVhdGU6IGZ1bmN0aW9uKG9iamVjdCkgewor
ICAgIGlmIChvYmplY3QgJiYgT2JqZWN0LmlzRnVuY3Rpb24ob2JqZWN0LnRvVGVtcGxhdGVSZXBs
YWNlbWVudHMpKQorICAgICAgb2JqZWN0ID0gb2JqZWN0LnRvVGVtcGxhdGVSZXBsYWNlbWVudHMo
KTsKKworICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmdzdWIodGhpcy5wYXR0ZXJuLCBmdW5jdGlv
bihtYXRjaCkgeworICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gKG1hdGNoWzFdICsg
JycpOworCisgICAgICB2YXIgYmVmb3JlID0gbWF0Y2hbMV0gfHwgJyc7CisgICAgICBpZiAoYmVm
b3JlID09ICdcXCcpIHJldHVybiBtYXRjaFsyXTsKKworICAgICAgdmFyIGN0eCA9IG9iamVjdCwg
ZXhwciA9IG1hdGNoWzNdLAorICAgICAgICAgIHBhdHRlcm4gPSAvXihbXi5bXSt8XFsoKD86Lio/
W15cXF0pPylcXSkoXC58XFt8JCkvOworCisgICAgICBtYXRjaCA9IHBhdHRlcm4uZXhlYyhleHBy
KTsKKyAgICAgIGlmIChtYXRjaCA9PSBudWxsKSByZXR1cm4gYmVmb3JlOworCisgICAgICB3aGls
ZSAobWF0Y2ggIT0gbnVsbCkgeworICAgICAgICB2YXIgY29tcCA9IG1hdGNoWzFdLnN0YXJ0c1dp
dGgoJ1snKSA/IG1hdGNoWzJdLnJlcGxhY2UoL1xcXFxdL2csICddJykgOiBtYXRjaFsxXTsKKyAg
ICAgICAgY3R4ID0gY3R4W2NvbXBdOworICAgICAgICBpZiAobnVsbCA9PSBjdHggfHwgJycgPT0g
bWF0Y2hbM10pIGJyZWFrOworICAgICAgICBleHByID0gZXhwci5zdWJzdHJpbmcoJ1snID09IG1h
dGNoWzNdID8gbWF0Y2hbMV0ubGVuZ3RoIDogbWF0Y2hbMF0ubGVuZ3RoKTsKKyAgICAgICAgbWF0
Y2ggPSBwYXR0ZXJuLmV4ZWMoZXhwcik7CisgICAgICB9CisKKyAgICAgIHJldHVybiBiZWZvcmUg
KyBTdHJpbmcuaW50ZXJwcmV0KGN0eCk7CisgICAgfSk7CisgIH0KK30pOworVGVtcGxhdGUuUGF0
dGVybiA9IC8oXnwufFxyfFxuKSgjXHsoLio/KVx9KS87CisKK3ZhciAkYnJlYWsgPSB7IH07CisK
K3ZhciBFbnVtZXJhYmxlID0gKGZ1bmN0aW9uKCkgeworICBmdW5jdGlvbiBlYWNoKGl0ZXJhdG9y
LCBjb250ZXh0KSB7CisgICAgdmFyIGluZGV4ID0gMDsKKyAgICB0cnkgeworICAgICAgdGhpcy5f
ZWFjaChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZh
bHVlLCBpbmRleCsrKTsKKyAgICAgIH0pOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGlmIChl
ICE9ICRicmVhaykgdGhyb3cgZTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBm
dW5jdGlvbiBlYWNoU2xpY2UobnVtYmVyLCBpdGVyYXRvciwgY29udGV4dCkgeworICAgIHZhciBp
bmRleCA9IC1udW1iZXIsIHNsaWNlcyA9IFtdLCBhcnJheSA9IHRoaXMudG9BcnJheSgpOworICAg
IGlmIChudW1iZXIgPCAxKSByZXR1cm4gYXJyYXk7CisgICAgd2hpbGUgKChpbmRleCArPSBudW1i
ZXIpIDwgYXJyYXkubGVuZ3RoKQorICAgICAgc2xpY2VzLnB1c2goYXJyYXkuc2xpY2UoaW5kZXgs
IGluZGV4K251bWJlcikpOworICAgIHJldHVybiBzbGljZXMuY29sbGVjdChpdGVyYXRvciwgY29u
dGV4dCk7CisgIH0KKworICBmdW5jdGlvbiBhbGwoaXRlcmF0b3IsIGNvbnRleHQpIHsKKyAgICBp
dGVyYXRvciA9IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOworICAgIHZhciByZXN1bHQgPSB0cnVl
OworICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIHJlc3VsdCA9
IHJlc3VsdCAmJiAhIWl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KTsKKyAgICAg
IGlmICghcmVzdWx0KSB0aHJvdyAkYnJlYWs7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyAgfQorCisgIGZ1bmN0aW9uIGFueShpdGVyYXRvciwgY29udGV4dCkgeworICAgIGl0ZXJhdG9y
ID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7CisgICAgdmFyIHJlc3VsdCA9IGZhbHNlOworICAg
IHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIGlmIChyZXN1bHQgPSAh
IWl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KSkKKyAgICAgICAgdGhyb3cgJGJy
ZWFrOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBmdW5jdGlvbiBjb2xs
ZWN0KGl0ZXJhdG9yLCBjb250ZXh0KSB7CisgICAgaXRlcmF0b3IgPSBpdGVyYXRvciB8fCBQcm90
b3R5cGUuSzsKKyAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgIHRoaXMuZWFjaChmdW5jdGlvbih2
YWx1ZSwgaW5kZXgpIHsKKyAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvci5jYWxsKGNvbnRleHQs
IHZhbHVlLCBpbmRleCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHRzOworICB9CisKKyAg
ZnVuY3Rpb24gZGV0ZWN0KGl0ZXJhdG9yLCBjb250ZXh0KSB7CisgICAgdmFyIHJlc3VsdDsKKyAg
ICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICBpZiAoaXRlcmF0b3Iu
Y2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgpKSB7CisgICAgICAgIHJlc3VsdCA9IHZhbHVlOwor
ICAgICAgICB0aHJvdyAkYnJlYWs7CisgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgfQorCisgIGZ1bmN0aW9uIGZpbmRBbGwoaXRlcmF0b3IsIGNvbnRleHQpIHsKKyAgICB2
YXIgcmVzdWx0cyA9IFtdOworICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsK
KyAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkpCisgICAgICAg
IHJlc3VsdHMucHVzaCh2YWx1ZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH0K
KworICBmdW5jdGlvbiBncmVwKGZpbHRlciwgaXRlcmF0b3IsIGNvbnRleHQpIHsKKyAgICBpdGVy
YXRvciA9IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOworICAgIHZhciByZXN1bHRzID0gW107CisK
KyAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKGZpbHRlcikpCisgICAgICBmaWx0ZXIgPSBuZXcgUmVn
RXhwKFJlZ0V4cC5lc2NhcGUoZmlsdGVyKSk7CisKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFs
dWUsIGluZGV4KSB7CisgICAgICBpZiAoZmlsdGVyLm1hdGNoKHZhbHVlKSkKKyAgICAgICAgcmVz
dWx0cy5wdXNoKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KSk7CisgICAgfSk7
CisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH0KKworICBmdW5jdGlvbiBpbmNsdWRlKG9iamVjdCkg
eworICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbih0aGlzLmluZGV4T2YpKQorICAgICAgaWYgKHRo
aXMuaW5kZXhPZihvYmplY3QpICE9IC0xKSByZXR1cm4gdHJ1ZTsKKworICAgIHZhciBmb3VuZCA9
IGZhbHNlOworICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgaWYgKHZhbHVl
ID09IG9iamVjdCkgeworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIHRocm93ICRicmVh
azsKKyAgICAgIH0KKyAgICB9KTsKKyAgICByZXR1cm4gZm91bmQ7CisgIH0KKworICBmdW5jdGlv
biBpbkdyb3Vwc09mKG51bWJlciwgZmlsbFdpdGgpIHsKKyAgICBmaWxsV2l0aCA9IE9iamVjdC5p
c1VuZGVmaW5lZChmaWxsV2l0aCkgPyBudWxsIDogZmlsbFdpdGg7CisgICAgcmV0dXJuIHRoaXMu
ZWFjaFNsaWNlKG51bWJlciwgZnVuY3Rpb24oc2xpY2UpIHsKKyAgICAgIHdoaWxlKHNsaWNlLmxl
bmd0aCA8IG51bWJlcikgc2xpY2UucHVzaChmaWxsV2l0aCk7CisgICAgICByZXR1cm4gc2xpY2U7
CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBpbmplY3QobWVtbywgaXRlcmF0b3IsIGNvbnRl
eHQpIHsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICBtZW1v
ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCBtZW1vLCB2YWx1ZSwgaW5kZXgpOworICAgIH0pOwor
ICAgIHJldHVybiBtZW1vOworICB9CisKKyAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCkgeworICAg
IHZhciBhcmdzID0gJEEoYXJndW1lbnRzKS5zbGljZSgxKTsKKyAgICByZXR1cm4gdGhpcy5tYXAo
ZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHJldHVybiB2YWx1ZVttZXRob2RdLmFwcGx5KHZhbHVl
LCBhcmdzKTsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIG1heChpdGVyYXRvciwgY29udGV4
dCkgeworICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7CisgICAgdmFyIHJl
c3VsdDsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICB2YWx1
ZSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KTsKKyAgICAgIGlmIChyZXN1
bHQgPT0gbnVsbCB8fCB2YWx1ZSA+PSByZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IHZhbHVlOwor
ICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBmdW5jdGlvbiBtaW4oaXRlcmF0
b3IsIGNvbnRleHQpIHsKKyAgICBpdGVyYXRvciA9IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOwor
ICAgIHZhciByZXN1bHQ7CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewor
ICAgICAgdmFsdWUgPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCk7CisgICAg
ICBpZiAocmVzdWx0ID09IG51bGwgfHwgdmFsdWUgPCByZXN1bHQpCisgICAgICAgIHJlc3VsdCA9
IHZhbHVlOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBmdW5jdGlvbiBw
YXJ0aXRpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKKyAgICBpdGVyYXRvciA9IGl0ZXJhdG9yIHx8
IFByb3RvdHlwZS5LOworICAgIHZhciB0cnVlcyA9IFtdLCBmYWxzZXMgPSBbXTsKKyAgICB0aGlz
LmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICAoaXRlcmF0b3IuY2FsbChjb250
ZXh0LCB2YWx1ZSwgaW5kZXgpID8KKyAgICAgICAgdHJ1ZXMgOiBmYWxzZXMpLnB1c2godmFsdWUp
OworICAgIH0pOworICAgIHJldHVybiBbdHJ1ZXMsIGZhbHNlc107CisgIH0KKworICBmdW5jdGlv
biBwbHVjayhwcm9wZXJ0eSkgeworICAgIHZhciByZXN1bHRzID0gW107CisgICAgdGhpcy5lYWNo
KGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICByZXN1bHRzLnB1c2godmFsdWVbcHJvcGVydHldKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0czsKKyAgfQorCisgIGZ1bmN0aW9uIHJlamVjdChp
dGVyYXRvciwgY29udGV4dCkgeworICAgIHZhciByZXN1bHRzID0gW107CisgICAgdGhpcy5lYWNo
KGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworICAgICAgaWYgKCFpdGVyYXRvci5jYWxsKGNvbnRl
eHQsIHZhbHVlLCBpbmRleCkpCisgICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7CisgICAgfSk7
CisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH0KKworICBmdW5jdGlvbiBzb3J0QnkoaXRlcmF0b3Is
IGNvbnRleHQpIHsKKyAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7
CisgICAgICByZXR1cm4geworICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgIGNyaXRlcmlh
OiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkKKyAgICAgIH07CisgICAgfSku
c29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkgeworICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlh
LCBiID0gcmlnaHQuY3JpdGVyaWE7CisgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8g
MSA6IDA7CisgICAgfSkucGx1Y2soJ3ZhbHVlJyk7CisgIH0KKworICBmdW5jdGlvbiB0b0FycmF5
KCkgeworICAgIHJldHVybiB0aGlzLm1hcCgpOworICB9CisKKyAgZnVuY3Rpb24gemlwKCkgewor
ICAgIHZhciBpdGVyYXRvciA9IFByb3RvdHlwZS5LLCBhcmdzID0gJEEoYXJndW1lbnRzKTsKKyAg
ICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24oYXJncy5sYXN0KCkpKQorICAgICAgaXRlcmF0b3IgPSBh
cmdzLnBvcCgpOworCisgICAgdmFyIGNvbGxlY3Rpb25zID0gW3RoaXNdLmNvbmNhdChhcmdzKS5t
YXAoJEEpOworICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAg
ICAgIHJldHVybiBpdGVyYXRvcihjb2xsZWN0aW9ucy5wbHVjayhpbmRleCkpOworICAgIH0pOwor
ICB9CisKKyAgZnVuY3Rpb24gc2l6ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50b0FycmF5KCkubGVu
Z3RoOworICB9CisKKyAgZnVuY3Rpb24gaW5zcGVjdCgpIHsKKyAgICByZXR1cm4gJyM8RW51bWVy
YWJsZTonICsgdGhpcy50b0FycmF5KCkuaW5zcGVjdCgpICsgJz4nOworICB9CisKKworCisKKwor
CisKKworCisgIHJldHVybiB7CisgICAgZWFjaDogICAgICAgZWFjaCwKKyAgICBlYWNoU2xpY2U6
ICBlYWNoU2xpY2UsCisgICAgYWxsOiAgICAgICAgYWxsLAorICAgIGV2ZXJ5OiAgICAgIGFsbCwK
KyAgICBhbnk6ICAgICAgICBhbnksCisgICAgc29tZTogICAgICAgYW55LAorICAgIGNvbGxlY3Q6
ICAgIGNvbGxlY3QsCisgICAgbWFwOiAgICAgICAgY29sbGVjdCwKKyAgICBkZXRlY3Q6ICAgICBk
ZXRlY3QsCisgICAgZmluZEFsbDogICAgZmluZEFsbCwKKyAgICBzZWxlY3Q6ICAgICBmaW5kQWxs
LAorICAgIGZpbHRlcjogICAgIGZpbmRBbGwsCisgICAgZ3JlcDogICAgICAgZ3JlcCwKKyAgICBp
bmNsdWRlOiAgICBpbmNsdWRlLAorICAgIG1lbWJlcjogICAgIGluY2x1ZGUsCisgICAgaW5Hcm91
cHNPZjogaW5Hcm91cHNPZiwKKyAgICBpbmplY3Q6ICAgICBpbmplY3QsCisgICAgaW52b2tlOiAg
ICAgaW52b2tlLAorICAgIG1heDogICAgICAgIG1heCwKKyAgICBtaW46ICAgICAgICBtaW4sCisg
ICAgcGFydGl0aW9uOiAgcGFydGl0aW9uLAorICAgIHBsdWNrOiAgICAgIHBsdWNrLAorICAgIHJl
amVjdDogICAgIHJlamVjdCwKKyAgICBzb3J0Qnk6ICAgICBzb3J0QnksCisgICAgdG9BcnJheTog
ICAgdG9BcnJheSwKKyAgICBlbnRyaWVzOiAgICB0b0FycmF5LAorICAgIHppcDogICAgICAgIHpp
cCwKKyAgICBzaXplOiAgICAgICBzaXplLAorICAgIGluc3BlY3Q6ICAgIGluc3BlY3QsCisgICAg
ZmluZDogICAgICAgZGV0ZWN0CisgIH07Cit9KSgpOworCitmdW5jdGlvbiAkQShpdGVyYWJsZSkg
eworICBpZiAoIWl0ZXJhYmxlKSByZXR1cm4gW107CisgIGlmICgndG9BcnJheScgaW4gT2JqZWN0
KGl0ZXJhYmxlKSkgcmV0dXJuIGl0ZXJhYmxlLnRvQXJyYXkoKTsKKyAgdmFyIGxlbmd0aCA9IGl0
ZXJhYmxlLmxlbmd0aCB8fCAwLCByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7CisgIHdoaWxl
IChsZW5ndGgtLSkgcmVzdWx0c1tsZW5ndGhdID0gaXRlcmFibGVbbGVuZ3RoXTsKKyAgcmV0dXJu
IHJlc3VsdHM7Cit9CisKKworZnVuY3Rpb24gJHcoc3RyaW5nKSB7CisgIGlmICghT2JqZWN0Lmlz
U3RyaW5nKHN0cmluZykpIHJldHVybiBbXTsKKyAgc3RyaW5nID0gc3RyaW5nLnN0cmlwKCk7Cisg
IHJldHVybiBzdHJpbmcgPyBzdHJpbmcuc3BsaXQoL1xzKy8pIDogW107Cit9CisKK0FycmF5LmZy
b20gPSAkQTsKKworCisoZnVuY3Rpb24oKSB7CisgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJv
dG90eXBlLAorICAgICAgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlLAorICAgICAgX2VhY2ggPSBh
cnJheVByb3RvLmZvckVhY2g7IC8vIHVzZSBuYXRpdmUgYnJvd3NlciBKUyAxLjYgaW1wbGVtZW50
YXRpb24gaWYgYXZhaWxhYmxlCisKKyAgZnVuY3Rpb24gZWFjaChpdGVyYXRvciwgY29udGV4dCkg
eworICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICBpZiAoaSBpbiB0aGlzKSBpdGVyYXRvci5jYWxsKGNvbnRleHQs
IHRoaXNbaV0sIGksIHRoaXMpOworICAgIH0KKyAgfQorICBpZiAoIV9lYWNoKSBfZWFjaCA9IGVh
Y2g7CisKKyAgZnVuY3Rpb24gY2xlYXIoKSB7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHJl
dHVybiB0aGlzOworICB9CisKKyAgZnVuY3Rpb24gZmlyc3QoKSB7CisgICAgcmV0dXJuIHRoaXNb
MF07CisgIH0KKworICBmdW5jdGlvbiBsYXN0KCkgeworICAgIHJldHVybiB0aGlzW3RoaXMubGVu
Z3RoIC0gMV07CisgIH0KKworICBmdW5jdGlvbiBjb21wYWN0KCkgeworICAgIHJldHVybiB0aGlz
LnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGw7Cisg
ICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBmbGF0dGVuKCkgeworICAgIHJldHVybiB0aGlzLmlu
amVjdChbXSwgZnVuY3Rpb24oYXJyYXksIHZhbHVlKSB7CisgICAgICBpZiAoT2JqZWN0LmlzQXJy
YXkodmFsdWUpKQorICAgICAgICByZXR1cm4gYXJyYXkuY29uY2F0KHZhbHVlLmZsYXR0ZW4oKSk7
CisgICAgICBhcnJheS5wdXNoKHZhbHVlKTsKKyAgICAgIHJldHVybiBhcnJheTsKKyAgICB9KTsK
KyAgfQorCisgIGZ1bmN0aW9uIHdpdGhvdXQoKSB7CisgICAgdmFyIHZhbHVlcyA9IHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAwKTsKKyAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24odmFsdWUp
IHsKKyAgICAgIHJldHVybiAhdmFsdWVzLmluY2x1ZGUodmFsdWUpOworICAgIH0pOworICB9CisK
KyAgZnVuY3Rpb24gcmV2ZXJzZShpbmxpbmUpIHsKKyAgICByZXR1cm4gKGlubGluZSA9PT0gZmFs
c2UgPyB0aGlzLnRvQXJyYXkoKSA6IHRoaXMpLl9yZXZlcnNlKCk7CisgIH0KKworICBmdW5jdGlv
biB1bmlxKHNvcnRlZCkgeworICAgIHJldHVybiB0aGlzLmluamVjdChbXSwgZnVuY3Rpb24oYXJy
YXksIHZhbHVlLCBpbmRleCkgeworICAgICAgaWYgKDAgPT0gaW5kZXggfHwgKHNvcnRlZCA/IGFy
cmF5Lmxhc3QoKSAhPSB2YWx1ZSA6ICFhcnJheS5pbmNsdWRlKHZhbHVlKSkpCisgICAgICAgIGFy
cmF5LnB1c2godmFsdWUpOworICAgICAgcmV0dXJuIGFycmF5OworICAgIH0pOworICB9CisKKyAg
ZnVuY3Rpb24gaW50ZXJzZWN0KGFycmF5KSB7CisgICAgcmV0dXJuIHRoaXMudW5pcSgpLmZpbmRB
bGwoZnVuY3Rpb24oaXRlbSkgeworICAgICAgcmV0dXJuIGFycmF5LmRldGVjdChmdW5jdGlvbih2
YWx1ZSkgeyByZXR1cm4gaXRlbSA9PT0gdmFsdWUgfSk7CisgICAgfSk7CisgIH0KKworCisgIGZ1
bmN0aW9uIGNsb25lKCkgeworICAgIHJldHVybiBzbGljZS5jYWxsKHRoaXMsIDApOworICB9CisK
KyAgZnVuY3Rpb24gc2l6ZSgpIHsKKyAgICByZXR1cm4gdGhpcy5sZW5ndGg7CisgIH0KKworICBm
dW5jdGlvbiBpbnNwZWN0KCkgeworICAgIHJldHVybiAnWycgKyB0aGlzLm1hcChPYmplY3QuaW5z
cGVjdCkuam9pbignLCAnKSArICddJzsKKyAgfQorCisgIGZ1bmN0aW9uIGluZGV4T2YoaXRlbSwg
aSkgeworICAgIGkgfHwgKGkgPSAwKTsKKyAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7Cisg
ICAgaWYgKGkgPCAwKSBpID0gbGVuZ3RoICsgaTsKKyAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsr
KQorICAgICAgaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJldHVybiBpOworICAgIHJldHVybiAtMTsK
KyAgfQorCisgIGZ1bmN0aW9uIGxhc3RJbmRleE9mKGl0ZW0sIGkpIHsKKyAgICBpID0gaXNOYU4o
aSkgPyB0aGlzLmxlbmd0aCA6IChpIDwgMCA/IHRoaXMubGVuZ3RoICsgaSA6IGkpICsgMTsKKyAg
ICB2YXIgbiA9IHRoaXMuc2xpY2UoMCwgaSkucmV2ZXJzZSgpLmluZGV4T2YoaXRlbSk7CisgICAg
cmV0dXJuIChuIDwgMCkgPyBuIDogaSAtIG4gLSAxOworICB9CisKKyAgZnVuY3Rpb24gY29uY2F0
KCkgeworICAgIHZhciBhcnJheSA9IHNsaWNlLmNhbGwodGhpcywgMCksIGl0ZW07CisgICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgaXRlbSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgIGlmIChPYmplY3QuaXNBcnJheShp
dGVtKSAmJiAhKCdjYWxsZWUnIGluIGl0ZW0pKSB7CisgICAgICAgIGZvciAodmFyIGogPSAwLCBh
cnJheUxlbmd0aCA9IGl0ZW0ubGVuZ3RoOyBqIDwgYXJyYXlMZW5ndGg7IGorKykKKyAgICAgICAg
ICBhcnJheS5wdXNoKGl0ZW1bal0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYXJyYXkucHVz
aChpdGVtKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGFycmF5OworICB9CisKKyAgT2Jq
ZWN0LmV4dGVuZChhcnJheVByb3RvLCBFbnVtZXJhYmxlKTsKKworICBpZiAoIWFycmF5UHJvdG8u
X3JldmVyc2UpCisgICAgYXJyYXlQcm90by5fcmV2ZXJzZSA9IGFycmF5UHJvdG8ucmV2ZXJzZTsK
KworICBPYmplY3QuZXh0ZW5kKGFycmF5UHJvdG8sIHsKKyAgICBfZWFjaDogICAgIF9lYWNoLAor
ICAgIGNsZWFyOiAgICAgY2xlYXIsCisgICAgZmlyc3Q6ICAgICBmaXJzdCwKKyAgICBsYXN0OiAg
ICAgIGxhc3QsCisgICAgY29tcGFjdDogICBjb21wYWN0LAorICAgIGZsYXR0ZW46ICAgZmxhdHRl
biwKKyAgICB3aXRob3V0OiAgIHdpdGhvdXQsCisgICAgcmV2ZXJzZTogICByZXZlcnNlLAorICAg
IHVuaXE6ICAgICAgdW5pcSwKKyAgICBpbnRlcnNlY3Q6IGludGVyc2VjdCwKKyAgICBjbG9uZTog
ICAgIGNsb25lLAorICAgIHRvQXJyYXk6ICAgY2xvbmUsCisgICAgc2l6ZTogICAgICBzaXplLAor
ICAgIGluc3BlY3Q6ICAgaW5zcGVjdAorICB9KTsKKworICB2YXIgQ09OQ0FUX0FSR1VNRU5UU19C
VUdHWSA9IChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gW10uY29uY2F0KGFyZ3VtZW50cylbMF1b
MF0gIT09IDE7CisgIH0pKDEsMikKKworICBpZiAoQ09OQ0FUX0FSR1VNRU5UU19CVUdHWSkgYXJy
YXlQcm90by5jb25jYXQgPSBjb25jYXQ7CisKKyAgaWYgKCFhcnJheVByb3RvLmluZGV4T2YpIGFy
cmF5UHJvdG8uaW5kZXhPZiA9IGluZGV4T2Y7CisgIGlmICghYXJyYXlQcm90by5sYXN0SW5kZXhP
ZikgYXJyYXlQcm90by5sYXN0SW5kZXhPZiA9IGxhc3RJbmRleE9mOworfSkoKTsKK2Z1bmN0aW9u
ICRIKG9iamVjdCkgeworICByZXR1cm4gbmV3IEhhc2gob2JqZWN0KTsKK307CisKK3ZhciBIYXNo
ID0gQ2xhc3MuY3JlYXRlKEVudW1lcmFibGUsIChmdW5jdGlvbigpIHsKKyAgZnVuY3Rpb24gaW5p
dGlhbGl6ZShvYmplY3QpIHsKKyAgICB0aGlzLl9vYmplY3QgPSBPYmplY3QuaXNIYXNoKG9iamVj
dCkgPyBvYmplY3QudG9PYmplY3QoKSA6IE9iamVjdC5jbG9uZShvYmplY3QpOworICB9CisKKwor
ICBmdW5jdGlvbiBfZWFjaChpdGVyYXRvcikgeworICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9v
YmplY3QpIHsKKyAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX29iamVjdFtrZXldLCBwYWlyID0gW2tl
eSwgdmFsdWVdOworICAgICAgcGFpci5rZXkgPSBrZXk7CisgICAgICBwYWlyLnZhbHVlID0gdmFs
dWU7CisgICAgICBpdGVyYXRvcihwYWlyKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBzZXQo
a2V5LCB2YWx1ZSkgeworICAgIHJldHVybiB0aGlzLl9vYmplY3Rba2V5XSA9IHZhbHVlOworICB9
CisKKyAgZnVuY3Rpb24gZ2V0KGtleSkgeworICAgIGlmICh0aGlzLl9vYmplY3Rba2V5XSAhPT0g
T2JqZWN0LnByb3RvdHlwZVtrZXldKQorICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFtrZXldOwor
ICB9CisKKyAgZnVuY3Rpb24gdW5zZXQoa2V5KSB7CisgICAgdmFyIHZhbHVlID0gdGhpcy5fb2Jq
ZWN0W2tleV07CisgICAgZGVsZXRlIHRoaXMuX29iamVjdFtrZXldOworICAgIHJldHVybiB2YWx1
ZTsKKyAgfQorCisgIGZ1bmN0aW9uIHRvT2JqZWN0KCkgeworICAgIHJldHVybiBPYmplY3QuY2xv
bmUodGhpcy5fb2JqZWN0KTsKKyAgfQorCisKKworICBmdW5jdGlvbiBrZXlzKCkgeworICAgIHJl
dHVybiB0aGlzLnBsdWNrKCdrZXknKTsKKyAgfQorCisgIGZ1bmN0aW9uIHZhbHVlcygpIHsKKyAg
ICByZXR1cm4gdGhpcy5wbHVjaygndmFsdWUnKTsKKyAgfQorCisgIGZ1bmN0aW9uIGluZGV4KHZh
bHVlKSB7CisgICAgdmFyIG1hdGNoID0gdGhpcy5kZXRlY3QoZnVuY3Rpb24ocGFpcikgeworICAg
ICAgcmV0dXJuIHBhaXIudmFsdWUgPT09IHZhbHVlOworICAgIH0pOworICAgIHJldHVybiBtYXRj
aCAmJiBtYXRjaC5rZXk7CisgIH0KKworICBmdW5jdGlvbiBtZXJnZShvYmplY3QpIHsKKyAgICBy
ZXR1cm4gdGhpcy5jbG9uZSgpLnVwZGF0ZShvYmplY3QpOworICB9CisKKyAgZnVuY3Rpb24gdXBk
YXRlKG9iamVjdCkgeworICAgIHJldHVybiBuZXcgSGFzaChvYmplY3QpLmluamVjdCh0aGlzLCBm
dW5jdGlvbihyZXN1bHQsIHBhaXIpIHsKKyAgICAgIHJlc3VsdC5zZXQocGFpci5rZXksIHBhaXIu
dmFsdWUpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9u
IHRvUXVlcnlQYWlyKGtleSwgdmFsdWUpIHsKKyAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZh
bHVlKSkgcmV0dXJuIGtleTsKKyAgICByZXR1cm4ga2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9u
ZW50KFN0cmluZy5pbnRlcnByZXQodmFsdWUpKTsKKyAgfQorCisgIGZ1bmN0aW9uIHRvUXVlcnlT
dHJpbmcoKSB7CisgICAgcmV0dXJuIHRoaXMuaW5qZWN0KFtdLCBmdW5jdGlvbihyZXN1bHRzLCBw
YWlyKSB7CisgICAgICB2YXIga2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhaXIua2V5KSwgdmFs
dWVzID0gcGFpci52YWx1ZTsKKworICAgICAgaWYgKHZhbHVlcyAmJiB0eXBlb2YgdmFsdWVzID09
ICdvYmplY3QnKSB7CisgICAgICAgIGlmIChPYmplY3QuaXNBcnJheSh2YWx1ZXMpKSB7CisgICAg
ICAgICAgdmFyIHF1ZXJ5VmFsdWVzID0gW107CisgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxl
biA9IHZhbHVlcy5sZW5ndGgsIHZhbHVlOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIHZh
bHVlID0gdmFsdWVzW2ldOworICAgICAgICAgICAgcXVlcnlWYWx1ZXMucHVzaCh0b1F1ZXJ5UGFp
cihrZXksIHZhbHVlKSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiByZXN1bHRzLmNv
bmNhdChxdWVyeVZhbHVlcyk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSByZXN1bHRzLnB1c2go
dG9RdWVyeVBhaXIoa2V5LCB2YWx1ZXMpKTsKKyAgICAgIHJldHVybiByZXN1bHRzOworICAgIH0p
LmpvaW4oJyYnKTsKKyAgfQorCisgIGZ1bmN0aW9uIGluc3BlY3QoKSB7CisgICAgcmV0dXJuICcj
PEhhc2g6eycgKyB0aGlzLm1hcChmdW5jdGlvbihwYWlyKSB7CisgICAgICByZXR1cm4gcGFpci5t
YXAoT2JqZWN0Lmluc3BlY3QpLmpvaW4oJzogJyk7CisgICAgfSkuam9pbignLCAnKSArICd9Pic7
CisgIH0KKworICBmdW5jdGlvbiBjbG9uZSgpIHsKKyAgICByZXR1cm4gbmV3IEhhc2godGhpcyk7
CisgIH0KKworICByZXR1cm4geworICAgIGluaXRpYWxpemU6ICAgICAgICAgICAgIGluaXRpYWxp
emUsCisgICAgX2VhY2g6ICAgICAgICAgICAgICAgICAgX2VhY2gsCisgICAgc2V0OiAgICAgICAg
ICAgICAgICAgICAgc2V0LAorICAgIGdldDogICAgICAgICAgICAgICAgICAgIGdldCwKKyAgICB1
bnNldDogICAgICAgICAgICAgICAgICB1bnNldCwKKyAgICB0b09iamVjdDogICAgICAgICAgICAg
ICB0b09iamVjdCwKKyAgICB0b1RlbXBsYXRlUmVwbGFjZW1lbnRzOiB0b09iamVjdCwKKyAgICBr
ZXlzOiAgICAgICAgICAgICAgICAgICBrZXlzLAorICAgIHZhbHVlczogICAgICAgICAgICAgICAg
IHZhbHVlcywKKyAgICBpbmRleDogICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICBtZXJnZTog
ICAgICAgICAgICAgICAgICBtZXJnZSwKKyAgICB1cGRhdGU6ICAgICAgICAgICAgICAgICB1cGRh
dGUsCisgICAgdG9RdWVyeVN0cmluZzogICAgICAgICAgdG9RdWVyeVN0cmluZywKKyAgICBpbnNw
ZWN0OiAgICAgICAgICAgICAgICBpbnNwZWN0LAorICAgIHRvSlNPTjogICAgICAgICAgICAgICAg
IHRvT2JqZWN0LAorICAgIGNsb25lOiAgICAgICAgICAgICAgICAgIGNsb25lCisgIH07Cit9KSgp
KTsKKworSGFzaC5mcm9tID0gJEg7CitPYmplY3QuZXh0ZW5kKE51bWJlci5wcm90b3R5cGUsIChm
dW5jdGlvbigpIHsKKyAgZnVuY3Rpb24gdG9Db2xvclBhcnQoKSB7CisgICAgcmV0dXJuIHRoaXMu
dG9QYWRkZWRTdHJpbmcoMiwgMTYpOworICB9CisKKyAgZnVuY3Rpb24gc3VjYygpIHsKKyAgICBy
ZXR1cm4gdGhpcyArIDE7CisgIH0KKworICBmdW5jdGlvbiB0aW1lcyhpdGVyYXRvciwgY29udGV4
dCkgeworICAgICRSKDAsIHRoaXMsIHRydWUpLmVhY2goaXRlcmF0b3IsIGNvbnRleHQpOworICAg
IHJldHVybiB0aGlzOworICB9CisKKyAgZnVuY3Rpb24gdG9QYWRkZWRTdHJpbmcobGVuZ3RoLCBy
YWRpeCkgeworICAgIHZhciBzdHJpbmcgPSB0aGlzLnRvU3RyaW5nKHJhZGl4IHx8IDEwKTsKKyAg
ICByZXR1cm4gJzAnLnRpbWVzKGxlbmd0aCAtIHN0cmluZy5sZW5ndGgpICsgc3RyaW5nOworICB9
CisKKyAgZnVuY3Rpb24gYWJzKCkgeworICAgIHJldHVybiBNYXRoLmFicyh0aGlzKTsKKyAgfQor
CisgIGZ1bmN0aW9uIHJvdW5kKCkgeworICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMpOworICB9
CisKKyAgZnVuY3Rpb24gY2VpbCgpIHsKKyAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMpOworICB9
CisKKyAgZnVuY3Rpb24gZmxvb3IoKSB7CisgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcyk7Cisg
IH0KKworICByZXR1cm4geworICAgIHRvQ29sb3JQYXJ0OiAgICB0b0NvbG9yUGFydCwKKyAgICBz
dWNjOiAgICAgICAgICAgc3VjYywKKyAgICB0aW1lczogICAgICAgICAgdGltZXMsCisgICAgdG9Q
YWRkZWRTdHJpbmc6IHRvUGFkZGVkU3RyaW5nLAorICAgIGFiczogICAgICAgICAgICBhYnMsCisg
ICAgcm91bmQ6ICAgICAgICAgIHJvdW5kLAorICAgIGNlaWw6ICAgICAgICAgICBjZWlsLAorICAg
IGZsb29yOiAgICAgICAgICBmbG9vcgorICB9OworfSkoKSk7CisKK2Z1bmN0aW9uICRSKHN0YXJ0
LCBlbmQsIGV4Y2x1c2l2ZSkgeworICByZXR1cm4gbmV3IE9iamVjdFJhbmdlKHN0YXJ0LCBlbmQs
IGV4Y2x1c2l2ZSk7Cit9CisKK3ZhciBPYmplY3RSYW5nZSA9IENsYXNzLmNyZWF0ZShFbnVtZXJh
YmxlLCAoZnVuY3Rpb24oKSB7CisgIGZ1bmN0aW9uIGluaXRpYWxpemUoc3RhcnQsIGVuZCwgZXhj
bHVzaXZlKSB7CisgICAgdGhpcy5zdGFydCA9IHN0YXJ0OworICAgIHRoaXMuZW5kID0gZW5kOwor
ICAgIHRoaXMuZXhjbHVzaXZlID0gZXhjbHVzaXZlOworICB9CisKKyAgZnVuY3Rpb24gX2VhY2go
aXRlcmF0b3IpIHsKKyAgICB2YXIgdmFsdWUgPSB0aGlzLnN0YXJ0OworICAgIHdoaWxlICh0aGlz
LmluY2x1ZGUodmFsdWUpKSB7CisgICAgICBpdGVyYXRvcih2YWx1ZSk7CisgICAgICB2YWx1ZSA9
IHZhbHVlLnN1Y2MoKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBpbmNsdWRlKHZhbHVlKSB7
CisgICAgaWYgKHZhbHVlIDwgdGhpcy5zdGFydCkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAodGhpcy5leGNsdXNpdmUpCisgICAgICByZXR1cm4gdmFsdWUgPCB0aGlzLmVuZDsKKyAgICBy
ZXR1cm4gdmFsdWUgPD0gdGhpcy5lbmQ7CisgIH0KKworICByZXR1cm4geworICAgIGluaXRpYWxp
emU6IGluaXRpYWxpemUsCisgICAgX2VhY2g6ICAgICAgX2VhY2gsCisgICAgaW5jbHVkZTogICAg
aW5jbHVkZQorICB9OworfSkoKSk7CisKKworCit2YXIgQWpheCA9IHsKKyAgZ2V0VHJhbnNwb3J0
OiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gVHJ5LnRoZXNlKAorICAgICAgZnVuY3Rpb24oKSB7
cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpfSwKKyAgICAgIGZ1bmN0aW9uKCkge3JldHVybiBu
ZXcgQWN0aXZlWE9iamVjdCgnTXN4bWwyLlhNTEhUVFAnKX0sCisgICAgICBmdW5jdGlvbigpIHty
ZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyl9CisgICAgKSB8fCBm
YWxzZTsKKyAgfSwKKworICBhY3RpdmVSZXF1ZXN0Q291bnQ6IDAKK307CisKK0FqYXguUmVzcG9u
ZGVycyA9IHsKKyAgcmVzcG9uZGVyczogW10sCisKKyAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9y
KSB7CisgICAgdGhpcy5yZXNwb25kZXJzLl9lYWNoKGl0ZXJhdG9yKTsKKyAgfSwKKworICByZWdp
c3RlcjogZnVuY3Rpb24ocmVzcG9uZGVyKSB7CisgICAgaWYgKCF0aGlzLmluY2x1ZGUocmVzcG9u
ZGVyKSkKKyAgICAgIHRoaXMucmVzcG9uZGVycy5wdXNoKHJlc3BvbmRlcik7CisgIH0sCisKKyAg
dW5yZWdpc3RlcjogZnVuY3Rpb24ocmVzcG9uZGVyKSB7CisgICAgdGhpcy5yZXNwb25kZXJzID0g
dGhpcy5yZXNwb25kZXJzLndpdGhvdXQocmVzcG9uZGVyKTsKKyAgfSwKKworICBkaXNwYXRjaDog
ZnVuY3Rpb24oY2FsbGJhY2ssIHJlcXVlc3QsIHRyYW5zcG9ydCwganNvbikgeworICAgIHRoaXMu
ZWFjaChmdW5jdGlvbihyZXNwb25kZXIpIHsKKyAgICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihy
ZXNwb25kZXJbY2FsbGJhY2tdKSkgeworICAgICAgICB0cnkgeworICAgICAgICAgIHJlc3BvbmRl
cltjYWxsYmFja10uYXBwbHkocmVzcG9uZGVyLCBbcmVxdWVzdCwgdHJhbnNwb3J0LCBqc29uXSk7
CisgICAgICAgIH0gY2F0Y2ggKGUpIHsgfQorICAgICAgfQorICAgIH0pOworICB9Cit9OworCitP
YmplY3QuZXh0ZW5kKEFqYXguUmVzcG9uZGVycywgRW51bWVyYWJsZSk7CisKK0FqYXguUmVzcG9u
ZGVycy5yZWdpc3Rlcih7CisgIG9uQ3JlYXRlOiAgIGZ1bmN0aW9uKCkgeyBBamF4LmFjdGl2ZVJl
cXVlc3RDb3VudCsrIH0sCisgIG9uQ29tcGxldGU6IGZ1bmN0aW9uKCkgeyBBamF4LmFjdGl2ZVJl
cXVlc3RDb3VudC0tIH0KK30pOworQWpheC5CYXNlID0gQ2xhc3MuY3JlYXRlKHsKKyAgaW5pdGlh
bGl6ZTogZnVuY3Rpb24ob3B0aW9ucykgeworICAgIHRoaXMub3B0aW9ucyA9IHsKKyAgICAgIG1l
dGhvZDogICAgICAgJ3Bvc3QnLAorICAgICAgYXN5bmNocm9ub3VzOiB0cnVlLAorICAgICAgY29u
dGVudFR5cGU6ICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKKyAgICAgIGVu
Y29kaW5nOiAgICAgJ1VURi04JywKKyAgICAgIHBhcmFtZXRlcnM6ICAgJycsCisgICAgICBldmFs
SlNPTjogICAgIHRydWUsCisgICAgICBldmFsSlM6ICAgICAgIHRydWUKKyAgICB9OworICAgIE9i
amVjdC5leHRlbmQodGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHsgfSk7CisKKyAgICB0aGlzLm9w
dGlvbnMubWV0aG9kID0gdGhpcy5vcHRpb25zLm1ldGhvZC50b0xvd2VyQ2FzZSgpOworCisgICAg
aWYgKE9iamVjdC5pc0hhc2godGhpcy5vcHRpb25zLnBhcmFtZXRlcnMpKQorICAgICAgdGhpcy5v
cHRpb25zLnBhcmFtZXRlcnMgPSB0aGlzLm9wdGlvbnMucGFyYW1ldGVycy50b09iamVjdCgpOwor
ICB9Cit9KTsKK0FqYXguUmVxdWVzdCA9IENsYXNzLmNyZWF0ZShBamF4LkJhc2UsIHsKKyAgX2Nv
bXBsZXRlOiBmYWxzZSwKKworICBpbml0aWFsaXplOiBmdW5jdGlvbigkc3VwZXIsIHVybCwgb3B0
aW9ucykgeworICAgICRzdXBlcihvcHRpb25zKTsKKyAgICB0aGlzLnRyYW5zcG9ydCA9IEFqYXgu
Z2V0VHJhbnNwb3J0KCk7CisgICAgdGhpcy5yZXF1ZXN0KHVybCk7CisgIH0sCisKKyAgcmVxdWVz
dDogZnVuY3Rpb24odXJsKSB7CisgICAgdGhpcy51cmwgPSB1cmw7CisgICAgdGhpcy5tZXRob2Qg
PSB0aGlzLm9wdGlvbnMubWV0aG9kOworICAgIHZhciBwYXJhbXMgPSBPYmplY3QuaXNTdHJpbmco
dGhpcy5vcHRpb25zLnBhcmFtZXRlcnMpID8KKyAgICAgICAgICB0aGlzLm9wdGlvbnMucGFyYW1l
dGVycyA6CisgICAgICAgICAgT2JqZWN0LnRvUXVlcnlTdHJpbmcodGhpcy5vcHRpb25zLnBhcmFt
ZXRlcnMpOworCisgICAgaWYgKCFbJ2dldCcsICdwb3N0J10uaW5jbHVkZSh0aGlzLm1ldGhvZCkp
IHsKKyAgICAgIHBhcmFtcyArPSAocGFyYW1zID8gJyYnIDogJycpICsgIl9tZXRob2Q9IiArIHRo
aXMubWV0aG9kOworICAgICAgdGhpcy5tZXRob2QgPSAncG9zdCc7CisgICAgfQorCisgICAgaWYg
KHBhcmFtcyAmJiB0aGlzLm1ldGhvZCA9PT0gJ2dldCcpIHsKKyAgICAgIHRoaXMudXJsICs9ICh0
aGlzLnVybC5pbmNsdWRlKCc/JykgPyAnJicgOiAnPycpICsgcGFyYW1zOworICAgIH0KKworICAg
IHRoaXMucGFyYW1ldGVycyA9IHBhcmFtcy50b1F1ZXJ5UGFyYW1zKCk7CisKKyAgICB0cnkgewor
ICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IEFqYXguUmVzcG9uc2UodGhpcyk7CisgICAgICBpZiAo
dGhpcy5vcHRpb25zLm9uQ3JlYXRlKSB0aGlzLm9wdGlvbnMub25DcmVhdGUocmVzcG9uc2UpOwor
ICAgICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkNyZWF0ZScsIHRoaXMsIHJlc3BvbnNl
KTsKKworICAgICAgdGhpcy50cmFuc3BvcnQub3Blbih0aGlzLm1ldGhvZC50b1VwcGVyQ2FzZSgp
LCB0aGlzLnVybCwKKyAgICAgICAgdGhpcy5vcHRpb25zLmFzeW5jaHJvbm91cyk7CisKKyAgICAg
IGlmICh0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKSB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUu
YmluZCh0aGlzKS5kZWZlcigxKTsKKworICAgICAgdGhpcy50cmFuc3BvcnQub25yZWFkeXN0YXRl
Y2hhbmdlID0gdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgICB0aGlzLnNldFJl
cXVlc3RIZWFkZXJzKCk7CisKKyAgICAgIHRoaXMuYm9keSA9IHRoaXMubWV0aG9kID09ICdwb3N0
JyA/ICh0aGlzLm9wdGlvbnMucG9zdEJvZHkgfHwgcGFyYW1zKSA6IG51bGw7CisgICAgICB0aGlz
LnRyYW5zcG9ydC5zZW5kKHRoaXMuYm9keSk7CisKKyAgICAgIC8qIEZvcmNlIEZpcmVmb3ggdG8g
aGFuZGxlIHJlYWR5IHN0YXRlIDQgZm9yIHN5bmNocm9ub3VzIHJlcXVlc3RzICovCisgICAgICBp
ZiAoIXRoaXMub3B0aW9ucy5hc3luY2hyb25vdXMgJiYgdGhpcy50cmFuc3BvcnQub3ZlcnJpZGVN
aW1lVHlwZSkKKyAgICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlKCk7CisKKyAgICB9CisgICAgY2F0
Y2ggKGUpIHsKKyAgICAgIHRoaXMuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CisgICAgfQorICB9LAor
CisgIG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCkgeworICAgIHZhciByZWFkeVN0YXRlID0gdGhp
cy50cmFuc3BvcnQucmVhZHlTdGF0ZTsKKyAgICBpZiAocmVhZHlTdGF0ZSA+IDEgJiYgISgocmVh
ZHlTdGF0ZSA9PSA0KSAmJiB0aGlzLl9jb21wbGV0ZSkpCisgICAgICB0aGlzLnJlc3BvbmRUb1Jl
YWR5U3RhdGUodGhpcy50cmFuc3BvcnQucmVhZHlTdGF0ZSk7CisgIH0sCisKKyAgc2V0UmVxdWVz
dEhlYWRlcnM6IGZ1bmN0aW9uKCkgeworICAgIHZhciBoZWFkZXJzID0geworICAgICAgJ1gtUmVx
dWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLAorICAgICAgJ1gtUHJvdG90eXBlLVZlcnNp
b24nOiBQcm90b3R5cGUuVmVyc2lvbiwKKyAgICAgICdBY2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0
LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKicKKyAgICB9OworCisg
ICAgaWYgKHRoaXMubWV0aG9kID09ICdwb3N0JykgeworICAgICAgaGVhZGVyc1snQ29udGVudC10
eXBlJ10gPSB0aGlzLm9wdGlvbnMuY29udGVudFR5cGUgKworICAgICAgICAodGhpcy5vcHRpb25z
LmVuY29kaW5nID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJycpOwor
CisgICAgICAvKiBGb3JjZSAiQ29ubmVjdGlvbjogY2xvc2UiIGZvciBvbGRlciBNb3ppbGxhIGJy
b3dzZXJzIHRvIHdvcmsKKyAgICAgICAqIGFyb3VuZCBhIGJ1ZyB3aGVyZSBYTUxIdHRwUmVxdWVz
dCBzZW5kcyBhbiBpbmNvcnJlY3QKKyAgICAgICAqIENvbnRlbnQtbGVuZ3RoIGhlYWRlci4gU2Vl
IE1vemlsbGEgQnVnemlsbGEgIzI0NjY1MS4KKyAgICAgICAqLworICAgICAgaWYgKHRoaXMudHJh
bnNwb3J0Lm92ZXJyaWRlTWltZVR5cGUgJiYKKyAgICAgICAgICAobmF2aWdhdG9yLnVzZXJBZ2Vu
dC5tYXRjaCgvR2Vja29cLyhcZHs0fSkvKSB8fCBbMCwyMDA1XSlbMV0gPCAyMDA1KQorICAgICAg
ICAgICAgaGVhZGVyc1snQ29ubmVjdGlvbiddID0gJ2Nsb3NlJzsKKyAgICB9CisKKyAgICBpZiAo
dHlwZW9mIHRoaXMub3B0aW9ucy5yZXF1ZXN0SGVhZGVycyA9PSAnb2JqZWN0JykgeworICAgICAg
dmFyIGV4dHJhcyA9IHRoaXMub3B0aW9ucy5yZXF1ZXN0SGVhZGVyczsKKworICAgICAgaWYgKE9i
amVjdC5pc0Z1bmN0aW9uKGV4dHJhcy5wdXNoKSkKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IGV4dHJhcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gMikKKyAgICAgICAgICBoZWFk
ZXJzW2V4dHJhc1tpXV0gPSBleHRyYXNbaSsxXTsKKyAgICAgIGVsc2UKKyAgICAgICAgJEgoZXh0
cmFzKS5lYWNoKGZ1bmN0aW9uKHBhaXIpIHsgaGVhZGVyc1twYWlyLmtleV0gPSBwYWlyLnZhbHVl
IH0pOworICAgIH0KKworICAgIGZvciAodmFyIG5hbWUgaW4gaGVhZGVycykKKyAgICAgIHRoaXMu
dHJhbnNwb3J0LnNldFJlcXVlc3RIZWFkZXIobmFtZSwgaGVhZGVyc1tuYW1lXSk7CisgIH0sCisK
KyAgc3VjY2VzczogZnVuY3Rpb24oKSB7CisgICAgdmFyIHN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVz
KCk7CisgICAgcmV0dXJuICFzdGF0dXMgfHwgKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAw
KSB8fCBzdGF0dXMgPT0gMzA0OworICB9LAorCisgIGdldFN0YXR1czogZnVuY3Rpb24oKSB7Cisg
ICAgdHJ5IHsKKyAgICAgIGlmICh0aGlzLnRyYW5zcG9ydC5zdGF0dXMgPT09IDEyMjMpIHJldHVy
biAyMDQ7CisgICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuc3RhdHVzIHx8IDA7CisgICAgfSBj
YXRjaCAoZSkgeyByZXR1cm4gMCB9CisgIH0sCisKKyAgcmVzcG9uZFRvUmVhZHlTdGF0ZTogZnVu
Y3Rpb24ocmVhZHlTdGF0ZSkgeworICAgIHZhciBzdGF0ZSA9IEFqYXguUmVxdWVzdC5FdmVudHNb
cmVhZHlTdGF0ZV0sIHJlc3BvbnNlID0gbmV3IEFqYXguUmVzcG9uc2UodGhpcyk7CisKKyAgICBp
ZiAoc3RhdGUgPT0gJ0NvbXBsZXRlJykgeworICAgICAgdHJ5IHsKKyAgICAgICAgdGhpcy5fY29t
cGxldGUgPSB0cnVlOworICAgICAgICAodGhpcy5vcHRpb25zWydvbicgKyByZXNwb25zZS5zdGF0
dXNdCisgICAgICAgICB8fCB0aGlzLm9wdGlvbnNbJ29uJyArICh0aGlzLnN1Y2Nlc3MoKSA/ICdT
dWNjZXNzJyA6ICdGYWlsdXJlJyldCisgICAgICAgICB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlv
bikocmVzcG9uc2UsIHJlc3BvbnNlLmhlYWRlckpTT04pOworICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOworICAgICAgfQorCisgICAgICB2YXIg
Y29udGVudFR5cGUgPSByZXNwb25zZS5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpOworICAgICAg
aWYgKHRoaXMub3B0aW9ucy5ldmFsSlMgPT0gJ2ZvcmNlJworICAgICAgICAgIHx8ICh0aGlzLm9w
dGlvbnMuZXZhbEpTICYmIHRoaXMuaXNTYW1lT3JpZ2luKCkgJiYgY29udGVudFR5cGUKKyAgICAg
ICAgICAmJiBjb250ZW50VHlwZS5tYXRjaCgvXlxzKih0ZXh0fGFwcGxpY2F0aW9uKVwvKHgtKT8o
amF2YXxlY21hKXNjcmlwdCg7LiopP1xzKiQvaSkpKQorICAgICAgICB0aGlzLmV2YWxSZXNwb25z
ZSgpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAodGhpcy5vcHRpb25zWydvbicgKyBzdGF0
ZV0gfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJK
U09OKTsKKyAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb24nICsgc3RhdGUsIHRoaXMs
IHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJKU09OKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOworICAgIH0KKworICAgIGlmIChzdGF0ZSA9PSAn
Q29tcGxldGUnKSB7CisgICAgICB0aGlzLnRyYW5zcG9ydC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBQ
cm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKKyAgICB9CisgIH0sCisKKyAgaXNTYW1lT3JpZ2luOiBm
dW5jdGlvbigpIHsKKyAgICB2YXIgbSA9IHRoaXMudXJsLm1hdGNoKC9eXHMqaHR0cHM/OlwvXC9b
XlwvXSovKTsKKyAgICByZXR1cm4gIW0gfHwgKG1bMF0gPT0gJyN7cHJvdG9jb2x9Ly8je2RvbWFp
bn0je3BvcnR9Jy5pbnRlcnBvbGF0ZSh7CisgICAgICBwcm90b2NvbDogbG9jYXRpb24ucHJvdG9j
b2wsCisgICAgICBkb21haW46IGRvY3VtZW50LmRvbWFpbiwKKyAgICAgIHBvcnQ6IGxvY2F0aW9u
LnBvcnQgPyAnOicgKyBsb2NhdGlvbi5wb3J0IDogJycKKyAgICB9KSk7CisgIH0sCisKKyAgZ2V0
SGVhZGVyOiBmdW5jdGlvbihuYW1lKSB7CisgICAgdHJ5IHsKKyAgICAgIHJldHVybiB0aGlzLnRy
YW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcihuYW1lKSB8fCBudWxsOworICAgIH0gY2F0Y2ggKGUp
IHsgcmV0dXJuIG51bGw7IH0KKyAgfSwKKworICBldmFsUmVzcG9uc2U6IGZ1bmN0aW9uKCkgewor
ICAgIHRyeSB7CisgICAgICByZXR1cm4gZXZhbCgodGhpcy50cmFuc3BvcnQucmVzcG9uc2VUZXh0
IHx8ICcnKS51bmZpbHRlckpTT04oKSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgdGhpcy5k
aXNwYXRjaEV4Y2VwdGlvbihlKTsKKyAgICB9CisgIH0sCisKKyAgZGlzcGF0Y2hFeGNlcHRpb246
IGZ1bmN0aW9uKGV4Y2VwdGlvbikgeworICAgICh0aGlzLm9wdGlvbnMub25FeGNlcHRpb24gfHwg
UHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHRoaXMsIGV4Y2VwdGlvbik7CisgICAgQWpheC5SZXNw
b25kZXJzLmRpc3BhdGNoKCdvbkV4Y2VwdGlvbicsIHRoaXMsIGV4Y2VwdGlvbik7CisgIH0KK30p
OworCitBamF4LlJlcXVlc3QuRXZlbnRzID0KKyAgWydVbmluaXRpYWxpemVkJywgJ0xvYWRpbmcn
LCAnTG9hZGVkJywgJ0ludGVyYWN0aXZlJywgJ0NvbXBsZXRlJ107CisKKworCisKKworCisKKwor
QWpheC5SZXNwb25zZSA9IENsYXNzLmNyZWF0ZSh7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKHJl
cXVlc3QpeworICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgdmFyIHRyYW5zcG9ydCAg
PSB0aGlzLnRyYW5zcG9ydCAgPSByZXF1ZXN0LnRyYW5zcG9ydCwKKyAgICAgICAgcmVhZHlTdGF0
ZSA9IHRoaXMucmVhZHlTdGF0ZSA9IHRyYW5zcG9ydC5yZWFkeVN0YXRlOworCisgICAgaWYgKChy
ZWFkeVN0YXRlID4gMiAmJiAhUHJvdG90eXBlLkJyb3dzZXIuSUUpIHx8IHJlYWR5U3RhdGUgPT0g
NCkgeworICAgICAgdGhpcy5zdGF0dXMgICAgICAgPSB0aGlzLmdldFN0YXR1cygpOworICAgICAg
dGhpcy5zdGF0dXNUZXh0ICAgPSB0aGlzLmdldFN0YXR1c1RleHQoKTsKKyAgICAgIHRoaXMucmVz
cG9uc2VUZXh0ID0gU3RyaW5nLmludGVycHJldCh0cmFuc3BvcnQucmVzcG9uc2VUZXh0KTsKKyAg
ICAgIHRoaXMuaGVhZGVySlNPTiAgID0gdGhpcy5fZ2V0SGVhZGVySlNPTigpOworICAgIH0KKwor
ICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHsKKyAgICAgIHZhciB4bWwgPSB0cmFuc3BvcnQucmVz
cG9uc2VYTUw7CisgICAgICB0aGlzLnJlc3BvbnNlWE1MICA9IE9iamVjdC5pc1VuZGVmaW5lZCh4
bWwpID8gbnVsbCA6IHhtbDsKKyAgICAgIHRoaXMucmVzcG9uc2VKU09OID0gdGhpcy5fZ2V0UmVz
cG9uc2VKU09OKCk7CisgICAgfQorICB9LAorCisgIHN0YXR1czogICAgICAwLAorCisgIHN0YXR1
c1RleHQ6ICcnLAorCisgIGdldFN0YXR1czogQWpheC5SZXF1ZXN0LnByb3RvdHlwZS5nZXRTdGF0
dXMsCisKKyAgZ2V0U3RhdHVzVGV4dDogZnVuY3Rpb24oKSB7CisgICAgdHJ5IHsKKyAgICAgIHJl
dHVybiB0aGlzLnRyYW5zcG9ydC5zdGF0dXNUZXh0IHx8ICcnOworICAgIH0gY2F0Y2ggKGUpIHsg
cmV0dXJuICcnIH0KKyAgfSwKKworICBnZXRIZWFkZXI6IEFqYXguUmVxdWVzdC5wcm90b3R5cGUu
Z2V0SGVhZGVyLAorCisgIGdldEFsbEhlYWRlcnM6IGZ1bmN0aW9uKCkgeworICAgIHRyeSB7Cisg
ICAgICByZXR1cm4gdGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKKyAgICB9IGNhdGNoIChl
KSB7IHJldHVybiBudWxsIH0KKyAgfSwKKworICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24o
bmFtZSkgeworICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcihuYW1l
KTsKKyAgfSwKKworICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLnRyYW5zcG9ydC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKKyAgfSwKKworICBf
Z2V0SGVhZGVySlNPTjogZnVuY3Rpb24oKSB7CisgICAgdmFyIGpzb24gPSB0aGlzLmdldEhlYWRl
cignWC1KU09OJyk7CisgICAgaWYgKCFqc29uKSByZXR1cm4gbnVsbDsKKyAgICBqc29uID0gZGVj
b2RlVVJJQ29tcG9uZW50KGVzY2FwZShqc29uKSk7CisgICAgdHJ5IHsKKyAgICAgIHJldHVybiBq
c29uLmV2YWxKU09OKHRoaXMucmVxdWVzdC5vcHRpb25zLnNhbml0aXplSlNPTiB8fAorICAgICAg
ICAhdGhpcy5yZXF1ZXN0LmlzU2FtZU9yaWdpbigpKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICB0aGlzLnJlcXVlc3QuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CisgICAgfQorICB9LAorCisgIF9n
ZXRSZXNwb25zZUpTT046IGZ1bmN0aW9uKCkgeworICAgIHZhciBvcHRpb25zID0gdGhpcy5yZXF1
ZXN0Lm9wdGlvbnM7CisgICAgaWYgKCFvcHRpb25zLmV2YWxKU09OIHx8IChvcHRpb25zLmV2YWxK
U09OICE9ICdmb3JjZScgJiYKKyAgICAgICEodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScp
IHx8ICcnKS5pbmNsdWRlKCdhcHBsaWNhdGlvbi9qc29uJykpIHx8CisgICAgICAgIHRoaXMucmVz
cG9uc2VUZXh0LmJsYW5rKCkpCisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgdHJ5IHsKKyAg
ICAgIHJldHVybiB0aGlzLnJlc3BvbnNlVGV4dC5ldmFsSlNPTihvcHRpb25zLnNhbml0aXplSlNP
TiB8fAorICAgICAgICAhdGhpcy5yZXF1ZXN0LmlzU2FtZU9yaWdpbigpKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICB0aGlzLnJlcXVlc3QuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CisgICAgfQor
ICB9Cit9KTsKKworQWpheC5VcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguUmVxdWVzdCwgewor
ICBpbml0aWFsaXplOiBmdW5jdGlvbigkc3VwZXIsIGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKSB7
CisgICAgdGhpcy5jb250YWluZXIgPSB7CisgICAgICBzdWNjZXNzOiAoY29udGFpbmVyLnN1Y2Nl
c3MgfHwgY29udGFpbmVyKSwKKyAgICAgIGZhaWx1cmU6IChjb250YWluZXIuZmFpbHVyZSB8fCAo
Y29udGFpbmVyLnN1Y2Nlc3MgPyBudWxsIDogY29udGFpbmVyKSkKKyAgICB9OworCisgICAgb3B0
aW9ucyA9IE9iamVjdC5jbG9uZShvcHRpb25zKTsKKyAgICB2YXIgb25Db21wbGV0ZSA9IG9wdGlv
bnMub25Db21wbGV0ZTsKKyAgICBvcHRpb25zLm9uQ29tcGxldGUgPSAoZnVuY3Rpb24ocmVzcG9u
c2UsIGpzb24pIHsKKyAgICAgIHRoaXMudXBkYXRlQ29udGVudChyZXNwb25zZS5yZXNwb25zZVRl
eHQpOworICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKG9uQ29tcGxldGUpKSBvbkNvbXBsZXRl
KHJlc3BvbnNlLCBqc29uKTsKKyAgICB9KS5iaW5kKHRoaXMpOworCisgICAgJHN1cGVyKHVybCwg
b3B0aW9ucyk7CisgIH0sCisKKyAgdXBkYXRlQ29udGVudDogZnVuY3Rpb24ocmVzcG9uc2VUZXh0
KSB7CisgICAgdmFyIHJlY2VpdmVyID0gdGhpcy5jb250YWluZXJbdGhpcy5zdWNjZXNzKCkgPyAn
c3VjY2VzcycgOiAnZmFpbHVyZSddLAorICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zOwor
CisgICAgaWYgKCFvcHRpb25zLmV2YWxTY3JpcHRzKSByZXNwb25zZVRleHQgPSByZXNwb25zZVRl
eHQuc3RyaXBTY3JpcHRzKCk7CisKKyAgICBpZiAocmVjZWl2ZXIgPSAkKHJlY2VpdmVyKSkgewor
ICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0aW9uKSB7CisgICAgICAgIGlmIChPYmplY3QuaXNTdHJp
bmcob3B0aW9ucy5pbnNlcnRpb24pKSB7CisgICAgICAgICAgdmFyIGluc2VydGlvbiA9IHsgfTsg
aW5zZXJ0aW9uW29wdGlvbnMuaW5zZXJ0aW9uXSA9IHJlc3BvbnNlVGV4dDsKKyAgICAgICAgICBy
ZWNlaXZlci5pbnNlcnQoaW5zZXJ0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIG9wdGlv
bnMuaW5zZXJ0aW9uKHJlY2VpdmVyLCByZXNwb25zZVRleHQpOworICAgICAgfQorICAgICAgZWxz
ZSByZWNlaXZlci51cGRhdGUocmVzcG9uc2VUZXh0KTsKKyAgICB9CisgIH0KK30pOworCitBamF4
LlBlcmlvZGljYWxVcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgeworICBpbml0aWFs
aXplOiBmdW5jdGlvbigkc3VwZXIsIGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKSB7CisgICAgJHN1
cGVyKG9wdGlvbnMpOworICAgIHRoaXMub25Db21wbGV0ZSA9IHRoaXMub3B0aW9ucy5vbkNvbXBs
ZXRlOworCisgICAgdGhpcy5mcmVxdWVuY3kgPSAodGhpcy5vcHRpb25zLmZyZXF1ZW5jeSB8fCAy
KTsKKyAgICB0aGlzLmRlY2F5ID0gKHRoaXMub3B0aW9ucy5kZWNheSB8fCAxKTsKKworICAgIHRo
aXMudXBkYXRlciA9IHsgfTsKKyAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKKyAgICB0
aGlzLnVybCA9IHVybDsKKworICAgIHRoaXMuc3RhcnQoKTsKKyAgfSwKKworICBzdGFydDogZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5vcHRpb25zLm9uQ29tcGxldGUgPSB0aGlzLnVwZGF0ZUNvbXBs
ZXRlLmJpbmQodGhpcyk7CisgICAgdGhpcy5vblRpbWVyRXZlbnQoKTsKKyAgfSwKKworICBzdG9w
OiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnVwZGF0ZXIub3B0aW9ucy5vbkNvbXBsZXRlID0gdW5k
ZWZpbmVkOworICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKKyAgICAodGhpcy5vbkNvbXBs
ZXRlIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwor
ICB9LAorCisgIHVwZGF0ZUNvbXBsZXRlOiBmdW5jdGlvbihyZXNwb25zZSkgeworICAgIGlmICh0
aGlzLm9wdGlvbnMuZGVjYXkpIHsKKyAgICAgIHRoaXMuZGVjYXkgPSAocmVzcG9uc2UucmVzcG9u
c2VUZXh0ID09IHRoaXMubGFzdFRleHQgPworICAgICAgICB0aGlzLmRlY2F5ICogdGhpcy5vcHRp
b25zLmRlY2F5IDogMSk7CisKKyAgICAgIHRoaXMubGFzdFRleHQgPSByZXNwb25zZS5yZXNwb25z
ZVRleHQ7CisgICAgfQorICAgIHRoaXMudGltZXIgPSB0aGlzLm9uVGltZXJFdmVudC5iaW5kKHRo
aXMpLmRlbGF5KHRoaXMuZGVjYXkgKiB0aGlzLmZyZXF1ZW5jeSk7CisgIH0sCisKKyAgb25UaW1l
ckV2ZW50OiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnVwZGF0ZXIgPSBuZXcgQWpheC5VcGRhdGVy
KHRoaXMuY29udGFpbmVyLCB0aGlzLnVybCwgdGhpcy5vcHRpb25zKTsKKyAgfQorfSk7CisKKwor
ZnVuY3Rpb24gJChlbGVtZW50KSB7CisgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgeworICAg
IGZvciAodmFyIGkgPSAwLCBlbGVtZW50cyA9IFtdLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3Ro
OyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICBlbGVtZW50cy5wdXNoKCQoYXJndW1lbnRzW2ldKSk7
CisgICAgcmV0dXJuIGVsZW1lbnRzOworICB9CisgIGlmIChPYmplY3QuaXNTdHJpbmcoZWxlbWVu
dCkpCisgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQpOworICBy
ZXR1cm4gRWxlbWVudC5leHRlbmQoZWxlbWVudCk7Cit9CisKK2lmIChQcm90b3R5cGUuQnJvd3Nl
ckZlYXR1cmVzLlhQYXRoKSB7CisgIGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGggPSBmdW5j
dGlvbihleHByZXNzaW9uLCBwYXJlbnRFbGVtZW50KSB7CisgICAgdmFyIHJlc3VsdHMgPSBbXTsK
KyAgICB2YXIgcXVlcnkgPSBkb2N1bWVudC5ldmFsdWF0ZShleHByZXNzaW9uLCAkKHBhcmVudEVs
ZW1lbnQpIHx8IGRvY3VtZW50LAorICAgICAgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUsIG51bGwpOworICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBxdWVy
eS5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgcmVzdWx0cy5wdXNoKEVs
ZW1lbnQuZXh0ZW5kKHF1ZXJ5LnNuYXBzaG90SXRlbShpKSkpOworICAgIHJldHVybiByZXN1bHRz
OworICB9OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaWYgKCFOb2RlKSB2YXIgTm9k
ZSA9IHsgfTsKKworaWYgKCFOb2RlLkVMRU1FTlRfTk9ERSkgeworICBPYmplY3QuZXh0ZW5kKE5v
ZGUsIHsKKyAgICBFTEVNRU5UX05PREU6IDEsCisgICAgQVRUUklCVVRFX05PREU6IDIsCisgICAg
VEVYVF9OT0RFOiAzLAorICAgIENEQVRBX1NFQ1RJT05fTk9ERTogNCwKKyAgICBFTlRJVFlfUkVG
RVJFTkNFX05PREU6IDUsCisgICAgRU5USVRZX05PREU6IDYsCisgICAgUFJPQ0VTU0lOR19JTlNU
UlVDVElPTl9OT0RFOiA3LAorICAgIENPTU1FTlRfTk9ERTogOCwKKyAgICBET0NVTUVOVF9OT0RF
OiA5LAorICAgIERPQ1VNRU5UX1RZUEVfTk9ERTogMTAsCisgICAgRE9DVU1FTlRfRlJBR01FTlRf
Tk9ERTogMTEsCisgICAgTk9UQVRJT05fTk9ERTogMTIKKyAgfSk7Cit9CisKKworCisoZnVuY3Rp
b24oZ2xvYmFsKSB7CisgIGZ1bmN0aW9uIHNob3VsZFVzZUNhY2hlKHRhZ05hbWUsIGF0dHJpYnV0
ZXMpIHsKKyAgICBpZiAodGFnTmFtZSA9PT0gJ3NlbGVjdCcpIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoJ3R5cGUnIGluIGF0dHJpYnV0ZXMpIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgfQorCisgIHZhciBIQVNfRVhURU5ERURfQ1JFQVRFX0VMRU1FTlRfU1lOVEFYID0gKGZ1bmN0
aW9uKCl7CisgICAgdHJ5IHsKKyAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
JzxpbnB1dCBuYW1lPSJ4Ij4nKTsKKyAgICAgIHJldHVybiBlbC50YWdOYW1lLnRvTG93ZXJDYXNl
KCkgPT09ICdpbnB1dCcgJiYgZWwubmFtZSA9PT0gJ3gnOworICAgIH0KKyAgICBjYXRjaChlcnIp
IHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0pKCk7CisKKyAgdmFyIGVsZW1lbnQg
PSBnbG9iYWwuRWxlbWVudDsKKworICBnbG9iYWwuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZ05hbWUs
IGF0dHJpYnV0ZXMpIHsKKyAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7IH07CisgICAg
dGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dlckNhc2UoKTsKKyAgICB2YXIgY2FjaGUgPSBFbGVtZW50
LmNhY2hlOworCisgICAgaWYgKEhBU19FWFRFTkRFRF9DUkVBVEVfRUxFTUVOVF9TWU5UQVggJiYg
YXR0cmlidXRlcy5uYW1lKSB7CisgICAgICB0YWdOYW1lID0gJzwnICsgdGFnTmFtZSArICcgbmFt
ZT0iJyArIGF0dHJpYnV0ZXMubmFtZSArICciPic7CisgICAgICBkZWxldGUgYXR0cmlidXRlcy5u
YW1lOworICAgICAgcmV0dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCh0YWdOYW1lKSwgYXR0cmlidXRlcyk7CisgICAgfQorCisgICAgaWYgKCFjYWNoZVt0
YWdOYW1lXSkgY2FjaGVbdGFnTmFtZV0gPSBFbGVtZW50LmV4dGVuZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KHRhZ05hbWUpKTsKKworICAgIHZhciBub2RlID0gc2hvdWxkVXNlQ2FjaGUodGFnTmFt
ZSwgYXR0cmlidXRlcykgPworICAgICBjYWNoZVt0YWdOYW1lXS5jbG9uZU5vZGUoZmFsc2UpIDog
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKworICAgIHJldHVybiBFbGVtZW50Lndy
aXRlQXR0cmlidXRlKG5vZGUsIGF0dHJpYnV0ZXMpOworICB9OworCisgIE9iamVjdC5leHRlbmQo
Z2xvYmFsLkVsZW1lbnQsIGVsZW1lbnQgfHwgeyB9KTsKKyAgaWYgKGVsZW1lbnQpIGdsb2JhbC5F
bGVtZW50LnByb3RvdHlwZSA9IGVsZW1lbnQucHJvdG90eXBlOworCit9KSh0aGlzKTsKKworRWxl
bWVudC5pZENvdW50ZXIgPSAxOworRWxlbWVudC5jYWNoZSA9IHsgfTsKKworRWxlbWVudC5fcHVy
Z2VFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkgeworICB2YXIgdWlkID0gZWxlbWVudC5fcHJv
dG90eXBlVUlEOworICBpZiAodWlkKSB7CisgICAgRWxlbWVudC5zdG9wT2JzZXJ2aW5nKGVsZW1l
bnQpOworICAgIGVsZW1lbnQuX3Byb3RvdHlwZVVJRCA9IHZvaWQgMDsKKyAgICBkZWxldGUgRWxl
bWVudC5TdG9yYWdlW3VpZF07CisgIH0KK30KKworRWxlbWVudC5NZXRob2RzID0geworICB2aXNp
YmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICQoZWxlbWVudCkuc3R5bGUuZGlz
cGxheSAhPSAnbm9uZSc7CisgIH0sCisKKyAgdG9nZ2xlOiBmdW5jdGlvbihlbGVtZW50KSB7Cisg
ICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgRWxlbWVudFtFbGVtZW50LnZpc2libGUoZWxl
bWVudCkgPyAnaGlkZScgOiAnc2hvdyddKGVsZW1lbnQpOworICAgIHJldHVybiBlbGVtZW50Owor
ICB9LAorCisgIGhpZGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKKyAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgIH0sCisKKyAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQg
PSAkKGVsZW1lbnQpOworICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnOworICAgIHJldHVy
biBlbGVtZW50OworICB9LAorCisgIHJlbW92ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChl
bGVtZW50KTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICB1cGRhdGU6IChmdW5jdGlv
bigpeworCisgICAgdmFyIFNFTEVDVF9FTEVNRU5UX0lOTkVSSFRNTF9CVUdHWSA9IChmdW5jdGlv
bigpeworICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksCisg
ICAgICAgICAgaXNCdWdneSA9IHRydWU7CisgICAgICBlbC5pbm5lckhUTUwgPSAiPG9wdGlvbiB2
YWx1ZT1cInRlc3RcIj50ZXN0PC9vcHRpb24+IjsKKyAgICAgIGlmIChlbC5vcHRpb25zICYmIGVs
Lm9wdGlvbnNbMF0pIHsKKyAgICAgICAgaXNCdWdneSA9IGVsLm9wdGlvbnNbMF0ubm9kZU5hbWUu
dG9VcHBlckNhc2UoKSAhPT0gIk9QVElPTiI7CisgICAgICB9CisgICAgICBlbCA9IG51bGw7Cisg
ICAgICByZXR1cm4gaXNCdWdneTsKKyAgICB9KSgpOworCisgICAgdmFyIFRBQkxFX0VMRU1FTlRf
SU5ORVJIVE1MX0JVR0dZID0gKGZ1bmN0aW9uKCl7CisgICAgICB0cnkgeworICAgICAgICB2YXIg
ZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOworICAgICAgICBpZiAoZWwgJiYg
ZWwudEJvZGllcykgeworICAgICAgICAgIGVsLmlubmVySFRNTCA9ICI8dGJvZHk+PHRyPjx0ZD50
ZXN0PC90ZD48L3RyPjwvdGJvZHk+IjsKKyAgICAgICAgICB2YXIgaXNCdWdneSA9IHR5cGVvZiBl
bC50Qm9kaWVzWzBdID09ICJ1bmRlZmluZWQiOworICAgICAgICAgIGVsID0gbnVsbDsKKyAgICAg
ICAgICByZXR1cm4gaXNCdWdneTsKKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9KSgpOworCisgICAgdmFyIExJTktfRUxF
TUVOVF9JTk5FUkhUTUxfQlVHR1kgPSAoZnVuY3Rpb24oKSB7CisgICAgICB0cnkgeworICAgICAg
ICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZWwuaW5u
ZXJIVE1MID0gIjxsaW5rPiI7CisgICAgICAgIHZhciBpc0J1Z2d5ID0gKGVsLmNoaWxkTm9kZXMu
bGVuZ3RoID09PSAwKTsKKyAgICAgICAgZWwgPSBudWxsOworICAgICAgICByZXR1cm4gaXNCdWdn
eTsKKyAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAg
ICB9KSgpOworCisgICAgdmFyIEFOWV9JTk5FUkhUTUxfQlVHR1kgPSBTRUxFQ1RfRUxFTUVOVF9J
Tk5FUkhUTUxfQlVHR1kgfHwKKyAgICAgVEFCTEVfRUxFTUVOVF9JTk5FUkhUTUxfQlVHR1kgfHwg
TElOS19FTEVNRU5UX0lOTkVSSFRNTF9CVUdHWTsKKworICAgIHZhciBTQ1JJUFRfRUxFTUVOVF9S
RUpFQ1RTX1RFWFROT0RFX0FQUEVORElORyA9IChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgcyA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLAorICAgICAgICAgIGlzQnVnZ3kgPSBm
YWxzZTsKKyAgICAgIHRyeSB7CisgICAgICAgIHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIiIpKTsKKyAgICAgICAgaXNCdWdneSA9ICFzLmZpcnN0Q2hpbGQgfHwKKyAgICAg
ICAgICBzLmZpcnN0Q2hpbGQgJiYgcy5maXJzdENoaWxkLm5vZGVUeXBlICE9PSAzOworICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICBpc0J1Z2d5ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIHMg
PSBudWxsOworICAgICAgcmV0dXJuIGlzQnVnZ3k7CisgICAgfSkoKTsKKworCisgICAgZnVuY3Rp
b24gdXBkYXRlKGVsZW1lbnQsIGNvbnRlbnQpIHsKKyAgICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OworICAgICAgdmFyIHB1cmdlRWxlbWVudCA9IEVsZW1lbnQuX3B1cmdlRWxlbWVudDsKKworICAg
ICAgdmFyIGRlc2NlbmRhbnRzID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLAor
ICAgICAgIGkgPSBkZXNjZW5kYW50cy5sZW5ndGg7CisgICAgICB3aGlsZSAoaS0tKSBwdXJnZUVs
ZW1lbnQoZGVzY2VuZGFudHNbaV0pOworCisgICAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRv
RWxlbWVudCkKKyAgICAgICAgY29udGVudCA9IGNvbnRlbnQudG9FbGVtZW50KCk7CisKKyAgICAg
IGlmIChPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKQorICAgICAgICByZXR1cm4gZWxlbWVudC51
cGRhdGUoKS5pbnNlcnQoY29udGVudCk7CisKKyAgICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1M
KGNvbnRlbnQpOworCisgICAgICB2YXIgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVy
Q2FzZSgpOworCisgICAgICBpZiAodGFnTmFtZSA9PT0gJ1NDUklQVCcgJiYgU0NSSVBUX0VMRU1F
TlRfUkVKRUNUU19URVhUTk9ERV9BUFBFTkRJTkcpIHsKKyAgICAgICAgZWxlbWVudC50ZXh0ID0g
Y29udGVudDsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICB9CisKKyAgICAgIGlmIChB
TllfSU5ORVJIVE1MX0JVR0dZKSB7CisgICAgICAgIGlmICh0YWdOYW1lIGluIEVsZW1lbnQuX2lu
c2VydGlvblRyYW5zbGF0aW9ucy50YWdzKSB7CisgICAgICAgICAgd2hpbGUgKGVsZW1lbnQuZmly
c3RDaGlsZCkgeworICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0
Q2hpbGQpOworICAgICAgICAgIH0KKyAgICAgICAgICBFbGVtZW50Ll9nZXRDb250ZW50RnJvbUFu
b255bW91c0VsZW1lbnQodGFnTmFtZSwgY29udGVudC5zdHJpcFNjcmlwdHMoKSkKKyAgICAgICAg
ICAgIC5lYWNoKGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChub2RlKQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoTElOS19FTEVN
RU5UX0lOTkVSSFRNTF9CVUdHWSAmJiBPYmplY3QuaXNTdHJpbmcoY29udGVudCkgJiYgY29udGVu
dC5pbmRleE9mKCc8bGluaycpID4gLTEpIHsKKyAgICAgICAgICB3aGlsZSAoZWxlbWVudC5maXJz
dENoaWxkKSB7CisgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RD
aGlsZCk7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBub2RlcyA9IEVsZW1lbnQuX2dldENv
bnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygp
LCB0cnVlKTsKKyAgICAgICAgICBub2Rlcy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHsgZWxlbWVudC5h
cHBlbmRDaGlsZChub2RlKSB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICBlbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQuc3RyaXBTY3JpcHRzKCk7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGNvbnRl
bnQuc3RyaXBTY3JpcHRzKCk7CisgICAgICB9CisKKyAgICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMu
YmluZChjb250ZW50KS5kZWZlcigpOworICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorCisg
ICAgcmV0dXJuIHVwZGF0ZTsKKyAgfSkoKSwKKworICByZXBsYWNlOiBmdW5jdGlvbihlbGVtZW50
LCBjb250ZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgaWYgKGNvbnRlbnQg
JiYgY29udGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOworICAg
IGVsc2UgaWYgKCFPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKSB7CisgICAgICBjb250ZW50ID0g
T2JqZWN0LnRvSFRNTChjb250ZW50KTsKKyAgICAgIHZhciByYW5nZSA9IGVsZW1lbnQub3duZXJE
b2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShlbGVtZW50KTsK
KyAgICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOworICAgICAg
Y29udGVudCA9IHJhbmdlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb250ZW50LnN0cmlwU2Ny
aXB0cygpKTsKKyAgICB9CisgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjb250
ZW50LCBlbGVtZW50KTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBpbnNlcnQ6IGZ1
bmN0aW9uKGVsZW1lbnQsIGluc2VydGlvbnMpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsK
KworICAgIGlmIChPYmplY3QuaXNTdHJpbmcoaW5zZXJ0aW9ucykgfHwgT2JqZWN0LmlzTnVtYmVy
KGluc2VydGlvbnMpIHx8CisgICAgICAgIE9iamVjdC5pc0VsZW1lbnQoaW5zZXJ0aW9ucykgfHwg
KGluc2VydGlvbnMgJiYgKGluc2VydGlvbnMudG9FbGVtZW50IHx8IGluc2VydGlvbnMudG9IVE1M
KSkpCisgICAgICAgICAgaW5zZXJ0aW9ucyA9IHtib3R0b206aW5zZXJ0aW9uc307CisKKyAgICB2
YXIgY29udGVudCwgaW5zZXJ0LCB0YWdOYW1lLCBjaGlsZE5vZGVzOworCisgICAgZm9yICh2YXIg
cG9zaXRpb24gaW4gaW5zZXJ0aW9ucykgeworICAgICAgY29udGVudCAgPSBpbnNlcnRpb25zW3Bv
c2l0aW9uXTsKKyAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24udG9Mb3dlckNhc2UoKTsKKyAgICAg
IGluc2VydCA9IEVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9uc1twb3NpdGlvbl07CisKKyAg
ICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KSBjb250ZW50ID0gY29udGVudC50
b0VsZW1lbnQoKTsKKyAgICAgIGlmIChPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKSB7CisgICAg
ICAgIGluc2VydChlbGVtZW50LCBjb250ZW50KTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9
CisKKyAgICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRlbnQpOworCisgICAgICB0YWdO
YW1lID0gKChwb3NpdGlvbiA9PSAnYmVmb3JlJyB8fCBwb3NpdGlvbiA9PSAnYWZ0ZXInKQorICAg
ICAgICA/IGVsZW1lbnQucGFyZW50Tm9kZSA6IGVsZW1lbnQpLnRhZ05hbWUudG9VcHBlckNhc2Uo
KTsKKworICAgICAgY2hpbGROb2RlcyA9IEVsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3Vz
RWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygpKTsKKworICAgICAgaWYgKHBv
c2l0aW9uID09ICd0b3AnIHx8IHBvc2l0aW9uID09ICdhZnRlcicpIGNoaWxkTm9kZXMucmV2ZXJz
ZSgpOworICAgICAgY2hpbGROb2Rlcy5lYWNoKGluc2VydC5jdXJyeShlbGVtZW50KSk7CisKKyAg
ICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOworICAgIH0KKwor
ICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIHdyYXA6IGZ1bmN0aW9uKGVsZW1lbnQsIHdy
YXBwZXIsIGF0dHJpYnV0ZXMpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBpZiAo
T2JqZWN0LmlzRWxlbWVudCh3cmFwcGVyKSkKKyAgICAgICQod3JhcHBlcikud3JpdGVBdHRyaWJ1
dGUoYXR0cmlidXRlcyB8fCB7IH0pOworICAgIGVsc2UgaWYgKE9iamVjdC5pc1N0cmluZyh3cmFw
cGVyKSkgd3JhcHBlciA9IG5ldyBFbGVtZW50KHdyYXBwZXIsIGF0dHJpYnV0ZXMpOworICAgIGVs
c2Ugd3JhcHBlciA9IG5ldyBFbGVtZW50KCdkaXYnLCB3cmFwcGVyKTsKKyAgICBpZiAoZWxlbWVu
dC5wYXJlbnROb2RlKQorICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFw
cGVyLCBlbGVtZW50KTsKKyAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnQpOworICAgIHJl
dHVybiB3cmFwcGVyOworICB9LAorCisgIGluc3BlY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAg
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgcmVzdWx0ID0gJzwnICsgZWxlbWVudC50
YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgJEgoeydpZCc6ICdpZCcsICdjbGFzc05hbWUnOiAn
Y2xhc3MnfSkuZWFjaChmdW5jdGlvbihwYWlyKSB7CisgICAgICB2YXIgcHJvcGVydHkgPSBwYWly
LmZpcnN0KCksCisgICAgICAgICAgYXR0cmlidXRlID0gcGFpci5sYXN0KCksCisgICAgICAgICAg
dmFsdWUgPSAoZWxlbWVudFtwcm9wZXJ0eV0gfHwgJycpLnRvU3RyaW5nKCk7CisgICAgICBpZiAo
dmFsdWUpIHJlc3VsdCArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPScgKyB2YWx1ZS5pbnNwZWN0KHRy
dWUpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQgKyAnPic7CisgIH0sCisKKyAgcmVjdXJz
aXZlbHlDb2xsZWN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgbWF4aW11bUxlbmd0aCkg
eworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIG1heGltdW1MZW5ndGggPSBtYXhpbXVt
TGVuZ3RoIHx8IC0xOworICAgIHZhciBlbGVtZW50cyA9IFtdOworCisgICAgd2hpbGUgKGVsZW1l
bnQgPSBlbGVtZW50W3Byb3BlcnR5XSkgeworICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT0g
MSkKKyAgICAgICAgZWxlbWVudHMucHVzaChFbGVtZW50LmV4dGVuZChlbGVtZW50KSk7CisgICAg
ICBpZiAoZWxlbWVudHMubGVuZ3RoID09IG1heGltdW1MZW5ndGgpCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBlbGVtZW50czsKKyAgfSwKKworICBhbmNlc3RvcnM6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gRWxlbWVudC5yZWN1cnNpdmVseUNvbGxlY3QoZWxl
bWVudCwgJ3BhcmVudE5vZGUnKTsKKyAgfSwKKworICBkZXNjZW5kYW50czogZnVuY3Rpb24oZWxl
bWVudCkgeworICAgIHJldHVybiBFbGVtZW50LnNlbGVjdChlbGVtZW50LCAiKiIpOworICB9LAor
CisgIGZpcnN0RGVzY2VuZGFudDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAk
KGVsZW1lbnQpLmZpcnN0Q2hpbGQ7CisgICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2Rl
VHlwZSAhPSAxKSBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZzsKKyAgICByZXR1cm4gJChl
bGVtZW50KTsKKyAgfSwKKworICBpbW1lZGlhdGVEZXNjZW5kYW50czogZnVuY3Rpb24oZWxlbWVu
dCkgeworICAgIHZhciByZXN1bHRzID0gW10sIGNoaWxkID0gJChlbGVtZW50KS5maXJzdENoaWxk
OworICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7
CisgICAgICAgIHJlc3VsdHMucHVzaChFbGVtZW50LmV4dGVuZChjaGlsZCkpOworICAgICAgfQor
ICAgICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dHM7CisgIH0sCisKKyAgcHJldmlvdXNTaWJsaW5nczogZnVuY3Rpb24oZWxlbWVudCwgbWF4aW11
bUxlbmd0aCkgeworICAgIHJldHVybiBFbGVtZW50LnJlY3Vyc2l2ZWx5Q29sbGVjdChlbGVtZW50
LCAncHJldmlvdXNTaWJsaW5nJyk7CisgIH0sCisKKyAgbmV4dFNpYmxpbmdzOiBmdW5jdGlvbihl
bGVtZW50KSB7CisgICAgcmV0dXJuIEVsZW1lbnQucmVjdXJzaXZlbHlDb2xsZWN0KGVsZW1lbnQs
ICduZXh0U2libGluZycpOworICB9LAorCisgIHNpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50KSB7
CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgcmV0dXJuIEVsZW1lbnQucHJldmlvdXNT
aWJsaW5ncyhlbGVtZW50KS5yZXZlcnNlKCkKKyAgICAgIC5jb25jYXQoRWxlbWVudC5uZXh0U2li
bGluZ3MoZWxlbWVudCkpOworICB9LAorCisgIG1hdGNoOiBmdW5jdGlvbihlbGVtZW50LCBzZWxl
Y3RvcikgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlmIChPYmplY3QuaXNTdHJp
bmcoc2VsZWN0b3IpKQorICAgICAgcmV0dXJuIFByb3RvdHlwZS5TZWxlY3Rvci5tYXRjaChlbGVt
ZW50LCBzZWxlY3Rvcik7CisgICAgcmV0dXJuIHNlbGVjdG9yLm1hdGNoKGVsZW1lbnQpOworICB9
LAorCisgIHVwOiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkgeworICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHJldHVy
biAkKGVsZW1lbnQucGFyZW50Tm9kZSk7CisgICAgdmFyIGFuY2VzdG9ycyA9IEVsZW1lbnQuYW5j
ZXN0b3JzKGVsZW1lbnQpOworICAgIHJldHVybiBPYmplY3QuaXNOdW1iZXIoZXhwcmVzc2lvbikg
PyBhbmNlc3RvcnNbZXhwcmVzc2lvbl0gOgorICAgICAgUHJvdG90eXBlLlNlbGVjdG9yLmZpbmQo
YW5jZXN0b3JzLCBleHByZXNzaW9uLCBpbmRleCk7CisgIH0sCisKKyAgZG93bjogZnVuY3Rpb24o
ZWxlbWVudCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsK
KyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gRWxlbWVudC5maXJzdERlc2Nl
bmRhbnQoZWxlbWVudCk7CisgICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/
IEVsZW1lbnQuZGVzY2VuZGFudHMoZWxlbWVudClbZXhwcmVzc2lvbl0gOgorICAgICAgRWxlbWVu
dC5zZWxlY3QoZWxlbWVudCwgZXhwcmVzc2lvbilbaW5kZXggfHwgMF07CisgIH0sCisKKyAgcHJl
dmlvdXM6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7CisgICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7CisgICAgaWYgKE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSkgaW5k
ZXggPSBleHByZXNzaW9uLCBleHByZXNzaW9uID0gZmFsc2U7CisgICAgaWYgKCFPYmplY3QuaXNO
dW1iZXIoaW5kZXgpKSBpbmRleCA9IDA7CisKKyAgICBpZiAoZXhwcmVzc2lvbikgeworICAgICAg
cmV0dXJuIFByb3RvdHlwZS5TZWxlY3Rvci5maW5kKGVsZW1lbnQucHJldmlvdXNTaWJsaW5ncygp
LCBleHByZXNzaW9uLCBpbmRleCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBlbGVtZW50
LnJlY3Vyc2l2ZWx5Q29sbGVjdCgicHJldmlvdXNTaWJsaW5nIiwgaW5kZXggKyAxKVtpbmRleF07
CisgICAgfQorICB9LAorCisgIG5leHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGlu
ZGV4KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgaWYgKE9iamVjdC5pc051bWJl
cihleHByZXNzaW9uKSkgaW5kZXggPSBleHByZXNzaW9uLCBleHByZXNzaW9uID0gZmFsc2U7Cisg
ICAgaWYgKCFPYmplY3QuaXNOdW1iZXIoaW5kZXgpKSBpbmRleCA9IDA7CisKKyAgICBpZiAoZXhw
cmVzc2lvbikgeworICAgICAgcmV0dXJuIFByb3RvdHlwZS5TZWxlY3Rvci5maW5kKGVsZW1lbnQu
bmV4dFNpYmxpbmdzKCksIGV4cHJlc3Npb24sIGluZGV4KTsKKyAgICB9IGVsc2UgeworICAgICAg
dmFyIG1heGltdW1MZW5ndGggPSBPYmplY3QuaXNOdW1iZXIoaW5kZXgpID8gaW5kZXggKyAxIDog
MTsKKyAgICAgIHJldHVybiBlbGVtZW50LnJlY3Vyc2l2ZWx5Q29sbGVjdCgibmV4dFNpYmxpbmci
LCBpbmRleCArIDEpW2luZGV4XTsKKyAgICB9CisgIH0sCisKKworICBzZWxlY3Q6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgZXhwcmVzc2lv
bnMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLmpvaW4oJywgJyk7
CisgICAgcmV0dXJuIFByb3RvdHlwZS5TZWxlY3Rvci5zZWxlY3QoZXhwcmVzc2lvbnMsIGVsZW1l
bnQpOworICB9LAorCisgIGFkamFjZW50OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7CisgICAgdmFyIGV4cHJlc3Npb25zID0gQXJyYXkucHJvdG90eXBlLnNs
aWNlLmNhbGwoYXJndW1lbnRzLCAxKS5qb2luKCcsICcpOworICAgIHJldHVybiBQcm90b3R5cGUu
U2VsZWN0b3Iuc2VsZWN0KGV4cHJlc3Npb25zLCBlbGVtZW50LnBhcmVudE5vZGUpLndpdGhvdXQo
ZWxlbWVudCk7CisgIH0sCisKKyAgaWRlbnRpZnk6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBl
bGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgaWQgPSBFbGVtZW50LnJlYWRBdHRyaWJ1dGUo
ZWxlbWVudCwgJ2lkJyk7CisgICAgaWYgKGlkKSByZXR1cm4gaWQ7CisgICAgZG8geyBpZCA9ICdh
bm9ueW1vdXNfZWxlbWVudF8nICsgRWxlbWVudC5pZENvdW50ZXIrKyB9IHdoaWxlICgkKGlkKSk7
CisgICAgRWxlbWVudC53cml0ZUF0dHJpYnV0ZShlbGVtZW50LCAnaWQnLCBpZCk7CisgICAgcmV0
dXJuIGlkOworICB9LAorCisgIHJlYWRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUp
IHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIu
SUUpIHsKKyAgICAgIHZhciB0ID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnJlYWQ7
CisgICAgICBpZiAodC52YWx1ZXNbbmFtZV0pIHJldHVybiB0LnZhbHVlc1tuYW1lXShlbGVtZW50
LCBuYW1lKTsKKyAgICAgIGlmICh0Lm5hbWVzW25hbWVdKSBuYW1lID0gdC5uYW1lc1tuYW1lXTsK
KyAgICAgIGlmIChuYW1lLmluY2x1ZGUoJzonKSkgeworICAgICAgICByZXR1cm4gKCFlbGVtZW50
LmF0dHJpYnV0ZXMgfHwgIWVsZW1lbnQuYXR0cmlidXRlc1tuYW1lXSkgPyBudWxsIDoKKyAgICAg
ICAgIGVsZW1lbnQuYXR0cmlidXRlc1tuYW1lXS52YWx1ZTsKKyAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOworICB9LAorCisgIHdyaXRlQXR0cmli
dXRlOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkgeworICAgIGVsZW1lbnQgPSAkKGVs
ZW1lbnQpOworICAgIHZhciBhdHRyaWJ1dGVzID0geyB9LCB0ID0gRWxlbWVudC5fYXR0cmlidXRl
VHJhbnNsYXRpb25zLndyaXRlOworCisgICAgaWYgKHR5cGVvZiBuYW1lID09ICdvYmplY3QnKSBh
dHRyaWJ1dGVzID0gbmFtZTsKKyAgICBlbHNlIGF0dHJpYnV0ZXNbbmFtZV0gPSBPYmplY3QuaXNV
bmRlZmluZWQodmFsdWUpID8gdHJ1ZSA6IHZhbHVlOworCisgICAgZm9yICh2YXIgYXR0ciBpbiBh
dHRyaWJ1dGVzKSB7CisgICAgICBuYW1lID0gdC5uYW1lc1thdHRyXSB8fCBhdHRyOworICAgICAg
dmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJdOworICAgICAgaWYgKHQudmFsdWVzW2F0dHJdKSBuYW1l
ID0gdC52YWx1ZXNbYXR0cl0oZWxlbWVudCwgdmFsdWUpOworICAgICAgaWYgKHZhbHVlID09PSBm
YWxzZSB8fCB2YWx1ZSA9PT0gbnVsbCkKKyAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUo
bmFtZSk7CisgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkKKyAgICAgICAgZWxlbWVudC5z
ZXRBdHRyaWJ1dGUobmFtZSwgbmFtZSk7CisgICAgICBlbHNlIGVsZW1lbnQuc2V0QXR0cmlidXRl
KG5hbWUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0sCisKKyAgZ2V0
SGVpZ2h0OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuIEVsZW1lbnQuZ2V0RGltZW5z
aW9ucyhlbGVtZW50KS5oZWlnaHQ7CisgIH0sCisKKyAgZ2V0V2lkdGg6IGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKyAgICByZXR1cm4gRWxlbWVudC5nZXREaW1lbnNpb25zKGVsZW1lbnQpLndpZHRoOwor
ICB9LAorCisgIGNsYXNzTmFtZXM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gbmV3
IEVsZW1lbnQuQ2xhc3NOYW1lcyhlbGVtZW50KTsKKyAgfSwKKworICBoYXNDbGFzc05hbWU6IGZ1
bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1l
bnQpKSkgcmV0dXJuOworICAgIHZhciBlbGVtZW50Q2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05h
bWU7CisgICAgcmV0dXJuIChlbGVtZW50Q2xhc3NOYW1lLmxlbmd0aCA+IDAgJiYgKGVsZW1lbnRD
bGFzc05hbWUgPT0gY2xhc3NOYW1lIHx8CisgICAgICBuZXcgUmVnRXhwKCIoXnxcXHMpIiArIGNs
YXNzTmFtZSArICIoXFxzfCQpIikudGVzdChlbGVtZW50Q2xhc3NOYW1lKSkpOworICB9LAorCisg
IGFkZENsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7CisgICAgaWYgKCEo
ZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CisgICAgaWYgKCFFbGVtZW50Lmhhc0NsYXNz
TmFtZShlbGVtZW50LCBjbGFzc05hbWUpKQorICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gKGVs
ZW1lbnQuY2xhc3NOYW1lID8gJyAnIDogJycpICsgY2xhc3NOYW1lOworICAgIHJldHVybiBlbGVt
ZW50OworICB9LAorCisgIHJlbW92ZUNsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NO
YW1lKSB7CisgICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CisgICAgZWxl
bWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKAorICAgICAgbmV3IFJl
Z0V4cCgiKF58XFxzKykiICsgY2xhc3NOYW1lICsgIihcXHMrfCQpIiksICcgJykuc3RyaXAoKTsK
KyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICB0b2dnbGVDbGFzc05hbWU6IGZ1bmN0aW9u
KGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkg
cmV0dXJuOworICAgIHJldHVybiBFbGVtZW50W0VsZW1lbnQuaGFzQ2xhc3NOYW1lKGVsZW1lbnQs
IGNsYXNzTmFtZSkgPworICAgICAgJ3JlbW92ZUNsYXNzTmFtZScgOiAnYWRkQ2xhc3NOYW1lJ10o
ZWxlbWVudCwgY2xhc3NOYW1lKTsKKyAgfSwKKworICBjbGVhbldoaXRlc3BhY2U6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgbm9kZSA9IGVs
ZW1lbnQuZmlyc3RDaGlsZDsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgdmFyIG5leHROb2Rl
ID0gbm9kZS5uZXh0U2libGluZzsKKyAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMgJiYgIS9c
Uy8udGVzdChub2RlLm5vZGVWYWx1ZSkpCisgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQobm9k
ZSk7CisgICAgICBub2RlID0gbmV4dE5vZGU7CisgICAgfQorICAgIHJldHVybiBlbGVtZW50Owor
ICB9LAorCisgIGVtcHR5OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICQoZWxlbWVu
dCkuaW5uZXJIVE1MLmJsYW5rKCk7CisgIH0sCisKKyAgZGVzY2VuZGFudE9mOiBmdW5jdGlvbihl
bGVtZW50LCBhbmNlc3RvcikgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpLCBhbmNlc3RvciA9
ICQoYW5jZXN0b3IpOworCisgICAgaWYgKGVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24p
CisgICAgICByZXR1cm4gKGVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYW5jZXN0b3Ip
ICYgOCkgPT09IDg7CisKKyAgICBpZiAoYW5jZXN0b3IuY29udGFpbnMpCisgICAgICByZXR1cm4g
YW5jZXN0b3IuY29udGFpbnMoZWxlbWVudCkgJiYgYW5jZXN0b3IgIT09IGVsZW1lbnQ7CisKKyAg
ICB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkKKyAgICAgIGlmIChlbGVtZW50
ID09IGFuY2VzdG9yKSByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKKyAgfSwKKwor
ICBzY3JvbGxUbzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OworICAgIHZhciBwb3MgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7CisgICAg
d2luZG93LnNjcm9sbFRvKHBvc1swXSwgcG9zWzFdKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAg
fSwKKworICBnZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKKyAgICBlbGVtZW50
ID0gJChlbGVtZW50KTsKKyAgICBzdHlsZSA9IHN0eWxlID09ICdmbG9hdCcgPyAnY3NzRmxvYXQn
IDogc3R5bGUuY2FtZWxpemUoKTsKKyAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxl
XTsKKyAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09ICdhdXRvJykgeworICAgICAgdmFyIGNzcyA9
IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7Cisg
ICAgICB2YWx1ZSA9IGNzcyA/IGNzc1tzdHlsZV0gOiBudWxsOworICAgIH0KKyAgICBpZiAoc3R5
bGUgPT0gJ29wYWNpdHknKSByZXR1cm4gdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IDEuMDsK
KyAgICByZXR1cm4gdmFsdWUgPT0gJ2F1dG8nID8gbnVsbCA6IHZhbHVlOworICB9LAorCisgIGdl
dE9wYWNpdHk6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gJChlbGVtZW50KS5nZXRT
dHlsZSgnb3BhY2l0eScpOworICB9LAorCisgIHNldFN0eWxlOiBmdW5jdGlvbihlbGVtZW50LCBz
dHlsZXMpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgZWxlbWVudFN0eWxl
ID0gZWxlbWVudC5zdHlsZSwgbWF0Y2g7CisgICAgaWYgKE9iamVjdC5pc1N0cmluZyhzdHlsZXMp
KSB7CisgICAgICBlbGVtZW50LnN0eWxlLmNzc1RleHQgKz0gJzsnICsgc3R5bGVzOworICAgICAg
cmV0dXJuIHN0eWxlcy5pbmNsdWRlKCdvcGFjaXR5JykgPworICAgICAgICBlbGVtZW50LnNldE9w
YWNpdHkoc3R5bGVzLm1hdGNoKC9vcGFjaXR5OlxzKihcZD9cLj9cZCopLylbMV0pIDogZWxlbWVu
dDsKKyAgICB9CisgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3R5bGVzKQorICAgICAgaWYgKHBy
b3BlcnR5ID09ICdvcGFjaXR5JykgZWxlbWVudC5zZXRPcGFjaXR5KHN0eWxlc1twcm9wZXJ0eV0p
OworICAgICAgZWxzZQorICAgICAgICBlbGVtZW50U3R5bGVbKHByb3BlcnR5ID09ICdmbG9hdCcg
fHwgcHJvcGVydHkgPT0gJ2Nzc0Zsb2F0JykgPworICAgICAgICAgIChPYmplY3QuaXNVbmRlZmlu
ZWQoZWxlbWVudFN0eWxlLnN0eWxlRmxvYXQpID8gJ2Nzc0Zsb2F0JyA6ICdzdHlsZUZsb2F0Jykg
OgorICAgICAgICAgICAgcHJvcGVydHldID0gc3R5bGVzW3Byb3BlcnR5XTsKKworICAgIHJldHVy
biBlbGVtZW50OworICB9LAorCisgIHNldE9wYWNpdHk6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVl
KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgZWxlbWVudC5zdHlsZS5vcGFjaXR5
ID0gKHZhbHVlID09IDEgfHwgdmFsdWUgPT09ICcnKSA/ICcnIDoKKyAgICAgICh2YWx1ZSA8IDAu
MDAwMDEpID8gMCA6IHZhbHVlOworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIG1ha2VQ
b3NpdGlvbmVkOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7
CisgICAgdmFyIHBvcyA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7Cisg
ICAgaWYgKHBvcyA9PSAnc3RhdGljJyB8fCAhcG9zKSB7CisgICAgICBlbGVtZW50Ll9tYWRlUG9z
aXRpb25lZCA9IHRydWU7CisgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZl
JzsKKyAgICAgIGlmIChQcm90b3R5cGUuQnJvd3Nlci5PcGVyYSkgeworICAgICAgICBlbGVtZW50
LnN0eWxlLnRvcCA9IDA7CisgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IDA7CisgICAgICB9
CisgICAgfQorICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIHVuZG9Qb3NpdGlvbmVkOiBm
dW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgaWYgKGVs
ZW1lbnQuX21hZGVQb3NpdGlvbmVkKSB7CisgICAgICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9
IHVuZGVmaW5lZDsKKyAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPQorICAgICAgICBlbGVt
ZW50LnN0eWxlLnRvcCA9CisgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9CisgICAgICAgIGVs
ZW1lbnQuc3R5bGUuYm90dG9tID0KKyAgICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9ICcnOwor
ICAgIH0KKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBtYWtlQ2xpcHBpbmc6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBpZiAoZWxlbWVu
dC5fb3ZlcmZsb3cpIHJldHVybiBlbGVtZW50OworICAgIGVsZW1lbnQuX292ZXJmbG93ID0gRWxl
bWVudC5nZXRTdHlsZShlbGVtZW50LCAnb3ZlcmZsb3cnKSB8fCAnYXV0byc7CisgICAgaWYgKGVs
ZW1lbnQuX292ZXJmbG93ICE9PSAnaGlkZGVuJykKKyAgICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZs
b3cgPSAnaGlkZGVuJzsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICB1bmRvQ2xpcHBp
bmc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBp
ZiAoIWVsZW1lbnQuX292ZXJmbG93KSByZXR1cm4gZWxlbWVudDsKKyAgICBlbGVtZW50LnN0eWxl
Lm92ZXJmbG93ID0gZWxlbWVudC5fb3ZlcmZsb3cgPT0gJ2F1dG8nID8gJycgOiBlbGVtZW50Ll9v
dmVyZmxvdzsKKyAgICBlbGVtZW50Ll9vdmVyZmxvdyA9IG51bGw7CisgICAgcmV0dXJuIGVsZW1l
bnQ7CisgIH0sCisKKyAgY2xvbmVQb3NpdGlvbjogZnVuY3Rpb24oZWxlbWVudCwgc291cmNlKSB7
CisgICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKKyAgICAgIHNldExlZnQ6ICAgIHRy
dWUsCisgICAgICBzZXRUb3A6ICAgICB0cnVlLAorICAgICAgc2V0V2lkdGg6ICAgdHJ1ZSwKKyAg
ICAgIHNldEhlaWdodDogIHRydWUsCisgICAgICBvZmZzZXRUb3A6ICAwLAorICAgICAgb2Zmc2V0
TGVmdDogMAorICAgIH0sIGFyZ3VtZW50c1syXSB8fCB7IH0pOworCisgICAgc291cmNlID0gJChz
b3VyY2UpOworICAgIHZhciBwID0gRWxlbWVudC52aWV3cG9ydE9mZnNldChzb3VyY2UpLCBkZWx0
YSA9IFswLCAwXSwgcGFyZW50ID0gbnVsbDsKKworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwor
CisgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2Fic29s
dXRlJykgeworICAgICAgcGFyZW50ID0gRWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudCk7
CisgICAgICBkZWx0YSA9IEVsZW1lbnQudmlld3BvcnRPZmZzZXQocGFyZW50KTsKKyAgICB9CisK
KyAgICBpZiAocGFyZW50ID09IGRvY3VtZW50LmJvZHkpIHsKKyAgICAgIGRlbHRhWzBdIC09IGRv
Y3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKyAgICAgIGRlbHRhWzFdIC09IGRvY3VtZW50LmJvZHku
b2Zmc2V0VG9wOworICAgIH0KKworICAgIGlmIChvcHRpb25zLnNldExlZnQpICAgZWxlbWVudC5z
dHlsZS5sZWZ0ICA9IChwWzBdIC0gZGVsdGFbMF0gKyBvcHRpb25zLm9mZnNldExlZnQpICsgJ3B4
JzsKKyAgICBpZiAob3B0aW9ucy5zZXRUb3ApICAgIGVsZW1lbnQuc3R5bGUudG9wICAgPSAocFsx
XSAtIGRlbHRhWzFdICsgb3B0aW9ucy5vZmZzZXRUb3ApICsgJ3B4JzsKKyAgICBpZiAob3B0aW9u
cy5zZXRXaWR0aCkgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBzb3VyY2Uub2Zmc2V0V2lkdGggKyAn
cHgnOworICAgIGlmIChvcHRpb25zLnNldEhlaWdodCkgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBz
b3VyY2Uub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfQorfTsK
KworT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMsIHsKKyAgZ2V0RWxlbWVudHNCeVNlbGVj
dG9yOiBFbGVtZW50Lk1ldGhvZHMuc2VsZWN0LAorCisgIGNoaWxkRWxlbWVudHM6IEVsZW1lbnQu
TWV0aG9kcy5pbW1lZGlhdGVEZXNjZW5kYW50cworfSk7CisKK0VsZW1lbnQuX2F0dHJpYnV0ZVRy
YW5zbGF0aW9ucyA9IHsKKyAgd3JpdGU6IHsKKyAgICBuYW1lczogeworICAgICAgY2xhc3NOYW1l
OiAnY2xhc3MnLAorICAgICAgaHRtbEZvcjogICAnZm9yJworICAgIH0sCisgICAgdmFsdWVzOiB7
IH0KKyAgfQorfTsKKworaWYgKFByb3RvdHlwZS5Ccm93c2VyLk9wZXJhKSB7CisgIEVsZW1lbnQu
TWV0aG9kcy5nZXRTdHlsZSA9IEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZS53cmFwKAorICAgIGZ1
bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQsIHN0eWxlKSB7CisgICAgICBzd2l0Y2ggKHN0eWxlKSB7
CisgICAgICAgIGNhc2UgJ2hlaWdodCc6IGNhc2UgJ3dpZHRoJzoKKyAgICAgICAgICBpZiAoIUVs
ZW1lbnQudmlzaWJsZShlbGVtZW50KSkgcmV0dXJuIG51bGw7CisKKyAgICAgICAgICB2YXIgZGlt
ID0gcGFyc2VJbnQocHJvY2VlZChlbGVtZW50LCBzdHlsZSksIDEwKTsKKworICAgICAgICAgIGlm
IChkaW0gIT09IGVsZW1lbnRbJ29mZnNldCcgKyBzdHlsZS5jYXBpdGFsaXplKCldKQorICAgICAg
ICAgICAgcmV0dXJuIGRpbSArICdweCc7CisKKyAgICAgICAgICB2YXIgcHJvcGVydGllczsKKyAg
ICAgICAgICBpZiAoc3R5bGUgPT09ICdoZWlnaHQnKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVz
ID0gWydib3JkZXItdG9wLXdpZHRoJywgJ3BhZGRpbmctdG9wJywKKyAgICAgICAgICAgICAncGFk
ZGluZy1ib3R0b20nLCAnYm9yZGVyLWJvdHRvbS13aWR0aCddOworICAgICAgICAgIH0KKyAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbJ2JvcmRlci1sZWZ0LXdpZHRo
JywgJ3BhZGRpbmctbGVmdCcsCisgICAgICAgICAgICAgJ3BhZGRpbmctcmlnaHQnLCAnYm9yZGVy
LXJpZ2h0LXdpZHRoJ107CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVz
LmluamVjdChkaW0sIGZ1bmN0aW9uKG1lbW8sIHByb3BlcnR5KSB7CisgICAgICAgICAgICB2YXIg
dmFsID0gcHJvY2VlZChlbGVtZW50LCBwcm9wZXJ0eSk7CisgICAgICAgICAgICByZXR1cm4gdmFs
ID09PSBudWxsID8gbWVtbyA6IG1lbW8gLSBwYXJzZUludCh2YWwsIDEwKTsKKyAgICAgICAgICB9
KSArICdweCc7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiBwcm9jZWVkKGVsZW1lbnQsIHN0eWxl
KTsKKyAgICAgIH0KKyAgICB9CisgICk7CisKKyAgRWxlbWVudC5NZXRob2RzLnJlYWRBdHRyaWJ1
dGUgPSBFbGVtZW50Lk1ldGhvZHMucmVhZEF0dHJpYnV0ZS53cmFwKAorICAgIGZ1bmN0aW9uKHBy
b2NlZWQsIGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ3Rp
dGxlJykgcmV0dXJuIGVsZW1lbnQudGl0bGU7CisgICAgICByZXR1cm4gcHJvY2VlZChlbGVtZW50
LCBhdHRyaWJ1dGUpOworICAgIH0KKyAgKTsKK30KKworZWxzZSBpZiAoUHJvdG90eXBlLkJyb3dz
ZXIuSUUpIHsKKyAgRWxlbWVudC5NZXRob2RzLmdldFN0eWxlID0gZnVuY3Rpb24oZWxlbWVudCwg
c3R5bGUpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBzdHlsZSA9IChzdHlsZSA9
PSAnZmxvYXQnIHx8IHN0eWxlID09ICdjc3NGbG9hdCcpID8gJ3N0eWxlRmxvYXQnIDogc3R5bGUu
Y2FtZWxpemUoKTsKKyAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxlXTsKKyAgICBp
ZiAoIXZhbHVlICYmIGVsZW1lbnQuY3VycmVudFN0eWxlKSB2YWx1ZSA9IGVsZW1lbnQuY3VycmVu
dFN0eWxlW3N0eWxlXTsKKworICAgIGlmIChzdHlsZSA9PSAnb3BhY2l0eScpIHsKKyAgICAgIGlm
ICh2YWx1ZSA9IChlbGVtZW50LmdldFN0eWxlKCdmaWx0ZXInKSB8fCAnJykubWF0Y2goL2FscGhh
XChvcGFjaXR5PSguKilcKS8pKQorICAgICAgICBpZiAodmFsdWVbMV0pIHJldHVybiBwYXJzZUZs
b2F0KHZhbHVlWzFdKSAvIDEwMDsKKyAgICAgIHJldHVybiAxLjA7CisgICAgfQorCisgICAgaWYg
KHZhbHVlID09ICdhdXRvJykgeworICAgICAgaWYgKChzdHlsZSA9PSAnd2lkdGgnIHx8IHN0eWxl
ID09ICdoZWlnaHQnKSAmJiAoZWxlbWVudC5nZXRTdHlsZSgnZGlzcGxheScpICE9ICdub25lJykp
CisgICAgICAgIHJldHVybiBlbGVtZW50WydvZmZzZXQnICsgc3R5bGUuY2FwaXRhbGl6ZSgpXSAr
ICdweCc7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworICB9
OworCisgIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFjaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFs
dWUpIHsKKyAgICBmdW5jdGlvbiBzdHJpcEFscGhhKGZpbHRlcil7CisgICAgICByZXR1cm4gZmls
dGVyLnJlcGxhY2UoL2FscGhhXChbXlwpXSpcKS9naSwnJyk7CisgICAgfQorICAgIGVsZW1lbnQg
PSAkKGVsZW1lbnQpOworICAgIHZhciBjdXJyZW50U3R5bGUgPSBlbGVtZW50LmN1cnJlbnRTdHls
ZTsKKyAgICBpZiAoKGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxlLmhhc0xheW91dCkgfHwK
KyAgICAgICghY3VycmVudFN0eWxlICYmIGVsZW1lbnQuc3R5bGUuem9vbSA9PSAnbm9ybWFsJykp
CisgICAgICAgIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7CisKKyAgICB2YXIgZmlsdGVyID0gZWxl
bWVudC5nZXRTdHlsZSgnZmlsdGVyJyksIHN0eWxlID0gZWxlbWVudC5zdHlsZTsKKyAgICBpZiAo
dmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0gJycpIHsKKyAgICAgIChmaWx0ZXIgPSBzdHJpcEFscGhh
KGZpbHRlcikpID8KKyAgICAgICAgc3R5bGUuZmlsdGVyID0gZmlsdGVyIDogc3R5bGUucmVtb3Zl
QXR0cmlidXRlKCdmaWx0ZXInKTsKKyAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0gZWxzZSBp
ZiAodmFsdWUgPCAwLjAwMDAxKSB2YWx1ZSA9IDA7CisgICAgc3R5bGUuZmlsdGVyID0gc3RyaXBB
bHBoYShmaWx0ZXIpICsKKyAgICAgICdhbHBoYShvcGFjaXR5PScgKyAodmFsdWUgKiAxMDApICsg
JyknOworICAgIHJldHVybiBlbGVtZW50OworICB9OworCisgIEVsZW1lbnQuX2F0dHJpYnV0ZVRy
YW5zbGF0aW9ucyA9IChmdW5jdGlvbigpeworCisgICAgdmFyIGNsYXNzUHJvcCA9ICdjbGFzc05h
bWUnLAorICAgICAgICBmb3JQcm9wID0gJ2ZvcicsCisgICAgICAgIGVsID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICBlbC5zZXRBdHRyaWJ1dGUoY2xhc3NQcm9wLCAneCcp
OworCisgICAgaWYgKGVsLmNsYXNzTmFtZSAhPT0gJ3gnKSB7CisgICAgICBlbC5zZXRBdHRyaWJ1
dGUoJ2NsYXNzJywgJ3gnKTsKKyAgICAgIGlmIChlbC5jbGFzc05hbWUgPT09ICd4JykgeworICAg
ICAgICBjbGFzc1Byb3AgPSAnY2xhc3MnOworICAgICAgfQorICAgIH0KKyAgICBlbCA9IG51bGw7
CisKKyAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CisgICAgZWwuc2V0
QXR0cmlidXRlKGZvclByb3AsICd4Jyk7CisgICAgaWYgKGVsLmh0bWxGb3IgIT09ICd4Jykgewor
ICAgICAgZWwuc2V0QXR0cmlidXRlKCdodG1sRm9yJywgJ3gnKTsKKyAgICAgIGlmIChlbC5odG1s
Rm9yID09PSAneCcpIHsKKyAgICAgICAgZm9yUHJvcCA9ICdodG1sRm9yJzsKKyAgICAgIH0KKyAg
ICB9CisgICAgZWwgPSBudWxsOworCisgICAgcmV0dXJuIHsKKyAgICAgIHJlYWQ6IHsKKyAgICAg
ICAgbmFtZXM6IHsKKyAgICAgICAgICAnY2xhc3MnOiAgICAgIGNsYXNzUHJvcCwKKyAgICAgICAg
ICAnY2xhc3NOYW1lJzogIGNsYXNzUHJvcCwKKyAgICAgICAgICAnZm9yJzogICAgICAgIGZvclBy
b3AsCisgICAgICAgICAgJ2h0bWxGb3InOiAgICBmb3JQcm9wCisgICAgICAgIH0sCisgICAgICAg
IHZhbHVlczogeworICAgICAgICAgIF9nZXRBdHRyOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1
dGUpIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUp
OworICAgICAgICAgIH0sCisgICAgICAgICAgX2dldEF0dHIyOiBmdW5jdGlvbihlbGVtZW50LCBh
dHRyaWJ1dGUpIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRy
aWJ1dGUsIDIpOworICAgICAgICAgIH0sCisgICAgICAgICAgX2dldEF0dHJOb2RlOiBmdW5jdGlv
bihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gZWxlbWVudC5n
ZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZSA/IG5v
ZGUudmFsdWUgOiAiIjsKKyAgICAgICAgICB9LAorICAgICAgICAgIF9nZXRFdjogKGZ1bmN0aW9u
KCl7CisKKyAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LCBmOworICAgICAgICAgICAgZWwub25jbGljayA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwor
ICAgICAgICAgICAgdmFyIHZhbHVlID0gZWwuZ2V0QXR0cmlidXRlKCdvbmNsaWNrJyk7CisKKyAg
ICAgICAgICAgIGlmIChTdHJpbmcodmFsdWUpLmluZGV4T2YoJ3snKSA+IC0xKSB7CisgICAgICAg
ICAgICAgIGYgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKKyAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgICAgICAg
ICAgICAgIGlmICghYXR0cmlidXRlKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgPSBhdHRyaWJ1dGUudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
PSBhdHRyaWJ1dGUuc3BsaXQoJ3snKVsxXTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSBh
dHRyaWJ1dGUuc3BsaXQoJ30nKVswXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
LnN0cmlwKCk7CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmICh2YWx1ZSA9PT0gJycpIHsKKyAgICAgICAgICAgICAgZiA9IGZ1bmN0aW9uKGVsZW1l
bnQsIGF0dHJpYnV0ZSkgeworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0
QXR0cmlidXRlKGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUpIHJl
dHVybiBudWxsOworICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUuc3RyaXAoKTsKKyAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsID0gbnVsbDsKKyAg
ICAgICAgICAgIHJldHVybiBmOworICAgICAgICAgIH0pKCksCisgICAgICAgICAgX2ZsYWc6IGZ1
bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworICAgICAgICAgICAgcmV0dXJuICQoZWxlbWVu
dCkuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGUgOiBudWxsOworICAgICAgICAg
IH0sCisgICAgICAgICAgc3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50LnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICB9LAor
ICAgICAgICAgIHRpdGxlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgICAgICByZXR1cm4g
ZWxlbWVudC50aXRsZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cisg
IH0pKCk7CisKKyAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLndyaXRlID0geworICAg
IG5hbWVzOiBPYmplY3QuZXh0ZW5kKHsKKyAgICAgIGNlbGxwYWRkaW5nOiAnY2VsbFBhZGRpbmcn
LAorICAgICAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycKKyAgICB9LCBFbGVtZW50Ll9hdHRy
aWJ1dGVUcmFuc2xhdGlvbnMucmVhZC5uYW1lcyksCisgICAgdmFsdWVzOiB7CisgICAgICBjaGVj
a2VkOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgeworICAgICAgICBlbGVtZW50LmNoZWNrZWQg
PSAhIXZhbHVlOworICAgICAgfSwKKworICAgICAgc3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZh
bHVlKSB7CisgICAgICAgIGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IHZhbHVlID8gdmFsdWUgOiAn
JzsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRp
b25zLmhhcyA9IHt9OworCisgICR3KCdjb2xTcGFuIHJvd1NwYW4gdkFsaWduIGRhdGVUaW1lIGFj
Y2Vzc0tleSB0YWJJbmRleCAnICsKKyAgICAgICdlbmNUeXBlIG1heExlbmd0aCByZWFkT25seSBs
b25nRGVzYyBmcmFtZUJvcmRlcicpLmVhY2goZnVuY3Rpb24oYXR0cikgeworICAgIEVsZW1lbnQu
X2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy53cml0ZS5uYW1lc1thdHRyLnRvTG93ZXJDYXNlKCldID0g
YXR0cjsKKyAgICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMuaGFzW2F0dHIudG9Mb3dl
ckNhc2UoKV0gPSBhdHRyOworICB9KTsKKworICAoZnVuY3Rpb24odikgeworICAgIE9iamVjdC5l
eHRlbmQodiwgeworICAgICAgaHJlZjogICAgICAgIHYuX2dldEF0dHIyLAorICAgICAgc3JjOiAg
ICAgICAgIHYuX2dldEF0dHIyLAorICAgICAgdHlwZTogICAgICAgIHYuX2dldEF0dHIsCisgICAg
ICBhY3Rpb246ICAgICAgdi5fZ2V0QXR0ck5vZGUsCisgICAgICBkaXNhYmxlZDogICAgdi5fZmxh
ZywKKyAgICAgIGNoZWNrZWQ6ICAgICB2Ll9mbGFnLAorICAgICAgcmVhZG9ubHk6ICAgIHYuX2Zs
YWcsCisgICAgICBtdWx0aXBsZTogICAgdi5fZmxhZywKKyAgICAgIG9ubG9hZDogICAgICB2Ll9n
ZXRFdiwKKyAgICAgIG9udW5sb2FkOiAgICB2Ll9nZXRFdiwKKyAgICAgIG9uY2xpY2s6ICAgICB2
Ll9nZXRFdiwKKyAgICAgIG9uZGJsY2xpY2s6ICB2Ll9nZXRFdiwKKyAgICAgIG9ubW91c2Vkb3du
OiB2Ll9nZXRFdiwKKyAgICAgIG9ubW91c2V1cDogICB2Ll9nZXRFdiwKKyAgICAgIG9ubW91c2Vv
dmVyOiB2Ll9nZXRFdiwKKyAgICAgIG9ubW91c2Vtb3ZlOiB2Ll9nZXRFdiwKKyAgICAgIG9ubW91
c2VvdXQ6ICB2Ll9nZXRFdiwKKyAgICAgIG9uZm9jdXM6ICAgICB2Ll9nZXRFdiwKKyAgICAgIG9u
Ymx1cjogICAgICB2Ll9nZXRFdiwKKyAgICAgIG9ua2V5cHJlc3M6ICB2Ll9nZXRFdiwKKyAgICAg
IG9ua2V5ZG93bjogICB2Ll9nZXRFdiwKKyAgICAgIG9ua2V5dXA6ICAgICB2Ll9nZXRFdiwKKyAg
ICAgIG9uc3VibWl0OiAgICB2Ll9nZXRFdiwKKyAgICAgIG9ucmVzZXQ6ICAgICB2Ll9nZXRFdiwK
KyAgICAgIG9uc2VsZWN0OiAgICB2Ll9nZXRFdiwKKyAgICAgIG9uY2hhbmdlOiAgICB2Ll9nZXRF
dgorICAgIH0pOworICB9KShFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMucmVhZC52YWx1
ZXMpOworCisgIGlmIChQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLkVsZW1lbnRFeHRlbnNpb25z
KSB7CisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgZnVuY3Rpb24gX2Rlc2NlbmRhbnRzKGVsZW1l
bnQpIHsKKyAgICAgICAgdmFyIG5vZGVzID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpLCByZXN1bHRzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0g
bm9kZXNbaV07IGkrKykKKyAgICAgICAgICBpZiAobm9kZS50YWdOYW1lICE9PSAiISIpIC8vIEZp
bHRlciBvdXQgY29tbWVudCBub2Rlcy4KKyAgICAgICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICB9CisKKyAgICAgIEVsZW1lbnQuTWV0aG9k
cy5kb3duID0gZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsKKyAgICAgICAg
ZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp
IHJldHVybiBlbGVtZW50LmZpcnN0RGVzY2VuZGFudCgpOworICAgICAgICByZXR1cm4gT2JqZWN0
LmlzTnVtYmVyKGV4cHJlc3Npb24pID8gX2Rlc2NlbmRhbnRzKGVsZW1lbnQpW2V4cHJlc3Npb25d
IDoKKyAgICAgICAgICBFbGVtZW50LnNlbGVjdChlbGVtZW50LCBleHByZXNzaW9uKVtpbmRleCB8
fCAwXTsKKyAgICAgIH0KKyAgICB9KSgpOworICB9CisKK30KKworZWxzZSBpZiAoUHJvdG90eXBl
LkJyb3dzZXIuR2Vja28gJiYgL3J2OjFcLjhcLjAvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkp
IHsKKyAgRWxlbWVudC5NZXRob2RzLnNldE9wYWNpdHkgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1
ZSkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGVsZW1lbnQuc3R5bGUub3BhY2l0
eSA9ICh2YWx1ZSA9PSAxKSA/IDAuOTk5OTk5IDoKKyAgICAgICh2YWx1ZSA9PT0gJycpID8gJycg
OiAodmFsdWUgPCAwLjAwMDAxKSA/IDAgOiB2YWx1ZTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAg
fTsKK30KKworZWxzZSBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB7CisgIEVsZW1lbnQu
TWV0aG9kcy5zZXRPcGFjaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKKyAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKKyAgICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAodmFsdWUgPT0g
MSB8fCB2YWx1ZSA9PT0gJycpID8gJycgOgorICAgICAgKHZhbHVlIDwgMC4wMDAwMSkgPyAwIDog
dmFsdWU7CisKKyAgICBpZiAodmFsdWUgPT0gMSkKKyAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUu
dG9VcHBlckNhc2UoKSA9PSAnSU1HJyAmJiBlbGVtZW50LndpZHRoKSB7CisgICAgICAgIGVsZW1l
bnQud2lkdGgrKzsgZWxlbWVudC53aWR0aC0tOworICAgICAgfSBlbHNlIHRyeSB7CisgICAgICAg
IHZhciBuID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKTsKKyAgICAgICAgZWxlbWVudC5h
cHBlbmRDaGlsZChuKTsKKyAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChuKTsKKyAgICAgIH0g
Y2F0Y2ggKGUpIHsgfQorCisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH07Cit9CisKK2lmICgnb3V0
ZXJIVE1MJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHsKKyAgRWxlbWVudC5NZXRob2Rz
LnJlcGxhY2UgPSBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CisgICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7CisKKyAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkgY29udGVu
dCA9IGNvbnRlbnQudG9FbGVtZW50KCk7CisgICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoY29udGVu
dCkpIHsKKyAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGVudCwgZWxl
bWVudCk7CisgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisKKyAgICBjb250ZW50ID0gT2Jq
ZWN0LnRvSFRNTChjb250ZW50KTsKKyAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2Rl
LCB0YWdOYW1lID0gcGFyZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTsKKworICAgIGlmIChFbGVt
ZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMudGFnc1t0YWdOYW1lXSkgeworICAgICAgdmFyIG5l
eHRTaWJsaW5nID0gZWxlbWVudC5uZXh0KCksCisgICAgICAgICAgZnJhZ21lbnRzID0gRWxlbWVu
dC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50KHRhZ05hbWUsIGNvbnRlbnQuc3RyaXBT
Y3JpcHRzKCkpOworICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpOworICAgICAgaWYg
KG5leHRTaWJsaW5nKQorICAgICAgICBmcmFnbWVudHMuZWFjaChmdW5jdGlvbihub2RlKSB7IHBh
cmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dFNpYmxpbmcpIH0pOworICAgICAgZWxzZQorICAg
ICAgICBmcmFnbWVudHMuZWFjaChmdW5jdGlvbihub2RlKSB7IHBhcmVudC5hcHBlbmRDaGlsZChu
b2RlKSB9KTsKKyAgICB9CisgICAgZWxzZSBlbGVtZW50Lm91dGVySFRNTCA9IGNvbnRlbnQuc3Ry
aXBTY3JpcHRzKCk7CisKKyAgICBjb250ZW50LmV2YWxTY3JpcHRzLmJpbmQoY29udGVudCkuZGVm
ZXIoKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfTsKK30KKworRWxlbWVudC5fcmV0dXJuT2Zm
c2V0ID0gZnVuY3Rpb24obCwgdCkgeworICB2YXIgcmVzdWx0ID0gW2wsIHRdOworICByZXN1bHQu
bGVmdCA9IGw7CisgIHJlc3VsdC50b3AgPSB0OworICByZXR1cm4gcmVzdWx0OworfTsKKworRWxl
bWVudC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSwg
aHRtbCwgZm9yY2UpIHsKKyAgdmFyIGRpdiA9IG5ldyBFbGVtZW50KCdkaXYnKSwKKyAgICAgIHQg
PSBFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMudGFnc1t0YWdOYW1lXTsKKworICB2YXIg
d29ya2Fyb3VuZCA9IGZhbHNlOworICBpZiAodCkgd29ya2Fyb3VuZCA9IHRydWU7CisgIGVsc2Ug
aWYgKGZvcmNlKSB7CisgICAgd29ya2Fyb3VuZCA9IHRydWU7CisgICAgdCA9IFsnJywgJycsIDBd
OworICB9CisKKyAgaWYgKHdvcmthcm91bmQpIHsKKyAgICBkaXYuaW5uZXJIVE1MID0gJyZuYnNw
OycgKyB0WzBdICsgaHRtbCArIHRbMV07CisgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENo
aWxkKTsKKyAgICBmb3IgKHZhciBpID0gdFsyXTsgaS0tOyApIHsKKyAgICAgIGRpdiA9IGRpdi5m
aXJzdENoaWxkOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBkaXYuaW5uZXJIVE1MID0gaHRt
bDsKKyAgfQorICByZXR1cm4gJEEoZGl2LmNoaWxkTm9kZXMpOworfTsKKworRWxlbWVudC5faW5z
ZXJ0aW9uVHJhbnNsYXRpb25zID0geworICBiZWZvcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUp
IHsKKyAgICBlbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGVsZW1lbnQpOwor
ICB9LAorICB0b3A6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKKyAgICBlbGVtZW50Lmluc2Vy
dEJlZm9yZShub2RlLCBlbGVtZW50LmZpcnN0Q2hpbGQpOworICB9LAorICBib3R0b206IGZ1bmN0
aW9uKGVsZW1lbnQsIG5vZGUpIHsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpOworICB9
LAorICBhZnRlcjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkgeworICAgIGVsZW1lbnQucGFyZW50
Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgZWxlbWVudC5uZXh0U2libGluZyk7CisgIH0sCisgIHRh
Z3M6IHsKKyAgICBUQUJMRTogIFsnPHRhYmxlPicsICAgICAgICAgICAgICAgICc8L3RhYmxlPics
ICAgICAgICAgICAgICAgICAgIDFdLAorICAgIFRCT0RZOiAgWyc8dGFibGU+PHRib2R5PicsICAg
ICAgICAgJzwvdGJvZHk+PC90YWJsZT4nLCAgICAgICAgICAgMl0sCisgICAgVFI6ICAgICBbJzx0
YWJsZT48dGJvZHk+PHRyPicsICAgICAnPC90cj48L3Rib2R5PjwvdGFibGU+JywgICAgICAzXSwK
KyAgICBURDogICAgIFsnPHRhYmxlPjx0Ym9keT48dHI+PHRkPicsICc8L3RkPjwvdHI+PC90Ym9k
eT48L3RhYmxlPicsIDRdLAorICAgIFNFTEVDVDogWyc8c2VsZWN0PicsICAgICAgICAgICAgICAg
Jzwvc2VsZWN0PicsICAgICAgICAgICAgICAgICAgMV0KKyAgfQorfTsKKworKGZ1bmN0aW9uKCkg
eworICB2YXIgdGFncyA9IEVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucy50YWdzOworICBP
YmplY3QuZXh0ZW5kKHRhZ3MsIHsKKyAgICBUSEVBRDogdGFncy5UQk9EWSwKKyAgICBURk9PVDog
dGFncy5UQk9EWSwKKyAgICBUSDogICAgdGFncy5URAorICB9KTsKK30pKCk7CisKK0VsZW1lbnQu
TWV0aG9kcy5TaW11bGF0ZWQgPSB7CisgIGhhc0F0dHJpYnV0ZTogZnVuY3Rpb24oZWxlbWVudCwg
YXR0cmlidXRlKSB7CisgICAgYXR0cmlidXRlID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRp
b25zLmhhc1thdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTsKKyAgICB2YXIgbm9kZSA9ICQoZWxlbWVu
dCkuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpOworICAgIHJldHVybiAhIShub2RlICYmIG5v
ZGUuc3BlY2lmaWVkKTsKKyAgfQorfTsKKworRWxlbWVudC5NZXRob2RzLkJ5VGFnID0geyB9Owor
CitPYmplY3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcyk7CisKKyhmdW5jdGlvbihk
aXYpIHsKKworICBpZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lv
bnMgJiYgZGl2WydfX3Byb3RvX18nXSkgeworICAgIHdpbmRvdy5IVE1MRWxlbWVudCA9IHsgfTsK
KyAgICB3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlID0gZGl2WydfX3Byb3RvX18nXTsKKyAg
ICBQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLkVsZW1lbnRFeHRlbnNpb25zID0gdHJ1ZTsKKyAg
fQorCisgIGRpdiA9IG51bGw7CisKK30pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsK
KworRWxlbWVudC5leHRlbmQgPSAoZnVuY3Rpb24oKSB7CisKKyAgZnVuY3Rpb24gY2hlY2tEZWZp
Y2llbmN5KHRhZ05hbWUpIHsKKyAgICBpZiAodHlwZW9mIHdpbmRvdy5FbGVtZW50ICE9ICd1bmRl
ZmluZWQnKSB7CisgICAgICB2YXIgcHJvdG8gPSB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGU7Cisg
ICAgICBpZiAocHJvdG8pIHsKKyAgICAgICAgdmFyIGlkID0gJ18nICsgKE1hdGgucmFuZG9tKCkr
JycpLnNsaWNlKDIpLAorICAgICAgICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRh
Z05hbWUpOworICAgICAgICBwcm90b1tpZF0gPSAneCc7CisgICAgICAgIHZhciBpc0J1Z2d5ID0g
KGVsW2lkXSAhPT0gJ3gnKTsKKyAgICAgICAgZGVsZXRlIHByb3RvW2lkXTsKKyAgICAgICAgZWwg
PSBudWxsOworICAgICAgICByZXR1cm4gaXNCdWdneTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworICB9CisKKyAgZnVuY3Rpb24gZXh0ZW5kRWxlbWVudFdpdGgoZWxlbWVudCwg
bWV0aG9kcykgeworICAgIGZvciAodmFyIHByb3BlcnR5IGluIG1ldGhvZHMpIHsKKyAgICAgIHZh
ciB2YWx1ZSA9IG1ldGhvZHNbcHJvcGVydHldOworICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9u
KHZhbHVlKSAmJiAhKHByb3BlcnR5IGluIGVsZW1lbnQpKQorICAgICAgICBlbGVtZW50W3Byb3Bl
cnR5XSA9IHZhbHVlLm1ldGhvZGl6ZSgpOworICAgIH0KKyAgfQorCisgIHZhciBIVE1MT0JKRUNU
RUxFTUVOVF9QUk9UT1RZUEVfQlVHR1kgPSBjaGVja0RlZmljaWVuY3koJ29iamVjdCcpOworCisg
IGlmIChQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlNwZWNpZmljRWxlbWVudEV4dGVuc2lvbnMp
IHsKKyAgICBpZiAoSFRNTE9CSkVDVEVMRU1FTlRfUFJPVE9UWVBFX0JVR0dZKSB7CisgICAgICBy
ZXR1cm4gZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICBpZiAoZWxlbWVudCAmJiB0eXBlb2Yg
ZWxlbWVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9PSAndW5kZWZpbmVkJykgeworICAgICAgICAg
IHZhciB0ID0gZWxlbWVudC50YWdOYW1lOworICAgICAgICAgIGlmICh0ICYmICgvXig/Om9iamVj
dHxhcHBsZXR8ZW1iZWQpJC9pLnRlc3QodCkpKSB7CisgICAgICAgICAgICBleHRlbmRFbGVtZW50
V2l0aChlbGVtZW50LCBFbGVtZW50Lk1ldGhvZHMpOworICAgICAgICAgICAgZXh0ZW5kRWxlbWVu
dFdpdGgoZWxlbWVudCwgRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCk7CisgICAgICAgICAgICBl
eHRlbmRFbGVtZW50V2l0aChlbGVtZW50LCBFbGVtZW50Lk1ldGhvZHMuQnlUYWdbdC50b1VwcGVy
Q2FzZSgpXSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBlbGVtZW50
OworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gUHJvdG90eXBlLks7CisgIH0KKworICB2YXIg
TWV0aG9kcyA9IHsgfSwgQnlUYWcgPSBFbGVtZW50Lk1ldGhvZHMuQnlUYWc7CisKKyAgdmFyIGV4
dGVuZCA9IE9iamVjdC5leHRlbmQoZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGlmICghZWxlbWVu
dCB8fCB0eXBlb2YgZWxlbWVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSAhPSAndW5kZWZpbmVkJyB8
fAorICAgICAgICBlbGVtZW50Lm5vZGVUeXBlICE9IDEgfHwgZWxlbWVudCA9PSB3aW5kb3cpIHJl
dHVybiBlbGVtZW50OworCisgICAgdmFyIG1ldGhvZHMgPSBPYmplY3QuY2xvbmUoTWV0aG9kcyks
CisgICAgICAgIHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTsKKworICAg
IGlmIChCeVRhZ1t0YWdOYW1lXSkgT2JqZWN0LmV4dGVuZChtZXRob2RzLCBCeVRhZ1t0YWdOYW1l
XSk7CisKKyAgICBleHRlbmRFbGVtZW50V2l0aChlbGVtZW50LCBtZXRob2RzKTsKKworICAgIGVs
ZW1lbnQuX2V4dGVuZGVkQnlQcm90b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKKyAg
ICByZXR1cm4gZWxlbWVudDsKKworICB9LCB7CisgICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7Cisg
ICAgICBpZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMpIHsK
KyAgICAgICAgT2JqZWN0LmV4dGVuZChNZXRob2RzLCBFbGVtZW50Lk1ldGhvZHMpOworICAgICAg
ICBPYmplY3QuZXh0ZW5kKE1ldGhvZHMsIEVsZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQpOworICAg
ICAgfQorICAgIH0KKyAgfSk7CisKKyAgZXh0ZW5kLnJlZnJlc2goKTsKKyAgcmV0dXJuIGV4dGVu
ZDsKK30pKCk7CisKK2lmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaGFzQXR0cmlidXRlKSB7
CisgIEVsZW1lbnQuaGFzQXR0cmlidXRlID0gZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7
CisgICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisgIH07Cit9Citl
bHNlIHsKKyAgRWxlbWVudC5oYXNBdHRyaWJ1dGUgPSBFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVk
Lmhhc0F0dHJpYnV0ZTsKK30KKworRWxlbWVudC5hZGRNZXRob2RzID0gZnVuY3Rpb24obWV0aG9k
cykgeworICB2YXIgRiA9IFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMsIFQgPSBFbGVtZW50Lk1l
dGhvZHMuQnlUYWc7CisKKyAgaWYgKCFtZXRob2RzKSB7CisgICAgT2JqZWN0LmV4dGVuZChGb3Jt
LCBGb3JtLk1ldGhvZHMpOworICAgIE9iamVjdC5leHRlbmQoRm9ybS5FbGVtZW50LCBGb3JtLkVs
ZW1lbnQuTWV0aG9kcyk7CisgICAgT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMuQnlUYWcs
IHsKKyAgICAgICJGT1JNIjogICAgIE9iamVjdC5jbG9uZShGb3JtLk1ldGhvZHMpLAorICAgICAg
IklOUFVUIjogICAgT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2RzKSwKKyAgICAgICJT
RUxFQ1QiOiAgIE9iamVjdC5jbG9uZShGb3JtLkVsZW1lbnQuTWV0aG9kcyksCisgICAgICAiVEVY
VEFSRUEiOiBPYmplY3QuY2xvbmUoRm9ybS5FbGVtZW50Lk1ldGhvZHMpLAorICAgICAgIkJVVFRP
TiI6ICAgT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2RzKQorICAgIH0pOworICB9CisK
KyAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgeworICAgIHZhciB0YWdOYW1lID0gbWV0aG9k
czsKKyAgICBtZXRob2RzID0gYXJndW1lbnRzWzFdOworICB9CisKKyAgaWYgKCF0YWdOYW1lKSBP
YmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcywgbWV0aG9kcyB8fCB7IH0pOworICBlbHNlIHsK
KyAgICBpZiAoT2JqZWN0LmlzQXJyYXkodGFnTmFtZSkpIHRhZ05hbWUuZWFjaChleHRlbmQpOwor
ICAgIGVsc2UgZXh0ZW5kKHRhZ05hbWUpOworICB9CisKKyAgZnVuY3Rpb24gZXh0ZW5kKHRhZ05h
bWUpIHsKKyAgICB0YWdOYW1lID0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpOworICAgIGlmICghRWxl
bWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVdKQorICAgICAgRWxlbWVudC5NZXRob2RzLkJ5VGFn
W3RhZ05hbWVdID0geyB9OworICAgIE9iamVjdC5leHRlbmQoRWxlbWVudC5NZXRob2RzLkJ5VGFn
W3RhZ05hbWVdLCBtZXRob2RzKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvcHkobWV0aG9kcywgZGVz
dGluYXRpb24sIG9ubHlJZkFic2VudCkgeworICAgIG9ubHlJZkFic2VudCA9IG9ubHlJZkFic2Vu
dCB8fCBmYWxzZTsKKyAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBtZXRob2RzKSB7CisgICAgICB2
YXIgdmFsdWUgPSBtZXRob2RzW3Byb3BlcnR5XTsKKyAgICAgIGlmICghT2JqZWN0LmlzRnVuY3Rp
b24odmFsdWUpKSBjb250aW51ZTsKKyAgICAgIGlmICghb25seUlmQWJzZW50IHx8ICEocHJvcGVy
dHkgaW4gZGVzdGluYXRpb24pKQorICAgICAgICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSB2YWx1
ZS5tZXRob2RpemUoKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBmaW5kRE9NQ2xhc3ModGFn
TmFtZSkgeworICAgIHZhciBrbGFzczsKKyAgICB2YXIgdHJhbnMgPSB7CisgICAgICAiT1BUR1JP
VVAiOiAiT3B0R3JvdXAiLCAiVEVYVEFSRUEiOiAiVGV4dEFyZWEiLCAiUCI6ICJQYXJhZ3JhcGgi
LAorICAgICAgIkZJRUxEU0VUIjogIkZpZWxkU2V0IiwgIlVMIjogIlVMaXN0IiwgIk9MIjogIk9M
aXN0IiwgIkRMIjogIkRMaXN0IiwKKyAgICAgICJESVIiOiAiRGlyZWN0b3J5IiwgIkgxIjogIkhl
YWRpbmciLCAiSDIiOiAiSGVhZGluZyIsICJIMyI6ICJIZWFkaW5nIiwKKyAgICAgICJINCI6ICJI
ZWFkaW5nIiwgIkg1IjogIkhlYWRpbmciLCAiSDYiOiAiSGVhZGluZyIsICJRIjogIlF1b3RlIiwK
KyAgICAgICJJTlMiOiAiTW9kIiwgIkRFTCI6ICJNb2QiLCAiQSI6ICJBbmNob3IiLCAiSU1HIjog
IkltYWdlIiwgIkNBUFRJT04iOgorICAgICAgIlRhYmxlQ2FwdGlvbiIsICJDT0wiOiAiVGFibGVD
b2wiLCAiQ09MR1JPVVAiOiAiVGFibGVDb2wiLCAiVEhFQUQiOgorICAgICAgIlRhYmxlU2VjdGlv
biIsICJURk9PVCI6ICJUYWJsZVNlY3Rpb24iLCAiVEJPRFkiOiAiVGFibGVTZWN0aW9uIiwgIlRS
IjoKKyAgICAgICJUYWJsZVJvdyIsICJUSCI6ICJUYWJsZUNlbGwiLCAiVEQiOiAiVGFibGVDZWxs
IiwgIkZSQU1FU0VUIjoKKyAgICAgICJGcmFtZVNldCIsICJJRlJBTUUiOiAiSUZyYW1lIgorICAg
IH07CisgICAgaWYgKHRyYW5zW3RhZ05hbWVdKSBrbGFzcyA9ICdIVE1MJyArIHRyYW5zW3RhZ05h
bWVdICsgJ0VsZW1lbnQnOworICAgIGlmICh3aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2ts
YXNzXTsKKyAgICBrbGFzcyA9ICdIVE1MJyArIHRhZ05hbWUgKyAnRWxlbWVudCc7CisgICAgaWYg
KHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5kb3dba2xhc3NdOworICAgIGtsYXNzID0gJ0hUTUwn
ICsgdGFnTmFtZS5jYXBpdGFsaXplKCkgKyAnRWxlbWVudCc7CisgICAgaWYgKHdpbmRvd1trbGFz
c10pIHJldHVybiB3aW5kb3dba2xhc3NdOworCisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KHRhZ05hbWUpLAorICAgICAgICBwcm90byA9IGVsZW1lbnRbJ19fcHJvdG9f
XyddIHx8IGVsZW1lbnQuY29uc3RydWN0b3IucHJvdG90eXBlOworCisgICAgZWxlbWVudCA9IG51
bGw7CisgICAgcmV0dXJuIHByb3RvOworICB9CisKKyAgdmFyIGVsZW1lbnRQcm90b3R5cGUgPSB3
aW5kb3cuSFRNTEVsZW1lbnQgPyBIVE1MRWxlbWVudC5wcm90b3R5cGUgOgorICAgRWxlbWVudC5w
cm90b3R5cGU7CisKKyAgaWYgKEYuRWxlbWVudEV4dGVuc2lvbnMpIHsKKyAgICBjb3B5KEVsZW1l
bnQuTWV0aG9kcywgZWxlbWVudFByb3RvdHlwZSk7CisgICAgY29weShFbGVtZW50Lk1ldGhvZHMu
U2ltdWxhdGVkLCBlbGVtZW50UHJvdG90eXBlLCB0cnVlKTsKKyAgfQorCisgIGlmIChGLlNwZWNp
ZmljRWxlbWVudEV4dGVuc2lvbnMpIHsKKyAgICBmb3IgKHZhciB0YWcgaW4gRWxlbWVudC5NZXRo
b2RzLkJ5VGFnKSB7CisgICAgICB2YXIga2xhc3MgPSBmaW5kRE9NQ2xhc3ModGFnKTsKKyAgICAg
IGlmIChPYmplY3QuaXNVbmRlZmluZWQoa2xhc3MpKSBjb250aW51ZTsKKyAgICAgIGNvcHkoVFt0
YWddLCBrbGFzcy5wcm90b3R5cGUpOworICAgIH0KKyAgfQorCisgIE9iamVjdC5leHRlbmQoRWxl
bWVudCwgRWxlbWVudC5NZXRob2RzKTsKKyAgZGVsZXRlIEVsZW1lbnQuQnlUYWc7CisKKyAgaWYg
KEVsZW1lbnQuZXh0ZW5kLnJlZnJlc2gpIEVsZW1lbnQuZXh0ZW5kLnJlZnJlc2goKTsKKyAgRWxl
bWVudC5jYWNoZSA9IHsgfTsKK307CisKKworZG9jdW1lbnQudmlld3BvcnQgPSB7CisKKyAgZ2V0
RGltZW5zaW9uczogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHsgd2lkdGg6IHRoaXMuZ2V0V2lk
dGgoKSwgaGVpZ2h0OiB0aGlzLmdldEhlaWdodCgpIH07CisgIH0sCisKKyAgZ2V0U2Nyb2xsT2Zm
c2V0czogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNldCgKKyAg
ICAgIHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xs
TGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsCisgICAgICB3aW5kb3cucGFnZVlPZmZz
ZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCAgfHwgZG9jdW1lbnQuYm9k
eS5zY3JvbGxUb3ApOworICB9Cit9OworCisoZnVuY3Rpb24odmlld3BvcnQpIHsKKyAgdmFyIEIg
PSBQcm90b3R5cGUuQnJvd3NlciwgZG9jID0gZG9jdW1lbnQsIGVsZW1lbnQsIHByb3BlcnR5ID0g
e307CisKKyAgZnVuY3Rpb24gZ2V0Um9vdEVsZW1lbnQoKSB7CisgICAgaWYgKEIuV2ViS2l0ICYm
ICFkb2MuZXZhbHVhdGUpCisgICAgICByZXR1cm4gZG9jdW1lbnQ7CisKKyAgICBpZiAoQi5PcGVy
YSAmJiB3aW5kb3cucGFyc2VGbG9hdCh3aW5kb3cub3BlcmEudmVyc2lvbigpKSA8IDkuNSkKKyAg
ICAgIHJldHVybiBkb2N1bWVudC5ib2R5OworCisgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudDsKKyAgfQorCisgIGZ1bmN0aW9uIGRlZmluZShEKSB7CisgICAgaWYgKCFlbGVtZW50
KSBlbGVtZW50ID0gZ2V0Um9vdEVsZW1lbnQoKTsKKworICAgIHByb3BlcnR5W0RdID0gJ2NsaWVu
dCcgKyBEOworCisgICAgdmlld3BvcnRbJ2dldCcgKyBEXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g
ZWxlbWVudFtwcm9wZXJ0eVtEXV0gfTsKKyAgICByZXR1cm4gdmlld3BvcnRbJ2dldCcgKyBEXSgp
OworICB9CisKKyAgdmlld3BvcnQuZ2V0V2lkdGggID0gZGVmaW5lLmN1cnJ5KCdXaWR0aCcpOwor
CisgIHZpZXdwb3J0LmdldEhlaWdodCA9IGRlZmluZS5jdXJyeSgnSGVpZ2h0Jyk7Cit9KShkb2N1
bWVudC52aWV3cG9ydCk7CisKKworRWxlbWVudC5TdG9yYWdlID0geworICBVSUQ6IDEKK307CisK
K0VsZW1lbnQuYWRkTWV0aG9kcyh7CisgIGdldFN0b3JhZ2U6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
KyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKworICAgIHZhciB1aWQ7
CisgICAgaWYgKGVsZW1lbnQgPT09IHdpbmRvdykgeworICAgICAgdWlkID0gMDsKKyAgICB9IGVs
c2UgeworICAgICAgaWYgKHR5cGVvZiBlbGVtZW50Ll9wcm90b3R5cGVVSUQgPT09ICJ1bmRlZmlu
ZWQiKQorICAgICAgICBlbGVtZW50Ll9wcm90b3R5cGVVSUQgPSBFbGVtZW50LlN0b3JhZ2UuVUlE
Kys7CisgICAgICB1aWQgPSBlbGVtZW50Ll9wcm90b3R5cGVVSUQ7CisgICAgfQorCisgICAgaWYg
KCFFbGVtZW50LlN0b3JhZ2VbdWlkXSkKKyAgICAgIEVsZW1lbnQuU3RvcmFnZVt1aWRdID0gJEgo
KTsKKworICAgIHJldHVybiBFbGVtZW50LlN0b3JhZ2VbdWlkXTsKKyAgfSwKKworICBzdG9yZTog
ZnVuY3Rpb24oZWxlbWVudCwga2V5LCB2YWx1ZSkgeworICAgIGlmICghKGVsZW1lbnQgPSAkKGVs
ZW1lbnQpKSkgcmV0dXJuOworCisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKKyAg
ICAgIEVsZW1lbnQuZ2V0U3RvcmFnZShlbGVtZW50KS51cGRhdGUoa2V5KTsKKyAgICB9IGVsc2Ug
eworICAgICAgRWxlbWVudC5nZXRTdG9yYWdlKGVsZW1lbnQpLnNldChrZXksIHZhbHVlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICByZXRyaWV2ZTogZnVuY3Rpb24o
ZWxlbWVudCwga2V5LCBkZWZhdWx0VmFsdWUpIHsKKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVt
ZW50KSkpIHJldHVybjsKKyAgICB2YXIgaGFzaCA9IEVsZW1lbnQuZ2V0U3RvcmFnZShlbGVtZW50
KSwgdmFsdWUgPSBoYXNoLmdldChrZXkpOworCisgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZCh2
YWx1ZSkpIHsKKyAgICAgIGhhc2guc2V0KGtleSwgZGVmYXVsdFZhbHVlKTsKKyAgICAgIHZhbHVl
ID0gZGVmYXVsdFZhbHVlOworICAgIH0KKworICAgIHJldHVybiB2YWx1ZTsKKyAgfSwKKworICBj
bG9uZTogZnVuY3Rpb24oZWxlbWVudCwgZGVlcCkgeworICAgIGlmICghKGVsZW1lbnQgPSAkKGVs
ZW1lbnQpKSkgcmV0dXJuOworICAgIHZhciBjbG9uZSA9IGVsZW1lbnQuY2xvbmVOb2RlKGRlZXAp
OworICAgIGNsb25lLl9wcm90b3R5cGVVSUQgPSB2b2lkIDA7CisgICAgaWYgKGRlZXApIHsKKyAg
ICAgIHZhciBkZXNjZW5kYW50cyA9IEVsZW1lbnQuc2VsZWN0KGNsb25lLCAnKicpLAorICAgICAg
ICAgIGkgPSBkZXNjZW5kYW50cy5sZW5ndGg7CisgICAgICB3aGlsZSAoaS0tKSB7CisgICAgICAg
IGRlc2NlbmRhbnRzW2ldLl9wcm90b3R5cGVVSUQgPSB2b2lkIDA7CisgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBFbGVtZW50LmV4dGVuZChjbG9uZSk7CisgIH0sCisKKyAgcHVyZ2U6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsK
KyAgICB2YXIgcHVyZ2VFbGVtZW50ID0gRWxlbWVudC5fcHVyZ2VFbGVtZW50OworCisgICAgcHVy
Z2VFbGVtZW50KGVsZW1lbnQpOworCisgICAgdmFyIGRlc2NlbmRhbnRzID0gZWxlbWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpLAorICAgICBpID0gZGVzY2VuZGFudHMubGVuZ3RoOworCisg
ICAgd2hpbGUgKGktLSkgcHVyZ2VFbGVtZW50KGRlc2NlbmRhbnRzW2ldKTsKKworICAgIHJldHVy
biBudWxsOworICB9Cit9KTsKKworKGZ1bmN0aW9uKCkgeworCisgIGZ1bmN0aW9uIHRvRGVjaW1h
bChwY3RTdHJpbmcpIHsKKyAgICB2YXIgbWF0Y2ggPSBwY3RTdHJpbmcubWF0Y2goL14oXGQrKSU/
JC9pKTsKKyAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gKE51bWJlciht
YXRjaFsxXSkgLyAxMDApOworICB9CisKKyAgZnVuY3Rpb24gZ2V0UGl4ZWxWYWx1ZSh2YWx1ZSwg
cHJvcGVydHksIGNvbnRleHQpIHsKKyAgICB2YXIgZWxlbWVudCA9IG51bGw7CisgICAgaWYgKE9i
amVjdC5pc0VsZW1lbnQodmFsdWUpKSB7CisgICAgICBlbGVtZW50ID0gdmFsdWU7CisgICAgICB2
YWx1ZSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpOworICAgIH0KKworICAgIGlmICh2YWx1
ZSA9PT0gbnVsbCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgaWYgKCgvXig/
Oi0pP1xkKyhcLlxkKyk/KHB4KT8kL2kpLnRlc3QodmFsdWUpKSB7CisgICAgICByZXR1cm4gd2lu
ZG93LnBhcnNlRmxvYXQodmFsdWUpOworICAgIH0KKworICAgIHZhciBpc1BlcmNlbnRhZ2UgPSB2
YWx1ZS5pbmNsdWRlKCclJyksIGlzVmlld3BvcnQgPSAoY29udGV4dCA9PT0gZG9jdW1lbnQudmll
d3BvcnQpOworCisgICAgaWYgKC9cZC8udGVzdCh2YWx1ZSkgJiYgZWxlbWVudCAmJiBlbGVtZW50
LnJ1bnRpbWVTdHlsZSAmJiAhKGlzUGVyY2VudGFnZSAmJiBpc1ZpZXdwb3J0KSkgeworICAgICAg
dmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZS5sZWZ0LCByU3R5bGUgPSBlbGVtZW50LnJ1bnRpbWVT
dHlsZS5sZWZ0OworICAgICAgZWxlbWVudC5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW1lbnQuY3Vy
cmVudFN0eWxlLmxlZnQ7CisgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSB2YWx1ZSB8fCAwOwor
ICAgICAgdmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDsKKyAgICAgIGVsZW1lbnQuc3R5
bGUubGVmdCA9IHN0eWxlOworICAgICAgZWxlbWVudC5ydW50aW1lU3R5bGUubGVmdCA9IHJTdHls
ZTsKKworICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmIChlbGVtZW50ICYmIGlz
UGVyY2VudGFnZSkgeworICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZWxlbWVudC5wYXJlbnRO
b2RlOworICAgICAgdmFyIGRlY2ltYWwgPSB0b0RlY2ltYWwodmFsdWUpOworICAgICAgdmFyIHdo
b2xlID0gbnVsbDsKKyAgICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0
aW9uJyk7CisKKyAgICAgIHZhciBpc0hvcml6b250YWwgPSBwcm9wZXJ0eS5pbmNsdWRlKCdsZWZ0
JykgfHwgcHJvcGVydHkuaW5jbHVkZSgncmlnaHQnKSB8fAorICAgICAgIHByb3BlcnR5LmluY2x1
ZGUoJ3dpZHRoJyk7CisKKyAgICAgIHZhciBpc1ZlcnRpY2FsID0gIHByb3BlcnR5LmluY2x1ZGUo
J3RvcCcpIHx8IHByb3BlcnR5LmluY2x1ZGUoJ2JvdHRvbScpIHx8CisgICAgICAgIHByb3BlcnR5
LmluY2x1ZGUoJ2hlaWdodCcpOworCisgICAgICBpZiAoY29udGV4dCA9PT0gZG9jdW1lbnQudmll
d3BvcnQpIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgeworICAgICAgICAgIHdob2xlID0g
ZG9jdW1lbnQudmlld3BvcnQuZ2V0V2lkdGgoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc1ZlcnRp
Y2FsKSB7CisgICAgICAgICAgd2hvbGUgPSBkb2N1bWVudC52aWV3cG9ydC5nZXRIZWlnaHQoKTsK
KyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewor
ICAgICAgICAgIHdob2xlID0gJChjb250ZXh0KS5tZWFzdXJlKCd3aWR0aCcpOworICAgICAgICB9
IGVsc2UgaWYgKGlzVmVydGljYWwpIHsKKyAgICAgICAgICB3aG9sZSA9ICQoY29udGV4dCkubWVh
c3VyZSgnaGVpZ2h0Jyk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuICh3aG9s
ZSA9PT0gbnVsbCkgPyAwIDogd2hvbGUgKiBkZWNpbWFsOworICAgIH0KKworICAgIHJldHVybiAw
OworICB9CisKKyAgZnVuY3Rpb24gdG9DU1NQaXhlbHMobnVtYmVyKSB7CisgICAgaWYgKE9iamVj
dC5pc1N0cmluZyhudW1iZXIpICYmIG51bWJlci5lbmRzV2l0aCgncHgnKSkgeworICAgICAgcmV0
dXJuIG51bWJlcjsKKyAgICB9CisgICAgcmV0dXJuIG51bWJlciArICdweCc7CisgIH0KKworICBm
dW5jdGlvbiBpc0Rpc3BsYXllZChlbGVtZW50KSB7CisgICAgdmFyIG9yaWdpbmFsRWxlbWVudCA9
IGVsZW1lbnQ7CisgICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlKSB7Cisg
ICAgICB2YXIgZGlzcGxheSA9IGVsZW1lbnQuZ2V0U3R5bGUoJ2Rpc3BsYXknKTsKKyAgICAgIGlm
IChkaXNwbGF5ID09PSAnbm9uZScpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQor
ICAgICAgZWxlbWVudCA9ICQoZWxlbWVudC5wYXJlbnROb2RlKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7CisgIH0KKworICB2YXIgaGFzTGF5b3V0ID0gUHJvdG90eXBlLks7CisgIGlmICgnY3Vy
cmVudFN0eWxlJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHsKKyAgICBoYXNMYXlvdXQg
PSBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICBpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlLmhh
c0xheW91dCkgeworICAgICAgICBlbGVtZW50LnN0eWxlLnpvb20gPSAxOworICAgICAgfQorICAg
ICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIGNzc05hbWVGb3Io
a2V5KSB7CisgICAgaWYgKGtleS5pbmNsdWRlKCdib3JkZXInKSkga2V5ID0ga2V5ICsgJy13aWR0
aCc7CisgICAgcmV0dXJuIGtleS5jYW1lbGl6ZSgpOworICB9CisKKyAgRWxlbWVudC5MYXlvdXQg
PSBDbGFzcy5jcmVhdGUoSGFzaCwgeworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwg
ZWxlbWVudCwgcHJlQ29tcHV0ZSkgeworICAgICAgJHN1cGVyKCk7CisgICAgICB0aGlzLmVsZW1l
bnQgPSAkKGVsZW1lbnQpOworCisgICAgICBFbGVtZW50LkxheW91dC5QUk9QRVJUSUVTLmVhY2go
IGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAgICAgIHRoaXMuX3NldChwcm9wZXJ0eSwgbnVsbCk7
CisgICAgICB9LCB0aGlzKTsKKworICAgICAgaWYgKHByZUNvbXB1dGUpIHsKKyAgICAgICAgdGhp
cy5fcHJlQ29tcHV0aW5nID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fYmVnaW4oKTsKKyAgICAgICAg
RWxlbWVudC5MYXlvdXQuUFJPUEVSVElFUy5lYWNoKCB0aGlzLl9jb21wdXRlLCB0aGlzICk7Cisg
ICAgICAgIHRoaXMuX2VuZCgpOworICAgICAgICB0aGlzLl9wcmVDb21wdXRpbmcgPSBmYWxzZTsK
KyAgICAgIH0KKyAgICB9LAorCisgICAgX3NldDogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKSB7
CisgICAgICByZXR1cm4gSGFzaC5wcm90b3R5cGUuc2V0LmNhbGwodGhpcywgcHJvcGVydHksIHZh
bHVlKTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpIHsKKyAg
ICAgIHRocm93ICJQcm9wZXJ0aWVzIG9mIEVsZW1lbnQuTGF5b3V0IGFyZSByZWFkLW9ubHkuIjsK
KyAgICB9LAorCisgICAgZ2V0OiBmdW5jdGlvbigkc3VwZXIsIHByb3BlcnR5KSB7CisgICAgICB2
YXIgdmFsdWUgPSAkc3VwZXIocHJvcGVydHkpOworICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxs
ID8gdGhpcy5fY29tcHV0ZShwcm9wZXJ0eSkgOiB2YWx1ZTsKKyAgICB9LAorCisgICAgX2JlZ2lu
OiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLl9wcmVwYXJlZCkgcmV0dXJuOworCisgICAg
ICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudDsKKyAgICAgIGlmIChpc0Rpc3BsYXllZChlbGVt
ZW50KSkgeworICAgICAgICB0aGlzLl9wcmVwYXJlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsK
KyAgICAgIH0KKworICAgICAgdmFyIG9yaWdpbmFsU3R5bGVzID0geworICAgICAgICBwb3NpdGlv
bjogICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uICAgfHwgJycsCisgICAgICAgIHdpZHRoOiAgICAg
IGVsZW1lbnQuc3R5bGUud2lkdGggICAgICB8fCAnJywKKyAgICAgICAgdmlzaWJpbGl0eTogZWxl
bWVudC5zdHlsZS52aXNpYmlsaXR5IHx8ICcnLAorICAgICAgICBkaXNwbGF5OiAgICBlbGVtZW50
LnN0eWxlLmRpc3BsYXkgICAgfHwgJycKKyAgICAgIH07CisKKyAgICAgIGVsZW1lbnQuc3RvcmUo
J3Byb3RvdHlwZV9vcmlnaW5hbF9zdHlsZXMnLCBvcmlnaW5hbFN0eWxlcyk7CisKKyAgICAgIHZh
ciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJyksCisgICAgICAgd2lkdGgg
PSBlbGVtZW50LmdldFN0eWxlKCd3aWR0aCcpOworCisgICAgICBpZiAod2lkdGggPT09ICIwcHgi
IHx8IHdpZHRoID09PSBudWxsKSB7CisgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdi
bG9jayc7CisgICAgICAgIHdpZHRoID0gZWxlbWVudC5nZXRTdHlsZSgnd2lkdGgnKTsKKyAgICAg
IH0KKworICAgICAgdmFyIGNvbnRleHQgPSAocG9zaXRpb24gPT09ICdmaXhlZCcpID8gZG9jdW1l
bnQudmlld3BvcnQgOgorICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZTsKKworICAgICAgZWxlbWVu
dC5zZXRTdHlsZSh7CisgICAgICAgIHBvc2l0aW9uOiAgICdhYnNvbHV0ZScsCisgICAgICAgIHZp
c2liaWxpdHk6ICdoaWRkZW4nLAorICAgICAgICBkaXNwbGF5OiAgICAnYmxvY2snCisgICAgICB9
KTsKKworICAgICAgdmFyIHBvc2l0aW9uZWRXaWR0aCA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3dpZHRo
Jyk7CisKKyAgICAgIHZhciBuZXdXaWR0aDsKKyAgICAgIGlmICh3aWR0aCAmJiAocG9zaXRpb25l
ZFdpZHRoID09PSB3aWR0aCkpIHsKKyAgICAgICAgbmV3V2lkdGggPSBnZXRQaXhlbFZhbHVlKGVs
ZW1lbnQsICd3aWR0aCcsIGNvbnRleHQpOworICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0g
J2Fic29sdXRlJyB8fCBwb3NpdGlvbiA9PT0gJ2ZpeGVkJykgeworICAgICAgICBuZXdXaWR0aCA9
IGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ3dpZHRoJywgY29udGV4dCk7CisgICAgICB9IGVsc2Ug
eworICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlLCBwTGF5b3V0ID0gJChw
YXJlbnQpLmdldExheW91dCgpOworCisgICAgICAgIG5ld1dpZHRoID0gcExheW91dC5nZXQoJ3dp
ZHRoJykgLQorICAgICAgICAgdGhpcy5nZXQoJ21hcmdpbi1sZWZ0JykgLQorICAgICAgICAgdGhp
cy5nZXQoJ2JvcmRlci1sZWZ0JykgLQorICAgICAgICAgdGhpcy5nZXQoJ3BhZGRpbmctbGVmdCcp
IC0KKyAgICAgICAgIHRoaXMuZ2V0KCdwYWRkaW5nLXJpZ2h0JykgLQorICAgICAgICAgdGhpcy5n
ZXQoJ2JvcmRlci1yaWdodCcpIC0KKyAgICAgICAgIHRoaXMuZ2V0KCdtYXJnaW4tcmlnaHQnKTsK
KyAgICAgIH0KKworICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHdpZHRoOiBuZXdXaWR0aCArICdw
eCcgfSk7CisKKyAgICAgIHRoaXMuX3ByZXBhcmVkID0gdHJ1ZTsKKyAgICB9LAorCisgICAgX2Vu
ZDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudDsKKyAgICAg
IHZhciBvcmlnaW5hbFN0eWxlcyA9IGVsZW1lbnQucmV0cmlldmUoJ3Byb3RvdHlwZV9vcmlnaW5h
bF9zdHlsZXMnKTsKKyAgICAgIGVsZW1lbnQuc3RvcmUoJ3Byb3RvdHlwZV9vcmlnaW5hbF9zdHls
ZXMnLCBudWxsKTsKKyAgICAgIGVsZW1lbnQuc2V0U3R5bGUob3JpZ2luYWxTdHlsZXMpOworICAg
ICAgdGhpcy5fcHJlcGFyZWQgPSBmYWxzZTsKKyAgICB9LAorCisgICAgX2NvbXB1dGU6IGZ1bmN0
aW9uKHByb3BlcnR5KSB7CisgICAgICB2YXIgQ09NUFVUQVRJT05TID0gRWxlbWVudC5MYXlvdXQu
Q09NUFVUQVRJT05TOworICAgICAgaWYgKCEocHJvcGVydHkgaW4gQ09NUFVUQVRJT05TKSkgewor
ICAgICAgICB0aHJvdyAiUHJvcGVydHkgbm90IGZvdW5kLiI7CisgICAgICB9CisKKyAgICAgIHJl
dHVybiB0aGlzLl9zZXQocHJvcGVydHksIENPTVBVVEFUSU9OU1twcm9wZXJ0eV0uY2FsbCh0aGlz
LCB0aGlzLmVsZW1lbnQpKTsKKyAgICB9LAorCisgICAgdG9PYmplY3Q6IGZ1bmN0aW9uKCkgewor
ICAgICAgdmFyIGFyZ3MgPSAkQShhcmd1bWVudHMpOworICAgICAgdmFyIGtleXMgPSAoYXJncy5s
ZW5ndGggPT09IDApID8gRWxlbWVudC5MYXlvdXQuUFJPUEVSVElFUyA6CisgICAgICAgYXJncy5q
b2luKCcgJykuc3BsaXQoJyAnKTsKKyAgICAgIHZhciBvYmogPSB7fTsKKyAgICAgIGtleXMuZWFj
aCggZnVuY3Rpb24oa2V5KSB7CisgICAgICAgIGlmICghRWxlbWVudC5MYXlvdXQuUFJPUEVSVElF
Uy5pbmNsdWRlKGtleSkpIHJldHVybjsKKyAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoa2V5
KTsKKyAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIG9ialtrZXldID0gdmFsdWU7CisgICAgICB9
LCB0aGlzKTsKKyAgICAgIHJldHVybiBvYmo7CisgICAgfSwKKworICAgIHRvSGFzaDogZnVuY3Rp
b24oKSB7CisgICAgICB2YXIgb2JqID0gdGhpcy50b09iamVjdC5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOworICAgICAgcmV0dXJuIG5ldyBIYXNoKG9iaik7CisgICAgfSwKKworICAgIHRvQ1NTOiBm
dW5jdGlvbigpIHsKKyAgICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKTsKKyAgICAgIHZhciBr
ZXlzID0gKGFyZ3MubGVuZ3RoID09PSAwKSA/IEVsZW1lbnQuTGF5b3V0LlBST1BFUlRJRVMgOgor
ICAgICAgIGFyZ3Muam9pbignICcpLnNwbGl0KCcgJyk7CisgICAgICB2YXIgY3NzID0ge307CisK
KyAgICAgIGtleXMuZWFjaCggZnVuY3Rpb24oa2V5KSB7CisgICAgICAgIGlmICghRWxlbWVudC5M
YXlvdXQuUFJPUEVSVElFUy5pbmNsdWRlKGtleSkpIHJldHVybjsKKyAgICAgICAgaWYgKEVsZW1l
bnQuTGF5b3V0LkNPTVBPU0lURV9QUk9QRVJUSUVTLmluY2x1ZGUoa2V5KSkgcmV0dXJuOworCisg
ICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KGtleSk7CisgICAgICAgIGlmICh2YWx1ZSAhPSBu
dWxsKSBjc3NbY3NzTmFtZUZvcihrZXkpXSA9IHZhbHVlICsgJ3B4JzsKKyAgICAgIH0sIHRoaXMp
OworICAgICAgcmV0dXJuIGNzczsKKyAgICB9LAorCisgICAgaW5zcGVjdDogZnVuY3Rpb24oKSB7
CisgICAgICByZXR1cm4gIiM8RWxlbWVudC5MYXlvdXQ+IjsKKyAgICB9CisgIH0pOworCisgIE9i
amVjdC5leHRlbmQoRWxlbWVudC5MYXlvdXQsIHsKKyAgICBQUk9QRVJUSUVTOiAkdygnaGVpZ2h0
IHdpZHRoIHRvcCBsZWZ0IHJpZ2h0IGJvdHRvbSBib3JkZXItbGVmdCBib3JkZXItcmlnaHQgYm9y
ZGVyLXRvcCBib3JkZXItYm90dG9tIHBhZGRpbmctbGVmdCBwYWRkaW5nLXJpZ2h0IHBhZGRpbmct
dG9wIHBhZGRpbmctYm90dG9tIG1hcmdpbi10b3AgbWFyZ2luLWJvdHRvbSBtYXJnaW4tbGVmdCBt
YXJnaW4tcmlnaHQgcGFkZGluZy1ib3gtd2lkdGggcGFkZGluZy1ib3gtaGVpZ2h0IGJvcmRlci1i
b3gtd2lkdGggYm9yZGVyLWJveC1oZWlnaHQgbWFyZ2luLWJveC13aWR0aCBtYXJnaW4tYm94LWhl
aWdodCcpLAorCisgICAgQ09NUE9TSVRFX1BST1BFUlRJRVM6ICR3KCdwYWRkaW5nLWJveC13aWR0
aCBwYWRkaW5nLWJveC1oZWlnaHQgbWFyZ2luLWJveC13aWR0aCBtYXJnaW4tYm94LWhlaWdodCBi
b3JkZXItYm94LXdpZHRoIGJvcmRlci1ib3gtaGVpZ2h0JyksCisKKyAgICBDT01QVVRBVElPTlM6
IHsKKyAgICAgICdoZWlnaHQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIGlmICghdGhp
cy5fcHJlQ29tcHV0aW5nKSB0aGlzLl9iZWdpbigpOworCisgICAgICAgIHZhciBiSGVpZ2h0ID0g
dGhpcy5nZXQoJ2JvcmRlci1ib3gtaGVpZ2h0Jyk7CisgICAgICAgIGlmIChiSGVpZ2h0IDw9IDAp
IHsKKyAgICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1dGluZykgdGhpcy5fZW5kKCk7CisgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYlRvcCA9IHRoaXMuZ2V0
KCdib3JkZXItdG9wJyksCisgICAgICAgICBiQm90dG9tID0gdGhpcy5nZXQoJ2JvcmRlci1ib3R0
b20nKTsKKworICAgICAgICB2YXIgcFRvcCA9IHRoaXMuZ2V0KCdwYWRkaW5nLXRvcCcpLAorICAg
ICAgICAgcEJvdHRvbSA9IHRoaXMuZ2V0KCdwYWRkaW5nLWJvdHRvbScpOworCisgICAgICAgIGlm
ICghdGhpcy5fcHJlQ29tcHV0aW5nKSB0aGlzLl9lbmQoKTsKKworICAgICAgICByZXR1cm4gYkhl
aWdodCAtIGJUb3AgLSBiQm90dG9tIC0gcFRvcCAtIHBCb3R0b207CisgICAgICB9LAorCisgICAg
ICAnd2lkdGgnOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIGlmICghdGhpcy5fcHJlQ29t
cHV0aW5nKSB0aGlzLl9iZWdpbigpOworCisgICAgICAgIHZhciBiV2lkdGggPSB0aGlzLmdldCgn
Ym9yZGVyLWJveC13aWR0aCcpOworICAgICAgICBpZiAoYldpZHRoIDw9IDApIHsKKyAgICAgICAg
ICBpZiAoIXRoaXMuX3ByZUNvbXB1dGluZykgdGhpcy5fZW5kKCk7CisgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYkxlZnQgPSB0aGlzLmdldCgnYm9yZGVyLWxl
ZnQnKSwKKyAgICAgICAgIGJSaWdodCA9IHRoaXMuZ2V0KCdib3JkZXItcmlnaHQnKTsKKworICAg
ICAgICB2YXIgcExlZnQgPSB0aGlzLmdldCgncGFkZGluZy1sZWZ0JyksCisgICAgICAgICBwUmln
aHQgPSB0aGlzLmdldCgncGFkZGluZy1yaWdodCcpOworCisgICAgICAgIGlmICghdGhpcy5fcHJl
Q29tcHV0aW5nKSB0aGlzLl9lbmQoKTsKKworICAgICAgICByZXR1cm4gYldpZHRoIC0gYkxlZnQg
LSBiUmlnaHQgLSBwTGVmdCAtIHBSaWdodDsKKyAgICAgIH0sCisKKyAgICAgICdwYWRkaW5nLWJv
eC1oZWlnaHQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIHZhciBoZWlnaHQgPSB0aGlz
LmdldCgnaGVpZ2h0JyksCisgICAgICAgICBwVG9wID0gdGhpcy5nZXQoJ3BhZGRpbmctdG9wJyks
CisgICAgICAgICBwQm90dG9tID0gdGhpcy5nZXQoJ3BhZGRpbmctYm90dG9tJyk7CisKKyAgICAg
ICAgcmV0dXJuIGhlaWdodCArIHBUb3AgKyBwQm90dG9tOworICAgICAgfSwKKworICAgICAgJ3Bh
ZGRpbmctYm94LXdpZHRoJzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICB2YXIgd2lkdGgg
PSB0aGlzLmdldCgnd2lkdGgnKSwKKyAgICAgICAgIHBMZWZ0ID0gdGhpcy5nZXQoJ3BhZGRpbmct
bGVmdCcpLAorICAgICAgICAgcFJpZ2h0ID0gdGhpcy5nZXQoJ3BhZGRpbmctcmlnaHQnKTsKKwor
ICAgICAgICByZXR1cm4gd2lkdGggKyBwTGVmdCArIHBSaWdodDsKKyAgICAgIH0sCisKKyAgICAg
ICdib3JkZXItYm94LWhlaWdodCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9wcmVDb21wdXRpbmcpIHRoaXMuX2JlZ2luKCk7CisgICAgICAgIHZhciBoZWlnaHQgPSBl
bGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICAgICAgaWYgKCF0aGlzLl9wcmVDb21wdXRpbmcpIHRo
aXMuX2VuZCgpOworICAgICAgICByZXR1cm4gaGVpZ2h0OworICAgICAgfSwKKworICAgICAgJ2Jv
cmRlci1ib3gtd2lkdGgnOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIGlmICghdGhpcy5f
cHJlQ29tcHV0aW5nKSB0aGlzLl9iZWdpbigpOworICAgICAgICB2YXIgd2lkdGggPSBlbGVtZW50
Lm9mZnNldFdpZHRoOworICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1dGluZykgdGhpcy5fZW5k
KCk7CisgICAgICAgIHJldHVybiB3aWR0aDsKKyAgICAgIH0sCisKKyAgICAgICdtYXJnaW4tYm94
LWhlaWdodCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgdmFyIGJIZWlnaHQgPSB0aGlz
LmdldCgnYm9yZGVyLWJveC1oZWlnaHQnKSwKKyAgICAgICAgIG1Ub3AgPSB0aGlzLmdldCgnbWFy
Z2luLXRvcCcpLAorICAgICAgICAgbUJvdHRvbSA9IHRoaXMuZ2V0KCdtYXJnaW4tYm90dG9tJyk7
CisKKyAgICAgICAgaWYgKGJIZWlnaHQgPD0gMCkgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJu
IGJIZWlnaHQgKyBtVG9wICsgbUJvdHRvbTsKKyAgICAgIH0sCisKKyAgICAgICdtYXJnaW4tYm94
LXdpZHRoJzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICB2YXIgYldpZHRoID0gdGhpcy5n
ZXQoJ2JvcmRlci1ib3gtd2lkdGgnKSwKKyAgICAgICAgIG1MZWZ0ID0gdGhpcy5nZXQoJ21hcmdp
bi1sZWZ0JyksCisgICAgICAgICBtUmlnaHQgPSB0aGlzLmdldCgnbWFyZ2luLXJpZ2h0Jyk7CisK
KyAgICAgICAgaWYgKGJXaWR0aCA8PSAwKSByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gYldp
ZHRoICsgbUxlZnQgKyBtUmlnaHQ7CisgICAgICB9LAorCisgICAgICAndG9wJzogZnVuY3Rpb24o
ZWxlbWVudCkgeworICAgICAgICB2YXIgb2Zmc2V0ID0gZWxlbWVudC5wb3NpdGlvbmVkT2Zmc2V0
KCk7CisgICAgICAgIHJldHVybiBvZmZzZXQudG9wOworICAgICAgfSwKKworICAgICAgJ2JvdHRv
bSc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgdmFyIG9mZnNldCA9IGVsZW1lbnQucG9z
aXRpb25lZE9mZnNldCgpLAorICAgICAgICAgcGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJl
bnQoKSwKKyAgICAgICAgIHBIZWlnaHQgPSBwYXJlbnQubWVhc3VyZSgnaGVpZ2h0Jyk7CisKKyAg
ICAgICAgdmFyIG1IZWlnaHQgPSB0aGlzLmdldCgnYm9yZGVyLWJveC1oZWlnaHQnKTsKKworICAg
ICAgICByZXR1cm4gcEhlaWdodCAtIG1IZWlnaHQgLSBvZmZzZXQudG9wOworICAgICAgfSwKKwor
ICAgICAgJ2xlZnQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIHZhciBvZmZzZXQgPSBl
bGVtZW50LnBvc2l0aW9uZWRPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldC5sZWZ0Owor
ICAgICAgfSwKKworICAgICAgJ3JpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICB2
YXIgb2Zmc2V0ID0gZWxlbWVudC5wb3NpdGlvbmVkT2Zmc2V0KCksCisgICAgICAgICBwYXJlbnQg
PSBlbGVtZW50LmdldE9mZnNldFBhcmVudCgpLAorICAgICAgICAgcFdpZHRoID0gcGFyZW50Lm1l
YXN1cmUoJ3dpZHRoJyk7CisKKyAgICAgICAgdmFyIG1XaWR0aCA9IHRoaXMuZ2V0KCdib3JkZXIt
Ym94LXdpZHRoJyk7CisKKyAgICAgICAgcmV0dXJuIHBXaWR0aCAtIG1XaWR0aCAtIG9mZnNldC5s
ZWZ0OworICAgICAgfSwKKworICAgICAgJ3BhZGRpbmctdG9wJzogZnVuY3Rpb24oZWxlbWVudCkg
eworICAgICAgICByZXR1cm4gZ2V0UGl4ZWxWYWx1ZShlbGVtZW50LCAncGFkZGluZ1RvcCcpOwor
ICAgICAgfSwKKworICAgICAgJ3BhZGRpbmctYm90dG9tJzogZnVuY3Rpb24oZWxlbWVudCkgewor
ICAgICAgICByZXR1cm4gZ2V0UGl4ZWxWYWx1ZShlbGVtZW50LCAncGFkZGluZ0JvdHRvbScpOwor
ICAgICAgfSwKKworICAgICAgJ3BhZGRpbmctbGVmdCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAg
ICAgICAgcmV0dXJuIGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ3BhZGRpbmdMZWZ0Jyk7CisgICAg
ICB9LAorCisgICAgICAncGFkZGluZy1yaWdodCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAg
ICAgcmV0dXJuIGdldFBpeGVsVmFsdWUoZWxlbWVudCwgJ3BhZGRpbmdSaWdodCcpOworICAgICAg
fSwKKworICAgICAgJ2JvcmRlci10b3AnOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIHJl
dHVybiBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdib3JkZXJUb3BXaWR0aCcpOworICAgICAgfSwK
KworICAgICAgJ2JvcmRlci1ib3R0b20nOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIHJl
dHVybiBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdib3JkZXJCb3R0b21XaWR0aCcpOworICAgICAg
fSwKKworICAgICAgJ2JvcmRlci1sZWZ0JzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICBy
ZXR1cm4gZ2V0UGl4ZWxWYWx1ZShlbGVtZW50LCAnYm9yZGVyTGVmdFdpZHRoJyk7CisgICAgICB9
LAorCisgICAgICAnYm9yZGVyLXJpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICBy
ZXR1cm4gZ2V0UGl4ZWxWYWx1ZShlbGVtZW50LCAnYm9yZGVyUmlnaHRXaWR0aCcpOworICAgICAg
fSwKKworICAgICAgJ21hcmdpbi10b3AnOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIHJl
dHVybiBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdtYXJnaW5Ub3AnKTsKKyAgICAgIH0sCisKKyAg
ICAgICdtYXJnaW4tYm90dG9tJzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICByZXR1cm4g
Z2V0UGl4ZWxWYWx1ZShlbGVtZW50LCAnbWFyZ2luQm90dG9tJyk7CisgICAgICB9LAorCisgICAg
ICAnbWFyZ2luLWxlZnQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBnZXRQ
aXhlbFZhbHVlKGVsZW1lbnQsICdtYXJnaW5MZWZ0Jyk7CisgICAgICB9LAorCisgICAgICAnbWFy
Z2luLXJpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICByZXR1cm4gZ2V0UGl4ZWxW
YWx1ZShlbGVtZW50LCAnbWFyZ2luUmlnaHQnKTsKKyAgICAgIH0KKyAgICB9CisgIH0pOworCisg
IGlmICgnZ2V0Qm91bmRpbmdDbGllbnRSZWN0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQp
IHsKKyAgICBPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTGF5b3V0LkNPTVBVVEFUSU9OUywgeworICAg
ICAgJ3JpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICB2YXIgcGFyZW50ID0gaGFz
TGF5b3V0KGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KCkpOworICAgICAgICB2YXIgcmVjdCA9IGVs
ZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCisgICAgICAgICBwUmVjdCA9IHBhcmVudC5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICByZXR1cm4gKHBSZWN0LnJpZ2h0IC0g
cmVjdC5yaWdodCkucm91bmQoKTsKKyAgICAgIH0sCisKKyAgICAgICdib3R0b20nOiBmdW5jdGlv
bihlbGVtZW50KSB7CisgICAgICAgIHZhciBwYXJlbnQgPSBoYXNMYXlvdXQoZWxlbWVudC5nZXRP
ZmZzZXRQYXJlbnQoKSk7CisgICAgICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKSwKKyAgICAgICAgIHBSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpOworCisgICAgICAgIHJldHVybiAocFJlY3QuYm90dG9tIC0gcmVjdC5ib3R0b20pLnJvdW5k
KCk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBFbGVtZW50Lk9mZnNldCA9IENsYXNzLmNy
ZWF0ZSh7CisgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24obGVmdCwgdG9wKSB7CisgICAgICB0aGlz
LmxlZnQgPSBsZWZ0LnJvdW5kKCk7CisgICAgICB0aGlzLnRvcCAgPSB0b3Aucm91bmQoKTsKKwor
ICAgICAgdGhpc1swXSA9IHRoaXMubGVmdDsKKyAgICAgIHRoaXNbMV0gPSB0aGlzLnRvcDsKKyAg
ICB9LAorCisgICAgcmVsYXRpdmVUbzogZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgICByZXR1cm4g
bmV3IEVsZW1lbnQuT2Zmc2V0KAorICAgICAgICB0aGlzLmxlZnQgLSBvZmZzZXQubGVmdCwKKyAg
ICAgICAgdGhpcy50b3AgIC0gb2Zmc2V0LnRvcAorICAgICAgKTsKKyAgICB9LAorCisgICAgaW5z
cGVjdDogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gIiM8RWxlbWVudC5PZmZzZXQgbGVmdDog
I3tsZWZ0fSB0b3A6ICN7dG9wfT4iLmludGVycG9sYXRlKHRoaXMpOworICAgIH0sCisKKyAgICB0
b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gIlsje2xlZnR9LCAje3RvcH1dIi5p
bnRlcnBvbGF0ZSh0aGlzKTsKKyAgICB9LAorCisgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7Cisg
ICAgICByZXR1cm4gW3RoaXMubGVmdCwgdGhpcy50b3BdOworICAgIH0KKyAgfSk7CisKKyAgZnVu
Y3Rpb24gZ2V0TGF5b3V0KGVsZW1lbnQsIHByZUNvbXB1dGUpIHsKKyAgICByZXR1cm4gbmV3IEVs
ZW1lbnQuTGF5b3V0KGVsZW1lbnQsIHByZUNvbXB1dGUpOworICB9CisKKyAgZnVuY3Rpb24gbWVh
c3VyZShlbGVtZW50LCBwcm9wZXJ0eSkgeworICAgIHJldHVybiAkKGVsZW1lbnQpLmdldExheW91
dCgpLmdldChwcm9wZXJ0eSk7CisgIH0KKworICBmdW5jdGlvbiBnZXREaW1lbnNpb25zKGVsZW1l
bnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgZGlzcGxheSA9IEVsZW1l
bnQuZ2V0U3R5bGUoZWxlbWVudCwgJ2Rpc3BsYXknKTsKKworICAgIGlmIChkaXNwbGF5ICYmIGRp
c3BsYXkgIT09ICdub25lJykgeworICAgICAgcmV0dXJuIHsgd2lkdGg6IGVsZW1lbnQub2Zmc2V0
V2lkdGgsIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgfTsKKyAgICB9CisKKyAgICB2YXIg
c3R5bGUgPSBlbGVtZW50LnN0eWxlOworICAgIHZhciBvcmlnaW5hbFN0eWxlcyA9IHsKKyAgICAg
IHZpc2liaWxpdHk6IHN0eWxlLnZpc2liaWxpdHksCisgICAgICBwb3NpdGlvbjogICBzdHlsZS5w
b3NpdGlvbiwKKyAgICAgIGRpc3BsYXk6ICAgIHN0eWxlLmRpc3BsYXkKKyAgICB9OworCisgICAg
dmFyIG5ld1N0eWxlcyA9IHsKKyAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLAorICAgICAgZGlz
cGxheTogICAgJ2Jsb2NrJworICAgIH07CisKKyAgICBpZiAob3JpZ2luYWxTdHlsZXMucG9zaXRp
b24gIT09ICdmaXhlZCcpCisgICAgICBuZXdTdHlsZXMucG9zaXRpb24gPSAnYWJzb2x1dGUnOwor
CisgICAgRWxlbWVudC5zZXRTdHlsZShlbGVtZW50LCBuZXdTdHlsZXMpOworCisgICAgdmFyIGRp
bWVuc2lvbnMgPSB7CisgICAgICB3aWR0aDogIGVsZW1lbnQub2Zmc2V0V2lkdGgsCisgICAgICBo
ZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0CisgICAgfTsKKworICAgIEVsZW1lbnQuc2V0U3R5
bGUoZWxlbWVudCwgb3JpZ2luYWxTdHlsZXMpOworCisgICAgcmV0dXJuIGRpbWVuc2lvbnM7Cisg
IH0KKworICBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgeworICAgIGVsZW1lbnQg
PSAkKGVsZW1lbnQpOworCisgICAgaWYgKGlzRG9jdW1lbnQoZWxlbWVudCkgfHwgaXNEZXRhY2hl
ZChlbGVtZW50KSB8fCBpc0JvZHkoZWxlbWVudCkgfHwgaXNIdG1sKGVsZW1lbnQpKQorICAgICAg
cmV0dXJuICQoZG9jdW1lbnQuYm9keSk7CisKKyAgICB2YXIgaXNJbmxpbmUgPSAoRWxlbWVudC5n
ZXRTdHlsZShlbGVtZW50LCAnZGlzcGxheScpID09PSAnaW5saW5lJyk7CisgICAgaWYgKCFpc0lu
bGluZSAmJiBlbGVtZW50Lm9mZnNldFBhcmVudCkgcmV0dXJuICQoZWxlbWVudC5vZmZzZXRQYXJl
bnQpOworCisgICAgd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSAmJiBlbGVt
ZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7CisgICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVt
ZW50LCAncG9zaXRpb24nKSAhPT0gJ3N0YXRpYycpIHsKKyAgICAgICAgcmV0dXJuIGlzSHRtbChl
bGVtZW50KSA/ICQoZG9jdW1lbnQuYm9keSkgOiAkKGVsZW1lbnQpOworICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAkKGRvY3VtZW50LmJvZHkpOworICB9CisKKworICBmdW5jdGlvbiBjdW11
bGF0aXZlT2Zmc2V0KGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2
YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKKyAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKSB7
CisgICAgICBkbyB7CisgICAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsK
KyAgICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOworICAgICAgICBlbGVt
ZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7CisgICAgICB9IHdoaWxlIChlbGVtZW50KTsKKyAg
ICB9CisgICAgcmV0dXJuIG5ldyBFbGVtZW50Lk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7CisgIH0K
KworICBmdW5jdGlvbiBwb3NpdGlvbmVkT2Zmc2V0KGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0g
JChlbGVtZW50KTsKKworICAgIHZhciBsYXlvdXQgPSBlbGVtZW50LmdldExheW91dCgpOworCisg
ICAgdmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7CisgICAgZG8geworICAgICAgdmFsdWVUICs9
IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAwOworICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0
TGVmdCB8fCAwOworICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OworICAgICAg
aWYgKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKGlzQm9keShlbGVtZW50KSkgYnJlYWs7CisgICAg
ICAgIHZhciBwID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKTsKKyAgICAg
ICAgaWYgKHAgIT09ICdzdGF0aWMnKSBicmVhazsKKyAgICAgIH0KKyAgICB9IHdoaWxlIChlbGVt
ZW50KTsKKworICAgIHZhbHVlTCAtPSBsYXlvdXQuZ2V0KCdtYXJnaW4tdG9wJyk7CisgICAgdmFs
dWVUIC09IGxheW91dC5nZXQoJ21hcmdpbi1sZWZ0Jyk7CisKKyAgICByZXR1cm4gbmV3IEVsZW1l
bnQuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKKyAgfQorCisgIGZ1bmN0aW9uIGN1bXVsYXRpdmVT
Y3JvbGxPZmZzZXQoZWxlbWVudCkgeworICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwor
ICAgIGRvIHsKKyAgICAgIHZhbHVlVCArPSBlbGVtZW50LnNjcm9sbFRvcCAgfHwgMDsKKyAgICAg
IHZhbHVlTCArPSBlbGVtZW50LnNjcm9sbExlZnQgfHwgMDsKKyAgICAgIGVsZW1lbnQgPSBlbGVt
ZW50LnBhcmVudE5vZGU7CisgICAgfSB3aGlsZSAoZWxlbWVudCk7CisgICAgcmV0dXJuIG5ldyBF
bGVtZW50Lk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7CisgIH0KKworICBmdW5jdGlvbiB2aWV3cG9y
dE9mZnNldChmb3JFbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgdmFy
IHZhbHVlVCA9IDAsIHZhbHVlTCA9IDAsIGRvY0JvZHkgPSBkb2N1bWVudC5ib2R5OworCisgICAg
dmFyIGVsZW1lbnQgPSBmb3JFbGVtZW50OworICAgIGRvIHsKKyAgICAgIHZhbHVlVCArPSBlbGVt
ZW50Lm9mZnNldFRvcCAgfHwgMDsKKyAgICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQg
fHwgMDsKKyAgICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PSBkb2NCb2R5ICYmCisgICAg
ICAgIEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykg
YnJlYWs7CisgICAgfSB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KTsKKwor
ICAgIGVsZW1lbnQgPSBmb3JFbGVtZW50OworICAgIGRvIHsKKyAgICAgIGlmIChlbGVtZW50ICE9
IGRvY0JvZHkpIHsKKyAgICAgICAgdmFsdWVUIC09IGVsZW1lbnQuc2Nyb2xsVG9wICB8fCAwOwor
ICAgICAgICB2YWx1ZUwgLT0gZWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7CisgICAgICB9CisgICAg
fSB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSk7CisgICAgcmV0dXJuIG5ldyBF
bGVtZW50Lk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7CisgIH0KKworICBmdW5jdGlvbiBhYnNvbHV0
aXplKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKworICAgIGlmIChFbGVt
ZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnYWJzb2x1dGUnKSB7CisgICAg
ICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisKKyAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zm
c2V0UGFyZW50KGVsZW1lbnQpOworICAgIHZhciBlT2Zmc2V0ID0gZWxlbWVudC52aWV3cG9ydE9m
ZnNldCgpLAorICAgICBwT2Zmc2V0ID0gb2Zmc2V0UGFyZW50LnZpZXdwb3J0T2Zmc2V0KCk7CisK
KyAgICB2YXIgb2Zmc2V0ID0gZU9mZnNldC5yZWxhdGl2ZVRvKHBPZmZzZXQpOworICAgIHZhciBs
YXlvdXQgPSBlbGVtZW50LmdldExheW91dCgpOworCisgICAgZWxlbWVudC5zdG9yZSgncHJvdG90
eXBlX2Fic29sdXRpemVfb3JpZ2luYWxfc3R5bGVzJywgeworICAgICAgbGVmdDogICBlbGVtZW50
LmdldFN0eWxlKCdsZWZ0JyksCisgICAgICB0b3A6ICAgIGVsZW1lbnQuZ2V0U3R5bGUoJ3RvcCcp
LAorICAgICAgd2lkdGg6ICBlbGVtZW50LmdldFN0eWxlKCd3aWR0aCcpLAorICAgICAgaGVpZ2h0
OiBlbGVtZW50LmdldFN0eWxlKCdoZWlnaHQnKQorICAgIH0pOworCisgICAgZWxlbWVudC5zZXRT
dHlsZSh7CisgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKKyAgICAgIHRvcDogICAgb2Zmc2V0
LnRvcCArICdweCcsCisgICAgICBsZWZ0OiAgIG9mZnNldC5sZWZ0ICsgJ3B4JywKKyAgICAgIHdp
ZHRoOiAgbGF5b3V0LmdldCgnd2lkdGgnKSArICdweCcsCisgICAgICBoZWlnaHQ6IGxheW91dC5n
ZXQoJ2hlaWdodCcpICsgJ3B4JworICAgIH0pOworCisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0K
KworICBmdW5jdGlvbiByZWxhdGl2aXplKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKKyAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PT0g
J3JlbGF0aXZlJykgeworICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorCisgICAgdmFyIG9y
aWdpbmFsU3R5bGVzID0KKyAgICAgZWxlbWVudC5yZXRyaWV2ZSgncHJvdG90eXBlX2Fic29sdXRp
emVfb3JpZ2luYWxfc3R5bGVzJyk7CisKKyAgICBpZiAob3JpZ2luYWxTdHlsZXMpIGVsZW1lbnQu
c2V0U3R5bGUob3JpZ2luYWxTdHlsZXMpOworICAgIHJldHVybiBlbGVtZW50OworICB9CisKKyAg
aWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CisgICAgZ2V0T2Zmc2V0UGFyZW50ID0gZ2V0T2Zm
c2V0UGFyZW50LndyYXAoCisgICAgICBmdW5jdGlvbihwcm9jZWVkLCBlbGVtZW50KSB7CisgICAg
ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworCisgICAgICAgIGlmIChpc0RvY3VtZW50KGVsZW1l
bnQpIHx8IGlzRGV0YWNoZWQoZWxlbWVudCkgfHwgaXNCb2R5KGVsZW1lbnQpIHx8IGlzSHRtbChl
bGVtZW50KSkKKyAgICAgICAgICByZXR1cm4gJChkb2N1bWVudC5ib2R5KTsKKworICAgICAgICB2
YXIgcG9zaXRpb24gPSBlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpOworICAgICAgICBpZiAo
cG9zaXRpb24gIT09ICdzdGF0aWMnKSByZXR1cm4gcHJvY2VlZChlbGVtZW50KTsKKworICAgICAg
ICBlbGVtZW50LnNldFN0eWxlKHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSk7CisgICAgICAgIHZh
ciB2YWx1ZSA9IHByb2NlZWQoZWxlbWVudCk7CisgICAgICAgIGVsZW1lbnQuc2V0U3R5bGUoeyBw
b3NpdGlvbjogcG9zaXRpb24gfSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgIH0KKyAg
ICApOworCisgICAgcG9zaXRpb25lZE9mZnNldCA9IHBvc2l0aW9uZWRPZmZzZXQud3JhcChmdW5j
dGlvbihwcm9jZWVkLCBlbGVtZW50KSB7CisgICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAg
ICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm4gbmV3IEVsZW1lbnQuT2Zmc2V0KDAs
IDApOworICAgICAgdmFyIHBvc2l0aW9uID0gZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24nKTsK
KyAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHJldHVybiBwcm9jZWVkKGVsZW1lbnQp
OworCisgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKTsK
KyAgICAgIGlmIChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50LmdldFN0eWxlKCdwb3NpdGlv
bicpID09PSAnZml4ZWQnKQorICAgICAgICBoYXNMYXlvdXQob2Zmc2V0UGFyZW50KTsKKworICAg
ICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH0pOworICAgICAgdmFy
IHZhbHVlID0gcHJvY2VlZChlbGVtZW50KTsKKyAgICAgIGVsZW1lbnQuc2V0U3R5bGUoeyBwb3Np
dGlvbjogcG9zaXRpb24gfSk7CisgICAgICByZXR1cm4gdmFsdWU7CisgICAgfSk7CisgIH0gZWxz
ZSBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2Via2l0KSB7CisgICAgY3VtdWxhdGl2ZU9mZnNldCA9
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgICAg
dmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7CisgICAgICBkbyB7CisgICAgICAgIHZhbHVlVCAr
PSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKKyAgICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zm
c2V0TGVmdCB8fCAwOworICAgICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQgPT0gZG9jdW1l
bnQuYm9keSkKKyAgICAgICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRp
b24nKSA9PSAnYWJzb2x1dGUnKSBicmVhazsKKworICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5v
ZmZzZXRQYXJlbnQ7CisgICAgICB9IHdoaWxlIChlbGVtZW50KTsKKworICAgICAgcmV0dXJuIG5l
dyBFbGVtZW50Lk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7CisgICAgfTsKKyAgfQorCisKKyAgRWxl
bWVudC5hZGRNZXRob2RzKHsKKyAgICBnZXRMYXlvdXQ6ICAgICAgICAgICAgICBnZXRMYXlvdXQs
CisgICAgbWVhc3VyZTogICAgICAgICAgICAgICAgbWVhc3VyZSwKKyAgICBnZXREaW1lbnNpb25z
OiAgICAgICAgICBnZXREaW1lbnNpb25zLAorICAgIGdldE9mZnNldFBhcmVudDogICAgICAgIGdl
dE9mZnNldFBhcmVudCwKKyAgICBjdW11bGF0aXZlT2Zmc2V0OiAgICAgICBjdW11bGF0aXZlT2Zm
c2V0LAorICAgIHBvc2l0aW9uZWRPZmZzZXQ6ICAgICAgIHBvc2l0aW9uZWRPZmZzZXQsCisgICAg
Y3VtdWxhdGl2ZVNjcm9sbE9mZnNldDogY3VtdWxhdGl2ZVNjcm9sbE9mZnNldCwKKyAgICB2aWV3
cG9ydE9mZnNldDogICAgICAgICB2aWV3cG9ydE9mZnNldCwKKyAgICBhYnNvbHV0aXplOiAgICAg
ICAgICAgICBhYnNvbHV0aXplLAorICAgIHJlbGF0aXZpemU6ICAgICAgICAgICAgIHJlbGF0aXZp
emUKKyAgfSk7CisKKyAgZnVuY3Rpb24gaXNCb2R5KGVsZW1lbnQpIHsKKyAgICByZXR1cm4gZWxl
bWVudC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWSc7CisgIH0KKworICBmdW5jdGlv
biBpc0h0bWwoZWxlbWVudCkgeworICAgIHJldHVybiBlbGVtZW50Lm5vZGVOYW1lLnRvVXBwZXJD
YXNlKCkgPT09ICdIVE1MJzsKKyAgfQorCisgIGZ1bmN0aW9uIGlzRG9jdW1lbnQoZWxlbWVudCkg
eworICAgIHJldHVybiBlbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREU7Cisg
IH0KKworICBmdW5jdGlvbiBpc0RldGFjaGVkKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gZWxlbWVu
dCAhPT0gZG9jdW1lbnQuYm9keSAmJgorICAgICAhRWxlbWVudC5kZXNjZW5kYW50T2YoZWxlbWVu
dCwgZG9jdW1lbnQuYm9keSk7CisgIH0KKworICBpZiAoJ2dldEJvdW5kaW5nQ2xpZW50UmVjdCcg
aW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7CisgICAgRWxlbWVudC5hZGRNZXRob2RzKHsK
KyAgICAgIHZpZXdwb3J0T2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIGVsZW1l
bnQgPSAkKGVsZW1lbnQpOworICAgICAgICBpZiAoaXNEZXRhY2hlZChlbGVtZW50KSkgcmV0dXJu
IG5ldyBFbGVtZW50Lk9mZnNldCgwLCAwKTsKKworICAgICAgICB2YXIgcmVjdCA9IGVsZW1lbnQu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCisgICAgICAgICBkb2NFbCA9IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudDsKKyAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50Lk9mZnNldChyZWN0LmxlZnQg
LSBkb2NFbC5jbGllbnRMZWZ0LAorICAgICAgICAgcmVjdC50b3AgLSBkb2NFbC5jbGllbnRUb3Ap
OworICAgICAgfQorICAgIH0pOworICB9Cit9KSgpOword2luZG93LiQkID0gZnVuY3Rpb24oKSB7
CisgIHZhciBleHByZXNzaW9uID0gJEEoYXJndW1lbnRzKS5qb2luKCcsICcpOworICByZXR1cm4g
UHJvdG90eXBlLlNlbGVjdG9yLnNlbGVjdChleHByZXNzaW9uLCBkb2N1bWVudCk7Cit9OworCitQ
cm90b3R5cGUuU2VsZWN0b3IgPSAoZnVuY3Rpb24oKSB7CisKKyAgZnVuY3Rpb24gc2VsZWN0KCkg
eworICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kICJQcm90b3R5cGUuU2VsZWN0b3Iuc2VsZWN0
IiBtdXN0IGJlIGRlZmluZWQuJyk7CisgIH0KKworICBmdW5jdGlvbiBtYXRjaCgpIHsKKyAgICB0
aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCAiUHJvdG90eXBlLlNlbGVjdG9yLm1hdGNoIiBtdXN0IGJl
IGRlZmluZWQuJyk7CisgIH0KKworICBmdW5jdGlvbiBmaW5kKGVsZW1lbnRzLCBleHByZXNzaW9u
LCBpbmRleCkgeworICAgIGluZGV4ID0gaW5kZXggfHwgMDsKKyAgICB2YXIgbWF0Y2ggPSBQcm90
b3R5cGUuU2VsZWN0b3IubWF0Y2gsIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aCwgbWF0Y2hJbmRl
eCA9IDAsIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIGlm
IChtYXRjaChlbGVtZW50c1tpXSwgZXhwcmVzc2lvbikgJiYgaW5kZXggPT0gbWF0Y2hJbmRleCsr
KSB7CisgICAgICAgIHJldHVybiBFbGVtZW50LmV4dGVuZChlbGVtZW50c1tpXSk7CisgICAgICB9
CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZXh0ZW5kRWxlbWVudHMoZWxlbWVudHMpIHsKKyAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgIEVsZW1lbnQuZXh0ZW5kKGVsZW1lbnRzW2ldKTsKKyAgICB9CisgICAgcmV0
dXJuIGVsZW1lbnRzOworICB9CisKKworICB2YXIgSyA9IFByb3RvdHlwZS5LOworCisgIHJldHVy
biB7CisgICAgc2VsZWN0OiBzZWxlY3QsCisgICAgbWF0Y2g6IG1hdGNoLAorICAgIGZpbmQ6IGZp
bmQsCisgICAgZXh0ZW5kRWxlbWVudHM6IChFbGVtZW50LmV4dGVuZCA9PT0gSykgPyBLIDogZXh0
ZW5kRWxlbWVudHMsCisgICAgZXh0ZW5kRWxlbWVudDogRWxlbWVudC5leHRlbmQKKyAgfTsKK30p
KCk7CitQcm90b3R5cGUuX29yaWdpbmFsX3Byb3BlcnR5ID0gd2luZG93LlNpenpsZTsKKy8qIQor
ICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgLSB2MS4wCisgKiAgQ29weXJpZ2h0IDIwMDks
IFRoZSBEb2pvIEZvdW5kYXRpb24KKyAqICBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBCU0QsIGFu
ZCBHUEwgTGljZW5zZXMuCisgKiAgTW9yZSBpbmZvcm1hdGlvbjogaHR0cDovL3NpenpsZWpzLmNv
bS8KKyAqLworKGZ1bmN0aW9uKCl7CisKK3ZhciBjaHVua2VyID0gLygoPzpcKCg/OlwoW14oKV0r
XCl8W14oKV0rKStcKXxcWyg/OlxbW15bXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteW1xdJyJdKykr
XF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2cs
CisgICAgICAgIGRvbmUgPSAwLAorICAgICAgICB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmcsCisgICAgICAgIGhhc0R1cGxpY2F0ZSA9IGZhbHNlLAorICAgICAgICBiYXNlSGFz
RHVwbGljYXRlID0gdHJ1ZTsKKworWzAsIDBdLnNvcnQoZnVuY3Rpb24oKXsKKyAgICAgICAgYmFz
ZUhhc0R1cGxpY2F0ZSA9IGZhbHNlOworICAgICAgICByZXR1cm4gMDsKK30pOworCit2YXIgU2l6
emxlID0gZnVuY3Rpb24oc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQpIHsKKyAgICAg
ICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CisgICAgICAgIHZhciBvcmlnQ29udGV4dCA9IGNv
bnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworCisgICAgICAgIGlmICggY29udGV4dC5ub2Rl
VHlwZSAhPT0gMSAmJiBjb250ZXh0Lm5vZGVUeXBlICE9PSA5ICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBbXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIXNlbGVjdG9yIHx8IHR5cGVv
ZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcGFydHMgPSBbXSwgbSwgc2V0LCBjaGVja1Nl
dCwgY2hlY2ssIG1vZGUsIGV4dHJhLCBwcnVuZSA9IHRydWUsIGNvbnRleHRYTUwgPSBpc1hNTChj
b250ZXh0KSwKKyAgICAgICAgICAgICAgICBzb0ZhciA9IHNlbGVjdG9yOworCisgICAgICAgIHdo
aWxlICggKGNodW5rZXIuZXhlYygiIiksIG0gPSBjaHVua2VyLmV4ZWMoc29GYXIpKSAhPT0gbnVs
bCApIHsKKyAgICAgICAgICAgICAgICBzb0ZhciA9IG1bM107CisKKyAgICAgICAgICAgICAgICBw
YXJ0cy5wdXNoKCBtWzFdICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIG1bMl0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBleHRyYSA9IG1bM107CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHBh
cnRzLmxlbmd0aCA+IDEgJiYgb3JpZ1BPUy5leGVjKCBzZWxlY3RvciApICkgeworICAgICAgICAg
ICAgICAgIGlmICggcGFydHMubGVuZ3RoID09PSAyICYmIEV4cHIucmVsYXRpdmVbIHBhcnRzWzBd
IF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBwb3NQcm9jZXNzKCBwYXJ0c1sw
XSArIHBhcnRzWzFdLCBjb250ZXh0ICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNldCA9IEV4cHIucmVsYXRpdmVbIHBhcnRzWzBdIF0gPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIGNvbnRleHQgXSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNpenpsZSggcGFydHMuc2hpZnQoKSwgY29udGV4dCApOworCisg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHBhcnRzLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBwYXJ0cy5zaGlmdCgpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggRXhwci5yZWxhdGl2ZVsgc2VsZWN0b3Ig
XSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgKz0g
cGFydHMuc2hpZnQoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBw
b3NQcm9jZXNzKCBzZWxlY3Rvciwgc2V0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgg
IXNlZWQgJiYgcGFydHMubGVuZ3RoID4gMSAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmICFj
b250ZXh0WE1MICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHIubWF0Y2gu
SUQudGVzdChwYXJ0c1swXSkgJiYgIUV4cHIubWF0Y2guSUQudGVzdChwYXJ0c1twYXJ0cy5sZW5n
dGggLSAxXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gU2l6emxlLmZp
bmQoIHBhcnRzLnNoaWZ0KCksIGNvbnRleHQsIGNvbnRleHRYTUwgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQgPSByZXQuZXhwciA/IFNpenpsZS5maWx0ZXIoIHJldC5leHByLCBy
ZXQuc2V0IClbMF0gOiByZXQuc2V0WzBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmICggY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQg
PSBzZWVkID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBleHByOiBwYXJ0cy5w
b3AoKSwgc2V0OiBtYWtlQXJyYXkoc2VlZCkgfSA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNpenpsZS5maW5kKCBwYXJ0cy5wb3AoKSwgcGFydHMubGVuZ3RoID09PSAxICYmIChw
YXJ0c1swXSA9PT0gIn4iIHx8IHBhcnRzWzBdID09PSAiKyIpICYmIGNvbnRleHQucGFyZW50Tm9k
ZSA/IGNvbnRleHQucGFyZW50Tm9kZSA6IGNvbnRleHQsIGNvbnRleHRYTUwgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldCA9IHJldC5leHByID8gU2l6emxlLmZpbHRlciggcmV0LmV4cHIs
IHJldC5zZXQgKSA6IHJldC5zZXQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFy
dHMubGVuZ3RoID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tT
ZXQgPSBtYWtlQXJyYXkoc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggcGFydHMu
bGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gcGFy
dHMucG9wKCksIHBvcCA9IGN1cjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFFeHByLnJlbGF0aXZlWyBjdXIgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXIgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3AgPSBw
YXJ0cy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcG9wID09IG51bGwgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gY29udGV4dDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEV4cHIucmVsYXRpdmVbIGN1ciBdKCBjaGVja1NldCwgcG9wLCBjb250ZXh0WE1MICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNoZWNrU2V0ID0gcGFydHMgPSBbXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFjaGVja1NldCApIHsKKyAgICAgICAgICAgICAg
ICBjaGVja1NldCA9IHNldDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWNoZWNrU2V0ICkg
eworICAgICAgICAgICAgICAgIHRocm93ICJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHBy
ZXNzaW9uOiAiICsgKGN1ciB8fCBzZWxlY3Rvcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IHRvU3RyaW5nLmNhbGwoY2hlY2tTZXQpID09PSAiW29iamVjdCBBcnJheV0iICkgeworICAgICAg
ICAgICAgICAgIGlmICggIXBydW5lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
cy5wdXNoLmFwcGx5KCByZXN1bHRzLCBjaGVja1NldCApOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgY2hlY2tTZXRbaV0gIT0gbnVsbDsgaSsrICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNoZWNrU2V0W2ldICYmIChj
aGVja1NldFtpXSA9PT0gdHJ1ZSB8fCBjaGVja1NldFtpXS5ub2RlVHlwZSA9PT0gMSAmJiBjb250
YWlucyhjb250ZXh0LCBjaGVja1NldFtpXSkpICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggc2V0W2ldICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBj
aGVja1NldFtpXSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY2hlY2tTZXRbaV0gJiYgY2hlY2tTZXRbaV0ubm9kZVR5cGUgPT09IDEgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBzZXRb
aV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtYWtlQXJyYXkoIGNoZWNrU2V0LCByZXN1bHRzICk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIGV4dHJhICkgeworICAgICAgICAgICAgICAgIFNpenpsZSggZXh0cmEsIG9yaWdD
b250ZXh0LCByZXN1bHRzLCBzZWVkICk7CisgICAgICAgICAgICAgICAgU2l6emxlLnVuaXF1ZVNv
cnQoIHJlc3VsdHMgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHRzOworfTsK
KworU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXsKKyAgICAgICAgaWYgKCBz
b3J0T3JkZXIgKSB7CisgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gYmFzZUhhc0R1cGxp
Y2F0ZTsKKyAgICAgICAgICAgICAgICByZXN1bHRzLnNvcnQoc29ydE9yZGVyKTsKKworICAgICAg
ICAgICAgICAgIGlmICggaGFzRHVwbGljYXRlICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRzW2ldID09PSByZXN1bHRzW2ktMV0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zcGxpY2Uo
aS0tLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXN1bHRzOworfTsKKworU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbihleHByLCBzZXQp
eworICAgICAgICByZXR1cm4gU2l6emxlKGV4cHIsIG51bGwsIG51bGwsIHNldCk7Cit9OworCitT
aXp6bGUuZmluZCA9IGZ1bmN0aW9uKGV4cHIsIGNvbnRleHQsIGlzWE1MKXsKKyAgICAgICAgdmFy
IHNldCwgbWF0Y2g7CisKKyAgICAgICAgaWYgKCAhZXhwciApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gW107CisgICAgICAgIH0KKworICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBFeHBy
Lm9yZGVyLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICB2YXIgdHlwZSA9
IEV4cHIub3JkZXJbaV0sIG1hdGNoOworCisgICAgICAgICAgICAgICAgaWYgKCAobWF0Y2ggPSBF
eHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbGVmdCA9IG1hdGNoWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2guc3BsaWNlKDEsMSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGVmdC5zdWJz
dHIoIGxlZnQubGVuZ3RoIC0gMSApICE9PSAiXFwiICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaFsxXSA9IChtYXRjaFsxXSB8fCAiIikucmVwbGFjZSgvXFwvZywgIiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBFeHByLmZpbmRbIHR5cGUg
XSggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggc2V0ICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhc2V0ICkgeworICAgICAg
ICAgICAgICAgIHNldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB7c2V0OiBzZXQsIGV4cHI6IGV4cHJ9OworfTsKKworU2l6
emxlLmZpbHRlciA9IGZ1bmN0aW9uKGV4cHIsIHNldCwgaW5wbGFjZSwgbm90KXsKKyAgICAgICAg
dmFyIG9sZCA9IGV4cHIsIHJlc3VsdCA9IFtdLCBjdXJMb29wID0gc2V0LCBtYXRjaCwgYW55Rm91
bmQsCisgICAgICAgICAgICAgICAgaXNYTUxGaWx0ZXIgPSBzZXQgJiYgc2V0WzBdICYmIGlzWE1M
KHNldFswXSk7CisKKyAgICAgICAgd2hpbGUgKCBleHByICYmIHNldC5sZW5ndGggKSB7CisgICAg
ICAgICAgICAgICAgZm9yICggdmFyIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIChtYXRjaCA9IEV4cHIubWF0Y2hbIHR5cGUgXS5leGVjKCBleHBy
ICkpICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0
ZXIgPSBFeHByLmZpbHRlclsgdHlwZSBdLCBmb3VuZCwgaXRlbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW55Rm91bmQgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGN1ckxvb3AgPT0gcmVzdWx0ICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHBy
LnByZUZpbHRlclsgdHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gRXhwci5wcmVGaWx0ZXJbIHR5cGUgXSggbWF0Y2gsIGN1ckxvb3AsIGlu
cGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTEZpbHRlciApOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2ggKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaCA9
PT0gdHJ1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbWF0Y2ggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyAoaXRlbSA9IGN1ckxvb3BbaV0pICE9IG51bGw7
IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggaXRlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSBmaWx0ZXIoIGl0ZW0sIG1hdGNoLCBpLCBjdXJMb29wICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBwYXNzID0gbm90IF4gISFmb3VuZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlucGxhY2UgJiYgZm91bmQgIT0gbnVs
bCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHBhc3MgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3BbaV0gPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHBhc3MgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goIGl0ZW0g
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbnlGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZvdW5kICE9PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaW5wbGFjZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3AgPSBy
ZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgg
RXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhYW55Rm91bmQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIGV4cHIgPT0gb2xkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhbnlGb3Vu
ZCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAiU3lu
dGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIGV4cHI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBvbGQgPSBleHByOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGN1
ckxvb3A7Cit9OworCit2YXIgRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7CisgICAgICAgIG9y
ZGVyOiBbICJJRCIsICJOQU1FIiwgIlRBRyIgXSwKKyAgICAgICAgbWF0Y2g6IHsKKyAgICAgICAg
ICAgICAgICBJRDogLyMoKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKS8sCisgICAgICAgICAg
ICAgICAgQ0xBU1M6IC9cLigoPzpbXHdcdTAwYzAtXHVGRkZGLV18XFwuKSspLywKKyAgICAgICAg
ICAgICAgICBOQU1FOiAvXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKylb
JyJdKlxdLywKKyAgICAgICAgICAgICAgICBBVFRSOiAvXFtccyooKD86W1x3XHUwMGMwLVx1RkZG
Ri1dfFxcLikrKVxzKig/OihcUz89KVxzKihbJyJdKikoLio/KVwzfClccypcXS8sCisgICAgICAg
ICAgICAgICAgVEFHOiAvXigoPzpbXHdcdTAwYzAtXHVGRkZGXCotXXxcXC4pKykvLAorICAgICAg
ICAgICAgICAgIENISUxEOiAvOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlwoKGV2ZW58
b2RkfFtcZG4rLV0qKVwpKT8vLAorICAgICAgICAgICAgICAgIFBPUzogLzoobnRofGVxfGd0fGx0
fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXi1dfCQpLywKKyAgICAgICAg
ICAgICAgICBQU0VVRE86IC86KCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKykoPzpcKChbJyJd
KikoKD86XChbXlwpXStcKXxbXlwyXChcKV0qKSspXDJcKSk/LworICAgICAgICB9LAorICAgICAg
ICBsZWZ0TWF0Y2g6IHt9LAorICAgICAgICBhdHRyTWFwOiB7CisgICAgICAgICAgICAgICAgImNs
YXNzIjogImNsYXNzTmFtZSIsCisgICAgICAgICAgICAgICAgImZvciI6ICJodG1sRm9yIgorICAg
ICAgICB9LAorICAgICAgICBhdHRySGFuZGxlOiB7CisgICAgICAgICAgICAgICAgaHJlZjogZnVu
Y3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRy
aWJ1dGUoImhyZWYiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIHJl
bGF0aXZlOiB7CisgICAgICAgICAgICAgICAgIisiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwg
aXNYTUwpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUGFydFN0ciA9IHR5cGVvZiBw
YXJ0ID09PSAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYWcg
PSBpc1BhcnRTdHIgJiYgIS9cVy8udGVzdChwYXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNQYXJ0U3RyTm90VGFnID0gaXNQYXJ0U3RyICYmICFpc1RhZzsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpc1RhZyAmJiAhaXNYTUwgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MCwgbCA9IGNoZWNrU2V0Lmxlbmd0aCwgZWxlbTsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IGNoZWNrU2V0W2ldKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbS5w
cmV2aW91c1NpYmxpbmcpICYmIGVsZW0ubm9kZVR5cGUgIT09IDEgKSB7fQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBpc1BhcnRTdHJOb3RU
YWcgfHwgZWxlbSAmJiBlbGVtLm5vZGVOYW1lID09PSBwYXJ0ID8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gfHwgZmFsc2UgOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9PT0gcGFydDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzUGFydFN0ck5vdFRhZyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcGFydCwgY2hlY2tT
ZXQsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgICI+IjogZnVuY3Rpb24oY2hlY2tTZXQsIHBhcnQsIGlzWE1MKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1BhcnRTdHIgPSB0eXBlb2YgcGFydCA9PT0g
InN0cmluZyI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNQYXJ0U3RyICYmICEv
XFcvLnRlc3QocGFydCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQg
PSBpc1hNTCA/IHBhcnQgOiBwYXJ0LnRvVXBwZXJDYXNlKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoOyBpIDwg
bDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBl
bGVtID0gY2hlY2tTZXRbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0W2ldID0gcGFyZW50Lm5vZGVO
YW1lID09PSBwYXJ0ID8gcGFyZW50IDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBjaGVj
a1NldFtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGVja1NldFtpXSA9IGlzUGFydFN0ciA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9k
ZSA9PT0gcGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGlzUGFydFN0ciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTaXp6bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1NldCwgdHJ1ZSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiIjogZnVuY3Rpb24oY2hlY2tT
ZXQsIHBhcnQsIGlzWE1MKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb25lTmFtZSA9
IGRvbmUrKywgY2hlY2tGbiA9IGRpckNoZWNrOworCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICEvXFcvLnRlc3QocGFydCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBub2RlQ2hlY2sgPSBwYXJ0ID0gaXNYTUwgPyBwYXJ0IDogcGFydC50b1VwcGVyQ2FzZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGlyTm9kZUNoZWNr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBj
aGVja0ZuKCJwYXJlbnROb2RlIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ss
IGlzWE1MKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJ+IjogZnVuY3Rp
b24oY2hlY2tTZXQsIHBhcnQsIGlzWE1MKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBk
b25lTmFtZSA9IGRvbmUrKywgY2hlY2tGbiA9IGRpckNoZWNrOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGVvZiBwYXJ0ID09PSAic3RyaW5nIiAmJiAhL1xXLy50ZXN0KHBhcnQp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZUNoZWNrID0gcGFy
dCA9IGlzWE1MID8gcGFydCA6IHBhcnQudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tGbiA9IGRpck5vZGVDaGVjazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbigicHJldmlvdXNTaWJs
aW5nIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGZpbmQ6IHsKKyAgICAgICAgICAgICAg
ICBJRDogZnVuY3Rpb24obWF0Y2gsIGNvbnRleHQsIGlzWE1MKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQi
ICYmICFpc1hNTCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBj
b250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG0gPyBbbV0gOiBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIE5BTUU6IGZ1bmN0aW9uKG1hdGNo
LCBjb250ZXh0LCBpc1hNTCl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBj
b250ZXh0LmdldEVsZW1lbnRzQnlOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdLCByZXN1bHRzID0gY29udGV4dC5nZXRF
bGVtZW50c0J5TmFtZShtYXRjaFsxXSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gcmVzdWx0cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRzW2ldLmdl
dEF0dHJpYnV0ZSgibmFtZSIpID09PSBtYXRjaFsxXSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCByZXN1bHRzW2ldICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJldC5sZW5ndGggPT09IDAgPyBudWxsIDogcmV0OworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlvbihtYXRj
aCwgY29udGV4dCl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRF
bGVtZW50c0J5VGFnTmFtZShtYXRjaFsxXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICBwcmVGaWx0ZXI6IHsKKyAgICAgICAgICAgICAgICBDTEFTUzogZnVuY3Rpb24o
bWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaCA9ICIgIiArIG1hdGNoWzFdLnJlcGxhY2UoL1xcL2csICIiKSAr
ICIgIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1hNTCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07
IChlbGVtID0gY3VyTG9vcFtpXSkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBub3QgXiAoZWxlbS5jbGFzc05hbWUgJiYgKCIgIiArIGVsZW0uY2xh
c3NOYW1lICsgIiAiKS5pbmRleE9mKG1hdGNoKSA+PSAwKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVz
aCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIGlucGxhY2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJMb29wW2ldID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIElEOiBmdW5jdGlvbiht
YXRjaCl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV0ucmVwbGFjZSgv
XFwvZywgIiIpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgVEFHOiBmdW5j
dGlvbihtYXRjaCwgY3VyTG9vcCl7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGN1ckxvb3BbaV0gPT09IGZhbHNlOyBpKysgKXt9CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY3VyTG9vcFtpXSAmJiBpc1hNTChjdXJMb29wW2ldKSA/IG1hdGNoWzFdIDog
bWF0Y2hbMV0udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgIENISUxEOiBmdW5jdGlvbihtYXRjaCl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG1hdGNoWzFdID09ICJudGgiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdGVzdCA9IC8oLT8pKFxkKiluKCg/OlwrfC0pP1xkKikvLmV4ZWMoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPT0gImV2ZW4iICYmICIybiIgfHwg
bWF0Y2hbMl0gPT0gIm9kZCIgJiYgIjJuKzEiIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIS9cRC8udGVzdCggbWF0Y2hbMl0gKSAmJiAiMG4rIiArIG1hdGNoWzJd
IHx8IG1hdGNoWzJdKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsy
XSA9ICh0ZXN0WzFdICsgKHRlc3RbMl0gfHwgMSkpIC0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hbM10gPSB0ZXN0WzNdIC0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMF0gPSBkb25lKys7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIEFUVFI6IGZ1bmN0aW9uKG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCBy
ZXN1bHQsIG5vdCwgaXNYTUwpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBt
YXRjaFsxXS5yZXBsYWNlKC9cXC9nLCAiIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWlzWE1MICYmIEV4cHIuYXR0ck1hcFtuYW1lXSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hbMV0gPSBFeHByLmF0dHJNYXBbbmFtZV07CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMl0gPT09
ICJ+PSIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzRdID0gIiAi
ICsgbWF0Y2hbNF0gKyAiICI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIFBTRVVETzogZnVuY3Rpb24obWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3Vs
dCwgbm90KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gPT09ICJub3Qi
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggY2h1bmtlci5leGVj
KG1hdGNoWzNdKSB8fCAiIiApLmxlbmd0aCA+IDEgfHwgL15cdy8udGVzdChtYXRjaFszXSkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbM10gPSBTaXp6
bGUobWF0Y2hbM10sIG51bGwsIG51bGwsIGN1ckxvb3ApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciByZXQgPSBTaXp6bGUuZmlsdGVyKG1hdGNoWzNdLCBjdXJMb29wLCBpbnBsYWNlLCB0
cnVlIF4gbm90KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFpbnBsYWNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2guYXBwbHkoIHJlc3VsdCwgcmV0ICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggRXhwci5tYXRjaC5QT1MudGVz
dCggbWF0Y2hbMF0gKSB8fCBFeHByLm1hdGNoLkNISUxELnRlc3QoIG1hdGNoWzBdICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBQT1M6IGZ1bmN0aW9uKG1hdGNoKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLnVuc2hpZnQoIHRydWUgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgIGZpbHRlcnM6IHsKKyAgICAgICAgICAgICAgICBlbmFibGVkOiBmdW5jdGlv
bihlbGVtKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09
PSBmYWxzZSAmJiBlbGVtLnR5cGUgIT09ICJoaWRkZW4iOworICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBjaGVja2VkOiBmdW5jdGlvbihlbGVtKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtLmNoZWNrZWQgPT09IHRydWU7CisgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICBzZWxlY3RlZDogZnVuY3Rpb24oZWxlbSl7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOworICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgcGFyZW50OiBmdW5jdGlvbihlbGVtKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWVsZW0uZmlyc3RDaGlsZDsKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbihlbGVtKXsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhZWxlbS5maXJzdENoaWxkOworICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgaGFzOiBmdW5jdGlvbihlbGVtLCBpLCBtYXRjaCl7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFTaXp6bGUoIG1hdGNoWzNdLCBlbGVtICkubGVu
Z3RoOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgaGVhZGVyOiBmdW5jdGlv
bihlbGVtKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAvaFxkL2kudGVzdCggZWxl
bS5ub2RlTmFtZSApOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGV4dDog
ZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInRleHQiID09
PSBlbGVtLnR5cGU7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICByYWRpbzog
ZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInJhZGlvIiA9
PT0gZWxlbS50eXBlOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgY2hlY2ti
b3g6IGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjaGVj
a2JveCIgPT09IGVsZW0udHlwZTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
IGZpbGU6IGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJm
aWxlIiA9PT0gZWxlbS50eXBlOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
cGFzc3dvcmQ6IGZ1bmN0aW9uKGVsZW0peworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJwYXNzd29yZCIgPT09IGVsZW0udHlwZTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIHN1Ym1pdDogZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gInN1Ym1pdCIgPT09IGVsZW0udHlwZTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIGltYWdlOiBmdW5jdGlvbihlbGVtKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiaW1hZ2UiID09PSBlbGVtLnR5cGU7CisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICByZXNldDogZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gInJlc2V0IiA9PT0gZWxlbS50eXBlOworICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgYnV0dG9uOiBmdW5jdGlvbihlbGVtKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiYnV0dG9uIiA9PT0gZWxlbS50eXBlIHx8IGVsZW0ubm9kZU5hbWUudG9VcHBl
ckNhc2UoKSA9PT0gIkJVVFRPTiI7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICBpbnB1dDogZnVuY3Rpb24oZWxlbSl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
L2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGVsZW0ubm9kZU5hbWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgc2V0RmlsdGVyczogeworICAgICAg
ICAgICAgICAgIGZpcnN0OiBmdW5jdGlvbihlbGVtLCBpKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpID09PSAwOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
bGFzdDogZnVuY3Rpb24oZWxlbSwgaSwgbWF0Y2gsIGFycmF5KXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpID09PSBhcnJheS5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgZXZlbjogZnVuY3Rpb24oZWxlbSwgaSl7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaSAlIDIgPT09IDA7CisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICBvZGQ6IGZ1bmN0aW9uKGVsZW0sIGkpeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGkgJSAyID09PSAxOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgbHQ6IGZ1bmN0aW9uKGVsZW0sIGksIG1hdGNoKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpIDwgbWF0Y2hbM10gLSAwOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgZ3Q6IGZ1bmN0aW9uKGVsZW0sIGksIG1hdGNoKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpID4gbWF0Y2hbM10gLSAwOworICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgbnRoOiBmdW5jdGlvbihlbGVtLCBpLCBtYXRjaCl7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWF0Y2hbM10gLSAwID09IGk7CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICBlcTogZnVuY3Rpb24oZWxlbSwgaSwgbWF0Y2gpeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzNdIC0gMCA9PSBpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgZmlsdGVyOiB7CisgICAgICAgICAgICAgICAgUFNFVURPOiBm
dW5jdGlvbihlbGVtLCBtYXRjaCwgaSwgYXJyYXkpeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG5hbWUgPSBtYXRjaFsxXSwgZmlsdGVyID0gRXhwci5maWx0ZXJzWyBuYW1lIF07CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlsdGVyICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyKCBlbGVtLCBpLCBtYXRjaCwgYXJyYXkgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgPT09ICJjb250YWlucyIgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS50ZXh0Q29udGVu
dCB8fCBlbGVtLmlubmVyVGV4dCB8fCAiIikuaW5kZXhPZihtYXRjaFszXSkgPj0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgPT09ICJub3QiICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90ID0gbWF0Y2hbM107CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gbm90Lmxlbmd0aDsg
aSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5vdFtpXSA9PT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIENISUxEOiBm
dW5jdGlvbihlbGVtLCBtYXRjaCl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9
IG1hdGNoWzFdLCBub2RlID0gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvbmx5JzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmlyc3QnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlLnByZXZpb3Vz
U2libGluZykgKSAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT0gJ2ZpcnN0JykgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhc3QnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSAp
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG5vZGUubm9kZVR5cGUgPT09IDEgKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdudGgnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJz
dCA9IG1hdGNoWzJdLCBsYXN0ID0gbWF0Y2hbM107CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ID09IDEgJiYgbGFzdCA9PSAwICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbmVOYW1lID0gbWF0Y2hbMF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVt
LnBhcmVudE5vZGU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHBhcmVudCAmJiAocGFyZW50LnNpemNhY2hlICE9PSBkb25lTmFtZSB8fCAhZWxlbS5ub2Rl
SW5kZXgpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIG5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5v
ZGUubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLm5vZGVJbmRleCA9ICsrY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudC5zaXpjYWNoZSA9IGRvbmVOYW1lOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBkaWZmID0gZWxlbS5ub2RlSW5kZXggLSBsYXN0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3QgPT0gMCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWZmID09
IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIGRp
ZmYgJSBmaXJzdCA9PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgSUQ6IGZ1bmN0aW9uKGVsZW0sIG1hdGNo
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxICYm
IGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBtYXRjaDsKKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIFRBRzogZnVuY3Rpb24oZWxlbSwgbWF0Y2gpeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChtYXRjaCA9PT0gIioiICYmIGVsZW0ubm9kZVR5cGUgPT09IDEp
IHx8IGVsZW0ubm9kZU5hbWUgPT09IG1hdGNoOworICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgQ0xBU1M6IGZ1bmN0aW9uKGVsZW0sIG1hdGNoKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAoIiAiICsgKGVsZW0uY2xhc3NOYW1lIHx8IGVsZW0uZ2V0QXR0cmlidXRl
KCJjbGFzcyIpKSArICIgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmluZGV4
T2YoIG1hdGNoICkgPiAtMTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIEFU
VFI6IGZ1bmN0aW9uKGVsZW0sIG1hdGNoKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBu
YW1lID0gbWF0Y2hbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBdID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSggZWxlbSApIDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0gIT0gbnVsbCA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0g
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5n
ZXRBdHRyaWJ1dGUoIG5hbWUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSByZXN1bHQgKyAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9
IG1hdGNoWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayA9IG1hdGNo
WzRdOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAiIT0iIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gIj0iID8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9PT0gIio9IiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlLmluZGV4T2YoY2hlY2spID49IDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID09PSAifj0iID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIg
IiArIHZhbHVlICsgIiAiKS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIWNoZWNrID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgJiYgcmVzdWx0ICE9PSBmYWxzZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUgPT09ICIhPSIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSAhPSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICJe
PSIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5pbmRleE9mKGNoZWNr
KSA9PT0gMCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICIkPSIg
PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zdWJzdHIodmFsdWUubGVu
Z3RoIC0gY2hlY2subGVuZ3RoKSA9PT0gY2hlY2sgOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID09PSAifD0iID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPT09IGNoZWNrIHx8IHZhbHVlLnN1YnN0cigwLCBjaGVjay5sZW5ndGggKyAxKSA9PT0g
Y2hlY2sgKyAiLSIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIFBPUzogZnVuY3Rpb24oZWxlbSwgbWF0
Y2gsIGksIGFycmF5KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWF0Y2hb
Ml0sIGZpbHRlciA9IEV4cHIuc2V0RmlsdGVyc1sgbmFtZSBdOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGZpbHRlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9OworCit2YXIgb3JpZ1BP
UyA9IEV4cHIubWF0Y2guUE9TOworCitmb3IgKCB2YXIgdHlwZSBpbiBFeHByLm1hdGNoICkgewor
ICAgICAgICBFeHByLm1hdGNoWyB0eXBlIF0gPSBuZXcgUmVnRXhwKCBFeHByLm1hdGNoWyB0eXBl
IF0uc291cmNlICsgLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlICk7CisgICAgICAg
IEV4cHIubGVmdE1hdGNoWyB0eXBlIF0gPSBuZXcgUmVnRXhwKCAvKF4oPzoufFxyfFxuKSo/KS8u
c291cmNlICsgRXhwci5tYXRjaFsgdHlwZSBdLnNvdXJjZSApOworfQorCit2YXIgbWFrZUFycmF5
ID0gZnVuY3Rpb24oYXJyYXksIHJlc3VsdHMpIHsKKyAgICAgICAgYXJyYXkgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbCggYXJyYXksIDAgKTsKKworICAgICAgICBpZiAoIHJlc3VsdHMgKSB7
CisgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoLmFwcGx5KCByZXN1bHRzLCBhcnJheSApOwor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGFycmF5OworfTsKKwordHJ5IHsKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLCAwICk7CisKK30gY2F0Y2go
ZSl7CisgICAgICAgIG1ha2VBcnJheSA9IGZ1bmN0aW9uKGFycmF5LCByZXN1bHRzKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAgICAgICAgICAgICAgICBp
ZiAoIHRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAiW29iamVjdCBBcnJheV0iICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoIHJldCwgYXJyYXkg
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0eXBlb2YgYXJyYXkubGVuZ3RoID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsg
aSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNo
KCBhcnJheVtpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDA7IGFycmF5W2ldOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGFycmF5W2ldICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9OworfQor
Cit2YXIgc29ydE9yZGVyOworCitpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbiApIHsKKyAgICAgICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIg
KSB7CisgICAgICAgICAgICAgICAgaWYgKCAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAh
Yi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggYSA9PSBiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNEdXBsaWNh
dGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFy
IHJldCA9IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0ID8gLTEgOiBhID09PSBiID8g
MCA6IDE7CisgICAgICAgICAgICAgICAgaWYgKCByZXQgPT09IDAgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9OworfSBlbHNlIGlmICggInNvdXJjZUlu
ZGV4IiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgKSB7CisgICAgICAgIHNvcnRPcmRlciA9
IGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAgICAgICAgICAgIGlmICggIWEuc291cmNlSW5kZXgg
fHwgIWIuc291cmNlSW5kZXggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGEgPT0g
YiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciByZXQgPSBh
LnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDsKKyAgICAgICAgICAgICAgICBpZiAoIHJldCA9
PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH07
Cit9IGVsc2UgaWYgKCBkb2N1bWVudC5jcmVhdGVSYW5nZSApIHsKKyAgICAgICAgc29ydE9yZGVy
ID0gZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhYS5vd25lckRvY3Vt
ZW50IHx8ICFiLm93bmVyRG9jdW1lbnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGEgPT0gYiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBh
UmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICAgICAgICAgICAgYVJhbmdlLnNldFN0YXJ0KGEs
IDApOworICAgICAgICAgICAgICAgIGFSYW5nZS5zZXRFbmQoYSwgMCk7CisgICAgICAgICAgICAg
ICAgYlJhbmdlLnNldFN0YXJ0KGIsIDApOworICAgICAgICAgICAgICAgIGJSYW5nZS5zZXRFbmQo
YiwgMCk7CisgICAgICAgICAgICAgICAgdmFyIHJldCA9IGFSYW5nZS5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpOworICAgICAgICAgICAgICAgIGlmICgg
cmV0ID09PSAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAg
ICAgfTsKK30KKworKGZ1bmN0aW9uKCl7CisgICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2IiksCisgICAgICAgICAgICAgICAgaWQgPSAic2NyaXB0IiArIChuZXcg
RGF0ZSkuZ2V0VGltZSgpOworICAgICAgICBmb3JtLmlubmVySFRNTCA9ICI8YSBuYW1lPSciICsg
aWQgKyAiJy8+IjsKKworICAgICAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dDsKKyAgICAgICAgcm9vdC5pbnNlcnRCZWZvcmUoIGZvcm0sIHJvb3QuZmlyc3RDaGlsZCApOwor
CisgICAgICAgIGlmICggISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggaWQgKSApIHsKKyAgICAg
ICAgICAgICAgICBFeHByLmZpbmQuSUQgPSBmdW5jdGlvbihtYXRjaCwgY29udGV4dCwgaXNYTUwp
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50
QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbMV0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSA/IG0uaWQgPT09IG1hdGNoWzFd
IHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIG0uZ2V0QXR0
cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWUgPT09IG1hdGNoWzFdID8gW21dIDogdW5kZWZpbmVk
IDogW107CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgICAgIEV4cHIuZmlsdGVyLklEID0gZnVuY3Rpb24oZWxlbSwgbWF0Y2gpewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1
dGVOb2RlICE9PSAidW5kZWZpbmVkIiAmJiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBub2Rl
ICYmIG5vZGUubm9kZVZhbHVlID09PSBtYXRjaDsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICB9CisKKyAgICAgICAgcm9vdC5yZW1vdmVDaGlsZCggZm9ybSApOworICAgICAgICByb290ID0g
Zm9ybSA9IG51bGw7IC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCit9KSgpOworCisoZnVuY3Rpb24o
KXsKKworICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgIGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsKKwor
ICAgICAgICBpZiAoIGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aCA+IDAgKSB7
CisgICAgICAgICAgICAgICAgRXhwci5maW5kLlRBRyA9IGZ1bmN0aW9uKG1hdGNoLCBjb250ZXh0
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gY29udGV4dC5nZXRFbGVt
ZW50c0J5VGFnTmFtZShtYXRjaFsxXSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bWF0Y2hbMV0gPT09ICIqIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHRtcCA9IFtdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgcmVzdWx0c1tpXTsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcmVzdWx0c1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNoKCByZXN1bHRzW2ld
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0cyA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgfQorCisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiI7CisgICAg
ICAgIGlmICggZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5maXJzdENoaWxkLmdldEF0dHJp
YnV0ZSAhPT0gInVuZGVmaW5lZCIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJz
dENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpICE9PSAiIyIgKSB7CisgICAgICAgICAgICAgICAg
RXhwci5hdHRySGFuZGxlLmhyZWYgPSBmdW5jdGlvbihlbGVtKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgiaHJlZiIsIDIpOworICAgICAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICBkaXYgPSBudWxsOyAvLyByZWxlYXNlIG1lbW9y
eSBpbiBJRQorfSkoKTsKKworaWYgKCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKGZ1bmN0
aW9uKCl7CisgICAgICAgIHZhciBvbGRTaXp6bGUgPSBTaXp6bGUsIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxwIGNsYXNzPSdU
RVNUJz48L3A+IjsKKworICAgICAgICBpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsICYmIGRpdi5x
dWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCA9PT0gMCApIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTaXp6bGUgPSBmdW5jdGlvbihxdWVyeSwg
Y29udGV4dCwgZXh0cmEsIHNlZWQpeworICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0
IHx8IGRvY3VtZW50OworCisgICAgICAgICAgICAgICAgaWYgKCAhc2VlZCAmJiBjb250ZXh0Lm5v
ZGVUeXBlID09PSA5ICYmICFpc1hNTChjb250ZXh0KSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJy
YXkoIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChxdWVyeSksIGV4dHJhICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoKGUpe30KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb2xkU2l6emxlKHF1ZXJ5LCBjb250ZXh0LCBleHRyYSwgc2VlZCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZm9yICggdmFyIHByb3AgaW4gb2xkU2l6emxlICkgeworICAg
ICAgICAgICAgICAgIFNpenpsZVsgcHJvcCBdID0gb2xkU2l6emxlWyBwcm9wIF07CisgICAgICAg
IH0KKworICAgICAgICBkaXYgPSBudWxsOyAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQorfSkoKTsK
KworaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgKGZ1bmN0aW9uKCl7CisgICAgICAg
IHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgZGl2Lmlu
bmVySFRNTCA9ICI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwv
ZGl2PiI7CisKKyAgICAgICAgaWYgKCBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxl
bmd0aCA9PT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRpdi5sYXN0
Q2hpbGQuY2xhc3NOYW1lID0gImUiOworCisgICAgICAgIGlmICggZGl2LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUoImUiKS5sZW5ndGggPT09IDEgKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBFeHByLm9yZGVyLnNwbGljZSgxLCAwLCAiQ0xBU1MiKTsKKyAgICAgICAgRXhwci5m
aW5kLkNMQVNTID0gZnVuY3Rpb24obWF0Y2gsIGNvbnRleHQsIGlzWE1MKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSAidW5k
ZWZpbmVkIiAmJiAhaXNYTUwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG1hdGNoWzFdKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICAgICAgZGl2ID0gbnVsbDsgLy8gcmVsZWFzZSBtZW1vcnkgaW4g
SUUKK30pKCk7CisKK2Z1bmN0aW9uIGRpck5vZGVDaGVjayggZGlyLCBjdXIsIGRvbmVOYW1lLCBj
aGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApIHsKKyAgICAgICAgdmFyIHNpYkRpciA9IGRpciA9
PSAicHJldmlvdXNTaWJsaW5nIiAmJiAhaXNYTUw7CisgICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IGNoZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICB2YXIg
ZWxlbSA9IGNoZWNrU2V0W2ldOworICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggc2liRGlyICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpjYWNoZSA9IGRvbmVOYW1l
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IGk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxl
bVtkaXJdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gZmFsc2U7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNpemNhY2hlID09PSBkb25lTmFtZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGNoZWNrU2V0W2VsZW0u
c2l6c2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNYTUwgKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpemNhY2hlID0gZG9uZU5h
bWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpzZXQg
PSBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVOYW1lID09PSBjdXIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBlbGVtOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9
IGVsZW1bZGlyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgY2hlY2tTZXRbaV0gPSBtYXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
IH0KK30KKworZnVuY3Rpb24gZGlyQ2hlY2soIGRpciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQs
IG5vZGVDaGVjaywgaXNYTUwgKSB7CisgICAgICAgIHZhciBzaWJEaXIgPSBkaXIgPT0gInByZXZp
b3VzU2libGluZyIgJiYgIWlzWE1MOworICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVj
a1NldC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBj
aGVja1NldFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHNpYkRpciAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gaTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtW2Rpcl07
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBmYWxzZTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGVsZW0uc2l6Y2FjaGUgPT09IGRvbmVOYW1lICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWlzWE1MICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpjYWNoZSA9IGRvbmVOYW1lOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpzZXQg
PSBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjdXIgIT09ICJzdHJp
bmciICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBlbGVtID09PSBjdXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBTaXp6bGUuZmlsdGVyKCBjdXIsIFtl
bGVtXSApLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaCA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVtkaXJdOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IG1h
dGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCit2YXIgY29udGFpbnMgPSBk
b2N1bWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/ICBmdW5jdGlvbihhLCBiKXsKKyAgICAg
ICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAxNjsKK30gOiBmdW5jdGlv
bihhLCBiKXsKKyAgICAgICAgcmV0dXJuIGEgIT09IGIgJiYgKGEuY29udGFpbnMgPyBhLmNvbnRh
aW5zKGIpIDogdHJ1ZSk7Cit9OworCit2YXIgaXNYTUwgPSBmdW5jdGlvbihlbGVtKXsKKyAgICAg
ICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDkgJiYgZWxlbS5kb2N1bWVudEVsZW1lbnQubm9k
ZU5hbWUgIT09ICJIVE1MIiB8fAorICAgICAgICAgICAgICAgICEhZWxlbS5vd25lckRvY3VtZW50
ICYmIGVsZW0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1M
IjsKK307CisKK3ZhciBwb3NQcm9jZXNzID0gZnVuY3Rpb24oc2VsZWN0b3IsIGNvbnRleHQpewor
ICAgICAgICB2YXIgdG1wU2V0ID0gW10sIGxhdGVyID0gIiIsIG1hdGNoLAorICAgICAgICAgICAg
ICAgIHJvb3QgPSBjb250ZXh0Lm5vZGVUeXBlID8gW2NvbnRleHRdIDogY29udGV4dDsKKworICAg
ICAgICB3aGlsZSAoIChtYXRjaCA9IEV4cHIubWF0Y2guUFNFVURPLmV4ZWMoIHNlbGVjdG9yICkp
ICkgeworICAgICAgICAgICAgICAgIGxhdGVyICs9IG1hdGNoWzBdOworICAgICAgICAgICAgICAg
IHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSggRXhwci5tYXRjaC5QU0VVRE8sICIiICk7Cisg
ICAgICAgIH0KKworICAgICAgICBzZWxlY3RvciA9IEV4cHIucmVsYXRpdmVbc2VsZWN0b3JdID8g
c2VsZWN0b3IgKyAiKiIgOiBzZWxlY3RvcjsKKworICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwg
PSByb290Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBTaXp6bGUoIHNl
bGVjdG9yLCByb290W2ldLCB0bXBTZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBT
aXp6bGUuZmlsdGVyKCBsYXRlciwgdG1wU2V0ICk7Cit9OworCisKK3dpbmRvdy5TaXp6bGUgPSBT
aXp6bGU7CisKK30pKCk7CisKKzsoZnVuY3Rpb24oZW5naW5lKSB7CisgIHZhciBleHRlbmRFbGVt
ZW50cyA9IFByb3RvdHlwZS5TZWxlY3Rvci5leHRlbmRFbGVtZW50czsKKworICBmdW5jdGlvbiBz
ZWxlY3Qoc2VsZWN0b3IsIHNjb3BlKSB7CisgICAgcmV0dXJuIGV4dGVuZEVsZW1lbnRzKGVuZ2lu
ZShzZWxlY3Rvciwgc2NvcGUgfHwgZG9jdW1lbnQpKTsKKyAgfQorCisgIGZ1bmN0aW9uIG1hdGNo
KGVsZW1lbnQsIHNlbGVjdG9yKSB7CisgICAgcmV0dXJuIGVuZ2luZS5tYXRjaGVzKHNlbGVjdG9y
LCBbZWxlbWVudF0pLmxlbmd0aCA9PSAxOworICB9CisKKyAgUHJvdG90eXBlLlNlbGVjdG9yLmVu
Z2luZSA9IGVuZ2luZTsKKyAgUHJvdG90eXBlLlNlbGVjdG9yLnNlbGVjdCA9IHNlbGVjdDsKKyAg
UHJvdG90eXBlLlNlbGVjdG9yLm1hdGNoID0gbWF0Y2g7Cit9KShTaXp6bGUpOworCit3aW5kb3cu
U2l6emxlID0gUHJvdG90eXBlLl9vcmlnaW5hbF9wcm9wZXJ0eTsKK2RlbGV0ZSBQcm90b3R5cGUu
X29yaWdpbmFsX3Byb3BlcnR5OworCit2YXIgRm9ybSA9IHsKKyAgcmVzZXQ6IGZ1bmN0aW9uKGZv
cm0pIHsKKyAgICBmb3JtID0gJChmb3JtKTsKKyAgICBmb3JtLnJlc2V0KCk7CisgICAgcmV0dXJu
IGZvcm07CisgIH0sCisKKyAgc2VyaWFsaXplRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBv
cHRpb25zKSB7CisgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9ICdvYmplY3QnKSBvcHRpb25zID0g
eyBoYXNoOiAhIW9wdGlvbnMgfTsKKyAgICBlbHNlIGlmIChPYmplY3QuaXNVbmRlZmluZWQob3B0
aW9ucy5oYXNoKSkgb3B0aW9ucy5oYXNoID0gdHJ1ZTsKKyAgICB2YXIga2V5LCB2YWx1ZSwgc3Vi
bWl0dGVkID0gZmFsc2UsIHN1Ym1pdCA9IG9wdGlvbnMuc3VibWl0LCBhY2N1bXVsYXRvciwgaW5p
dGlhbDsKKworICAgIGlmIChvcHRpb25zLmhhc2gpIHsKKyAgICAgIGluaXRpYWwgPSB7fTsKKyAg
ICAgIGFjY3VtdWxhdG9yID0gZnVuY3Rpb24ocmVzdWx0LCBrZXksIHZhbHVlKSB7CisgICAgICAg
IGlmIChrZXkgaW4gcmVzdWx0KSB7CisgICAgICAgICAgaWYgKCFPYmplY3QuaXNBcnJheShyZXN1
bHRba2V5XSkpIHJlc3VsdFtrZXldID0gW3Jlc3VsdFtrZXldXTsKKyAgICAgICAgICByZXN1bHRb
a2V5XS5wdXNoKHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHJlc3VsdFtrZXldID0gdmFsdWU7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICBpbml0
aWFsID0gJyc7CisgICAgICBhY2N1bXVsYXRvciA9IGZ1bmN0aW9uKHJlc3VsdCwga2V5LCB2YWx1
ZSkgeworICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHJlc3VsdCA/ICcmJyA6ICcnKSArIGVuY29k
ZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsKKyAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZWxlbWVudHMuaW5qZWN0KGluaXRpYWwsIGZ1bmN0
aW9uKHJlc3VsdCwgZWxlbWVudCkgeworICAgICAgaWYgKCFlbGVtZW50LmRpc2FibGVkICYmIGVs
ZW1lbnQubmFtZSkgeworICAgICAgICBrZXkgPSBlbGVtZW50Lm5hbWU7IHZhbHVlID0gJChlbGVt
ZW50KS5nZXRWYWx1ZSgpOworICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBlbGVtZW50LnR5
cGUgIT0gJ2ZpbGUnICYmIChlbGVtZW50LnR5cGUgIT0gJ3N1Ym1pdCcgfHwgKCFzdWJtaXR0ZWQg
JiYKKyAgICAgICAgICAgIHN1Ym1pdCAhPT0gZmFsc2UgJiYgKCFzdWJtaXQgfHwga2V5ID09IHN1
Ym1pdCkgJiYgKHN1Ym1pdHRlZCA9IHRydWUpKSkpIHsKKyAgICAgICAgICByZXN1bHQgPSBhY2N1
bXVsYXRvcihyZXN1bHQsIGtleSwgdmFsdWUpOworICAgICAgICB9CisgICAgICB9CisgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0pOworICB9Cit9OworCitGb3JtLk1ldGhvZHMgPSB7CisgIHNl
cmlhbGl6ZTogZnVuY3Rpb24oZm9ybSwgb3B0aW9ucykgeworICAgIHJldHVybiBGb3JtLnNlcmlh
bGl6ZUVsZW1lbnRzKEZvcm0uZ2V0RWxlbWVudHMoZm9ybSksIG9wdGlvbnMpOworICB9LAorCisg
IGdldEVsZW1lbnRzOiBmdW5jdGlvbihmb3JtKSB7CisgICAgdmFyIGVsZW1lbnRzID0gJChmb3Jt
KS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLAorICAgICAgICBlbGVtZW50LAorICAgICAgICBh
cnIgPSBbIF0sCisgICAgICAgIHNlcmlhbGl6ZXJzID0gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJz
OworICAgIGZvciAodmFyIGkgPSAwOyBlbGVtZW50ID0gZWxlbWVudHNbaV07IGkrKykgeworICAg
ICAgYXJyLnB1c2goZWxlbWVudCk7CisgICAgfQorICAgIHJldHVybiBhcnIuaW5qZWN0KFtdLCBm
dW5jdGlvbihlbGVtZW50cywgY2hpbGQpIHsKKyAgICAgIGlmIChzZXJpYWxpemVyc1tjaGlsZC50
YWdOYW1lLnRvTG93ZXJDYXNlKCldKQorICAgICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0
ZW5kKGNoaWxkKSk7CisgICAgICByZXR1cm4gZWxlbWVudHM7CisgICAgfSkKKyAgfSwKKworICBn
ZXRJbnB1dHM6IGZ1bmN0aW9uKGZvcm0sIHR5cGVOYW1lLCBuYW1lKSB7CisgICAgZm9ybSA9ICQo
Zm9ybSk7CisgICAgdmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0
Jyk7CisKKyAgICBpZiAoIXR5cGVOYW1lICYmICFuYW1lKSByZXR1cm4gJEEoaW5wdXRzKS5tYXAo
RWxlbWVudC5leHRlbmQpOworCisgICAgZm9yICh2YXIgaSA9IDAsIG1hdGNoaW5nSW5wdXRzID0g
W10sIGxlbmd0aCA9IGlucHV0cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgdmFy
IGlucHV0ID0gaW5wdXRzW2ldOworICAgICAgaWYgKCh0eXBlTmFtZSAmJiBpbnB1dC50eXBlICE9
IHR5cGVOYW1lKSB8fCAobmFtZSAmJiBpbnB1dC5uYW1lICE9IG5hbWUpKQorICAgICAgICBjb250
aW51ZTsKKyAgICAgIG1hdGNoaW5nSW5wdXRzLnB1c2goRWxlbWVudC5leHRlbmQoaW5wdXQpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbWF0Y2hpbmdJbnB1dHM7CisgIH0sCisKKyAgZGlzYWJsZTog
ZnVuY3Rpb24oZm9ybSkgeworICAgIGZvcm0gPSAkKGZvcm0pOworICAgIEZvcm0uZ2V0RWxlbWVu
dHMoZm9ybSkuaW52b2tlKCdkaXNhYmxlJyk7CisgICAgcmV0dXJuIGZvcm07CisgIH0sCisKKyAg
ZW5hYmxlOiBmdW5jdGlvbihmb3JtKSB7CisgICAgZm9ybSA9ICQoZm9ybSk7CisgICAgRm9ybS5n
ZXRFbGVtZW50cyhmb3JtKS5pbnZva2UoJ2VuYWJsZScpOworICAgIHJldHVybiBmb3JtOworICB9
LAorCisgIGZpbmRGaXJzdEVsZW1lbnQ6IGZ1bmN0aW9uKGZvcm0pIHsKKyAgICB2YXIgZWxlbWVu
dHMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCkuZmluZEFsbChmdW5jdGlvbihlbGVtZW50KSB7Cisg
ICAgICByZXR1cm4gJ2hpZGRlbicgIT0gZWxlbWVudC50eXBlICYmICFlbGVtZW50LmRpc2FibGVk
OworICAgIH0pOworICAgIHZhciBmaXJzdEJ5SW5kZXggPSBlbGVtZW50cy5maW5kQWxsKGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgndGFiSW5k
ZXgnKSAmJiBlbGVtZW50LnRhYkluZGV4ID49IDA7CisgICAgfSkuc29ydEJ5KGZ1bmN0aW9uKGVs
ZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQudGFiSW5kZXggfSkuZmlyc3QoKTsKKworICAgIHJldHVy
biBmaXJzdEJ5SW5kZXggPyBmaXJzdEJ5SW5kZXggOiBlbGVtZW50cy5maW5kKGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKKyAgICAgIHJldHVybiAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2kudGVz
dChlbGVtZW50LnRhZ05hbWUpOworICAgIH0pOworICB9LAorCisgIGZvY3VzRmlyc3RFbGVtZW50
OiBmdW5jdGlvbihmb3JtKSB7CisgICAgZm9ybSA9ICQoZm9ybSk7CisgICAgdmFyIGVsZW1lbnQg
PSBmb3JtLmZpbmRGaXJzdEVsZW1lbnQoKTsKKyAgICBpZiAoZWxlbWVudCkgZWxlbWVudC5hY3Rp
dmF0ZSgpOworICAgIHJldHVybiBmb3JtOworICB9LAorCisgIHJlcXVlc3Q6IGZ1bmN0aW9uKGZv
cm0sIG9wdGlvbnMpIHsKKyAgICBmb3JtID0gJChmb3JtKSwgb3B0aW9ucyA9IE9iamVjdC5jbG9u
ZShvcHRpb25zIHx8IHsgfSk7CisKKyAgICB2YXIgcGFyYW1zID0gb3B0aW9ucy5wYXJhbWV0ZXJz
LCBhY3Rpb24gPSBmb3JtLnJlYWRBdHRyaWJ1dGUoJ2FjdGlvbicpIHx8ICcnOworICAgIGlmIChh
Y3Rpb24uYmxhbmsoKSkgYWN0aW9uID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CisgICAgb3B0aW9u
cy5wYXJhbWV0ZXJzID0gZm9ybS5zZXJpYWxpemUodHJ1ZSk7CisKKyAgICBpZiAocGFyYW1zKSB7
CisgICAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKHBhcmFtcykpIHBhcmFtcyA9IHBhcmFtcy50b1F1
ZXJ5UGFyYW1zKCk7CisgICAgICBPYmplY3QuZXh0ZW5kKG9wdGlvbnMucGFyYW1ldGVycywgcGFy
YW1zKTsKKyAgICB9CisKKyAgICBpZiAoZm9ybS5oYXNBdHRyaWJ1dGUoJ21ldGhvZCcpICYmICFv
cHRpb25zLm1ldGhvZCkKKyAgICAgIG9wdGlvbnMubWV0aG9kID0gZm9ybS5tZXRob2Q7CisKKyAg
ICByZXR1cm4gbmV3IEFqYXguUmVxdWVzdChhY3Rpb24sIG9wdGlvbnMpOworICB9Cit9OworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCitGb3JtLkVsZW1lbnQgPSB7CisgIGZvY3VzOiBmdW5j
dGlvbihlbGVtZW50KSB7CisgICAgJChlbGVtZW50KS5mb2N1cygpOworICAgIHJldHVybiBlbGVt
ZW50OworICB9LAorCisgIHNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICQoZWxlbWVu
dCkuc2VsZWN0KCk7CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0KK307CisKK0Zvcm0uRWxlbWVu
dC5NZXRob2RzID0geworCisgIHNlcmlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVtZW50
Lm5hbWUpIHsKKyAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0VmFsdWUoKTsKKyAgICAgIGlm
ICh2YWx1ZSAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgdmFyIHBhaXIgPSB7IH07CisgICAgICAg
IHBhaXJbZWxlbWVudC5uYW1lXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gT2JqZWN0LnRvUXVl
cnlTdHJpbmcocGFpcik7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiAnJzsKKyAgfSwKKwor
ICBnZXRWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OworICAgIHZhciBtZXRob2QgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKKyAgICBy
ZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW21ldGhvZF0oZWxlbWVudCk7CisgIH0sCisK
KyAgc2V0VmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CisgICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7CisgICAgdmFyIG1ldGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgp
OworICAgIEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRob2RdKGVsZW1lbnQsIHZhbHVlKTsK
KyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCkg
eworICAgICQoZWxlbWVudCkudmFsdWUgPSAnJzsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwK
KworICBwcmVzZW50OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICQoZWxlbWVudCku
dmFsdWUgIT0gJyc7CisgIH0sCisKKyAgYWN0aXZhdGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAg
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB0cnkgeworICAgICAgZWxlbWVudC5mb2N1cygp
OworICAgICAgaWYgKGVsZW1lbnQuc2VsZWN0ICYmIChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNh
c2UoKSAhPSAnaW5wdXQnIHx8CisgICAgICAgICAgISgvXig/OmJ1dHRvbnxyZXNldHxzdWJtaXQp
JC9pLnRlc3QoZWxlbWVudC50eXBlKSkpKQorICAgICAgICBlbGVtZW50LnNlbGVjdCgpOworICAg
IH0gY2F0Y2ggKGUpIHsgfQorICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIGRpc2FibGU6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBlbGVt
ZW50LmRpc2FibGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBlbmFi
bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBl
bGVtZW50LmRpc2FibGVkID0gZmFsc2U7CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0KK307CisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2YXIgRmllbGQgPSBGb3JtLkVsZW1lbnQ7CisKK3Zh
ciAkRiA9IEZvcm0uRWxlbWVudC5NZXRob2RzLmdldFZhbHVlOworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKworRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzID0gKGZ1bmN0aW9uKCkgeworICBmdW5j
dGlvbiBpbnB1dChlbGVtZW50LCB2YWx1ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudC50eXBlLnRv
TG93ZXJDYXNlKCkpIHsKKyAgICAgIGNhc2UgJ2NoZWNrYm94JzoKKyAgICAgIGNhc2UgJ3JhZGlv
JzoKKyAgICAgICAgcmV0dXJuIGlucHV0U2VsZWN0b3IoZWxlbWVudCwgdmFsdWUpOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHZhbHVlU2VsZWN0b3IoZWxlbWVudCwgdmFsdWUpOwor
ICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGlucHV0U2VsZWN0b3IoZWxlbWVudCwgdmFsdWUpIHsK
KyAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkKKyAgICAgIHJldHVybiBlbGVtZW50
LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogbnVsbDsKKyAgICBlbHNlIGVsZW1lbnQuY2hlY2tl
ZCA9ICEhdmFsdWU7CisgIH0KKworICBmdW5jdGlvbiB2YWx1ZVNlbGVjdG9yKGVsZW1lbnQsIHZh
bHVlKSB7CisgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybiBlbGVtZW50
LnZhbHVlOworICAgIGVsc2UgZWxlbWVudC52YWx1ZSA9IHZhbHVlOworICB9CisKKyAgZnVuY3Rp
b24gc2VsZWN0KGVsZW1lbnQsIHZhbHVlKSB7CisgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZCh2
YWx1ZSkpCisgICAgICByZXR1cm4gKGVsZW1lbnQudHlwZSA9PT0gJ3NlbGVjdC1vbmUnID8gc2Vs
ZWN0T25lIDogc2VsZWN0TWFueSkoZWxlbWVudCk7CisKKyAgICB2YXIgb3B0LCBjdXJyZW50VmFs
dWUsIHNpbmdsZSA9ICFPYmplY3QuaXNBcnJheSh2YWx1ZSk7CisgICAgZm9yICh2YXIgaSA9IDAs
IGxlbmd0aCA9IGVsZW1lbnQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIG9wdCA9
IGVsZW1lbnQub3B0aW9uc1tpXTsKKyAgICAgIGN1cnJlbnRWYWx1ZSA9IHRoaXMub3B0aW9uVmFs
dWUob3B0KTsKKyAgICAgIGlmIChzaW5nbGUpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9
PSB2YWx1ZSkgeworICAgICAgICAgIG9wdC5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIG9wdC5zZWxlY3RlZCA9IHZhbHVl
LmluY2x1ZGUoY3VycmVudFZhbHVlKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBzZWxlY3RP
bmUoZWxlbWVudCkgeworICAgIHZhciBpbmRleCA9IGVsZW1lbnQuc2VsZWN0ZWRJbmRleDsKKyAg
ICByZXR1cm4gaW5kZXggPj0gMCA/IG9wdGlvblZhbHVlKGVsZW1lbnQub3B0aW9uc1tpbmRleF0p
IDogbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9uIHNlbGVjdE1hbnkoZWxlbWVudCkgeworICAgIHZh
ciB2YWx1ZXMsIGxlbmd0aCA9IGVsZW1lbnQubGVuZ3RoOworICAgIGlmICghbGVuZ3RoKSByZXR1
cm4gbnVsbDsKKworICAgIGZvciAodmFyIGkgPSAwLCB2YWx1ZXMgPSBbXTsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICB2YXIgb3B0ID0gZWxlbWVudC5vcHRpb25zW2ldOworICAgICAgaWYgKG9w
dC5zZWxlY3RlZCkgdmFsdWVzLnB1c2gob3B0aW9uVmFsdWUob3B0KSk7CisgICAgfQorICAgIHJl
dHVybiB2YWx1ZXM7CisgIH0KKworICBmdW5jdGlvbiBvcHRpb25WYWx1ZShvcHQpIHsKKyAgICBy
ZXR1cm4gRWxlbWVudC5oYXNBdHRyaWJ1dGUob3B0LCAndmFsdWUnKSA/IG9wdC52YWx1ZSA6IG9w
dC50ZXh0OworICB9CisKKyAgcmV0dXJuIHsKKyAgICBpbnB1dDogICAgICAgICBpbnB1dCwKKyAg
ICBpbnB1dFNlbGVjdG9yOiBpbnB1dFNlbGVjdG9yLAorICAgIHRleHRhcmVhOiAgICAgIHZhbHVl
U2VsZWN0b3IsCisgICAgc2VsZWN0OiAgICAgICAgc2VsZWN0LAorICAgIHNlbGVjdE9uZTogICAg
IHNlbGVjdE9uZSwKKyAgICBzZWxlY3RNYW55OiAgICBzZWxlY3RNYW55LAorICAgIG9wdGlvblZh
bHVlOiAgIG9wdGlvblZhbHVlLAorICAgIGJ1dHRvbjogICAgICAgIHZhbHVlU2VsZWN0b3IKKyAg
fTsKK30pKCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKK0Fic3RyYWN0LlRpbWVkT2Jz
ZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoUGVyaW9kaWNhbEV4ZWN1dGVyLCB7CisgIGluaXRpYWxpemU6
IGZ1bmN0aW9uKCRzdXBlciwgZWxlbWVudCwgZnJlcXVlbmN5LCBjYWxsYmFjaykgeworICAgICRz
dXBlcihjYWxsYmFjaywgZnJlcXVlbmN5KTsKKyAgICB0aGlzLmVsZW1lbnQgICA9ICQoZWxlbWVu
dCk7CisgICAgdGhpcy5sYXN0VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7CisgIH0sCisKKyAgZXhl
Y3V0ZTogZnVuY3Rpb24oKSB7CisgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOworICAg
IGlmIChPYmplY3QuaXNTdHJpbmcodGhpcy5sYXN0VmFsdWUpICYmIE9iamVjdC5pc1N0cmluZyh2
YWx1ZSkgPworICAgICAgICB0aGlzLmxhc3RWYWx1ZSAhPSB2YWx1ZSA6IFN0cmluZyh0aGlzLmxh
c3RWYWx1ZSkgIT0gU3RyaW5nKHZhbHVlKSkgeworICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVs
ZW1lbnQsIHZhbHVlKTsKKyAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7CisgICAgfQorICB9
Cit9KTsKKworRm9ybS5FbGVtZW50Lk9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3RyYWN0LlRp
bWVkT2JzZXJ2ZXIsIHsKKyAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBGb3Jt
LkVsZW1lbnQuZ2V0VmFsdWUodGhpcy5lbGVtZW50KTsKKyAgfQorfSk7CisKK0Zvcm0uT2JzZXJ2
ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuVGltZWRPYnNlcnZlciwgeworICBnZXRWYWx1ZTog
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7Cisg
IH0KK30pOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworQWJzdHJhY3QuRXZlbnRPYnNlcnZl
ciA9IENsYXNzLmNyZWF0ZSh7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNhbGxi
YWNrKSB7CisgICAgdGhpcy5lbGVtZW50ICA9ICQoZWxlbWVudCk7CisgICAgdGhpcy5jYWxsYmFj
ayA9IGNhbGxiYWNrOworCisgICAgdGhpcy5sYXN0VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7Cisg
ICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2Zvcm0nKQorICAg
ICAgdGhpcy5yZWdpc3RlckZvcm1DYWxsYmFja3MoKTsKKyAgICBlbHNlCisgICAgICB0aGlzLnJl
Z2lzdGVyQ2FsbGJhY2sodGhpcy5lbGVtZW50KTsKKyAgfSwKKworICBvbkVsZW1lbnRFdmVudDog
ZnVuY3Rpb24oKSB7CisgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOworICAgIGlmICh0
aGlzLmxhc3RWYWx1ZSAhPSB2YWx1ZSkgeworICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1l
bnQsIHZhbHVlKTsKKyAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7CisgICAgfQorICB9LAor
CisgIHJlZ2lzdGVyRm9ybUNhbGxiYWNrczogZnVuY3Rpb24oKSB7CisgICAgRm9ybS5nZXRFbGVt
ZW50cyh0aGlzLmVsZW1lbnQpLmVhY2godGhpcy5yZWdpc3RlckNhbGxiYWNrLCB0aGlzKTsKKyAg
fSwKKworICByZWdpc3RlckNhbGxiYWNrOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgaWYgKGVs
ZW1lbnQudHlwZSkgeworICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSkg
eworICAgICAgICBjYXNlICdjaGVja2JveCc6CisgICAgICAgIGNhc2UgJ3JhZGlvJzoKKyAgICAg
ICAgICBFdmVudC5vYnNlcnZlKGVsZW1lbnQsICdjbGljaycsIHRoaXMub25FbGVtZW50RXZlbnQu
YmluZCh0aGlzKSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgRXZlbnQub2JzZXJ2ZShlbGVtZW50LCAnY2hhbmdlJywgdGhpcy5vbkVsZW1lbnRFdmVudC5i
aW5kKHRoaXMpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KK30pOwor
CitGb3JtLkVsZW1lbnQuRXZlbnRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5FdmVu
dE9ic2VydmVyLCB7CisgIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRm9ybS5F
bGVtZW50LmdldFZhbHVlKHRoaXMuZWxlbWVudCk7CisgIH0KK30pOworCitGb3JtLkV2ZW50T2Jz
ZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuRXZlbnRPYnNlcnZlciwgeworICBnZXRWYWx1
ZTogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7
CisgIH0KK30pOworKGZ1bmN0aW9uKCkgeworCisgIHZhciBFdmVudCA9IHsKKyAgICBLRVlfQkFD
S1NQQUNFOiA4LAorICAgIEtFWV9UQUI6ICAgICAgIDksCisgICAgS0VZX1JFVFVSTjogICAxMywK
KyAgICBLRVlfRVNDOiAgICAgIDI3LAorICAgIEtFWV9MRUZUOiAgICAgMzcsCisgICAgS0VZX1VQ
OiAgICAgICAzOCwKKyAgICBLRVlfUklHSFQ6ICAgIDM5LAorICAgIEtFWV9ET1dOOiAgICAgNDAs
CisgICAgS0VZX0RFTEVURTogICA0NiwKKyAgICBLRVlfSE9NRTogICAgIDM2LAorICAgIEtFWV9F
TkQ6ICAgICAgMzUsCisgICAgS0VZX1BBR0VVUDogICAzMywKKyAgICBLRVlfUEFHRURPV046IDM0
LAorICAgIEtFWV9JTlNFUlQ6ICAgNDUsCisKKyAgICBjYWNoZToge30KKyAgfTsKKworICB2YXIg
ZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgIHZhciBNT1VTRUVOVEVSX01PVVNF
TEVBVkVfRVZFTlRTX1NVUFBPUlRFRCA9ICdvbm1vdXNlZW50ZXInIGluIGRvY0VsCisgICAgJiYg
J29ubW91c2VsZWF2ZScgaW4gZG9jRWw7CisKKworCisgIHZhciBpc0lFTGVnYWN5RXZlbnQgPSBm
dW5jdGlvbihldmVudCkgeyByZXR1cm4gZmFsc2U7IH07CisKKyAgaWYgKHdpbmRvdy5hdHRhY2hF
dmVudCkgeworICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgeworICAgICAgaXNJRUxl
Z2FjeUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgcmV0dXJuICEoZXZlbnQgaW5z
dGFuY2VvZiB3aW5kb3cuRXZlbnQpOworICAgICAgfTsKKyAgICB9IGVsc2UgeworICAgICAgaXNJ
RUxlZ2FjeUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsgcmV0dXJuIHRydWU7IH07CisgICAgfQor
ICB9CisKKyAgdmFyIF9pc0J1dHRvbjsKKworICBmdW5jdGlvbiBfaXNCdXR0b25Gb3JET01FdmVu
dHMoZXZlbnQsIGNvZGUpIHsKKyAgICByZXR1cm4gZXZlbnQud2hpY2ggPyAoZXZlbnQud2hpY2gg
PT09IGNvZGUgKyAxKSA6IChldmVudC5idXR0b24gPT09IGNvZGUpOworICB9CisKKyAgdmFyIGxl
Z2FjeUJ1dHRvbk1hcCA9IHsgMDogMSwgMTogNCwgMjogMiB9OworICBmdW5jdGlvbiBfaXNCdXR0
b25Gb3JMZWdhY3lFdmVudHMoZXZlbnQsIGNvZGUpIHsKKyAgICByZXR1cm4gZXZlbnQuYnV0dG9u
ID09PSBsZWdhY3lCdXR0b25NYXBbY29kZV07CisgIH0KKworICBmdW5jdGlvbiBfaXNCdXR0b25G
b3JXZWJLaXQoZXZlbnQsIGNvZGUpIHsKKyAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgIGNhc2Ug
MDogcmV0dXJuIGV2ZW50LndoaWNoID09IDEgJiYgIWV2ZW50Lm1ldGFLZXk7CisgICAgICBjYXNl
IDE6IHJldHVybiBldmVudC53aGljaCA9PSAyIHx8IChldmVudC53aGljaCA9PSAxICYmIGV2ZW50
Lm1ldGFLZXkpOworICAgICAgY2FzZSAyOiByZXR1cm4gZXZlbnQud2hpY2ggPT0gMzsKKyAgICAg
IGRlZmF1bHQ6IHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICBpZiAod2luZG93LmF0dGFj
aEV2ZW50KSB7CisgICAgaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgeworICAgICAgX2lz
QnV0dG9uID0gX2lzQnV0dG9uRm9yTGVnYWN5RXZlbnRzOworICAgIH0gZWxzZSB7CisgICAgICBf
aXNCdXR0b24gPSBmdW5jdGlvbihldmVudCwgY29kZSkgeworICAgICAgICByZXR1cm4gaXNJRUxl
Z2FjeUV2ZW50KGV2ZW50KSA/IF9pc0J1dHRvbkZvckxlZ2FjeUV2ZW50cyhldmVudCwgY29kZSkg
OgorICAgICAgICAgX2lzQnV0dG9uRm9yRE9NRXZlbnRzKGV2ZW50LCBjb2RlKTsKKyAgICAgIH0K
KyAgICB9CisgIH0gZWxzZSBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB7CisgICAgX2lz
QnV0dG9uID0gX2lzQnV0dG9uRm9yV2ViS2l0OworICB9IGVsc2UgeworICAgIF9pc0J1dHRvbiA9
IF9pc0J1dHRvbkZvckRPTUV2ZW50czsKKyAgfQorCisgIGZ1bmN0aW9uIGlzTGVmdENsaWNrKGV2
ZW50KSAgIHsgcmV0dXJuIF9pc0J1dHRvbihldmVudCwgMCkgfQorCisgIGZ1bmN0aW9uIGlzTWlk
ZGxlQ2xpY2soZXZlbnQpIHsgcmV0dXJuIF9pc0J1dHRvbihldmVudCwgMSkgfQorCisgIGZ1bmN0
aW9uIGlzUmlnaHRDbGljayhldmVudCkgIHsgcmV0dXJuIF9pc0J1dHRvbihldmVudCwgMikgfQor
CisgIGZ1bmN0aW9uIGVsZW1lbnQoZXZlbnQpIHsKKyAgICBldmVudCA9IEV2ZW50LmV4dGVuZChl
dmVudCk7CisKKyAgICB2YXIgbm9kZSA9IGV2ZW50LnRhcmdldCwgdHlwZSA9IGV2ZW50LnR5cGUs
CisgICAgIGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0OworCisgICAgaWYgKGN1
cnJlbnRUYXJnZXQgJiYgY3VycmVudFRhcmdldC50YWdOYW1lKSB7CisgICAgICBpZiAodHlwZSA9
PT0gJ2xvYWQnIHx8IHR5cGUgPT09ICdlcnJvcicgfHwKKyAgICAgICAgKHR5cGUgPT09ICdjbGlj
aycgJiYgY3VycmVudFRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcKKyAg
ICAgICAgICAmJiBjdXJyZW50VGFyZ2V0LnR5cGUgPT09ICdyYWRpbycpKQorICAgICAgICAgICAg
bm9kZSA9IGN1cnJlbnRUYXJnZXQ7CisgICAgfQorCisgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0g
Tm9kZS5URVhUX05PREUpCisgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOworCisgICAgcmV0
dXJuIEVsZW1lbnQuZXh0ZW5kKG5vZGUpOworICB9CisKKyAgZnVuY3Rpb24gZmluZEVsZW1lbnQo
ZXZlbnQsIGV4cHJlc3Npb24pIHsKKyAgICB2YXIgZWxlbWVudCA9IEV2ZW50LmVsZW1lbnQoZXZl
bnQpOworCisgICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gZWxlbWVudDsKKyAgICB3aGlsZSAo
ZWxlbWVudCkgeworICAgICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoZWxlbWVudCkgJiYgUHJvdG90
eXBlLlNlbGVjdG9yLm1hdGNoKGVsZW1lbnQsIGV4cHJlc3Npb24pKSB7CisgICAgICAgIHJldHVy
biBFbGVtZW50LmV4dGVuZChlbGVtZW50KTsKKyAgICAgIH0KKyAgICAgIGVsZW1lbnQgPSBlbGVt
ZW50LnBhcmVudE5vZGU7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gcG9pbnRlcihldmVudCkg
eworICAgIHJldHVybiB7IHg6IHBvaW50ZXJYKGV2ZW50KSwgeTogcG9pbnRlclkoZXZlbnQpIH07
CisgIH0KKworICBmdW5jdGlvbiBwb2ludGVyWChldmVudCkgeworICAgIHZhciBkb2NFbGVtZW50
ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAorICAgICBib2R5ID0gZG9jdW1lbnQuYm9keSB8
fCB7IHNjcm9sbExlZnQ6IDAgfTsKKworICAgIHJldHVybiBldmVudC5wYWdlWCB8fCAoZXZlbnQu
Y2xpZW50WCArCisgICAgICAoZG9jRWxlbWVudC5zY3JvbGxMZWZ0IHx8IGJvZHkuc2Nyb2xsTGVm
dCkgLQorICAgICAgKGRvY0VsZW1lbnQuY2xpZW50TGVmdCB8fCAwKSk7CisgIH0KKworICBmdW5j
dGlvbiBwb2ludGVyWShldmVudCkgeworICAgIHZhciBkb2NFbGVtZW50ID0gZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LAorICAgICBib2R5ID0gZG9jdW1lbnQuYm9keSB8fCB7IHNjcm9sbFRvcDog
MCB9OworCisgICAgcmV0dXJuICBldmVudC5wYWdlWSB8fCAoZXZlbnQuY2xpZW50WSArCisgICAg
ICAgKGRvY0VsZW1lbnQuc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wKSAtCisgICAgICAgKGRv
Y0VsZW1lbnQuY2xpZW50VG9wIHx8IDApKTsKKyAgfQorCisKKyAgZnVuY3Rpb24gc3RvcChldmVu
dCkgeworICAgIEV2ZW50LmV4dGVuZChldmVudCk7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKKyAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKworICAgIGV2ZW50LnN0b3BwZWQgPSB0
cnVlOworICB9CisKKworICBFdmVudC5NZXRob2RzID0geworICAgIGlzTGVmdENsaWNrOiAgIGlz
TGVmdENsaWNrLAorICAgIGlzTWlkZGxlQ2xpY2s6IGlzTWlkZGxlQ2xpY2ssCisgICAgaXNSaWdo
dENsaWNrOiAgaXNSaWdodENsaWNrLAorCisgICAgZWxlbWVudDogICAgIGVsZW1lbnQsCisgICAg
ZmluZEVsZW1lbnQ6IGZpbmRFbGVtZW50LAorCisgICAgcG9pbnRlcjogIHBvaW50ZXIsCisgICAg
cG9pbnRlclg6IHBvaW50ZXJYLAorICAgIHBvaW50ZXJZOiBwb2ludGVyWSwKKworICAgIHN0b3A6
IHN0b3AKKyAgfTsKKworICB2YXIgbWV0aG9kcyA9IE9iamVjdC5rZXlzKEV2ZW50Lk1ldGhvZHMp
LmluamVjdCh7IH0sIGZ1bmN0aW9uKG0sIG5hbWUpIHsKKyAgICBtW25hbWVdID0gRXZlbnQuTWV0
aG9kc1tuYW1lXS5tZXRob2RpemUoKTsKKyAgICByZXR1cm4gbTsKKyAgfSk7CisKKyAgaWYgKHdp
bmRvdy5hdHRhY2hFdmVudCkgeworICAgIGZ1bmN0aW9uIF9yZWxhdGVkVGFyZ2V0KGV2ZW50KSB7
CisgICAgICB2YXIgZWxlbWVudDsKKyAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgeworICAgICAg
ICBjYXNlICdtb3VzZW92ZXInOgorICAgICAgICBjYXNlICdtb3VzZWVudGVyJzoKKyAgICAgICAg
ICBlbGVtZW50ID0gZXZlbnQuZnJvbUVsZW1lbnQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ21vdXNlb3V0JzoKKyAgICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6CisgICAgICAgICAg
ZWxlbWVudCA9IGV2ZW50LnRvRWxlbWVudDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBFbGVt
ZW50LmV4dGVuZChlbGVtZW50KTsKKyAgICB9CisKKyAgICB2YXIgYWRkaXRpb25hbE1ldGhvZHMg
PSB7CisgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeyB0aGlzLmNhbmNlbEJ1YmJs
ZSA9IHRydWUgfSwKKyAgICAgIHByZXZlbnREZWZhdWx0OiAgZnVuY3Rpb24oKSB7IHRoaXMucmV0
dXJuVmFsdWUgPSBmYWxzZSB9LAorICAgICAgaW5zcGVjdDogZnVuY3Rpb24oKSB7IHJldHVybiAn
W29iamVjdCBFdmVudF0nIH0KKyAgICB9OworCisgICAgRXZlbnQuZXh0ZW5kID0gZnVuY3Rpb24o
ZXZlbnQsIGVsZW1lbnQpIHsKKyAgICAgIGlmICghZXZlbnQpIHJldHVybiBmYWxzZTsKKworICAg
ICAgaWYgKCFpc0lFTGVnYWN5RXZlbnQoZXZlbnQpKSByZXR1cm4gZXZlbnQ7CisKKyAgICAgIGlm
IChldmVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSkgcmV0dXJuIGV2ZW50OworICAgICAgZXZlbnQu
X2V4dGVuZGVkQnlQcm90b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKKworICAgICAg
dmFyIHBvaW50ZXIgPSBFdmVudC5wb2ludGVyKGV2ZW50KTsKKworICAgICAgT2JqZWN0LmV4dGVu
ZChldmVudCwgeworICAgICAgICB0YXJnZXQ6IGV2ZW50LnNyY0VsZW1lbnQgfHwgZWxlbWVudCwK
KyAgICAgICAgcmVsYXRlZFRhcmdldDogX3JlbGF0ZWRUYXJnZXQoZXZlbnQpLAorICAgICAgICBw
YWdlWDogIHBvaW50ZXIueCwKKyAgICAgICAgcGFnZVk6ICBwb2ludGVyLnkKKyAgICAgIH0pOwor
CisgICAgICBPYmplY3QuZXh0ZW5kKGV2ZW50LCBtZXRob2RzKTsKKyAgICAgIE9iamVjdC5leHRl
bmQoZXZlbnQsIGFkZGl0aW9uYWxNZXRob2RzKTsKKworICAgICAgcmV0dXJuIGV2ZW50OworICAg
IH07CisgIH0gZWxzZSB7CisgICAgRXZlbnQuZXh0ZW5kID0gUHJvdG90eXBlLks7CisgIH0KKwor
ICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsKKyAgICBFdmVudC5wcm90b3R5cGUgPSB3
aW5kb3cuRXZlbnQucHJvdG90eXBlIHx8IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRz
JykuX19wcm90b19fOworICAgIE9iamVjdC5leHRlbmQoRXZlbnQucHJvdG90eXBlLCBtZXRob2Rz
KTsKKyAgfQorCisgIGZ1bmN0aW9uIF9jcmVhdGVSZXNwb25kZXIoZWxlbWVudCwgZXZlbnROYW1l
LCBoYW5kbGVyKSB7CisgICAgdmFyIHJlZ2lzdHJ5ID0gRWxlbWVudC5yZXRyaWV2ZShlbGVtZW50
LCAncHJvdG90eXBlX2V2ZW50X3JlZ2lzdHJ5Jyk7CisKKyAgICBpZiAoT2JqZWN0LmlzVW5kZWZp
bmVkKHJlZ2lzdHJ5KSkgeworICAgICAgQ0FDSEUucHVzaChlbGVtZW50KTsKKyAgICAgIHJlZ2lz
dHJ5ID0gRWxlbWVudC5yZXRyaWV2ZShlbGVtZW50LCAncHJvdG90eXBlX2V2ZW50X3JlZ2lzdHJ5
JywgJEgoKSk7CisgICAgfQorCisgICAgdmFyIHJlc3BvbmRlcnNGb3JFdmVudCA9IHJlZ2lzdHJ5
LmdldChldmVudE5hbWUpOworICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQocmVzcG9uZGVyc0Zv
ckV2ZW50KSkgeworICAgICAgcmVzcG9uZGVyc0ZvckV2ZW50ID0gW107CisgICAgICByZWdpc3Ry
eS5zZXQoZXZlbnROYW1lLCByZXNwb25kZXJzRm9yRXZlbnQpOworICAgIH0KKworICAgIGlmIChy
ZXNwb25kZXJzRm9yRXZlbnQucGx1Y2soJ2hhbmRsZXInKS5pbmNsdWRlKGhhbmRsZXIpKSByZXR1
cm4gZmFsc2U7CisKKyAgICB2YXIgcmVzcG9uZGVyOworICAgIGlmIChldmVudE5hbWUuaW5jbHVk
ZSgiOiIpKSB7CisgICAgICByZXNwb25kZXIgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBp
ZiAoT2JqZWN0LmlzVW5kZWZpbmVkKGV2ZW50LmV2ZW50TmFtZSkpCisgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmIChldmVudC5ldmVudE5hbWUgIT09IGV2ZW50TmFtZSkKKyAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRXZlbnQuZXh0ZW5kKGV2ZW50LCBlbGVt
ZW50KTsKKyAgICAgICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKKyAgICAgIH07Cisg
ICAgfSBlbHNlIHsKKyAgICAgIGlmICghTU9VU0VFTlRFUl9NT1VTRUxFQVZFX0VWRU5UU19TVVBQ
T1JURUQgJiYKKyAgICAgICAoZXZlbnROYW1lID09PSAibW91c2VlbnRlciIgfHwgZXZlbnROYW1l
ID09PSAibW91c2VsZWF2ZSIpKSB7CisgICAgICAgIGlmIChldmVudE5hbWUgPT09ICJtb3VzZWVu
dGVyIiB8fCBldmVudE5hbWUgPT09ICJtb3VzZWxlYXZlIikgeworICAgICAgICAgIHJlc3BvbmRl
ciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBFdmVudC5leHRlbmQoZXZlbnQsIGVs
ZW1lbnQpOworCisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDsK
KyAgICAgICAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSBlbGVtZW50KSB7CisgICAg
ICAgICAgICAgIHRyeSB7IHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOyB9CisgICAgICAgICAg
ICAgIGNhdGNoKGUpIHsgcGFyZW50ID0gZWxlbWVudDsgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAocGFyZW50ID09PSBlbGVtZW50KSByZXR1cm47CisKKyAgICAgICAgICAgIGhh
bmRsZXIuY2FsbChlbGVtZW50LCBldmVudCk7CisgICAgICAgICAgfTsKKyAgICAgICAgfQorICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmVzcG9uZGVyID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgICBFdmVudC5leHRlbmQoZXZlbnQsIGVsZW1lbnQpOworICAgICAgICAgIGhhbmRsZXIuY2Fs
bChlbGVtZW50LCBldmVudCk7CisgICAgICAgIH07CisgICAgICB9CisgICAgfQorCisgICAgcmVz
cG9uZGVyLmhhbmRsZXIgPSBoYW5kbGVyOworICAgIHJlc3BvbmRlcnNGb3JFdmVudC5wdXNoKHJl
c3BvbmRlcik7CisgICAgcmV0dXJuIHJlc3BvbmRlcjsKKyAgfQorCisgIGZ1bmN0aW9uIF9kZXN0
cm95Q2FjaGUoKSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IENBQ0hFLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBFdmVudC5zdG9wT2JzZXJ2aW5nKENBQ0hFW2ldKTsK
KyAgICAgIENBQ0hFW2ldID0gbnVsbDsKKyAgICB9CisgIH0KKworICB2YXIgQ0FDSEUgPSBbXTsK
KworICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpCisgICAgd2luZG93LmF0dGFjaEV2ZW50KCdv
bnVubG9hZCcsIF9kZXN0cm95Q2FjaGUpOworCisgIGlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJL
aXQpCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIFByb3RvdHlwZS5lbXB0
eUZ1bmN0aW9uLCBmYWxzZSk7CisKKworICB2YXIgX2dldERPTUV2ZW50TmFtZSA9IFByb3RvdHlw
ZS5LLAorICAgICAgdHJhbnNsYXRpb25zID0geyBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwgbW91
c2VsZWF2ZTogIm1vdXNlb3V0IiB9OworCisgIGlmICghTU9VU0VFTlRFUl9NT1VTRUxFQVZFX0VW
RU5UU19TVVBQT1JURUQpIHsKKyAgICBfZ2V0RE9NRXZlbnROYW1lID0gZnVuY3Rpb24oZXZlbnRO
YW1lKSB7CisgICAgICByZXR1cm4gKHRyYW5zbGF0aW9uc1tldmVudE5hbWVdIHx8IGV2ZW50TmFt
ZSk7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIG9ic2VydmUoZWxlbWVudCwgZXZlbnROYW1l
LCBoYW5kbGVyKSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisKKyAgICB2YXIgcmVzcG9u
ZGVyID0gX2NyZWF0ZVJlc3BvbmRlcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpOworCisg
ICAgaWYgKCFyZXNwb25kZXIpIHJldHVybiBlbGVtZW50OworCisgICAgaWYgKGV2ZW50TmFtZS5p
bmNsdWRlKCc6JykpIHsKKyAgICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpCisgICAg
ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZGF0YWF2YWlsYWJsZSIsIHJlc3BvbmRlciwg
ZmFsc2UpOworICAgICAgZWxzZSB7CisgICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoIm9uZGF0
YWF2YWlsYWJsZSIsIHJlc3BvbmRlcik7CisgICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoIm9u
bG9zZWNhcHR1cmUiLCByZXNwb25kZXIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB2
YXIgYWN0dWFsRXZlbnROYW1lID0gX2dldERPTUV2ZW50TmFtZShldmVudE5hbWUpOworCisgICAg
ICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKQorICAgICAgICBlbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoYWN0dWFsRXZlbnROYW1lLCByZXNwb25kZXIsIGZhbHNlKTsKKyAgICAgIGVsc2UK
KyAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgib24iICsgYWN0dWFsRXZlbnROYW1lLCByZXNw
b25kZXIpOworICAgIH0KKworICAgIHJldHVybiBlbGVtZW50OworICB9CisKKyAgZnVuY3Rpb24g
c3RvcE9ic2VydmluZyhlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHsKKyAgICBlbGVtZW50
ID0gJChlbGVtZW50KTsKKworICAgIHZhciByZWdpc3RyeSA9IEVsZW1lbnQucmV0cmlldmUoZWxl
bWVudCwgJ3Byb3RvdHlwZV9ldmVudF9yZWdpc3RyeScpOworICAgIGlmICghcmVnaXN0cnkpIHJl
dHVybiBlbGVtZW50OworCisgICAgaWYgKCFldmVudE5hbWUpIHsKKyAgICAgIHJlZ2lzdHJ5LmVh
Y2goIGZ1bmN0aW9uKHBhaXIpIHsKKyAgICAgICAgdmFyIGV2ZW50TmFtZSA9IHBhaXIua2V5Owor
ICAgICAgICBzdG9wT2JzZXJ2aW5nKGVsZW1lbnQsIGV2ZW50TmFtZSk7CisgICAgICB9KTsKKyAg
ICAgIHJldHVybiBlbGVtZW50OworICAgIH0KKworICAgIHZhciByZXNwb25kZXJzID0gcmVnaXN0
cnkuZ2V0KGV2ZW50TmFtZSk7CisgICAgaWYgKCFyZXNwb25kZXJzKSByZXR1cm4gZWxlbWVudDsK
KworICAgIGlmICghaGFuZGxlcikgeworICAgICAgcmVzcG9uZGVycy5lYWNoKGZ1bmN0aW9uKHIp
IHsKKyAgICAgICAgc3RvcE9ic2VydmluZyhlbGVtZW50LCBldmVudE5hbWUsIHIuaGFuZGxlcik7
CisgICAgICB9KTsKKyAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KKworICAgIHZhciBpID0g
cmVzcG9uZGVycy5sZW5ndGgsIHJlc3BvbmRlcjsKKyAgICB3aGlsZSAoaS0tKSB7CisgICAgICBp
ZiAocmVzcG9uZGVyc1tpXS5oYW5kbGVyID09PSBoYW5kbGVyKSB7CisgICAgICAgIHJlc3BvbmRl
ciA9IHJlc3BvbmRlcnNbaV07CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBp
ZiAoIXJlc3BvbmRlcikgcmV0dXJuIGVsZW1lbnQ7CisKKyAgICBpZiAoZXZlbnROYW1lLmluY2x1
ZGUoJzonKSkgeworICAgICAgaWYgKGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikKKyAgICAg
ICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkYXRhYXZhaWxhYmxlIiwgcmVzcG9uZGVy
LCBmYWxzZSk7CisgICAgICBlbHNlIHsKKyAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgib25k
YXRhYXZhaWxhYmxlIiwgcmVzcG9uZGVyKTsKKyAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgi
b25sb3NlY2FwdHVyZSIsIHJlc3BvbmRlcik7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
IHZhciBhY3R1YWxFdmVudE5hbWUgPSBfZ2V0RE9NRXZlbnROYW1lKGV2ZW50TmFtZSk7CisgICAg
ICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKQorICAgICAgICBlbGVtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIoYWN0dWFsRXZlbnROYW1lLCByZXNwb25kZXIsIGZhbHNlKTsKKyAgICAg
IGVsc2UKKyAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgYWN0dWFsRXZlbnROYW1l
LCByZXNwb25kZXIpOworICAgIH0KKworICAgIHJlZ2lzdHJ5LnNldChldmVudE5hbWUsIHJlc3Bv
bmRlcnMud2l0aG91dChyZXNwb25kZXIpKTsKKworICAgIHJldHVybiBlbGVtZW50OworICB9CisK
KyAgZnVuY3Rpb24gZmlyZShlbGVtZW50LCBldmVudE5hbWUsIG1lbW8sIGJ1YmJsZSkgeworICAg
IGVsZW1lbnQgPSAkKGVsZW1lbnQpOworCisgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChidWJi
bGUpKQorICAgICAgYnViYmxlID0gdHJ1ZTsKKworICAgIGlmIChlbGVtZW50ID09IGRvY3VtZW50
ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmICFlbGVtZW50LmRpc3BhdGNoRXZlbnQpCisgICAg
ICBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworCisgICAgdmFyIGV2ZW50Owor
ICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkgeworICAgICAgZXZlbnQgPSBkb2N1bWVudC5j
cmVhdGVFdmVudCgnSFRNTEV2ZW50cycpOworICAgICAgZXZlbnQuaW5pdEV2ZW50KCdkYXRhYXZh
aWxhYmxlJywgYnViYmxlLCB0cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgZXZlbnQgPSBkb2N1
bWVudC5jcmVhdGVFdmVudE9iamVjdCgpOworICAgICAgZXZlbnQuZXZlbnRUeXBlID0gYnViYmxl
ID8gJ29uZGF0YWF2YWlsYWJsZScgOiAnb25sb3NlY2FwdHVyZSc7CisgICAgfQorCisgICAgZXZl
bnQuZXZlbnROYW1lID0gZXZlbnROYW1lOworICAgIGV2ZW50Lm1lbW8gPSBtZW1vIHx8IHsgfTsK
KworICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkKKyAgICAgIGVsZW1lbnQuZGlzcGF0Y2hF
dmVudChldmVudCk7CisgICAgZWxzZQorICAgICAgZWxlbWVudC5maXJlRXZlbnQoZXZlbnQuZXZl
bnRUeXBlLCBldmVudCk7CisKKyAgICByZXR1cm4gRXZlbnQuZXh0ZW5kKGV2ZW50KTsKKyAgfQor
CisgIEV2ZW50LkhhbmRsZXIgPSBDbGFzcy5jcmVhdGUoeworICAgIGluaXRpYWxpemU6IGZ1bmN0
aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGNhbGxiYWNrKSB7CisgICAgICB0aGlz
LmVsZW1lbnQgICA9ICQoZWxlbWVudCk7CisgICAgICB0aGlzLmV2ZW50TmFtZSA9IGV2ZW50TmFt
ZTsKKyAgICAgIHRoaXMuc2VsZWN0b3IgID0gc2VsZWN0b3I7CisgICAgICB0aGlzLmNhbGxiYWNr
ICA9IGNhbGxiYWNrOworICAgICAgdGhpcy5oYW5kbGVyICAgPSB0aGlzLmhhbmRsZUV2ZW50LmJp
bmQodGhpcyk7CisgICAgfSwKKworICAgIHN0YXJ0OiBmdW5jdGlvbigpIHsKKyAgICAgIEV2ZW50
Lm9ic2VydmUodGhpcy5lbGVtZW50LCB0aGlzLmV2ZW50TmFtZSwgdGhpcy5oYW5kbGVyKTsKKyAg
ICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBzdG9wOiBmdW5jdGlvbigpIHsKKyAgICAg
IEV2ZW50LnN0b3BPYnNlcnZpbmcodGhpcy5lbGVtZW50LCB0aGlzLmV2ZW50TmFtZSwgdGhpcy5o
YW5kbGVyKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBoYW5kbGVFdmVudDog
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIHZhciBlbGVtZW50ID0gRXZlbnQuZmluZEVsZW1lbnQo
ZXZlbnQsIHRoaXMuc2VsZWN0b3IpOworICAgICAgaWYgKGVsZW1lbnQpIHRoaXMuY2FsbGJhY2su
Y2FsbCh0aGlzLmVsZW1lbnQsIGV2ZW50LCBlbGVtZW50KTsKKyAgICB9CisgIH0pOworCisgIGZ1
bmN0aW9uIG9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGNhbGxiYWNrKSB7CisgICAg
ZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHNlbGVjdG9y
KSAmJiBPYmplY3QuaXNVbmRlZmluZWQoY2FsbGJhY2spKSB7CisgICAgICBjYWxsYmFjayA9IHNl
bGVjdG9yLCBzZWxlY3RvciA9IG51bGw7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBFdmVudC5I
YW5kbGVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGNhbGxiYWNrKS5zdGFydCgpOwor
ICB9CisKKyAgT2JqZWN0LmV4dGVuZChFdmVudCwgRXZlbnQuTWV0aG9kcyk7CisKKyAgT2JqZWN0
LmV4dGVuZChFdmVudCwgeworICAgIGZpcmU6ICAgICAgICAgIGZpcmUsCisgICAgb2JzZXJ2ZTog
ICAgICAgb2JzZXJ2ZSwKKyAgICBzdG9wT2JzZXJ2aW5nOiBzdG9wT2JzZXJ2aW5nLAorICAgIG9u
OiAgICAgICAgICAgIG9uCisgIH0pOworCisgIEVsZW1lbnQuYWRkTWV0aG9kcyh7CisgICAgZmly
ZTogICAgICAgICAgZmlyZSwKKworICAgIG9ic2VydmU6ICAgICAgIG9ic2VydmUsCisKKyAgICBz
dG9wT2JzZXJ2aW5nOiBzdG9wT2JzZXJ2aW5nLAorCisgICAgb246ICAgICAgICAgICAgb24KKyAg
fSk7CisKKyAgT2JqZWN0LmV4dGVuZChkb2N1bWVudCwgeworICAgIGZpcmU6ICAgICAgICAgIGZp
cmUubWV0aG9kaXplKCksCisKKyAgICBvYnNlcnZlOiAgICAgICBvYnNlcnZlLm1ldGhvZGl6ZSgp
LAorCisgICAgc3RvcE9ic2VydmluZzogc3RvcE9ic2VydmluZy5tZXRob2RpemUoKSwKKworICAg
IG9uOiAgICAgICAgICAgIG9uLm1ldGhvZGl6ZSgpLAorCisgICAgbG9hZGVkOiAgICAgICAgZmFs
c2UKKyAgfSk7CisKKyAgaWYgKHdpbmRvdy5FdmVudCkgT2JqZWN0LmV4dGVuZCh3aW5kb3cuRXZl
bnQsIEV2ZW50KTsKKyAgZWxzZSB3aW5kb3cuRXZlbnQgPSBFdmVudDsKK30pKCk7CisKKyhmdW5j
dGlvbigpIHsKKyAgLyogU3VwcG9ydCBmb3IgdGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgaXMg
YmFzZWQgb24gd29yayBieSBEYW4gV2ViYiwKKyAgICAgTWF0dGhpYXMgTWlsbGVyLCBEZWFuIEVk
d2FyZHMsIEpvaG4gUmVzaWcsIGFuZCBEaWVnbyBQZXJpbmkuICovCisKKyAgdmFyIHRpbWVyOwor
CisgIGZ1bmN0aW9uIGZpcmVDb250ZW50TG9hZGVkRXZlbnQoKSB7CisgICAgaWYgKGRvY3VtZW50
LmxvYWRlZCkgcmV0dXJuOworICAgIGlmICh0aW1lcikgd2luZG93LmNsZWFyVGltZW91dCh0aW1l
cik7CisgICAgZG9jdW1lbnQubG9hZGVkID0gdHJ1ZTsKKyAgICBkb2N1bWVudC5maXJlKCdkb206
bG9hZGVkJyk7CisgIH0KKworICBmdW5jdGlvbiBjaGVja1JlYWR5U3RhdGUoKSB7CisgICAgaWYg
KGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHsKKyAgICAgIGRvY3VtZW50LnN0
b3BPYnNlcnZpbmcoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVja1JlYWR5U3RhdGUpOworICAgICAg
ZmlyZUNvbnRlbnRMb2FkZWRFdmVudCgpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHBvbGxE
b1Njcm9sbCgpIHsKKyAgICB0cnkgeyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwo
J2xlZnQnKTsgfQorICAgIGNhdGNoKGUpIHsKKyAgICAgIHRpbWVyID0gcG9sbERvU2Nyb2xsLmRl
ZmVyKCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZpcmVDb250ZW50TG9hZGVkRXZlbnQo
KTsKKyAgfQorCisgIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CisgICAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZpcmVDb250ZW50TG9hZGVk
RXZlbnQsIGZhbHNlKTsKKyAgfSBlbHNlIHsKKyAgICBkb2N1bWVudC5vYnNlcnZlKCdyZWFkeXN0
YXRlY2hhbmdlJywgY2hlY2tSZWFkeVN0YXRlKTsKKyAgICBpZiAod2luZG93ID09IHRvcCkKKyAg
ICAgIHRpbWVyID0gcG9sbERvU2Nyb2xsLmRlZmVyKCk7CisgIH0KKworICBFdmVudC5vYnNlcnZl
KHdpbmRvdywgJ2xvYWQnLCBmaXJlQ29udGVudExvYWRlZEV2ZW50KTsKK30pKCk7CisKK0VsZW1l
bnQuYWRkTWV0aG9kcygpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gREVQ
UkVDQVRFRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworSGFzaC50b1F1ZXJ5
U3RyaW5nID0gT2JqZWN0LnRvUXVlcnlTdHJpbmc7CisKK3ZhciBUb2dnbGUgPSB7IGRpc3BsYXk6
IEVsZW1lbnQudG9nZ2xlIH07CisKK0VsZW1lbnQuTWV0aG9kcy5jaGlsZE9mID0gRWxlbWVudC5N
ZXRob2RzLmRlc2NlbmRhbnRPZjsKKwordmFyIEluc2VydGlvbiA9IHsKKyAgQmVmb3JlOiBmdW5j
dGlvbihlbGVtZW50LCBjb250ZW50KSB7CisgICAgcmV0dXJuIEVsZW1lbnQuaW5zZXJ0KGVsZW1l
bnQsIHtiZWZvcmU6Y29udGVudH0pOworICB9LAorCisgIFRvcDogZnVuY3Rpb24oZWxlbWVudCwg
Y29udGVudCkgeworICAgIHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7dG9wOmNvbnRl
bnR9KTsKKyAgfSwKKworICBCb3R0b206IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKKyAg
ICByZXR1cm4gRWxlbWVudC5pbnNlcnQoZWxlbWVudCwge2JvdHRvbTpjb250ZW50fSk7CisgIH0s
CisKKyAgQWZ0ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKKyAgICByZXR1cm4gRWxl
bWVudC5pbnNlcnQoZWxlbWVudCwge2FmdGVyOmNvbnRlbnR9KTsKKyAgfQorfTsKKwordmFyICRj
b250aW51ZSA9IG5ldyBFcnJvcignInRocm93ICRjb250aW51ZSIgaXMgZGVwcmVjYXRlZCwgdXNl
ICJyZXR1cm4iIGluc3RlYWQnKTsKKwordmFyIFBvc2l0aW9uID0geworICBpbmNsdWRlU2Nyb2xs
T2Zmc2V0czogZmFsc2UsCisKKyAgcHJlcGFyZTogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZWx0
YVggPSAgd2luZG93LnBhZ2VYT2Zmc2V0CisgICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LnNjcm9sbExlZnQKKyAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5ib2R5
LnNjcm9sbExlZnQKKyAgICAgICAgICAgICAgICB8fCAwOworICAgIHRoaXMuZGVsdGFZID0gIHdp
bmRvdy5wYWdlWU9mZnNldAorICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5zY3JvbGxUb3AKKyAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRv
cAorICAgICAgICAgICAgICAgIHx8IDA7CisgIH0sCisKKyAgd2l0aGluOiBmdW5jdGlvbihlbGVt
ZW50LCB4LCB5KSB7CisgICAgaWYgKHRoaXMuaW5jbHVkZVNjcm9sbE9mZnNldHMpCisgICAgICBy
ZXR1cm4gdGhpcy53aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXRzKGVsZW1lbnQsIHgsIHkpOwor
ICAgIHRoaXMueGNvbXAgPSB4OworICAgIHRoaXMueWNvbXAgPSB5OworICAgIHRoaXMub2Zmc2V0
ID0gRWxlbWVudC5jdW11bGF0aXZlT2Zmc2V0KGVsZW1lbnQpOworCisgICAgcmV0dXJuICh5ID49
IHRoaXMub2Zmc2V0WzFdICYmCisgICAgICAgICAgICB5IDwgIHRoaXMub2Zmc2V0WzFdICsgZWxl
bWVudC5vZmZzZXRIZWlnaHQgJiYKKyAgICAgICAgICAgIHggPj0gdGhpcy5vZmZzZXRbMF0gJiYK
KyAgICAgICAgICAgIHggPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKTsK
KyAgfSwKKworICB3aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXRzOiBmdW5jdGlvbihlbGVtZW50
LCB4LCB5KSB7CisgICAgdmFyIG9mZnNldGNhY2hlID0gRWxlbWVudC5jdW11bGF0aXZlU2Nyb2xs
T2Zmc2V0KGVsZW1lbnQpOworCisgICAgdGhpcy54Y29tcCA9IHggKyBvZmZzZXRjYWNoZVswXSAt
IHRoaXMuZGVsdGFYOworICAgIHRoaXMueWNvbXAgPSB5ICsgb2Zmc2V0Y2FjaGVbMV0gLSB0aGlz
LmRlbHRhWTsKKyAgICB0aGlzLm9mZnNldCA9IEVsZW1lbnQuY3VtdWxhdGl2ZU9mZnNldChlbGVt
ZW50KTsKKworICAgIHJldHVybiAodGhpcy55Y29tcCA+PSB0aGlzLm9mZnNldFsxXSAmJgorICAg
ICAgICAgICAgdGhpcy55Y29tcCA8ICB0aGlzLm9mZnNldFsxXSArIGVsZW1lbnQub2Zmc2V0SGVp
Z2h0ICYmCisgICAgICAgICAgICB0aGlzLnhjb21wID49IHRoaXMub2Zmc2V0WzBdICYmCisgICAg
ICAgICAgICB0aGlzLnhjb21wIDwgIHRoaXMub2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRXaWR0
aCk7CisgIH0sCisKKyAgb3ZlcmxhcDogZnVuY3Rpb24obW9kZSwgZWxlbWVudCkgeworICAgIGlm
ICghbW9kZSkgcmV0dXJuIDA7CisgICAgaWYgKG1vZGUgPT0gJ3ZlcnRpY2FsJykKKyAgICAgIHJl
dHVybiAoKHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWlnaHQpIC0gdGhpcy55Y29t
cCkgLworICAgICAgICBlbGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICBpZiAobW9kZSA9PSAnaG9y
aXpvbnRhbCcpCisgICAgICByZXR1cm4gKCh0aGlzLm9mZnNldFswXSArIGVsZW1lbnQub2Zmc2V0
V2lkdGgpIC0gdGhpcy54Y29tcCkgLworICAgICAgICBlbGVtZW50Lm9mZnNldFdpZHRoOworICB9
LAorCisKKyAgY3VtdWxhdGl2ZU9mZnNldDogRWxlbWVudC5NZXRob2RzLmN1bXVsYXRpdmVPZmZz
ZXQsCisKKyAgcG9zaXRpb25lZE9mZnNldDogRWxlbWVudC5NZXRob2RzLnBvc2l0aW9uZWRPZmZz
ZXQsCisKKyAgYWJzb2x1dGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIFBvc2l0aW9uLnBy
ZXBhcmUoKTsKKyAgICByZXR1cm4gRWxlbWVudC5hYnNvbHV0aXplKGVsZW1lbnQpOworICB9LAor
CisgIHJlbGF0aXZpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBQb3NpdGlvbi5wcmVwYXJl
KCk7CisgICAgcmV0dXJuIEVsZW1lbnQucmVsYXRpdml6ZShlbGVtZW50KTsKKyAgfSwKKworICBy
ZWFsT2Zmc2V0OiBFbGVtZW50Lk1ldGhvZHMuY3VtdWxhdGl2ZVNjcm9sbE9mZnNldCwKKworICBv
ZmZzZXRQYXJlbnQ6IEVsZW1lbnQuTWV0aG9kcy5nZXRPZmZzZXRQYXJlbnQsCisKKyAgcGFnZTog
RWxlbWVudC5NZXRob2RzLnZpZXdwb3J0T2Zmc2V0LAorCisgIGNsb25lOiBmdW5jdGlvbihzb3Vy
Y2UsIHRhcmdldCwgb3B0aW9ucykgeworICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHsgfTsKKyAg
ICByZXR1cm4gRWxlbWVudC5jbG9uZVBvc2l0aW9uKHRhcmdldCwgc291cmNlLCBvcHRpb25zKTsK
KyAgfQorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2lmICghZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSkgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0
aW9uKGluc3RhbmNlTWV0aG9kcyl7CisgIGZ1bmN0aW9uIGl0ZXIobmFtZSkgeworICAgIHJldHVy
biBuYW1lLmJsYW5rKCkgPyBudWxsIDogIltjb250YWlucyhjb25jYXQoJyAnLCBAY2xhc3MsICcg
JyksICcgIiArIG5hbWUgKyAiICcpXSI7CisgIH0KKworICBpbnN0YW5jZU1ldGhvZHMuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSA9IFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGggPworICBm
dW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKKyAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUu
dG9TdHJpbmcoKS5zdHJpcCgpOworICAgIHZhciBjb25kID0gL1xzLy50ZXN0KGNsYXNzTmFtZSkg
PyAkdyhjbGFzc05hbWUpLm1hcChpdGVyKS5qb2luKCcnKSA6IGl0ZXIoY2xhc3NOYW1lKTsKKyAg
ICByZXR1cm4gY29uZCA/IGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGgoJy4vLyonICsgY29u
ZCwgZWxlbWVudCkgOiBbXTsKKyAgfSA6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewor
ICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b1N0cmluZygpLnN0cmlwKCk7CisgICAgdmFyIGVs
ZW1lbnRzID0gW10sIGNsYXNzTmFtZXMgPSAoL1xzLy50ZXN0KGNsYXNzTmFtZSkgPyAkdyhjbGFz
c05hbWUpIDogbnVsbCk7CisgICAgaWYgKCFjbGFzc05hbWVzICYmICFjbGFzc05hbWUpIHJldHVy
biBlbGVtZW50czsKKworICAgIHZhciBub2RlcyA9ICQoZWxlbWVudCkuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKTsKKyAgICBjbGFzc05hbWUgPSAnICcgKyBjbGFzc05hbWUgKyAnICc7CisKKyAg
ICBmb3IgKHZhciBpID0gMCwgY2hpbGQsIGNuOyBjaGlsZCA9IG5vZGVzW2ldOyBpKyspIHsKKyAg
ICAgIGlmIChjaGlsZC5jbGFzc05hbWUgJiYgKGNuID0gJyAnICsgY2hpbGQuY2xhc3NOYW1lICsg
JyAnKSAmJiAoY24uaW5jbHVkZShjbGFzc05hbWUpIHx8CisgICAgICAgICAgKGNsYXNzTmFtZXMg
JiYgY2xhc3NOYW1lcy5hbGwoZnVuY3Rpb24obmFtZSkgeworICAgICAgICAgICAgcmV0dXJuICFu
YW1lLnRvU3RyaW5nKCkuYmxhbmsoKSAmJiBjbi5pbmNsdWRlKCcgJyArIG5hbWUgKyAnICcpOwor
ICAgICAgICAgIH0pKSkpCisgICAgICAgIGVsZW1lbnRzLnB1c2goRWxlbWVudC5leHRlbmQoY2hp
bGQpKTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnRzOworICB9OworCisgIHJldHVybiBmdW5j
dGlvbihjbGFzc05hbWUsIHBhcmVudEVsZW1lbnQpIHsKKyAgICByZXR1cm4gJChwYXJlbnRFbGVt
ZW50IHx8IGRvY3VtZW50LmJvZHkpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTsK
KyAgfTsKK30oRWxlbWVudC5NZXRob2RzKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK0Vs
ZW1lbnQuQ2xhc3NOYW1lcyA9IENsYXNzLmNyZWF0ZSgpOworRWxlbWVudC5DbGFzc05hbWVzLnBy
b3RvdHlwZSA9IHsKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHRoaXMu
ZWxlbWVudCA9ICQoZWxlbWVudCk7CisgIH0sCisKKyAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9y
KSB7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgvXHMrLykuc2VsZWN0KGZ1bmN0
aW9uKG5hbWUpIHsKKyAgICAgIHJldHVybiBuYW1lLmxlbmd0aCA+IDA7CisgICAgfSkuX2VhY2go
aXRlcmF0b3IpOworICB9LAorCisgIHNldDogZnVuY3Rpb24oY2xhc3NOYW1lKSB7CisgICAgdGhp
cy5lbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKyAgfSwKKworICBhZGQ6IGZ1bmN0aW9u
KGNsYXNzTmFtZVRvQWRkKSB7CisgICAgaWYgKHRoaXMuaW5jbHVkZShjbGFzc05hbWVUb0FkZCkp
IHJldHVybjsKKyAgICB0aGlzLnNldCgkQSh0aGlzKS5jb25jYXQoY2xhc3NOYW1lVG9BZGQpLmpv
aW4oJyAnKSk7CisgIH0sCisKKyAgcmVtb3ZlOiBmdW5jdGlvbihjbGFzc05hbWVUb1JlbW92ZSkg
eworICAgIGlmICghdGhpcy5pbmNsdWRlKGNsYXNzTmFtZVRvUmVtb3ZlKSkgcmV0dXJuOworICAg
IHRoaXMuc2V0KCRBKHRoaXMpLndpdGhvdXQoY2xhc3NOYW1lVG9SZW1vdmUpLmpvaW4oJyAnKSk7
CisgIH0sCisKKyAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiAkQSh0aGlzKS5q
b2luKCcgJyk7CisgIH0KK307CisKK09iamVjdC5leHRlbmQoRWxlbWVudC5DbGFzc05hbWVzLnBy
b3RvdHlwZSwgRW51bWVyYWJsZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisoZnVuY3Rp
b24oKSB7CisgIHdpbmRvdy5TZWxlY3RvciA9IENsYXNzLmNyZWF0ZSh7CisgICAgaW5pdGlhbGl6
ZTogZnVuY3Rpb24oZXhwcmVzc2lvbikgeworICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVz
c2lvbi5zdHJpcCgpOworICAgIH0sCisKKyAgICBmaW5kRWxlbWVudHM6IGZ1bmN0aW9uKHJvb3RF
bGVtZW50KSB7CisgICAgICByZXR1cm4gUHJvdG90eXBlLlNlbGVjdG9yLnNlbGVjdCh0aGlzLmV4
cHJlc3Npb24sIHJvb3RFbGVtZW50KTsKKyAgICB9LAorCisgICAgbWF0Y2g6IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKKyAgICAgIHJldHVybiBQcm90b3R5cGUuU2VsZWN0b3IubWF0Y2goZWxlbWVudCwg
dGhpcy5leHByZXNzaW9uKTsKKyAgICB9LAorCisgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewor
ICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbjsKKyAgICB9LAorCisgICAgaW5zcGVjdDogZnVu
Y3Rpb24oKSB7CisgICAgICByZXR1cm4gIiM8U2VsZWN0b3I6ICIgKyB0aGlzLmV4cHJlc3Npb24g
KyAiPiI7CisgICAgfQorICB9KTsKKworICBPYmplY3QuZXh0ZW5kKFNlbGVjdG9yLCB7CisgICAg
bWF0Y2hFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudHMsIGV4cHJlc3Npb24pIHsKKyAgICAgIHZh
ciBtYXRjaCA9IFByb3RvdHlwZS5TZWxlY3Rvci5tYXRjaCwKKyAgICAgICAgICByZXN1bHRzID0g
W107CisKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAg
ICAgICBpZiAobWF0Y2goZWxlbWVudCwgZXhwcmVzc2lvbikpIHsKKyAgICAgICAgICByZXN1bHRz
LnB1c2goRWxlbWVudC5leHRlbmQoZWxlbWVudCkpOworICAgICAgICB9CisgICAgICB9CisgICAg
ICByZXR1cm4gcmVzdWx0czsKKyAgICB9LAorCisgICAgZmluZEVsZW1lbnQ6IGZ1bmN0aW9uKGVs
ZW1lbnRzLCBleHByZXNzaW9uLCBpbmRleCkgeworICAgICAgaW5kZXggPSBpbmRleCB8fCAwOwor
ICAgICAgdmFyIG1hdGNoSW5kZXggPSAwLCBlbGVtZW50OworICAgICAgZm9yICh2YXIgaSA9IDAs
IGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGVs
ZW1lbnQgPSBlbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKFByb3RvdHlwZS5TZWxlY3Rvci5tYXRj
aChlbGVtZW50LCBleHByZXNzaW9uKSAmJiBpbmRleCA9PT0gbWF0Y2hJbmRleCsrKSB7CisgICAg
ICAgICAgcmV0dXJuIEVsZW1lbnQuZXh0ZW5kKGVsZW1lbnQpOworICAgICAgICB9CisgICAgICB9
CisgICAgfSwKKworICAgIGZpbmRDaGlsZEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBleHBy
ZXNzaW9ucykgeworICAgICAgdmFyIHNlbGVjdG9yID0gZXhwcmVzc2lvbnMudG9BcnJheSgpLmpv
aW4oJywgJyk7CisgICAgICByZXR1cm4gUHJvdG90eXBlLlNlbGVjdG9yLnNlbGVjdChzZWxlY3Rv
ciwgZWxlbWVudCB8fCBkb2N1bWVudCk7CisgICAgfQorICB9KTsKK30pKCk7CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2Nz
c3F1ZXJ5LWRvam8uaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJv
bWFlby93ZWIvdGVzdHMvY3NzcXVlcnktZG9qby5odG1sCmluZGV4IDQ0MzRhZDk5Y2MxNmU2ODkx
Mzg2NGIwMWUwNThiZDI4ZGYxMmMzNDQuLjhjYjg4NGIyYzdiYmZiMWYzNjU4MTc5MWQ5MDQ1OWU2
YWM2MGNhOGEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMv
ZHJvbWFlby93ZWIvdGVzdHMvY3NzcXVlcnktZG9qby5odG1sCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvY3NzcXVlcnktZG9qby5odG1s
CkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQgc3JjPSIuLi9odG1scnVu
bmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJodHRwOi8vYWpheC5nb29nbGVhcGlzLmNv
bS9hamF4L2xpYnMvZG9qby8xLjYuMS9kb2pvL2Rvam8ueGQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL2xpYi9kb2pvLTEuNi4xLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiB3aW5kb3cu
b25sb2FkID0gZnVuY3Rpb24oKXsKIHN0YXJ0VGVzdCgiY3NzcXVlcnktZG9qbyIsICdhOGNmY2M3
YScpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9t
YWVvL3dlYi90ZXN0cy9jc3NxdWVyeS1qcXVlcnkuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJv
bWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvY3NzcXVlcnktanF1ZXJ5Lmh0bWwKaW5k
ZXggNjBiYmE3YTU4MTFkMjEwYWY0ZjU2YjgzMTY3YjI2NjI4ZWZjMDlmNy4uMzU3MTUzYTBjYzI3
NjY1NWMyYzNkNjFmN2ZiYmRjMzg3MTc2ZGU5NiAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9jc3NxdWVyeS1qcXVlcnkuaHRt
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rl
c3RzL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4K
IDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJo
dHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjYuNC9qcXVlcnku
bWluLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9saWIvanF1ZXJ5LTEuNi40LmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQ+CiB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKIHN0YXJ0VGVz
dCgiY3NzcXVlcnktanF1ZXJ5IiwgJzc3MDRjNDUxJyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2Nzc3F1ZXJ5LW1vb3Rv
b2xzLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2Vi
L3Rlc3RzL2Nzc3F1ZXJ5LW1vb3Rvb2xzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ4MjBlN2QzYTJlNDlhNDdlNTlhN2JjOGViZjkzZDdhNjJlMjUwZGMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9t
YWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9jc3NxdWVyeS1tb290b29scy5odG1sCisr
KyAvZGV2L251bGwKQEAgLTEsMzA2MiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBz
cmM9Ii4uL2h0bWxydW5uZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWph
eC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvbW9vdG9vbHMvMS40LjEvbW9vdG9vbHMteXVpLWNv
bXByZXNzZWQuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLXdpbmRvdy5vbmxvYWQgPSBmdW5jdGlv
bigpewotc3RhcnRUZXN0KCJjc3NxdWVyeS1tb290b29scyIsICdhZmU1YzYyMycpOwotCi0vLyBU
cnkgdG8gZm9yY2UgcmVhbCByZXN1bHRzCi12YXIgcmV0LCB0bXA7Ci0KLXZhciBodG1sID0gZG9j
dW1lbnQuYm9keS5pbm5lckhUTUw7Ci0KLQlwcmVwKGZ1bmN0aW9uKCl7Ci0JCXZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQkJZGl2LmlubmVySFRNTCA9IGh0bWw7Ci0J
CWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIGRpdiApOwotCX0pOwotCi0JdGVzdCgiTW9vdG9v
bHMgLSAqIiwgZnVuY3Rpb24oKXsKLQkJJCQoIioiKTsKLQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xz
IC0gZGl2Om9ubHktY2hpbGQiLCBmdW5jdGlvbigpewotCQkkJCgiZGl2Om9ubHktY2hpbGQiKTsK
LQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xzIC0gZGl2OmZpcnN0LWNoaWxkIiwgZnVuY3Rpb24oKXsK
LQkJJCQoImRpdjpmaXJzdC1jaGlsZCIpOwotCX0pOwotCi0JdGVzdCgiTW9vdG9vbHMgLSBkaXY6
bnRoLWNoaWxkKGV2ZW4pIiwgZnVuY3Rpb24oKXsKLQkJJCQoImRpdjpudGgtY2hpbGQoZXZlbiki
KTsKLQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xzIC0gZGl2Om50aC1jaGlsZCgybikiLCBmdW5jdGlv
bigpewotCQkkJCgiZGl2Om50aC1jaGlsZCgybikiKTsKLQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xz
IC0gZGl2Om50aC1jaGlsZChvZGQpIiwgZnVuY3Rpb24oKXsKLQkJJCQoImRpdjpudGgtY2hpbGQo
b2RkKSIpOwotCX0pOwotCi0JdGVzdCgiTW9vdG9vbHMgLSBkaXY6bnRoLWNoaWxkKDJuKzEpIiwg
ZnVuY3Rpb24oKXsKLQkJJCQoImRpdjpudGgtY2hpbGQoMm4rMSkiKTsKLQl9KTsKLQotCXRlc3Qo
Ik1vb3Rvb2xzIC0gZGl2Om50aC1jaGlsZChuKSIsIGZ1bmN0aW9uKCl7Ci0JCSQkKCJkaXY6bnRo
LWNoaWxkKG4pIik7Ci0JfSk7Ci0KLQl0ZXN0KCJNb290b29scyAtIGRpdjpsYXN0LWNoaWxkIiwg
ZnVuY3Rpb24oKXsKLQkJJCQoImRpdjpsYXN0LWNoaWxkIik7Ci0JfSk7Ci0KLQl0ZXN0KCJNb290
b29scyAtIGRpdiA+IGRpdiIsIGZ1bmN0aW9uKCl7Ci0JCSQkKCJkaXYgPiBkaXYiKTsKLQl9KTsK
LQotCXRlc3QoIk1vb3Rvb2xzIC0gZGl2ICsgZGl2IiwgZnVuY3Rpb24oKXsKLQkJJCQoImRpdiAr
IGRpdiIpOwotCX0pOwotCi0JdGVzdCgiTW9vdG9vbHMgLSBkaXYgfiBkaXYiLCBmdW5jdGlvbigp
ewotCQkkJCgiZGl2IH4gZGl2Iik7Ci0JfSk7Ci0KLQl0ZXN0KCJNb290b29scyAtIGJvZHkiLCBm
dW5jdGlvbigpewotCQkkJCgiYm9keSIpOwotCX0pOwotCi0JdGVzdCgiTW9vdG9vbHMgLSBib2R5
IGRpdiIsIGZ1bmN0aW9uKCl7Ci0JCSQkKCJib2R5IGRpdiIpOwotCX0pOwotCi0JdGVzdCgiTW9v
dG9vbHMgLSBkaXYiLCBmdW5jdGlvbigpewotCQkkJCgiZGl2Iik7Ci0JfSk7Ci0KLQl0ZXN0KCJN
b290b29scyAtIGRpdiBkaXYiLCBmdW5jdGlvbigpewotCQkkJCgiZGl2IGRpdiIpOwotCX0pOwot
Ci0JdGVzdCgiTW9vdG9vbHMgLSBkaXYgZGl2IGRpdiIsIGZ1bmN0aW9uKCl7Ci0JCSQkKCJkaXYg
ZGl2IGRpdiIpOwotCX0pOwotCi0JdGVzdCgiTW9vdG9vbHMgLSBkaXYsIGRpdiwgZGl2IiwgZnVu
Y3Rpb24oKXsKLQkJJCQoImRpdiwgZGl2LCBkaXYiKTsKLQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xz
IC0gZGl2LCBhLCBzcGFuIiwgZnVuY3Rpb24oKXsKLQkJJCQoImRpdiwgYSwgc3BhbiIpOwotCX0p
OwotCi0JdGVzdCgiTW9vdG9vbHMgLSAuZGlhbG9nIiwgZnVuY3Rpb24oKXsKLQkJJCQoIi5kaWFs
b2ciKTsKLQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xzIC0gZGl2LmRpYWxvZyIsIGZ1bmN0aW9uKCl7
Ci0JCSQkKCJkaXYuZGlhbG9nIik7Ci0JfSk7Ci0KLQl0ZXN0KCJNb290b29scyAtIGRpdiAuZGlh
bG9nIiwgZnVuY3Rpb24oKXsKLQkJJCQoImRpdiAuZGlhbG9nIik7Ci0JfSk7Ci0KLQl0ZXN0KCJN
b290b29scyAtIGRpdi5jaGFyYWN0ZXIsIGRpdi5kaWFsb2ciLCBmdW5jdGlvbigpewotCQkkJCgi
ZGl2LmNoYXJhY3RlciwgZGl2LmRpYWxvZyIpOwotCX0pOwotCi0JdGVzdCgiTW9vdG9vbHMgLSAj
c3BlZWNoNSIsIGZ1bmN0aW9uKCl7Ci0JCSQkKCIjc3BlZWNoNSIpOwotCX0pOwotCi0JdGVzdCgi
TW9vdG9vbHMgLSBkaXYjc3BlZWNoNSIsIGZ1bmN0aW9uKCl7Ci0JCSQkKCJkaXYjc3BlZWNoNSIp
OwotCX0pOwotCi0JdGVzdCgiTW9vdG9vbHMgLSBkaXYgI3NwZWVjaDUiLCBmdW5jdGlvbigpewot
CQkkJCgiZGl2ICNzcGVlY2g1Iik7Ci0JfSk7Ci0KLQl0ZXN0KCJNb290b29scyAtIGRpdi5zY2Vu
ZSBkaXYuZGlhbG9nIiwgZnVuY3Rpb24oKXsKLQkJJCQoImRpdi5zY2VuZSBkaXYuZGlhbG9nIik7
Ci0JfSk7Ci0KLQl0ZXN0KCJNb290b29scyAtIGRpdiNzY2VuZTEgZGl2LmRpYWxvZyBkaXYiLCBm
dW5jdGlvbigpewotCQkkJCgiZGl2I3NjZW5lMSBkaXYuZGlhbG9nIGRpdiIpOwotCX0pOwotCi0J
dGVzdCgiTW9vdG9vbHMgLSAjc2NlbmUxICNzcGVlY2gxIiwgZnVuY3Rpb24oKXsKLQkJJCQoIiNz
Y2VuZTEgI3NwZWVjaDEiKTsKLQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xzIC0gZGl2W2NsYXNzXSIs
IGZ1bmN0aW9uKCl7Ci0JCSQkKCJkaXZbY2xhc3NdIik7Ci0JfSk7Ci0KLQl0ZXN0KCJNb290b29s
cyAtIGRpdltjbGFzcz1kaWFsb2ddIiwgZnVuY3Rpb24oKXsKLQkJJCQoImRpdltjbGFzcz1kaWFs
b2ddIik7Ci0JfSk7Ci0KLQl0ZXN0KCJNb290b29scyAtIGRpdltjbGFzc149ZGlhXSIsIGZ1bmN0
aW9uKCl7Ci0JCSQkKCJkaXZbY2xhc3NePWRpYV0iKTsKLQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xz
IC0gZGl2W2NsYXNzJD1sb2ddIiwgZnVuY3Rpb24oKXsKLQkJJCQoImRpdltjbGFzcyQ9bG9nXSIp
OwotCX0pOwotCi0JdGVzdCgiTW9vdG9vbHMgLSBkaXZbY2xhc3MqPXNjZV0iLCBmdW5jdGlvbigp
ewotCQkkJCgiZGl2W2NsYXNzKj1zY2VdIik7Ci0JfSk7Ci0KLQl0ZXN0KCJNb290b29scyAtIGRp
dltjbGFzc3w9ZGlhbG9nXSIsIGZ1bmN0aW9uKCl7Ci0JCSQkKCJkaXZbY2xhc3N8PWRpYWxvZ10i
KTsKLQl9KTsKLQotCXRlc3QoIk1vb3Rvb2xzIC0gZGl2W2NsYXNzfj1kaWFsb2ddIiwgZnVuY3Rp
b24oKXsKLQkJJCQoImRpdltjbGFzc349ZGlhbG9nXSIpOwotCX0pOwotCi1lbmRUZXN0KCk7Ci19
OwotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLSAgPGRpdiBjbGFzcz0iaGVhZCI+Ci0gICA8
cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3Jj
PSI3MnB4LnBuZyIgd2lkdGg9NzI+PC9hPgotCi0gICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8
L2gxPgotCi0gICA8aDI+VzNDIFdvcmtpbmcgRHJhZnQgMTUgRGVjZW1iZXIgMjAwNTwvaDI+Ci0K
LSAgIDxkbD4KLQotICAgIDxkdD5UaGlzIHZlcnNpb246Ci0KLSAgICA8ZGQ+PGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvVFIvMjAwNS9XRC1jc3MzLXNlbGVjdG9ycy0yMDA1MTIxNSI+Ci0gICAg
ICAgICAgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDUvV0QtY3NzMy1zZWxlY3RvcnMt
MjAwNTEyMTU8L2E+Ci0KLSAgICA8ZHQ+TGF0ZXN0IHZlcnNpb246Ci0KLSAgICA8ZGQ+PGEgaHJl
Zj0iaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMiPgotICAgICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9yczwvYT4KLQotICAgIDxkdD5QcmV2
aW91cyB2ZXJzaW9uOgotCi0gICAgPGRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDEvQ1ItY3NzMy1zZWxlY3RvcnMtMjAwMTExMTMiPgotICAgICAgICAgICAgICAgICBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAxL0NSLWNzczMtc2VsZWN0b3JzLTIwMDExMTEzPC9hPgotCi0gICAg
PGR0PjxhIG5hbWU9ZWRpdG9ycy1saXN0PjwvYT5FZGl0b3JzOgotCi0gICAgPGRkIGNsYXNzPSJ2
Y2FyZCI+PHNwYW4gY2xhc3M9ImZuIj5EYW5pZWwgR2xhem1hbjwvc3Bhbj4gKEludml0ZWQgRXhw
ZXJ0KTwvZGQ+Ci0KLSAgICA8ZGQgY2xhc3M9InZjYXJkIj48YSBsYW5nPSJ0ciIgY2xhc3M9InVy
bCBmbiIgaHJlZj0iaHR0cDovL3d3dy50YW50ZWsuY29tLyI+VGFudGVrICZDY2VkaWw7ZWxpazwv
YT4gKEludml0ZWQgRXhwZXJ0KQotCi0gICAgPGRkIGNsYXNzPSJ2Y2FyZCI+PGEgaHJlZj0ibWFp
bHRvOmlhbkBoaXhpZS5jaCIgY2xhc3M9InVybCBmbiI+SWFuIEhpY2tzb248L2E+ICg8c3Bhbgot
ICAgIGNsYXNzPSJjb21wYW55Ij48YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIj5Hb29n
bGU8L2E+PC9zcGFuPikKLQotICAgIDxkZCBjbGFzcz0idmNhcmQiPjxzcGFuIGNsYXNzPSJmbiI+
UGV0ZXIgTGluc3M8L3NwYW4+IChmb3JtZXIgZWRpdG9yLCA8c3BhbiBjbGFzcz0iY29tcGFueSI+
PGEKLSAgICBocmVmPSJodHRwOi8vd3d3Lm5ldHNjYXBlLmNvbS8iPk5ldHNjYXBlL0FPTDwvYT48
L3NwYW4+KQotCi0gICAgPGRkIGNsYXNzPSJ2Y2FyZCI+PHNwYW4gY2xhc3M9ImZuIj5Kb2huIFdp
bGxpYW1zPC9zcGFuPiAoZm9ybWVyIGVkaXRvciwgPHNwYW4gY2xhc3M9ImNvbXBhbnkiPjxhCi0g
ICAgaHJlZj0iaHR0cDovL3d3dy5xdWFyay5jb20vIj5RdWFyaywgSW5jLjwvYT48L3NwYW4+KQot
Ci0gICA8L2RsPgotCi0gICA8cCBjbGFzcz0iY29weXJpZ2h0Ij48YQotICAgaHJlZj0iaHR0cDov
L3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9pcHItbm90aWNlI0NvcHlyaWdodCI+Ci0gICBD
b3B5cmlnaHQ8L2E+ICZjb3B5OyAyMDA1IDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGFi
YnIKLSAgIHRpdGxlPSJXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIj5XM0M8L2FiYnI+PC9hPjxz
dXA+JnJlZzs8L3N1cD4KLSAgICg8YSBocmVmPSJodHRwOi8vd3d3LmNzYWlsLm1pdC5lZHUvIj48
YWJiciB0aXRsZT0iTWFzc2FjaHVzZXR0cwotICAgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kiPk1J
VDwvYWJicj48L2E+LCA8YQotICAgaHJlZj0iaHR0cDovL3d3dy5lcmNpbS5vcmcvIj48YWNyb255
bSB0aXRsZT0iRXVyb3BlYW4gUmVzZWFyY2gKLSAgIENvbnNvcnRpdW0gZm9yIEluZm9ybWF0aWNz
IGFuZCBNYXRoZW1hdGljcyI+RVJDSU08L2Fjcm9ueW0+PC9hPiwgPGEKLSAgIGhyZWY9Imh0dHA6
Ly93d3cua2Vpby5hYy5qcC8iPktlaW88L2E+KSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gIFczQwot
ICAgPGEKLSAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvaXByLW5v
dGljZSNMZWdhbF9EaXNjbGFpbWVyIj5saWFiaWxpdHk8L2E+LAotICAgPGEKLSAgIGhyZWY9Imh0
dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvaXByLW5vdGljZSNXM0NfVHJhZGVtYXJr
cyI+dHJhZGVtYXJrPC9hPiwKLSAgIDxhCi0gICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Db25z
b3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1kb2N1bWVudHMiPmRvY3VtZW50Ci0gICB1c2U8L2E+IHJ1
bGVzIGFwcGx5LgotCi0gICA8aHIgdGl0bGU9IlNlcGFyYXRvciBmb3IgaGVhZGVyIj4KLQotICA8
L2Rpdj4KLQotICA8aDI+PGEgbmFtZT1hYnN0cmFjdD48L2E+QWJzdHJhY3Q8L2gyPgotCi0gIDxw
PjxlbT5TZWxlY3RvcnM8L2VtPiBhcmUgcGF0dGVybnMgdGhhdCBtYXRjaCBhZ2FpbnN0IGVsZW1l
bnRzIGluIGEKLSAgdHJlZS4gU2VsZWN0b3JzIGhhdmUgYmVlbiBvcHRpbWl6ZWQgZm9yIHVzZSB3
aXRoIEhUTUwgYW5kIFhNTCwgYW5kCi0gIGFyZSBkZXNpZ25lZCB0byBiZSB1c2FibGUgaW4gcGVy
Zm9ybWFuY2UtY3JpdGljYWwgY29kZS48L3A+Ci0KLSAgPHA+PGFjcm9ueW0gdGl0bGU9IkNhc2Nh
ZGluZyBTdHlsZSBTaGVldHMiPkNTUzwvYWNyb255bT4gKENhc2NhZGluZwotICBTdHlsZSBTaGVl
dHMpIGlzIGEgbGFuZ3VhZ2UgZm9yIGRlc2NyaWJpbmcgdGhlIHJlbmRlcmluZyBvZiA8YWNyb255
bQotICB0aXRsZT0iSHlwZXJ0ZXh0IE1hcmt1cCBMYW5ndWFnZSI+SFRNTDwvYWNyb255bT4gYW5k
IDxhY3JvbnltCi0gIHRpdGxlPSJFeHRlbnNpYmxlIE1hcmt1cCBMYW5ndWFnZSI+WE1MPC9hY3Jv
bnltPiBkb2N1bWVudHMgb24KLSAgc2NyZWVuLCBvbiBwYXBlciwgaW4gc3BlZWNoLCBldGMuIENT
UyB1c2VzIFNlbGVjdG9ycyBmb3IgYmluZGluZwotICBzdHlsZSBwcm9wZXJ0aWVzIHRvIGVsZW1l
bnRzIGluIHRoZSBkb2N1bWVudC4gVGhpcyBkb2N1bWVudAotICBkZXNjcmliZXMgZXh0ZW5zaW9u
cyB0byB0aGUgc2VsZWN0b3JzIGRlZmluZWQgaW4gQ1NTIGxldmVsIDIuIFRoZXNlCi0gIGV4dGVu
ZGVkIHNlbGVjdG9ycyB3aWxsIGJlIHVzZWQgYnkgQ1NTIGxldmVsIDMuCi0KLSAgPHA+U2VsZWN0
b3JzIGRlZmluZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOjwvcD4KLQotICA8cHJlPmV4cHJlc3Np
b24gJiN4MjIxNzsgZWxlbWVudCAmcmFycjsgYm9vbGVhbjwvcHJlPgotCi0gIDxwPlRoYXQgaXMs
IGdpdmVuIGFuIGVsZW1lbnQgYW5kIGEgc2VsZWN0b3IsIHRoaXMgc3BlY2lmaWNhdGlvbgotICBk
ZWZpbmVzIHdoZXRoZXIgdGhhdCBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLjwvcD4KLQot
ICA8cD5UaGVzZSBleHByZXNzaW9ucyBjYW4gYWxzbyBiZSB1c2VkLCBmb3IgaW5zdGFuY2UsIHRv
IHNlbGVjdCBhIHNldAotICBvZiBlbGVtZW50cywgb3IgYSBzaW5nbGUgZWxlbWVudCBmcm9tIGEg
c2V0IG9mIGVsZW1lbnRzLCBieQotICBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIGFjcm9zcyBh
bGwgdGhlIGVsZW1lbnRzIGluIGEKLSAgc3VidHJlZS4gPGFjcm9ueW0gdGl0bGU9IlNpbXBsZSBU
cmVlIFRyYW5zZm9ybWF0aW9uCi0gIFNoZWV0cyI+U1RUUzwvYWNyb255bT4gKFNpbXBsZSBUcmVl
IFRyYW5zZm9ybWF0aW9uIFNoZWV0cyksIGEKLSAgbGFuZ3VhZ2UgZm9yIHRyYW5zZm9ybWluZyBY
TUwgdHJlZXMsIHVzZXMgdGhpcyBtZWNoYW5pc20uIDxhIGhyZWY9IiNyZWZzU1RUUyI+W1NUVFNd
PC9hPjwvcD4KLQotICA8aDI+PGEgbmFtZT1zdGF0dXM+PC9hPlN0YXR1cyBvZiB0aGlzIGRvY3Vt
ZW50PC9oMj4KLQotICA8cD48ZW0+VGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc3RhdHVzIG9m
IHRoaXMgZG9jdW1lbnQgYXQgdGhlCi0gIHRpbWUgb2YgaXRzIHB1YmxpY2F0aW9uLiBPdGhlciBk
b2N1bWVudHMgbWF5IHN1cGVyc2VkZSB0aGlzCi0gIGRvY3VtZW50LiBBIGxpc3Qgb2YgY3VycmVu
dCBXM0MgcHVibGljYXRpb25zIGFuZCB0aGUgbGF0ZXN0IHJldmlzaW9uCi0gIG9mIHRoaXMgdGVj
aG5pY2FsIHJlcG9ydCBjYW4gYmUgZm91bmQgaW4gdGhlIDxhCi0gIGhyZWY9Imh0dHA6Ly93d3cu
dzMub3JnL1RSLyI+VzNDIHRlY2huaWNhbCByZXBvcnRzIGluZGV4IGF0Ci0gIGh0dHA6Ly93d3cu
dzMub3JnL1RSLy48L2E+PC9lbT48L3A+Ci0KLSAgPHA+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMg
dGhlIHNlbGVjdG9ycyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gPGEKLSAgaHJlZj0iI3JlZnNDU1Mx
Ij48YWJiciB0aXRsZT0iQ1NTIGxldmVsIDEiPkNTUzE8L2FiYnI+PC9hPiBhbmQgPGEKLSAgaHJl
Zj0iI3JlZnNDU1MyMSI+PGFiYnIgdGl0bGU9IkNTUyBsZXZlbCAyIj5DU1MyPC9hYmJyPjwvYT4s
IGFuZAotICBhbHNvIHByb3Bvc2VzIG5ldyBzZWxlY3RvcnMgZm9yIDxhYmJyIHRpdGxlPSJDU1Mg
bGV2ZWwKLSAgMyI+Q1NTMzwvYWJicj4gYW5kIG90aGVyIGxhbmd1YWdlcyB0aGF0IG1heSBuZWVk
IHRoZW0uPC9wPgotCi0gIDxwPlRoZSBDU1MgV29ya2luZyBHcm91cCBkb2Vzbid0IGV4cGVjdCB0
aGF0IGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YKLSAgQ1NTMyB3aWxsIGhhdmUgdG8gaW1wbGVtZW50
IGFsbCBzZWxlY3RvcnMuIEluc3RlYWQsIHRoZXJlIHdpbGwKLSAgcHJvYmFibHkgYmUgYSBzbWFs
bCBudW1iZXIgb2YgdmFyaWFudHMgb2YgQ1NTMywgY2FsbGVkIHByb2ZpbGVzLiBGb3IKLSAgZXhh
bXBsZSwgaXQgbWF5IGJlIHRoYXQgb25seSBhIHByb2ZpbGUgZm9yIGludGVyYWN0aXZlIHVzZXIg
YWdlbnRzCi0gIHdpbGwgaW5jbHVkZSBhbGwgb2YgdGhlIHNlbGVjdG9ycy48L3A+Ci0KLSAgPHA+
VGhpcyBzcGVjaWZpY2F0aW9uIGlzIGEgbGFzdCBjYWxsIHdvcmtpbmcgZHJhZnQgZm9yIHRoZSB0
aGUgPGEKLSAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvU3R5bGUvQ1NTL21lbWJlcnMiPkNTUyBX
b3JraW5nIEdyb3VwPC9hPgotICAoPGEgaHJlZj0iL1N0eWxlLyI+U3R5bGUgQWN0aXZpdHk8L2E+
KS4gVGhpcwotICBkb2N1bWVudCBpcyBhIHJldmlzaW9uIG9mIHRoZSA8YQotICBocmVmPSJodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAxL0NSLWNzczMtc2VsZWN0b3JzLTIwMDExMTEzLyI+Q2FuZGlk
YXRlCi0gIFJlY29tbWVuZGF0aW9uIGRhdGVkIDIwMDEgTm92ZW1iZXIgMTM8L2E+LCBhbmQgaGFz
IGluY29ycG9yYXRlZAotICBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayByZWNlaXZlZCBpbiB0aGUg
cGFzdCBmZXcgeWVhcnMuIEl0IGlzCi0gIGV4cGVjdGVkIHRoYXQgdGhpcyBsYXN0IGNhbGwgd2ls
bCBwcm9jZWVkIHN0cmFpZ2h0IHRvIFByb3Bvc2VkCi0gIFJlY29tbWVuZGF0aW9uIHN0YWdlIHNp
bmNlIGl0IGlzIGJlbGlldmVkIHRoYXQgaW50ZXJvcGVyYWJpbGl0eSB3aWxsCi0gIGJlIGRlbW9u
c3RyYWJsZS48L3A+Ci0KLSAgPHA+QWxsIHBlcnNvbnMgYXJlIGVuY291cmFnZWQgdG8gcmV2aWV3
IGFuZCBpbXBsZW1lbnQgdGhpcwotICBzcGVjaWZpY2F0aW9uIGFuZCByZXR1cm4gY29tbWVudHMg
dG8gdGhlICg8YQotICBocmVmPSJodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93
d3ctc3R5bGUvIj5hcmNoaXZlZDwvYT4pCi0gIHB1YmxpYyBtYWlsaW5nIGxpc3QgPGEKLSAgaHJl
Zj0iaHR0cDovL3d3dy53My5vcmcvTWFpbC9MaXN0cy5odG1sI3d3dy1zdHlsZSI+d3d3LXN0eWxl
PC9hPgotICAoc2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL01haWwvUmVxdWVzdCI+aW5z
dHJ1Y3Rpb25zPC9hPikuIFczQwotICBNZW1iZXJzIGNhbiBhbHNvIHNlbmQgY29tbWVudHMgZGly
ZWN0bHkgdG8gdGhlIENTUyBXb3JraW5nCi0gIEdyb3VwLgotICBUaGUgZGVhZGxpbmUgZm9yIGNv
bW1lbnRzIGlzIDE0IEphbnVhcnkgMjAwNi48L3A+Ci0KLSAgPHA+VGhpcyBpcyBzdGlsbCBhIGRy
YWZ0IGRvY3VtZW50IGFuZCBtYXkgYmUgdXBkYXRlZCwgcmVwbGFjZWQsIG9yCi0gIG9ic29sZXRl
ZCBieSBvdGhlciBkb2N1bWVudHMgYXQgYW55IHRpbWUuIEl0IGlzIGluYXBwcm9wcmlhdGUgdG8K
LSAgY2l0ZSBhIFczQyBXb3JraW5nIERyYWZ0IGFzIG90aGVyIHRoYW4gJnF1b3Q7d29yayBpbiBw
cm9ncmVzcyZxdW90Oy4KLQotICA8cD5UaGlzIGRvY3VtZW50IG1heSBiZSBhdmFpbGFibGUgaW4g
PGEKLSAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvU3R5bGUvY3NzMy1zZWxlY3RvcnMtdXBkYXRl
cy90cmFuc2xhdGlvbnMiPnRyYW5zbGF0aW9uPC9hPi4KLSAgVGhlIEVuZ2xpc2ggdmVyc2lvbiBv
ZiB0aGlzIHNwZWNpZmljYXRpb24gaXMgdGhlIG9ubHkgbm9ybWF0aXZlCi0gIHZlcnNpb24uCi0K
LSAgPGRpdiBjbGFzcz0ic3VidG9jIj4KLQotICAgPGgyIGlkPSJ0ZXN0MTAiPjxhIG5hbWU9Y29u
dGVudHM+VGFibGUgb2YgY29udGVudHM8L2E+PC9oMj4KLQotICAgPHVsIGNsYXNzPSJ0b2MiPgot
ICAgIDxsaSBjbGFzcz0idG9jbGluZTIiPjxhIGhyZWY9IiNjb250ZXh0Ij4xLiBJbnRyb2R1Y3Rp
b248L2E+Ci0gICAgIDx1bD4KLSAgICAgIDxsaT48YSBocmVmPSIjZGVwZW5kZW5jaWVzIj4xLjEu
IERlcGVuZGVuY2llczwvYT4gPC9saT4KLSAgICAgIDxsaT48YSBocmVmPSIjdGVybWlub2xvZ3ki
PjEuMi4gVGVybWlub2xvZ3k8L2E+IDwvbGk+Ci0gICAgICA8bGk+PGEgaHJlZj0iI2NoYW5nZXNG
cm9tQ1NTMiI+MS4zLiBDaGFuZ2VzIGZyb20gQ1NTMjwvYT4gPC9saT4KLSAgICAgPC91bD4KLSAg
ICA8bGkgY2xhc3M9InRvY2xpbmUyIj48YSBocmVmPSIjc2VsZWN0b3JzIj4yLiBTZWxlY3RvcnM8
L2E+Ci0gICAgPGxpIGNsYXNzPSJ0b2NsaW5lMiI+PGEgaHJlZj0iI2Nhc2VzZW5zIj4zLiBDYXNl
IHNlbnNpdGl2aXR5PC9hPgotICAgIDxsaSBjbGFzcz0idG9jbGluZTIiPjxhIGhyZWY9IiNzZWxl
Y3Rvci1zeW50YXgiPjQuIFNlbGVjdG9yIHN5bnRheDwvYT4KLSAgICA8bGkgY2xhc3M9InRvY2xp
bmUyIj48YSBocmVmPSIjZ3JvdXBpbmciPjUuIEdyb3VwcyBvZiBzZWxlY3RvcnM8L2E+Ci0gICAg
PGxpIGNsYXNzPSJ0b2NsaW5lMiI+PGEgaHJlZj0iI3NpbXBsZS1zZWxlY3RvcnMiPjYuIFNpbXBs
ZSBzZWxlY3RvcnM8L2E+Ci0gICAgIDx1bCBjbGFzcz0idG9jIj4KLSAgICAgIDxsaSBjbGFzcz0i
dG9jbGluZTMiPjxhIGhyZWY9IiN0eXBlLXNlbGVjdG9ycyI+Ni4xLiBUeXBlIHNlbGVjdG9yczwv
YT4KLSAgICAgICA8dWwgY2xhc3M9InRvYyI+Ci0gICAgICAgIDxsaSBjbGFzcz0idG9jbGluZTQi
PjxhIGhyZWY9IiN0eXBlbm1zcCI+Ni4xLjEuIFR5cGUgc2VsZWN0b3JzIGFuZCBuYW1lc3BhY2Vz
PC9hPjwvbGk+Ci0gICAgICAgPC91bD4KLSAgICAgIDxsaSBjbGFzcz0idG9jbGluZTMiPjxhIGhy
ZWY9IiN1bml2ZXJzYWwtc2VsZWN0b3IiPjYuMi4gVW5pdmVyc2FsIHNlbGVjdG9yPC9hPgotICAg
ICAgIDx1bD4KLSAgICAgICAgPGxpPjxhIGhyZWY9IiN1bml2bm1zcCI+Ni4yLjEuIFVuaXZlcnNh
bCBzZWxlY3RvciBhbmQgbmFtZXNwYWNlczwvYT48L2xpPgotICAgICAgIDwvdWw+Ci0gICAgICA8
bGkgY2xhc3M9InRvY2xpbmUzIj48YSBocmVmPSIjYXR0cmlidXRlLXNlbGVjdG9ycyI+Ni4zLiBB
dHRyaWJ1dGUgc2VsZWN0b3JzPC9hPgotICAgICAgIDx1bCBjbGFzcz0idG9jIj4KLSAgICAgICAg
PGxpIGNsYXNzPSJ0b2NsaW5lNCI+PGEgaHJlZj0iI2F0dHJpYnV0ZS1yZXByZXNlbnRhdGlvbiI+
Ni4zLjEuIFJlcHJlc2VudGF0aW9uIG9mIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZXMgdmFsdWVz
PC9hPgotICAgICAgICA8bGk+PGEgaHJlZj0iI2F0dHJpYnV0ZS1zdWJzdHJpbmdzIj42LjMuMi4g
U3Vic3RyaW5nIG1hdGNoaW5nIGF0dHJpYnV0ZSBzZWxlY3RvcnM8L2E+Ci0gICAgICAgIDxsaSBj
bGFzcz0idG9jbGluZTQiPjxhIGhyZWY9IiNhdHRybm1zcCI+Ni4zLjMuIEF0dHJpYnV0ZSBzZWxl
Y3RvcnMgYW5kIG5hbWVzcGFjZXM8L2E+Ci0gICAgICAgIDxsaSBjbGFzcz0idG9jbGluZTQiPjxh
IGhyZWY9IiNkZWYtdmFsdWVzIj42LjMuNC4gRGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzIGluIERU
RHM8L2E+PC9saT4KLSAgICAgICA8L3VsPgotICAgICAgPGxpIGNsYXNzPSJ0b2NsaW5lMyI+PGEg
aHJlZj0iI2NsYXNzLWh0bWwiPjYuNC4gQ2xhc3Mgc2VsZWN0b3JzPC9hPgotICAgICAgPGxpIGNs
YXNzPSJ0b2NsaW5lMyI+PGEgaHJlZj0iI2lkLXNlbGVjdG9ycyI+Ni41LiBJRCBzZWxlY3RvcnM8
L2E+Ci0gICAgICA8bGkgY2xhc3M9InRvY2xpbmUzIj48YSBocmVmPSIjcHNldWRvLWNsYXNzZXMi
PjYuNi4gUHNldWRvLWNsYXNzZXM8L2E+Ci0gICAgICAgPHVsIGNsYXNzPSJ0b2MiPgotICAgICAg
ICA8bGkgY2xhc3M9InRvY2xpbmU0Ij48YSBocmVmPSIjZHluYW1pYy1wc2V1ZG9zIj42LjYuMS4g
RHluYW1pYyBwc2V1ZG8tY2xhc3NlczwvYT4KLSAgICAgICAgPGxpIGNsYXNzPSJ0b2NsaW5lNCI+
PGEgaHJlZj0iI3RhcmdldC1wc2V1ZG8iPjYuNi4yLiBUaGUgOnRhcmdldCBwc2V1ZG8tY2xhc3M8
L2E+Ci0gICAgICAgIDxsaSBjbGFzcz0idG9jbGluZTQiPjxhIGhyZWY9IiNsYW5nLXBzZXVkbyI+
Ni42LjMuIFRoZSA6bGFuZygpIHBzZXVkby1jbGFzczwvYT4KLSAgICAgICAgPGxpIGNsYXNzPSJ0
b2NsaW5lNCI+PGEgaHJlZj0iI1VJc3RhdGVzIj42LjYuNC4gVUkgZWxlbWVudCBzdGF0ZXMgcHNl
dWRvLWNsYXNzZXM8L2E+Ci0gICAgICAgIDxsaSBjbGFzcz0idG9jbGluZTQiPjxhIGhyZWY9IiNz
dHJ1Y3R1cmFsLXBzZXVkb3MiPjYuNi41LiBTdHJ1Y3R1cmFsIHBzZXVkby1jbGFzc2VzPC9hPgot
ICAgICAgICAgPHVsPgotICAgICAgICAgIDxsaT48YSBocmVmPSIjcm9vdC1wc2V1ZG8iPjpyb290
IHBzZXVkby1jbGFzczwvYT4KLSAgICAgICAgICA8bGk+PGEgaHJlZj0iI250aC1jaGlsZC1wc2V1
ZG8iPjpudGgtY2hpbGQoKSBwc2V1ZG8tY2xhc3M8L2E+Ci0gICAgICAgICAgPGxpPjxhIGhyZWY9
IiNudGgtbGFzdC1jaGlsZC1wc2V1ZG8iPjpudGgtbGFzdC1jaGlsZCgpPC9hPgotICAgICAgICAg
IDxsaT48YSBocmVmPSIjbnRoLW9mLXR5cGUtcHNldWRvIj46bnRoLW9mLXR5cGUoKSBwc2V1ZG8t
Y2xhc3M8L2E+Ci0gICAgICAgICAgPGxpPjxhIGhyZWY9IiNudGgtbGFzdC1vZi10eXBlLXBzZXVk
byI+Om50aC1sYXN0LW9mLXR5cGUoKTwvYT4KLSAgICAgICAgICA8bGk+PGEgaHJlZj0iI2ZpcnN0
LWNoaWxkLXBzZXVkbyI+OmZpcnN0LWNoaWxkIHBzZXVkby1jbGFzczwvYT4KLSAgICAgICAgICA8
bGk+PGEgaHJlZj0iI2xhc3QtY2hpbGQtcHNldWRvIj46bGFzdC1jaGlsZCBwc2V1ZG8tY2xhc3M8
L2E+Ci0gICAgICAgICAgPGxpPjxhIGhyZWY9IiNmaXJzdC1vZi10eXBlLXBzZXVkbyI+OmZpcnN0
LW9mLXR5cGUgcHNldWRvLWNsYXNzPC9hPgotICAgICAgICAgIDxsaT48YSBocmVmPSIjbGFzdC1v
Zi10eXBlLXBzZXVkbyI+Omxhc3Qtb2YtdHlwZSBwc2V1ZG8tY2xhc3M8L2E+Ci0gICAgICAgICAg
PGxpPjxhIGhyZWY9IiNvbmx5LWNoaWxkLXBzZXVkbyI+Om9ubHktY2hpbGQgcHNldWRvLWNsYXNz
PC9hPgotICAgICAgICAgIDxsaT48YSBocmVmPSIjb25seS1vZi10eXBlLXBzZXVkbyI+Om9ubHkt
b2YtdHlwZSBwc2V1ZG8tY2xhc3M8L2E+Ci0gICAgICAgICAgPGxpPjxhIGhyZWY9IiNlbXB0eS1w
c2V1ZG8iPjplbXB0eSBwc2V1ZG8tY2xhc3M8L2E+PC9saT4KLSAgICAgICAgIDwvdWw+Ci0gICAg
ICAgIDxsaSBjbGFzcz0idG9jbGluZTQiPjxhIGhyZWY9IiNuZWdhdGlvbiI+Ni42LjcuIFRoZSBu
ZWdhdGlvbiBwc2V1ZG8tY2xhc3M8L2E+PC9saT4KLSAgICAgICA8L3VsPgotICAgICAgPC9saT4K
LSAgICAgPC91bD4KLSAgICA8bGk+PGEgaHJlZj0iI3BzZXVkby1lbGVtZW50cyI+Ny4gUHNldWRv
LWVsZW1lbnRzPC9hPgotICAgICA8dWw+Ci0gICAgICA8bGk+PGEgaHJlZj0iI2ZpcnN0LWxpbmUi
PjcuMS4gVGhlIDo6Zmlyc3QtbGluZSBwc2V1ZG8tZWxlbWVudDwvYT4KLSAgICAgIDxsaT48YSBo
cmVmPSIjZmlyc3QtbGV0dGVyIj43LjIuIFRoZSA6OmZpcnN0LWxldHRlciBwc2V1ZG8tZWxlbWVu
dDwvYT4KLSAgICAgIDxsaT48YSBocmVmPSIjVUlmcmFnbWVudHMiPjcuMy4gVGhlIDo6c2VsZWN0
aW9uIHBzZXVkby1lbGVtZW50PC9hPgotICAgICAgPGxpPjxhIGhyZWY9IiNnZW4tY29udGVudCI+
Ny40LiBUaGUgOjpiZWZvcmUgYW5kIDo6YWZ0ZXIgcHNldWRvLWVsZW1lbnRzPC9hPjwvbGk+Ci0g
ICAgIDwvdWw+Ci0gICAgPGxpIGNsYXNzPSJ0b2NsaW5lMiI+PGEgaHJlZj0iI2NvbWJpbmF0b3Jz
Ij44LiBDb21iaW5hdG9yczwvYT4KLSAgICAgPHVsIGNsYXNzPSJ0b2MiPgotICAgICAgPGxpIGNs
YXNzPSJ0b2NsaW5lMyI+PGEgaHJlZj0iI2Rlc2NlbmRhbnQtY29tYmluYXRvcnMiPjguMS4gRGVz
Y2VuZGFudCBjb21iaW5hdG9yczwvYT4KLSAgICAgIDxsaSBjbGFzcz0idG9jbGluZTMiPjxhIGhy
ZWY9IiNjaGlsZC1jb21iaW5hdG9ycyI+OC4yLiBDaGlsZCBjb21iaW5hdG9yczwvYT4KLSAgICAg
IDxsaSBjbGFzcz0idG9jbGluZTMiPjxhIGhyZWY9IiNzaWJsaW5nLWNvbWJpbmF0b3JzIj44LjMu
IFNpYmxpbmcgY29tYmluYXRvcnM8L2E+Ci0gICAgICAgPHVsIGNsYXNzPSJ0b2MiPgotICAgICAg
ICA8bGkgY2xhc3M9InRvY2xpbmU0Ij48YSBocmVmPSIjYWRqYWNlbnQtc2libGluZy1jb21iaW5h
dG9ycyI+OC4zLjEuIEFkamFjZW50IHNpYmxpbmcgY29tYmluYXRvcjwvYT4KLSAgICAgICAgPGxp
IGNsYXNzPSJ0b2NsaW5lNCI+PGEgaHJlZj0iI2dlbmVyYWwtc2libGluZy1jb21iaW5hdG9ycyI+
OC4zLjIuIEdlbmVyYWwgc2libGluZyBjb21iaW5hdG9yPC9hPjwvbGk+Ci0gICAgICAgPC91bD4K
LSAgICAgIDwvbGk+Ci0gICAgIDwvdWw+Ci0gICAgPGxpIGNsYXNzPSJ0b2NsaW5lMiI+PGEgaHJl
Zj0iI3NwZWNpZmljaXR5Ij45LiBDYWxjdWxhdGluZyBhIHNlbGVjdG9yJ3Mgc3BlY2lmaWNpdHk8
L2E+Ci0gICAgPGxpIGNsYXNzPSJ0b2NsaW5lMiI+PGEgaHJlZj0iI3czY3NlbGdyYW1tYXIiPjEw
LiBUaGUgZ3JhbW1hciBvZiBTZWxlY3RvcnM8L2E+Ci0gICAgIDx1bCBjbGFzcz0idG9jIj4KLSAg
ICAgIDxsaSBjbGFzcz0idG9jbGluZTMiPjxhIGhyZWY9IiNncmFtbWFyIj4xMC4xLiBHcmFtbWFy
PC9hPgotICAgICAgPGxpIGNsYXNzPSJ0b2NsaW5lMyI+PGEgaHJlZj0iI2xleCI+MTAuMi4gTGV4
aWNhbCBzY2FubmVyPC9hPjwvbGk+Ci0gICAgIDwvdWw+Ci0gICAgPGxpIGNsYXNzPSJ0b2NsaW5l
MiI+PGEgaHJlZj0iI2Rvd25sZXZlbCI+MTEuIE5hbWVzcGFjZXMgYW5kIGRvd24tbGV2ZWwgY2xp
ZW50czwvYT4KLSAgICA8bGkgY2xhc3M9InRvY2xpbmUyIj48YSBocmVmPSIjcHJvZmlsaW5nIj4x
Mi4gUHJvZmlsZXM8L2E+Ci0gICAgPGxpPjxhIGhyZWY9IiNDb25mb3JtYW5jZSI+MTMuIENvbmZv
cm1hbmNlIGFuZCByZXF1aXJlbWVudHM8L2E+Ci0gICAgPGxpPjxhIGhyZWY9IiNUZXN0cyI+MTQu
IFRlc3RzPC9hPgotICAgIDxsaT48YSBocmVmPSIjQUNLUyI+MTUuIEFja25vd2xlZGdlbWVudHM8
L2E+Ci0gICAgPGxpIGNsYXNzPSJ0b2NsaW5lMiI+PGEgaHJlZj0iI3JlZmVyZW5jZXMiPjE2LiBS
ZWZlcmVuY2VzPC9hPgotICAgPC91bD4KLQotICA8L2Rpdj4KLQotICA8aDI+PGEgbmFtZT1jb250
ZXh0PjEuIEludHJvZHVjdGlvbjwvYT48L2gyPgotCi0gIDxoMz48YSBuYW1lPWRlcGVuZGVuY2ll
cz48L2E+MS4xLiBEZXBlbmRlbmNpZXM8L2gzPgotCi0gIDxwPlNvbWUgZmVhdHVyZXMgb2YgdGhp
cyBzcGVjaWZpY2F0aW9uIGFyZSBzcGVjaWZpYyB0byBDU1MsIG9yIGhhdmUKLSAgcGFydGljdWxh
ciBsaW1pdGF0aW9ucyBvciBydWxlcyBzcGVjaWZpYyB0byBDU1MuIEluIHRoaXMKLSAgc3BlY2lm
aWNhdGlvbiwgdGhlc2UgaGF2ZSBiZWVuIGRlc2NyaWJlZCBpbiB0ZXJtcyBvZiBDU1MyLjEuIDxh
Ci0gIGhyZWY9IiNyZWZzQ1NTMjEiPltDU1MyMV08L2E+PC9wPgotCi0gIDxoMz48YSBuYW1lPXRl
cm1pbm9sb2d5PjwvYT4xLjIuIFRlcm1pbm9sb2d5PC9oMz4KLQotICA8cD5BbGwgb2YgdGhlIHRl
eHQgb2YgdGhpcyBzcGVjaWZpY2F0aW9uIGlzIG5vcm1hdGl2ZSBleGNlcHQKLSAgZXhhbXBsZXMs
IG5vdGVzLCBhbmQgc2VjdGlvbnMgZXhwbGljaXRseSBtYXJrZWQgYXMKLSAgbm9uLW5vcm1hdGl2
ZS48L3A+Ci0KLSAgPGgzPjxhIG5hbWU9Y2hhbmdlc0Zyb21DU1MyPjwvYT4xLjMuIENoYW5nZXMg
ZnJvbSBDU1MyPC9oMz4KLQotICA8cD48ZW0+VGhpcyBzZWN0aW9uIGlzIG5vbi1ub3JtYXRpdmUu
PC9lbT48L3A+Ci0KLSAgPHA+VGhlIG1haW4gZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2VsZWN0
b3JzIGluIENTUzIgYW5kIHRob3NlIGluCi0gIFNlbGVjdG9ycyBhcmU6Ci0KLSAgPHVsPgotCi0g
ICA8bGk+dGhlIGxpc3Qgb2YgYmFzaWMgZGVmaW5pdGlvbnMgKHNlbGVjdG9yLCBncm91cCBvZiBz
ZWxlY3RvcnMsCi0gICBzaW1wbGUgc2VsZWN0b3IsIGV0Yy4pIGhhcyBiZWVuIGNoYW5nZWQ7IGlu
IHBhcnRpY3VsYXIsIHdoYXQgd2FzCi0gICByZWZlcnJlZCB0byBpbiBDU1MyIGFzIGEgc2ltcGxl
IHNlbGVjdG9yIGlzIG5vdyBjYWxsZWQgYSBzZXF1ZW5jZQotICAgb2Ygc2ltcGxlIHNlbGVjdG9y
cywgYW5kIHRoZSB0ZXJtICJzaW1wbGUgc2VsZWN0b3IiIGlzIG5vdyB1c2VkIGZvcgotICAgdGhl
IGNvbXBvbmVudHMgb2YgdGhpcyBzZXF1ZW5jZTwvbGk+Ci0KLSAgIDxsaT5hbiBvcHRpb25hbCBu
YW1lc3BhY2UgY29tcG9uZW50IGlzIG5vdyBhbGxvd2VkIGluIHR5cGUgZWxlbWVudAotICAgc2Vs
ZWN0b3JzLCB0aGUgdW5pdmVyc2FsIHNlbGVjdG9yIGFuZCBhdHRyaWJ1dGUgc2VsZWN0b3JzPC9s
aT4KLQotICAgPGxpPmEgPGEgaHJlZj0iI2dlbmVyYWwtc2libGluZy1jb21iaW5hdG9ycyI+bmV3
IGNvbWJpbmF0b3I8L2E+IGhhcyBiZWVuIGludHJvZHVjZWQ8L2xpPgotCi0gICA8bGk+bmV3IHNp
bXBsZSBzZWxlY3RvcnMgaW5jbHVkaW5nIHN1YnN0cmluZyBtYXRjaGluZyBhdHRyaWJ1dGUKLSAg
IHNlbGVjdG9ycywgYW5kIG5ldyBwc2V1ZG8tY2xhc3NlczwvbGk+Ci0KLSAgIDxsaT5uZXcgcHNl
dWRvLWVsZW1lbnRzLCBhbmQgaW50cm9kdWN0aW9uIG9mIHRoZSAiOjoiIGNvbnZlbnRpb24KLSAg
IGZvciBwc2V1ZG8tZWxlbWVudHM8L2xpPgotCi0gICA8bGk+dGhlIGdyYW1tYXIgaGFzIGJlZW4g
cmV3cml0dGVuPC9saT4KLQotICAgPGxpPnByb2ZpbGVzIHRvIGJlIGFkZGVkIHRvIHNwZWNpZmlj
YXRpb25zIGludGVncmF0aW5nIFNlbGVjdG9ycwotICAgYW5kIGRlZmluaW5nIHRoZSBzZXQgb2Yg
c2VsZWN0b3JzIHdoaWNoIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieQotICAgZWFjaCBzcGVjaWZp
Y2F0aW9uPC9saT4KLQotICAgPGxpPlNlbGVjdG9ycyBhcmUgbm93IGEgQ1NTMyBNb2R1bGUgYW5k
IGFuIGluZGVwZW5kZW50Ci0gICBzcGVjaWZpY2F0aW9uOyBvdGhlciBzcGVjaWZpY2F0aW9ucyBj
YW4gbm93IHJlZmVyIHRvIHRoaXMgZG9jdW1lbnQKLSAgIGluZGVwZW5kZW50bHkgb2YgQ1NTPC9s
aT4KLQotICAgPGxpPnRoZSBzcGVjaWZpY2F0aW9uIG5vdyBoYXMgaXRzIG93biB0ZXN0IHN1aXRl
PC9saT4KLQotICA8L3VsPgotCi08aDI+PGEgbmFtZT1zZWxlY3RvcnM+PC9hPjIuIFNlbGVjdG9y
czwvaDI+Ci0KLTxwPjxlbT5UaGlzIHNlY3Rpb24gaXMgbm9uLW5vcm1hdGl2ZSwgYXMgaXQgbWVy
ZWx5IHN1bW1hcml6ZXMgdGhlCi1mb2xsb3dpbmcgc2VjdGlvbnMuPC9lbT48L3A+Ci0KLTxwPkEg
U2VsZWN0b3IgcmVwcmVzZW50cyBhIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgY2FuIGJlIHVz
ZWQgYXMgYQotY29uZGl0aW9uIChlLmcuIGluIGEgQ1NTIHJ1bGUpIHRoYXQgZGV0ZXJtaW5lcyB3
aGljaCBlbGVtZW50cyBhCi1zZWxlY3RvciBtYXRjaGVzIGluIHRoZSBkb2N1bWVudCB0cmVlLCBv
ciBhcyBhIGZsYXQgZGVzY3JpcHRpb24gb2YgdGhlCi1IVE1MIG9yIFhNTCBmcmFnbWVudCBjb3Jy
ZXNwb25kaW5nIHRvIHRoYXQgc3RydWN0dXJlLjwvcD4KLQotPHA+U2VsZWN0b3JzIG1heSByYW5n
ZSBmcm9tIHNpbXBsZSBlbGVtZW50IG5hbWVzIHRvIHJpY2ggY29udGV4dHVhbAotcmVwcmVzZW50
YXRpb25zLjwvcD4KLQotPHA+VGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBTZWxl
Y3RvciBzeW50YXg6PC9wPgotCi08dGFibGUgY2xhc3M9InNlbGVjdG9yc1JldmlldyI+Ci0gIDx0
aGVhZD4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0icGF0dGVybiI+UGF0dGVybjwvdGg+Ci0gICAg
PHRoIGNsYXNzPSJtZWFuaW5nIj5NZWFuaW5nPC90aD4KLSAgICA8dGggY2xhc3M9ImRlc2NyaWJl
ZCI+RGVzY3JpYmVkIGluIHNlY3Rpb248L3RoPgotICAgIDx0aCBjbGFzcz0ib3JpZ2luIj5GaXJz
dCBkZWZpbmVkIGluIENTUyBsZXZlbDwvdGg+PC90cj4KLSAgPHRib2R5PgotICA8dHI+Ci0gICAg
PHRkIGNsYXNzPSJwYXR0ZXJuIj4qPC90ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFueSBl
bGVtZW50PC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiN1
bml2ZXJzYWwtc2VsZWN0b3IiPlVuaXZlcnNhbAotICAgICAgc2VsZWN0b3I8L2E+PC90ZD4KLSAg
ICA8dGQgY2xhc3M9Im9yaWdpbiI+MjwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0i
cGF0dGVybiI+RTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5hbiBlbGVtZW50IG9mIHR5
cGUgRTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmliZWQiPjxhCi0gICAgICBocmVmPSIjdHlw
ZS1zZWxlY3RvcnMiPlR5cGUgc2VsZWN0b3I8L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9yaWdp
biI+MTwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0icGF0dGVybiI+RVtmb29dPC90
ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEUgZWxlbWVudCB3aXRoIGEgImZvbyIgYXR0
cmlidXRlPC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNh
dHRyaWJ1dGUtc2VsZWN0b3JzIj5BdHRyaWJ1dGUKLSAgICAgIHNlbGVjdG9yczwvYT48L3RkPgot
ICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4yPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNz
PSJwYXR0ZXJuIj5FW2Zvbz0iYmFyIl08L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVhbmluZyI+YW4g
RSBlbGVtZW50IHdob3NlICJmb28iIGF0dHJpYnV0ZSB2YWx1ZSBpcyBleGFjdGx5Ci0gICAgICBl
cXVhbCB0byAiYmFyIjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmliZWQiPjxhCi0gICAgICBo
cmVmPSIjYXR0cmlidXRlLXNlbGVjdG9ycyI+QXR0cmlidXRlCi0gICAgICBzZWxlY3RvcnM8L2E+
PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9yaWdpbiI+MjwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0
ZCBjbGFzcz0icGF0dGVybiI+RVtmb29+PSJiYXIiXTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFu
aW5nIj5hbiBFIGVsZW1lbnQgd2hvc2UgImZvbyIgYXR0cmlidXRlIHZhbHVlIGlzIGEgbGlzdCBv
ZgotICAgICAgc3BhY2Utc2VwYXJhdGVkIHZhbHVlcywgb25lIG9mIHdoaWNoIGlzIGV4YWN0bHkg
ZXF1YWwgdG8gImJhciI8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAg
aHJlZj0iI2F0dHJpYnV0ZS1zZWxlY3RvcnMiPkF0dHJpYnV0ZQotICAgICAgc2VsZWN0b3JzPC9h
PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJvcmlnaW4iPjI8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8
dGQgY2xhc3M9InBhdHRlcm4iPkVbZm9vXj0iYmFyIl08L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVh
bmluZyI+YW4gRSBlbGVtZW50IHdob3NlICJmb28iIGF0dHJpYnV0ZSB2YWx1ZSBiZWdpbnMgZXhh
Y3RseQotICAgICAgd2l0aCB0aGUgc3RyaW5nICJiYXIiPC90ZD4KLSAgICA8dGQgY2xhc3M9ImRl
c2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNhdHRyaWJ1dGUtc2VsZWN0b3JzIj5BdHRyaWJ1dGUK
LSAgICAgIHNlbGVjdG9yczwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4zPC90ZD48
L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJwYXR0ZXJuIj5FW2ZvbyQ9ImJhciJdPC90ZD4K
LSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEUgZWxlbWVudCB3aG9zZSAiZm9vIiBhdHRyaWJ1
dGUgdmFsdWUgZW5kcyBleGFjdGx5Ci0gICAgICB3aXRoIHRoZSBzdHJpbmcgImJhciI8L3RkPgot
ICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAgaHJlZj0iI2F0dHJpYnV0ZS1zZWxl
Y3RvcnMiPkF0dHJpYnV0ZQotICAgICAgc2VsZWN0b3JzPC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNz
PSJvcmlnaW4iPjM8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4iPkVb
Zm9vKj0iYmFyIl08L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVhbmluZyI+YW4gRSBlbGVtZW50IHdo
b3NlICJmb28iIGF0dHJpYnV0ZSB2YWx1ZSBjb250YWlucyB0aGUKLSAgICAgIHN1YnN0cmluZyAi
YmFyIjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmliZWQiPjxhCi0gICAgICBocmVmPSIjYXR0
cmlidXRlLXNlbGVjdG9ycyI+QXR0cmlidXRlCi0gICAgICBzZWxlY3RvcnM8L2E+PC90ZD4KLSAg
ICA8dGQgY2xhc3M9Im9yaWdpbiI+MzwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0i
cGF0dGVybiI+RVtocmVmbGFuZ3w9ImVuIl08L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVhbmluZyI+
YW4gRSBlbGVtZW50IHdob3NlICJocmVmbGFuZyIgYXR0cmlidXRlIGhhcyBhIGh5cGhlbi1zZXBh
cmF0ZWQKLSAgICAgIGxpc3Qgb2YgdmFsdWVzIGJlZ2lubmluZyAoZnJvbSB0aGUgbGVmdCkgd2l0
aCAiZW4iPC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNh
dHRyaWJ1dGUtc2VsZWN0b3JzIj5BdHRyaWJ1dGUKLSAgICAgIHNlbGVjdG9yczwvYT48L3RkPgot
ICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4yPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNz
PSJwYXR0ZXJuIj5FOnJvb3Q8L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVhbmluZyI+YW4gRSBlbGVt
ZW50LCByb290IG9mIHRoZSBkb2N1bWVudDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmliZWQi
PjxhCi0gICAgICBocmVmPSIjc3RydWN0dXJhbC1wc2V1ZG9zIj5TdHJ1Y3R1cmFsCi0gICAgICBw
c2V1ZG8tY2xhc3NlczwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4zPC90ZD48L3Ry
PgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJwYXR0ZXJuIj5FOm50aC1jaGlsZChuKTwvdGQ+Ci0g
ICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5hbiBFIGVsZW1lbnQsIHRoZSBuLXRoIGNoaWxkIG9mIGl0
cyBwYXJlbnQ8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAgaHJlZj0i
I3N0cnVjdHVyYWwtcHNldWRvcyI+U3RydWN0dXJhbAotICAgICAgcHNldWRvLWNsYXNzZXM8L2E+
PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9yaWdpbiI+MzwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0
ZCBjbGFzcz0icGF0dGVybiI+RTpudGgtbGFzdC1jaGlsZChuKTwvdGQ+Ci0gICAgPHRkIGNsYXNz
PSJtZWFuaW5nIj5hbiBFIGVsZW1lbnQsIHRoZSBuLXRoIGNoaWxkIG9mIGl0cyBwYXJlbnQsIGNv
dW50aW5nCi0gICAgICBmcm9tIHRoZSBsYXN0IG9uZTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNj
cmliZWQiPjxhCi0gICAgICBocmVmPSIjc3RydWN0dXJhbC1wc2V1ZG9zIj5TdHJ1Y3R1cmFsCi0g
ICAgICBwc2V1ZG8tY2xhc3NlczwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4zPC90
ZD48L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJwYXR0ZXJuIj5FOm50aC1vZi10eXBlKG4p
PC90ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEUgZWxlbWVudCwgdGhlIG4tdGggc2li
bGluZyBvZiBpdHMgdHlwZTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmliZWQiPjxhCi0gICAg
ICBocmVmPSIjc3RydWN0dXJhbC1wc2V1ZG9zIj5TdHJ1Y3R1cmFsCi0gICAgICBwc2V1ZG8tY2xh
c3NlczwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4zPC90ZD48L3RyPgotICA8dHI+
Ci0gICAgPHRkIGNsYXNzPSJwYXR0ZXJuIj5FOm50aC1sYXN0LW9mLXR5cGUobik8L3RkPgotICAg
IDx0ZCBjbGFzcz0ibWVhbmluZyI+YW4gRSBlbGVtZW50LCB0aGUgbi10aCBzaWJsaW5nIG9mIGl0
cyB0eXBlLCBjb3VudGluZwotICAgICAgZnJvbSB0aGUgbGFzdCBvbmU8L3RkPgotICAgIDx0ZCBj
bGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAgaHJlZj0iI3N0cnVjdHVyYWwtcHNldWRvcyI+U3Ry
dWN0dXJhbAotICAgICAgcHNldWRvLWNsYXNzZXM8L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9y
aWdpbiI+MzwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0icGF0dGVybiI+RTpmaXJz
dC1jaGlsZDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5hbiBFIGVsZW1lbnQsIGZpcnN0
IGNoaWxkIG9mIGl0cyBwYXJlbnQ8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQot
ICAgICAgaHJlZj0iI3N0cnVjdHVyYWwtcHNldWRvcyI+U3RydWN0dXJhbAotICAgICAgcHNldWRv
LWNsYXNzZXM8L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9yaWdpbiI+MjwvdGQ+PC90cj4KLSAg
PHRyPgotICAgIDx0ZCBjbGFzcz0icGF0dGVybiI+RTpsYXN0LWNoaWxkPC90ZD4KLSAgICA8dGQg
Y2xhc3M9Im1lYW5pbmciPmFuIEUgZWxlbWVudCwgbGFzdCBjaGlsZCBvZiBpdHMgcGFyZW50PC90
ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNzdHJ1Y3R1cmFs
LXBzZXVkb3MiPlN0cnVjdHVyYWwKLSAgICAgIHBzZXVkby1jbGFzc2VzPC9hPjwvdGQ+Ci0gICAg
PHRkIGNsYXNzPSJvcmlnaW4iPjM8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InBh
dHRlcm4iPkU6Zmlyc3Qtb2YtdHlwZTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5hbiBF
IGVsZW1lbnQsIGZpcnN0IHNpYmxpbmcgb2YgaXRzIHR5cGU8L3RkPgotICAgIDx0ZCBjbGFzcz0i
ZGVzY3JpYmVkIj48YQotICAgICAgaHJlZj0iI3N0cnVjdHVyYWwtcHNldWRvcyI+U3RydWN0dXJh
bAotICAgICAgcHNldWRvLWNsYXNzZXM8L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9yaWdpbiI+
MzwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0icGF0dGVybiI+RTpsYXN0LW9mLXR5
cGU8L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVhbmluZyI+YW4gRSBlbGVtZW50LCBsYXN0IHNpYmxp
bmcgb2YgaXRzIHR5cGU8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAg
aHJlZj0iI3N0cnVjdHVyYWwtcHNldWRvcyI+U3RydWN0dXJhbAotICAgICAgcHNldWRvLWNsYXNz
ZXM8L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9yaWdpbiI+MzwvdGQ+PC90cj4KLSAgPHRyPgot
ICAgIDx0ZCBjbGFzcz0icGF0dGVybiI+RTpvbmx5LWNoaWxkPC90ZD4KLSAgICA8dGQgY2xhc3M9
Im1lYW5pbmciPmFuIEUgZWxlbWVudCwgb25seSBjaGlsZCBvZiBpdHMgcGFyZW50PC90ZD4KLSAg
ICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNzdHJ1Y3R1cmFsLXBzZXVk
b3MiPlN0cnVjdHVyYWwKLSAgICAgIHBzZXVkby1jbGFzc2VzPC9hPjwvdGQ+Ci0gICAgPHRkIGNs
YXNzPSJvcmlnaW4iPjM8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4i
PkU6b25seS1vZi10eXBlPC90ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEUgZWxlbWVu
dCwgb25seSBzaWJsaW5nIG9mIGl0cyB0eXBlPC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaWJl
ZCI+PGEKLSAgICAgIGhyZWY9IiNzdHJ1Y3R1cmFsLXBzZXVkb3MiPlN0cnVjdHVyYWwKLSAgICAg
IHBzZXVkby1jbGFzc2VzPC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJvcmlnaW4iPjM8L3RkPjwv
dHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4iPkU6ZW1wdHk8L3RkPgotICAgIDx0
ZCBjbGFzcz0ibWVhbmluZyI+YW4gRSBlbGVtZW50IHRoYXQgaGFzIG5vIGNoaWxkcmVuIChpbmNs
dWRpbmcgdGV4dAotICAgIG5vZGVzKTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmliZWQiPjxh
Ci0gICAgICBocmVmPSIjc3RydWN0dXJhbC1wc2V1ZG9zIj5TdHJ1Y3R1cmFsCi0gICAgICBwc2V1
ZG8tY2xhc3NlczwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4zPC90ZD48L3RyPgot
ICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJwYXR0ZXJuIj5FOmxpbms8YnI+RTp2aXNpdGVkPC90ZD4K
LSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEUgZWxlbWVudCBiZWluZyB0aGUgc291cmNlIGFu
Y2hvciBvZiBhIGh5cGVybGluayBvZgotICAgICAgd2hpY2ggdGhlIHRhcmdldCBpcyBub3QgeWV0
IHZpc2l0ZWQgKDpsaW5rKSBvciBhbHJlYWR5IHZpc2l0ZWQKLSAgICAoOnZpc2l0ZWQpPC90ZD4K
LSAgICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNsaW5rIj5UaGUgbGlu
awotICAgICAgcHNldWRvLWNsYXNzZXM8L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9yaWdpbiI+
MTwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0icGF0dGVybiI+RTphY3RpdmU8YnI+
RTpob3Zlcjxicj5FOmZvY3VzPC90ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEUgZWxl
bWVudCBkdXJpbmcgY2VydGFpbiB1c2VyIGFjdGlvbnM8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVz
Y3JpYmVkIj48YQotICAgICAgaHJlZj0iI3VzZXJhY3Rpb24tcHNldWRvcyI+VGhlIHVzZXIKLSAg
ICAgIGFjdGlvbiBwc2V1ZG8tY2xhc3NlczwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2lu
Ij4xIGFuZCAyPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJwYXR0ZXJuIj5FOnRh
cmdldDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5hbiBFIGVsZW1lbnQgYmVpbmcgdGhl
IHRhcmdldCBvZiB0aGUgcmVmZXJyaW5nIFVSSTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmli
ZWQiPjxhCi0gICAgICBocmVmPSIjdGFyZ2V0LXBzZXVkbyI+VGhlIHRhcmdldAotICAgICAgcHNl
dWRvLWNsYXNzPC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJvcmlnaW4iPjM8L3RkPjwvdHI+Ci0g
IDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4iPkU6bGFuZyhmcik8L3RkPgotICAgIDx0ZCBj
bGFzcz0ibWVhbmluZyI+YW4gZWxlbWVudCBvZiB0eXBlIEUgaW4gbGFuZ3VhZ2UgImZyIiAodGhl
IGRvY3VtZW50Ci0gICAgICBsYW5ndWFnZSBzcGVjaWZpZXMgaG93IGxhbmd1YWdlIGlzIGRldGVy
bWluZWQpPC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNs
YW5nLXBzZXVkbyI+VGhlIDpsYW5nKCkKLSAgICAgIHBzZXVkby1jbGFzczwvYT48L3RkPgotICAg
IDx0ZCBjbGFzcz0ib3JpZ2luIj4yPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJw
YXR0ZXJuIj5FOmVuYWJsZWQ8YnI+RTpkaXNhYmxlZDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFu
aW5nIj5hIHVzZXIgaW50ZXJmYWNlIGVsZW1lbnQgRSB3aGljaCBpcyBlbmFibGVkIG9yCi0gICAg
ZGlzYWJsZWQ8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAgaHJlZj0i
I1VJc3RhdGVzIj5UaGUgVUkgZWxlbWVudCBzdGF0ZXMKLSAgICAgIHBzZXVkby1jbGFzc2VzPC9h
PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJvcmlnaW4iPjM8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8
dGQgY2xhc3M9InBhdHRlcm4iPkU6Y2hlY2tlZDwhLS08YnI+RTppbmRldGVybWluYXRlLS0+PC90
ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmEgdXNlciBpbnRlcmZhY2UgZWxlbWVudCBFIHdo
aWNoIGlzIGNoZWNrZWQ8IS0tIG9yIGluIGFuCi0gICAgICBpbmRldGVybWluYXRlIHN0YXRlLS0+
IChmb3IgaW5zdGFuY2UgYSByYWRpby1idXR0b24gb3IgY2hlY2tib3gpPC90ZD4KLSAgICA8dGQg
Y2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNVSXN0YXRlcyI+VGhlIFVJIGVsZW1l
bnQgc3RhdGVzCi0gICAgICBwc2V1ZG8tY2xhc3NlczwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0i
b3JpZ2luIj4zPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJwYXR0ZXJuIj5FOjpm
aXJzdC1saW5lPC90ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPnRoZSBmaXJzdCBmb3JtYXR0
ZWQgbGluZSBvZiBhbiBFIGVsZW1lbnQ8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48
YQotICAgICAgaHJlZj0iI2ZpcnN0LWxpbmUiPlRoZSA6OmZpcnN0LWxpbmUKLSAgICAgIHBzZXVk
by1lbGVtZW50PC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJvcmlnaW4iPjE8L3RkPjwvdHI+Ci0g
IDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4iPkU6OmZpcnN0LWxldHRlcjwvdGQ+Ci0gICAg
PHRkIGNsYXNzPSJtZWFuaW5nIj50aGUgZmlyc3QgZm9ybWF0dGVkIGxldHRlciBvZiBhbiBFIGVs
ZW1lbnQ8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAgaHJlZj0iI2Zp
cnN0LWxldHRlciI+VGhlIDo6Zmlyc3QtbGV0dGVyCi0gICAgICBwc2V1ZG8tZWxlbWVudDwvYT48
L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4xPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRk
IGNsYXNzPSJwYXR0ZXJuIj5FOjpzZWxlY3Rpb248L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVhbmlu
ZyI+dGhlIHBvcnRpb24gb2YgYW4gRSBlbGVtZW50IHRoYXQgaXMgY3VycmVudGx5Ci0gICAgICBz
ZWxlY3RlZC9oaWdobGlnaHRlZCBieSB0aGUgdXNlcjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNj
cmliZWQiPjxhCi0gICAgICBocmVmPSIjVUlmcmFnbWVudHMiPlRoZSBVSSBlbGVtZW50Ci0gICAg
ICBmcmFnbWVudHMgcHNldWRvLWVsZW1lbnRzPC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJvcmln
aW4iPjM8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4iPkU6OmJlZm9y
ZTwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5nZW5lcmF0ZWQgY29udGVudCBiZWZvcmUg
YW4gRSBlbGVtZW50PC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhy
ZWY9IiNnZW4tY29udGVudCI+VGhlIDo6YmVmb3JlCi0gICAgICBwc2V1ZG8tZWxlbWVudDwvYT48
L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4yPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRk
IGNsYXNzPSJwYXR0ZXJuIj5FOjphZnRlcjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5n
ZW5lcmF0ZWQgY29udGVudCBhZnRlciBhbiBFIGVsZW1lbnQ8L3RkPgotICAgIDx0ZCBjbGFzcz0i
ZGVzY3JpYmVkIj48YQotICAgICAgaHJlZj0iI2dlbi1jb250ZW50Ij5UaGUgOjphZnRlcgotICAg
ICAgcHNldWRvLWVsZW1lbnQ8L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9Im9yaWdpbiI+MjwvdGQ+
PC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0icGF0dGVybiI+RS53YXJuaW5nPC90ZD4KLSAg
ICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEUgZWxlbWVudCB3aG9zZSBjbGFzcyBpcwotIndhcm5p
bmciICh0aGUgZG9jdW1lbnQgbGFuZ3VhZ2Ugc3BlY2lmaWVzIGhvdyBjbGFzcyBpcyBkZXRlcm1p
bmVkKS48L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAgaHJlZj0iI2Ns
YXNzLWh0bWwiPkNsYXNzCi0gICAgc2VsZWN0b3JzPC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJv
cmlnaW4iPjE8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4iPkUjbXlp
ZDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5hbiBFIGVsZW1lbnQgd2l0aCBJRCBlcXVh
bCB0byAibXlpZCIuPC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhy
ZWY9IiNpZC1zZWxlY3RvcnMiPklECi0gICAgc2VsZWN0b3JzPC9hPjwvdGQ+Ci0gICAgPHRkIGNs
YXNzPSJvcmlnaW4iPjE8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4i
PkU6bm90KHMpPC90ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEUgZWxlbWVudCB0aGF0
IGRvZXMgbm90IG1hdGNoIHNpbXBsZSBzZWxlY3RvciBzPC90ZD4KLSAgICA8dGQgY2xhc3M9ImRl
c2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNuZWdhdGlvbiI+TmVnYXRpb24KLSAgICAgIHBzZXVk
by1jbGFzczwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4zPC90ZD48L3RyPgotICA8
dHI+Ci0gICAgPHRkIGNsYXNzPSJwYXR0ZXJuIj5FIEY8L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVh
bmluZyI+YW4gRiBlbGVtZW50IGRlc2NlbmRhbnQgb2YgYW4gRSBlbGVtZW50PC90ZD4KLSAgICA8
dGQgY2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNkZXNjZW5kYW50LWNvbWJpbmF0
b3JzIj5EZXNjZW5kYW50Ci0gICAgICBjb21iaW5hdG9yPC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNz
PSJvcmlnaW4iPjE8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InBhdHRlcm4iPkUg
Jmd0OyBGPC90ZD4KLSAgICA8dGQgY2xhc3M9Im1lYW5pbmciPmFuIEYgZWxlbWVudCBjaGlsZCBv
ZiBhbiBFIGVsZW1lbnQ8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpYmVkIj48YQotICAgICAg
aHJlZj0iI2NoaWxkLWNvbWJpbmF0b3JzIj5DaGlsZAotICAgICAgY29tYmluYXRvcjwvYT48L3Rk
PgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4yPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRkIGNs
YXNzPSJwYXR0ZXJuIj5FICsgRjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZWFuaW5nIj5hbiBGIGVs
ZW1lbnQgaW1tZWRpYXRlbHkgcHJlY2VkZWQgYnkgYW4gRSBlbGVtZW50PC90ZD4KLSAgICA8dGQg
Y2xhc3M9ImRlc2NyaWJlZCI+PGEKLSAgICAgIGhyZWY9IiNhZGphY2VudC1zaWJsaW5nLWNvbWJp
bmF0b3JzIj5BZGphY2VudCBzaWJsaW5nIGNvbWJpbmF0b3I8L2E+PC90ZD4KLSAgICA8dGQgY2xh
c3M9Im9yaWdpbiI+MjwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0icGF0dGVybiI+
RSB+IEY8L3RkPgotICAgIDx0ZCBjbGFzcz0ibWVhbmluZyI+YW4gRiBlbGVtZW50IHByZWNlZGVk
IGJ5IGFuIEUgZWxlbWVudDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmliZWQiPjxhCi0gICAg
ICBocmVmPSIjZ2VuZXJhbC1zaWJsaW5nLWNvbWJpbmF0b3JzIj5HZW5lcmFsIHNpYmxpbmcgY29t
YmluYXRvcjwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0ib3JpZ2luIj4zPC90ZD48L3RyPjwvdGJv
ZHk+PC90YWJsZT4KLQotPHA+VGhlIG1lYW5pbmcgb2YgZWFjaCBzZWxlY3RvciBpcyBkZXJpdmVk
IGZyb20gdGhlIHRhYmxlIGFib3ZlIGJ5Ci1wcmVwZW5kaW5nICJtYXRjaGVzIiB0byB0aGUgY29u
dGVudHMgb2YgZWFjaCBjZWxsIGluIHRoZSAiTWVhbmluZyIKLWNvbHVtbi48L3A+Ci0KLTxoMj48
YSBuYW1lPWNhc2VzZW5zPjMuIENhc2Ugc2Vuc2l0aXZpdHk8L2E+PC9oMj4KLQotPHA+VGhlIGNh
c2Ugc2Vuc2l0aXZpdHkgb2YgZG9jdW1lbnQgbGFuZ3VhZ2UgZWxlbWVudCBuYW1lcywgYXR0cmli
dXRlCi1uYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgaW4gc2VsZWN0b3JzIGRlcGVuZHMgb24g
dGhlIGRvY3VtZW50Ci1sYW5ndWFnZS4gRm9yIGV4YW1wbGUsIGluIEhUTUwsIGVsZW1lbnQgbmFt
ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsCi1idXQgaW4gWE1MLCB0aGV5IGFyZSBjYXNlLXNlbnNp
dGl2ZS48L3A+Ci0KLTxoMj48YSBuYW1lPXNlbGVjdG9yLXN5bnRheD40LiBTZWxlY3RvciBzeW50
YXg8L2E+PC9oMj4KLQotPHA+QSA8ZGZuPjxhIG5hbWU9c2VsZWN0b3I+c2VsZWN0b3I8L2E+PC9k
Zm4+IGlzIGEgY2hhaW4gb2Ygb25lCi1vciBtb3JlIDxhIGhyZWY9IiNzZXF1ZW5jZSI+c2VxdWVu
Y2VzIG9mIHNpbXBsZSBzZWxlY3RvcnM8L2E+Ci1zZXBhcmF0ZWQgYnkgPGEgaHJlZj0iI2NvbWJp
bmF0b3JzIj5jb21iaW5hdG9yczwvYT4uPC9wPgotCi08cD5BIDxkZm4+PGEgbmFtZT1zZXF1ZW5j
ZT5zZXF1ZW5jZSBvZiBzaW1wbGUgc2VsZWN0b3JzPC9hPjwvZGZuPgotaXMgYSBjaGFpbiBvZiA8
YSBocmVmPSIjc2ltcGxlLXNlbGVjdG9ycy1kZm4iPnNpbXBsZSBzZWxlY3RvcnM8L2E+Ci10aGF0
IGFyZSBub3Qgc2VwYXJhdGVkIGJ5IGEgPGEgaHJlZj0iI2NvbWJpbmF0b3JzIj5jb21iaW5hdG9y
PC9hPi4gSXQKLWFsd2F5cyBiZWdpbnMgd2l0aCBhIDxhIGhyZWY9IiN0eXBlLXNlbGVjdG9ycyI+
dHlwZSBzZWxlY3RvcjwvYT4gb3IgYQotPGEgaHJlZj0iI3VuaXZlcnNhbC1zZWxlY3RvciI+dW5p
dmVyc2FsIHNlbGVjdG9yPC9hPi4gTm8gb3RoZXIgdHlwZQotc2VsZWN0b3Igb3IgdW5pdmVyc2Fs
IHNlbGVjdG9yIGlzIGFsbG93ZWQgaW4gdGhlIHNlcXVlbmNlLjwvcD4KLQotPHA+QSA8ZGZuPjxh
IG5hbWU9c2ltcGxlLXNlbGVjdG9ycy1kZm4+PC9hPjxhCi1ocmVmPSIjc2ltcGxlLXNlbGVjdG9y
cyI+c2ltcGxlIHNlbGVjdG9yPC9hPjwvZGZuPiBpcyBlaXRoZXIgYSA8YQotaHJlZj0iI3R5cGUt
c2VsZWN0b3JzIj50eXBlIHNlbGVjdG9yPC9hPiwgPGEKLWhyZWY9IiN1bml2ZXJzYWwtc2VsZWN0
b3IiPnVuaXZlcnNhbCBzZWxlY3RvcjwvYT4sIDxhCi1ocmVmPSIjYXR0cmlidXRlLXNlbGVjdG9y
cyI+YXR0cmlidXRlIHNlbGVjdG9yPC9hPiwgPGEKLWhyZWY9IiNjbGFzcy1odG1sIj5jbGFzcyBz
ZWxlY3RvcjwvYT4sIDxhCi1ocmVmPSIjaWQtc2VsZWN0b3JzIj5JRCBzZWxlY3RvcjwvYT4sIDxh
Ci1ocmVmPSIjY29udGVudC1zZWxlY3RvcnMiPmNvbnRlbnQgc2VsZWN0b3I8L2E+LCBvciA8YQot
aHJlZj0iI3BzZXVkby1jbGFzc2VzIj5wc2V1ZG8tY2xhc3M8L2E+LiBPbmUgPGEKLWhyZWY9IiNw
c2V1ZG8tZWxlbWVudHMiPnBzZXVkby1lbGVtZW50PC9hPiBtYXkgYmUgYXBwZW5kZWQgdG8gdGhl
IGxhc3QKLXNlcXVlbmNlIG9mIHNpbXBsZSBzZWxlY3RvcnMuPC9wPgotCi08cD48ZGZuPkNvbWJp
bmF0b3JzPC9kZm4+IGFyZTogd2hpdGUgc3BhY2UsICZxdW90O2dyZWF0ZXItdGhhbgotc2lnbiZx
dW90OyAoVSswMDNFLCA8Y29kZT4mZ3Q7PC9jb2RlPiksICZxdW90O3BsdXMgc2lnbiZxdW90OyAo
VSswMDJCLAotPGNvZGU+KzwvY29kZT4pIGFuZCAmcXVvdDt0aWxkZSZxdW90OyAoVSswMDdFLCA8
Y29kZT5+PC9jb2RlPikuICBXaGl0ZQotc3BhY2UgbWF5IGFwcGVhciBiZXR3ZWVuIGEgY29tYmlu
YXRvciBhbmQgdGhlIHNpbXBsZSBzZWxlY3RvcnMgYXJvdW5kCi1pdC4gPGEgbmFtZT13aGl0ZXNw
YWNlPjwvYT5Pbmx5IHRoZSBjaGFyYWN0ZXJzICJzcGFjZSIgKFUrMDAyMCksICJ0YWIiCi0oVSsw
MDA5KSwgImxpbmUgZmVlZCIgKFUrMDAwQSksICJjYXJyaWFnZSByZXR1cm4iIChVKzAwMEQpLCBh
bmQgImZvcm0KLWZlZWQiIChVKzAwMEMpIGNhbiBvY2N1ciBpbiB3aGl0ZSBzcGFjZS4gT3RoZXIg
c3BhY2UtbGlrZSBjaGFyYWN0ZXJzLAotc3VjaCBhcyAiZW0tc3BhY2UiIChVKzIwMDMpIGFuZCAi
aWRlb2dyYXBoaWMgc3BhY2UiIChVKzMwMDApLCBhcmUKLW5ldmVyIHBhcnQgb2Ygd2hpdGUgc3Bh
Y2UuPC9wPgotCi08cD5UaGUgZWxlbWVudHMgb2YgYSBkb2N1bWVudCB0cmVlIHRoYXQgYXJlIHJl
cHJlc2VudGVkIGJ5IGEgc2VsZWN0b3IKLWFyZSB0aGUgPGRmbj48YSBuYW1lPXN1YmplY3Q+PC9h
PnN1YmplY3RzIG9mIHRoZSBzZWxlY3RvcjwvZGZuPi4gQQotc2VsZWN0b3IgY29uc2lzdGluZyBv
ZiBhIHNpbmdsZSBzZXF1ZW5jZSBvZiBzaW1wbGUgc2VsZWN0b3JzCi1yZXByZXNlbnRzIGFueSBl
bGVtZW50IHNhdGlzZnlpbmcgaXRzIHJlcXVpcmVtZW50cy4gUHJlcGVuZGluZyBhbm90aGVyCi1z
ZXF1ZW5jZSBvZiBzaW1wbGUgc2VsZWN0b3JzIGFuZCBhIGNvbWJpbmF0b3IgdG8gYSBzZXF1ZW5j
ZSBpbXBvc2VzCi1hZGRpdGlvbmFsIG1hdGNoaW5nIGNvbnN0cmFpbnRzLCBzbyB0aGUgc3ViamVj
dHMgb2YgYSBzZWxlY3RvciBhcmUKLWFsd2F5cyBhIHN1YnNldCBvZiB0aGUgZWxlbWVudHMgcmVw
cmVzZW50ZWQgYnkgdGhlIGxhc3Qgc2VxdWVuY2Ugb2YKLXNpbXBsZSBzZWxlY3RvcnMuPC9wPgot
Ci08cD5BbiBlbXB0eSBzZWxlY3RvciwgY29udGFpbmluZyBubyBzZXF1ZW5jZSBvZiBzaW1wbGUg
c2VsZWN0b3JzIGFuZAotbm8gcHNldWRvLWVsZW1lbnQsIGlzIGFuIDxhIGhyZWY9IiNDb25mb3Jt
YW5jZSI+aW52YWxpZAotc2VsZWN0b3I8L2E+LjwvcD4KLQotPGgyPjxhIG5hbWU9Z3JvdXBpbmc+
NS4gR3JvdXBzIG9mIHNlbGVjdG9yczwvYT48L2gyPgotCi08cD5XaGVuIHNldmVyYWwgc2VsZWN0
b3JzIHNoYXJlIHRoZSBzYW1lIGRlY2xhcmF0aW9ucywgdGhleSBtYXkgYmUKLWdyb3VwZWQgaW50
byBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LiAoQSBjb21tYSBpcyBVKzAwMkMuKTwvcD4KLQotPGRp
diBjbGFzcz0iZXhhbXBsZSI+Ci08cD5DU1MgZXhhbXBsZXM6PC9wPgotPHA+SW4gdGhpcyBleGFt
cGxlLCB3ZSBjb25kZW5zZSB0aHJlZSBydWxlcyB3aXRoIGlkZW50aWNhbAotZGVjbGFyYXRpb25z
IGludG8gb25lLiBUaHVzLDwvcD4KLTxwcmU+aDEgeyBmb250LWZhbWlseTogc2Fucy1zZXJpZiB9
Ci1oMiB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmIH0KLWgzIHsgZm9udC1mYW1pbHk6IHNhbnMt
c2VyaWYgfTwvcHJlPgotPHA+aXMgZXF1aXZhbGVudCB0bzo8L3A+Ci08cHJlPmgxLCBoMiwgaDMg
eyBmb250LWZhbWlseTogc2Fucy1zZXJpZiB9PC9wcmU+Ci08L2Rpdj4KLQotPHA+PHN0cm9uZz5X
YXJuaW5nPC9zdHJvbmc+OiB0aGUgZXF1aXZhbGVuY2UgaXMgdHJ1ZSBpbiB0aGlzIGV4YW1wbGUK
LWJlY2F1c2UgYWxsIHRoZSBzZWxlY3RvcnMgYXJlIHZhbGlkIHNlbGVjdG9ycy4gSWYganVzdCBv
bmUgb2YgdGhlc2UKLXNlbGVjdG9ycyB3ZXJlIGludmFsaWQsIHRoZSBlbnRpcmUgZ3JvdXAgb2Yg
c2VsZWN0b3JzIHdvdWxkIGJlCi1pbnZhbGlkLiBUaGlzIHdvdWxkIGludmFsaWRhdGUgdGhlIHJ1
bGUgZm9yIGFsbCB0aHJlZSBoZWFkaW5nCi1lbGVtZW50cywgd2hlcmVhcyBpbiB0aGUgZm9ybWVy
IGNhc2Ugb25seSBvbmUgb2YgdGhlIHRocmVlIGluZGl2aWR1YWwKLWhlYWRpbmcgcnVsZXMgd291
bGQgYmUgaW52YWxpZGF0ZWQuPC9wPgotCi0KLTxoMj48YSBuYW1lPXNpbXBsZS1zZWxlY3RvcnM+
Ni4gU2ltcGxlIHNlbGVjdG9yczwvYT48L2gyPgotCi08aDM+PGEgbmFtZT10eXBlLXNlbGVjdG9y
cz42LjEuIFR5cGUgc2VsZWN0b3I8L2E+PC9oMz4KLQotPHA+QSA8ZGZuPnR5cGUgc2VsZWN0b3I8
L2Rmbj4gaXMgdGhlIG5hbWUgb2YgYSBkb2N1bWVudCBsYW5ndWFnZQotZWxlbWVudCB0eXBlLiBB
IHR5cGUgc2VsZWN0b3IgcmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiB0aGUgZWxlbWVudAotdHlw
ZSBpbiB0aGUgZG9jdW1lbnQgdHJlZS48L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotIDxw
PkV4YW1wbGU6PC9wPgotIDxwPlRoZSBmb2xsb3dpbmcgc2VsZWN0b3IgcmVwcmVzZW50cyBhbiA8
Y29kZT5oMTwvY29kZT4gZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdHJlZTo8L3A+Ci0gPHByZT5o
MTwvcHJlPgotPC9kaXY+Ci0KLQotPGg0PjxhIG5hbWU9dHlwZW5tc3A+Ni4xLjEuIFR5cGUgc2Vs
ZWN0b3JzIGFuZCBuYW1lc3BhY2VzPC9hPjwvaDQ+Ci0KLTxwPlR5cGUgc2VsZWN0b3JzIGFsbG93
IGFuIG9wdGlvbmFsIG5hbWVzcGFjZSAoPGEKLWhyZWY9IiNyZWZzWE1MTkFNRVMiPltYTUxOQU1F
U108L2E+KSBjb21wb25lbnQuIEEgbmFtZXNwYWNlIHByZWZpeAotdGhhdCBoYXMgYmVlbiBwcmV2
aW91c2x5IGRlY2xhcmVkIG1heSBiZSBwcmVwZW5kZWQgdG8gdGhlIGVsZW1lbnQgbmFtZQotc2Vw
YXJhdGVkIGJ5IHRoZSBuYW1lc3BhY2Ugc2VwYXJhdG9yICZxdW90O3ZlcnRpY2FsIGJhciZxdW90
OwotKFUrMDA3QywgPGNvZGU+fDwvY29kZT4pLjwvcD4KLQotPHA+VGhlIG5hbWVzcGFjZSBjb21w
b25lbnQgbWF5IGJlIGxlZnQgZW1wdHkgdG8gaW5kaWNhdGUgdGhhdCB0aGUKLXNlbGVjdG9yIGlz
IG9ubHkgdG8gcmVwcmVzZW50IGVsZW1lbnRzIHdpdGggbm8gZGVjbGFyZWQgbmFtZXNwYWNlLjwv
cD4KLQotPHA+QW4gYXN0ZXJpc2sgbWF5IGJlIHVzZWQgZm9yIHRoZSBuYW1lc3BhY2UgcHJlZml4
LCBpbmRpY2F0aW5nIHRoYXQKLXRoZSBzZWxlY3RvciByZXByZXNlbnRzIGVsZW1lbnRzIGluIGFu
eSBuYW1lc3BhY2UgKGluY2x1ZGluZyBlbGVtZW50cwotd2l0aCBubyBuYW1lc3BhY2UpLjwvcD4K
LQotPHA+RWxlbWVudCB0eXBlIHNlbGVjdG9ycyB0aGF0IGhhdmUgbm8gbmFtZXNwYWNlIGNvbXBv
bmVudCAobm8KLW5hbWVzcGFjZSBzZXBhcmF0b3IpLCByZXByZXNlbnQgZWxlbWVudHMgd2l0aG91
dCByZWdhcmQgdG8gdGhlCi1lbGVtZW50J3MgbmFtZXNwYWNlIChlcXVpdmFsZW50IHRvICI8Y29k
ZT4qfDwvY29kZT4iKSB1bmxlc3MgYSBkZWZhdWx0Ci1uYW1lc3BhY2UgaGFzIGJlZW4gZGVjbGFy
ZWQuIElmIGEgZGVmYXVsdCBuYW1lc3BhY2UgaGFzIGJlZW4gZGVjbGFyZWQsCi10aGUgc2VsZWN0
b3Igd2lsbCByZXByZXNlbnQgb25seSBlbGVtZW50cyBpbiB0aGUgZGVmYXVsdAotbmFtZXNwYWNl
LjwvcD4KLQotPHA+QSB0eXBlIHNlbGVjdG9yIGNvbnRhaW5pbmcgYSBuYW1lc3BhY2UgcHJlZml4
IHRoYXQgaGFzIG5vdCBiZWVuCi1wcmV2aW91c2x5IGRlY2xhcmVkIGlzIGFuIDxhIGhyZWY9IiND
b25mb3JtYW5jZSI+aW52YWxpZDwvYT4gc2VsZWN0b3IuCi1UaGUgbWVjaGFuaXNtIGZvciBkZWNs
YXJpbmcgYSBuYW1lc3BhY2UgcHJlZml4IGlzIGxlZnQgdXAgdG8gdGhlCi1sYW5ndWFnZSBpbXBs
ZW1lbnRpbmcgU2VsZWN0b3JzLiBJbiBDU1MsIHN1Y2ggYSBtZWNoYW5pc20gaXMgZGVmaW5lZAot
aW4gdGhlIEdlbmVyYWwgU3ludGF4IG1vZHVsZS48L3A+Ci0KLTxwPkluIGEgbmFtZXNwYWNlLWF3
YXJlIGNsaWVudCwgZWxlbWVudCB0eXBlIHNlbGVjdG9ycyB3aWxsIG9ubHkgbWF0Y2gKLWFnYWlu
c3QgdGhlIDxhCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNOVC1M
b2NhbFBhcnQiPmxvY2FsIHBhcnQ8L2E+Ci1vZiB0aGUgZWxlbWVudCdzIDxhCi1ocmVmPSJodHRw
Oi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNucy1xdWFsbmFtZXMiPnF1YWxpZmllZAot
bmFtZTwvYT4uIFNlZSA8YSBocmVmPSIjZG93bmxldmVsIj5iZWxvdzwvYT4gZm9yIG5vdGVzIGFi
b3V0IG1hdGNoaW5nCi1iZWhhdmlvcnMgaW4gZG93bi1sZXZlbCBjbGllbnRzLjwvcD4KLQotPHA+
SW4gc3VtbWFyeTo8L3A+Ci0KLTxkbD4KLSAgPGR0Pjxjb2RlPm5zfEU8L2NvZGU+PC9kdD4KLSAg
PGRkPmVsZW1lbnRzIHdpdGggbmFtZSBFIGluIG5hbWVzcGFjZSBuczwvZGQ+Ci0gIDxkdD48Y29k
ZT4qfEU8L2NvZGU+PC9kdD4KLSAgPGRkPmVsZW1lbnRzIHdpdGggbmFtZSBFIGluIGFueSBuYW1l
c3BhY2UsIGluY2x1ZGluZyB0aG9zZSB3aXRob3V0IGFueQotICBkZWNsYXJlZCBuYW1lc3BhY2U8
L2RkPgotICA8ZHQ+PGNvZGU+fEU8L2NvZGU+PC9kdD4KLSAgPGRkPmVsZW1lbnRzIHdpdGggbmFt
ZSBFIHdpdGhvdXQgYW55IGRlY2xhcmVkIG5hbWVzcGFjZTwvZGQ+Ci0gIDxkdD48Y29kZT5FPC9j
b2RlPjwvZHQ+Ci0gIDxkZD5pZiBubyBkZWZhdWx0IG5hbWVzcGFjZSBoYXMgYmVlbiBzcGVjaWZp
ZWQsIHRoaXMgaXMgZXF1aXZhbGVudCB0byAqfEUuCi0gIE90aGVyd2lzZSBpdCBpcyBlcXVpdmFs
ZW50IHRvIG5zfEUgd2hlcmUgbnMgaXMgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLjwvZGQ+Ci08L2Rs
PgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLSA8cD5DU1MgZXhhbXBsZXM6PC9wPgotCi0gPHBy
ZT5AbmFtZXNwYWNlIGZvbyB1cmwoaHR0cDovL3d3dy5leGFtcGxlLmNvbSk7Ci0gZm9vfGgxIHsg
Y29sb3I6IGJsdWUgfQotIGZvb3wqIHsgY29sb3I6IHllbGxvdyB9Ci0gfGgxIHsgY29sb3I6IHJl
ZCB9Ci0gKnxoMSB7IGNvbG9yOiBncmVlbiB9Ci0gaDEgeyBjb2xvcjogZ3JlZW4gfTwvcHJlPgot
Ci0gPHA+VGhlIGZpcnN0IHJ1bGUgd2lsbCBtYXRjaCBvbmx5IDxjb2RlPmgxPC9jb2RlPiBlbGVt
ZW50cyBpbiB0aGUKLSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgbmFtZXNwYWNlLjwvcD4KLQot
IDxwPlRoZSBzZWNvbmQgcnVsZSB3aWxsIG1hdGNoIGFsbCBlbGVtZW50cyBpbiB0aGUKLSAiaHR0
cDovL3d3dy5leGFtcGxlLmNvbSIgbmFtZXNwYWNlLjwvcD4KLQotIDxwPlRoZSB0aGlyZCBydWxl
IHdpbGwgbWF0Y2ggb25seSA8Y29kZT5oMTwvY29kZT4gZWxlbWVudHMgd2l0aG91dAotIGFueSBk
ZWNsYXJlZCBuYW1lc3BhY2UuPC9wPgotCi0gPHA+VGhlIGZvdXJ0aCBydWxlIHdpbGwgbWF0Y2gg
PGNvZGU+aDE8L2NvZGU+IGVsZW1lbnRzIGluIGFueQotIG5hbWVzcGFjZSAoaW5jbHVkaW5nIHRo
b3NlIHdpdGhvdXQgYW55IGRlY2xhcmVkIG5hbWVzcGFjZSkuPC9wPgotCi0gPHA+VGhlIGxhc3Qg
cnVsZSBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb3VydGggcnVsZSBiZWNhdXNlIG5vIGRlZmF1bHQK
LSBuYW1lc3BhY2UgaGFzIGJlZW4gZGVmaW5lZC48L3A+Ci0KLTwvZGl2PgotCi08aDM+PGEgbmFt
ZT11bml2ZXJzYWwtc2VsZWN0b3I+Ni4yLiBVbml2ZXJzYWwgc2VsZWN0b3I8L2E+IDwvaDM+Ci0K
LTxwPlRoZSA8ZGZuPnVuaXZlcnNhbCBzZWxlY3RvcjwvZGZuPiwgd3JpdHRlbiAmcXVvdDthc3Rl
cmlzayZxdW90OwotKDxjb2RlPio8L2NvZGU+KSwgcmVwcmVzZW50cyB0aGUgcXVhbGlmaWVkIG5h
bWUgb2YgYW55IGVsZW1lbnQKLXR5cGUuIEl0IHJlcHJlc2VudHMgYW55IHNpbmdsZSBlbGVtZW50
IGluIHRoZSBkb2N1bWVudCB0cmVlIGluIGFueQotbmFtZXNwYWNlIChpbmNsdWRpbmcgdGhvc2Ug
d2l0aG91dCBhbnkgZGVjbGFyZWQgbmFtZXNwYWNlKSBpZiBubwotZGVmYXVsdCBuYW1lc3BhY2Ug
aGFzIGJlZW4gc3BlY2lmaWVkLiBJZiBhIGRlZmF1bHQgbmFtZXNwYWNlIGhhcyBiZWVuCi1zcGVj
aWZpZWQsIHNlZSA8YSBocmVmPSIjdW5pdm5tc3AiPlVuaXZlcnNhbCBzZWxlY3RvciBhbmQKLU5h
bWVzcGFjZXM8L2E+IGJlbG93LjwvcD4KLQotPHA+SWYgdGhlIHVuaXZlcnNhbCBzZWxlY3RvciBp
cyBub3QgdGhlIG9ubHkgY29tcG9uZW50IG9mIGEgc2VxdWVuY2UKLW9mIHNpbXBsZSBzZWxlY3Rv
cnMsIHRoZSA8Y29kZT4qPC9jb2RlPiBtYXkgYmUgb21pdHRlZC48L3A+Ci0KLTxkaXYgY2xhc3M9
ImV4YW1wbGUiPgotIDxwPkV4YW1wbGVzOjwvcD4KLSA8dWw+Ci0gIDxsaT48Y29kZT4qW2hyZWZs
YW5nfD1lbl08L2NvZGU+IGFuZCA8Y29kZT5baHJlZmxhbmd8PWVuXTwvY29kZT4gYXJlIGVxdWl2
YWxlbnQsPC9saT4KLSAgPGxpPjxjb2RlPioud2FybmluZzwvY29kZT4gYW5kIDxjb2RlPi53YXJu
aW5nPC9jb2RlPiBhcmUgZXF1aXZhbGVudCw8L2xpPgotICA8bGk+PGNvZGU+KiNteWlkPC9jb2Rl
PiBhbmQgPGNvZGU+I215aWQ8L2NvZGU+IGFyZSBlcXVpdmFsZW50LjwvbGk+Ci0gPC91bD4KLTwv
ZGl2PgotCi08cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBpdCBpcyByZWNv
bW1lbmRlZCB0aGF0IHRoZQotPGNvZGU+KjwvY29kZT4sIHJlcHJlc2VudGluZyB0aGUgdW5pdmVy
c2FsIHNlbGVjdG9yLCBub3QgYmUKLW9taXR0ZWQuPC9wPgotCi08aDQ+PGEgbmFtZT11bml2bm1z
cD42LjIuMS4gVW5pdmVyc2FsIHNlbGVjdG9yIGFuZCBuYW1lc3BhY2VzPC9hPjwvaDQ+Ci0KLTxw
PlRoZSB1bml2ZXJzYWwgc2VsZWN0b3IgYWxsb3dzIGFuIG9wdGlvbmFsIG5hbWVzcGFjZSBjb21w
b25lbnQuIEl0Ci1pcyB1c2VkIGFzIGZvbGxvd3M6PC9wPgotCi08ZGw+Ci0gPGR0Pjxjb2RlPm5z
fCo8L2NvZGU+PC9kdD4KLSA8ZGQ+YWxsIGVsZW1lbnRzIGluIG5hbWVzcGFjZSBuczwvZGQ+Ci0g
PGR0Pjxjb2RlPip8KjwvY29kZT48L2R0PgotIDxkZD5hbGwgZWxlbWVudHM8L2RkPgotIDxkdD48
Y29kZT58KjwvY29kZT48L2R0PgotIDxkZD5hbGwgZWxlbWVudHMgd2l0aG91dCBhbnkgZGVjbGFy
ZWQgbmFtZXNwYWNlPC9kZD4KLSA8ZHQ+PGNvZGU+KjwvY29kZT48L2R0PgotIDxkZD5pZiBubyBk
ZWZhdWx0IG5hbWVzcGFjZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHRoaXMgaXMgZXF1aXZhbGVudCB0
byAqfCouCi0gT3RoZXJ3aXNlIGl0IGlzIGVxdWl2YWxlbnQgdG8gbnN8KiB3aGVyZSBucyBpcyB0
aGUgZGVmYXVsdCBuYW1lc3BhY2UuPC9kZD4KLTwvZGw+Ci0KLTxwPkEgdW5pdmVyc2FsIHNlbGVj
dG9yIGNvbnRhaW5pbmcgYSBuYW1lc3BhY2UgcHJlZml4IHRoYXQgaGFzIG5vdAotYmVlbiBwcmV2
aW91c2x5IGRlY2xhcmVkIGlzIGFuIDxhIGhyZWY9IiNDb25mb3JtYW5jZSI+aW52YWxpZDwvYT4K
LXNlbGVjdG9yLiAgVGhlIG1lY2hhbmlzbSBmb3IgZGVjbGFyaW5nIGEgbmFtZXNwYWNlIHByZWZp
eCBpcyBsZWZ0IHVwCi10byB0aGUgbGFuZ3VhZ2UgaW1wbGVtZW50aW5nIFNlbGVjdG9ycy4gIElu
IENTUywgc3VjaCBhIG1lY2hhbmlzbSBpcwotZGVmaW5lZCBpbiB0aGUgR2VuZXJhbCBTeW50YXgg
bW9kdWxlLjwvcD4KLQotCi08aDM+PGEgbmFtZT1hdHRyaWJ1dGUtc2VsZWN0b3JzPjYuMy4gQXR0
cmlidXRlIHNlbGVjdG9yczwvYT48L2gzPgotCi08cD5TZWxlY3RvcnMgYWxsb3cgdGhlIHJlcHJl
c2VudGF0aW9uIG9mIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGVzLiBXaGVuCi1hIHNlbGVjdG9yIGlz
IHVzZWQgYXMgYW4gZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0IGFuIGVsZW1lbnQsCi1hdHRy
aWJ1dGUgc2VsZWN0b3JzIG11c3QgYmUgY29uc2lkZXJlZCB0byBtYXRjaCBhbiBlbGVtZW50IGlm
IHRoYXQKLWVsZW1lbnQgaGFzIGFuIGF0dHJpYnV0ZSB0aGF0IG1hdGNoZXMgdGhlIGF0dHJpYnV0
ZSByZXByZXNlbnRlZCBieSB0aGUKLWF0dHJpYnV0ZSBzZWxlY3Rvci48L3A+Ci0KLTxoND48YSBu
YW1lPWF0dHJpYnV0ZS1yZXByZXNlbnRhdGlvbj42LjMuMS4gQXR0cmlidXRlIHByZXNlbmNlIGFu
ZCB2YWx1ZXMKLXNlbGVjdG9yczwvYT48L2g0PgotCi08cD5DU1MyIGludHJvZHVjZWQgZm91ciBh
dHRyaWJ1dGUgc2VsZWN0b3JzOjwvcD4KLQotPGRsPgotICA8ZHQ+PGNvZGU+W2F0dF08L2NvZGU+
Ci0gIDxkZD5SZXByZXNlbnRzIGFuIGVsZW1lbnQgd2l0aCB0aGUgPGNvZGU+YXR0PC9jb2RlPiBh
dHRyaWJ1dGUsIHdoYXRldmVyIHRoZSB2YWx1ZSBvZgotICB0aGUgYXR0cmlidXRlLjwvZGQ+Ci0g
IDxkdD48Y29kZT5bYXR0PXZhbF08L2NvZGU+PC9kdD4KLSAgPGRkPlJlcHJlc2VudHMgYW4gZWxl
bWVudCB3aXRoIHRoZSA8Y29kZT5hdHQ8L2NvZGU+IGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSBpcyBl
eGFjdGx5Ci0gICJ2YWwiLjwvZGQ+Ci0gIDxkdD48Y29kZT5bYXR0fj12YWxdPC9jb2RlPjwvZHQ+
Ci0gIDxkZD5SZXByZXNlbnRzIGFuIGVsZW1lbnQgd2l0aCB0aGUgPGNvZGU+YXR0PC9jb2RlPiBh
dHRyaWJ1dGUgd2hvc2UgdmFsdWUgaXMgYSA8YQotICBocmVmPSIjd2hpdGVzcGFjZSI+d2hpdGVz
cGFjZTwvYT4tc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMsIG9uZSBvZgotICB3aGljaCBpcyBleGFj
dGx5ICJ2YWwiLiBJZiAidmFsIiBjb250YWlucyB3aGl0ZXNwYWNlLCBpdCB3aWxsIG5ldmVyCi0g
IHJlcHJlc2VudCBhbnl0aGluZyAoc2luY2UgdGhlIHdvcmRzIGFyZSA8ZW0+c2VwYXJhdGVkPC9l
bT4gYnkKLSAgc3BhY2VzKS48L2RkPgotICA8ZHQ+PGNvZGU+W2F0dHw9dmFsXTwvY29kZT4KLSAg
PGRkPlJlcHJlc2VudHMgYW4gZWxlbWVudCB3aXRoIHRoZSA8Y29kZT5hdHQ8L2NvZGU+IGF0dHJp
YnV0ZSwgaXRzIHZhbHVlIGVpdGhlcgotICBiZWluZyBleGFjdGx5ICJ2YWwiIG9yIGJlZ2lubmlu
ZyB3aXRoICJ2YWwiIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5Ci0gICItIiAoVSswMDJEKS4gIFRo
aXMgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGFsbG93IGxhbmd1YWdlIHN1YmNvZGUKLSAgbWF0
Y2hlcyAoZS5nLiwgdGhlIDxjb2RlPmhyZWZsYW5nPC9jb2RlPiBhdHRyaWJ1dGUgb24gdGhlCi0g
IDxjb2RlPmxpbms8L2NvZGU+IGVsZW1lbnQgaW4gSFRNTCkgYXMgZGVzY3JpYmVkIGluIFJGQyAz
MDY2ICg8YQotICBocmVmPSIjcmVmc1JGQzMwNjYiPltSRkMzMDY2XTwvYT4pLiAgRm9yIDxjb2Rl
Pmxhbmc8L2NvZGU+IChvcgotICA8Y29kZT54bWw6bGFuZzwvY29kZT4pIGxhbmd1YWdlIHN1YmNv
ZGUgbWF0Y2hpbmcsIHBsZWFzZSBzZWUgPGEKLSAgaHJlZj0iI2xhbmctcHNldWRvIj50aGUgPGNv
ZGU+Omxhbmc8L2NvZGU+IHBzZXVkby1jbGFzczwvYT4uPC9kZD4KLTwvZGw+Ci0KLTxwPkF0dHJp
YnV0ZSB2YWx1ZXMgbXVzdCBiZSBpZGVudGlmaWVycyBvciBzdHJpbmdzLiBUaGUKLWNhc2Utc2Vu
c2l0aXZpdHkgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMgaW4gc2VsZWN0b3JzIGRlcGVu
ZHMgb24KLXRoZSBkb2N1bWVudCBsYW5ndWFnZS48L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUi
PgotCi0gIDxwPkV4YW1wbGVzOjwvcD4KLQotICA8cD5UaGUgZm9sbG93aW5nIGF0dHJpYnV0ZSBz
ZWxlY3RvciByZXByZXNlbnRzIGFuIDxjb2RlPmgxPC9jb2RlPgotICBlbGVtZW50IHRoYXQgY2Fy
cmllcyB0aGUgPGNvZGU+dGl0bGU8L2NvZGU+IGF0dHJpYnV0ZSwgd2hhdGV2ZXIgaXRzCi0gIHZh
bHVlOjwvcD4KLQotICA8cHJlPmgxW3RpdGxlXTwvcHJlPgotCi0gIDxwPkluIHRoZSBmb2xsb3dp
bmcgZXhhbXBsZSwgdGhlIHNlbGVjdG9yIHJlcHJlc2VudHMgYQotICA8Y29kZT5zcGFuPC9jb2Rl
PiBlbGVtZW50IHdob3NlIDxjb2RlPmNsYXNzPC9jb2RlPiBhdHRyaWJ1dGUgaGFzCi0gIGV4YWN0
bHkgdGhlIHZhbHVlICJleGFtcGxlIjo8L3A+Ci0KLSAgPHByZT5zcGFuW2NsYXNzPSJleGFtcGxl
Il08L3ByZT4KLQotICA8cD5NdWx0aXBsZSBhdHRyaWJ1dGUgc2VsZWN0b3JzIGNhbiBiZSB1c2Vk
IHRvIHJlcHJlc2VudCBzZXZlcmFsCi0gIGF0dHJpYnV0ZXMgb2YgYW4gZWxlbWVudCwgb3Igc2V2
ZXJhbCBjb25kaXRpb25zIG9uIHRoZSBzYW1lCi0gIGF0dHJpYnV0ZS4gSGVyZSwgdGhlIHNlbGVj
dG9yIHJlcHJlc2VudHMgYSA8Y29kZT5zcGFuPC9jb2RlPiBlbGVtZW50Ci0gIHdob3NlIDxjb2Rl
PmhlbGxvPC9jb2RlPiBhdHRyaWJ1dGUgaGFzIGV4YWN0bHkgdGhlIHZhbHVlICJDbGV2ZWxhbmQi
Ci0gIGFuZCB3aG9zZSA8Y29kZT5nb29kYnllPC9jb2RlPiBhdHRyaWJ1dGUgaGFzIGV4YWN0bHkg
dGhlIHZhbHVlCi0gICJDb2x1bWJ1cyI6PC9wPgotCi0gIDxwcmU+c3BhbltoZWxsbz0iQ2xldmVs
YW5kIl1bZ29vZGJ5ZT0iQ29sdW1idXMiXTwvcHJlPgotCi0gIDxwPlRoZSBmb2xsb3dpbmcgc2Vs
ZWN0b3JzIGlsbHVzdHJhdGUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gIj0iCi0gIGFuZCAifj0i
LiAgVGhlIGZpcnN0IHNlbGVjdG9yIHdpbGwgcmVwcmVzZW50LCBmb3IgZXhhbXBsZSwgdGhlIHZh
bHVlCi0gICJjb3B5cmlnaHQgY29weWxlZnQgY29weWVkaXRvciIgb24gYSA8Y29kZT5yZWw8L2Nv
ZGU+IGF0dHJpYnV0ZS4gVGhlCi0gIHNlY29uZCBzZWxlY3RvciB3aWxsIG9ubHkgcmVwcmVzZW50
IGFuIDxjb2RlPmE8L2NvZGU+IGVsZW1lbnQgd2l0aAotICBhbiA8Y29kZT5ocmVmPC9jb2RlPiBh
dHRyaWJ1dGUgaGF2aW5nIHRoZSBleGFjdCB2YWx1ZQotICAiaHR0cDovL3d3dy53My5vcmcvIi48
L3A+Ci0KLSAgPHByZT5hW3JlbH49ImNvcHlyaWdodCJdCi1hW2hyZWY9Imh0dHA6Ly93d3cudzMu
b3JnLyJdPC9wcmU+Ci0KLSAgPHA+VGhlIGZvbGxvd2luZyBzZWxlY3RvciByZXByZXNlbnRzIGEg
PGNvZGU+bGluazwvY29kZT4gZWxlbWVudAotICB3aG9zZSA8Y29kZT5ocmVmbGFuZzwvY29kZT4g
YXR0cmlidXRlIGlzIGV4YWN0bHkgImZyIi48L3A+Ci0KLSAgPHByZT5saW5rW2hyZWZsYW5nPWZy
XTwvcHJlPgotCi0gIDxwPlRoZSBmb2xsb3dpbmcgc2VsZWN0b3IgcmVwcmVzZW50cyBhIDxjb2Rl
Pmxpbms8L2NvZGU+IGVsZW1lbnQgZm9yCi0gIHdoaWNoIHRoZSB2YWx1ZXMgb2YgdGhlIDxjb2Rl
PmhyZWZsYW5nPC9jb2RlPiBhdHRyaWJ1dGUgYmVnaW5zIHdpdGgKLSAgImVuIiwgaW5jbHVkaW5n
ICJlbiIsICJlbi1VUyIsIGFuZCAiZW4tY29ja25leSI6PC9wPgotCi0gIDxwcmU+bGlua1tocmVm
bGFuZ3w9ImVuIl08L3ByZT4KLQotICA8cD5TaW1pbGFybHksIHRoZSBmb2xsb3dpbmcgc2VsZWN0
b3JzIHJlcHJlc2VudHMgYQotICA8Y29kZT5ESUFMT0dVRTwvY29kZT4gZWxlbWVudCB3aGVuZXZl
ciBpdCBoYXMgb25lIG9mIHR3byBkaWZmZXJlbnQKLSAgdmFsdWVzIGZvciBhbiBhdHRyaWJ1dGUg
PGNvZGU+Y2hhcmFjdGVyPC9jb2RlPjo8L3A+Ci0KLSAgPHByZT5ESUFMT0dVRVtjaGFyYWN0ZXI9
cm9tZW9dCi1ESUFMT0dVRVtjaGFyYWN0ZXI9anVsaWV0XTwvcHJlPgotCi08L2Rpdj4KLQotPGg0
PjxhIG5hbWU9YXR0cmlidXRlLXN1YnN0cmluZ3M+PC9hPjYuMy4yLiBTdWJzdHJpbmcgbWF0Y2hp
bmcgYXR0cmlidXRlCi1zZWxlY3RvcnM8L2g0PgotCi08cD5UaHJlZSBhZGRpdGlvbmFsIGF0dHJp
YnV0ZSBzZWxlY3RvcnMgYXJlIHByb3ZpZGVkIGZvciBtYXRjaGluZwotc3Vic3RyaW5ncyBpbiB0
aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlOjwvcD4KLQotPGRsPgotICA8ZHQ+PGNvZGU+W2F0dF49
dmFsXTwvY29kZT48L2R0PgotICA8ZGQ+UmVwcmVzZW50cyBhbiBlbGVtZW50IHdpdGggdGhlIDxj
b2RlPmF0dDwvY29kZT4gYXR0cmlidXRlIHdob3NlIHZhbHVlIGJlZ2lucwotICB3aXRoIHRoZSBw
cmVmaXggInZhbCIuPC9kZD4KLSAgPGR0Pjxjb2RlPlthdHQkPXZhbF08L2NvZGU+Ci0gIDxkZD5S
ZXByZXNlbnRzIGFuIGVsZW1lbnQgd2l0aCB0aGUgPGNvZGU+YXR0PC9jb2RlPiBhdHRyaWJ1dGUg
d2hvc2UgdmFsdWUgZW5kcyB3aXRoCi0gIHRoZSBzdWZmaXggInZhbCIuPC9kZD4KLSAgPGR0Pjxj
b2RlPlthdHQqPXZhbF08L2NvZGU+Ci0gIDxkZD5SZXByZXNlbnRzIGFuIGVsZW1lbnQgd2l0aCB0
aGUgPGNvZGU+YXR0PC9jb2RlPiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUgY29udGFpbnMKLSAgYXQg
bGVhc3Qgb25lIGluc3RhbmNlIG9mIHRoZSBzdWJzdHJpbmcgInZhbCIuPC9kZD4KLTwvZGw+Ci0K
LTxwPkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBpZGVudGlmaWVycyBvciBzdHJpbmdzLiBUaGUK
LWNhc2Utc2Vuc2l0aXZpdHkgb2YgYXR0cmlidXRlIG5hbWVzIGluIHNlbGVjdG9ycyBkZXBlbmRz
IG9uIHRoZQotZG9jdW1lbnQgbGFuZ3VhZ2UuPC9wPgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4K
LSA8cD5FeGFtcGxlczo8L3A+Ci0gPHA+VGhlIGZvbGxvd2luZyBzZWxlY3RvciByZXByZXNlbnRz
IGFuIEhUTUwgPGNvZGU+b2JqZWN0PC9jb2RlPiwgcmVmZXJlbmNpbmcgYW4KLSBpbWFnZTo8L3A+
Ci0gPHByZT5vYmplY3RbdHlwZV49ImltYWdlLyJdPC9wcmU+Ci0gPHA+VGhlIGZvbGxvd2luZyBz
ZWxlY3RvciByZXByZXNlbnRzIGFuIEhUTUwgYW5jaG9yIDxjb2RlPmE8L2NvZGU+IHdpdGggYW4K
LSA8Y29kZT5ocmVmPC9jb2RlPiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUgZW5kcyB3aXRoICIuaHRt
bCIuPC9wPgotIDxwcmU+YVtocmVmJD0iLmh0bWwiXTwvcHJlPgotIDxwPlRoZSBmb2xsb3dpbmcg
c2VsZWN0b3IgcmVwcmVzZW50cyBhbiBIVE1MIHBhcmFncmFwaCB3aXRoIGEgPGNvZGU+dGl0bGU8
L2NvZGU+Ci0gYXR0cmlidXRlIHdob3NlIHZhbHVlIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcgImhl
bGxvIjwvcD4KLSA8cHJlPnBbdGl0bGUqPSJoZWxsbyJdPC9wcmU+Ci08L2Rpdj4KLQotPGg0Pjxh
IG5hbWU9YXR0cm5tc3A+Ni4zLjMuIEF0dHJpYnV0ZSBzZWxlY3RvcnMgYW5kIG5hbWVzcGFjZXM8
L2E+PC9oND4KLQotPHA+QXR0cmlidXRlIHNlbGVjdG9ycyBhbGxvdyBhbiBvcHRpb25hbCBuYW1l
c3BhY2UgY29tcG9uZW50IHRvIHRoZQotYXR0cmlidXRlIG5hbWUuIEEgbmFtZXNwYWNlIHByZWZp
eCB0aGF0IGhhcyBiZWVuIHByZXZpb3VzbHkgZGVjbGFyZWQKLW1heSBiZSBwcmVwZW5kZWQgdG8g
dGhlIGF0dHJpYnV0ZSBuYW1lIHNlcGFyYXRlZCBieSB0aGUgbmFtZXNwYWNlCi1zZXBhcmF0b3Ig
JnF1b3Q7dmVydGljYWwgYmFyJnF1b3Q7ICg8Y29kZT58PC9jb2RlPikuIEluIGtlZXBpbmcgd2l0
aAotdGhlIE5hbWVzcGFjZXMgaW4gdGhlIFhNTCByZWNvbW1lbmRhdGlvbiwgZGVmYXVsdCBuYW1l
c3BhY2VzIGRvIG5vdAotYXBwbHkgdG8gYXR0cmlidXRlcywgdGhlcmVmb3JlIGF0dHJpYnV0ZSBz
ZWxlY3RvcnMgd2l0aG91dCBhIG5hbWVzcGFjZQotY29tcG9uZW50IGFwcGx5IG9ubHkgdG8gYXR0
cmlidXRlcyB0aGF0IGhhdmUgbm8gZGVjbGFyZWQgbmFtZXNwYWNlCi0oZXF1aXZhbGVudCB0byAi
PGNvZGU+fGF0dHI8L2NvZGU+IikuIEFuIGFzdGVyaXNrIG1heSBiZSB1c2VkIGZvciB0aGUKLW5h
bWVzcGFjZSBwcmVmaXggaW5kaWNhdGluZyB0aGF0IHRoZSBzZWxlY3RvciBpcyB0byBtYXRjaCBh
bGwKLWF0dHJpYnV0ZSBuYW1lcyB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYXR0cmlidXRlJ3MgbmFt
ZXNwYWNlLgotCi08cD5BbiBhdHRyaWJ1dGUgc2VsZWN0b3Igd2l0aCBhbiBhdHRyaWJ1dGUgbmFt
ZSBjb250YWluaW5nIGEgbmFtZXNwYWNlCi1wcmVmaXggdGhhdCBoYXMgbm90IGJlZW4gcHJldmlv
dXNseSBkZWNsYXJlZCBpcyBhbiA8YQotaHJlZj0iI0NvbmZvcm1hbmNlIj5pbnZhbGlkPC9hPiBz
ZWxlY3Rvci4gIFRoZSBtZWNoYW5pc20gZm9yIGRlY2xhcmluZwotYSBuYW1lc3BhY2UgcHJlZml4
IGlzIGxlZnQgdXAgdG8gdGhlIGxhbmd1YWdlIGltcGxlbWVudGluZyBTZWxlY3RvcnMuCi1JbiBD
U1MsIHN1Y2ggYSBtZWNoYW5pc20gaXMgZGVmaW5lZCBpbiB0aGUgR2VuZXJhbCBTeW50YXggbW9k
dWxlLgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLSAgPHA+Q1NTIGV4YW1wbGVzOjwvcD4KLSAg
PHByZT5AbmFtZXNwYWNlIGZvbyAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSI7Ci1bZm9vfGF0dD12
YWxdIHsgY29sb3I6IGJsdWUgfQotWyp8YXR0XSB7IGNvbG9yOiB5ZWxsb3cgfQotW3xhdHRdIHsg
Y29sb3I6IGdyZWVuIH0KLVthdHRdIHsgY29sb3I6IGdyZWVuIH08L3ByZT4KLQotICA8cD5UaGUg
Zmlyc3QgcnVsZSB3aWxsIG1hdGNoIG9ubHkgZWxlbWVudHMgd2l0aCB0aGUgYXR0cmlidXRlCi0g
IDxjb2RlPmF0dDwvY29kZT4gaW4gdGhlICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBuYW1lc3Bh
Y2Ugd2l0aCB0aGUKLSAgdmFsdWUgInZhbCIuPC9wPgotCi0gIDxwPlRoZSBzZWNvbmQgcnVsZSB3
aWxsIG1hdGNoIG9ubHkgZWxlbWVudHMgd2l0aCB0aGUgYXR0cmlidXRlCi0gIDxjb2RlPmF0dDwv
Y29kZT4gcmVnYXJkbGVzcyBvZiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBhdHRyaWJ1dGUKLSAgKGlu
Y2x1ZGluZyBubyBkZWNsYXJlZCBuYW1lc3BhY2UpLjwvcD4KLQotICA8cD5UaGUgbGFzdCB0d28g
cnVsZXMgYXJlIGVxdWl2YWxlbnQgYW5kIHdpbGwgbWF0Y2ggb25seSBlbGVtZW50cwotICB3aXRo
IHRoZSBhdHRyaWJ1dGUgPGNvZGU+YXR0PC9jb2RlPiB3aGVyZSB0aGUgYXR0cmlidXRlIGlzIG5v
dAotICBkZWNsYXJlZCB0byBiZSBpbiBhIG5hbWVzcGFjZS48L3A+Ci0KLTwvZGl2PgotCi08aDQ+
PGEgbmFtZT1kZWYtdmFsdWVzPjYuMy40LiBEZWZhdWx0IGF0dHJpYnV0ZSB2YWx1ZXMgaW4gRFRE
czwvYT48L2g0PgotCi08cD5BdHRyaWJ1dGUgc2VsZWN0b3JzIHJlcHJlc2VudCBleHBsaWNpdGx5
IHNldCBhdHRyaWJ1dGUgdmFsdWVzIGluCi10aGUgZG9jdW1lbnQgdHJlZS4gRGVmYXVsdCBhdHRy
aWJ1dGUgdmFsdWVzIG1heSBiZSBkZWZpbmVkIGluIGEgRFREIG9yCi1lbHNld2hlcmUsIGJ1dCBj
YW5ub3QgYWx3YXlzIGJlIHNlbGVjdGVkIGJ5IGF0dHJpYnV0ZQotc2VsZWN0b3JzLiBTZWxlY3Rv
cnMgc2hvdWxkIGJlIGRlc2lnbmVkIHNvIHRoYXQgdGhleSB3b3JrIGV2ZW4gaWYgdGhlCi1kZWZh
dWx0IHZhbHVlcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudCB0cmVlLjwvcD4KLQot
PHA+TW9yZSBwcmVjaXNlbHksIGEgVUEgaXMgPGVtPm5vdDwvZW0+IHJlcXVpcmVkIHRvIHJlYWQg
YW4gImV4dGVybmFsCi1zdWJzZXQiIG9mIHRoZSBEVEQgYnV0IDxlbT5pczwvZW0+IHJlcXVpcmVk
IHRvIGxvb2sgZm9yIGRlZmF1bHQKLWF0dHJpYnV0ZSB2YWx1ZXMgaW4gdGhlIGRvY3VtZW50J3Mg
ImludGVybmFsIHN1YnNldC4iIChTZWUgPGEKLWhyZWY9IiNyZWZzWE1MMTAiPltYTUwxMF08L2E+
IGZvciBkZWZpbml0aW9ucyBvZiB0aGVzZSBzdWJzZXRzLik8L3A+Ci0KLTxwPkEgVUEgdGhhdCBy
ZWNvZ25pemVzIGFuIFhNTCBuYW1lc3BhY2UgPGEKLWhyZWY9IiNyZWZzWE1MTkFNRVMiPltYTUxO
QU1FU108L2E+IGlzIG5vdCByZXF1aXJlZCB0byB1c2UgaXRzCi1rbm93bGVkZ2Ugb2YgdGhhdCBu
YW1lc3BhY2UgdG8gdHJlYXQgZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzIGFzIGlmCi10aGV5IHdl
cmUgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQuIChGb3IgZXhhbXBsZSwgYW4gWEhUTUwgVUEgaXMg
bm90Ci1yZXF1aXJlZCB0byB1c2UgaXRzIGJ1aWx0LWluIGtub3dsZWRnZSBvZiB0aGUgWEhUTUwg
RFRELik8L3A+Ci0KLTxwIGNsYXNzPSJub3RlIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFR5cGlj
YWxseSwgaW1wbGVtZW50YXRpb25zCi1jaG9vc2UgdG8gaWdub3JlIGV4dGVybmFsIHN1YnNldHMu
PC9wPgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLTxwPkV4YW1wbGU6PC9wPgotCi08cD5Db25z
aWRlciBhbiBlbGVtZW50IEVYQU1QTEUgd2l0aCBhbiBhdHRyaWJ1dGUgIm5vdGF0aW9uIiB0aGF0
IGhhcyBhCi1kZWZhdWx0IHZhbHVlIG9mICJkZWNpbWFsIi4gVGhlIERURCBmcmFnbWVudCBtaWdo
dCBiZTwvcD4KLQotPHByZSBjbGFzcz0iZHRkLWV4YW1wbGUiPiZsdDshQVRUTElTVCBFWEFNUExF
IG5vdGF0aW9uIChkZWNpbWFsLG9jdGFsKSAiZGVjaW1hbCI+PC9wcmU+Ci0KLTxwPklmIHRoZSBz
dHlsZSBzaGVldCBjb250YWlucyB0aGUgcnVsZXM8L3A+Ci0KLTxwcmU+RVhBTVBMRVtub3RhdGlv
bj1kZWNpbWFsXSB7IC8qLi4uIGRlZmF1bHQgcHJvcGVydHkgc2V0dGluZ3MgLi4uKi8gfQotRVhB
TVBMRVtub3RhdGlvbj1vY3RhbF0gICB7IC8qLi4uIG90aGVyIHNldHRpbmdzLi4uKi8gfTwvcHJl
PgotCi08cD50aGUgZmlyc3QgcnVsZSB3aWxsIG5vdCBtYXRjaCBlbGVtZW50cyB3aG9zZSAibm90
YXRpb24iIGF0dHJpYnV0ZQotaXMgc2V0IGJ5IGRlZmF1bHQsIGkuZS4gbm90IHNldCBleHBsaWNp
dGx5LiBUbyBjYXRjaCBhbGwgY2FzZXMsIHRoZQotYXR0cmlidXRlIHNlbGVjdG9yIGZvciB0aGUg
ZGVmYXVsdCB2YWx1ZSBtdXN0IGJlIGRyb3BwZWQ6PC9wPgotCi08cHJlPkVYQU1QTEUgICAgICAg
ICAgICAgICAgICAgeyAvKi4uLiBkZWZhdWx0IHByb3BlcnR5IHNldHRpbmdzIC4uLiovIH0KLUVY
QU1QTEVbbm90YXRpb249b2N0YWxdICAgeyAvKi4uLiBvdGhlciBzZXR0aW5ncy4uLiovIH08L3By
ZT4KLQotPHA+SGVyZSwgYmVjYXVzZSB0aGUgc2VsZWN0b3IgPGNvZGU+RVhBTVBMRVtub3RhdGlv
bj1vY3RhbF08L2NvZGU+IGlzCi1tb3JlIHNwZWNpZmljIHRoYW4gdGhlIHRhZwotc2VsZWN0b3Ig
YWxvbmUsIHRoZSBzdHlsZSBkZWNsYXJhdGlvbnMgaW4gdGhlIHNlY29uZCBydWxlIHdpbGwgb3Zl
cnJpZGUKLXRob3NlIGluIHRoZSBmaXJzdCBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIGEgIm5vdGF0
aW9uIiBhdHRyaWJ1dGUgdmFsdWUKLW9mICJvY3RhbCIuIENhcmUgaGFzIHRvIGJlIHRha2VuIHRo
YXQgYWxsIHByb3BlcnR5IGRlY2xhcmF0aW9ucyB0aGF0Ci1hcmUgdG8gYXBwbHkgb25seSB0byB0
aGUgZGVmYXVsdCBjYXNlIGFyZSBvdmVycmlkZGVuIGluIHRoZSBub24tZGVmYXVsdAotY2FzZXMn
IHN0eWxlIHJ1bGVzLjwvcD4KLQotPC9kaXY+Ci0KLTxoMz48YSBuYW1lPWNsYXNzLWh0bWw+Ni40
LiBDbGFzcyBzZWxlY3RvcnM8L2E+PC9oMz4KLQotPHA+V29ya2luZyB3aXRoIEhUTUwsIGF1dGhv
cnMgbWF5IHVzZSB0aGUgcGVyaW9kIChVKzAwMkUsCi08Y29kZT4uPC9jb2RlPikgbm90YXRpb24g
YXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIDxjb2RlPn49PC9jb2RlPgotbm90YXRpb24gd2hlbiBy
ZXByZXNlbnRpbmcgdGhlIDxjb2RlPmNsYXNzPC9jb2RlPiBhdHRyaWJ1dGUuIFRodXMsIGZvcgot
SFRNTCwgPGNvZGU+ZGl2LnZhbHVlPC9jb2RlPiBhbmQgPGNvZGU+ZGl2W2NsYXNzfj12YWx1ZV08
L2NvZGU+IGhhdmUKLXRoZSBzYW1lIG1lYW5pbmcuIFRoZSBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBp
bW1lZGlhdGVseSBmb2xsb3cgdGhlCi0mcXVvdDtwZXJpb2QmcXVvdDsgKDxjb2RlPi48L2NvZGU+
KS48L3A+Ci0KLTxwPlVBcyBtYXkgYXBwbHkgc2VsZWN0b3JzIHVzaW5nIHRoZSBwZXJpb2QgKC4p
IG5vdGF0aW9uIGluIFhNTAotZG9jdW1lbnRzIGlmIHRoZSBVQSBoYXMgbmFtZXNwYWNlLXNwZWNp
ZmljIGtub3dsZWRnZSB0aGF0IGFsbG93cyBpdCB0bwotZGV0ZXJtaW5lIHdoaWNoIGF0dHJpYnV0
ZSBpcyB0aGUgJnF1b3Q7Y2xhc3MmcXVvdDsgYXR0cmlidXRlIGZvciB0aGUKLXJlc3BlY3RpdmUg
bmFtZXNwYWNlLiBPbmUgc3VjaCBleGFtcGxlIG9mIG5hbWVzcGFjZS1zcGVjaWZpYyBrbm93bGVk
Z2UKLWlzIHRoZSBwcm9zZSBpbiB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIG5h
bWVzcGFjZSAoZS5nLiBTVkcKLTEuMCA8YSBocmVmPSIjcmVmc1NWRyI+W1NWR108L2E+IGRlc2Ny
aWJlcyB0aGUgPGEKLWhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUFItU1ZHLTIwMDEw
NzE5L3N0eWxpbmcuaHRtbCNDbGFzc0F0dHJpYnV0ZSI+U1ZHCi0mcXVvdDtjbGFzcyZxdW90OyBh
dHRyaWJ1dGU8L2E+IGFuZCBob3cgYSBVQSBzaG91bGQgaW50ZXJwcmV0IGl0LCBhbmQKLXNpbWls
YXJseSBNYXRoTUwgMS4wMSA8YSBocmVmPSIjcmVmc01BVEgiPltNQVRIXTwvYT4gZGVzY3JpYmVz
IHRoZSA8YQotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wNy9SRUMtTWF0aE1MLTE5OTkw
NzA3L2NoYXB0ZXIyLmh0bWwjc2VjMi4zLjQiPk1hdGhNTAotJnF1b3Q7Y2xhc3MmcXVvdDsgYXR0
cmlidXRlPC9hPi4pPC9wPgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLSA8cD5DU1MgZXhhbXBs
ZXM6PC9wPgotCi0gPHA+V2UgY2FuIGFzc2lnbiBzdHlsZSBpbmZvcm1hdGlvbiB0byBhbGwgZWxl
bWVudHMgd2l0aAotIDxjb2RlPmNsYXNzfj0icGFzdG9yYWwiPC9jb2RlPiBhcyBmb2xsb3dzOjwv
cD4KLQotICA8cHJlPioucGFzdG9yYWwgeyBjb2xvcjogZ3JlZW4gfSAgLyogYWxsIGVsZW1lbnRz
IHdpdGggY2xhc3N+PXBhc3RvcmFsICovPC9wcmU+Ci0KLSAgPHA+b3IganVzdDwvcD4KLQotICA8
cHJlPi5wYXN0b3JhbCB7IGNvbG9yOiBncmVlbiB9ICAvKiBhbGwgZWxlbWVudHMgd2l0aCBjbGFz
c349cGFzdG9yYWwgKi88L3ByZT4KLQotICA8cD5UaGUgZm9sbG93aW5nIGFzc2lnbnMgc3R5bGUg
b25seSB0byBIMSBlbGVtZW50cyB3aXRoCi0gIDxjb2RlPmNsYXNzfj0icGFzdG9yYWwiPC9jb2Rl
Pjo8L3A+Ci0KLSAgPHByZT5IMS5wYXN0b3JhbCB7IGNvbG9yOiBncmVlbiB9ICAvKiBIMSBlbGVt
ZW50cyB3aXRoIGNsYXNzfj1wYXN0b3JhbCAqLzwvcHJlPgotCi0gIDxwPkdpdmVuIHRoZXNlIHJ1
bGVzLCB0aGUgZmlyc3QgSDEgaW5zdGFuY2UgYmVsb3cgd291bGQgbm90IGhhdmUKLSAgZ3JlZW4g
dGV4dCwgd2hpbGUgdGhlIHNlY29uZCB3b3VsZDo8L3A+Ci0KLSAgPHByZT4mbHQ7SDEmZ3Q7Tm90
IGdyZWVuJmx0Oy9IMSZndDsKLSZsdDtIMSBjbGFzcz0icGFzdG9yYWwiJmd0O1ZlcnkgZ3JlZW4m
bHQ7L0gxJmd0OzwvcHJlPgotCi08L2Rpdj4KLQotPHA+VG8gcmVwcmVzZW50IGEgc3Vic2V0IG9m
ICJjbGFzcyIgdmFsdWVzLCBlYWNoIHZhbHVlIG11c3QgYmUgcHJlY2VkZWQKLWJ5IGEgIi4iLCBp
biBhbnkgb3JkZXIuPC9QPgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLQotICA8cD5DU1MgZXhh
bXBsZTo8L3A+Ci0KLSAgPHA+VGhlIGZvbGxvd2luZyBydWxlIG1hdGNoZXMgYW55IFAgZWxlbWVu
dCB3aG9zZSAiY2xhc3MiIGF0dHJpYnV0ZQotICBoYXMgYmVlbiBhc3NpZ25lZCBhIGxpc3Qgb2Yg
PGEKLSAgaHJlZj0iI3doaXRlc3BhY2UiPndoaXRlc3BhY2U8L2E+LXNlcGFyYXRlZCB2YWx1ZXMg
dGhhdCBpbmNsdWRlcwotICAicGFzdG9yYWwiIGFuZCAibWFyaW5lIjo8L3A+Ci0KLSAgPHByZT5w
LnBhc3RvcmFsLm1hcmluZSB7IGNvbG9yOiBncmVlbiB9PC9wcmU+Ci0KLSAgPHA+VGhpcyBydWxl
IG1hdGNoZXMgd2hlbiA8Y29kZT5jbGFzcz0icGFzdG9yYWwgYmx1ZSBhcXVhCi0gIG1hcmluZSI8
L2NvZGU+IGJ1dCBkb2VzIG5vdCBtYXRjaCBmb3IgPGNvZGU+Y2xhc3M9InBhc3RvcmFsCi0gIGJs
dWUiPC9jb2RlPi48L3A+Ci0KLTwvZGl2PgotCi08cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5Ob3Rl
Ojwvc3Ryb25nPiBCZWNhdXNlIENTUyBnaXZlcyBjb25zaWRlcmFibGUKLXBvd2VyIHRvIHRoZSAi
Y2xhc3MiIGF0dHJpYnV0ZSwgYXV0aG9ycyBjb3VsZCBjb25jZWl2YWJseSBkZXNpZ24gdGhlaXIK
LW93biAiZG9jdW1lbnQgbGFuZ3VhZ2UiIGJhc2VkIG9uIGVsZW1lbnRzIHdpdGggYWxtb3N0IG5v
IGFzc29jaWF0ZWQKLXByZXNlbnRhdGlvbiAoc3VjaCBhcyBESVYgYW5kIFNQQU4gaW4gSFRNTCkg
YW5kIGFzc2lnbmluZyBzdHlsZQotaW5mb3JtYXRpb24gdGhyb3VnaCB0aGUgImNsYXNzIiBhdHRy
aWJ1dGUuICBBdXRob3JzIHNob3VsZCBhdm9pZCB0aGlzCi1wcmFjdGljZSBzaW5jZSB0aGUgc3Ry
dWN0dXJhbCBlbGVtZW50cyBvZiBhIGRvY3VtZW50IGxhbmd1YWdlIG9mdGVuCi1oYXZlIHJlY29n
bml6ZWQgYW5kIGFjY2VwdGVkIG1lYW5pbmdzIGFuZCBhdXRob3ItZGVmaW5lZCBjbGFzc2VzIG1h
eQotbm90LjwvcD4KLQotPHAgY2xhc3M9Im5vdGUiPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSWYg
YW4gZWxlbWVudCBoYXMgbXVsdGlwbGUKLWNsYXNzIGF0dHJpYnV0ZXMsIHRoZWlyIHZhbHVlcyBt
dXN0IGJlIGNvbmNhdGVuYXRlZCB3aXRoIHNwYWNlcwotYmV0d2VlbiB0aGUgdmFsdWVzIGJlZm9y
ZSBzZWFyY2hpbmcgZm9yIHRoZSBjbGFzcy4gQXMgb2YgdGhpcyB0aW1lIHRoZQotd29ya2luZyBn
cm91cCBpcyBub3QgYXdhcmUgb2YgYW55IG1hbm5lciBpbiB3aGljaCB0aGlzIHNpdHVhdGlvbiBj
YW4KLWJlIHJlYWNoZWQsIGhvd2V2ZXIsIHNvIHRoaXMgYmVoYXZpb3IgaXMgZXhwbGljaXRseSBu
b24tbm9ybWF0aXZlIGluCi10aGlzIHNwZWNpZmljYXRpb24uPC9wPgotCi08aDM+PGEgbmFtZT1p
ZC1zZWxlY3RvcnM+Ni41LiBJRCBzZWxlY3RvcnM8L2E+PC9oMz4KLQotPHA+RG9jdW1lbnQgbGFu
Z3VhZ2VzIG1heSBjb250YWluIGF0dHJpYnV0ZXMgdGhhdCBhcmUgZGVjbGFyZWQgdG8gYmUKLW9m
IHR5cGUgSUQuIFdoYXQgbWFrZXMgYXR0cmlidXRlcyBvZiB0eXBlIElEIHNwZWNpYWwgaXMgdGhh
dCBubyB0d28KLXN1Y2ggYXR0cmlidXRlcyBjYW4gaGF2ZSB0aGUgc2FtZSB2YWx1ZSBpbiBhIGRv
Y3VtZW50LCByZWdhcmRsZXNzIG9mCi10aGUgdHlwZSBvZiB0aGUgZWxlbWVudHMgdGhhdCBjYXJy
eSB0aGVtOyB3aGF0ZXZlciB0aGUgZG9jdW1lbnQKLWxhbmd1YWdlLCBhbiBJRCB0eXBlZCBhdHRy
aWJ1dGUgY2FuIGJlIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgaXRzCi1lbGVtZW50LiBJbiBI
VE1MIGFsbCBJRCBhdHRyaWJ1dGVzIGFyZSBuYW1lZCAiaWQiOyBYTUwgYXBwbGljYXRpb25zCi1t
YXkgbmFtZSBJRCBhdHRyaWJ1dGVzIGRpZmZlcmVudGx5LCBidXQgdGhlIHNhbWUgcmVzdHJpY3Rp
b24KLWFwcGxpZXMuPC9wPgotCi08cD5BbiBJRC10eXBlZCBhdHRyaWJ1dGUgb2YgYSBkb2N1bWVu
dCBsYW5ndWFnZSBhbGxvd3MgYXV0aG9ycyB0bwotYXNzaWduIGFuIGlkZW50aWZpZXIgdG8gb25l
IGVsZW1lbnQgaW5zdGFuY2UgaW4gdGhlIGRvY3VtZW50IHRyZWUuIFczQwotSUQgc2VsZWN0b3Jz
IHJlcHJlc2VudCBhbiBlbGVtZW50IGluc3RhbmNlIGJhc2VkIG9uIGl0cyBpZGVudGlmaWVyLiBB
bgotSUQgc2VsZWN0b3IgY29udGFpbnMgYSAmcXVvdDtudW1iZXIgc2lnbiZxdW90OyAoVSswMDIz
LAotPGNvZGU+IzwvY29kZT4pIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBJRCB2YWx1ZSwg
d2hpY2ggbXVzdCBiZSBhbgotaWRlbnRpZmllci48L3A+Ci0KLTxwPlNlbGVjdG9ycyBkb2VzIG5v
dCBzcGVjaWZ5IGhvdyBhIFVBIGtub3dzIHRoZSBJRC10eXBlZCBhdHRyaWJ1dGUgb2YKLWFuIGVs
ZW1lbnQuIFRoZSBVQSBtYXksIGUuZy4sIHJlYWQgYSBkb2N1bWVudCdzIERURCwgaGF2ZSB0aGUK
LWluZm9ybWF0aW9uIGhhcmQtY29kZWQgb3IgYXNrIHRoZSB1c2VyLgotCi08ZGl2IGNsYXNzPSJl
eGFtcGxlIj4KLSAgPHA+RXhhbXBsZXM6PC9wPgotICA8cD5UaGUgZm9sbG93aW5nIElEIHNlbGVj
dG9yIHJlcHJlc2VudHMgYW4gPGNvZGU+aDE8L2NvZGU+IGVsZW1lbnQKLSAgd2hvc2UgSUQtdHlw
ZWQgYXR0cmlidXRlIGhhcyB0aGUgdmFsdWUgImNoYXB0ZXIxIjo8L3A+Ci0gIDxwcmU+aDEjY2hh
cHRlcjE8L3ByZT4KLSAgPHA+VGhlIGZvbGxvd2luZyBJRCBzZWxlY3RvciByZXByZXNlbnRzIGFu
eSBlbGVtZW50IHdob3NlIElELXR5cGVkCi0gIGF0dHJpYnV0ZSBoYXMgdGhlIHZhbHVlICJjaGFw
dGVyMSI6PC9wPgotICA8cHJlPiNjaGFwdGVyMTwvcHJlPgotICA8cD5UaGUgZm9sbG93aW5nIHNl
bGVjdG9yIHJlcHJlc2VudHMgYW55IGVsZW1lbnQgd2hvc2UgSUQtdHlwZWQKLSAgYXR0cmlidXRl
IGhhcyB0aGUgdmFsdWUgIno5OHkiLjwvcD4KLSAgPHByZT4qI3o5OHk8L3ByZT4KLTwvZGl2Pgot
Ci08cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5Ob3RlLjwvc3Ryb25nPiBJbiBYTUwgMS4wIDxhCi1o
cmVmPSIjcmVmc1hNTDEwIj5bWE1MMTBdPC9hPiwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNo
IGF0dHJpYnV0ZQotY29udGFpbnMgYW4gZWxlbWVudCdzIElEcyBpcyBjb250YWluZWQgaW4gYSBE
VEQgb3IgYSBzY2hlbWEuIFdoZW4KLXBhcnNpbmcgWE1MLCBVQXMgZG8gbm90IGFsd2F5cyByZWFk
IHRoZSBEVEQsIGFuZCB0aHVzIG1heSBub3Qga25vdwotd2hhdCB0aGUgSUQgb2YgYW4gZWxlbWVu
dCBpcyAodGhvdWdoIGEgVUEgbWF5IGhhdmUgbmFtZXNwYWNlLXNwZWNpZmljCi1rbm93bGVkZ2Ug
dGhhdCBhbGxvd3MgaXQgdG8gZGV0ZXJtaW5lIHdoaWNoIGF0dHJpYnV0ZSBpcyB0aGUgSUQKLWF0
dHJpYnV0ZSBmb3IgdGhhdCBuYW1lc3BhY2UpLiBJZiBhIHN0eWxlIHNoZWV0IGRlc2lnbmVyIGtu
b3dzIG9yCi1zdXNwZWN0cyB0aGF0IGEgVUEgbWF5IG5vdCBrbm93IHdoYXQgdGhlIElEIG9mIGFu
IGVsZW1lbnQgaXMsIGhlCi1zaG91bGQgdXNlIG5vcm1hbCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGlu
c3RlYWQ6Ci08Y29kZT5bbmFtZT1wMzcxXTwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT4jcDM3MTwv
Y29kZT4uICBFbGVtZW50cyBpbgotWE1MIDEuMCBkb2N1bWVudHMgd2l0aG91dCBhIERURCBkbyBu
b3QgaGF2ZSBJRHMgYXQgYWxsLjwvcD4KLQotPHA+SWYgYW4gZWxlbWVudCBoYXMgbXVsdGlwbGUg
SUQgYXR0cmlidXRlcywgYWxsIG9mIHRoZW0gbXVzdCBiZQotdHJlYXRlZCBhcyBJRHMgZm9yIHRo
YXQgZWxlbWVudCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBJRAotc2VsZWN0b3IuIFN1Y2ggYSBz
aXR1YXRpb24gY291bGQgYmUgcmVhY2hlZCB1c2luZyBtaXh0dXJlcyBvZiB4bWw6aWQsCi1ET00z
IENvcmUsIFhNTCBEVERzLCBhbmQgbmFtZXNwYWNlLXNwZWNpZmljIGtub3dsZWRnZS48L3A+Ci0K
LTxoMz48YSBuYW1lPXBzZXVkby1jbGFzc2VzPjYuNi4gUHNldWRvLWNsYXNzZXM8L2E+PC9oMz4K
LQotPHA+VGhlIHBzZXVkby1jbGFzcyBjb25jZXB0IGlzIGludHJvZHVjZWQgdG8gcGVybWl0IHNl
bGVjdGlvbiBiYXNlZCBvbgotaW5mb3JtYXRpb24gdGhhdCBsaWVzIG91dHNpZGUgb2YgdGhlIGRv
Y3VtZW50IHRyZWUgb3IgdGhhdCBjYW5ub3QgYmUKLWV4cHJlc3NlZCB1c2luZyB0aGUgb3RoZXIg
c2ltcGxlIHNlbGVjdG9ycy48L3A+Ci0KLTxwPkEgcHNldWRvLWNsYXNzIGFsd2F5cyBjb25zaXN0
cyBvZiBhICZxdW90O2NvbG9uJnF1b3Q7Ci0oPGNvZGU+OjwvY29kZT4pIGZvbGxvd2VkIGJ5IHRo
ZSBuYW1lIG9mIHRoZSBwc2V1ZG8tY2xhc3MgYW5kCi1vcHRpb25hbGx5IGJ5IGEgdmFsdWUgYmV0
d2VlbiBwYXJlbnRoZXNlcy48L3A+Ci0KLTxwPlBzZXVkby1jbGFzc2VzIGFyZSBhbGxvd2VkIGlu
IGFsbCBzZXF1ZW5jZXMgb2Ygc2ltcGxlIHNlbGVjdG9ycwotY29udGFpbmVkIGluIGEgc2VsZWN0
b3IuIFBzZXVkby1jbGFzc2VzIGFyZSBhbGxvd2VkIGFueXdoZXJlIGluCi1zZXF1ZW5jZXMgb2Yg
c2ltcGxlIHNlbGVjdG9ycywgYWZ0ZXIgdGhlIGxlYWRpbmcgdHlwZSBzZWxlY3RvciBvcgotdW5p
dmVyc2FsIHNlbGVjdG9yIChwb3NzaWJseSBvbWl0dGVkKS4gUHNldWRvLWNsYXNzIG5hbWVzIGFy
ZQotY2FzZS1pbnNlbnNpdGl2ZS4gU29tZSBwc2V1ZG8tY2xhc3NlcyBhcmUgbXV0dWFsbHkgZXhj
bHVzaXZlLCB3aGlsZQotb3RoZXJzIGNhbiBiZSBhcHBsaWVkIHNpbXVsdGFuZW91c2x5IHRvIHRo
ZSBzYW1lCi1lbGVtZW50LiBQc2V1ZG8tY2xhc3NlcyBtYXkgYmUgZHluYW1pYywgaW4gdGhlIHNl
bnNlIHRoYXQgYW4gZWxlbWVudAotbWF5IGFjcXVpcmUgb3IgbG9zZSBhIHBzZXVkby1jbGFzcyB3
aGlsZSBhIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlCi1kb2N1bWVudC48L3A+Ci0KLQotPGg0Pjxh
IG5hbWU9ZHluYW1pYy1wc2V1ZG9zPjYuNi4xLiBEeW5hbWljIHBzZXVkby1jbGFzc2VzPC9hPjwv
aDQ+Ci0KLTxwPkR5bmFtaWMgcHNldWRvLWNsYXNzZXMgY2xhc3NpZnkgZWxlbWVudHMgb24gY2hh
cmFjdGVyaXN0aWNzIG90aGVyCi10aGFuIHRoZWlyIG5hbWUsIGF0dHJpYnV0ZXMsIG9yIGNvbnRl
bnQsIGluIHByaW5jaXBsZSBjaGFyYWN0ZXJpc3RpY3MKLXRoYXQgY2Fubm90IGJlIGRlZHVjZWQg
ZnJvbSB0aGUgZG9jdW1lbnQgdHJlZS48L3A+Ci0KLTxwPkR5bmFtaWMgcHNldWRvLWNsYXNzZXMg
ZG8gbm90IGFwcGVhciBpbiB0aGUgZG9jdW1lbnQgc291cmNlIG9yCi1kb2N1bWVudCB0cmVlLjwv
cD4KLQotCi08aDU+VGhlIDxhIG5hbWU9bGluaz5saW5rIHBzZXVkby1jbGFzc2VzOiA6bGluayBh
bmQgOnZpc2l0ZWQ8L2E+PC9oNT4KLQotPHA+VXNlciBhZ2VudHMgY29tbW9ubHkgZGlzcGxheSB1
bnZpc2l0ZWQgbGlua3MgZGlmZmVyZW50bHkgZnJvbQotcHJldmlvdXNseSB2aXNpdGVkIG9uZXMu
IFNlbGVjdG9ycwotcHJvdmlkZXMgdGhlIHBzZXVkby1jbGFzc2VzIDxjb2RlPjpsaW5rPC9jb2Rl
PiBhbmQKLTxjb2RlPjp2aXNpdGVkPC9jb2RlPiB0byBkaXN0aW5ndWlzaCB0aGVtOjwvcD4KLQot
PHVsPgotICA8bGk+VGhlIDxjb2RlPjpsaW5rPC9jb2RlPiBwc2V1ZG8tY2xhc3MgYXBwbGllcyB0
byBsaW5rcyB0aGF0IGhhdmUKLSAgbm90IHlldCBiZWVuIHZpc2l0ZWQuPC9saT4KLSAgPGxpPlRo
ZSA8Y29kZT46dmlzaXRlZDwvY29kZT4gcHNldWRvLWNsYXNzIGFwcGxpZXMgb25jZSB0aGUgbGlu
ayBoYXMKLSAgYmVlbiB2aXNpdGVkIGJ5IHRoZSB1c2VyLiA8L2xpPgotPC91bD4KLQotPHA+QWZ0
ZXIgc29tZSBhbW91bnQgb2YgdGltZSwgdXNlciBhZ2VudHMgbWF5IGNob29zZSB0byByZXR1cm4g
YQotdmlzaXRlZCBsaW5rIHRvIHRoZSAodW52aXNpdGVkKSAnOmxpbmsnIHN0YXRlLjwvcD4KLQot
PHA+VGhlIHR3byBzdGF0ZXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS48L3A+Ci0KLTxkaXYgY2xh
c3M9ImV4YW1wbGUiPgotCi0gIDxwPkV4YW1wbGU6PC9wPgotCi0gIDxwPlRoZSBmb2xsb3dpbmcg
c2VsZWN0b3IgcmVwcmVzZW50cyBsaW5rcyBjYXJyeWluZyBjbGFzcwotICA8Y29kZT5leHRlcm5h
bDwvY29kZT4gYW5kIGFscmVhZHkgdmlzaXRlZDo8L3A+Ci0KLSAgPHByZT5hLmV4dGVybmFsOnZp
c2l0ZWQ8L3ByZT4KLQotPC9kaXY+Ci0KLTxwIGNsYXNzPSJub3RlIj48c3Ryb25nPk5vdGU6PC9z
dHJvbmc+IEl0IGlzIHBvc3NpYmxlIGZvciBzdHlsZSBzaGVldAotYXV0aG9ycyB0byBhYnVzZSB0
aGUgOmxpbmsgYW5kIDp2aXNpdGVkIHBzZXVkby1jbGFzc2VzIHRvIGRldGVybWluZQotd2hpY2gg
c2l0ZXMgYSB1c2VyIGhhcyB2aXNpdGVkIHdpdGhvdXQgdGhlIHVzZXIncyBjb25zZW50LgotCi08
cD5VQXMgbWF5IHRoZXJlZm9yZSB0cmVhdCBhbGwgbGlua3MgYXMgdW52aXNpdGVkIGxpbmtzLCBv
ciBpbXBsZW1lbnQKLW90aGVyIG1lYXN1cmVzIHRvIHByZXNlcnZlIHRoZSB1c2VyJ3MgcHJpdmFj
eSB3aGlsZSByZW5kZXJpbmcgdmlzaXRlZAotYW5kIHVudmlzaXRlZCBsaW5rcyBkaWZmZXJlbnRs
eS48L3A+Ci0KLTxoNT5UaGUgPGEgbmFtZT11c2VyYWN0aW9uLXBzZXVkb3M+dXNlciBhY3Rpb24g
cHNldWRvLWNsYXNzZXMKLTpob3ZlciwgOmFjdGl2ZSwgYW5kIDpmb2N1czwvYT48L2g1PgotCi08
cD5JbnRlcmFjdGl2ZSB1c2VyIGFnZW50cyBzb21ldGltZXMgY2hhbmdlIHRoZSByZW5kZXJpbmcg
aW4gcmVzcG9uc2UKLXRvIHVzZXIgYWN0aW9ucy4gU2VsZWN0b3JzIHByb3ZpZGVzCi10aHJlZSBw
c2V1ZG8tY2xhc3NlcyBmb3IgdGhlIHNlbGVjdGlvbiBvZiBhbiBlbGVtZW50IHRoZSB1c2VyIGlz
Ci1hY3Rpbmcgb24uPC9wPgotCi08dWw+Ci0KLSAgPGxpPlRoZSA8Y29kZT46aG92ZXI8L2NvZGU+
IHBzZXVkby1jbGFzcyBhcHBsaWVzIHdoaWxlIHRoZSB1c2VyCi0gIGRlc2lnbmF0ZXMgYW4gZWxl
bWVudCB3aXRoIGEgcG9pbnRpbmcgZGV2aWNlLCBidXQgZG9lcyBub3QgYWN0aXZhdGUKLSAgaXQu
IEZvciBleGFtcGxlLCBhIHZpc3VhbCB1c2VyIGFnZW50IGNvdWxkIGFwcGx5IHRoaXMgcHNldWRv
LWNsYXNzCi0gIHdoZW4gdGhlIGN1cnNvciAobW91c2UgcG9pbnRlcikgaG92ZXJzIG92ZXIgYSBi
b3ggZ2VuZXJhdGVkIGJ5IHRoZQotICBlbGVtZW50LiBVc2VyIGFnZW50cyBub3QgdGhhdCBkbyBu
b3Qgc3VwcG9ydCA8YQotICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9tZWRp
YS5odG1sI2ludGVyYWN0aXZlLW1lZGlhLWdyb3VwIj5pbnRlcmFjdGl2ZQotICBtZWRpYTwvYT4g
ZG8gbm90IGhhdmUgdG8gc3VwcG9ydCB0aGlzIHBzZXVkby1jbGFzcy4gU29tZSBjb25mb3JtaW5n
Ci0gIHVzZXIgYWdlbnRzIHRoYXQgc3VwcG9ydCA8YQotICBocmVmPSJodHRwOi8vd3d3LnczLm9y
Zy9UUi9SRUMtQ1NTMi9tZWRpYS5odG1sI2ludGVyYWN0aXZlLW1lZGlhLWdyb3VwIj5pbnRlcmFj
dGl2ZQotICBtZWRpYTwvYT4gbWF5IG5vdCBiZSBhYmxlIHRvIHN1cHBvcnQgdGhpcyBwc2V1ZG8t
Y2xhc3MgKGUuZy4sIGEgcGVuCi0gIGRldmljZSB0aGF0IGRvZXMgbm90IGRldGVjdCBob3Zlcmlu
ZykuPC9saT4KLQotICA8bGk+VGhlIDxjb2RlPjphY3RpdmU8L2NvZGU+IHBzZXVkby1jbGFzcyBh
cHBsaWVzIHdoaWxlIGFuIGVsZW1lbnQKLSAgaXMgYmVpbmcgYWN0aXZhdGVkIGJ5IHRoZSB1c2Vy
LiBGb3IgZXhhbXBsZSwgYmV0d2VlbiB0aGUgdGltZXMgdGhlCi0gIHVzZXIgcHJlc3NlcyB0aGUg
bW91c2UgYnV0dG9uIGFuZCByZWxlYXNlcyBpdC48L2xpPgotCi0gIDxsaT5UaGUgPGNvZGU+OmZv
Y3VzPC9jb2RlPiBwc2V1ZG8tY2xhc3MgYXBwbGllcyB3aGlsZSBhbiBlbGVtZW50Ci0gIGhhcyB0
aGUgZm9jdXMgKGFjY2VwdHMga2V5Ym9hcmQgb3IgbW91c2UgZXZlbnRzLCBvciBvdGhlciBmb3Jt
cyBvZgotICBpbnB1dCkuIDwvbGk+Ci0KLTwvdWw+Ci0KLTxwPlRoZXJlIG1heSBiZSBkb2N1bWVu
dCBsYW5ndWFnZSBvciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBsaW1pdHMgb24KLXdoaWNoIGVs
ZW1lbnRzIGNhbiBiZWNvbWUgPGNvZGU+OmFjdGl2ZTwvY29kZT4gb3IgYWNxdWlyZQotPGNvZGU+
OmZvY3VzPC9jb2RlPi48L3A+Ci0KLTxwPlRoZXNlIHBzZXVkby1jbGFzc2VzIGFyZSBub3QgbXV0
dWFsbHkgZXhjbHVzaXZlLiBBbiBlbGVtZW50IG1heQotbWF0Y2ggc2V2ZXJhbCBwc2V1ZG8tY2xh
c3NlcyBhdCB0aGUgc2FtZSB0aW1lLjwvcD4KLQotPHA+U2VsZWN0b3JzIGRvZXNuJ3QgZGVmaW5l
IGlmIHRoZSBwYXJlbnQgb2YgYW4gZWxlbWVudCB0aGF0IGlzCi0nOmFjdGl2ZScgb3IgJzpob3Zl
cicgaXMgYWxzbyBpbiB0aGF0IHN0YXRlLjwvcD4KLQotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci0g
IDxwPkV4YW1wbGVzOjwvcD4KLSAgPHByZT5hOmxpbmsgICAgLyogdW52aXNpdGVkIGxpbmtzICov
Ci1hOnZpc2l0ZWQgLyogdmlzaXRlZCBsaW5rcyAqLwotYTpob3ZlciAgIC8qIHVzZXIgaG92ZXJz
ICovCi1hOmFjdGl2ZSAgLyogYWN0aXZlIGxpbmtzICovPC9wcmU+Ci0gIDxwPkFuIGV4YW1wbGUg
b2YgY29tYmluaW5nIGR5bmFtaWMgcHNldWRvLWNsYXNzZXM6PC9wPgotICA8cHJlPmE6Zm9jdXMK
LWE6Zm9jdXM6aG92ZXI8L3ByZT4KLSAgPHA+VGhlIGxhc3Qgc2VsZWN0b3IgbWF0Y2hlcyA8Y29k
ZT5hPC9jb2RlPiBlbGVtZW50cyB0aGF0IGFyZSBpbgotICB0aGUgcHNldWRvLWNsYXNzIDpmb2N1
cyBhbmQgaW4gdGhlIHBzZXVkby1jbGFzcyA6aG92ZXIuPC9wPgotPC9kaXY+Ci0KLTxwIGNsYXNz
PSJub3RlIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEFuIGVsZW1lbnQgY2FuIGJlIGJvdGggJzp2
aXNpdGVkJwotYW5kICc6YWN0aXZlJyAob3IgJzpsaW5rJyBhbmQgJzphY3RpdmUnKS48L3A+Ci0K
LTxoND48YSBuYW1lPXRhcmdldC1wc2V1ZG8+Ni42LjIuIFRoZSB0YXJnZXQgcHNldWRvLWNsYXNz
IDp0YXJnZXQ8L2E+PC9oND4KLQotPHA+U29tZSBVUklzIHJlZmVyIHRvIGEgbG9jYXRpb24gd2l0
aGluIGEgcmVzb3VyY2UuIFRoaXMga2luZCBvZiBVUkkKLWVuZHMgd2l0aCBhICZxdW90O251bWJl
ciBzaWduJnF1b3Q7ICgjKSBmb2xsb3dlZCBieSBhbiBhbmNob3IKLWlkZW50aWZpZXIgKGNhbGxl
ZCB0aGUgZnJhZ21lbnQgaWRlbnRpZmllcikuPC9wPgotCi08cD5VUklzIHdpdGggZnJhZ21lbnQg
aWRlbnRpZmllcnMgbGluayB0byBhIGNlcnRhaW4gZWxlbWVudCB3aXRoaW4gdGhlCi1kb2N1bWVu
dCwga25vd24gYXMgdGhlIHRhcmdldCBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIGhlcmUgaXMgYSBV
UkkKLXBvaW50aW5nIHRvIGFuIGFuY2hvciBuYW1lZCA8Y29kZT5zZWN0aW9uXzI8L2NvZGU+IGlu
IGFuIEhUTUwKLWRvY3VtZW50OjwvcD4KLQotPHByZT5odHRwOi8vZXhhbXBsZS5jb20vaHRtbC90
b3AuaHRtbCNzZWN0aW9uXzI8L3ByZT4KLQotPHA+QSB0YXJnZXQgZWxlbWVudCBjYW4gYmUgcmVw
cmVzZW50ZWQgYnkgdGhlIDxjb2RlPjp0YXJnZXQ8L2NvZGU+Ci1wc2V1ZG8tY2xhc3MuIElmIHRo
ZSBkb2N1bWVudCdzIFVSSSBoYXMgbm8gZnJhZ21lbnQgaWRlbnRpZmllciwgdGhlbgotdGhlIGRv
Y3VtZW50IGhhcyBubyB0YXJnZXQgZWxlbWVudC48L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUi
PgotIDxwPkV4YW1wbGU6PC9wPgotIDxwcmU+cC5ub3RlOnRhcmdldDwvcHJlPgotIDxwPlRoaXMg
c2VsZWN0b3IgcmVwcmVzZW50cyBhIDxjb2RlPnA8L2NvZGU+IGVsZW1lbnQgb2YgY2xhc3MKLSA8
Y29kZT5ub3RlPC9jb2RlPiB0aGF0IGlzIHRoZSB0YXJnZXQgZWxlbWVudCBvZiB0aGUgcmVmZXJy
aW5nCi0gVVJJLjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLSA8cD5DU1Mg
ZXhhbXBsZTo8L3A+Ci0gPHA+SGVyZSwgdGhlIDxjb2RlPjp0YXJnZXQ8L2NvZGU+IHBzZXVkby1j
bGFzcyBpcyB1c2VkIHRvIG1ha2UgdGhlCi0gdGFyZ2V0IGVsZW1lbnQgcmVkIGFuZCBwbGFjZSBh
biBpbWFnZSBiZWZvcmUgaXQsIGlmIHRoZXJlIGlzIG9uZTo8L3A+Ci0gPHByZT4qOnRhcmdldCB7
IGNvbG9yIDogcmVkIH0KLSo6dGFyZ2V0OjpiZWZvcmUgeyBjb250ZW50IDogdXJsKHRhcmdldC5w
bmcpIH08L3ByZT4KLTwvZGl2PgotCi08aDQ+PGEgbmFtZT1sYW5nLXBzZXVkbz42LjYuMy4gVGhl
IGxhbmd1YWdlIHBzZXVkby1jbGFzcyA6bGFuZzwvYT48L2g0PgotCi08cD5JZiB0aGUgZG9jdW1l
bnQgbGFuZ3VhZ2Ugc3BlY2lmaWVzIGhvdyB0aGUgaHVtYW4gbGFuZ3VhZ2Ugb2YgYW4KLWVsZW1l
bnQgaXMgZGV0ZXJtaW5lZCwgaXQgaXMgcG9zc2libGUgdG8gd3JpdGUgc2VsZWN0b3JzIHRoYXQK
LXJlcHJlc2VudCBhbiBlbGVtZW50IGJhc2VkIG9uIGl0cyBsYW5ndWFnZS4gRm9yIGV4YW1wbGUs
IGluIEhUTUwgPGEKLWhyZWY9IiNyZWZzSFRNTDQiPltIVE1MNF08L2E+LCB0aGUgbGFuZ3VhZ2Ug
aXMgZGV0ZXJtaW5lZCBieSBhCi1jb21iaW5hdGlvbiBvZiB0aGUgPGNvZGU+bGFuZzwvY29kZT4g
YXR0cmlidXRlLCB0aGUgPGNvZGU+bWV0YTwvY29kZT4KLWVsZW1lbnQsIGFuZCBwb3NzaWJseSBi
eSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwcm90b2NvbCAoc3VjaCBhcyBIVFRQCi1oZWFkZXJzKS4g
WE1MIHVzZXMgYW4gYXR0cmlidXRlIGNhbGxlZCA8Y29kZT54bWw6bGFuZzwvY29kZT4sIGFuZAot
dGhlcmUgbWF5IGJlIG90aGVyIGRvY3VtZW50IGxhbmd1YWdlLXNwZWNpZmljIG1ldGhvZHMgZm9y
IGRldGVybWluaW5nCi10aGUgbGFuZ3VhZ2UuPC9wPgotCi08cD5UaGUgcHNldWRvLWNsYXNzIDxj
b2RlPjpsYW5nKEMpPC9jb2RlPiByZXByZXNlbnRzIGFuIGVsZW1lbnQgdGhhdAotaXMgaW4gbGFu
Z3VhZ2UgQy4gV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEKLTxjb2RlPjps
YW5nKCk8L2NvZGU+IHNlbGVjdG9yIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgaWRlbnRpZmllciBD
Ci1iZWluZyBlaXRoZXIgZXF1YWwgdG8sIG9yIGEgaHlwaGVuLXNlcGFyYXRlZCBzdWJzdHJpbmcg
b2YsIHRoZQotZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlLCBpbiB0aGUgc2FtZSB3YXkgYXMgaWYg
cGVyZm9ybWVkIGJ5IHRoZSA8YQotaHJlZj0iI2F0dHJpYnV0ZS1yZXByZXNlbnRhdGlvbiI+J3w9
JzwvYT4gb3BlcmF0b3IgaW4gYXR0cmlidXRlCi1zZWxlY3RvcnMuIFRoZSBpZGVudGlmaWVyIEMg
ZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlCi1uYW1lLjwvcD4KLQotPHA+QyBt
dXN0IG5vdCBiZSBlbXB0eS4gKElmIGl0IGlzLCB0aGUgc2VsZWN0b3IgaXMgaW52YWxpZC4pPC9w
PgotCi08cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJdCBpcyByZWNvbW1l
bmRlZCB0aGF0Ci1kb2N1bWVudHMgYW5kIHByb3RvY29scyBpbmRpY2F0ZSBsYW5ndWFnZSB1c2lu
ZyBjb2RlcyBmcm9tIFJGQyAzMDY2IDxhCi1ocmVmPSIjcmVmc1JGQzMwNjYiPltSRkMzMDY2XTwv
YT4gb3IgaXRzIHN1Y2Nlc3NvciwgYW5kIGJ5IG1lYW5zIG9mCi0ieG1sOmxhbmciIGF0dHJpYnV0
ZXMgaW4gdGhlIGNhc2Ugb2YgWE1MLWJhc2VkIGRvY3VtZW50cyA8YQotaHJlZj0iI3JlZnNYTUwx
MCI+W1hNTDEwXTwvYT4uIFNlZSA8YQotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvSW50ZXJuYXRp
b25hbC9xdWVzdGlvbnMvcWEtbGFuZy0yb3IzLmh0bWwiPgotIkZBUTogVHdvLWxldHRlciBvciB0
aHJlZS1sZXR0ZXIgbGFuZ3VhZ2UgY29kZXMuIjwvYT48L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1w
bGUiPgotICA8cD5FeGFtcGxlczo8L3A+Ci0gIDxwPlRoZSB0d28gZm9sbG93aW5nIHNlbGVjdG9y
cyByZXByZXNlbnQgYW4gSFRNTCBkb2N1bWVudCB0aGF0IGlzIGluCi0gIEJlbGdpYW4sIEZyZW5j
aCwgb3IgR2VybWFuLiBUaGUgdHdvIG5leHQgc2VsZWN0b3JzIHJlcHJlc2VudAotICA8Y29kZT5x
PC9jb2RlPiBxdW90YXRpb25zIGluIGFuIGFyYml0cmFyeSBlbGVtZW50IGluIEJlbGdpYW4sIEZy
ZW5jaCwKLSAgb3IgR2VybWFuLjwvcD4KLSAgPHByZT5odG1sOmxhbmcoZnItYmUpCi1odG1sOmxh
bmcoZGUpCi06bGFuZyhmci1iZSkgJmd0OyBxCi06bGFuZyhkZSkgJmd0OyBxPC9wcmU+Ci08L2Rp
dj4KLQotPGg0PjxhIG5hbWU9VUlzdGF0ZXM+Ni42LjQuIFRoZSBVSSBlbGVtZW50IHN0YXRlcyBw
c2V1ZG8tY2xhc3NlczwvYT48L2g0PgotCi08aDU+PGEgbmFtZT1lbmFibGVkZGlzYWJsZWQ+VGhl
IDplbmFibGVkIGFuZCA6ZGlzYWJsZWQgcHNldWRvLWNsYXNzZXM8L2E+PC9oNT4KLQotPHA+VGhl
IDxjb2RlPjplbmFibGVkPC9jb2RlPiBwc2V1ZG8tY2xhc3MgYWxsb3dzIGF1dGhvcnMgdG8gY3Vz
dG9taXplCi10aGUgbG9vayBvZiB1c2VyIGludGVyZmFjZSBlbGVtZW50cyB0aGF0IGFyZSBlbmFi
bGVkICZtZGFzaDsgd2hpY2ggdGhlCi11c2VyIGNhbiBzZWxlY3Qgb3IgYWN0aXZhdGUgaW4gc29t
ZSBmYXNoaW9uIChlLmcuIGNsaWNraW5nIG9uIGEgYnV0dG9uCi13aXRoIGEgbW91c2UpLiAgVGhl
cmUgaXMgYSBuZWVkIGZvciBzdWNoIGEgcHNldWRvLWNsYXNzIGJlY2F1c2UgdGhlcmUKLWlzIG5v
IHdheSB0byBwcm9ncmFtbWF0aWNhbGx5IHNwZWNpZnkgdGhlIGRlZmF1bHQgYXBwZWFyYW5jZSBv
ZiBzYXksCi1hbiBlbmFibGVkIDxjb2RlPmlucHV0PC9jb2RlPiBlbGVtZW50IHdpdGhvdXQgYWxz
byBzcGVjaWZ5aW5nIHdoYXQgaXQKLXdvdWxkIGxvb2sgbGlrZSB3aGVuIGl0IHdhcyBkaXNhYmxl
ZC48L3A+Ci0KLTxwPlNpbWlsYXIgdG8gPGNvZGU+OmVuYWJsZWQ8L2NvZGU+LCA8Y29kZT46ZGlz
YWJsZWQ8L2NvZGU+IGFsbG93cyB0aGUKLWF1dGhvciB0byBzcGVjaWZ5IHByZWNpc2VseSBob3cg
YSBkaXNhYmxlZCBvciBpbmFjdGl2ZSB1c2VyIGludGVyZmFjZQotZWxlbWVudCBzaG91bGQgbG9v
ay48L3A+Ci0KLTxwPk1vc3QgZWxlbWVudHMgd2lsbCBiZSBuZWl0aGVyIGVuYWJsZWQgbm9yIGRp
c2FibGVkLiAgQW4gZWxlbWVudCBpcwotZW5hYmxlZCBpZiB0aGUgdXNlciBjYW4gZWl0aGVyIGFj
dGl2YXRlIGl0IG9yIHRyYW5zZmVyIHRoZSBmb2N1cyB0bwotaXQuIEFuIGVsZW1lbnQgaXMgZGlz
YWJsZWQgaWYgaXQgY291bGQgYmUgZW5hYmxlZCwgYnV0IHRoZSB1c2VyIGNhbm5vdAotcHJlc2Vu
dGx5IGFjdGl2YXRlIGl0IG9yIHRyYW5zZmVyIGZvY3VzIHRvIGl0LjwvcD4KLQotCi08aDU+PGEg
bmFtZT1jaGVja2VkPlRoZSA6Y2hlY2tlZCBwc2V1ZG8tY2xhc3M8L2E+PC9oNT4KLQotPHA+UmFk
aW8gYW5kIGNoZWNrYm94IGVsZW1lbnRzIGNhbiBiZSB0b2dnbGVkIGJ5IHRoZSB1c2VyLiBTb21l
IG1lbnUKLWl0ZW1zIGFyZSAiY2hlY2tlZCIgd2hlbiB0aGUgdXNlciBzZWxlY3RzIHRoZW0uIFdo
ZW4gc3VjaCBlbGVtZW50cyBhcmUKLXRvZ2dsZWQgIm9uIiB0aGUgPGNvZGU+OmNoZWNrZWQ8L2Nv
ZGU+IHBzZXVkby1jbGFzcyBhcHBsaWVzLiBUaGUKLTxjb2RlPjpjaGVja2VkPC9jb2RlPiBwc2V1
ZG8tY2xhc3MgaW5pdGlhbGx5IGFwcGxpZXMgdG8gc3VjaCBlbGVtZW50cwotdGhhdCBoYXZlIHRo
ZSBIVE1MNCA8Y29kZT5zZWxlY3RlZDwvY29kZT4gYW5kIDxjb2RlPmNoZWNrZWQ8L2NvZGU+Ci1h
dHRyaWJ1dGVzIGFzIGRlc2NyaWJlZCBpbiA8YQotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIv
UkVDLWh0bWw0MC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMi4xIj5TZWN0aW9uCi0xNy4yLjEg
b2YgSFRNTDQ8L2E+LCBidXQgb2YgY291cnNlIHRoZSB1c2VyIGNhbiB0b2dnbGUgIm9mZiIgc3Vj
aAotZWxlbWVudHMgaW4gd2hpY2ggY2FzZSB0aGUgPGNvZGU+OmNoZWNrZWQ8L2NvZGU+IHBzZXVk
by1jbGFzcyB3b3VsZCBubwotbG9uZ2VyIGFwcGx5LiBXaGlsZSB0aGUgPGNvZGU+OmNoZWNrZWQ8
L2NvZGU+IHBzZXVkby1jbGFzcyBpcyBkeW5hbWljCi1pbiBuYXR1cmUsIGFuZCBpcyBhbHRlcmVk
IGJ5IHVzZXIgYWN0aW9uLCBzaW5jZSBpdCBjYW4gYWxzbyBiZSBiYXNlZAotb24gdGhlIHByZXNl
bmNlIG9mIHRoZSBzZW1hbnRpYyBIVE1MNCA8Y29kZT5zZWxlY3RlZDwvY29kZT4gYW5kCi08Y29k
ZT5jaGVja2VkPC9jb2RlPiBhdHRyaWJ1dGVzLCBpdCBhcHBsaWVzIHRvIGFsbCBtZWRpYS4KLQot
Ci08aDU+PGEgbmFtZT1pbmRldGVybWluYXRlPlRoZSA6aW5kZXRlcm1pbmF0ZSBwc2V1ZG8tY2xh
c3M8L2E+PC9oNT4KLQotPGRpdiBjbGFzcz0ibm90ZSI+Ci0KLTxwPlJhZGlvIGFuZCBjaGVja2Jv
eCBlbGVtZW50cyBjYW4gYmUgdG9nZ2xlZCBieSB0aGUgdXNlciwgYnV0IGFyZQotc29tZXRpbWVz
IGluIGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUsIG5laXRoZXIgY2hlY2tlZCBub3IgdW5jaGVja2Vk
LgotVGhpcyBjYW4gYmUgZHVlIHRvIGFuIGVsZW1lbnQgYXR0cmlidXRlLCBvciBET00gbWFuaXB1
bGF0aW9uLjwvcD4KLQotPHA+QSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIHNwZWNpZmljYXRpb24g
bWF5IGludHJvZHVjZSBhbgotPGNvZGU+OmluZGV0ZXJtaW5hdGU8L2NvZGU+IHBzZXVkby1jbGFz
cyB0aGF0IGFwcGxpZXMgdG8gc3VjaCBlbGVtZW50cy4KLTwhLS1XaGlsZSB0aGUgPGNvZGU+Omlu
ZGV0ZXJtaW5hdGU8L2NvZGU+IHBzZXVkby1jbGFzcyBpcyBkeW5hbWljIGluCi1uYXR1cmUsIGFu
ZCBpcyBhbHRlcmVkIGJ5IHVzZXIgYWN0aW9uLCBzaW5jZSBpdCBjYW4gYWxzbyBiZSBiYXNlZCBv
bgotdGhlIHByZXNlbmNlIG9mIGFuIGVsZW1lbnQgYXR0cmlidXRlLCBpdCBhcHBsaWVzIHRvIGFs
bCBtZWRpYS48L3A+Ci0KLTxwPkNvbXBvbmVudHMgb2YgYSByYWRpby1ncm91cCBpbml0aWFsaXpl
ZCB3aXRoIG5vIHByZS1zZWxlY3RlZCBjaG9pY2UKLWFyZSBhbiBleGFtcGxlIG9mIDppbmRldGVy
bWluYXRlIHN0YXRlLi0tPjwvcD4KLQotPC9kaXY+Ci0KLQotPGg0PjxhIG5hbWU9c3RydWN0dXJh
bC1wc2V1ZG9zPjYuNi41LiBTdHJ1Y3R1cmFsIHBzZXVkby1jbGFzc2VzPC9hPjwvaDQ+Ci0KLTxw
PlNlbGVjdG9ycyBpbnRyb2R1Y2VzIHRoZSBjb25jZXB0IG9mIDxkZm4+c3RydWN0dXJhbAotcHNl
dWRvLWNsYXNzZXM8L2Rmbj4gdG8gcGVybWl0IHNlbGVjdGlvbiBiYXNlZCBvbiBleHRyYSBpbmZv
cm1hdGlvbiB0aGF0IGxpZXMgaW4KLXRoZSBkb2N1bWVudCB0cmVlIGJ1dCBjYW5ub3QgYmUgcmVw
cmVzZW50ZWQgYnkgb3RoZXIgc2ltcGxlIHNlbGVjdG9ycyBvcgotY29tYmluYXRvcnMuCi0KLTxw
Pk5vdGUgdGhhdCBzdGFuZGFsb25lIHBpZWNlcyBvZiBQQ0RBVEEgKHRleHQgbm9kZXMgaW4gdGhl
IERPTSkgYXJlCi1ub3QgY291bnRlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwb3NpdGlvbiBvZiBh
biBlbGVtZW50IGluIHRoZSBsaXN0IG9mCi1jaGlsZHJlbiBvZiBpdHMgcGFyZW50LiBXaGVuIGNh
bGN1bGF0aW5nIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGluCi10aGUgbGlzdCBvZiBjaGls
ZHJlbiBvZiBpdHMgcGFyZW50LCB0aGUgaW5kZXggbnVtYmVyaW5nIHN0YXJ0cyBhdCAxLgotCi0K
LTxoNT48YSBuYW1lPXJvb3QtcHNldWRvPjpyb290IHBzZXVkby1jbGFzczwvYT48L2g1PgotCi08
cD5UaGUgPGNvZGU+OnJvb3Q8L2NvZGU+IHBzZXVkby1jbGFzcyByZXByZXNlbnRzIGFuIGVsZW1l
bnQgdGhhdCBpcwotdGhlIHJvb3Qgb2YgdGhlIGRvY3VtZW50LiBJbiBIVE1MIDQsIHRoaXMgaXMg
YWx3YXlzIHRoZQotPGNvZGU+SFRNTDwvY29kZT4gZWxlbWVudC4KLQotCi08aDU+PGEgbmFtZT1u
dGgtY2hpbGQtcHNldWRvPjpudGgtY2hpbGQoKSBwc2V1ZG8tY2xhc3M8L2E+PC9oNT4KLQotPHA+
VGhlCi08Y29kZT46bnRoLWNoaWxkKDx2YXI+YTwvdmFyPjxjb2RlPm48L2NvZGU+Kzx2YXI+Yjwv
dmFyPik8L2NvZGU+Ci1wc2V1ZG8tY2xhc3Mgbm90YXRpb24gcmVwcmVzZW50cyBhbiBlbGVtZW50
IHRoYXQgaGFzCi08dmFyPmE8L3Zhcj48Y29kZT5uPC9jb2RlPis8dmFyPmI8L3Zhcj4tMSBzaWJs
aW5ncwotPHN0cm9uZz5iZWZvcmU8L3N0cm9uZz4gaXQgaW4gdGhlIGRvY3VtZW50IHRyZWUsIGZv
ciBhIGdpdmVuIHBvc2l0aXZlCi1pbnRlZ2VyIG9yIHplcm8gdmFsdWUgb2YgPGNvZGU+bjwvY29k
ZT4sIGFuZCBoYXMgYSBwYXJlbnQgZWxlbWVudC4gSW4KLW90aGVyIHdvcmRzLCB0aGlzIG1hdGNo
ZXMgdGhlIDx2YXI+YjwvdmFyPnRoIGNoaWxkIG9mIGFuIGVsZW1lbnQgYWZ0ZXIKLWFsbCB0aGUg
Y2hpbGRyZW4gaGF2ZSBiZWVuIHNwbGl0IGludG8gZ3JvdXBzIG9mIDx2YXI+YTwvdmFyPiBlbGVt
ZW50cwotZWFjaC4gRm9yIGV4YW1wbGUsIHRoaXMgYWxsb3dzIHRoZSBzZWxlY3RvcnMgdG8gYWRk
cmVzcyBldmVyeSBvdGhlcgotcm93IGluIGEgdGFibGUsIGFuZCBjb3VsZCBiZSB1c2VkIHRvIGFs
dGVybmF0ZSB0aGUgY29sb3IKLW9mIHBhcmFncmFwaCB0ZXh0IGluIGEgY3ljbGUgb2YgZm91ci4g
VGhlIDx2YXI+YTwvdmFyPiBhbmQKLTx2YXI+YjwvdmFyPiB2YWx1ZXMgbXVzdCBiZSB6ZXJvLCBu
ZWdhdGl2ZSBpbnRlZ2VycyBvciBwb3NpdGl2ZQotaW50ZWdlcnMuIFRoZSBpbmRleCBvZiB0aGUg
Zmlyc3QgY2hpbGQgb2YgYW4gZWxlbWVudCBpcyAxLgotCi08cD5JbiBhZGRpdGlvbiB0byB0aGlz
LCA8Y29kZT46bnRoLWNoaWxkKCk8L2NvZGU+IGNhbiB0YWtlCi0nPGNvZGU+b2RkPC9jb2RlPicg
YW5kICc8Y29kZT5ldmVuPC9jb2RlPicgYXMgYXJndW1lbnRzIGluc3RlYWQuCi0nPGNvZGU+b2Rk
PC9jb2RlPicgaGFzIHRoZSBzYW1lIHNpZ25pZmljYXRpb24gYXMgPGNvZGU+Mm4rMTwvY29kZT4s
Ci1hbmQgJzxjb2RlPmV2ZW48L2NvZGU+JyBoYXMgdGhlIHNhbWUgc2lnbmlmaWNhdGlvbiBhcyA8
Y29kZT4ybjwvY29kZT4uCi0KLQotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08cD5FeGFtcGxlczo8
L3A+Ci08cHJlPnRyOm50aC1jaGlsZCgybisxKSAvKiByZXByZXNlbnRzIGV2ZXJ5IG9kZCByb3cg
b2YgYW4gSFRNTCB0YWJsZSAqLwotdHI6bnRoLWNoaWxkKG9kZCkgIC8qIHNhbWUgKi8KLXRyOm50
aC1jaGlsZCgybikgICAvKiByZXByZXNlbnRzIGV2ZXJ5IGV2ZW4gcm93IG9mIGFuIEhUTUwgdGFi
bGUgKi8KLXRyOm50aC1jaGlsZChldmVuKSAvKiBzYW1lICovCi0KLS8qIEFsdGVybmF0ZSBwYXJh
Z3JhcGggY29sb3VycyBpbiBDU1MgKi8KLXA6bnRoLWNoaWxkKDRuKzEpIHsgY29sb3I6IG5hdnk7
IH0KLXA6bnRoLWNoaWxkKDRuKzIpIHsgY29sb3I6IGdyZWVuOyB9Ci1wOm50aC1jaGlsZCg0bisz
KSB7IGNvbG9yOiBtYXJvb247IH0KLXA6bnRoLWNoaWxkKDRuKzQpIHsgY29sb3I6IHB1cnBsZTsg
fTwvcHJlPgotPC9kaXY+Ci0KLTxwPldoZW4gPHZhcj5hPC92YXI+PTAsIG5vIHJlcGVhdGluZyBp
cyB1c2VkLCBzbyBmb3IgZXhhbXBsZQotPGNvZGU+Om50aC1jaGlsZCgwbis1KTwvY29kZT4gbWF0
Y2hlcyBvbmx5IHRoZSBmaWZ0aCBjaGlsZC4gV2hlbgotPHZhcj5hPC92YXI+PTAsIHRoZSA8dmFy
PmE8L3Zhcj48Y29kZT5uPC9jb2RlPiBwYXJ0IG5lZWQgbm90IGJlCi1pbmNsdWRlZCwgc28gdGhl
IHN5bnRheCBzaW1wbGlmaWVzIHRvCi08Y29kZT46bnRoLWNoaWxkKDx2YXI+YjwvdmFyPik8L2Nv
ZGU+IGFuZCB0aGUgbGFzdCBleGFtcGxlIHNpbXBsaWZpZXMKLXRvIDxjb2RlPjpudGgtY2hpbGQo
NSk8L2NvZGU+LgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLTxwPkV4YW1wbGVzOjwvcD4KLTxw
cmU+Zm9vOm50aC1jaGlsZCgwbisxKSAgIC8qIHJlcHJlc2VudHMgYW4gZWxlbWVudCBmb28sIGZp
cnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQgZWxlbWVudCAqLwotZm9vOm50aC1jaGlsZCgxKSAgICAg
IC8qIHNhbWUgKi88L3ByZT4KLTwvZGl2PgotCi08cD5XaGVuIDx2YXI+YTwvdmFyPj0xLCB0aGUg
bnVtYmVyIG1heSBiZSBvbWl0dGVkIGZyb20gdGhlIHJ1bGUuCi0KLTxkaXYgY2xhc3M9ImV4YW1w
bGUiPgotPHA+RXhhbXBsZXM6PC9wPgotPHA+VGhlIGZvbGxvd2luZyBzZWxlY3RvcnMgYXJlIHRo
ZXJlZm9yZSBlcXVpdmFsZW50OjwvcD4KLTxwcmU+YmFyOm50aC1jaGlsZCgxbiswKSAgIC8qIHJl
cHJlc2VudHMgYWxsIGJhciBlbGVtZW50cywgc3BlY2lmaWNpdHkgKDAsMSwxKSAqLwotYmFyOm50
aC1jaGlsZChuKzApICAgIC8qIHNhbWUgKi8KLWJhcjpudGgtY2hpbGQobikgICAgICAvKiBzYW1l
ICovCi1iYXIgICAgICAgICAgICAgICAgICAgLyogc2FtZSBidXQgbG93ZXIgc3BlY2lmaWNpdHkg
KDAsMCwxKSAqLzwvcHJlPgotPC9kaXY+Ci0KLTxwPklmIDx2YXI+YjwvdmFyPj0wLCB0aGVuIGV2
ZXJ5IDx2YXI+YTwvdmFyPnRoIGVsZW1lbnQgaXMgcGlja2VkLiBJbgotc3VjaCBhIGNhc2UsIHRo
ZSA8dmFyPmI8L3Zhcj4gcGFydCBtYXkgYmUgb21pdHRlZC4KLQotPGRpdiBjbGFzcz0iZXhhbXBs
ZSI+Ci08cD5FeGFtcGxlczo8L3A+Ci08cHJlPnRyOm50aC1jaGlsZCgybiswKSAvKiByZXByZXNl
bnRzIGV2ZXJ5IGV2ZW4gcm93IG9mIGFuIEhUTUwgdGFibGUgKi8KLXRyOm50aC1jaGlsZCgybikg
Lyogc2FtZSAqLzwvcHJlPgotPC9kaXY+Ci0KLTxwPklmIGJvdGggPHZhcj5hPC92YXI+IGFuZCA8
dmFyPmI8L3Zhcj4gYXJlIGVxdWFsIHRvIHplcm8sIHRoZQotcHNldWRvLWNsYXNzIHJlcHJlc2Vu
dHMgbm8gZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdHJlZS48L3A+Ci0KLTxwPlRoZSB2YWx1ZSA8
dmFyPmE8L3Zhcj4gY2FuIGJlIG5lZ2F0aXZlLCBidXQgb25seSB0aGUgcG9zaXRpdmUKLXZhbHVl
cyBvZiA8dmFyPmE8L3Zhcj48Y29kZT5uPC9jb2RlPis8dmFyPmI8L3Zhcj4sIGZvcgotPGNvZGU+
bjwvY29kZT4mZ2U7MCwgbWF5IHJlcHJlc2VudCBhbiBlbGVtZW50IGluIHRoZSBkb2N1bWVudAot
dHJlZS48L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotPHA+RXhhbXBsZTo8L3A+Ci08cHJl
Pmh0bWx8dHI6bnRoLWNoaWxkKC1uKzYpICAvKiByZXByZXNlbnRzIHRoZSA2IGZpcnN0IHJvd3Mg
b2YgWEhUTUwgdGFibGVzICovPC9wcmU+Ci08L2Rpdj4KLQotPHA+V2hlbiB0aGUgdmFsdWUgPHZh
cj5iPC92YXI+IGlzIG5lZ2F0aXZlLCB0aGUgIisiIGNoYXJhY3RlciBpbiB0aGUKLWV4cHJlc3Np
b24gbXVzdCBiZSByZW1vdmVkIChpdCBpcyBlZmZlY3RpdmVseSByZXBsYWNlZCBieSB0aGUgIi0i
Ci1jaGFyYWN0ZXIgaW5kaWNhdGluZyB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgPHZhcj5iPC92YXI+
KS48L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotPHA+RXhhbXBsZXM6PC9wPgotPHByZT46
bnRoLWNoaWxkKDEwbi0xKSAgLyogcmVwcmVzZW50cyB0aGUgOXRoLCAxOXRoLCAyOXRoLCBldGMs
IGVsZW1lbnQgKi8KLTpudGgtY2hpbGQoMTBuKzkpICAvKiBTYW1lICovCi06bnRoLWNoaWxkKDEw
bistMSkgLyogU3ludGFjdGljYWxseSBpbnZhbGlkLCBhbmQgd291bGQgYmUgaWdub3JlZCAqLzwv
cHJlPgotPC9kaXY+Ci0KLQotPGg1PjxhIG5hbWU9bnRoLWxhc3QtY2hpbGQtcHNldWRvPjpudGgt
bGFzdC1jaGlsZCgpIHBzZXVkby1jbGFzczwvYT48L2g1PgotCi08cD5UaGUgPGNvZGU+Om50aC1s
YXN0LWNoaWxkKDx2YXI+YTwvdmFyPm4rPHZhcj5iPC92YXI+KTwvY29kZT4KLXBzZXVkby1jbGFz
cyBub3RhdGlvbiByZXByZXNlbnRzIGFuIGVsZW1lbnQgdGhhdCBoYXMKLTx2YXI+YTwvdmFyPjxj
b2RlPm48L2NvZGU+Kzx2YXI+YjwvdmFyPi0xIHNpYmxpbmdzCi08c3Ryb25nPmFmdGVyPC9zdHJv
bmc+IGl0IGluIHRoZSBkb2N1bWVudCB0cmVlLCBmb3IgYSBnaXZlbiBwb3NpdGl2ZQotaW50ZWdl
ciBvciB6ZXJvIHZhbHVlIG9mIDxjb2RlPm48L2NvZGU+LCBhbmQgaGFzIGEgcGFyZW50IGVsZW1l
bnQuIFNlZQotPGNvZGU+Om50aC1jaGlsZCgpPC9jb2RlPiBwc2V1ZG8tY2xhc3MgZm9yIHRoZSBz
eW50YXggb2YgaXRzIGFyZ3VtZW50LgotSXQgYWxzbyBhY2NlcHRzIHRoZSAnPGNvZGU+ZXZlbjwv
Y29kZT4nIGFuZCAnPGNvZGU+b2RkPC9jb2RlPicgdmFsdWVzCi1hcyBhcmd1bWVudHMuCi0KLQot
PGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08cD5FeGFtcGxlczo8L3A+Ci08cHJlPnRyOm50aC1sYXN0
LWNoaWxkKC1uKzIpICAgIC8qIHJlcHJlc2VudHMgdGhlIHR3byBsYXN0IHJvd3Mgb2YgYW4gSFRN
TCB0YWJsZSAqLwotCi1mb286bnRoLWxhc3QtY2hpbGQob2RkKSAgICAvKiByZXByZXNlbnRzIGFs
bCBvZGQgZm9vIGVsZW1lbnRzIGluIHRoZWlyIHBhcmVudCBlbGVtZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnRpbmcgZnJvbSB0aGUgbGFzdCBvbmUgKi88L3ByZT4KLTwv
ZGl2PgotCi0KLTxoNT48YSBuYW1lPW50aC1vZi10eXBlLXBzZXVkbz46bnRoLW9mLXR5cGUoKSBw
c2V1ZG8tY2xhc3M8L2E+PC9oNT4KLQotPHA+VGhlIDxjb2RlPjpudGgtb2YtdHlwZSg8dmFyPmE8
L3Zhcj5uKzx2YXI+YjwvdmFyPik8L2NvZGU+Ci1wc2V1ZG8tY2xhc3Mgbm90YXRpb24gcmVwcmVz
ZW50cyBhbiBlbGVtZW50IHRoYXQgaGFzCi08dmFyPmE8L3Zhcj48Y29kZT5uPC9jb2RlPis8dmFy
PmI8L3Zhcj4tMSBzaWJsaW5ncyB3aXRoIHRoZSBzYW1lCi1lbGVtZW50IG5hbWUgPHN0cm9uZz5i
ZWZvcmU8L3N0cm9uZz4gaXQgaW4gdGhlIGRvY3VtZW50IHRyZWUsIGZvciBhCi1naXZlbiB6ZXJv
IG9yIHBvc2l0aXZlIGludGVnZXIgdmFsdWUgb2YgPGNvZGU+bjwvY29kZT4sIGFuZCBoYXMgYQot
cGFyZW50IGVsZW1lbnQuIEluIG90aGVyIHdvcmRzLCB0aGlzIG1hdGNoZXMgdGhlIDx2YXI+Yjwv
dmFyPnRoIGNoaWxkCi1vZiB0aGF0IHR5cGUgYWZ0ZXIgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGF0
IHR5cGUgaGF2ZSBiZWVuIHNwbGl0IGludG8KLWdyb3VwcyBvZiBhIGVsZW1lbnRzIGVhY2guIFNl
ZSA8Y29kZT46bnRoLWNoaWxkKCk8L2NvZGU+IHBzZXVkby1jbGFzcwotZm9yIHRoZSBzeW50YXgg
b2YgaXRzIGFyZ3VtZW50LiBJdCBhbHNvIGFjY2VwdHMgdGhlCi0nPGNvZGU+ZXZlbjwvY29kZT4n
IGFuZCAnPGNvZGU+b2RkPC9jb2RlPicgdmFsdWVzLgotCi0KLTxkaXYgY2xhc3M9ImV4YW1wbGUi
PgotPHA+Q1NTIGV4YW1wbGU6PC9wPgotPHA+VGhpcyBhbGxvd3MgYW4gYXV0aG9yIHRvIGFsdGVy
bmF0ZSB0aGUgcG9zaXRpb24gb2YgZmxvYXRlZCBpbWFnZXM6PC9wPgotPHByZT5pbWc6bnRoLW9m
LXR5cGUoMm4rMSkgeyBmbG9hdDogcmlnaHQ7IH0KLWltZzpudGgtb2YtdHlwZSgybikgeyBmbG9h
dDogbGVmdDsgfTwvcHJlPgotPC9kaXY+Ci0KLQotPGg1PjxhIG5hbWU9bnRoLWxhc3Qtb2YtdHlw
ZS1wc2V1ZG8+Om50aC1sYXN0LW9mLXR5cGUoKSBwc2V1ZG8tY2xhc3M8L2E+PC9oNT4KLQotPHA+
VGhlIDxjb2RlPjpudGgtbGFzdC1vZi10eXBlKDx2YXI+YTwvdmFyPm4rPHZhcj5iPC92YXI+KTwv
Y29kZT4KLXBzZXVkby1jbGFzcyBub3RhdGlvbiByZXByZXNlbnRzIGFuIGVsZW1lbnQgdGhhdCBo
YXMKLTx2YXI+YTwvdmFyPjxjb2RlPm48L2NvZGU+Kzx2YXI+YjwvdmFyPi0xIHNpYmxpbmdzIHdp
dGggdGhlIHNhbWUKLWVsZW1lbnQgbmFtZSA8c3Ryb25nPmFmdGVyPC9zdHJvbmc+IGl0IGluIHRo
ZSBkb2N1bWVudCB0cmVlLCBmb3IgYQotZ2l2ZW4gemVybyBvciBwb3NpdGl2ZSBpbnRlZ2VyIHZh
bHVlIG9mIDxjb2RlPm48L2NvZGU+LCBhbmQgaGFzIGEKLXBhcmVudCBlbGVtZW50LiBTZWUgPGNv
ZGU+Om50aC1jaGlsZCgpPC9jb2RlPiBwc2V1ZG8tY2xhc3MgZm9yIHRoZQotc3ludGF4IG9mIGl0
cyBhcmd1bWVudC4gSXQgYWxzbyBhY2NlcHRzIHRoZSAnPGNvZGU+ZXZlbjwvY29kZT4nIGFuZCAn
PGNvZGU+b2RkPC9jb2RlPicgdmFsdWVzLgotCi0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotIDxw
PkV4YW1wbGU6PC9wPgotIDxwPlRvIHJlcHJlc2VudCBhbGwgPGNvZGU+aDI8L2NvZGU+IGNoaWxk
cmVuIG9mIGFuIFhIVE1MCi0gPGNvZGU+Ym9keTwvY29kZT4gZXhjZXB0IHRoZSBmaXJzdCBhbmQg
bGFzdCwgb25lIGNvdWxkIHVzZSB0aGUKLSBmb2xsb3dpbmcgc2VsZWN0b3I6PC9wPgotIDxwcmU+
Ym9keSAmZ3Q7IGgyOm50aC1vZi10eXBlKG4rMik6bnRoLWxhc3Qtb2YtdHlwZShuKzIpPC9wcmU+
Ci0gPHA+SW4gdGhpcyBjYXNlLCBvbmUgY291bGQgYWxzbyB1c2UgPGNvZGU+Om5vdCgpPC9jb2Rl
PiwgYWx0aG91Z2ggdGhlCi0gc2VsZWN0b3IgZW5kcyB1cCBiZWluZyBqdXN0IGFzIGxvbmc6PC9w
PgotIDxwcmU+Ym9keSAmZ3Q7IGgyOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6bm90KDpsYXN0LW9mLXR5
cGUpPC9wcmU+Ci08L2Rpdj4KLQotCi08aDU+PGEgbmFtZT1maXJzdC1jaGlsZC1wc2V1ZG8+OmZp
cnN0LWNoaWxkIHBzZXVkby1jbGFzczwvYT48L2g1PgotCi08cD5TYW1lIGFzIDxjb2RlPjpudGgt
Y2hpbGQoMSk8L2NvZGU+LiBUaGUgPGNvZGU+OmZpcnN0LWNoaWxkPC9jb2RlPiBwc2V1ZG8tY2xh
c3MKLXJlcHJlc2VudHMgYW4gZWxlbWVudCB0aGF0IGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBzb21l
IG90aGVyIGVsZW1lbnQuCi0KLQotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci0gIDxwPkV4YW1wbGVz
OjwvcD4KLSAgPHA+VGhlIGZvbGxvd2luZyBzZWxlY3RvciByZXByZXNlbnRzIGEgPGNvZGU+cDwv
Y29kZT4gZWxlbWVudCB0aGF0IGlzCi0gIHRoZSBmaXJzdCBjaGlsZCBvZiBhIDxjb2RlPmRpdjwv
Y29kZT4gZWxlbWVudDo8L3A+Ci0gIDxwcmU+ZGl2ICZndDsgcDpmaXJzdC1jaGlsZDwvcHJlPgot
ICA8cD5UaGlzIHNlbGVjdG9yIGNhbiByZXByZXNlbnQgdGhlIDxjb2RlPnA8L2NvZGU+IGluc2lk
ZSB0aGUKLSAgPGNvZGU+ZGl2PC9jb2RlPiBvZiB0aGUgZm9sbG93aW5nIGZyYWdtZW50OjwvcD4K
LSAgPHByZT4mbHQ7cCZndDsgVGhlIGxhc3QgUCBiZWZvcmUgdGhlIG5vdGUuJmx0Oy9wJmd0Owot
Jmx0O2RpdiBjbGFzcz0ibm90ZSImZ3Q7Ci0gICAmbHQ7cCZndDsgVGhlIGZpcnN0IFAgaW5zaWRl
IHRoZSBub3RlLiZsdDsvcCZndDsKLSZsdDsvZGl2Jmd0OzwvcHJlPmJ1dCBjYW5ub3QgcmVwcmVz
ZW50IHRoZSBzZWNvbmQgPGNvZGU+cDwvY29kZT4gaW4gdGhlIGZvbGxvd2luZwotZnJhZ21lbnQ6
Ci0gIDxwcmU+Jmx0O3AmZ3Q7IFRoZSBsYXN0IFAgYmVmb3JlIHRoZSBub3RlLiZsdDsvcCZndDsK
LSZsdDtkaXYgY2xhc3M9Im5vdGUiJmd0OwotICAgJmx0O2gyJmd0OyBOb3RlICZsdDsvaDImZ3Q7
Ci0gICAmbHQ7cCZndDsgVGhlIGZpcnN0IFAgaW5zaWRlIHRoZSBub3RlLiZsdDsvcCZndDsKLSZs
dDsvZGl2Jmd0OzwvcHJlPgotICA8cD5UaGUgZm9sbG93aW5nIHR3byBzZWxlY3RvcnMgYXJlIHVz
dWFsbHkgZXF1aXZhbGVudDo8L3A+Ci0gIDxwcmU+KiAmZ3Q7IGE6Zmlyc3QtY2hpbGQgLyogYSBp
cyBmaXJzdCBjaGlsZCBvZiBhbnkgZWxlbWVudCAqLwotYTpmaXJzdC1jaGlsZCAvKiBTYW1lIChh
c3N1bWluZyBhIGlzIG5vdCB0aGUgcm9vdCBlbGVtZW50KSAqLzwvcHJlPgotPC9kaXY+Ci0KLTxo
NT48YSBuYW1lPWxhc3QtY2hpbGQtcHNldWRvPjpsYXN0LWNoaWxkIHBzZXVkby1jbGFzczwvYT48
L2g1PgotCi08cD5TYW1lIGFzIDxjb2RlPjpudGgtbGFzdC1jaGlsZCgxKTwvY29kZT4uIFRoZSA8
Y29kZT46bGFzdC1jaGlsZDwvY29kZT4gcHNldWRvLWNsYXNzCi1yZXByZXNlbnRzIGFuIGVsZW1l
bnQgdGhhdCBpcyB0aGUgbGFzdCBjaGlsZCBvZiBzb21lIG90aGVyIGVsZW1lbnQuCi0KLTxkaXYg
Y2xhc3M9ImV4YW1wbGUiPgotIDxwPkV4YW1wbGU6PC9wPgotIDxwPlRoZSBmb2xsb3dpbmcgc2Vs
ZWN0b3IgcmVwcmVzZW50cyBhIGxpc3QgaXRlbSA8Y29kZT5saTwvY29kZT4gdGhhdAotIGlzIHRo
ZSBsYXN0IGNoaWxkIG9mIGFuIG9yZGVyZWQgbGlzdCA8Y29kZT5vbDwvY29kZT4uCi0gPHByZT5v
bCAmZ3Q7IGxpOmxhc3QtY2hpbGQ8L3ByZT4KLTwvZGl2PgotCi08aDU+PGEgbmFtZT1maXJzdC1v
Zi10eXBlLXBzZXVkbz46Zmlyc3Qtb2YtdHlwZSBwc2V1ZG8tY2xhc3M8L2E+PC9oNT4KLQotPHA+
U2FtZSBhcyA8Y29kZT46bnRoLW9mLXR5cGUoMSk8L2NvZGU+LiBUaGUgPGNvZGU+OmZpcnN0LW9m
LXR5cGU8L2NvZGU+IHBzZXVkby1jbGFzcwotcmVwcmVzZW50cyBhbiBlbGVtZW50IHRoYXQgaXMg
dGhlIGZpcnN0IHNpYmxpbmcgb2YgaXRzIHR5cGUgaW4gdGhlIGxpc3Qgb2YKLWNoaWxkcmVuIG9m
IGl0cyBwYXJlbnQgZWxlbWVudC4KLQotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08cD5FeGFtcGxl
OjwvcD4KLTxwPlRoZSBmb2xsb3dpbmcgc2VsZWN0b3IgcmVwcmVzZW50cyBhIGRlZmluaXRpb24g
dGl0bGUKLTxjb2RlPmR0PC9jb2RlPiBpbnNpZGUgYSBkZWZpbml0aW9uIGxpc3QgPGNvZGU+ZGw8
L2NvZGU+LCB0aGlzCi08Y29kZT5kdDwvY29kZT4gYmVpbmcgdGhlIGZpcnN0IG9mIGl0cyB0eXBl
IGluIHRoZSBsaXN0IG9mIGNoaWxkcmVuIG9mCi1pdHMgcGFyZW50IGVsZW1lbnQuPC9wPgotPHBy
ZT5kbCBkdDpmaXJzdC1vZi10eXBlPC9wcmU+Ci08cD5JdCBpcyBhIHZhbGlkIGRlc2NyaXB0aW9u
IGZvciB0aGUgZmlyc3QgdHdvIDxjb2RlPmR0PC9jb2RlPgotZWxlbWVudHMgaW4gdGhlIGZvbGxv
d2luZyBleGFtcGxlIGJ1dCBub3QgZm9yIHRoZSB0aGlyZCBvbmU6PC9wPgotPHByZT4mbHQ7ZGwm
Z3Q7Ci0gJmx0O2R0Jmd0O2dpZ29nbmUmbHQ7L2R0Jmd0OwotICZsdDtkZCZndDsKLSAgJmx0O2Rs
Jmd0OwotICAgJmx0O2R0Jmd0O2Z1cyZlYWN1dGU7ZSZsdDsvZHQmZ3Q7Ci0gICAmbHQ7ZGQmZ3Q7
bXVsdGlzdGFnZSByb2NrZXQmbHQ7L2RkJmd0OwotICAgJmx0O2R0Jmd0O3RhYmxlJmx0Oy9kdCZn
dDsKLSAgICZsdDtkZCZndDtuZXN0IG9mIHRhYmxlcyZsdDsvZGQmZ3Q7Ci0gICZsdDsvZGwmZ3Q7
Ci0gJmx0Oy9kZCZndDsKLSZsdDsvZGwmZ3Q7PC9wcmU+Ci08L2Rpdj4KLQotPGg1PjxhIG5hbWU9
bGFzdC1vZi10eXBlLXBzZXVkbz46bGFzdC1vZi10eXBlIHBzZXVkby1jbGFzczwvYT48L2g1Pgot
Ci08cD5TYW1lIGFzIDxjb2RlPjpudGgtbGFzdC1vZi10eXBlKDEpPC9jb2RlPi4gVGhlCi08Y29k
ZT46bGFzdC1vZi10eXBlPC9jb2RlPiBwc2V1ZG8tY2xhc3MgcmVwcmVzZW50cyBhbiBlbGVtZW50
IHRoYXQgaXMKLXRoZSBsYXN0IHNpYmxpbmcgb2YgaXRzIHR5cGUgaW4gdGhlIGxpc3Qgb2YgY2hp
bGRyZW4gb2YgaXRzIHBhcmVudAotZWxlbWVudC48L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUi
PgotIDxwPkV4YW1wbGU6PC9wPgotIDxwPlRoZSBmb2xsb3dpbmcgc2VsZWN0b3IgcmVwcmVzZW50
cyB0aGUgbGFzdCBkYXRhIGNlbGwKLSA8Y29kZT50ZDwvY29kZT4gb2YgYSB0YWJsZSByb3cuPC9w
PgotIDxwcmU+dHIgJmd0OyB0ZDpsYXN0LW9mLXR5cGU8L3ByZT4KLTwvZGl2PgotCi08aDU+PGEg
bmFtZT1vbmx5LWNoaWxkLXBzZXVkbz46b25seS1jaGlsZCBwc2V1ZG8tY2xhc3M8L2E+PC9oNT4K
LQotPHA+UmVwcmVzZW50cyBhbiBlbGVtZW50IHRoYXQgaGFzIGEgcGFyZW50IGVsZW1lbnQgYW5k
IHdob3NlIHBhcmVudAotZWxlbWVudCBoYXMgbm8gb3RoZXIgZWxlbWVudCBjaGlsZHJlbi4gU2Ft
ZSBhcwotPGNvZGU+OmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQ8L2NvZGU+IG9yCi08Y29kZT46bnRo
LWNoaWxkKDEpOm50aC1sYXN0LWNoaWxkKDEpPC9jb2RlPiwgYnV0IHdpdGggYSBsb3dlcgotc3Bl
Y2lmaWNpdHkuPC9wPgotCi08aDU+PGEgbmFtZT1vbmx5LW9mLXR5cGUtcHNldWRvPjpvbmx5LW9m
LXR5cGUgcHNldWRvLWNsYXNzPC9hPjwvaDU+Ci0KLTxwPlJlcHJlc2VudHMgYW4gZWxlbWVudCB0
aGF0IGhhcyBhIHBhcmVudCBlbGVtZW50IGFuZCB3aG9zZSBwYXJlbnQKLWVsZW1lbnQgaGFzIG5v
IG90aGVyIGVsZW1lbnQgY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBlbGVtZW50IG5hbWUuIFNhbWUK
LWFzIDxjb2RlPjpmaXJzdC1vZi10eXBlOmxhc3Qtb2YtdHlwZTwvY29kZT4gb3IKLTxjb2RlPjpu
dGgtb2YtdHlwZSgxKTpudGgtbGFzdC1vZi10eXBlKDEpPC9jb2RlPiwgYnV0IHdpdGggYSBsb3dl
cgotc3BlY2lmaWNpdHkuPC9wPgotCi0KLTxoNT48YSBuYW1lPWVtcHR5LXBzZXVkbz48L2E+OmVt
cHR5IHBzZXVkby1jbGFzczwvaDU+Ci0KLTxwPlRoZSA8Y29kZT46ZW1wdHk8L2NvZGU+IHBzZXVk
by1jbGFzcyByZXByZXNlbnRzIGFuIGVsZW1lbnQgdGhhdCBoYXMKLW5vIGNoaWxkcmVuIGF0IGFs
bC4gSW4gdGVybXMgb2YgdGhlIERPTSwgb25seSBlbGVtZW50IG5vZGVzIGFuZCB0ZXh0Ci1ub2Rl
cyAoaW5jbHVkaW5nIENEQVRBIG5vZGVzIGFuZCBlbnRpdHkgcmVmZXJlbmNlcykgd2hvc2UgZGF0
YSBoYXMgYQotbm9uLXplcm8gbGVuZ3RoIG11c3QgYmUgY29uc2lkZXJlZCBhcyBhZmZlY3Rpbmcg
ZW1wdGluZXNzOyBjb21tZW50cywKLVBJcywgYW5kIG90aGVyIG5vZGVzIG11c3Qgbm90IGFmZmVj
dCB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgY29uc2lkZXJlZAotZW1wdHkgb3Igbm90LjwvcD4KLQot
PGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci0gPHA+RXhhbXBsZXM6PC9wPgotIDxwPjxjb2RlPnA6ZW1w
dHk8L2NvZGU+IGlzIGEgdmFsaWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZvbGxvd2luZyBmcmFn
bWVudDo8L3A+Ci0gPHByZT4mbHQ7cCZndDsmbHQ7L3AmZ3Q7PC9wcmU+Ci0gPHA+PGNvZGU+Zm9v
OmVtcHR5PC9jb2RlPiBpcyBub3QgYSB2YWxpZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlCi0gZm9s
bG93aW5nIGZyYWdtZW50czo8L3A+Ci0gPHByZT4mbHQ7Zm9vJmd0O2JhciZsdDsvZm9vJmd0Ozwv
cHJlPgotIDxwcmU+Jmx0O2ZvbyZndDsmbHQ7YmFyJmd0O2JsYSZsdDsvYmFyJmd0OyZsdDsvZm9v
Jmd0OzwvcHJlPgotIDxwcmU+Jmx0O2ZvbyZndDt0aGlzIGlzIG5vdCAmbHQ7YmFyJmd0OzplbXB0
eSZsdDsvYmFyJmd0OyZsdDsvZm9vJmd0OzwvcHJlPgotPC9kaXY+Ci0KLTxoND48YSBuYW1lPWNv
bnRlbnQtc2VsZWN0b3JzPjYuNi42LiBCbGFuazwvYT48L2g0PiA8IS0tIEl0J3MgdGhlIFJldHVy
biBvZiBBcHBlbmRpeCBIISEhIFJ1biBhd2F5ISAtLT4KLQotPHA+VGhpcyBzZWN0aW9uIGludGVu
dGlvbmFsbHkgbGVmdCBibGFuay48L3A+Ci08IS0tICh1c2VkIHRvIGJlIDpjb250YWlucygpKSAt
LT4KLQotPGg0PjxhIG5hbWU9bmVnYXRpb24+PC9hPjYuNi43LiBUaGUgbmVnYXRpb24gcHNldWRv
LWNsYXNzPC9oND4KLQotPHA+VGhlIG5lZ2F0aW9uIHBzZXVkby1jbGFzcywgPGNvZGU+Om5vdCg8
dmFyPlg8L3Zhcj4pPC9jb2RlPiwgaXMgYQotZnVuY3Rpb25hbCBub3RhdGlvbiB0YWtpbmcgYSA8
YSBocmVmPSIjc2ltcGxlLXNlbGVjdG9ycy1kZm4iPnNpbXBsZQotc2VsZWN0b3I8L2E+IChleGNs
dWRpbmcgdGhlIG5lZ2F0aW9uIHBzZXVkby1jbGFzcyBpdHNlbGYgYW5kCi1wc2V1ZG8tZWxlbWVu
dHMpIGFzIGFuIGFyZ3VtZW50LiBJdCByZXByZXNlbnRzIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QK
LXJlcHJlc2VudGVkIGJ5IHRoZSBhcmd1bWVudC4KLQotPCEtLSBwc2V1ZG8tZWxlbWVudHMgYXJl
IG5vdCBzaW1wbGUgc2VsZWN0b3JzLCBzbyB0aGUgYWJvdmUgcGFyYWdyYXBoCi1tYXkgYmUgYSBi
aXQgY29uZnVzaW5nIC0tPgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLSAgPHA+RXhhbXBsZXM6
PC9wPgotICA8cD5UaGUgZm9sbG93aW5nIENTUyBzZWxlY3RvciBtYXRjaGVzIGFsbCA8Y29kZT5i
dXR0b248L2NvZGU+Ci0gIGVsZW1lbnRzIGluIGFuIEhUTUwgZG9jdW1lbnQgdGhhdCBhcmUgbm90
IGRpc2FibGVkLjwvcD4KLSAgPHByZT5idXR0b246bm90KFtESVNBQkxFRF0pPC9wcmU+Ci0gIDxw
PlRoZSBmb2xsb3dpbmcgc2VsZWN0b3IgcmVwcmVzZW50cyBhbGwgYnV0IDxjb2RlPkZPTzwvY29k
ZT4KLSAgZWxlbWVudHMuPC9wPgotICA8cHJlPio6bm90KEZPTyk8L3ByZT4KLSAgPHA+VGhlIGZv
bGxvd2luZyBncm91cCBvZiBzZWxlY3RvcnMgcmVwcmVzZW50cyBhbGwgSFRNTCBlbGVtZW50cwot
ICBleGNlcHQgbGlua3MuPC9wPgotICA8cHJlPmh0bWx8Kjpub3QoOmxpbmspOm5vdCg6dmlzaXRl
ZCk8L3ByZT4KLTwvZGl2PgotCi08cD5EZWZhdWx0IG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgZG8g
bm90IGFmZmVjdCB0aGUgYXJndW1lbnQgb2YgdGhlCi1uZWdhdGlvbiBwc2V1ZG8tY2xhc3MgdW5s
ZXNzIHRoZSBhcmd1bWVudCBpcyBhIHVuaXZlcnNhbCBzZWxlY3RvciBvciBhCi10eXBlIHNlbGVj
dG9yLjwvcD4KLQotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci0gIDxwPkV4YW1wbGVzOjwvcD4KLSAg
PHA+QXNzdW1pbmcgdGhhdCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgaXMgYm91bmQgdG8KLSAgImh0
dHA6Ly9leGFtcGxlLmNvbS8iLCB0aGUgZm9sbG93aW5nIHNlbGVjdG9yIHJlcHJlc2VudHMgYWxs
Ci0gIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBpbiB0aGF0IG5hbWVzcGFjZTo8L3A+Ci0gIDxwcmU+
KnwqOm5vdCgqKTwvcHJlPgotICA8cD5UaGUgZm9sbG93aW5nIENTUyBzZWxlY3RvciBtYXRjaGVz
IGFueSBlbGVtZW50IGJlaW5nIGhvdmVyZWQsCi0gIHJlZ2FyZGxlc3Mgb2YgaXRzIG5hbWVzcGFj
ZS4gSW4gcGFydGljdWxhciwgaXQgaXMgbm90IGxpbWl0ZWQgdG8KLSAgb25seSBtYXRjaGluZyBl
bGVtZW50cyBpbiB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgdGhhdCBhcmUgbm90IGJlaW5nCi0gIGhv
dmVyZWQsIGFuZCBlbGVtZW50cyBub3QgaW4gdGhlIGRlZmF1bHQgbmFtZXNwYWNlIGRvbid0IG1h
dGNoIHRoZQotICBydWxlIHdoZW4gdGhleSA8ZW0+YXJlPC9lbT4gYmVpbmcgaG92ZXJlZC48L3A+
Ci0gIDxwcmU+KnwqOm5vdCg6aG92ZXIpPC9wcmU+Ci08L2Rpdj4KLQotPHAgY2xhc3M9Im5vdGUi
PjxzdHJvbmc+Tm90ZTwvc3Ryb25nPjogdGhlIDpub3QoKSBwc2V1ZG8gYWxsb3dzCi11c2VsZXNz
IHNlbGVjdG9ycyB0byBiZSB3cml0dGVuLiAgRm9yIGluc3RhbmNlIDxjb2RlPjpub3QoKnwqKTwv
Y29kZT4sCi13aGljaCByZXByZXNlbnRzIG5vIGVsZW1lbnQgYXQgYWxsLCBvciA8Y29kZT5mb286
bm90KGJhcik8L2NvZGU+LAotd2hpY2ggaXMgZXF1aXZhbGVudCB0byA8Y29kZT5mb288L2NvZGU+
IGJ1dCB3aXRoIGEgaGlnaGVyCi1zcGVjaWZpY2l0eS48L3A+Ci0KLTxoMz48YSBuYW1lPXBzZXVk
by1lbGVtZW50cz43LiBQc2V1ZG8tZWxlbWVudHM8L2E+PC9oMz4KLQotPHA+UHNldWRvLWVsZW1l
bnRzIGNyZWF0ZSBhYnN0cmFjdGlvbnMgYWJvdXQgdGhlIGRvY3VtZW50IHRyZWUgYmV5b25kCi10
aG9zZSBzcGVjaWZpZWQgYnkgdGhlIGRvY3VtZW50IGxhbmd1YWdlLiBGb3IgaW5zdGFuY2UsIGRv
Y3VtZW50Ci1sYW5ndWFnZXMgZG8gbm90IG9mZmVyIG1lY2hhbmlzbXMgdG8gYWNjZXNzIHRoZSBm
aXJzdCBsZXR0ZXIgb3IgZmlyc3QKLWxpbmUgb2YgYW4gZWxlbWVudCdzIGNvbnRlbnQuIFBzZXVk
by1lbGVtZW50cyBhbGxvdyBkZXNpZ25lcnMgdG8gcmVmZXIKLXRvIHRoaXMgb3RoZXJ3aXNlIGlu
YWNjZXNzaWJsZSBpbmZvcm1hdGlvbi4gUHNldWRvLWVsZW1lbnRzIG1heSBhbHNvCi1wcm92aWRl
IGRlc2lnbmVycyBhIHdheSB0byByZWZlciB0byBjb250ZW50IHRoYXQgZG9lcyBub3QgZXhpc3Qg
aW4gdGhlCi1zb3VyY2UgZG9jdW1lbnQgKGUuZy4sIHRoZSA8Y29kZT46OmJlZm9yZTwvY29kZT4g
YW5kCi08Y29kZT46OmFmdGVyPC9jb2RlPiBwc2V1ZG8tZWxlbWVudHMgZ2l2ZSBhY2Nlc3MgdG8g
Z2VuZXJhdGVkCi1jb250ZW50KS48L3A+Ci0KLTxwPkEgcHNldWRvLWVsZW1lbnQgaXMgbWFkZSBv
ZiB0d28gY29sb25zICg8Y29kZT46OjwvY29kZT4pIGZvbGxvd2VkCi1ieSB0aGUgbmFtZSBvZiB0
aGUgcHNldWRvLWVsZW1lbnQuPC9wPgotCi08cD5UaGlzIDxjb2RlPjo6PC9jb2RlPiBub3RhdGlv
biBpcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjdXJyZW50IGRvY3VtZW50Ci1pbiBvcmRlciB0byBlc3Rh
Ymxpc2ggYSBkaXNjcmltaW5hdGlvbiBiZXR3ZWVuIHBzZXVkby1jbGFzc2VzIGFuZAotcHNldWRv
LWVsZW1lbnRzLiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBzdHlsZSBzaGVldHMs
IHVzZXIKLWFnZW50cyBtdXN0IGFsc28gYWNjZXB0IHRoZSBwcmV2aW91cyBvbmUtY29sb24gbm90
YXRpb24gZm9yCi1wc2V1ZG8tZWxlbWVudHMgaW50cm9kdWNlZCBpbiBDU1MgbGV2ZWxzIDEgYW5k
IDIgKG5hbWVseSwKLTxjb2RlPjpmaXJzdC1saW5lPC9jb2RlPiwgPGNvZGU+OmZpcnN0LWxldHRl
cjwvY29kZT4sCi08Y29kZT46YmVmb3JlPC9jb2RlPiBhbmQgPGNvZGU+OmFmdGVyPC9jb2RlPiku
IFRoaXMgY29tcGF0aWJpbGl0eSBpcwotbm90IGFsbG93ZWQgZm9yIHRoZSBuZXcgcHNldWRvLWVs
ZW1lbnRzIGludHJvZHVjZWQgaW4gQ1NTIGxldmVsIDMuPC9wPgotCi08cD5Pbmx5IG9uZSBwc2V1
ZG8tZWxlbWVudCBtYXkgYXBwZWFyIHBlciBzZWxlY3RvciwgYW5kIGlmIHByZXNlbnQgaXQKLW11
c3QgYXBwZWFyIGFmdGVyIHRoZSBzZXF1ZW5jZSBvZiBzaW1wbGUgc2VsZWN0b3JzIHRoYXQgcmVw
cmVzZW50cyB0aGUKLTxhIGhyZWY9IiNzdWJqZWN0Ij5zdWJqZWN0czwvYT4gb2YgdGhlIHNlbGVj
dG9yLiA8c3BhbiBjbGFzcz0ibm90ZSI+QQotZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBzcGVjaWZp
Y2F0aW9uIG1heSBhbGxvdyBtdWx0aXBsZQotcGVzdWRvLWVsZW1lbnRzIHBlciBzZWxlY3Rvci48
L3NwYW4+PC9wPgotCi08aDQ+PGEgbmFtZT1maXJzdC1saW5lPjcuMS4gVGhlIDo6Zmlyc3QtbGlu
ZSBwc2V1ZG8tZWxlbWVudDwvYT48L2g0PgotCi08cD5UaGUgPGNvZGU+OjpmaXJzdC1saW5lPC9j
b2RlPiBwc2V1ZG8tZWxlbWVudCBkZXNjcmliZXMgdGhlIGNvbnRlbnRzCi1vZiB0aGUgZmlyc3Qg
Zm9ybWF0dGVkIGxpbmUgb2YgYW4gZWxlbWVudC4KLQotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08
cD5DU1MgZXhhbXBsZTo8L3A+Ci08cHJlPnA6OmZpcnN0LWxpbmUgeyB0ZXh0LXRyYW5zZm9ybTog
dXBwZXJjYXNlIH08L3ByZT4KLTxwPlRoZSBhYm92ZSBydWxlIG1lYW5zICJjaGFuZ2UgdGhlIGxl
dHRlcnMgb2YgdGhlIGZpcnN0IGxpbmUgb2YgZXZlcnkKLXBhcmFncmFwaCB0byB1cHBlcmNhc2Ui
LjwvcD4KLTwvZGl2PgotCi08cD5UaGUgc2VsZWN0b3IgPGNvZGU+cDo6Zmlyc3QtbGluZTwvY29k
ZT4gZG9lcyBub3QgbWF0Y2ggYW55IHJlYWwKLUhUTUwgZWxlbWVudC4gSXQgZG9lcyBtYXRjaCBh
IHBzZXVkby1lbGVtZW50IHRoYXQgY29uZm9ybWluZyB1c2VyCi1hZ2VudHMgd2lsbCBpbnNlcnQg
YXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBwYXJhZ3JhcGguPC9wPgotCi08cD5Ob3RlIHRoYXQg
dGhlIGxlbmd0aCBvZiB0aGUgZmlyc3QgbGluZSBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mCi1mYWN0
b3JzLCBpbmNsdWRpbmcgdGhlIHdpZHRoIG9mIHRoZSBwYWdlLCB0aGUgZm9udCBzaXplLCBldGMu
ICBUaHVzLAotYW4gb3JkaW5hcnkgSFRNTCBwYXJhZ3JhcGggc3VjaCBhczo8L3A+Ci0KLTxwcmU+
Ci0mbHQ7UCZndDtUaGlzIGlzIGEgc29tZXdoYXQgbG9uZyBIVE1MCi1wYXJhZ3JhcGggdGhhdCB3
aWxsIGJlIGJyb2tlbiBpbnRvIHNldmVyYWwKLWxpbmVzLiBUaGUgZmlyc3QgbGluZSB3aWxsIGJl
IGlkZW50aWZpZWQKLWJ5IGEgZmljdGlvbmFsIHRhZyBzZXF1ZW5jZS4gVGhlIG90aGVyIGxpbmVz
Ci13aWxsIGJlIHRyZWF0ZWQgYXMgb3JkaW5hcnkgbGluZXMgaW4gdGhlCi1wYXJhZ3JhcGguJmx0
Oy9QJmd0OwotPC9wcmU+Ci0KLTxwPnRoZSBsaW5lcyBvZiB3aGljaCBoYXBwZW4gdG8gYmUgYnJv
a2VuIGFzIGZvbGxvd3M6Ci0KLTxwcmU+Ci1USElTIElTIEEgU09NRVdIQVQgTE9ORyBIVE1MIFBB
UkFHUkFQSCBUSEFUCi13aWxsIGJlIGJyb2tlbiBpbnRvIHNldmVyYWwgbGluZXMuIFRoZSBmaXJz
dAotbGluZSB3aWxsIGJlIGlkZW50aWZpZWQgYnkgYSBmaWN0aW9uYWwgdGFnCi1zZXF1ZW5jZS4g
VGhlIG90aGVyIGxpbmVzIHdpbGwgYmUgdHJlYXRlZCBhcwotb3JkaW5hcnkgbGluZXMgaW4gdGhl
IHBhcmFncmFwaC4KLTwvcHJlPgotCi08cD5UaGlzIHBhcmFncmFwaCBtaWdodCBiZSAicmV3cml0
dGVuIiBieSB1c2VyIGFnZW50cyB0byBpbmNsdWRlIHRoZQotPGVtPmZpY3Rpb25hbCB0YWcgc2Vx
dWVuY2U8L2VtPiBmb3IgPGNvZGU+OjpmaXJzdC1saW5lPC9jb2RlPi4gVGhpcwotZmljdGlvbmFs
IHRhZyBzZXF1ZW5jZSBoZWxwcyB0byBzaG93IGhvdyBwcm9wZXJ0aWVzIGFyZSBpbmhlcml0ZWQu
PC9wPgotCi08cHJlPgotJmx0O1AmZ3Q7PGI+Jmx0O1A6OmZpcnN0LWxpbmUmZ3Q7PC9iPiBUaGlz
IGlzIGEgc29tZXdoYXQgbG9uZyBIVE1MCi1wYXJhZ3JhcGggdGhhdCA8Yj4mbHQ7L1A6OmZpcnN0
LWxpbmUmZ3Q7PC9iPiB3aWxsIGJlIGJyb2tlbiBpbnRvIHNldmVyYWwKLWxpbmVzLiBUaGUgZmly
c3QgbGluZSB3aWxsIGJlIGlkZW50aWZpZWQKLWJ5IGEgZmljdGlvbmFsIHRhZyBzZXF1ZW5jZS4g
VGhlIG90aGVyIGxpbmVzCi13aWxsIGJlIHRyZWF0ZWQgYXMgb3JkaW5hcnkgbGluZXMgaW4gdGhl
Ci1wYXJhZ3JhcGguJmx0Oy9QJmd0OwotPC9wcmU+Ci0KLTxwPklmIGEgcHNldWRvLWVsZW1lbnQg
YnJlYWtzIHVwIGEgcmVhbCBlbGVtZW50LCB0aGUgZGVzaXJlZCBlZmZlY3QKLWNhbiBvZnRlbiBi
ZSBkZXNjcmliZWQgYnkgYSBmaWN0aW9uYWwgdGFnIHNlcXVlbmNlIHRoYXQgY2xvc2VzIGFuZAot
dGhlbiByZS1vcGVucyB0aGUgZWxlbWVudC4gVGh1cywgaWYgd2UgbWFyayB1cCB0aGUgcHJldmlv
dXMgcGFyYWdyYXBoCi13aXRoIGEgPGNvZGU+c3BhbjwvY29kZT4gZWxlbWVudDo8L3A+Ci0KLTxw
cmU+Ci0mbHQ7UCZndDs8Yj4mbHQ7U1BBTiBjbGFzcz0idGVzdCImZ3Q7PC9iPiBUaGlzIGlzIGEg
c29tZXdoYXQgbG9uZyBIVE1MCi1wYXJhZ3JhcGggdGhhdCB3aWxsIGJlIGJyb2tlbiBpbnRvIHNl
dmVyYWwKLWxpbmVzLjxiPiZsdDsvU1BBTiZndDs8L2I+IFRoZSBmaXJzdCBsaW5lIHdpbGwgYmUg
aWRlbnRpZmllZAotYnkgYSBmaWN0aW9uYWwgdGFnIHNlcXVlbmNlLiBUaGUgb3RoZXIgbGluZXMK
LXdpbGwgYmUgdHJlYXRlZCBhcyBvcmRpbmFyeSBsaW5lcyBpbiB0aGUKLXBhcmFncmFwaC4mbHQ7
L1AmZ3Q7Ci08L3ByZT4KLQotPHA+dGhlIHVzZXIgYWdlbnQgY291bGQgc2ltdWxhdGUgc3RhcnQg
YW5kIGVuZCB0YWdzIGZvcgotPGNvZGU+c3BhbjwvY29kZT4gd2hlbiBpbnNlcnRpbmcgdGhlIGZp
Y3Rpb25hbCB0YWcgc2VxdWVuY2UgZm9yCi08Y29kZT46OmZpcnN0LWxpbmU8L2NvZGU+LgotCi08
cHJlPgotJmx0O1AmZ3Q7Jmx0O1A6OmZpcnN0LWxpbmUmZ3Q7PGI+Jmx0O1NQQU4gY2xhc3M9InRl
c3QiJmd0OzwvYj4gVGhpcyBpcyBhCi1zb21ld2hhdCBsb25nIEhUTUwKLXBhcmFncmFwaCB0aGF0
IHdpbGwgPGI+Jmx0Oy9TUEFOJmd0OzwvYj4mbHQ7L1A6OmZpcnN0LWxpbmUmZ3Q7PGI+Jmx0O1NQ
QU4gY2xhc3M9InRlc3QiJmd0OzwvYj4gYmUKLWJyb2tlbiBpbnRvIHNldmVyYWwKLWxpbmVzLjxi
PiZsdDsvU1BBTiZndDs8L2I+IFRoZSBmaXJzdCBsaW5lIHdpbGwgYmUgaWRlbnRpZmllZAotYnkg
YSBmaWN0aW9uYWwgdGFnIHNlcXVlbmNlLiBUaGUgb3RoZXIgbGluZXMKLXdpbGwgYmUgdHJlYXRl
ZCBhcyBvcmRpbmFyeSBsaW5lcyBpbiB0aGUKLXBhcmFncmFwaC4mbHQ7L1AmZ3Q7Ci08L3ByZT4K
LQotPHA+SW4gQ1NTLCB0aGUgPGNvZGU+OjpmaXJzdC1saW5lPC9jb2RlPiBwc2V1ZG8tZWxlbWVu
dCBjYW4gb25seSBiZQotYXR0YWNoZWQgdG8gYSBibG9jay1sZXZlbCBlbGVtZW50LCBhbiBpbmxp
bmUtYmxvY2ssIGEgdGFibGUtY2FwdGlvbiwKLW9yIGEgdGFibGUtY2VsbC48L3A+Ci0KLTxwPjxh
IG5hbWU9ImZpcnN0LWZvcm1hdHRlZC1saW5lIj48L2E+VGhlICJmaXJzdCBmb3JtYXR0ZWQgbGlu
ZSIgb2YgYW4KLWVsZW1lbnQgbWF5IG9jY3VyIGluc2lkZSBhCi1ibG9jay1sZXZlbCBkZXNjZW5k
YW50IGluIHRoZSBzYW1lIGZsb3cgKGkuZS4sIGEgYmxvY2stbGV2ZWwKLWRlc2NlbmRhbnQgdGhh
dCBpcyBub3QgcG9zaXRpb25lZCBhbmQgbm90IGEgZmxvYXQpLiBFLmcuLCB0aGUgZmlyc3QKLWxp
bmUgb2YgdGhlIDxjb2RlPmRpdjwvY29kZT4gaW4gPGNvZGU+Jmx0O0RJVj4mbHQ7UD5UaGlzCi1s
aW5lLi4uJmx0Oy9QPiZsdC9ESVY+PC9jb2RlPiBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgPGNv
ZGU+cDwvY29kZT4gKGFzc3VtaW5nCi10aGF0IGJvdGggPGNvZGU+cDwvY29kZT4gYW5kIDxjb2Rl
PmRpdjwvY29kZT4gYXJlIGJsb2NrLWxldmVsKS4KLQotPHA+VGhlIGZpcnN0IGxpbmUgb2YgYSB0
YWJsZS1jZWxsIG9yIGlubGluZS1ibG9jayBjYW5ub3QgYmUgdGhlIGZpcnN0Ci1mb3JtYXR0ZWQg
bGluZSBvZiBhbiBhbmNlc3RvciBlbGVtZW50LiBUaHVzLCBpbiA8Y29kZT4mbHQ7RElWJmd0OyZs
dDtQCi1TVFlMRT0iZGlzcGxheTogaW5saW5lLWJsb2NrIj5IZWxsbyZsdDtCUiZndDtHb29kYnll
Jmx0Oy9QJmd0OwotZXRjZXRlcmEmbHQ7L0RJViZndDs8L2NvZGU+IHRoZSBmaXJzdCBmb3JtYXR0
ZWQgbGluZSBvZiB0aGUKLTxjb2RlPmRpdjwvY29kZT4gaXMgbm90IHRoZSBsaW5lICJIZWxsbyIu
Ci0KLTxwIGNsYXNzPSJub3RlIj5Ob3RlIHRoYXQgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIDxjb2Rl
PnA8L2NvZGU+IGluIHRoaXMKLWZyYWdtZW50OiA8Y29kZT4mbHQ7cCZndCZsdDticiZndDtGaXJz
dC4uLjwvY29kZT4gZG9lc24ndCBjb250YWluIGFueQotbGV0dGVycyAoYXNzdW1pbmcgdGhlIGRl
ZmF1bHQgc3R5bGUgZm9yIDxjb2RlPmJyPC9jb2RlPiBpbiBIVE1MCi00KS4gVGhlIHdvcmQgIkZp
cnN0IiBpcyBub3Qgb24gdGhlIGZpcnN0IGZvcm1hdHRlZCBsaW5lLgotCi08cD5BIFVBIHNob3Vs
ZCBhY3QgYXMgaWYgdGhlIGZpY3Rpb25hbCBzdGFydCB0YWdzIG9mIHRoZQotPGNvZGU+OjpmaXJz
dC1saW5lPC9jb2RlPiBwc2V1ZG8tZWxlbWVudHMgd2VyZSBuZXN0ZWQganVzdCBpbnNpZGUgdGhl
Ci1pbm5lcm1vc3QgZW5jbG9zaW5nIGJsb2NrLWxldmVsIGVsZW1lbnQuIChTaW5jZSBDU1MxIGFu
ZCBDU1MyIHdlcmUKLXNpbGVudCBvbiB0aGlzIGNhc2UsIGF1dGhvcnMgc2hvdWxkIG5vdCByZWx5
IG9uIHRoaXMgYmVoYXZpb3IuKSBIZXJlCi1pcyBhbiBleGFtcGxlLiBUaGUgZmljdGlvbmFsIHRh
ZyBzZXF1ZW5jZSBmb3I8L3A+Ci0KLTxwcmU+Ci0mbHQ7RElWPgotICAmbHQ7UD5GaXJzdCBwYXJh
Z3JhcGgmbHQ7L1A+Ci0gICZsdDtQPlNlY29uZCBwYXJhZ3JhcGgmbHQ7L1A+Ci0mbHQ7L0RJVj4K
LTwvcHJlPgotCi08cD5pczwvcD4KLQotPHByZT4KLSZsdDtESVY+Ci0gICZsdDtQPiZsdDtESVY6
OmZpcnN0LWxpbmU+Jmx0O1A6OmZpcnN0LWxpbmU+Rmlyc3QgcGFyYWdyYXBoJmx0Oy9QOjpmaXJz
dC1saW5lPiZsdDsvRElWOjpmaXJzdC1saW5lPiZsdDsvUD4KLSAgJmx0O1A+Jmx0O1A6OmZpcnN0
LWxpbmU+U2Vjb25kIHBhcmFncmFwaCZsdDsvUDo6Zmlyc3QtbGluZT4mbHQ7L1A+Ci0mbHQ7L0RJ
Vj4KLTwvcHJlPgotCi08cD5UaGUgPGNvZGU+OjpmaXJzdC1saW5lPC9jb2RlPiBwc2V1ZG8tZWxl
bWVudCBpcyBzaW1pbGFyIHRvIGFuCi1pbmxpbmUtbGV2ZWwgZWxlbWVudCwgYnV0IHdpdGggY2Vy
dGFpbiByZXN0cmljdGlvbnMuIEluIENTUywgdGhlCi1mb2xsb3dpbmcgcHJvcGVydGllcyBhcHBs
eSB0byBhIDxjb2RlPjo6Zmlyc3QtbGluZTwvY29kZT4KLXBzZXVkby1lbGVtZW50OiBmb250IHBy
b3BlcnRpZXMsIGNvbG9yIHByb3BlcnR5LCBiYWNrZ3JvdW5kCi1wcm9wZXJ0aWVzLCAnd29yZC1z
cGFjaW5nJywgJ2xldHRlci1zcGFjaW5nJywgJ3RleHQtZGVjb3JhdGlvbicsCi0ndmVydGljYWwt
YWxpZ24nLCAndGV4dC10cmFuc2Zvcm0nLCAnbGluZS1oZWlnaHQnLiBVQXMgbWF5IGFwcGx5IG90
aGVyCi1wcm9wZXJ0aWVzIGFzIHdlbGwuPC9wPgotCi0KLTxoND48YSBuYW1lPWZpcnN0LWxldHRl
cj43LjIuIFRoZSA6OmZpcnN0LWxldHRlciBwc2V1ZG8tZWxlbWVudDwvYT48L2g0PgotCi08cD5U
aGUgPGNvZGU+OjpmaXJzdC1sZXR0ZXI8L2NvZGU+IHBzZXVkby1lbGVtZW50IHJlcHJlc2VudHMg
dGhlIGZpcnN0Ci1sZXR0ZXIgb2YgdGhlIGZpcnN0IGxpbmUgb2YgYSBibG9jaywgaWYgaXQgaXMg
bm90IHByZWNlZGVkIGJ5IGFueQotb3RoZXIgY29udGVudCAoc3VjaCBhcyBpbWFnZXMgb3IgaW5s
aW5lIHRhYmxlcykgb24gaXRzIGxpbmUuIFRoZQotOjpmaXJzdC1sZXR0ZXIgcHNldWRvLWVsZW1l
bnQgbWF5IGJlIHVzZWQgZm9yICJpbml0aWFsIGNhcHMiIGFuZCAiZHJvcAotY2FwcyIsIHdoaWNo
IGFyZSBjb21tb24gdHlwb2dyYXBoaWNhbCBlZmZlY3RzLiBUaGlzIHR5cGUgb2YgaW5pdGlhbAot
bGV0dGVyIGlzIHNpbWlsYXIgdG8gYW4gaW5saW5lLWxldmVsIGVsZW1lbnQgaWYgaXRzICdmbG9h
dCcgcHJvcGVydHkKLWlzICdub25lJzsgb3RoZXJ3aXNlLCBpdCBpcyBzaW1pbGFyIHRvIGEgZmxv
YXRlZCBlbGVtZW50LjwvcD4KLQotPHA+SW4gQ1NTLCB0aGVzZSBhcmUgdGhlIHByb3BlcnRpZXMg
dGhhdCBhcHBseSB0byA8Y29kZT46OmZpcnN0LWxldHRlcjwvY29kZT4KLXBzZXVkby1lbGVtZW50
czogZm9udCBwcm9wZXJ0aWVzLCAndGV4dC1kZWNvcmF0aW9uJywgJ3RleHQtdHJhbnNmb3JtJywK
LSdsZXR0ZXItc3BhY2luZycsICd3b3JkLXNwYWNpbmcnICh3aGVuIGFwcHJvcHJpYXRlKSwgJ2xp
bmUtaGVpZ2h0JywKLSdmbG9hdCcsICd2ZXJ0aWNhbC1hbGlnbicgKG9ubHkgaWYgJ2Zsb2F0JyBp
cyAnbm9uZScpLCBtYXJnaW4KLXByb3BlcnRpZXMsIHBhZGRpbmcgcHJvcGVydGllcywgYm9yZGVy
IHByb3BlcnRpZXMsIGNvbG9yIHByb3BlcnR5LAotYmFja2dyb3VuZCBwcm9wZXJ0aWVzLiAgVUFz
IG1heSBhcHBseSBvdGhlciBwcm9wZXJ0aWVzIGFzIHdlbGwuICBUbwotYWxsb3cgVUFzIHRvIHJl
bmRlciBhIHR5cG9ncmFwaGljYWxseSBjb3JyZWN0IGRyb3AgY2FwIG9yIGluaXRpYWwgY2FwLAot
dGhlIFVBIG1heSBjaG9vc2UgYSBsaW5lLWhlaWdodCwgd2lkdGggYW5kIGhlaWdodCBiYXNlZCBv
biB0aGUgc2hhcGUKLW9mIHRoZSBsZXR0ZXIsIHVubGlrZSBmb3Igbm9ybWFsIGVsZW1lbnRzLjwv
cD4KLQotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08cD5FeGFtcGxlOjwvcD4KLTxwPlRoaXMgZXhh
bXBsZSBzaG93cyBhIHBvc3NpYmxlIHJlbmRlcmluZyBvZiBhbiBpbml0aWFsIGNhcC4gTm90ZQot
dGhhdCB0aGUgJ2xpbmUtaGVpZ2h0JyB0aGF0IGlzIGluaGVyaXRlZCBieSB0aGUgPGNvZGU+Ojpm
aXJzdC1sZXR0ZXI8L2NvZGU+Ci1wc2V1ZG8tZWxlbWVudCBpcyAxLjEsIGJ1dCB0aGUgVUEgaW4g
dGhpcyBleGFtcGxlIGhhcyBjb21wdXRlZCB0aGUKLWhlaWdodCBvZiB0aGUgZmlyc3QgbGV0dGVy
IGRpZmZlcmVudGx5LCBzbyB0aGF0IGl0IGRvZXNuJ3QgY2F1c2UgYW55Ci11bm5lY2Vzc2FyeSBz
cGFjZSBiZXR3ZWVuIHRoZSBmaXJzdCB0d28gbGluZXMuIEFsc28gbm90ZSB0aGF0IHRoZQotZmlj
dGlvbmFsIHN0YXJ0IHRhZyBvZiB0aGUgZmlyc3QgbGV0dGVyIGlzIGluc2lkZSB0aGUgPHNwYW4+
c3Bhbjwvc3Bhbj4sIGFuZCB0aHVzCi10aGUgZm9udCB3ZWlnaHQgb2YgdGhlIGZpcnN0IGxldHRl
ciBpcyBub3JtYWwsIG5vdCBib2xkIGFzIHRoZSA8c3Bhbj5zcGFuPC9zcGFuPjoKLTxwcmU+Ci1w
IHsgbGluZS1oZWlnaHQ6IDEuMSB9Ci1wOjpmaXJzdC1sZXR0ZXIgeyBmb250LXNpemU6IDNlbTsg
Zm9udC13ZWlnaHQ6IG5vcm1hbCB9Ci1zcGFuIHsgZm9udC13ZWlnaHQ6IGJvbGQgfQotLi4uCi0m
bHQ7cD4mbHQ7c3Bhbj5IZXQgaGVtZWxzY2hlJmx0Oy9zcGFuPiBnZXJlY2h0IGhlZWZ0IHppY2gg
dGVuIGxhbmdlIGxlc3RlbiZsdDticj4KLUVyYmFycmVtdCBvdmVyIG15IGVuIG1pam4gYmVuYWV1
d2RlIHZlc3RlbiZsdDticj4KLUVuIGFybWUgYnVyZ2VyeSwgZW4gb3AgbWlqbiB2b2xjeCBnZWJl
ZCZsdDticj4KLUVuIGRhZ2VsaXggZ2VzY2hyZXkgZGUgYmFuZ2Ugc3RhZCBvbnR6ZXQuCi08L3By
ZT4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+Ci08cD48aW1nIHNyYz0iaW5pdGlhbC1jYXAucG5nIiBh
bHQ9IkltYWdlIGlsbHVzdHJhdGluZyB0aGUgOjpmaXJzdC1sZXR0ZXIgcHNldWRvLWVsZW1lbnQi
PgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08cD5UaGUgZm9sbG93
aW5nIENTUyB3aWxsIG1ha2UgYSBkcm9wIGNhcCBpbml0aWFsIGxldHRlciBzcGFuIGFib3V0IHR3
byBsaW5lczo8L3A+Ci0KLTxwcmU+Ci0mbHQ7IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8v
RFREIEhUTUwgNC4wMS8vRU4iJmd0OwotJmx0O0hUTUwmZ3Q7Ci0gJmx0O0hFQUQmZ3Q7Ci0gICZs
dDtUSVRMRSZndDtEcm9wIGNhcCBpbml0aWFsIGxldHRlciZsdDsvVElUTEUmZ3Q7Ci0gICZsdDtT
VFlMRSB0eXBlPSJ0ZXh0L2NzcyImZ3Q7Ci0gICBQICAgICAgICAgICAgICAgeyBmb250LXNpemU6
IDEycHQ7IGxpbmUtaGVpZ2h0OiAxLjIgfQotICAgUDo6Zmlyc3QtbGV0dGVyIHsgZm9udC1zaXpl
OiAyMDAlOyBmb250LXdlaWdodDogYm9sZDsgZmxvYXQ6IGxlZnQgfQotICAgU1BBTiAgICAgICAg
ICAgIHsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSB9Ci0gICZsdDsvU1RZTEUmZ3Q7Ci0gJmx0
Oy9IRUFEJmd0OwotICZsdDtCT0RZJmd0OwotICAmbHQ7UCZndDsmbHQ7U1BBTiZndDtUaGUgZmly
c3QmbHQ7L1NQQU4mZ3Q7IGZldyB3b3JkcyBvZiBhbiBhcnRpY2xlCi0gICAgaW4gVGhlIEVjb25v
bWlzdC4mbHQ7L1AmZ3Q7Ci0gJmx0Oy9CT0RZJmd0OwotJmx0Oy9IVE1MJmd0OwotPC9wcmU+Ci0K
LTxwPlRoaXMgZXhhbXBsZSBtaWdodCBiZSBmb3JtYXR0ZWQgYXMgZm9sbG93czo8L3A+Ci0KLTxk
aXYgY2xhc3M9ImZpZ3VyZSI+Ci08UD48aW1nIHNyYz0iZmlyc3QtbGV0dGVyLmdpZiIgYWx0PSJJ
bWFnZSBpbGx1c3RyYXRpbmcgdGhlIGNvbWJpbmVkIGVmZmVjdCBvZiB0aGUgOjpmaXJzdC1sZXR0
ZXIgYW5kIDo6Zmlyc3QtbGluZSBwc2V1ZG8tZWxlbWVudHMiPjwvcD4KLTwvZGl2PgotCi08cD5U
aGUgPHNwYW4gY2xhc3M9ImluZGV4LWluc3QiIHRpdGxlPSJmaWN0aW9uYWwgdGFnCi1zZXF1ZW5j
ZSI+ZmljdGlvbmFsIHRhZyBzZXF1ZW5jZTwvc3Bhbj4gaXM6PC9wPgotCi08cHJlPgotJmx0O1Am
Z3Q7Ci0mbHQ7U1BBTiZndDsKLSZsdDtQOjpmaXJzdC1sZXR0ZXImZ3Q7Ci1UCi0mbHQ7L1A6OmZp
cnN0LWxldHRlciZndDtoZSBmaXJzdAotJmx0Oy9TUEFOJmd0OwotZmV3IHdvcmRzIG9mIGFuIGFy
dGljbGUgaW4gdGhlIEVjb25vbWlzdC4KLSZsdDsvUCZndDsKLTwvcHJlPgotCi08cD5Ob3RlIHRo
YXQgdGhlIDxjb2RlPjo6Zmlyc3QtbGV0dGVyPC9jb2RlPiBwc2V1ZG8tZWxlbWVudCB0YWdzIGFi
dXQKLXRoZSBjb250ZW50IChpLmUuLCB0aGUgaW5pdGlhbCBjaGFyYWN0ZXIpLCB3aGlsZSB0aGUg
OjpmaXJzdC1saW5lCi1wc2V1ZG8tZWxlbWVudCBzdGFydCB0YWcgaXMgaW5zZXJ0ZWQgcmlnaHQg
YWZ0ZXIgdGhlIHN0YXJ0IHRhZyBvZiB0aGUKLWJsb2NrIGVsZW1lbnQuPC9wPiA8L2Rpdj4KLQot
PHA+SW4gb3JkZXIgdG8gYWNoaWV2ZSB0cmFkaXRpb25hbCBkcm9wIGNhcHMgZm9ybWF0dGluZywg
dXNlciBhZ2VudHMKLW1heSBhcHByb3hpbWF0ZSBmb250IHNpemVzLCBmb3IgZXhhbXBsZSB0byBh
bGlnbiBiYXNlbGluZXMuIEFsc28sIHRoZQotZ2x5cGggb3V0bGluZSBtYXkgYmUgdGFrZW4gaW50
byBhY2NvdW50IHdoZW4gZm9ybWF0dGluZy48L3A+Ci0KLTxwPlB1bmN0dWF0aW9uIChpLmUsIGNo
YXJhY3RlcnMgZGVmaW5lZCBpbiBVbmljb2RlIGluIHRoZSAib3BlbiIgKFBzKSwKLSJjbG9zZSIg
KFBlKSwgImluaXRpYWwiIChQaSkuICJmaW5hbCIgKFBmKSBhbmQgIm90aGVyIiAoUG8pCi1wdW5j
dHVhdGlvbiBjbGFzc2VzKSwgdGhhdCBwcmVjZWRlcyBvciBmb2xsb3dzIHRoZSBmaXJzdCBsZXR0
ZXIgc2hvdWxkCi1iZSBpbmNsdWRlZC4gPGEgaHJlZj0iI3JlZnNVTklDT0RFIj5bVU5JQ09ERV08
L2E+PC9wPgotCi08ZGl2IGNsYXNzPSJmaWd1cmUiPgotPFA+PGltZyBzcmM9ImZpcnN0LWxldHRl
cjIuZ2lmIiBhbHQ9IlF1b3RlcyB0aGF0IHByZWNlZGUgdGhlCi1maXJzdCBsZXR0ZXIgc2hvdWxk
IGJlIGluY2x1ZGVkLiI+PC9wPgotPC9kaXY+Ci0KLTxwPlRoZSA8Y29kZT46OmZpcnN0LWxldHRl
cjwvY29kZT4gYWxzbyBhcHBsaWVzIGlmIHRoZSBmaXJzdCBsZXR0ZXIgaXMKLWluIGZhY3QgYSBk
aWdpdCwgZS5nLiwgdGhlICI2IiBpbiAiNjcgbWlsbGlvbiBkb2xsYXJzIGlzIGEgbG90IG9mCi1t
b25leS4iPC9wPgotCi08cD5JbiBDU1MsIHRoZSA8Y29kZT46OmZpcnN0LWxldHRlcjwvY29kZT4g
cHNldWRvLWVsZW1lbnQgYXBwbGllcyB0bwotYmxvY2ssIGxpc3QtaXRlbSwgdGFibGUtY2VsbCwg
dGFibGUtY2FwdGlvbiwgYW5kIGlubGluZS1ibG9jawotZWxlbWVudHMuIDxzcGFuIGNsYXNzPSJu
b3RlIj5BIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgc3BlY2lmaWNhdGlvbgotbWF5IGFsbG93IHRo
aXMgcGVzdWRvLWVsZW1lbnQgdG8gYXBwbHkgdG8gbW9yZSBlbGVtZW50Ci10eXBlcy48L3NwYW4+
PC9wPgotCi08cD5UaGUgPGNvZGU+OjpmaXJzdC1sZXR0ZXI8L2NvZGU+IHBzZXVkby1lbGVtZW50
IGNhbiBiZSB1c2VkIHdpdGggYWxsCi1zdWNoIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0ZXh0LCBv
ciB0aGF0IGhhdmUgYSBkZXNjZW5kYW50IGluIHRoZSBzYW1lCi1mbG93IHRoYXQgY29udGFpbnMg
dGV4dC4gQSBVQSBzaG91bGQgYWN0IGFzIGlmIHRoZSBmaWN0aW9uYWwgc3RhcnQgdGFnCi1vZiB0
aGUgOjpmaXJzdC1sZXR0ZXIgcHNldWRvLWVsZW1lbnQgaXMganVzdCBiZWZvcmUgdGhlIGZpcnN0
IHRleHQgb2YKLXRoZSBlbGVtZW50LCBldmVuIGlmIHRoYXQgZmlyc3QgdGV4dCBpcyBpbiBhIGRl
c2NlbmRhbnQuPC9wPgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLTxwPkV4YW1wbGU6PC9wPgot
PHA+VGhlIGZpY3Rpb25hbCB0YWcgc2VxdWVuY2UgZm9yIHRoaXMgSFRNTGZyYWdtZW50OgotPHBy
ZT4mbHQ7ZGl2PgotJmx0O3A+VGhlIGZpcnN0IHRleHQuPC9wcmU+Ci08cD5pczoKLTxwcmU+Jmx0
O2Rpdj4KLSZsdDtwPiZsdDtkaXY6OmZpcnN0LWxldHRlcj4mbHQ7cDo6Zmlyc3QtbGV0dGVyPlQm
bHQ7Ly4uLj4mbHQ7Ly4uLj5oZSBmaXJzdCB0ZXh0LjwvcHJlPgotPC9kaXY+Ci0KLTxwPlRoZSBm
aXJzdCBsZXR0ZXIgb2YgYSB0YWJsZS1jZWxsIG9yIGlubGluZS1ibG9jayBjYW5ub3QgYmUgdGhl
Ci1maXJzdCBsZXR0ZXIgb2YgYW4gYW5jZXN0b3IgZWxlbWVudC4gVGh1cywgaW4gPGNvZGU+Jmx0
O0RJViZndDsmbHQ7UAotU1RZTEU9ImRpc3BsYXk6IGlubGluZS1ibG9jayI+SGVsbG8mbHQ7QlIm
Z3Q7R29vZGJ5ZSZsdDsvUCZndDsKLWV0Y2V0ZXJhJmx0Oy9ESVYmZ3Q7PC9jb2RlPiB0aGUgZmly
c3QgbGV0dGVyIG9mIHRoZSA8Y29kZT5kaXY8L2NvZGU+IGlzIG5vdCB0aGUKLWxldHRlciAiSCIu
IEluIGZhY3QsIHRoZSA8Y29kZT5kaXY8L2NvZGU+IGRvZXNuJ3QgaGF2ZSBhIGZpcnN0IGxldHRl
ci4KLQotPHA+VGhlIGZpcnN0IGxldHRlciBtdXN0IG9jY3VyIG9uIHRoZSA8YQotaHJlZj0iI2Zp
cnN0LWZvcm1hdHRlZC1saW5lIj5maXJzdCBmb3JtYXR0ZWQgbGluZS48L2E+IEZvciBleGFtcGxl
LCBpbgotdGhpcyBmcmFnbWVudDogPGNvZGU+Jmx0O3AmZ3QmbHQ7YnImZ3Q7Rmlyc3QuLi48L2Nv
ZGU+IHRoZSBmaXJzdCBsaW5lCi1kb2Vzbid0IGNvbnRhaW4gYW55IGxldHRlcnMgYW5kIDxjb2Rl
Pjo6Zmlyc3QtbGV0dGVyPC9jb2RlPiBkb2Vzbid0Ci1tYXRjaCBhbnl0aGluZyAoYXNzdW1pbmcg
dGhlIGRlZmF1bHQgc3R5bGUgZm9yIDxjb2RlPmJyPC9jb2RlPiBpbiBIVE1MCi00KS4gSW4gcGFy
dGljdWxhciwgaXQgZG9lcyBub3QgbWF0Y2ggdGhlICJGIiBvZiAiRmlyc3QuIgotCi08cD5JbiBD
U1MsIGlmIGFuIGVsZW1lbnQgaXMgYSBsaXN0IGl0ZW0gKCdkaXNwbGF5OiBsaXN0LWl0ZW0nKSwg
dGhlCi08Y29kZT46OmZpcnN0LWxldHRlcjwvY29kZT4gYXBwbGllcyB0byB0aGUgZmlyc3QgbGV0
dGVyIGluIHRoZQotcHJpbmNpcGFsIGJveCBhZnRlciB0aGUgbWFya2VyLiBVQXMgbWF5IGlnbm9y
ZQotPGNvZGU+OjpmaXJzdC1sZXR0ZXI8L2NvZGU+IG9uIGxpc3QgaXRlbXMgd2l0aCAnbGlzdC1z
dHlsZS1wb3NpdGlvbjoKLWluc2lkZScuIElmIGFuIGVsZW1lbnQgaGFzIDxjb2RlPjo6YmVmb3Jl
PC9jb2RlPiBvcgotPGNvZGU+OjphZnRlcjwvY29kZT4gY29udGVudCwgdGhlIDxjb2RlPjo6Zmly
c3QtbGV0dGVyPC9jb2RlPiBhcHBsaWVzCi10byB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBlbGVt
ZW50IDxlbT5pbmNsdWRpbmc8L2VtPiB0aGF0IGNvbnRlbnQuCi0KLTxkaXYgY2xhc3M9ImV4YW1w
bGUiPgotPHA+RXhhbXBsZTo8L3A+Ci08cD5BZnRlciB0aGUgcnVsZSAncDo6YmVmb3JlIHtjb250
ZW50OiAiTm90ZTogIn0nLCB0aGUgc2VsZWN0b3IKLSdwOjpmaXJzdC1sZXR0ZXInIG1hdGNoZXMg
dGhlICJOIiBvZiAiTm90ZSIuPC9wPgotPC9kaXY+Ci0KLTxwPlNvbWUgbGFuZ3VhZ2VzIG1heSBo
YXZlIHNwZWNpZmljIHJ1bGVzIGFib3V0IGhvdyB0byB0cmVhdCBjZXJ0YWluCi1sZXR0ZXIgY29t
YmluYXRpb25zLiBJbiBEdXRjaCwgZm9yIGV4YW1wbGUsIGlmIHRoZSBsZXR0ZXIgY29tYmluYXRp
b24KLSJpaiIgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgd29yZCwgYm90aCBsZXR0ZXJz
IHNob3VsZCBiZQotY29uc2lkZXJlZCB3aXRoaW4gdGhlIDxjb2RlPjo6Zmlyc3QtbGV0dGVyPC9j
b2RlPiBwc2V1ZG8tZWxlbWVudC4KLQotPHA+SWYgdGhlIGxldHRlcnMgdGhhdCB3b3VsZCBmb3Jt
IHRoZSA6OmZpcnN0LWxldHRlciBhcmUgbm90IGluIHRoZQotc2FtZSBlbGVtZW50LCBzdWNoIGFz
ICInVCIgaW4gPGNvZGU+Jmx0O3A+JyZsdDtlbT5ULi4uPC9jb2RlPiwgdGhlIFVBCi1tYXkgY3Jl
YXRlIGEgOjpmaXJzdC1sZXR0ZXIgcHNldWRvLWVsZW1lbnQgZnJvbSBvbmUgb2YgdGhlIGVsZW1l
bnRzLAotYm90aCBlbGVtZW50cywgb3Igc2ltcGx5IG5vdCBjcmVhdGUgYSBwc2V1ZG8tZWxlbWVu
dC48L3A+Ci0KLTxwPlNpbWlsYXJseSwgaWYgdGhlIGZpcnN0IGxldHRlcihzKSBvZiB0aGUgYmxv
Y2sgYXJlIG5vdCBhdCB0aGUgc3RhcnQKLW9mIHRoZSBsaW5lIChmb3IgZXhhbXBsZSBkdWUgdG8g
YmlkaXJlY3Rpb25hbCByZW9yZGVyaW5nKSwgdGhlbiB0aGUgVUEKLW5lZWQgbm90IGNyZWF0ZSB0
aGUgcHNldWRvLWVsZW1lbnQocykuCi0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotPHA+RXhhbXBs
ZTo8L3A+Ci08cD48YSBuYW1lPSJvdmVybGFwcGluZy1leGFtcGxlIj5UaGUgZm9sbG93aW5nIGV4
YW1wbGU8L2E+IGlsbHVzdHJhdGVzCi1ob3cgb3ZlcmxhcHBpbmcgcHNldWRvLWVsZW1lbnRzIG1h
eSBpbnRlcmFjdC4gIFRoZSBmaXJzdCBsZXR0ZXIgb2YKLWVhY2ggUCBlbGVtZW50IHdpbGwgYmUg
Z3JlZW4gd2l0aCBhIGZvbnQgc2l6ZSBvZiAnMjRwdCcuIFRoZSByZXN0IG9mCi10aGUgZmlyc3Qg
Zm9ybWF0dGVkIGxpbmUgd2lsbCBiZSAnYmx1ZScgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlCi1wYXJh
Z3JhcGggd2lsbCBiZSAncmVkJy48L3A+Ci0KLTxwcmU+cCB7IGNvbG9yOiByZWQ7IGZvbnQtc2l6
ZTogMTJwdCB9Ci1wOjpmaXJzdC1sZXR0ZXIgeyBjb2xvcjogZ3JlZW47IGZvbnQtc2l6ZTogMjAw
JSB9Ci1wOjpmaXJzdC1saW5lIHsgY29sb3I6IGJsdWUgfQotCi0mbHQ7UCZndDtTb21lIHRleHQg
dGhhdCBlbmRzIHVwIG9uIHR3byBsaW5lcyZsdDsvUCZndDs8L3ByZT4KLQotPHA+QXNzdW1pbmcg
dGhhdCBhIGxpbmUgYnJlYWsgd2lsbCBvY2N1ciBiZWZvcmUgdGhlIHdvcmQgImVuZHMiLCB0aGUK
LTxzcGFuIGNsYXNzPSJpbmRleC1pbnN0IiB0aXRsZT0iZmljdGlvbmFsIHRhZyBzZXF1ZW5jZSI+
ZmljdGlvbmFsIHRhZwotc2VxdWVuY2U8L3NwYW4+IGZvciB0aGlzIGZyYWdtZW50IG1pZ2h0IGJl
OjwvcD4KLQotPHByZT4mbHQ7UCZndDsKLSZsdDtQOjpmaXJzdC1saW5lJmd0OwotJmx0O1A6OmZp
cnN0LWxldHRlciZndDsKLVMKLSZsdDsvUDo6Zmlyc3QtbGV0dGVyJmd0O29tZSB0ZXh0IHRoYXQK
LSZsdDsvUDo6Zmlyc3QtbGluZSZndDsKLWVuZHMgdXAgb24gdHdvIGxpbmVzCi0mbHQ7L1AmZ3Q7
PC9wcmU+Ci0KLTxwPk5vdGUgdGhhdCB0aGUgPGNvZGU+OjpmaXJzdC1sZXR0ZXI8L2NvZGU+IGVs
ZW1lbnQgaXMgaW5zaWRlIHRoZSA8Y29kZT46OmZpcnN0LWxpbmU8L2NvZGU+Ci1lbGVtZW50LiAg
UHJvcGVydGllcyBzZXQgb24gPGNvZGU+OjpmaXJzdC1saW5lPC9jb2RlPiBhcmUgaW5oZXJpdGVk
IGJ5Ci08Y29kZT46OmZpcnN0LWxldHRlcjwvY29kZT4sIGJ1dCBhcmUgb3ZlcnJpZGRlbiBpZiB0
aGUgc2FtZSBwcm9wZXJ0eSBpcyBzZXQgb24KLTxjb2RlPjo6Zmlyc3QtbGV0dGVyPC9jb2RlPi48
L3A+Ci08L2Rpdj4KLQotCi08aDQ+PGEgbmFtZT1VSWZyYWdtZW50cz43LjMuPC9hPiA8YSBuYW1l
PXNlbGVjdGlvbj5UaGUgOjpzZWxlY3Rpb24gcHNldWRvLWVsZW1lbnQ8L2E+PC9oND4KLQotPHA+
VGhlIDxjb2RlPjo6c2VsZWN0aW9uPC9jb2RlPiBwc2V1ZG8tZWxlbWVudCBhcHBsaWVzIHRvIHRo
ZSBwb3J0aW9uCi1vZiBhIGRvY3VtZW50IHRoYXQgaGFzIGJlZW4gaGlnaGxpZ2h0ZWQgYnkgdGhl
IHVzZXIuIFRoaXMgYWxzbwotYXBwbGllcywgZm9yIGV4YW1wbGUsIHRvIHNlbGVjdGVkIHRleHQg
d2l0aGluIGFuIGVkaXRhYmxlIHRleHQKLWZpZWxkLiBUaGlzIHBzZXVkby1lbGVtZW50IHNob3Vs
ZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgPGNvZGU+PGEKLWhyZWY9IiNjaGVja2VkIj46Y2hl
Y2tlZDwvYT48L2NvZGU+IHBzZXVkby1jbGFzcyAod2hpY2ggdXNlZCB0byBiZQotbmFtZWQgPGNv
ZGU+OnNlbGVjdGVkPC9jb2RlPikKLQotPHA+QWx0aG91Z2ggdGhlIDxjb2RlPjo6c2VsZWN0aW9u
PC9jb2RlPiBwc2V1ZG8tZWxlbWVudCBpcyBkeW5hbWljIGluCi1uYXR1cmUsIGFuZCBpcyBhbHRl
cmVkIGJ5IHVzZXIgYWN0aW9uLCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCB0aGF0Ci13aGVu
IGEgVUEgcmUtcmVuZGVycyB0byBhIHN0YXRpYyBtZWRpdW0gKHN1Y2ggYXMgYSBwcmludGVkIHBh
Z2UsIHNlZQotPGEgaHJlZj0iI3JlZnNDU1MyMSI+W0NTUzIxXTwvYT4pIHdoaWNoIHdhcyBvcmln
aW5hbGx5IHJlbmRlcmVkIHRvIGEKLWR5bmFtaWMgbWVkaXVtIChsaWtlIHNjcmVlbiksIHRoZSBV
QSBtYXkgd2lzaCB0byB0cmFuc2ZlciB0aGUgY3VycmVudAotPGNvZGU+OjpzZWxlY3Rpb248L2Nv
ZGU+IHN0YXRlIHRvIHRoYXQgb3RoZXIgbWVkaXVtLCBhbmQgaGF2ZSBhbGwgdGhlCi1hcHByb3By
aWF0ZSBmb3JtYXR0aW5nIGFuZCByZW5kZXJpbmcgdGFrZSBlZmZlY3QgYXMgd2VsbC4gVGhpcyBp
cyBub3QKLXJlcXVpcmVkICZtZGFzaDsgVUFzIG1heSBvbWl0IHRoZSA8Y29kZT46OnNlbGVjdGlv
bjwvY29kZT4KLXBzZXVkby1lbGVtZW50IGZvciBzdGF0aWMgbWVkaWEuCi0KLTxwPlRoZXNlIGFy
ZSB0aGUgQ1NTIHByb3BlcnRpZXMgdGhhdCBhcHBseSB0byA8Y29kZT46OnNlbGVjdGlvbjwvY29k
ZT4KLXBzZXVkby1lbGVtZW50czogY29sb3IsIGJhY2tncm91bmQsIGN1cnNvciAob3B0aW9uYWwp
LCBvdXRsaW5lCi0ob3B0aW9uYWwpLiBUaGUgY29tcHV0ZWQgdmFsdWUgb2YgdGhlICdiYWNrZ3Jv
dW5kLWltYWdlJyBwcm9wZXJ0eSBvbgotPGNvZGU+OjpzZWxlY3Rpb248L2NvZGU+IG1heSBiZSBp
Z25vcmVkLgotCi0KLTxoND48YSBuYW1lPWdlbi1jb250ZW50PjcuNC4gVGhlIDo6YmVmb3JlIGFu
ZCA6OmFmdGVyIHBzZXVkby1lbGVtZW50czwvYT48L2g0PgotCi08cD5UaGUgPGNvZGU+OjpiZWZv
cmU8L2NvZGU+IGFuZCA8Y29kZT46OmFmdGVyPC9jb2RlPiBwc2V1ZG8tZWxlbWVudHMKLWNhbiBi
ZSB1c2VkIHRvIGRlc2NyaWJlIGdlbmVyYXRlZCBjb250ZW50IGJlZm9yZSBvciBhZnRlciBhbiBl
bGVtZW50J3MKLWNvbnRlbnQuIFRoZXkgYXJlIGV4cGxhaW5lZCBpbiBDU1MgMi4xIDxhCi1ocmVm
PSIjcmVmc0NTUzIxIj5bQ1NTMjFdPC9hPi48L3A+Ci0KLTxwPldoZW4gdGhlIDxjb2RlPjo6Zmly
c3QtbGV0dGVyPC9jb2RlPiBhbmQgPGNvZGU+OjpmaXJzdC1saW5lPC9jb2RlPgotcHNldWRvLWVs
ZW1lbnRzIGFyZSBjb21iaW5lZCB3aXRoIDxjb2RlPjo6YmVmb3JlPC9jb2RlPiBhbmQKLTxjb2Rl
Pjo6YWZ0ZXI8L2NvZGU+LCB0aGV5IGFwcGx5IHRvIHRoZSBmaXJzdCBsZXR0ZXIgb3IgbGluZSBv
ZiB0aGUKLWVsZW1lbnQgaW5jbHVkaW5nIHRoZSBpbnNlcnRlZCB0ZXh0LjwvcD4KLQotPGgyPjxh
IG5hbWU9Y29tYmluYXRvcnM+OC4gQ29tYmluYXRvcnM8L2E+PC9oMj4KLQotPGgzPjxhIG5hbWU9
ZGVzY2VuZGFudC1jb21iaW5hdG9ycz44LjEuIERlc2NlbmRhbnQgY29tYmluYXRvcjwvYT48L2gz
PgotCi08cD5BdCB0aW1lcywgYXV0aG9ycyBtYXkgd2FudCBzZWxlY3RvcnMgdG8gZGVzY3JpYmUg
YW4gZWxlbWVudCB0aGF0IGlzCi10aGUgZGVzY2VuZGFudCBvZiBhbm90aGVyIGVsZW1lbnQgaW4g
dGhlIGRvY3VtZW50IHRyZWUgKGUuZy4sICJhbgotPGNvZGU+RU08L2NvZGU+IGVsZW1lbnQgdGhh
dCBpcyBjb250YWluZWQgd2l0aGluIGFuIDxjb2RlPkgxPC9jb2RlPgotZWxlbWVudCIpLiBEZXNj
ZW5kYW50IGNvbWJpbmF0b3JzIGV4cHJlc3Mgc3VjaCBhIHJlbGF0aW9uc2hpcC4gQQotZGVzY2Vu
ZGFudCBjb21iaW5hdG9yIGlzIDxhIGhyZWY9IiN3aGl0ZXNwYWNlIj53aGl0ZSBzcGFjZTwvYT4g
dGhhdAotc2VwYXJhdGVzIHR3byBzZXF1ZW5jZXMgb2Ygc2ltcGxlIHNlbGVjdG9ycy4gIEEgc2Vs
ZWN0b3Igb2YgdGhlIGZvcm0KLSI8Y29kZT5BIEI8L2NvZGU+IiByZXByZXNlbnRzIGFuIGVsZW1l
bnQgPGNvZGU+QjwvY29kZT4gdGhhdCBpcyBhbgotYXJiaXRyYXJ5IGRlc2NlbmRhbnQgb2Ygc29t
ZSBhbmNlc3RvciBlbGVtZW50IDxjb2RlPkE8L2NvZGU+LgotCi08ZGl2IGNsYXNzPSJleGFtcGxl
Ij4KLSA8cD5FeGFtcGxlczo8L3A+Ci0gPHA+Rm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xs
b3dpbmcgc2VsZWN0b3I6PC9wPgotIDxwcmU+aDEgZW08L3ByZT4KLSA8cD5JdCByZXByZXNlbnRz
IGFuIDxjb2RlPmVtPC9jb2RlPiBlbGVtZW50IGJlaW5nIHRoZSBkZXNjZW5kYW50IG9mCi0gYW4g
PGNvZGU+aDE8L2NvZGU+IGVsZW1lbnQuIEl0IGlzIGEgY29ycmVjdCBhbmQgdmFsaWQsIGJ1dCBw
YXJ0aWFsLAotIGRlc2NyaXB0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZnJhZ21lbnQ6PC9wPgotIDxw
cmU+Jmx0O2gxJmd0O1RoaXMgJmx0O3NwYW4gY2xhc3M9Im15Y2xhc3MiJmd0O2hlYWRsaW5lCi1p
cyAmbHQ7ZW0mZ3Q7dmVyeSZsdDsvZW0mZ3Q7IGltcG9ydGFudCZsdDsvc3BhbiZndDsmbHQ7L2gx
Jmd0OzwvcHJlPgotIDxwPlRoZSBmb2xsb3dpbmcgc2VsZWN0b3I6PC9wPgotIDxwcmU+ZGl2ICog
cDwvcHJlPgotIDxwPnJlcHJlc2VudHMgYSA8Y29kZT5wPC9jb2RlPiBlbGVtZW50IHRoYXQgaXMg
YSBncmFuZGNoaWxkIG9yIGxhdGVyCi0gZGVzY2VuZGFudCBvZiBhIDxjb2RlPmRpdjwvY29kZT4g
ZWxlbWVudC4gTm90ZSB0aGUgd2hpdGVzcGFjZSBvbgotIGVpdGhlciBzaWRlIG9mIHRoZSAiKiIg
aXMgbm90IHBhcnQgb2YgdGhlIHVuaXZlcnNhbCBzZWxlY3RvcjsgdGhlCi0gd2hpdGVzcGFjZSBp
cyBhIGNvbWJpbmF0b3IgaW5kaWNhdGluZyB0aGF0IHRoZSBESVYgbXVzdCBiZSB0aGUKLSBhbmNl
c3RvciBvZiBzb21lIGVsZW1lbnQsIGFuZCB0aGF0IHRoYXQgZWxlbWVudCBtdXN0IGJlIGFuIGFu
Y2VzdG9yCi0gb2YgdGhlIFAuPC9wPgotIDxwPlRoZSBmb2xsb3dpbmcgc2VsZWN0b3IsIHdoaWNo
IGNvbWJpbmVzIGRlc2NlbmRhbnQgY29tYmluYXRvcnMgYW5kCi0gPGEgaHJlZj0iI2F0dHJpYnV0
ZS1zZWxlY3RvcnMiPmF0dHJpYnV0ZSBzZWxlY3RvcnM8L2E+LCByZXByZXNlbnRzIGFuCi0gZWxl
bWVudCB0aGF0ICgxKSBoYXMgdGhlIDxjb2RlPmhyZWY8L2NvZGU+IGF0dHJpYnV0ZSBzZXQgYW5k
ICgyKSBpcwotIGluc2lkZSBhIDxjb2RlPnA8L2NvZGU+IHRoYXQgaXMgaXRzZWxmIGluc2lkZSBh
IDxjb2RlPmRpdjwvY29kZT46PC9wPgotIDxwcmU+ZGl2IHAgKltocmVmXTwvcHJlPgotPC9kaXY+
Ci0KLTxoMz48YSBuYW1lPWNoaWxkLWNvbWJpbmF0b3JzPjguMi4gQ2hpbGQgY29tYmluYXRvcnM8
L2E+PC9oMz4KLQotPHA+QSA8ZGZuPmNoaWxkIGNvbWJpbmF0b3I8L2Rmbj4gZGVzY3JpYmVzIGEg
Y2hpbGRob29kIHJlbGF0aW9uc2hpcAotYmV0d2VlbiB0d28gZWxlbWVudHMuIEEgY2hpbGQgY29t
YmluYXRvciBpcyBtYWRlIG9mIHRoZQotJnF1b3Q7Z3JlYXRlci10aGFuIHNpZ24mcXVvdDsgKDxj
b2RlPiZndDs8L2NvZGU+KSBjaGFyYWN0ZXIgYW5kCi1zZXBhcmF0ZXMgdHdvIHNlcXVlbmNlcyBv
ZiBzaW1wbGUgc2VsZWN0b3JzLgotCi0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotIDxwPkV4YW1w
bGVzOjwvcD4KLSA8cD5UaGUgZm9sbG93aW5nIHNlbGVjdG9yIHJlcHJlc2VudHMgYSA8Y29kZT5w
PC9jb2RlPiBlbGVtZW50IHRoYXQgaXMKLSBjaGlsZCBvZiA8Y29kZT5ib2R5PC9jb2RlPjo8L3A+
Ci0gPHByZT5ib2R5ICZndDsgcDwvcHJlPgotIDxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb21i
aW5lcyBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIGFuZCBjaGlsZAotIGNvbWJpbmF0b3JzLjwvcD4K
LSA8cHJlPmRpdiBvbCZndDtsaSBwPC9wcmU+PCEtLSBMRUFWRSBUSE9TRSBTUEFDRVMgT1VUISBz
ZWUgYmVsb3cgLS0+Ci0gPHA+SXQgcmVwcmVzZW50cyBhIDxjb2RlPnA8L2NvZGU+IGVsZW1lbnQg
dGhhdCBpcyBhIGRlc2NlbmRhbnQgb2YgYW4KLSA8Y29kZT5saTwvY29kZT4gZWxlbWVudDsgdGhl
IDxjb2RlPmxpPC9jb2RlPiBlbGVtZW50IG11c3QgYmUgdGhlCi0gY2hpbGQgb2YgYW4gPGNvZGU+
b2w8L2NvZGU+IGVsZW1lbnQ7IHRoZSA8Y29kZT5vbDwvY29kZT4gZWxlbWVudCBtdXN0Ci0gYmUg
YSBkZXNjZW5kYW50IG9mIGEgPGNvZGU+ZGl2PC9jb2RlPi4gTm90aWNlIHRoYXQgdGhlIG9wdGlv
bmFsIHdoaXRlCi0gc3BhY2UgYXJvdW5kIHRoZSAiJmd0OyIgY29tYmluYXRvciBoYXMgYmVlbiBs
ZWZ0IG91dC48L3A+Ci08L2Rpdj4KLQotPHA+Rm9yIGluZm9ybWF0aW9uIG9uIHNlbGVjdGluZyB0
aGUgZmlyc3QgY2hpbGQgb2YgYW4gZWxlbWVudCwgcGxlYXNlCi1zZWUgdGhlIHNlY3Rpb24gb24g
dGhlIDxjb2RlPjxhCi1ocmVmPSIjc3RydWN0dXJhbC1wc2V1ZG9zIj46Zmlyc3QtY2hpbGQ8L2E+
PC9jb2RlPiBwc2V1ZG8tY2xhc3MKLWFib3ZlLjwvcD4KLQotPGgzPjxhIG5hbWU9c2libGluZy1j
b21iaW5hdG9ycz44LjMuIFNpYmxpbmcgY29tYmluYXRvcnM8L2E+PC9oMz4KLQotPHA+VGhlcmUg
YXJlIHR3byBkaWZmZXJlbnQgc2libGluZyBjb21iaW5hdG9yczogdGhlIGFkamFjZW50IHNpYmxp
bmcKLWNvbWJpbmF0b3IgYW5kIHRoZSBnZW5lcmFsIHNpYmxpbmcgY29tYmluYXRvci4gSW4gYm90
aCBjYXNlcywKLW5vbi1lbGVtZW50IG5vZGVzIChlLmcuIHRleHQgYmV0d2VlbiBlbGVtZW50cykg
YXJlIGlnbm9yZWQgd2hlbgotY29uc2lkZXJpbmcgYWRqYWNlbmN5IG9mIGVsZW1lbnRzLjwvcD4K
LQotPGg0PjxhIG5hbWU9YWRqYWNlbnQtc2libGluZy1jb21iaW5hdG9ycz44LjMuMS4gQWRqYWNl
bnQgc2libGluZyBjb21iaW5hdG9yPC9hPjwvaDQ+Ci0KLTxwPlRoZSBhZGphY2VudCBzaWJsaW5n
IGNvbWJpbmF0b3IgaXMgbWFkZSBvZiB0aGUgJnF1b3Q7cGx1cwotc2lnbiZxdW90OyAoVSswMDJC
LCA8Y29kZT4rPC9jb2RlPikgY2hhcmFjdGVyIHRoYXQgc2VwYXJhdGVzIHR3bwotc2VxdWVuY2Vz
IG9mIHNpbXBsZSBzZWxlY3RvcnMuIFRoZSBlbGVtZW50cyByZXByZXNlbnRlZCBieSB0aGUgdHdv
Ci1zZXF1ZW5jZXMgc2hhcmUgdGhlIHNhbWUgcGFyZW50IGluIHRoZSBkb2N1bWVudCB0cmVlIGFu
ZCB0aGUgZWxlbWVudAotcmVwcmVzZW50ZWQgYnkgdGhlIGZpcnN0IHNlcXVlbmNlIGltbWVkaWF0
ZWx5IHByZWNlZGVzIHRoZSBlbGVtZW50Ci1yZXByZXNlbnRlZCBieSB0aGUgc2Vjb25kIG9uZS48
L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotIDxwPkV4YW1wbGVzOjwvcD4KLSA8cD5UaGUg
Zm9sbG93aW5nIHNlbGVjdG9yIHJlcHJlc2VudHMgYSA8Y29kZT5wPC9jb2RlPiBlbGVtZW50Ci0g
aW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgPGNvZGU+bWF0aDwvY29kZT4gZWxlbWVudDo8L3A+Ci0g
PHByZT5tYXRoICsgcDwvcHJlPgotIDxwPlRoZSBmb2xsb3dpbmcgc2VsZWN0b3IgaXMgY29uY2Vw
dHVhbGx5IHNpbWlsYXIgdG8gdGhlIG9uZSBpbiB0aGUKLSBwcmV2aW91cyBleGFtcGxlLCBleGNl
cHQgdGhhdCBpdCBhZGRzIGFuIGF0dHJpYnV0ZSBzZWxlY3RvciAmbWRhc2g7IGl0Ci0gYWRkcyBh
IGNvbnN0cmFpbnQgdG8gdGhlIDxjb2RlPmgxPC9jb2RlPiBlbGVtZW50LCB0aGF0IGl0IG11c3Qg
aGF2ZQotIDxjb2RlPmNsYXNzPSJvcGVuZXIiPC9jb2RlPjo8L3A+Ci0gPHByZT5oMS5vcGVuZXIg
KyBoMjwvcHJlPgotPC9kaXY+Ci0KLQotPGg0PjxhIG5hbWU9Z2VuZXJhbC1zaWJsaW5nLWNvbWJp
bmF0b3JzPjguMy4yLiBHZW5lcmFsIHNpYmxpbmcgY29tYmluYXRvcjwvYT48L2g0PgotCi08cD5U
aGUgZ2VuZXJhbCBzaWJsaW5nIGNvbWJpbmF0b3IgaXMgbWFkZSBvZiB0aGUgJnF1b3Q7dGlsZGUm
cXVvdDsKLShVKzAwN0UsIDxjb2RlPn48L2NvZGU+KSBjaGFyYWN0ZXIgdGhhdCBzZXBhcmF0ZXMg
dHdvIHNlcXVlbmNlcyBvZgotc2ltcGxlIHNlbGVjdG9ycy4gVGhlIGVsZW1lbnRzIHJlcHJlc2Vu
dGVkIGJ5IHRoZSB0d28gc2VxdWVuY2VzIHNoYXJlCi10aGUgc2FtZSBwYXJlbnQgaW4gdGhlIGRv
Y3VtZW50IHRyZWUgYW5kIHRoZSBlbGVtZW50IHJlcHJlc2VudGVkIGJ5Ci10aGUgZmlyc3Qgc2Vx
dWVuY2UgcHJlY2VkZXMgKG5vdCBuZWNlc3NhcmlseSBpbW1lZGlhdGVseSkgdGhlIGVsZW1lbnQK
LXJlcHJlc2VudGVkIGJ5IHRoZSBzZWNvbmQgb25lLjwvcD4KLQotPGRpdiBjbGFzcz0iZXhhbXBs
ZSI+Ci0gPHA+RXhhbXBsZTo8L3A+Ci0gPHByZT5oMSB+IHByZTwvcHJlPgotIDxwPnJlcHJlc2Vu
dHMgYSA8Y29kZT5wcmU8L2NvZGU+IGVsZW1lbnQgZm9sbG93aW5nIGFuIDxjb2RlPmgxPC9jb2Rl
Pi4gSXQKLSBpcyBhIGNvcnJlY3QgYW5kIHZhbGlkLCBidXQgcGFydGlhbCwgZGVzY3JpcHRpb24g
b2Y6PC9wPgotIDxwcmU+Jmx0O2gxJmd0O0RlZmluaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGEmbHQ7
L2gxJmd0OwotJmx0O3AmZ3Q7RnVuY3Rpb24gYSh4KSBoYXMgdG8gYmUgYXBwbGllZCB0byBhbGwg
ZmlndXJlcyBpbiB0aGUgdGFibGUuJmx0Oy9wJmd0OwotJmx0O3ByZSZndDtmdW5jdGlvbiBhKHgp
ID0gMTJ4LzEzLjUmbHQ7L3ByZSZndDs8L3ByZT4KLTwvZGl2PgotCi08aDI+PGEgbmFtZT1zcGVj
aWZpY2l0eT45LiBDYWxjdWxhdGluZyBhIHNlbGVjdG9yJ3Mgc3BlY2lmaWNpdHk8L2E+PC9oMj4K
LQotPHA+QSBzZWxlY3RvcidzIHNwZWNpZmljaXR5IGlzIGNhbGN1bGF0ZWQgYXMgZm9sbG93czo8
L3A+Ci0KLTx1bD4KLSAgPGxpPmNvdW50IHRoZSBudW1iZXIgb2YgSUQgc2VsZWN0b3JzIGluIHRo
ZSBzZWxlY3RvciAoPSBhKTwvbGk+Ci0gIDxsaT5jb3VudCB0aGUgbnVtYmVyIG9mIGNsYXNzIHNl
bGVjdG9ycywgYXR0cmlidXRlcyBzZWxlY3RvcnMsIGFuZCBwc2V1ZG8tY2xhc3NlcyBpbiB0aGUg
c2VsZWN0b3IgKD0gYik8L2xpPgotICA8bGk+Y291bnQgdGhlIG51bWJlciBvZiBlbGVtZW50IG5h
bWVzIGluIHRoZSBzZWxlY3RvciAoPSBjKTwvbGk+Ci0gIDxsaT5pZ25vcmUgcHNldWRvLWVsZW1l
bnRzPC9saT4KLTwvdWw+Ci0KLTxwPlNlbGVjdG9ycyBpbnNpZGUgPGEgaHJlZj0iI25lZ2F0aW9u
Ij50aGUgbmVnYXRpb24gcHNldWRvLWNsYXNzPC9hPgotYXJlIGNvdW50ZWQgbGlrZSBhbnkgb3Ro
ZXIsIGJ1dCB0aGUgbmVnYXRpb24gaXRzZWxmIGRvZXMgbm90IGNvdW50IGFzCi1hIHBzZXVkby1j
bGFzcy48L3A+Ci0KLTxwPkNvbmNhdGVuYXRpbmcgdGhlIHRocmVlIG51bWJlcnMgYS1iLWMgKGlu
IGEgbnVtYmVyIHN5c3RlbSB3aXRoIGEKLWxhcmdlIGJhc2UpIGdpdmVzIHRoZSBzcGVjaWZpY2l0
eS48L3A+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotPHA+RXhhbXBsZXM6PC9wPgotPHByZT4q
ICAgICAgICAgICAgICAgLyogYT0wIGI9MCBjPTAgLSZndDsgc3BlY2lmaWNpdHkgPSAgIDAgKi8K
LUxJICAgICAgICAgICAgICAvKiBhPTAgYj0wIGM9MSAtJmd0OyBzcGVjaWZpY2l0eSA9ICAgMSAq
LwotVUwgTEkgICAgICAgICAgIC8qIGE9MCBiPTAgYz0yIC0mZ3Q7IHNwZWNpZmljaXR5ID0gICAy
ICovCi1VTCBPTCtMSSAgICAgICAgLyogYT0wIGI9MCBjPTMgLSZndDsgc3BlY2lmaWNpdHkgPSAg
IDMgKi8KLUgxICsgKltSRUw9dXBdICAvKiBhPTAgYj0xIGM9MSAtJmd0OyBzcGVjaWZpY2l0eSA9
ICAxMSAqLwotVUwgT0wgTEkucmVkICAgIC8qIGE9MCBiPTEgYz0zIC0mZ3Q7IHNwZWNpZmljaXR5
ID0gIDEzICovCi1MSS5yZWQubGV2ZWwgICAgLyogYT0wIGI9MiBjPTEgLSZndDsgc3BlY2lmaWNp
dHkgPSAgMjEgKi8KLSN4MzR5ICAgICAgICAgICAvKiBhPTEgYj0wIGM9MCAtJmd0OyBzcGVjaWZp
Y2l0eSA9IDEwMCAqLwotI3MxMjpub3QoRk9PKSAgIC8qIGE9MSBiPTAgYz0xIC0mZ3Q7IHNwZWNp
ZmljaXR5ID0gMTAxICovCi08L3ByZT4KLTwvZGl2PgotCi08cCBjbGFzcz0ibm90ZSI+PHN0cm9u
Zz5Ob3RlOjwvc3Ryb25nPiB0aGUgc3BlY2lmaWNpdHkgb2YgdGhlIHN0eWxlcwotc3BlY2lmaWVk
IGluIGFuIEhUTUwgPGNvZGU+c3R5bGU8L2NvZGU+IGF0dHJpYnV0ZSBpcyBkZXNjcmliZWQgaW4g
Q1NTCi0yLjEuIDxhIGhyZWY9IiNyZWZzQ1NTMjEiPltDU1MyMV08L2E+LjwvcD4KLQotPGgyPjxh
IG5hbWU9dzNjc2VsZ3JhbW1hcj4xMC4gVGhlIGdyYW1tYXIgb2YgU2VsZWN0b3JzPC9hPjwvaDI+
Ci0KLTxoMz48YSBuYW1lPWdyYW1tYXI+MTAuMS4gR3JhbW1hcjwvYT48L2gzPgotCi08cD5UaGUg
Z3JhbW1hciBiZWxvdyBkZWZpbmVzIHRoZSBzeW50YXggb2YgU2VsZWN0b3JzLiAgSXQgaXMgZ2xv
YmFsbHkKLUxMKDEpIGFuZCBjYW4gYmUgbG9jYWxseSBMTCgyKSAoYnV0IG5vdGUgdGhhdCBtb3N0
IFVBJ3Mgc2hvdWxkIG5vdCB1c2UKLWl0IGRpcmVjdGx5LCBzaW5jZSBpdCBkb2Vzbid0IGV4cHJl
c3MgdGhlIHBhcnNpbmcgY29udmVudGlvbnMpLiBUaGUKLWZvcm1hdCBvZiB0aGUgcHJvZHVjdGlv
bnMgaXMgb3B0aW1pemVkIGZvciBodW1hbiBjb25zdW1wdGlvbiBhbmQgc29tZQotc2hvcnRoYW5k
IG5vdGF0aW9ucyBiZXlvbmQgWWFjYyAoc2VlIDxhIGhyZWY9IiNyZWZzWUFDQyI+W1lBQ0NdPC9h
PikKLWFyZSB1c2VkOjwvcD4KLQotPHVsPgotICA8bGk+PGI+KjwvYj46IDAgb3IgbW9yZQotICA8
bGk+PGI+KzwvYj46IDEgb3IgbW9yZQotICA8bGk+PGI+PzwvYj46IDAgb3IgMQotICA8bGk+PGI+
fDwvYj46IHNlcGFyYXRlcyBhbHRlcm5hdGl2ZXMKLSAgPGxpPjxiPlsgXTwvYj46IGdyb3VwaW5n
IDwvbGk+Ci08L3VsPgotCi08cD5UaGUgcHJvZHVjdGlvbnMgYXJlOjwvcD4KLQotPHByZT5zZWxl
Y3RvcnNfZ3JvdXAKLSAgOiBzZWxlY3RvciBbIENPTU1BIFMqIHNlbGVjdG9yIF0qCi0gIDsKLQot
c2VsZWN0b3IKLSAgOiBzaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2UgWyBjb21iaW5hdG9yIHNpbXBs
ZV9zZWxlY3Rvcl9zZXF1ZW5jZSBdKgotICA7Ci0KLWNvbWJpbmF0b3IKLSAgLyogY29tYmluYXRv
cnMgY2FuIGJlIHN1cnJvdW5kZWQgYnkgd2hpdGUgc3BhY2UgKi8KLSAgOiBQTFVTIFMqIHwgR1JF
QVRFUiBTKiB8IFRJTERFIFMqIHwgUysKLSAgOwotCi1zaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2UK
LSAgOiBbIHR5cGVfc2VsZWN0b3IgfCB1bml2ZXJzYWwgXQotICAgIFsgSEFTSCB8IGNsYXNzIHwg
YXR0cmliIHwgcHNldWRvIHwgbmVnYXRpb24gXSoKLSAgfCBbIEhBU0ggfCBjbGFzcyB8IGF0dHJp
YiB8IHBzZXVkbyB8IG5lZ2F0aW9uIF0rCi0gIDsKLQotdHlwZV9zZWxlY3RvcgotICA6IFsgbmFt
ZXNwYWNlX3ByZWZpeCBdPyBlbGVtZW50X25hbWUKLSAgOwotCi1uYW1lc3BhY2VfcHJlZml4Ci0g
IDogWyBJREVOVCB8ICcqJyBdPyAnfCcKLSAgOwotCi1lbGVtZW50X25hbWUKLSAgOiBJREVOVAot
ICA7Ci0KLXVuaXZlcnNhbAotICA6IFsgbmFtZXNwYWNlX3ByZWZpeCBdPyAnKicKLSAgOwotCi1j
bGFzcwotICA6ICcuJyBJREVOVAotICA7Ci0KLWF0dHJpYgotICA6ICdbJyBTKiBbIG5hbWVzcGFj
ZV9wcmVmaXggXT8gSURFTlQgUyoKLSAgICAgICAgWyBbIFBSRUZJWE1BVENIIHwKLSAgICAgICAg
ICAgIFNVRkZJWE1BVENIIHwKLSAgICAgICAgICAgIFNVQlNUUklOR01BVENIIHwKLSAgICAgICAg
ICAgICc9JyB8Ci0gICAgICAgICAgICBJTkNMVURFUyB8Ci0gICAgICAgICAgICBEQVNITUFUQ0gg
XSBTKiBbIElERU5UIHwgU1RSSU5HIF0gUyoKLSAgICAgICAgXT8gJ10nCi0gIDsKLQotcHNldWRv
Ci0gIC8qICc6Oicgc3RhcnRzIGEgcHNldWRvLWVsZW1lbnQsICc6JyBhIHBzZXVkby1jbGFzcyAq
LwotICAvKiBFeGNlcHRpb25zOiA6Zmlyc3QtbGluZSwgOmZpcnN0LWxldHRlciwgOmJlZm9yZSBh
bmQgOmFmdGVyLiAqLwotICAvKiBOb3RlIHRoYXQgcHNldWRvLWVsZW1lbnRzIGFyZSByZXN0cmlj
dGVkIHRvIG9uZSBwZXIgc2VsZWN0b3IgYW5kICovCi0gIC8qIG9jY3VyIG9ubHkgaW4gdGhlIGxh
c3Qgc2ltcGxlX3NlbGVjdG9yX3NlcXVlbmNlLiAqLwotICA6ICc6JyAnOic/IFsgSURFTlQgfCBm
dW5jdGlvbmFsX3BzZXVkbyBdCi0gIDsKLQotZnVuY3Rpb25hbF9wc2V1ZG8KLSAgOiBGVU5DVElP
TiBTKiBleHByZXNzaW9uICcpJwotICA7Ci0KLWV4cHJlc3Npb24KLSAgLyogSW4gQ1NTMywgdGhl
IGV4cHJlc3Npb25zIGFyZSBpZGVudGlmaWVycywgc3RyaW5ncywgKi8KLSAgLyogb3Igb2YgdGhl
IGZvcm0gImFuK2IiICovCi0gIDogWyBbIFBMVVMgfCAnLScgfCBESU1FTlNJT04gfCBOVU1CRVIg
fCBTVFJJTkcgfCBJREVOVCBdIFMqIF0rCi0gIDsKLQotbmVnYXRpb24KLSAgOiBOT1QgUyogbmVn
YXRpb25fYXJnIFMqICcpJwotICA7Ci0KLW5lZ2F0aW9uX2FyZwotICA6IHR5cGVfc2VsZWN0b3Ig
fCB1bml2ZXJzYWwgfCBIQVNIIHwgY2xhc3MgfCBhdHRyaWIgfCBwc2V1ZG8KLSAgOzwvcHJlPgot
Ci0KLTxoMz48YSBuYW1lPWxleD4xMC4yLiBMZXhpY2FsIHNjYW5uZXI8L2E+PC9oMz4KLQotPHA+
VGhlIGZvbGxvd2luZyBpcyB0aGUgPGEgbmFtZT14Mz50b2tlbml6ZXI8L2E+LCB3cml0dGVuIGlu
IEZsZXggKHNlZQotPGEgaHJlZj0iI3JlZnNGTEVYIj5bRkxFWF08L2E+KSBub3RhdGlvbi4gVGhl
IHRva2VuaXplciBpcwotY2FzZS1pbnNlbnNpdGl2ZS48L3A+Ci0KLTxwPlRoZSB0d28gb2NjdXJy
ZW5jZXMgb2YgIlwzNzciIHJlcHJlc2VudCB0aGUgaGlnaGVzdCBjaGFyYWN0ZXIKLW51bWJlciB0
aGF0IGN1cnJlbnQgdmVyc2lvbnMgb2YgRmxleCBjYW4gZGVhbCB3aXRoIChkZWNpbWFsIDI1NSku
IFRoZXkKLXNob3VsZCBiZSByZWFkIGFzICJcNDE3Nzc3NyIgKGRlY2ltYWwgMTExNDExMSksIHdo
aWNoIGlzIHRoZSBoaWdoZXN0Ci1wb3NzaWJsZSBjb2RlIHBvaW50IGluIFVuaWNvZGUvSVNPLTEw
NjQ2LiA8YQotaHJlZj0iI3JlZnNVTklDT0RFIj5bVU5JQ09ERV08L2E+PC9wPgotCi08cHJlPiVv
cHRpb24gY2FzZS1pbnNlbnNpdGl2ZQotCi1pZGVudCAgICAgWy1dP3tubXN0YXJ0fXtubWNoYXJ9
KgotbmFtZSAgICAgIHtubWNoYXJ9Kwotbm1zdGFydCAgIFtfYS16XXx7bm9uYXNjaWl9fHtlc2Nh
cGV9Ci1ub25hc2NpaSAgW15cMC1cMTc3XQotdW5pY29kZSAgIFxcWzAtOWEtZl17MSw2fShcclxu
fFsgXG5cclx0XGZdKT8KLWVzY2FwZSAgICB7dW5pY29kZX18XFxbXlxuXHJcZjAtOWEtZl0KLW5t
Y2hhciAgICBbX2EtejAtOS1dfHtub25hc2NpaX18e2VzY2FwZX0KLW51bSAgICAgICBbMC05XSt8
WzAtOV0qXC5bMC05XSsKLXN0cmluZyAgICB7c3RyaW5nMX18e3N0cmluZzJ9Ci1zdHJpbmcxICAg
XCIoW15cblxyXGZcXCJdfFxce25sfXx7bm9uYXNjaWl9fHtlc2NhcGV9KSpcIgotc3RyaW5nMiAg
IFwnKFteXG5cclxmXFwnXXxcXHtubH18e25vbmFzY2lpfXx7ZXNjYXBlfSkqXCcKLWludmFsaWQg
ICB7aW52YWxpZDF9fHtpbnZhbGlkMn0KLWludmFsaWQxICBcIihbXlxuXHJcZlxcIl18XFx7bmx9
fHtub25hc2NpaX18e2VzY2FwZX0pKgotaW52YWxpZDIgIFwnKFteXG5cclxmXFwnXXxcXHtubH18
e25vbmFzY2lpfXx7ZXNjYXBlfSkqCi1ubCAgICAgICAgXG58XHJcbnxccnxcZgotdyAgICAgICAg
IFsgXHRcclxuXGZdKgotCi0lJQotCi1bIFx0XHJcblxmXSsgICAgIHJldHVybiBTOwotCi0ifj0i
ICAgICAgICAgICAgIHJldHVybiBJTkNMVURFUzsKLSJ8PSIgICAgICAgICAgICAgcmV0dXJuIERB
U0hNQVRDSDsKLSJePSIgICAgICAgICAgICAgcmV0dXJuIFBSRUZJWE1BVENIOwotIiQ9IiAgICAg
ICAgICAgICByZXR1cm4gU1VGRklYTUFUQ0g7Ci0iKj0iICAgICAgICAgICAgIHJldHVybiBTVUJT
VFJJTkdNQVRDSDsKLXtpZGVudH0gICAgICAgICAgcmV0dXJuIElERU5UOwote3N0cmluZ30gICAg
ICAgICByZXR1cm4gU1RSSU5HOwote2lkZW50fSIoIiAgICAgICByZXR1cm4gRlVOQ1RJT047Ci17
bnVtfSAgICAgICAgICAgIHJldHVybiBOVU1CRVI7Ci0iIyJ7bmFtZX0gICAgICAgIHJldHVybiBI
QVNIOwote3d9IisiICAgICAgICAgICByZXR1cm4gUExVUzsKLXt3fSImZ3Q7IiAgICAgICAgICAg
cmV0dXJuIEdSRUFURVI7Ci17d30iLCIgICAgICAgICAgIHJldHVybiBDT01NQTsKLXt3fSJ+IiAg
ICAgICAgICAgcmV0dXJuIFRJTERFOwotIjpub3QoIiAgICAgICAgICByZXR1cm4gTk9UOwotQHtp
ZGVudH0gICAgICAgICByZXR1cm4gQVRLRVlXT1JEOwote2ludmFsaWR9ICAgICAgICByZXR1cm4g
SU5WQUxJRDsKLXtudW19JSAgICAgICAgICAgcmV0dXJuIFBFUkNFTlRBR0U7Ci17bnVtfXtpZGVu
dH0gICAgIHJldHVybiBESU1FTlNJT047Ci0iJmx0OyEtLSIgICAgICAgICAgIHJldHVybiBDRE87
Ci0iLS0mZ3Q7IiAgICAgICAgICAgIHJldHVybiBDREM7Ci0KLSJ1cmwoInt3fXtzdHJpbmd9e3d9
IikiICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVSSTsKLSJ1cmwoInt3fShbISMk
JSYqLX5dfHtub25hc2NpaX18e2VzY2FwZX0pKnt3fSIpIiAgcmV0dXJuIFVSSTsKLVVcK1swLTlh
LWY/XXsxLDZ9KC1bMC05YS1mXXsxLDZ9KT8gICAgICAgICAgICAgICAgcmV0dXJuIFVOSUNPREVf
UkFOR0U7Ci0KLVwvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLyAgICAgICAgICAgICAgICAg
ICAgLyogaWdub3JlIGNvbW1lbnRzICovCi0KLS4gICAgICAgICAgICAgICAgcmV0dXJuICp5eXRl
eHQ7PC9wcmU+Ci0KLQotCi08aDI+PGEgbmFtZT1kb3dubGV2ZWw+MTEuIE5hbWVzcGFjZXMgYW5k
IGRvd24tbGV2ZWwgY2xpZW50czwvYT48L2gyPgotCi08cD5BbiBpbXBvcnRhbnQgaXNzdWUgaXMg
dGhlIGludGVyYWN0aW9uIG9mIENTUyBzZWxlY3RvcnMgd2l0aCBYTUwKLWRvY3VtZW50cyBpbiB3
ZWIgY2xpZW50cyB0aGF0IHdlcmUgcHJvZHVjZWQgcHJpb3IgdG8gdGhpcwotZG9jdW1lbnQuIFVu
Zm9ydHVuYXRlbHksIGR1ZSB0byB0aGUgZmFjdCB0aGF0IG5hbWVzcGFjZXMgbXVzdCBiZQotbWF0
Y2hlZCBiYXNlZCBvbiB0aGUgVVJJIHdoaWNoIGlkZW50aWZpZXMgdGhlIG5hbWVzcGFjZSwgbm90
IHRoZQotbmFtZXNwYWNlIHByZWZpeCwgc29tZSBtZWNoYW5pc20gaXMgcmVxdWlyZWQgdG8gaWRl
bnRpZnkgbmFtZXNwYWNlcyBpbgotQ1NTIGJ5IHRoZWlyIFVSSSBhcyB3ZWxsLiBXaXRob3V0IHN1
Y2ggYSBtZWNoYW5pc20sIGl0IGlzIGltcG9zc2libGUKLXRvIGNvbnN0cnVjdCBhIENTUyBzdHls
ZSBzaGVldCB3aGljaCB3aWxsIHByb3Blcmx5IG1hdGNoIHNlbGVjdG9ycyBpbgotYWxsIGNhc2Vz
IGFnYWluc3QgYSByYW5kb20gc2V0IG9mIFhNTCBkb2N1bWVudHMuIEhvd2V2ZXIsIGdpdmVuCi1j
b21wbGV0ZSBrbm93bGVkZ2Ugb2YgdGhlIFhNTCBkb2N1bWVudCB0byB3aGljaCBhIHN0eWxlIHNo
ZWV0IGlzIHRvIGJlCi1hcHBsaWVkLCBhbmQgYSBsaW1pdGVkIHVzZSBvZiBuYW1lc3BhY2VzIHdp
dGhpbiB0aGUgWE1MIGRvY3VtZW50LCBpdAotaXMgcG9zc2libGUgdG8gY29uc3RydWN0IGEgc3R5
bGUgc2hlZXQgaW4gd2hpY2ggc2VsZWN0b3JzIHdvdWxkIG1hdGNoCi1lbGVtZW50cyBhbmQgYXR0
cmlidXRlcyBjb3JyZWN0bHkuPC9wPgotCi08cD5JdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBhIGRv
d24tbGV2ZWwgQ1NTIGNsaWVudCB3aWxsIChpZiBpdAotcHJvcGVybHkgY29uZm9ybXMgdG8gQ1NT
IGZvcndhcmQgY29tcGF0aWJsZSBwYXJzaW5nIHJ1bGVzKSBpZ25vcmUgYWxsCi08Y29kZT5AbmFt
ZXNwYWNlPC9jb2RlPiBhdC1ydWxlcywgYXMgd2VsbCBhcyBhbGwgc3R5bGUgcnVsZXMgdGhhdCBt
YWtlCi11c2Ugb2YgbmFtZXNwYWNlIHF1YWxpZmllZCBlbGVtZW50IHR5cGUgb3IgYXR0cmlidXRl
IHNlbGVjdG9ycy4gVGhlCi1zeW50YXggb2YgZGVsaW1pdGluZyBuYW1lc3BhY2UgcHJlZml4ZXMg
aW4gQ1NTIHdhcyBkZWxpYmVyYXRlbHkgY2hvc2VuCi1zbyB0aGF0IGRvd24tbGV2ZWwgQ1NTIGNs
aWVudHMgd291bGQgaWdub3JlIHRoZSBzdHlsZSBydWxlcyByYXRoZXIKLXRoYW4gcG9zc2libHkg
bWF0Y2ggdGhlbSBpbmNvcnJlY3RseS48L3A+Ci0KLTxwPlRoZSB1c2Ugb2YgZGVmYXVsdCBuYW1l
c3BhY2VzIGluIENTUyBtYWtlcyBpdCBwb3NzaWJsZSB0byB3cml0ZQotZWxlbWVudCB0eXBlIHNl
bGVjdG9ycyB0aGF0IHdpbGwgZnVuY3Rpb24gaW4gYm90aCBuYW1lc3BhY2UgYXdhcmUgQ1NTCi1j
bGllbnRzIGFzIHdlbGwgYXMgZG93bi1sZXZlbCBjbGllbnRzLiBJdCBzaG91bGQgYmUgbm90ZWQg
dGhhdAotZG93bi1sZXZlbCBjbGllbnRzIG1heSBpbmNvcnJlY3RseSBtYXRjaCBzZWxlY3RvcnMg
YWdhaW5zdCBYTUwKLWVsZW1lbnRzIGluIG90aGVyIG5hbWVzcGFjZXMuPC9wPgotCi08cD5UaGUg
Zm9sbG93aW5nIGFyZSBzY2VuYXJpb3MgYW5kIGV4YW1wbGVzIGluIHdoaWNoIGl0IGlzIHBvc3Np
YmxlIHRvCi1jb25zdHJ1Y3Qgc3R5bGUgc2hlZXRzIHdoaWNoIHdvdWxkIGZ1bmN0aW9uIHByb3Bl
cmx5IGluIHdlYiBjbGllbnRzCi10aGF0IGRvIG5vdCBpbXBsZW1lbnQgdGhpcyBwcm9wb3NhbC48
L3A+Ci0KLTxvbD4KLSAgPGxpPgotCi0gICA8cD5UaGUgWE1MIGRvY3VtZW50IGRvZXMgbm90IHVz
ZSBuYW1lc3BhY2VzLjwvcD4KLQotICAgPHVsPgotCi0gICAgPGxpPkluIHRoaXMgY2FzZSwgaXQg
aXMgb2J2aW91c2x5IG5vdCBuZWNlc3NhcnkgdG8gZGVjbGFyZSBvciB1c2UKLSAgICBuYW1lc3Bh
Y2VzIGluIHRoZSBzdHlsZSBzaGVldC4gU3RhbmRhcmQgQ1NTIGVsZW1lbnQgdHlwZSBhbmQKLSAg
ICBhdHRyaWJ1dGUgc2VsZWN0b3JzIHdpbGwgZnVuY3Rpb24gYWRlcXVhdGVseSBpbiBhIGRvd24t
bGV2ZWwKLSAgICBjbGllbnQuPC9saT4KLQotICAgIDxsaT5JbiBhIENTUyBuYW1lc3BhY2UgYXdh
cmUgY2xpZW50LCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZgotICAgIGVsZW1lbnQgc2VsZWN0b3Jz
IG1hdGNoaW5nIHdpdGhvdXQgcmVnYXJkIHRvIG5hbWVzcGFjZSB3aWxsCi0gICAgZnVuY3Rpb24g
cHJvcGVybHkgYWdhaW5zdCBhbGwgZWxlbWVudHMsIHNpbmNlIG5vIG5hbWVzcGFjZXMgYXJlCi0g
ICAgcHJlc2VudC4gSG93ZXZlciwgdGhlIHVzZSBvZiBzcGVjaWZpYyBlbGVtZW50IHR5cGUgc2Vs
ZWN0b3JzIHRoYXQKLSAgICBtYXRjaCBvbmx5IGVsZW1lbnRzIHRoYXQgaGF2ZSBubyBuYW1lc3Bh
Y2UgKCI8Y29kZT58bmFtZTwvY29kZT4iKQotICAgIHdpbGwgZ3VhcmFudGVlIHRoYXQgc2VsZWN0
b3JzIHdpbGwgbWF0Y2ggb25seSBYTUwgZWxlbWVudHMgdGhhdCBkbwotICAgIG5vdCBoYXZlIGEg
ZGVjbGFyZWQgbmFtZXNwYWNlLiA8L2xpPgotCi0gICA8L3VsPgotCi0gIDwvbGk+Ci0KLSAgPGxp
PgotCi0gICA8cD5UaGUgWE1MIGRvY3VtZW50IGRlZmluZXMgYSBzaW5nbGUsIGRlZmF1bHQgbmFt
ZXNwYWNlIHVzZWQKLSAgIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50LiBObyBuYW1lc3BhY2UgcHJl
Zml4ZXMgYXJlIHVzZWQgaW4gZWxlbWVudAotICAgbmFtZXMuPC9wPgotCi0gICA8dWw+Ci0KLSAg
ICA8bGk+SW4gdGhpcyBjYXNlLCBhIGRvd24tbGV2ZWwgY2xpZW50IHdpbGwgZnVuY3Rpb24gYXMg
aWYKLSAgICBuYW1lc3BhY2VzIHdlcmUgbm90IHVzZWQgaW4gdGhlIFhNTCBkb2N1bWVudCBhdCBh
bGwuIFN0YW5kYXJkIENTUwotICAgIGVsZW1lbnQgdHlwZSBhbmQgYXR0cmlidXRlIHNlbGVjdG9y
cyB3aWxsIG1hdGNoIGFnYWluc3QgYWxsCi0gICAgZWxlbWVudHMuIDwvbGk+Ci0KLSAgIDwvdWw+
Ci0KLSAgPC9saT4KLQotICA8bGk+Ci0KLSAgIDxwPlRoZSBYTUwgZG9jdW1lbnQgZG9lcyA8Yj5u
b3Q8L2I+IHVzZSBhIGRlZmF1bHQgbmFtZXNwYWNlLCBhbGwKLSAgIG5hbWVzcGFjZSBwcmVmaXhl
cyB1c2VkIGFyZSBrbm93biB0byB0aGUgc3R5bGUgc2hlZXQgYXV0aG9yLCBhbmQKLSAgIHRoZXJl
IGlzIGEgZGlyZWN0IG1hcHBpbmcgYmV0d2VlbiBuYW1lc3BhY2UgcHJlZml4ZXMgYW5kIG5hbWVz
cGFjZQotICAgVVJJcy4gKEEgZ2l2ZW4gcHJlZml4IG1heSBvbmx5IGJlIG1hcHBlZCB0byBvbmUg
bmFtZXNwYWNlIFVSSQotICAgdGhyb3VnaG91dCB0aGUgWE1MIGRvY3VtZW50OyB0aGVyZSBtYXkg
YmUgbXVsdGlwbGUgcHJlZml4ZXMgbWFwcGVkCi0gICB0byB0aGUgc2FtZSBVUkkpLjwvcD4KLQot
ICAgPHVsPgotCi0gICAgPGxpPkluIHRoaXMgY2FzZSwgdGhlIGRvd24tbGV2ZWwgY2xpZW50IHdp
bGwgdmlldyBhbmQgbWF0Y2gKLSAgICBlbGVtZW50IHR5cGUgYW5kIGF0dHJpYnV0ZSBzZWxlY3Rv
cnMgYmFzZWQgb24gdGhlaXIgZnVsbHkKLSAgICBxdWFsaWZpZWQgbmFtZSwgbm90IHRoZSBsb2Nh
bCBwYXJ0IGFzIG91dGxpbmVkIGluIHRoZSA8YQotICAgIGhyZWY9IiN0eXBlbm1zcCI+VHlwZSBz
ZWxlY3RvcnMgYW5kIE5hbWVzcGFjZXM8L2E+IHNlY3Rpb24uIENTUwotICAgIHNlbGVjdG9ycyBt
YXkgYmUgZGVjbGFyZWQgdXNpbmcgYW4gZXNjYXBlZCBjb2xvbiAiPGNvZGU+XDo8L2NvZGU+Igot
ICAgIHRvIGRlc2NyaWJlIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZXMsIGUuZy4KLSAgICAiPGNv
ZGU+aHRtbFw6aDE8L2NvZGU+IiB3aWxsIG1hdGNoCi0gICAgPGNvZGU+Jmx0O2h0bWw6aDEmZ3Q7
PC9jb2RlPi4gU2VsZWN0b3JzIHVzaW5nIHRoZSBxdWFsaWZpZWQgbmFtZQotICAgIHdpbGwgb25s
eSBtYXRjaCBYTUwgZWxlbWVudHMgdGhhdCB1c2UgdGhlIHNhbWUgcHJlZml4LiBPdGhlcgotICAg
IG5hbWVzcGFjZSBwcmVmaXhlcyB1c2VkIGluIHRoZSBYTUwgdGhhdCBhcmUgbWFwcGVkIHRvIHRo
ZSBzYW1lIFVSSQotICAgIHdpbGwgbm90IG1hdGNoIGFzIGV4cGVjdGVkIHVubGVzcyBhZGRpdGlv
bmFsIENTUyBzdHlsZSBydWxlcyBhcmUKLSAgICBkZWNsYXJlZCBmb3IgdGhlbS48L2xpPgotCi0g
ICAgPGxpPk5vdGUgdGhhdCBzZWxlY3RvcnMgZGVjbGFyZWQgaW4gdGhpcyBmYXNoaW9uIHdpbGwK
LSAgICA8ZW0+b25seTwvZW0+IG1hdGNoIGluIGRvd24tbGV2ZWwgY2xpZW50cy4gQSBDU1MgbmFt
ZXNwYWNlIGF3YXJlCi0gICAgY2xpZW50IHdpbGwgbWF0Y2ggZWxlbWVudCB0eXBlIGFuZCBhdHRy
aWJ1dGUgc2VsZWN0b3JzIGJhc2VkIG9uCi0gICAgdGhlIG5hbWUncyBsb2NhbCBwYXJ0LiBTZWxl
Y3RvcnMgZGVjbGFyZWQgd2l0aCB0aGUgZnVsbHkKLSAgICBxdWFsaWZpZWQgbmFtZSB3aWxsIG5v
dCBtYXRjaCAodW5sZXNzIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBwcmVmaXgKLSAgICBpbiB0aGUg
ZnVsbHkgcXVhbGlmaWVkIG5hbWUpLjwvbGk+Ci0KLSAgIDwvdWw+Ci0KLSAgPC9saT4KLQotIDwv
b2w+Ci0KLTxwPkluIG90aGVyIHNjZW5hcmlvczogd2hlbiB0aGUgbmFtZXNwYWNlIHByZWZpeGVz
IHVzZWQgaW4gdGhlIFhNTCBhcmUKLW5vdCBrbm93biBpbiBhZHZhbmNlIGJ5IHRoZSBzdHlsZSBz
aGVldCBhdXRob3I7IG9yIGEgY29tYmluYXRpb24gb2YKLWVsZW1lbnRzIHdpdGggbm8gbmFtZXNw
YWNlIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZWxlbWVudHMgdXNpbmcKLWEgZGVmYXVs
dCBuYW1lc3BhY2U7IG9yIHRoZSBzYW1lIG5hbWVzcGFjZSBwcmVmaXggaXMgbWFwcGVkIHRvCi08
ZW0+ZGlmZmVyZW50PC9lbT4gbmFtZXNwYWNlIFVSSXMgd2l0aGluIHRoZSBzYW1lIGRvY3VtZW50
LCBvciBpbgotZGlmZmVyZW50IGRvY3VtZW50czsgaXQgaXMgaW1wb3NzaWJsZSB0byBjb25zdHJ1
Y3QgYSBDU1Mgc3R5bGUgc2hlZXQKLXRoYXQgd2lsbCBmdW5jdGlvbiBwcm9wZXJseSBhZ2FpbnN0
IGFsbCBlbGVtZW50cyBpbiB0aG9zZSBkb2N1bWVudHMsCi11bmxlc3MsIHRoZSBzdHlsZSBzaGVl
dCBpcyB3cml0dGVuIHVzaW5nIGEgbmFtZXNwYWNlIFVSSSBzeW50YXggKGFzCi1vdXRsaW5lZCBp
biB0aGlzIGRvY3VtZW50IG9yIHNpbWlsYXIpIGFuZCB0aGUgZG9jdW1lbnQgaXMgcHJvY2Vzc2Vk
IGJ5Ci1hIENTUyBhbmQgWE1MIG5hbWVzcGFjZSBhd2FyZSBjbGllbnQuPC9wPgotCi08aDI+PGEg
bmFtZT1wcm9maWxpbmc+MTIuIFByb2ZpbGVzPC9hPjwvaDI+Ci0KLTxwPkVhY2ggc3BlY2lmaWNh
dGlvbiB1c2luZyBTZWxlY3RvcnMgbXVzdCBkZWZpbmUgdGhlIHN1YnNldCBvZiBXM0MKLVNlbGVj
dG9ycyBpdCBhbGxvd3MgYW5kIGV4Y2x1ZGVzLCBhbmQgZGVzY3JpYmUgdGhlIGxvY2FsIG1lYW5p
bmcgb2YKLWFsbCB0aGUgY29tcG9uZW50cyBvZiB0aGF0IHN1YnNldC48L3A+Ci0KLTxwPk5vbiBu
b3JtYXRpdmUgZXhhbXBsZXM6Ci0KLTxkaXYgY2xhc3M9InByb2ZpbGUiPgotPHRhYmxlIGNsYXNz
PSJ0cHJvZmlsZSI+Ci0gIDx0Ym9keT4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0idGl0bGUiIGNv
bHNwYW49Mj5TZWxlY3RvcnMgcHJvZmlsZTwvdGg+PC90cj4KLSAgPHRyPgotICAgIDx0aD5TcGVj
aWZpY2F0aW9uPC90aD4KLSAgICA8dGQ+Q1NTIGxldmVsIDE8L3RkPjwvdHI+Ci0gIDx0cj4KLSAg
ICA8dGg+QWNjZXB0czwvdGg+Ci0gICAgPHRkPnR5cGUgc2VsZWN0b3JzPGJyPmNsYXNzIHNlbGVj
dG9yczxicj5JRCBzZWxlY3RvcnM8YnI+OmxpbmssCi0gICAgICA6dmlzaXRlZCBhbmQgOmFjdGl2
ZSBwc2V1ZG8tY2xhc3Nlczxicj5kZXNjZW5kYW50IGNvbWJpbmF0b3IKLSAgICAgPGJyPjo6Zmly
c3QtbGluZSBhbmQgOjpmaXJzdC1sZXR0ZXIgcHNldWRvLWVsZW1lbnRzPC90ZD48L3RyPgotICA8
dHI+Ci0gICAgPHRoPkV4Y2x1ZGVzPC90aD4KLSAgICA8dGQ+Ci0KLTxwPnVuaXZlcnNhbCBzZWxl
Y3Rvcjxicj5hdHRyaWJ1dGUgc2VsZWN0b3JzPGJyPjpob3ZlciBhbmQgOmZvY3VzCi0gICAgICBw
c2V1ZG8tY2xhc3Nlczxicj46dGFyZ2V0IHBzZXVkby1jbGFzczxicj46bGFuZygpIHBzZXVkby1j
bGFzczxicj5hbGwgVUkKLSAgICAgIGVsZW1lbnQgc3RhdGVzIHBzZXVkby1jbGFzc2VzPGJyPmFs
bCBzdHJ1Y3R1cmFsCi0gICAgICBwc2V1ZG8tY2xhc3Nlczxicj5uZWdhdGlvbiBwc2V1ZG8tY2xh
c3M8YnI+YWxsCi0gICAgICBVSSBlbGVtZW50IGZyYWdtZW50cyBwc2V1ZG8tZWxlbWVudHM8YnI+
OjpiZWZvcmUgYW5kIDo6YWZ0ZXIKLSAgICAgIHBzZXVkby1lbGVtZW50czxicj5jaGlsZCBjb21i
aW5hdG9yczxicj5zaWJsaW5nIGNvbWJpbmF0b3JzCi0KLTxwPm5hbWVzcGFjZXM8L3RkPjwvdHI+
Ci0gIDx0cj4KLSAgICA8dGg+RXh0cmEgY29uc3RyYWludHM8L3RoPgotICAgIDx0ZD5vbmx5IG9u
ZSBjbGFzcyBzZWxlY3RvciBhbGxvd2VkIHBlciBzZXF1ZW5jZSBvZiBzaW1wbGUKLSAgc2VsZWN0
b3JzPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48YnI+PGJyPgotPHRhYmxlIGNsYXNzPSJ0cHJv
ZmlsZSI+Ci0gIDx0Ym9keT4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0idGl0bGUiIGNvbHNwYW49
Mj5TZWxlY3RvcnMgcHJvZmlsZTwvdGg+PC90cj4KLSAgPHRyPgotICAgIDx0aD5TcGVjaWZpY2F0
aW9uPC90aD4KLSAgICA8dGQ+Q1NTIGxldmVsIDI8L3RkPjwvdHI+Ci0gIDx0cj4KLSAgICA8dGg+
QWNjZXB0czwvdGg+Ci0gICAgPHRkPnR5cGUgc2VsZWN0b3JzPGJyPnVuaXZlcnNhbCBzZWxlY3Rv
cjxicj5hdHRyaWJ1dGUgcHJlc2VuY2UgYW5kCi0gICAgICB2YWx1ZXMgc2VsZWN0b3JzPGJyPmNs
YXNzIHNlbGVjdG9yczxicj5JRCBzZWxlY3RvcnM8YnI+OmxpbmssIDp2aXNpdGVkLAotICAgICAg
OmFjdGl2ZSwgOmhvdmVyLCA6Zm9jdXMsIDpsYW5nKCkgYW5kIDpmaXJzdC1jaGlsZCBwc2V1ZG8t
Y2xhc3NlcwotICAgICA8YnI+ZGVzY2VuZGFudCBjb21iaW5hdG9yPGJyPmNoaWxkIGNvbWJpbmF0
b3I8YnI+YWRqYWNlbnQgc2libGluZwotICAgICAgY29tYmluYXRvcjxicj46OmZpcnN0LWxpbmUg
YW5kIDo6Zmlyc3QtbGV0dGVyIHBzZXVkby1lbGVtZW50czxicj46OmJlZm9yZQotICAgICAgYW5k
IDo6YWZ0ZXIgcHNldWRvLWVsZW1lbnRzPC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRoPkV4Y2x1
ZGVzPC90aD4KLSAgICA8dGQ+Ci0KLTxwPmNvbnRlbnQgc2VsZWN0b3JzPGJyPnN1YnN0cmluZyBt
YXRjaGluZyBhdHRyaWJ1dGUKLSAgICAgIHNlbGVjdG9yczxicj46dGFyZ2V0IHBzZXVkby1jbGFz
c2VzPGJyPmFsbCBVSSBlbGVtZW50Ci0gICAgICBzdGF0ZXMgcHNldWRvLWNsYXNzZXM8YnI+YWxs
IHN0cnVjdHVyYWwgcHNldWRvLWNsYXNzZXMgb3RoZXIKLSAgICAgIHRoYW4gOmZpcnN0LWNoaWxk
PGJyPm5lZ2F0aW9uIHBzZXVkby1jbGFzczxicj5hbGwgVUkgZWxlbWVudAotICAgICAgZnJhZ21l
bnRzIHBzZXVkby1lbGVtZW50czxicj5nZW5lcmFsIHNpYmxpbmcgY29tYmluYXRvcnMKLQotPHA+
bmFtZXNwYWNlczwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0aD5FeHRyYSBjb25zdHJhaW50czwv
dGg+Ci0gICAgPHRkPm1vcmUgdGhhbiBvbmUgY2xhc3Mgc2VsZWN0b3IgcGVyIHNlcXVlbmNlIG9m
IHNpbXBsZSBzZWxlY3RvcnMgKENTUzEKLSAgICAgIGNvbnN0cmFpbnQpIGFsbG93ZWQ8L3RkPjwv
dHI+PC90Ym9keT48L3RhYmxlPgotCi08cD5JbiBDU1MsIHNlbGVjdG9ycyBleHByZXNzIHBhdHRl
cm4gbWF0Y2hpbmcgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggc3R5bGUKLXJ1bGVzIGFwcGx5
IHRvIGVsZW1lbnRzIGluIHRoZSBkb2N1bWVudCB0cmVlLgotCi08cD5UaGUgZm9sbG93aW5nIHNl
bGVjdG9yIChDU1MgbGV2ZWwgMikgd2lsbCA8Yj5tYXRjaDwvYj4gYWxsIGFuY2hvcnMgPGNvZGU+
YTwvY29kZT4KLXdpdGggYXR0cmlidXRlIDxjb2RlPm5hbWU8L2NvZGU+IHNldCBpbnNpZGUgYSBz
ZWN0aW9uIDEgaGVhZGVyIDxjb2RlPmgxPC9jb2RlPjoKLTxwcmU+aDEgYVtuYW1lXTwvcHJlPgot
Ci08cD5BbGwgQ1NTIGRlY2xhcmF0aW9ucyBhdHRhY2hlZCB0byBzdWNoIGEgc2VsZWN0b3IgYXJl
IGFwcGxpZWQgdG8gZWxlbWVudHMKLW1hdGNoaW5nIGl0LiA8L2Rpdj4KLQotPGRpdiBjbGFzcz0i
cHJvZmlsZSI+Ci08dGFibGUgY2xhc3M9InRwcm9maWxlIj4KLSAgPHRib2R5PgotICA8dHI+Ci0g
ICAgPHRoIGNsYXNzPSJ0aXRsZSIgY29sc3Bhbj0yPlNlbGVjdG9ycyBwcm9maWxlPC90aD48L3Ry
PgotICA8dHI+Ci0gICAgPHRoPlNwZWNpZmljYXRpb248L3RoPgotICAgICAgPHRkPlNUVFMgMzwv
dGQ+Ci0gICAgPC90cj4KLSAgPHRyPgotICAgIDx0aD5BY2NlcHRzPC90aD4KLSAgICA8dGQ+Ci0K
LTxwPnR5cGUgc2VsZWN0b3JzPGJyPnVuaXZlcnNhbCBzZWxlY3RvcnM8YnI+YXR0cmlidXRlIHNl
bGVjdG9yczxicj5jbGFzcwotICAgICAgc2VsZWN0b3JzPGJyPklEIHNlbGVjdG9yczxicj5hbGwg
c3RydWN0dXJhbCBwc2V1ZG8tY2xhc3Nlczxicj4KLSAgICAgICAgICBhbGwgY29tYmluYXRvcnMK
LQotPHA+bmFtZXNwYWNlczwvdGQ+PC90cj4KLSAgPHRyPgotICAgIDx0aD5FeGNsdWRlczwvdGg+
Ci0gICAgPHRkPm5vbi1hY2NlcHRlZCBwc2V1ZG8tY2xhc3Nlczxicj5wc2V1ZG8tZWxlbWVudHM8
YnI+PC90ZD48L3RyPgotICA8dHI+Ci0gICAgPHRoPkV4dHJhIGNvbnN0cmFpbnRzPC90aD4KLSAg
ICA8dGQ+c29tZSBzZWxlY3RvcnMgYW5kIGNvbWJpbmF0b3JzIGFyZSBub3QgYWxsb3dlZCBpbiBm
cmFnbWVudAotICAgICAgZGVzY3JpcHRpb25zIG9uIHRoZSByaWdodCBzaWRlIG9mIFNUVFMgZGVj
bGFyYXRpb25zLjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+Ci08Zm9ybT4KLTxpbnB1dCB0eXBl
PSJ0ZXh0IiBuYW1lPSJ0ZXN0MTAiLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4K
LTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1l
PSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0
ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1
dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28i
Lz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBu
YW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBl
PSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxp
bnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJm
b28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0
IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0
eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4K
LTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1l
PSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb28iLz4KLTxpbnB1dCB0eXBlPSJ0
ZXh0IiBuYW1lPSJmb28iLz4KLTwvZm9ybT4KLQotPHA+U2VsZWN0b3JzIGNhbiBiZSB1c2VkIGlu
IFNUVFMgMyBpbiB0d28gZGlmZmVyZW50Ci0gICAgbWFubmVyczoKLTxvbD4KLSAgPGxpPmEgc2Vs
ZWN0aW9uIG1lY2hhbmlzbSBlcXVpdmFsZW50IHRvIENTUyBzZWxlY3Rpb24gbWVjaGFuaXNtOiBk
ZWNsYXJhdGlvbnMKLSAgYXR0YWNoZWQgdG8gYSBnaXZlbiBzZWxlY3RvciBhcmUgYXBwbGllZCB0
byBlbGVtZW50cyBtYXRjaGluZyB0aGF0IHNlbGVjdG9yLAotICA8bGk+ZnJhZ21lbnQgZGVzY3Jp
cHRpb25zIHRoYXQgYXBwZWFyIG9uIHRoZSByaWdodCBzaWRlIG9mIGRlY2xhcmF0aW9ucy4KLTwv
bGk+PC9vbD48L2Rpdj4KLQotPGgyPjxhIG5hbWU9Q29uZm9ybWFuY2U+PC9hPjEzLiBDb25mb3Jt
YW5jZSBhbmQgcmVxdWlyZW1lbnRzPC9oMj4KLQotPHA+VGhpcyBzZWN0aW9uIGRlZmluZXMgY29u
Zm9ybWFuY2Ugd2l0aCB0aGUgcHJlc2VudCBzcGVjaWZpY2F0aW9uIG9ubHkuCi0KLTxwPlRoZSBp
bmFiaWxpdHkgb2YgYSB1c2VyIGFnZW50IHRvIGltcGxlbWVudCBwYXJ0IG9mIHRoaXMgc3BlY2lm
aWNhdGlvbiBkdWUgdG8KLXRoZSBsaW1pdGF0aW9ucyBvZiBhIHBhcnRpY3VsYXIgZGV2aWNlIChl
LmcuLCBub24gaW50ZXJhY3RpdmUgdXNlciBhZ2VudHMgd2lsbAotcHJvYmFibHkgbm90IGltcGxl
bWVudCBkeW5hbWljIHBzZXVkby1jbGFzc2VzIGJlY2F1c2UgdGhleSBtYWtlIG5vIHNlbnNlIHdp
dGhvdXQKLWludGVyYWN0aXZpdHkpIGRvZXMgbm90IGltcGx5IG5vbi1jb25mb3JtYW5jZS4KLQot
PHA+QWxsIHNwZWNpZmljYXRpb25zIHJldXNpbmcgU2VsZWN0b3JzIG11c3QgY29udGFpbiBhIDxh
Ci1ocmVmPSIjcHJvZmlsaW5nIj5Qcm9maWxlPC9hPiBsaXN0aW5nIHRoZQotc3Vic2V0IG9mIFNl
bGVjdG9ycyBpdCBhY2NlcHRzIG9yIGV4Y2x1ZGVzLCBhbmQgZGVzY3JpYmluZyB0aGUgY29uc3Ry
YWludHMKLWl0IGFkZHMgdG8gdGhlIGN1cnJlbnQgc3BlY2lmaWNhdGlvbi4KLQotPHA+SW52YWxp
ZGl0eSBpcyBjYXVzZWQgYnkgYSBwYXJzaW5nIGVycm9yLCBlLmcuIGFuIHVucmVjb2duaXplZCB0
b2tlbiBvciBhIHRva2VuCi13aGljaCBpcyBub3QgYWxsb3dlZCBhdCB0aGUgY3VycmVudCBwYXJz
aW5nIHBvaW50LgotCi08cD5Vc2VyIGFnZW50cyBtdXN0IG9ic2VydmUgdGhlIHJ1bGVzIGZvciBo
YW5kbGluZyBwYXJzaW5nIGVycm9yczoKLTx1bD4KLSAgPGxpPmEgc2ltcGxlIHNlbGVjdG9yIGNv
bnRhaW5pbmcgYW4gdW5kZWNsYXJlZCBuYW1lc3BhY2UgcHJlZml4IGlzIGludmFsaWQ8L2xpPgot
ICA8bGk+YSBzZWxlY3RvciBjb250YWluaW5nIGFuIGludmFsaWQgc2ltcGxlIHNlbGVjdG9yLCBh
biBpbnZhbGlkIGNvbWJpbmF0b3IKLSAgICBvciBhbiBpbnZhbGlkIHRva2VuIGlzIGludmFsaWQu
IDwvbGk+Ci0gIDxsaT5hIGdyb3VwIG9mIHNlbGVjdG9ycyBjb250YWluaW5nIGFuIGludmFsaWQg
c2VsZWN0b3IgaXMgaW52YWxpZC48L2xpPgotPC91bD4KLQotPHAgY2xhc3M9ImZvbyB0ZXN0MTAg
YmFyIj5TcGVjaWZpY2F0aW9ucyByZXVzaW5nIFNlbGVjdG9ycyBtdXN0IGRlZmluZSBob3cgdG8g
aGFuZGxlIHBhcnNpbmcKLWVycm9ycy4gKEluIHRoZSBjYXNlIG9mIENTUywgdGhlIGVudGlyZSBy
dWxlIGluIHdoaWNoIHRoZSBzZWxlY3RvciBpcwotdXNlZCBpcyBkcm9wcGVkLik8L3A+Ci0KLTwh
LS0gQXBwYXJlbnRseSBhbGwgdGhlc2UgcmVmZXJlbmNlcyBhcmUgb3V0IG9mIGRhdGU6Ci08cD5J
bXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBzcGVjaWZpY2F0aW9uIG11c3QgYmVoYXZlIGFzCi0icmVj
aXBpZW50cyBvZiB0ZXh0IGRhdGEiIGFzIGRlZmluZWQgYnkgPGEgaHJlZj0iI3JlZnNDV1dXIj5b
Q1dXV108L2E+Ci13aGVuIHBhcnNpbmcgc2VsZWN0b3JzIGFuZCBhdHRlbXB0aW5nIG1hdGNoZXMu
IChJbiBwYXJ0aWN1bGFyLAotaW1wbGVtZW50YXRpb25zIG11c3QgYXNzdW1lIHRoZSBkYXRhIGlz
IG5vcm1hbGl6ZWQgYW5kIG11c3Qgbm90Ci1ub3JtYWxpemUgaXQuKSBOb3JtYXRpdmUgcnVsZXMg
Zm9yIG1hdGNoaW5nIHN0cmluZ3MgYXJlIGRlZmluZWQgaW4KLTxhIGhyZWY9IiNyZWZzQ1dXVyI+
W0NXV1ddPC9hPiBhbmQgPGEKLWhyZWY9IiNyZWZzVU5JQ09ERSI+W1VOSUNPREVdPC9hPiBhbmQg
YXBwbHkgdG8gaW1wbGVtZW50YXRpb25zIG9mIHRoaXMKLXNwZWNpZmljYXRpb24uPC9wPi0tPgot
Ci08aDI+PGEgbmFtZT1UZXN0cz48L2E+MTQuIFRlc3RzPC9oMj4KLQotPHA+VGhpcyBzcGVjaWZp
Y2F0aW9uIGhhcyA8YQotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvU3R5bGUvQ1NTL1Rlc3QvQ1NT
My9TZWxlY3RvcnMvY3VycmVudC8iPmEgdGVzdAotc3VpdGU8L2E+IGFsbG93aW5nIHVzZXIgYWdl
bnRzIHRvIHZlcmlmeSB0aGVpciBiYXNpYyBjb25mb3JtYW5jZSB0bwotdGhlIHNwZWNpZmljYXRp
b24uIFRoaXMgdGVzdCBzdWl0ZSBkb2VzIG5vdCBwcmV0ZW5kIHRvIGJlIGV4aGF1c3RpdmUKLWFu
ZCBkb2VzIG5vdCBjb3ZlciBhbGwgcG9zc2libGUgY29tYmluZWQgY2FzZXMgb2YgU2VsZWN0b3Jz
LjwvcD4KLQotPGgyPjxhIG5hbWU9QUNLUz48L2E+MTUuIEFja25vd2xlZGdlbWVudHM8L2gyPgot
Ci08cD5UaGUgQ1NTIHdvcmtpbmcgZ3JvdXAgd291bGQgbGlrZSB0byB0aGFuayBldmVyeW9uZSB3
aG8gaGFzIHNlbnQKLWNvbW1lbnRzIG9uIHRoaXMgc3BlY2lmaWNhdGlvbiBvdmVyIHRoZSB5ZWFy
cy48L3A+Ci0KLTxwPlRoZSB3b3JraW5nIGdyb3VwIHdvdWxkIGxpa2UgdG8gZXh0ZW5kIHNwZWNp
YWwgdGhhbmtzIHRvIERvbm5hCi1NY01hbnVzLCBKdXN0aW4gQmFrZXIsIEpvZWwgU2tsYXIsIGFu
ZCBNb2xseSBJdmVzIEJyb3dlciB3aG8gcGVyZmVybWVkCi10aGUgZmluYWwgZWRpdG9yaWFsIHJl
dmlldy48L3A+Ci0KLTxoMj48YSBuYW1lPXJlZmVyZW5jZXM+MTYuIFJlZmVyZW5jZXM8L2E+PC9o
Mj4KLQotPGRsIGNsYXNzPSJyZWZzIj4KLQotICA8ZHQ+W0NTUzFdCi0gIDxkZD48YSBuYW1lPXJl
ZnNDU1MxPjwvYT4gQmVydCBCb3MsIEgmYXJpbmc7a29uIFdpdW0gTGllOyAiPGNpdGU+Q2FzY2Fk
aW5nIFN0eWxlIFNoZWV0cywgbGV2ZWwgMTwvY2l0ZT4iLCBXM0MgUmVjb21tZW5kYXRpb24sIDE3
IERlYyAxOTk2LCByZXZpc2VkIDExIEphbiAxOTk5Ci0gIDxkZD4oPGNvZGU+PGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzEiPmh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1Mx
PC9hPjwvY29kZT4pCi0KLSAgPGR0PltDU1MyMV0KLSAgPGRkPjxhIG5hbWU9cmVmc0NTUzIxPjwv
YT4gQmVydCBCb3MsIFRhbnRlayAmQ2NlZGlsO2VsaWssIElhbiBIaWNrc29uLCBIJmFyaW5nO2tv
biBXaXVtIExpZSwgZWRpdG9yczsgIjxjaXRlPkNhc2NhZGluZyBTdHlsZSBTaGVldHMsIGxldmVs
IDIgcmV2aXNpb24gMTwvY2l0ZT4iLCBXM0MgV29ya2luZyBEcmFmdCwgMTMgSnVuZSAyMDA1Ci0g
IDxkZD4oPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEiPmh0dHA6Ly93
d3cudzMub3JnL1RSL0NTUzIxPC9hPjwvY29kZT4pCi0KLSAgPGR0PltDV1dXXQotICA8ZGQ+PGEg
bmFtZT1yZWZzQ1dXVz48L2E+IE1hcnRpbiBKLiBEJnV1bWw7cnN0LCBGcmFuJmNjZWRpbDtvaXMg
WWVyZ2VhdSwgTWlzaGEgV29sZiwgQXNtdXMgRnJleXRhZywgVGV4IFRleGluLCBlZGl0b3JzOyAi
PGNpdGU+Q2hhcmFjdGVyIE1vZGVsIGZvciB0aGUgV29ybGQgV2lkZSBXZWI8L2NpdGU+IiwgVzND
IFJlY29tbWVuZGF0aW9uLCAxNSBGZWJydWFyeSAyMDA1Ci0gIDxkZD4oPGNvZGU+PGEgaHJlZj0i
aHR0cDovL3d3dy53My5vcmcvVFIvY2hhcm1vZC8iPmh0dHA6Ly93d3cudzMub3JnL1RSL2NoYXJt
b2QvPC9hPjwvY29kZT4pCi0KLSAgPGR0PltGTEVYXQotICA8ZGQ+PGEgbmFtZT0icmVmc0ZMRVgi
PjwvYT4gIjxjaXRlPkZsZXg6IFRoZSBMZXhpY2FsIFNjYW5uZXIgR2VuZXJhdG9yPC9jaXRlPiIs
IFZlcnNpb24gMi4zLjcsIElTQk4gMTg4MjExNDIxMwotCi0gIDxkdD5bSFRNTDRdCi0gIDxkZD48
YSBuYW1lPSJyZWZzSFRNTDQiPjwvYT4gRGF2ZSBSYWdnZXQsIEFybmF1ZCBMZSBIb3JzLCBJYW4g
SmFjb2JzLCBlZGl0b3JzOyAiPGNpdGU+SFRNTCA0LjAxIFNwZWNpZmljYXRpb248L2NpdGU+Iiwg
VzNDIFJlY29tbWVuZGF0aW9uLCAyNCBEZWNlbWJlciAxOTk5Ci0gIDxkZD4oPGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvVFIvaHRtbDQvIj48Y29kZT5odHRwOi8vd3d3LnczLm9yZy9UUi9odG1s
NC88L2NvZGU+PC9hPikKLQotICA8ZHQ+W01BVEhdCi0gIDxkZD48YSBuYW1lPSJyZWZzTUFUSCI+
PC9hPiBQYXRyaWNrIElvbiwgUm9iZXJ0IE1pbmVyLCBlZGl0b3JzOyAiPGNpdGU+TWF0aGVtYXRp
Y2FsIE1hcmt1cCBMYW5ndWFnZSAoTWF0aE1MKSAxLjAxPC9jaXRlPiIsIFczQyBSZWNvbW1lbmRh
dGlvbiwgcmV2aXNpb24gb2YgNyBKdWx5IDE5OTkKLSAgPGRkPig8Y29kZT48YSBocmVmPSJodHRw
Oi8vd3d3LnczLm9yZy9UUi9SRUMtTWF0aE1MLyI+aHR0cDovL3d3dy53My5vcmcvVFIvUkVDLU1h
dGhNTC88L2E+PC9jb2RlPikKLQotICA8ZHQ+W1JGQzMwNjZdCi0gIDxkZD48YSBuYW1lPSJyZWZz
UkZDMzA2NiI+PC9hPiBILiBBbHZlc3RyYW5kOyAiPGNpdGU+VGFncyBmb3IgdGhlIElkZW50aWZp
Y2F0aW9uIG9mIExhbmd1YWdlczwvY2l0ZT4iLCBSZXF1ZXN0IGZvciBDb21tZW50cyAzMDY2LCBK
YW51YXJ5IDIwMDEKLSAgPGRkPig8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMz
MDY2LnR4dCI+PGNvZGU+aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzA2Ni50eHQ8L2NvZGU+
PC9hPikKLQotICA8ZHQ+W1NUVFNdCi0gIDxkZD48YSBuYW1lPXJlZnNTVFRTPjwvYT4gRGFuaWVs
IEdsYXptYW47ICI8Y2l0ZT5TaW1wbGUgVHJlZSBUcmFuc2Zvcm1hdGlvbiBTaGVldHMgMzwvY2l0
ZT4iLCBFbGVjdHJpY2l0JmVhY3V0ZTsgZGUgRnJhbmNlLCBzdWJtaXNzaW9uIHRvIHRoZSBXM0Ms
IDExIE5vdmVtYmVyIDE5OTgKLSAgPGRkPig8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9y
Zy9UUi9OT1RFLVNUVFMzIj5odHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLVNUVFMzPC9hPjwvY29k
ZT4pCi0KLSAgPGR0PltTVkddCi0gIDxkZD48YSBuYW1lPSJyZWZzU1ZHIj48L2E+IEpvbiBGZXJy
YWlvbG8sICYjMzQyNzY7JiMyNzgxMDsgJiMyODE0NzssIERlYW4gSmFja3NvbiwgZWRpdG9yczsg
IjxjaXRlPlNjYWxhYmxlIFZlY3RvciBHcmFwaGljcyAoU1ZHKSAxLjEgU3BlY2lmaWNhdGlvbjwv
Y2l0ZT4iLCBXM0MgUmVjb21tZW5kYXRpb24sIDE0IEphbnVhcnkgMjAwMwotICA8ZGQ+KDxjb2Rl
PjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy8iPmh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRy88L2E+PC9jb2RlPikKLQotICA8ZHQ+W1VOSUNPREVdPC9kdD4KLSAgPGRkPjxhIG5hbWU9
InJlZnNVTklDT0RFIj48L2E+IDxjaXRlPjxhCi0gICBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUu
b3JnL3ZlcnNpb25zL1VuaWNvZGU0LjEuMC8iPlRoZSBVbmljb2RlIFN0YW5kYXJkLCBWZXJzaW9u
IDQuMTwvYT48L2NpdGU+LCBUaGUgVW5pY29kZSBDb25zb3J0aXVtLiBCb3N0b24sIE1BLCBBZGRp
c29uLVdlc2xleSwgTWFyY2ggMjAwNS4gSVNCTiAwLTMyMS0xODU3OC0xLCBhcyBhbWVuZGVkIGJ5
IDxhIGhyZWY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvdmVyc2lvbnMvVW5pY29kZTQuMC4xLyI+
VW5pY29kZSA0LjAuMTwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvdmVy
c2lvbnMvVW5pY29kZTQuMS4wLyI+VW5pY29kZSAgNC4xLjA8L2E+LgotICA8ZGQ+KDxjb2RlPjxh
IGhyZWY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvdmVyc2lvbnMvIj5odHRwOi8vd3d3LnVuaWNv
ZGUub3JnL3ZlcnNpb25zLzwvYT48L2NvZGU+KTwvZGQ+Ci0KLSAgPGR0PltYTUwxMF0KLSAgPGRk
PjxhIG5hbWU9InJlZnNYTUwxMCI+PC9hPiBUaW0gQnJheSwgSmVhbiBQYW9saSwgQy4gTS4gU3Bl
cmJlcmctTWNRdWVlbiwgRXZlIE1hbGVyLCBGcmFuJmNjZWRpbDtvaXMgWWVyZ2VhdSwgZWRpdG9y
czsgIjxjaXRlPkV4dGVuc2libGUgTWFya3VwIExhbmd1YWdlIChYTUwpIDEuMCAoVGhpcmQgRWRp
dGlvbik8L2NpdGU+IiwgVzNDIFJlY29tbWVuZGF0aW9uLCA0IEZlYnJ1YXJ5IDIwMDQKLSAgPGRk
Pig8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyI+PGNvZGU+aHR0cDovL3d3
dy53My5vcmcvVFIvUkVDLXhtbC88L2NvZGU+PC9hPikKLQotICA8ZHQ+W1hNTE5BTUVTXQotICA8
ZGQ+PGEgbmFtZT0icmVmc1hNTE5BTUVTIj48L2E+IFRpbSBCcmF5LCBEYXZlIEhvbGxhbmRlciwg
QW5kcmV3IExheW1hbiwgZWRpdG9yczsgIjxjaXRlPk5hbWVzcGFjZXMgaW4gWE1MPC9jaXRlPiIs
IFczQyBSZWNvbW1lbmRhdGlvbiwgMTQgSmFudWFyeSAxOTk5Ci0gIDxkZD4oPGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8iPjxjb2RlPmh0dHA6Ly93d3cudzMub3Jn
L1RSL1JFQy14bWwtbmFtZXMvPC9jb2RlPjwvYT4pCi0KLSAgPGR0PltZQUNDXQotICA8ZGQ+PGEg
bmFtZT0icmVmc1lBQ0MiPjwvYT4gUy4gQy4gSm9obnNvbjsgIjxjaXRlPllBQ0MgJm1kYXNoOyBZ
ZXQgYW5vdGhlciBjb21waWxlciBjb21waWxlcjwvY2l0ZT4iLCBUZWNobmljYWwgUmVwb3J0LCBN
dXJyYXkgSGlsbCwgMTk3NQotCi08L2RsPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9jc3Nx
dWVyeS1wcm90b3R5cGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMv
ZHJvbWFlby93ZWIvdGVzdHMvY3NzcXVlcnktcHJvdG90eXBlLmh0bWwKaW5kZXggMTY2NWZjMTRj
NGM5YzI1YmY1YmQ1OTliNDUwZDI4MjRkYzBhOTA1Ny4uNzg4YTIyMWE4MzQ2YmQxNWM5ZGZhZWIw
MjE5ODhmYjY1ZjgxMDM1ZCAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jl
c291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9jc3NxdWVyeS1wcm90b3R5cGUuaHRtbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2Nzc3F1
ZXJ5LXByb3RvdHlwZS5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3Jp
cHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJodHRwczov
L2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlw
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vbGliL3Byb3RvdHlwZS0xLjcuanMiPjwv
c2NyaXB0PgogPHNjcmlwdD4KIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpewogc3RhcnRUZXN0
KCJjc3NxdWVyeS1wcm90b3R5cGUiLCAnYTZlYjAyZTMnKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWItYXR0ci1q
cXVlcnkuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93
ZWIvdGVzdHMvanNsaWItYXR0ci1qcXVlcnkuaHRtbAppbmRleCA5Yzc0MDY2NmZkZDBmMGJiYThh
NDdiZGUwMzFjNGZmM2YxZmU3NjNjLi45MTZhMWYxYzRiNzZkZDI2MGFhNDZhZDIxN2U0YjA4ZjVk
ODA5OWEwIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ry
b21hZW8vd2ViL3Rlc3RzL2pzbGliLWF0dHItanF1ZXJ5Lmh0bWwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1hdHRyLWpxdWVy
eS5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQgc3JjPSIuLi9o
dG1scnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xl
YXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjYuNC9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9saWIvanF1ZXJ5LTEuNi40LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+
CiB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKIHN0YXJ0VGVzdCgianNsaWItYXR0ci1qcXVl
cnkiLCAnYmFiNzI1ZDYnKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9y
ZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWItYXR0ci1wcm90b3R5cGUuaHRtbCBiL1Bl
cmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWIt
YXR0ci1wcm90b3R5cGUuaHRtbAppbmRleCA4NjdhOTI1MGIxMTY3NmIyNjRlZjcwMDQyZmViODI2
MDQzMTg2ZDFjLi4yMzhkZjU3MWE4OGVjMGI1YWZiMTg5MjBmYjFjN2M5NDg2MmE4NDBlIDEwMDY0
NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rl
c3RzL2pzbGliLWF0dHItcHJvdG90eXBlLmh0bWwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9t
YWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1hdHRyLXByb3RvdHlwZS5odG1s
CkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQgc3JjPSIuLi9odG1scnVu
bmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5j
b20vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vbGliL3Byb3RvdHlwZS0xLjcuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4K
IHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpewogc3RhcnRUZXN0KCJqc2xpYi1hdHRyLXByb3Rv
dHlwZSIsICdhMjc1M2I3OScpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1qcXVlcnkuaHRtbCBiL1Bl
cmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWIt
ZXZlbnQtanF1ZXJ5Lmh0bWwKaW5kZXggMGExM2QyZTEwZTZiMzZkMTllZmQyMDk4M2RkZTUxMjNk
MGFiZWYzNi4uNzJiNTU1MjhlMGVjODcyZmQxMzNlODI0NmY3YmYyZTA4M2ExNDFiNCAxMDA2NDQK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0
cy9qc2xpYi1ldmVudC1qcXVlcnkuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8v
cmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLWV2ZW50LWpxdWVyeS5odG1sCkBAIC0x
LDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWph
eC9saWJzL2pxdWVyeS8xLjYuNC9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9saWIvanF1ZXJ5LTEuNi40LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiB3aW5kb3cub25s
b2FkID0gZnVuY3Rpb24oKXsKIHN0YXJ0VGVzdCgianNsaWItZXZlbnQtanF1ZXJ5IiwgJ2U3ZmFi
OGVlJyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ry
b21hZW8vd2ViL3Rlc3RzL2pzbGliLWV2ZW50LXByb3RvdHlwZS5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1wcm90
b3R5cGUuaHRtbAppbmRleCA0Y2FkNzVmZTgzZWM0ZDMwN2ExZjM2MzM0ZTkzNmY3YjVlYjRjMDAx
Li43MWYyOWFmMzQ2ZDY1ZGFkNzQzMjI2MTJiODliYzVkZDQwYzIwMjNjIDEwMDY0NAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGli
LWV2ZW50LXByb3RvdHlwZS5odG1sCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNv
dXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWItZXZlbnQtcHJvdG90eXBlLmh0bWwKQEAgLTEs
NyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4
L2xpYnMvcHJvdG90eXBlLzEuNy4wLjAvcHJvdG90eXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9saWIvcHJvdG90eXBlLTEuNy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0Pgogd2luZG93
Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7CiBzdGFydFRlc3QoImpzbGliLWV2ZW50LXByb3RvdHlwZSIs
ICcxYzk3OWJkYycpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291
cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1tb2RpZnktanF1ZXJ5Lmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLW1vZGlm
eS1qcXVlcnkuaHRtbAppbmRleCA3YTI3Y2JlYzU3YWZkZDU1NGY3OGViNmNlNjJlYjkyODgzMDkz
ODY0Li5kYWRmZjNiNGZiMzY4Y2NiNWFlYWU5ZmYyM2Y4YzcwNGE0Mzg0OGZkIDEwMDY0NAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pz
bGliLW1vZGlmeS1qcXVlcnkuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVz
b3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1qcXVlcnkuaHRtbApAQCAtMSw3
ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgv
bGlicy9qcXVlcnkvMS42LjQvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vbGliL2pxdWVyeS0xLjYuNC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0Pgogd2luZG93Lm9ubG9h
ZCA9IGZ1bmN0aW9uKCl7CiBzdGFydFRlc3QoImpzbGliLW1vZGlmeS1qcXVlcnkiLCAnNGRkYTE0
NDYnKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJv
bWFlby93ZWIvdGVzdHMvanNsaWItbW9kaWZ5LXByb3RvdHlwZS5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1tb2RpZnktcHJv
dG90eXBlLmh0bWwKaW5kZXggYThmZjk4YzFmMTM0MjhmODE5MmU3YTY2MTBiMDc4ZTFiNDk5ZjY0
Ni4uZGE3YWNiMmEyMTVjYzY5MzhiNzk0MGUxYzBjNzJmZWIyMjhmYWExNSAxMDA2NDQKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xp
Yi1tb2RpZnktcHJvdG90eXBlLmh0bWwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jl
c291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1tb2RpZnktcHJvdG90eXBlLmh0bWwKQEAg
LTEsNyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9h
amF4L2xpYnMvcHJvdG90eXBlLzEuNy4wLjAvcHJvdG90eXBlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9saWIvcHJvdG90eXBlLTEuNy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0Pgogd2lu
ZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7CiBzdGFydFRlc3QoImpzbGliLW1vZGlmeS1wcm90b3R5
cGUiLCAnYjBhN2Y4OWQnKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9y
ZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWItc3R5bGUtanF1ZXJ5Lmh0bWwgYi9QZXJm
b3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLXN0
eWxlLWpxdWVyeS5odG1sCmluZGV4IGEzNTg3NDcxNmY3NTk2MDcyYTVjMWU3ZTU2MzBhNTdkMWQw
OTZkMmYuLjFmOWJlYWM1Nzc5YjIzYWM4NDJlOWI2MTM4ZGQ1MDhhNmI4MzY0ZGEgMTAwNjQ0Ci0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMv
anNsaWItc3R5bGUtanF1ZXJ5Lmh0bWwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jl
c291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1zdHlsZS1qcXVlcnkuaHRtbApAQCAtMSw3
ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgv
bGlicy9qcXVlcnkvMS42LjQvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vbGliL2pxdWVyeS0xLjYuNC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0Pgogd2luZG93Lm9ubG9h
ZCA9IGZ1bmN0aW9uKCl7CiBzdGFydFRlc3QoImpzbGliLXN0eWxlLWpxdWVyeSIsICc0ODg2MDI5
NScpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9t
YWVvL3dlYi90ZXN0cy9qc2xpYi1zdHlsZS1wcm90b3R5cGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWItc3R5bGUtcHJvdG90
eXBlLmh0bWwKaW5kZXggODE4ODgwM2Y3OGRhNTU5NWIzNThmOWQwNWNkMzUzZmM5MGU5NjVlMi4u
NWM3ZTY5ZThmMGI0NWVmNmM2ZGIyMGRiMzU3OTExOTE0NTIzZThkNCAxMDA2NDQKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi1z
dHlsZS1wcm90b3R5cGUuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3Vy
Y2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLXN0eWxlLXByb3RvdHlwZS5odG1sCkBAIC0xLDcg
KzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9s
aWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vbGliL3Byb3RvdHlwZS0xLjcuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KIHdpbmRvdy5v
bmxvYWQgPSBmdW5jdGlvbigpewogc3RhcnRUZXN0KCJqc2xpYi1zdHlsZS1wcm90b3R5cGUiLCAn
ZGQ5NDQ2MmUnKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJj
ZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWItdHJhdmVyc2UtanF1ZXJ5Lmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLXRyYXZl
cnNlLWpxdWVyeS5odG1sCmluZGV4IDAxMGIzZDllMzlhMDE2MDBlNDc0MmU1ZDcwMTM5MDIyZDA5
MTQxNTEuLjNjM2Q3NDE4MmE1YjI3MDAxOWMyZTFmNjEyMzQwN2U4ODM3YTk3NTUgMTAwNjQ0Ci0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMv
anNsaWItdHJhdmVyc2UtanF1ZXJ5Lmh0bWwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L3Jlc291cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1qcXVlcnkuaHRtbApA
QCAtMSw3ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5l
ci5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29t
L2FqYXgvbGlicy9qcXVlcnkvMS42LjQvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vbGliL2pxdWVyeS0xLjYuNC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0Pgogd2luZG93
Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7CiBzdGFydFRlc3QoImpzbGliLXRyYXZlcnNlLWpxdWVyeSIs
ICcwODY5NjU2MycpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291
cmNlcy9kcm9tYWVvL3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1wcm90b3R5cGUuaHRtbCBiL1Bl
cmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvdGVzdHMvanNsaWIt
dHJhdmVyc2UtcHJvdG90eXBlLmh0bWwKaW5kZXggNjQzYTAzZjY2ODYwOGI3MWMxNTZiMmYwY2Iz
MWZiODQ1M2Y5M2VhNS4uYThiNzk1YTIwNTdkZDE0ZTU3NjRmOTAwNmQxZTUzYjYyMTgwODEyYyAx
MDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dl
Yi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1wcm90b3R5cGUuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL3Rlc3RzL2pzbGliLXRyYXZlcnNlLXBy
b3RvdHlwZS5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQgc3Jj
PSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXgu
Z29vZ2xlYXBpcy5jb20vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vbGliL3Byb3RvdHlwZS0xLjcuanMiPjwvc2NyaXB0
PgogPHNjcmlwdD4KIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpewogc3RhcnRUZXN0KCJqc2xp
Yi10cmF2ZXJzZS1wcm90b3R5cGUiLCAnMTZhYzY4NWQnKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItM2QtbW9ycGguaHRtbCBiL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9zdW5zcGlkZXItM2QtbW9ycGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWExMDllNDUw
OTk5YzA0ZDA3YTZjOTk2OTNjNGRlMmQzMDYwMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci0zZC1tb3JwaC5odG1sCkBAIC0wLDAgKzEsMTUg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFl
by93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFl
b3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rp
b24oKSB7CisgICAgRFJULnNldHVwKCJzdW5zcGlkZXItM2QtbW9ycGgiKTsKK30pOworPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItM2QtcmF5dHJhY2UuaHRtbCBiL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItM2QtcmF5dHJhY2UuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
NjFjZGM0YWU3NWFjOWRiY2RhYTM3NmY4YWJlNzRmZmVhZGUzYjY0Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci0zZC1yYXl0cmFjZS5odG1sCkBA
IC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCku
cmVhZHkoZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVwKCJzdW5zcGlkZXItM2QtcmF5dHJhY2Ui
KTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItYWNjZXNzLWJpbmFy
eS10cmVlcy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1hY2Nlc3Mt
YmluYXJ5LXRyZWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDlmODU1NjkwYjMzZmVhNmU1OGFkZmFkNmQ0
YzYxY2JjMWNlODY4NwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFl
by9zdW5zcGlkZXItYWNjZXNzLWJpbmFyeS10cmVlcy5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
cnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlby93ZWIv
anF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlb3J1bm5l
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7
CisgICAgRFJULnNldHVwKCJzdW5zcGlkZXItYWNjZXNzLWJpbmFyeS10cmVlcyIpOworfSk7Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1hY2Nlc3MtZmFubmt1Y2guaHRtbCBi
L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItYWNjZXNzLWZhbm5rdWNoLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWQwYjdkZjhiMGIzM2VkY2ZjMDQ2OGM1MzgyYzNlOTkzYzkyMGQzMgotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItYWNjZXNz
LWZhbm5rdWNoLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAoInN1bnNw
aWRlci1hY2Nlc3MtZmFubmt1Y2giKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9z
dW5zcGlkZXItYWNjZXNzLW5ib2R5Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vu
c3BpZGVyLWFjY2Vzcy1uYm9keS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNmJmY2RlMDI3Y2ZiNzFkMWJi
MWE1ODY4MzcyOWIzZmFiYzExNjgKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vc3Vuc3BpZGVyLWFjY2Vzcy1uYm9keS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
cnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlby93ZWIv
anF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlb3J1bm5l
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7
CisgICAgRFJULnNldHVwKCJzdW5zcGlkZXItYWNjZXNzLW5ib2R5Iik7Cit9KTsKKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWFjY2Vzcy1uc2lldmUuaHRtbCBiL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItYWNjZXNzLW5zaWV2ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE0Yzk1Mjg1YmUwOWYwMzI2MTA5YmZhMTZkM2I2YjQzMjU3YmY1ZDcKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWFjY2Vzcy1uc2lldmUuaHRt
bApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1l
bnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgic3Vuc3BpZGVyLWFjY2Vzcy1u
c2lldmUiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItYml0b3Bz
LTNiaXQtYml0cy1pbi1ieXRlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3Bp
ZGVyLWJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmZTI4Yzg4MWE2
MDVjMjE0YzVjOTA1MmQ5OWM4NGI0MDllNjI1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZS5odG1s
CkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVu
dCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVwKCJzdW5zcGlkZXItYml0b3BzLTNi
aXQtYml0cy1pbi1ieXRlIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3Bp
ZGVyLWJpdG9wcy1iaXRzLWluLWJ5dGUuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9z
dW5zcGlkZXItYml0b3BzLWJpdHMtaW4tYnl0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0MTIyOGI0MjM3
MDM3MDljMDA4NjNmYzQxNTZhNzFiMTA3MmJlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWJpdG9wcy1iaXRzLWluLWJ5dGUuaHRtbApAQCAt
MCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJl
YWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgic3Vuc3BpZGVyLWJpdG9wcy1iaXRzLWlu
LWJ5dGUiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItYml0b3Bz
LWJpdHdpc2UtYW5kLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWJp
dG9wcy1iaXR3aXNlLWFuZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1N2U0OGE1MGRjYjMxOGYyMWY4ZTI5
ZDFlNzQwMjMxNTRhNmI2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ry
b21hZW8vc3Vuc3BpZGVyLWJpdG9wcy1iaXR3aXNlLWFuZC5odG1sCkBAIC0wLDAgKzEsMTUgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlby93
ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFlb3J1
bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24o
KSB7CisgICAgRFJULnNldHVwKCJzdW5zcGlkZXItYml0b3BzLWJpdHdpc2UtYW5kIik7Cit9KTsK
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWJpdG9wcy1uc2lldmUtYml0cy5o
dG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1iaXRvcHMtbnNpZXZlLWJp
dHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZTAwNDMxYTRjZmE5MTY3MDJkZDJmOTgxN2E4OTQyMmFkOGE3
Y2ZkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRl
ci1iaXRvcHMtbnNpZXZlLWJpdHMuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5z
ZXR1cCgic3Vuc3BpZGVyLWJpdG9wcy1uc2lldmUtYml0cyIpOworfSk7Cis8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1jb250cm9sZmxvdy1yZWN1cnNpdmUuaHRtbCBiL1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItY29udHJvbGZsb3ctcmVjdXJzaXZlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzA4OWQxZTY1YWIzNTI4ZDI4MzBhMGVlZWNlYjQ4NjQ1MmY3YjNiMAotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItY29udHJv
bGZsb3ctcmVjdXJzaXZlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAo
InN1bnNwaWRlci1jb250cm9sZmxvdy1yZWN1cnNpdmUiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9zdW5zcGlkZXItY3J5cHRvLWFlcy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9E
cm9tYWVvL3N1bnNwaWRlci1jcnlwdG8tYWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZhY2RmYzQwZmRj
YzY2YjkwMTc2MWUwOGE3MzBlMTEyZWNlNmE2NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItY3J5cHRvLWFlcy5odG1sCkBAIC0wLDAgKzEsMTUg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFl
by93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJvbWFl
b3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rp
b24oKSB7CisgICAgRFJULnNldHVwKCJzdW5zcGlkZXItY3J5cHRvLWFlcyIpOworfSk7Cis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1jcnlwdG8tbWQ1Lmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWNyeXB0by1tZDUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ZmNkMGM5MDg1ODhhOTRlN2ZhMGYzOTFlNmQ3ZjBiZGY1MTljMjg1Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1jcnlwdG8tbWQ1Lmh0bWwKQEAg
LTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5y
ZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAoInN1bnNwaWRlci1jcnlwdG8tbWQ1Iik7
Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWNyeXB0by1zaGExLmh0
bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWNyeXB0by1zaGExLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDdmNTFjMjU2NmMxMWQ2YmMyMjgyNjZkNWMzYWMwZWIzYmU2Y2MxNgotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItY3J5cHRv
LXNoYTEuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgic3Vuc3BpZGVy
LWNyeXB0by1zaGExIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVy
LWRhdGUtZm9ybWF0LXRvZnRlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3Bp
ZGVyLWRhdGUtZm9ybWF0LXRvZnRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTFiNDhkNGFmYjQyMjEyM2Ey
Y2MxYzEwMjVjODYwNTViMzUyOTgxOQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9zdW5zcGlkZXItZGF0ZS1mb3JtYXQtdG9mdGUuaHRtbApAQCAtMCwwICsxLDE1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21h
ZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21h
ZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0
aW9uKCkgeworICAgIERSVC5zZXR1cCgic3Vuc3BpZGVyLWRhdGUtZm9ybWF0LXRvZnRlIik7Cit9
KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWRhdGUtZm9ybWF0LXhwYXJi
Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLWRhdGUtZm9ybWF0LXhw
YXJiLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY5M2E1ZmM5NzViNjE2ZGU1NDMzYzk5YTM4NmIwMGMxY2Ri
ZDdlMAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlk
ZXItZGF0ZS1mb3JtYXQteHBhcmIuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5z
ZXR1cCgic3Vuc3BpZGVyLWRhdGUtZm9ybWF0LXhwYXJiIik7Cit9KTsKKzwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL0Ryb21hZW8vc3Vuc3BpZGVyLW1hdGgtY29yZGljLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vc3Vuc3BpZGVyLW1hdGgtY29yZGljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRjZTZiNWM3
OTE3ZTUwYjJjMTE1ZWNhYWIwNzY1M2M4MGY1MjhiNAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItbWF0aC1jb3JkaWMuaHRtbApAQCAtMCwwICsx
LDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ry
b21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ry
b21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1
bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgic3Vuc3BpZGVyLW1hdGgtY29yZGljIik7Cit9KTsK
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLW1hdGgtcGFydGlhbC1zdW1zLmh0
bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLW1hdGgtcGFydGlhbC1zdW1z
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTQ3MTEwYmEwNjM2NWQ3MzUyNWNjZTdlMGFlN2UwMGE0NzZjNDE3
MQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXIt
bWF0aC1wYXJ0aWFsLXN1bXMuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1
cCgic3Vuc3BpZGVyLW1hdGgtcGFydGlhbC1zdW1zIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vc3Vuc3BpZGVyLW1hdGgtc3BlY3RyYWwtbm9ybS5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1tYXRoLXNwZWN0cmFsLW5vcm0uaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MWFjMGY0Njg2NGZjMGIxM2MzNzk1YzJjNGVhNDVmNWMxMjYxZGFjCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1tYXRoLXNwZWN0cmFsLW5v
cm0uaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQo
ZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgic3Vuc3BpZGVyLW1h
dGgtc3BlY3RyYWwtbm9ybSIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNw
aWRlci1yZWdleHAtZG5hLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVy
LXJlZ2V4cC1kbmEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmM3ODAwZGZjMmIyNGU4YmIxODJmNDM2ZDMz
ODE5ZDBlMmRjNzIyCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L3N1bnNwaWRlci1yZWdleHAtZG5hLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQu
c2V0dXAoInN1bnNwaWRlci1yZWdleHAtZG5hIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ry
b21hZW8vc3Vuc3BpZGVyLXN0cmluZy1mYXN0YS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9t
YWVvL3N1bnNwaWRlci1zdHJpbmctZmFzdGEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWRiNWFkY2JmN2Yx
NWE1ZTcyZGNmNTc2NzJkZGMwMDg1MzAwNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1zdHJpbmctZmFzdGEuaHRtbApAQCAtMCwwICsxLDE1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21h
ZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21h
ZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0
aW9uKCkgeworICAgIERSVC5zZXR1cCgic3Vuc3BpZGVyLXN0cmluZy1mYXN0YSIpOworfSk7Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1zdHJpbmctdGFnY2xvdWQuaHRtbCBi
L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItc3RyaW5nLXRhZ2Nsb3VkLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWJmMmMyODQ1YzU1ZDAwMDg5OGVkNjJmNWU1OTAxYmIxOTk2OTc0NgotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9zdW5zcGlkZXItc3RyaW5n
LXRhZ2Nsb3VkLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAoInN1bnNw
aWRlci1zdHJpbmctdGFnY2xvdWQiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9z
dW5zcGlkZXItc3RyaW5nLXVucGFjay1jb2RlLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21h
ZW8vc3Vuc3BpZGVyLXN0cmluZy11bnBhY2stY29kZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MzMxMDcw
MmUzMWM4ZWNiMDhkMzdlZjIxNzI3NGE0ZTE4MTM3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLXN0cmluZy11bnBhY2stY29kZS5odG1sCkBA
IC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZHJvbWFlby93ZWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZHJvbWFlb3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorJChkb2N1bWVudCku
cmVhZHkoZnVuY3Rpb24oKSB7CisgICAgRFJULnNldHVwKCJzdW5zcGlkZXItc3RyaW5nLXVucGFj
ay1jb2RlIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vc3Vuc3BpZGVyLXN0cmlu
Zy12YWxpZGF0ZS1pbnB1dC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3N1bnNwaWRl
ci1zdHJpbmctdmFsaWRhdGUtaW5wdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iY2QyYzYwZjUxNDA5MmNl
ZjkzYzQyZjliMWNiZDk0ZjRkY2QwNmVjCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9Ecm9tYWVvL3N1bnNwaWRlci1zdHJpbmctdmFsaWRhdGUtaW5wdXQuaHRtbApAQCAtMCww
ICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5
KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgic3Vuc3BpZGVyLXN0cmluZy12YWxpZGF0ZS1p
bnB1dCIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Y4LWNyeXB0by5odG1sIGIv
UGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Y4LWNyeXB0by5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1OTI2
N2VjZDU2ZDYxY2FkMjJiMzg3NjZlM2FiOGI0YmIxOWZlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vdjgtY3J5cHRvLmh0bWwKQEAgLTAsMCArMSwxNSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dl
Yi9qcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVu
bmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigp
IHsKKyAgICBEUlQuc2V0dXAoInY4LWNyeXB0byIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9E
cm9tYWVvL3Y4LWRlbHRhYmx1ZS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Y4LWRl
bHRhYmx1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZTkwNjdlODc4NTY4NzgxNGUyZDQxNjk2MmIyODBj
OWZlNWIyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vdjgt
ZGVsdGFibHVlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAoInY4LWRl
bHRhYmx1ZSIpOworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Y4LWVhcmxleS1ib3ll
ci5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Y4LWVhcmxleS1ib3llci5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU4MTdiMDYwMzU1M2Y3MTA2MDBhYjkzODkyOGFiOWIwYzExOWNjNjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vdjgtZWFybGV5LWJveWVyLmh0
bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9kcm9tYWVvL3dlYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9kcm9tYWVvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRvY3Vt
ZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBEUlQuc2V0dXAoInY4LWVhcmxleS1ib3llciIp
OworfSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Y4LXJheXRyYWNlLmh0bWwgYi9QZXJm
b3JtYW5jZVRlc3RzL0Ryb21hZW8vdjgtcmF5dHJhY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTE5YmQ5
YWQxYmVkNjI1NGY2YjJhNDhjNmFjZGE4MjY2ODIzMjRmCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Y4LXJheXRyYWNlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvL3dl
Yi9qcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcm9tYWVvcnVu
bmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigp
IHsKKyAgICBEUlQuc2V0dXAoInY4LXJheXRyYWNlIik7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vdjgtcmljaGFyZHMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby92OC1y
aWNoYXJkcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwM2VmMmVmN2NlN2JlODk5YTljMTgwZmRjMzdkY2M1
YTE5NWNkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vdjgt
cmljaGFyZHMuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW8vd2ViL2pxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Ryb21hZW9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIERSVC5zZXR1cCgidjgtcmlj
aGFyZHMiKTsKK30pOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU2tpcHBlZCBiL1BlcmZvcm1hbmNlVGVz
dHMvU2tpcHBlZAppbmRleCAxYTBiNGRkZmU3ZmFkN2RjMWZkNGQ5ODEyYzhhZjgzNDhkOTY1NWNk
Li4zYjQ4YTA4YWFiZmNkNmEwNTc2MzQ4MzFlMzE4M2Q3N2ViYWFiYTJiIDEwMDY0NAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NraXBwZWQKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Ta2lwcGVkCkBA
IC03LDYgKzcsMzUgQEAgUGFnZUxvYWQKIFN1blNwaWRlcgogWFNTQXVkaXRvcgogCisjIFdlIGhh
dmUgcHVyZSBKUyB0ZXN0cyBzZXBhcmF0ZWx5IG91dHNpZGUgRHJvbWFlby4KK0Ryb21hZW8vc3Vu
c3BpZGVyLTNkLW1vcnBoLmh0bWwKK0Ryb21hZW8vc3Vuc3BpZGVyLTNkLXJheXRyYWNlLmh0bWwK
K0Ryb21hZW8vc3Vuc3BpZGVyLWFjY2Vzcy1iaW5hcnktdHJlZXMuaHRtbAorRHJvbWFlby9zdW5z
cGlkZXItYWNjZXNzLWZhbm5rdWNoLmh0bWwKK0Ryb21hZW8vc3Vuc3BpZGVyLWFjY2Vzcy1uYm9k
eS5odG1sCitEcm9tYWVvL3N1bnNwaWRlci1hY2Nlc3MtbnNpZXZlLmh0bWwKK0Ryb21hZW8vc3Vu
c3BpZGVyLWJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZS5odG1sCitEcm9tYWVvL3N1bnNwaWRlci1i
aXRvcHMtYml0cy1pbi1ieXRlLmh0bWwKK0Ryb21hZW8vc3Vuc3BpZGVyLWJpdG9wcy1iaXR3aXNl
LWFuZC5odG1sCitEcm9tYWVvL3N1bnNwaWRlci1iaXRvcHMtbnNpZXZlLWJpdHMuaHRtbAorRHJv
bWFlby9zdW5zcGlkZXItY29udHJvbGZsb3ctcmVjdXJzaXZlLmh0bWwKK0Ryb21hZW8vc3Vuc3Bp
ZGVyLWNyeXB0by1hZXMuaHRtbAorRHJvbWFlby9zdW5zcGlkZXItZGF0ZS1mb3JtYXQtdG9mdGUu
aHRtbAorRHJvbWFlby9zdW5zcGlkZXItZGF0ZS1mb3JtYXQteHBhcmIuaHRtbAorRHJvbWFlby9z
dW5zcGlkZXItbWF0aC1jb3JkaWMuaHRtbAorRHJvbWFlby9zdW5zcGlkZXItbWF0aC1wYXJ0aWFs
LXN1bXMuaHRtbAorRHJvbWFlby9zdW5zcGlkZXItbWF0aC1zcGVjdHJhbC1ub3JtLmh0bWwKK0Ry
b21hZW8vc3Vuc3BpZGVyLXJlZ2V4cC1kbmEuaHRtbAorRHJvbWFlby9zdW5zcGlkZXItc3RyaW5n
LWZhc3RhLmh0bWwKK0Ryb21hZW8vc3Vuc3BpZGVyLXN0cmluZy10YWdjbG91ZC5odG1sCitEcm9t
YWVvL3N1bnNwaWRlci1zdHJpbmctdW5wYWNrLWNvZGUuaHRtbAorRHJvbWFlby9zdW5zcGlkZXIt
c3RyaW5nLXZhbGlkYXRlLWlucHV0Lmh0bWwKK0Ryb21hZW8vdjgtY3J5cHRvLmh0bWwKK0Ryb21h
ZW8vdjgtZGVsdGFibHVlLmh0bWwKK0Ryb21hZW8vdjgtZWFybGV5LWJveWVyLmh0bWwKK0Ryb21h
ZW8vdjgtcmF5dHJhY2UuaHRtbAorRHJvbWFlby92OC1yaWNoYXJkcy5odG1sCisKICMgQnVnIDc3
MDI0IC0gV2ViIEluc3BlY3RvcjogdGVzdHMgaW4gUGVyZm9ybWFuY2VUZXN0cy9pbnNwZWN0b3Iv
IGFyZSB0aW1pbmcgb3V0CiBpbnNwZWN0b3IKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125284</attachid>
            <date>2012-02-03 01:14:30 -0800</date>
            <delta_ts>2012-02-06 15:46:21 -0800</delta_ts>
            <desc>Patch - Uploading manually because it&apos;s too big for webkit-patch.</desc>
            <filename>wk77504.diff</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64"></data>

          </attachment>
      

    </bug>

</bugzilla>