<?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>64545</bug_id>
          
          <creation_ts>2011-07-14 12:10:01 -0700</creation_ts>
          <short_desc>fix coding style of dashboard_base.js</short_desc>
          <delta_ts>2011-07-14 12:24:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ojan Vafai">ojan</reporter>
          <assigned_to name="Ojan Vafai">ojan</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
    
    <cc>mihaip</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>437239</commentid>
    <comment_count>0</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-14 12:10:01 -0700</bug_when>
    <thetext>fix coding style of dashboard_base.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437241</commentid>
    <comment_count>1</comment_count>
      <attachid>100838</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-14 12:11:36 -0700</bug_when>
    <thetext>Created attachment 100838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437252</commentid>
    <comment_count>2</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-14 12:24:37 -0700</bug_when>
    <thetext>Committed r91021: &lt;http://trac.webkit.org/changeset/91021&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100838</attachid>
            <date>2011-07-14 12:11:36 -0700</date>
            <delta_ts>2011-07-14 12:19:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64545-20110714121135.patch</filename>
            <type>text/plain</type>
            <size>110175</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTEwMTgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjYmEzNmFjY2I3ZDk2YjE5MDFkM2NmZWJhY2I2NWFiMTg0
NWMxNDQ5Li4zZGQ1ODhjYTBiNjg5Y2EzZGU0ZDcyMjlkMGUwNzg0MWFiNzUxMTBjIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTEtMDctMTQgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBmaXggY29kaW5nIHN0eWxlIG9mIGRhc2hib2FyZF9iYXNlLmpzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDU0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjb2RlIGNoYW5nZXMgdG8gdGhlIGZp
bGVzIG90aGVyIHRoYW4gZGFzaGJvYXJkX2Jhc2UuanMKKyAgICAgICAgYXJlIGp1c3QgZmFsbG91
dCBmcm9tIHJlbmFtaW5nIGdsb2JhbHMgaW4gZGFzaGJvYXJkX2Jhc2UuanMuCisKKyAgICAgICAg
KiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0
bWw6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVy
cy5qczoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hi
b2FyZF9iYXNlLmpzOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvZmxha2luZXNzX2Rhc2hib2FyZC5odG1sOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5qczoKKyAgICAgICAg
KiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0
bWw6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFw
Lmh0bWw6CisKIDIwMTEtMDctMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBXZWJLaXQyIEdUSyBidWlsZCBhZnRl
ciByOTA5NTMuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwKaW5kZXggNTRjYjQ4MzEyMGE0
NmMzYTY1NzkzNThhMDAxY2EzMzlmNjZlMDBjNC4uYTE3ZDk1NDkxZTI3OTJkNzdiMjQ0MzVmNjIx
NjJlMjRiNzY3YTI3OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5odG1sCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbApAQCAtNjksNyAr
NjksNyBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgZnVuY3Rpb24g
Z2VuZXJhdGVQYWdlKCkgewogICAgIHZhciBodG1sID0gZ2V0SFRNTEZvclRlc3RUeXBlU3dpdGNo
ZXIodHJ1ZSkgKyAnPGJyPic7Ci0gICAgZm9yICh2YXIgYnVpbGRlciBpbiBidWlsZGVycykgewor
ICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gZ19idWlsZGVycykgewogICAgICAgaHRtbCArPSBnZXRI
VE1MRm9yQnVpbGRlcihidWlsZGVyKTsKICAgICB9CiAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwgPSBodG1sOwpAQCAtNzgsNyArNzgsNyBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICBmdW5jdGlvbiBoYW5k
bGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkgewogICAgIHN3aXRjaChrZXkpIHsKICAg
ICAgIGNhc2UgJ3Jhd1ZhbHVlcyc6Ci0gICAgICAgIGN1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWUg
PT0gJ3RydWUnOworICAgICAgICBnX2N1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWUgPT0gJ3RydWUn
OwogCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC04NywxMiArODcsMTIgQEAgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAgICB9CiAgIH0KIAotICBkZWZhdWx0U3RhdGVWYWx1ZXMgPSB7CisgIGdfZGVmYXVsdFN0
YXRlVmFsdWVzID0gewogICAgIHJhd1ZhbHVlczogZmFsc2UKICAgfTsKIAogICBmdW5jdGlvbiBn
ZXRIVE1MRm9yQnVpbGRlcihidWlsZGVyKSB7Ci0gICAgdmFyIHJlc3VsdHMgPSByZXN1bHRzQnlC
dWlsZGVyW2J1aWxkZXJdOworICAgIHZhciByZXN1bHRzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1
aWxkZXJdOwogICAgIC8vIFNvbWUga2V5cyB3ZXJlIGFkZGVkIGxhdGVyIHRoYW4gb3RoZXJzLCBz
byB0aGV5IGRvbid0IGhhdmUgYXMgbWFueQogICAgIC8vIGJ1aWxkcy4gVXNlIHRoZSBzaG9ydGVz
dC4KICAgICAvLyBUT0RPKG9qYW4pOiBPbmNlIDUwMCBydW5zIGhhdmUgZmluaXNoZWQsIHdlIGNh
biBnZXQgcmlkIG9mIHBhc3NpbmcgdGhpcwpAQCAtMTAxLDcgKzEwMSw3IEBAIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgICAgdmFyIG51bUNvbHVtbnMgPSByZXN1bHRzW0FMTF9GSVhBQkxFX0NPVU5UX0tFWV0ubGVu
Z3RoOwogICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9Y29udGFpbmVyPjxoMj4nICsgYnVpbGRl
ciArICc8L2gyPic7CiAKLSAgICBpZiAoY3VycmVudFN0YXRlLnJhd1ZhbHVlcykgeworICAgIGlm
IChnX2N1cnJlbnRTdGF0ZS5yYXdWYWx1ZXMpIHsKICAgICAgIGh0bWwgKz0gZ2V0UmF3VmFsdWVz
SFRNTChyZXN1bHRzLCBudW1Db2x1bW5zKTsKICAgICB9IGVsc2UgewogICAgICAgaHRtbCArPSAn
PGEgaHJlZj0idGltZWxpbmVfZXhwbG9yZXIuaHRtbCcgKyAobG9jYXRpb24uaGFzaCA/IGxvY2F0
aW9uLmhhc2ggKyAnJicgOiAnIycpICsgJ2J1aWxkZXI9JyArIGJ1aWxkZXIgKyAnIj4nICsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYnVpbGRl
cnMuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJz
LmpzCmluZGV4IGMxMTM5MmVmYjc1NjA1ZTM3YjlmZGNhYzcwYTI0ODMzMDVmNDVlMDAuLjQ1NjE5
ZjI3ODI1NzE5YTI1MDlhZDQwZWJkYmQ0ZDAyZjg0MzM0ODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYnVpbGRlcnMuanMKKysrIGIvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVycy5qcwpAQCAtNzMsOSAr
NzMsOSBAQCBmdW5jdGlvbiBCdWlsZGVyR3JvdXAoaXNUb1RXZWJLaXQsIGJ1aWxkZXJzKSB7CiBC
dWlsZGVyR3JvdXAucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24oKSB7CiAgIC8vIFRPRE8obWlo
YWlwKTogaW5zdGVhZCBvZiBjb3B5aW5nIHRoZXNlIHRvIGdsb2JhbHMsIGl0IHdvdWxkIGJlIGJl
dHRlciBpZgogICAvLyB0aGUgcmVzdCBvZiB0aGUgY29kZSByZWFkIHRoaW5ncyBmcm9tIHRoZSBC
dWlsZGVyR3JvdXAgaW5zdGFuY2UgZGlyZWN0bHkKLSAgZGVmYXVsdEJ1aWxkZXJOYW1lID0gdGhp
cy5kZWZhdWx0QnVpbGRlcjsKLSAgZXhwZWN0YXRpb25zQnVpbGRlciA9IHRoaXMuZXhwZWN0YXRp
b25zQnVpbGRlcjsKLSAgYnVpbGRlcnMgPSB0aGlzLmJ1aWxkZXJzOworICBnX2RlZmF1bHRCdWls
ZGVyTmFtZSA9IHRoaXMuZGVmYXVsdEJ1aWxkZXI7CisgIGdfZXhwZWN0YXRpb25zQnVpbGRlciA9
IHRoaXMuZXhwZWN0YXRpb25zQnVpbGRlcjsKKyAgZ19idWlsZGVycyA9IHRoaXMuYnVpbGRlcnM7
CiB9OwogCiBCdWlsZGVyR3JvdXAuVE9UX1dFQktJVCA9IHRydWU7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5q
cwppbmRleCA4YmM5MDQzMjM4NDVmOTkyZjk5ODc5OGJlNzdiOWQxZWIwYzc5YWYyLi5hMDkxODdj
YzUzODhjOWZmMzc4YmYzZmVhM2IxNjhhNGY1ZWUyMWU4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCisrKyBiL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMK
QEAgLTEsMTA4ICsxLDk3IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEJhc2UgSlMgZmlsZSBmb3Ig
cGFnZXMgdGhhdCB3YW50IHRvIHBhcnNlIHRoZSByZXN1bHRzIEpTT04KLSAqIGZyb20gdGhlIHRl
c3RpbmcgYm90cy4gVGhpcyBkZWFscyB3aXRoIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMsIHZp
c2libGUKLSAqIGhpc3RvcnksIHBvcHVwcyBhbmQgYXBwZW5kaW5nIHRoZSBzY3JpcHQgZWxlbWVu
dHMgZm9yIHRoZSBKU09OIGZpbGVzLgotICoKLSAqIFRoZSBjYWxsaW5nIHBhZ2UgaXMgZXhwZWN0
ZWQgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgImFic3RyYWN0IgotICogZnVuY3Rpb25zL29i
amVjdHM6Ci0gKi8KLXZhciBwYWdlTG9hZFN0YXJ0VGltZSA9IERhdGUubm93KCk7Ci0KLS8qKgot
ICogR2VuZXJhdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgZGFzaGJvYXJkLiBUaGUgcGFnZSBzaG91
bGQgb3ZlcnJpZGUgdGhpcyB3aXRoCi0gKiBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSBw
YWdlIGFzc3VtaW5nIGFsbCByZXNvdXJjZXMgaGF2ZSBsb2FkZWQuCi0gKi8KLWZ1bmN0aW9uIGdl
bmVyYXRlUGFnZSgpIHsKKy8vIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0
OgorLy8KKy8vICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisvLyBAZmlsZW92ZXJ2aWV3IEJhc2UgSlMgZmlsZSBmb3IgcGFnZXMg
dGhhdCB3YW50IHRvIHBhcnNlIHRoZSByZXN1bHRzIEpTT04KKy8vIGZyb20gdGhlIHRlc3Rpbmcg
Ym90cy4gVGhpcyBkZWFscyB3aXRoIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMsIHZpc2libGUK
Ky8vIGhpc3RvcnksIHBvcHVwcyBhbmQgYXBwZW5kaW5nIHRoZSBzY3JpcHQgZWxlbWVudHMgZm9y
IHRoZSBKU09OIGZpbGVzLgorLy8KKy8vIFRoZSBjYWxsaW5nIHBhZ2UgaXMgZXhwZWN0ZWQgdG8g
aW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgImFic3RyYWN0IgorLy8gZnVuY3Rpb25zL29iamVjdHM6
Cit2YXIgZ19wYWdlTG9hZFN0YXJ0VGltZSA9IERhdGUubm93KCk7CisKKy8vIEdlbmVyYXRlcyB0
aGUgY29udGVudHMgb2YgdGhlIGRhc2hib2FyZC4gVGhlIHBhZ2Ugc2hvdWxkIG92ZXJyaWRlIHRo
aXMgd2l0aAorLy8gYSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyB0aGUgcGFnZSBhc3N1bWluZyBh
bGwgcmVzb3VyY2VzIGhhdmUgbG9hZGVkLgorZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkge30KKwor
Ly8gVGFrZXMgYSBrZXkgYW5kIGEgdmFsdWUgYW5kIHNldHMgdGhlIGdfY3VycmVudFN0YXRlW2tl
eV0gPSB2YWx1ZSBpZmYga2V5IGlzCisvLyBhIHZhbGlkIGhhc2ggcGFyYW1ldGVyIGFuZCB0aGUg
dmFsdWUgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdCBrZXkuCisvLworLy8gQHJldHVybiB7Ym9v
bGVhbn0gV2hldGhlciB0aGUga2V5IHdoYXQgaW5zZXJ0ZWQgaW50byB0aGUgZ19jdXJyZW50U3Rh
dGUuCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLS8qKgotICogVGFrZXMgYSBrZXkgYW5kIGEgdmFsdWUgYW5k
IHNldHMgdGhlIGN1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWUgaWZmIGtleSBpcwotICogYSB2YWxp
ZCBoYXNoIHBhcmFtZXRlciBhbmQgdGhlIHZhbHVlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQg
a2V5LgotICoKLSAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtleSB3aGF0IGluc2Vy
dGVkIGludG8gdGhlIGN1cnJlbnRTdGF0ZS4KLSAqLwotZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNo
UGFyYW1ldGVyKGtleSwgdmFsdWUpIHsKLSAgcmV0dXJuIGZhbHNlOwotfQorLy8gRGVmYXVsdCBo
YXNoIHBhcmFtZXRlcnMgZm9yIHRoZSBwYWdlLiBUaGUgcGFnZSBzaG91bGQgb3ZlcnJpZGUgdGhp
cyB0byBjcmVhdGUKKy8vIGRlZmF1bHQgc3RhdGVzLgordmFyIGdfZGVmYXVsdFN0YXRlVmFsdWVz
ID0ge307CisKIAotLyoqCi0gKiBEZWZhdWx0IGhhc2ggcGFyYW1ldGVycyBmb3IgdGhlIHBhZ2Uu
IFRoZSBwYWdlIHNob3VsZCBvdmVycmlkZSB0aGlzIHRvIGNyZWF0ZQotICogZGVmYXVsdCBzdGF0
ZXMuCi0gKi8KLXZhciBkZWZhdWx0U3RhdGVWYWx1ZXMgPSB7fTsKLQotCi0vKioKLSAqIFRoZSBw
YWdlIHNob3VsZCBvdmVycmlkZSB0aGlzIHRvIG1vZGlmeSBwYWdlIHN0YXRlIGR1ZSB0bwotICog
Y2hhbmdpbmcgcXVlcnkgcGFyYW1ldGVycy4KLSAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgTmV3
IG9yIG1vZGlmaWVkIHF1ZXJ5IHBhcmFtcyBhcyBrZXk6IHZhbHVlLgotICogQHJldHVybiB7Ym9v
bGVhbn0gV2hldGhlciBjaGFuZ2luZyB0aGlzIHBhcmFtZXRlciBzaG91bGQgY2F1c2UgZ2VuZXJh
dGVQYWdlIHRvIGJlIGNhbGxlZC4KLSAqLwotZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJD
aGFuZ2UocGFyYW1zKSB7Ci0gIHJldHVybiB0cnVlOworLy8gVGhlIHBhZ2Ugc2hvdWxkIG92ZXJy
aWRlIHRoaXMgdG8gbW9kaWZ5IHBhZ2Ugc3RhdGUgZHVlIHRvCisvLyBjaGFuZ2luZyBxdWVyeSBw
YXJhbWV0ZXJzLgorLy8gQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVl
cnkgcGFyYW1zIGFzIGtleTogdmFsdWUuCisvLyBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIGNo
YW5naW5nIHRoaXMgcGFyYW1ldGVyIHNob3VsZCBjYXVzZSBnZW5lcmF0ZVBhZ2UgdG8gYmUgY2Fs
bGVkLgorZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1zKQoreworICAg
IHJldHVybiB0cnVlOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIENPTlNUQU5UUwog
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCiB2YXIgR1RFU1RfRVhQRUNUQVRJT05TX01BUF8gPSB7Ci0g
ICdQJzogJ1BBU1MnLAotICAnRic6ICdGQUlMJywKLSAgJ0wnOiAnRkxBS1knLAotICAnTic6ICdO
TyBEQVRBJywKLSAgJ1gnOiAnRElTQUJMRUQnCisgICAgJ1AnOiAnUEFTUycsCisgICAgJ0YnOiAn
RkFJTCcsCisgICAgJ0wnOiAnRkxBS1knLAorICAgICdOJzogJ05PIERBVEEnLAorICAgICdYJzog
J0RJU0FCTEVEJwogfTsKIAogdmFyIExBWU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfID0gewot
ICAnUCc6ICdQQVNTJywKLSAgJ04nOiAnTk8gREFUQScsCi0gICdYJzogJ1NLSVAnLAotICAnVCc6
ICdUSU1FT1VUJywKLSAgJ0YnOiAnVEVYVCcsCi0gICdDJzogJ0NSQVNIJywKLSAgJ0knOiAnSU1B
R0UnLAotICAnWic6ICdJTUFHRStURVhUJywKLSAgLy8gV2UgdXNlZCB0byBnbG9iIGEgYnVuY2gg
b2YgZXhwZWN0YXRpb25zIGludG8gIk8iIGFzIE9USEVSLiBFeHBlY3RhdGlvbnMKLSAgLy8gYXJl
IG1vcmUgcHJlY2lzZSBub3cgdGhvdWdoIGFuZCBpdCBqdXN0IG1lYW5zIE1JU1NJTkcuCi0gICdP
JzogJ01JU1NJTkcnCisgICAgJ1AnOiAnUEFTUycsCisgICAgJ04nOiAnTk8gREFUQScsCisgICAg
J1gnOiAnU0tJUCcsCisgICAgJ1QnOiAnVElNRU9VVCcsCisgICAgJ0YnOiAnVEVYVCcsCisgICAg
J0MnOiAnQ1JBU0gnLAorICAgICdJJzogJ0lNQUdFJywKKyAgICAnWic6ICdJTUFHRStURVhUJywK
KyAgICAvLyBXZSB1c2VkIHRvIGdsb2IgYSBidW5jaCBvZiBleHBlY3RhdGlvbnMgaW50byAiTyIg
YXMgT1RIRVIuIEV4cGVjdGF0aW9ucworICAgIC8vIGFyZSBtb3JlIHByZWNpc2Ugbm93IHRob3Vn
aCBhbmQgaXQganVzdCBtZWFucyBNSVNTSU5HLgorICAgICdPJzogJ01JU1NJTkcnCiB9OwogCiB2
YXIgRkFJTFVSRV9FWFBFQ1RBVElPTlNfID0gewotICAnVCc6IDEsCi0gICdGJzogMSwKLSAgJ0Mn
OiAxLAotICAnSSc6IDEsCi0gICdaJzogMQorICAgICdUJzogMSwKKyAgICAnRic6IDEsCisgICAg
J0MnOiAxLAorICAgICdJJzogMSwKKyAgICAnWic6IDEKIH07CiAKIC8vIEtleXMgaW4gdGhlIEpT
T04gZmlsZXMuCkBAIC0xMjMsMjk3ICsxMTIsMjg5IEBAIHZhciBURVNUU19LRVkgPSAndGVzdHMn
OwogLy8gVGhlc2Ugc2hvdWxkIG1hdGNoIHRoZSB0ZXN0dHlwZSB1cGxvYWRlZCB0byB0ZXN0LXJl
c3VsdHMuYXBwc3BvdC5jb20uCiAvLyBTZWUgaHR0cDovL3Rlc3QtcmVzdWx0cy5hcHBzcG90LmNv
bS90ZXN0ZmlsZS4KIHZhciBURVNUX1RZUEVTID0gWydhcHBfdW5pdHRlc3RzJywgJ2Jhc2VfdW5p
dHRlc3RzJywgJ2Jyb3dzZXJfdGVzdHMnLAotICAgICdjYWNoZV9pbnZhbGlkYXRpb25fdW5pdHRl
c3RzJywgJ2NvdXJnZXR0ZV91bml0dGVzdHMnLAotICAgICdjcnlwdG9fdW5pdHRlc3RzJywgJ2dv
b2dsZXVybF91bml0dGVzdHMnLCAnZ3B1X3VuaXR0ZXN0cycsCi0gICAgJ2luc3RhbGxlcl91dGls
X3VuaXR0ZXN0cycsICdpbnRlcmFjdGl2ZV91aV90ZXN0cycsICdpcGNfdGVzdHMnLAotICAgICdq
aW5nbGVfdW5pdHRlc3RzJywgJ2xheW91dC10ZXN0cycsICdtZWRpYV91bml0dGVzdHMnLAotICAg
ICdtaW5pX2luc3RhbGxlcl90ZXN0JywgJ25hY2xfdWlfdGVzdHMnLCAnbmV0X3VuaXR0ZXN0cycs
Ci0gICAgJ3ByaW50aW5nX3VuaXR0ZXN0cycsICdyZW1vdGluZ191bml0dGVzdHMnLCAnc2FmZV9i
cm93c2luZ190ZXN0cycsCi0gICAgJ3N5bmNfdW5pdF90ZXN0cycsICdzeW5jX2ludGVncmF0aW9u
X3Rlc3RzJywKLSAgICAndGVzdF9zaGVsbF90ZXN0cycsICd1aV90ZXN0cycsICd1bml0X3Rlc3Rz
J107CisgICAgICAgICdjYWNoZV9pbnZhbGlkYXRpb25fdW5pdHRlc3RzJywgJ2NvdXJnZXR0ZV91
bml0dGVzdHMnLAorICAgICAgICAnY3J5cHRvX3VuaXR0ZXN0cycsICdnb29nbGV1cmxfdW5pdHRl
c3RzJywgJ2dwdV91bml0dGVzdHMnLAorICAgICAgICAnaW5zdGFsbGVyX3V0aWxfdW5pdHRlc3Rz
JywgJ2ludGVyYWN0aXZlX3VpX3Rlc3RzJywgJ2lwY190ZXN0cycsCisgICAgICAgICdqaW5nbGVf
dW5pdHRlc3RzJywgJ2xheW91dC10ZXN0cycsICdtZWRpYV91bml0dGVzdHMnLAorICAgICAgICAn
bWluaV9pbnN0YWxsZXJfdGVzdCcsICduYWNsX3VpX3Rlc3RzJywgJ25ldF91bml0dGVzdHMnLAor
ICAgICAgICAncHJpbnRpbmdfdW5pdHRlc3RzJywgJ3JlbW90aW5nX3VuaXR0ZXN0cycsICdzYWZl
X2Jyb3dzaW5nX3Rlc3RzJywKKyAgICAgICAgJ3N5bmNfdW5pdF90ZXN0cycsICdzeW5jX2ludGVn
cmF0aW9uX3Rlc3RzJywKKyAgICAgICAgJ3Rlc3Rfc2hlbGxfdGVzdHMnLCAndWlfdGVzdHMnLCAn
dW5pdF90ZXN0cyddOwogCiB2YXIgUkVMT0FEX1JFUVVJUklOR19QQVJBTUVURVJTID0gWydzaG93
QWxsUnVucycsICdncm91cCcsICd0ZXN0VHlwZSddOwogCiAvLyBFbnVtIGZvciBpbmRleGluZyBp
bnRvIHRoZSBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cyBpbiB0aGUgSlNPTiBmaWxlcy4KIC8v
IDAgaXMgd2hlcmUgdGhlIGNvdW50IGlzIGxlbmd0aCBpcyBzdG9yZWQuIDEgaXMgdGhlIHZhbHVl
LgogdmFyIFJMRSA9IHsKLSAgTEVOR1RIOiAwLAotICBWQUxVRTogMQorICAgIExFTkdUSDogMCwK
KyAgICBWQUxVRTogMQogfQogCi0vLyBUaGUgc2VydmVyIHRoYXQgaG9zdHMgdGhlIGJ1aWxkZXIg
cmVzdWx0cyBqc29uIGZpbGVzLgogdmFyIFRFU1RfUkVTVUxUU19TRVJWRVIgPSAnaHR0cDovL3Rl
c3QtcmVzdWx0cy5hcHBzcG90LmNvbS8nOwogCi0vKioKLSAqIEByZXR1cm4ge2Jvb2xlYW59IFdo
ZXRoZXIgdGhlIHZhbHVlIHJlcHJlc2VudHMgYSBmYWlsaW5nIHJlc3VsdC4KLSAqLwotZnVuY3Rp
b24gaXNGYWlsaW5nUmVzdWx0KHZhbHVlKSB7Ci0gIHJldHVybiAnRlNUT0NJWicuaW5kZXhPZih2
YWx1ZSkgIT0gLTE7CitmdW5jdGlvbiBpc0ZhaWxpbmdSZXN1bHQodmFsdWUpCit7CisgICAgcmV0
dXJuICdGU1RPQ0laJy5pbmRleE9mKHZhbHVlKSAhPSAtMTsKIH0KIAotLyoqCi0gKiBUYWtlcyBh
IGtleSBhbmQgYSB2YWx1ZSBhbmQgc2V0cyB0aGUgY3VycmVudFN0YXRlW2tleV0gPSB2YWx1ZSBp
ZmYga2V5IGlzCi0gKiBhIHZhbGlkIGhhc2ggcGFyYW1ldGVyIGFuZCB0aGUgdmFsdWUgaXMgYSB2
YWxpZCB2YWx1ZSBmb3IgdGhhdCBrZXkuIEhhbmRsZXMKLSAqIGNyb3NzLWRhc2hib2FyZCBwYXJh
bWV0ZXJzIHRoZW4gZmFsbHMgYmFjayB0byBjYWxsaW5nCi0gKiBoYW5kbGVWYWxpZEhhc2hQYXJh
bWV0ZXIgZm9yIGRhc2hib2FyZC1zcGVjaWZpYyBwYXJhbWV0ZXJzLgotICoKLSAqIEByZXR1cm4g
e2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtleSB3aGF0IGluc2VydGVkIGludG8gdGhlIGN1cnJlbnRT
dGF0ZS4KLSAqLwotZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyV3JhcHBlcihrZXks
IHZhbHVlKSB7Ci0gIHN3aXRjaChrZXkpIHsKKy8vIFRha2VzIGEga2V5IGFuZCBhIHZhbHVlIGFu
ZCBzZXRzIHRoZSBnX2N1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWUgaWZmIGtleSBpcworLy8gYSB2
YWxpZCBoYXNoIHBhcmFtZXRlciBhbmQgdGhlIHZhbHVlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRo
YXQga2V5LiBIYW5kbGVzCisvLyBjcm9zcy1kYXNoYm9hcmQgcGFyYW1ldGVycyB0aGVuIGZhbGxz
IGJhY2sgdG8gY2FsbGluZworLy8gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyIGZvciBkYXNoYm9h
cmQtc3BlY2lmaWMgcGFyYW1ldGVycy4KKy8vCisvLyBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVy
IHRoZSBrZXkgd2hhdCBpbnNlcnRlZCBpbnRvIHRoZSBnX2N1cnJlbnRTdGF0ZS4KK2Z1bmN0aW9u
IGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcldyYXBwZXIoa2V5LCB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2goa2V5KSB7CiAgICAgY2FzZSAndGVzdFR5cGUnOgotICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIo
Y3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAotICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgcmV0dXJuIFRFU1RfVFlQRVMuaW5kZXhPZih2YWx1ZSkgIT0gLTE7Ci0gICAgICAgICAg
fSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJy
ZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIFRF
U1RfVFlQRVMuaW5kZXhPZih2YWx1ZSkgIT0gLTE7IH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGNhc2UgJ2dyb3VwJzoKLSAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGN1cnJlbnRTdGF0
ZSwga2V5LCB2YWx1ZSwKLSAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVy
biB2YWx1ZSBpbiBMQVlPVVRfVEVTVFNfQlVJTERFUl9HUk9VUFM7Ci0gICAgICAgICAgfSk7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3Rh
dGUsIGtleSwgdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlIGlu
IExBWU9VVF9URVNUU19CVUlMREVSX0dST1VQUzsgfSk7CisgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgLy8gRklYTUU6IHJlbW92ZSBzdXBwb3J0IGZvciB0aGlzIHBhcmFtZXRlciBvbmNlIHRo
ZSB3YXRlcmZhbGwgc3RhcnRzIHRvCiAgICAgLy8gcGFzcyBpbiB0aGUgYnVpbGRlciBuYW1lIGlu
c3RlYWQuCiAgICAgY2FzZSAnbWFzdGVyJzoKLSAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGN1cnJl
bnRTdGF0ZSwga2V5LCB2YWx1ZSwKLSAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IHJldHVybiB2YWx1ZSBpbiBMRUdBQ1lfQlVJTERFUl9NQVNURVJTX1RPX0dST1VQUzsKLSAgICAg
ICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOworICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihn
X2N1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1
cm4gdmFsdWUgaW4gTEVHQUNZX0JVSUxERVJfTUFTVEVSU19UT19HUk9VUFM7IH0pOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgJ2J1aWxkZXInOgotICAgICAgdmFsaWRhdGVQYXJh
bWV0ZXIoY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAotICAgICAgICAgIGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluIGJ1aWxkZXJzOwotICAgICAgICAgIH0pOwotICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGdfY3VycmVudFN0YXRl
LCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZSBpbiBn
X2J1aWxkZXJzOyB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlICd1c2VUZXN0
RGF0YSc6CiAgICAgY2FzZSAnc2hvd0FsbFJ1bnMnOgotICAgICAgY3VycmVudFN0YXRlW2tleV0g
PSB2YWx1ZSA9PSAndHJ1ZSc7Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZ19jdXJyZW50
U3RhdGVba2V5XSA9IHZhbHVlID09ICd0cnVlJzsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBjYXNlICdidWlsZERpcic6Ci0gICAgICBjdXJyZW50U3RhdGVbJ3Rlc3RUeXBlJ10gPSAnbGF5
b3V0LXRlc3QtcmVzdWx0cyc7Ci0gICAgICBpZiAodmFsdWUgPT09ICdEZWJ1ZycgfHwgdmFsdWUg
PT0gJ1JlbGVhc2UnKSB7Ci0gICAgICAgIGN1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgfQorICAgICAgICBnX2N1cnJlbnRTdGF0ZVsndGVzdFR5cGUnXSA9ICdsYXlvdXQtdGVz
dC1yZXN1bHRzJzsKKyAgICAgICAgaWYgKHZhbHVlID09PSAnRGVidWcnIHx8IHZhbHVlID09ICdS
ZWxlYXNlJykgeworICAgICAgICAgICAgZ19jdXJyZW50U3RhdGVba2V5XSA9IHZhbHVlOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBoYW5kbGVWYWxpZEhhc2hQYXJh
bWV0ZXIoa2V5LCB2YWx1ZSk7Ci0gIH0KKyAgICAgICAgcmV0dXJuIGhhbmRsZVZhbGlkSGFzaFBh
cmFtZXRlcihrZXksIHZhbHVlKTsKKyAgICB9CiB9CiAKLXZhciBkZWZhdWx0Q3Jvc3NEYXNoYm9h
cmRTdGF0ZVZhbHVlcyA9IHsKLSAgZ3JvdXA6ICdAREVQUyAtIGNocm9taXVtLm9yZycsCi0gIHNo
b3dBbGxSdW5zOiBmYWxzZSwKLSAgdGVzdFR5cGU6ICdsYXlvdXQtdGVzdHMnLAotICBidWlsZERp
ciA6ICcnCit2YXIgZ19kZWZhdWx0Q3Jvc3NEYXNoYm9hcmRTdGF0ZVZhbHVlcyA9IHsKKyAgICBn
cm91cDogJ0BERVBTIC0gY2hyb21pdW0ub3JnJywKKyAgICBzaG93QWxsUnVuczogZmFsc2UsCisg
ICAgdGVzdFR5cGU6ICdsYXlvdXQtdGVzdHMnLAorICAgIGJ1aWxkRGlyIDogJycKIH0KIAogLy8g
R2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9ucy4KLWZ1bmN0aW9uICQoaWQpIHsKLSAgcmV0dXJuIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKK2Z1bmN0aW9uICQoaWQpCit7CisgICAgcmV0dXJu
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKIH0KIAotZnVuY3Rpb24gc3RyaW5nQ29udGFp
bnMoYSwgYikgewotICByZXR1cm4gYS5pbmRleE9mKGIpICE9IC0xOworZnVuY3Rpb24gc3RyaW5n
Q29udGFpbnMoYSwgYikKK3sKKyAgICByZXR1cm4gYS5pbmRleE9mKGIpICE9IC0xOwogfQogCi1m
dW5jdGlvbiBjYXNlSW5zZW5zaXRpdmVDb250YWlucyhhLCBiKSB7Ci0gIHJldHVybiBhLm1hdGNo
KG5ldyBSZWdFeHAoYiwgJ2knKSk7CitmdW5jdGlvbiBjYXNlSW5zZW5zaXRpdmVDb250YWlucyhh
LCBiKQoreworICAgIHJldHVybiBhLm1hdGNoKG5ldyBSZWdFeHAoYiwgJ2knKSk7CiB9CiAKLWZ1
bmN0aW9uIHN0YXJ0c1dpdGgoYSwgYikgewotICByZXR1cm4gYS5pbmRleE9mKGIpID09IDA7Citm
dW5jdGlvbiBzdGFydHNXaXRoKGEsIGIpCit7CisgICAgcmV0dXJuIGEuaW5kZXhPZihiKSA9PSAw
OwogfQogCi1mdW5jdGlvbiBlbmRzV2l0aChhLCBiKSB7Ci0gIHJldHVybiBhLmxhc3RJbmRleE9m
KGIpID09IGEubGVuZ3RoIC0gYi5sZW5ndGg7CitmdW5jdGlvbiBlbmRzV2l0aChhLCBiKQorewor
ICAgIHJldHVybiBhLmxhc3RJbmRleE9mKGIpID09IGEubGVuZ3RoIC0gYi5sZW5ndGg7CiB9CiAK
LWZ1bmN0aW9uIGlzVmFsaWROYW1lKHN0cikgewotICByZXR1cm4gc3RyLm1hdGNoKC9bQS1aYS16
MC05XC1cXyxdLyk7CitmdW5jdGlvbiBpc1ZhbGlkTmFtZShzdHIpCit7CisgICAgcmV0dXJuIHN0
ci5tYXRjaCgvW0EtWmEtejAtOVwtXF8sXS8pOwogfQogCi1mdW5jdGlvbiB0cmltU3RyaW5nKHN0
cikgewotICByZXR1cm4gc3RyLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CitmdW5jdGlvbiB0
cmltU3RyaW5nKHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAn
Jyk7CiB9CiAKLWZ1bmN0aW9uIHJlcXVlc3QodXJsLCBzdWNjZXNzLCBlcnJvciwgb3B0X2lzQmlu
YXJ5RGF0YSkgewotICBjb25zb2xlLmxvZygnWE1MSHR0cFJlcXVlc3Q6ICcgKyB1cmwpOwotICB2
YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRy
dWUpOwotICBpZiAob3B0X2lzQmluYXJ5RGF0YSkKLSAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSgn
dGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCcpOwotICB4aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gZnVuY3Rpb24oZSkgewotICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KSB7Ci0g
ICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApCi0gICAgICAgIHN1Y2Nlc3MoeGhyKTsKLSAgICAg
IGVsc2UKLSAgICAgICAgZXJyb3IoeGhyKTsKK2Z1bmN0aW9uIHJlcXVlc3QodXJsLCBzdWNjZXNz
LCBlcnJvciwgb3B0X2lzQmluYXJ5RGF0YSkKK3sKKyAgICBjb25zb2xlLmxvZygnWE1MSHR0cFJl
cXVlc3Q6ICcgKyB1cmwpOworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAg
ICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgICBpZiAob3B0X2lzQmluYXJ5RGF0YSkK
KyAgICAgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW47IGNoYXJzZXQ9eC11c2Vy
LWRlZmluZWQnKTsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgICAgICAgaWYgKHhoci5z
dGF0dXMgPT0gMjAwKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MoeGhyKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBlcnJvcih4aHIpOworICAgICAgICB9CiAgICAgfQotICB9
Ci0gIHhoci5zZW5kKCk7CisgICAgeGhyLnNlbmQoKTsKIH0KIAotZnVuY3Rpb24gdmFsaWRhdGVQ
YXJhbWV0ZXIoc3RhdGUsIGtleSwgdmFsdWUsIHZhbGlkYXRlRm4pIHsKLSAgaWYgKHZhbGlkYXRl
Rm4oKSkgewotICAgIHN0YXRlW2tleV0gPSB2YWx1ZTsKLSAgfSBlbHNlIHsKLSAgICBjb25zb2xl
LmxvZyhrZXkgKyAnIHZhbHVlIGlzIG5vdCB2YWxpZDogJyArIHZhbHVlKTsKLSAgfQorZnVuY3Rp
b24gdmFsaWRhdGVQYXJhbWV0ZXIoc3RhdGUsIGtleSwgdmFsdWUsIHZhbGlkYXRlRm4pCit7Cisg
ICAgaWYgKHZhbGlkYXRlRm4oKSkKKyAgICAgICAgc3RhdGVba2V5XSA9IHZhbHVlOworICAgIGVs
c2UKKyAgICAgICAgY29uc29sZS5sb2coa2V5ICsgJyB2YWx1ZSBpcyBub3QgdmFsaWQ6ICcgKyB2
YWx1ZSk7CiB9CiAKLS8qKgotICogUGFyc2VzIHdpbmRvdy5sb2NhdGlvbi5oYXNoIGFuZCBzZXQg
dGhlIGN1cnJlbnRTdGF0ZSB2YWx1ZXMgYXBwcm9wcmlhdGVseS4KLSAqLwotZnVuY3Rpb24gcGFy
c2VQYXJhbWV0ZXJzKHBhcmFtZXRlclN0cikgewotICBvbGRTdGF0ZSA9IGN1cnJlbnRTdGF0ZTsK
LSAgY3VycmVudFN0YXRlID0ge307Ci0KLSAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFz
aDsKLSAgdmFyIHBhcmFtc0xpc3QgPSBoYXNoID8gaGFzaC5zdWJzdHJpbmcoMSkuc3BsaXQoJyYn
KSA6IFtdOwotICB2YXIgcGFyYW1zTWFwID0ge307Ci0gIHZhciBpbnZhbGlkS2V5cyA9IFtdOwot
ICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtc0xpc3QubGVuZ3RoOyBpKyspIHsKLSAgICB2YXIg
dGhpc1BhcmFtID0gcGFyYW1zTGlzdFtpXS5zcGxpdCgnPScpOwotICAgIGlmICh0aGlzUGFyYW0u
bGVuZ3RoICE9IDIpIHsKLSAgICAgIGNvbnNvbGUubG9nKCdJbnZhbGlkIHF1ZXJ5IHBhcmFtZXRl
cjogJyArIHBhcmFtc0xpc3RbaV0pOwotICAgICAgY29udGludWU7CitmdW5jdGlvbiBwYXJzZVBh
cmFtZXRlcnMocGFyYW1ldGVyU3RyKQoreworICAgIGdfb2xkU3RhdGUgPSBnX2N1cnJlbnRTdGF0
ZTsKKyAgICBnX2N1cnJlbnRTdGF0ZSA9IHt9OworCisgICAgdmFyIGhhc2ggPSB3aW5kb3cubG9j
YXRpb24uaGFzaDsKKyAgICB2YXIgcGFyYW1zTGlzdCA9IGhhc2ggPyBoYXNoLnN1YnN0cmluZygx
KS5zcGxpdCgnJicpIDogW107CisgICAgdmFyIHBhcmFtc01hcCA9IHt9OworICAgIHZhciBpbnZh
bGlkS2V5cyA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zTGlzdC5sZW5ndGg7
IGkrKykgeworICAgICAgICB2YXIgdGhpc1BhcmFtID0gcGFyYW1zTGlzdFtpXS5zcGxpdCgnPScp
OworICAgICAgICBpZiAodGhpc1BhcmFtLmxlbmd0aCAhPSAyKSB7CisgICAgICAgICAgICBjb25z
b2xlLmxvZygnSW52YWxpZCBxdWVyeSBwYXJhbWV0ZXI6ICcgKyBwYXJhbXNMaXN0W2ldKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcGFyYW1zTWFwW3RoaXNQ
YXJhbVswXV0gPSBkZWNvZGVVUklDb21wb25lbnQodGhpc1BhcmFtWzFdKTsKICAgICB9CiAKLSAg
ICBwYXJhbXNNYXBbdGhpc1BhcmFtWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzUGFyYW1b
MV0pOwotICB9Ci0KLSAgZnVuY3Rpb24gcGFyc2VQYXJhbShrZXkpIHsKLSAgICB2YXIgdmFsdWUg
PSBwYXJhbXNNYXBba2V5XTsKLSAgICBpZiAoIWhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcldyYXBw
ZXIoa2V5LCB2YWx1ZSkpCi0gICAgICBpbnZhbGlkS2V5cy5wdXNoKGtleSArICc9JyArIHZhbHVl
KTsKLSAgfQotCi0gIC8vIFBhcnNlIGJ1aWxkZXIgcGFyYW0gbGFzdCwgc2luY2UgdGhlIGxpc3Qg
b2YgdmFsaWQgYnVpbGRlcnMgZGVwZW5kcyBvbiB0aGUKLSAgLy8gb3RoZXIgcGFyYW1ldGVycy4K
LSAgZm9yICh2YXIga2V5IGluIHBhcmFtc01hcCkgewotICAgIGlmIChrZXkgIT0gJ2J1aWxkZXIn
KQotICAgICAgcGFyc2VQYXJhbShrZXkpOwotICB9Ci0gIGlmICgnYnVpbGRlcicgaW4gcGFyYW1z
TWFwKSB7Ci0gICAgaWYgKCFidWlsZGVycykgewotICAgICAgdmFyIHRlbXBTdGF0ZSA9IHt9Owot
ICAgICAgZm9yICh2YXIga2V5IGluIGN1cnJlbnRTdGF0ZSkgewotICAgICAgICB0ZW1wU3RhdGVb
a2V5XSA9IGN1cnJlbnRTdGF0ZVtrZXldOwotICAgICAgfQotICAgICAgZmlsbE1pc3NpbmdWYWx1
ZXModGVtcFN0YXRlLCBkZWZhdWx0Q3Jvc3NEYXNoYm9hcmRTdGF0ZVZhbHVlcyk7Ci0gICAgICBm
aWxsTWlzc2luZ1ZhbHVlcyh0ZW1wU3RhdGUsIGRlZmF1bHRTdGF0ZVZhbHVlcyk7Ci0gICAgICBp
bml0QnVpbGRlcnModGVtcFN0YXRlKTsKKyAgICBmdW5jdGlvbiBwYXJzZVBhcmFtKGtleSkKKyAg
ICB7CisgICAgICAgIHZhciB2YWx1ZSA9IHBhcmFtc01hcFtrZXldOworICAgICAgICBpZiAoIWhh
bmRsZVZhbGlkSGFzaFBhcmFtZXRlcldyYXBwZXIoa2V5LCB2YWx1ZSkpCisgICAgICAgICAgICBp
bnZhbGlkS2V5cy5wdXNoKGtleSArICc9JyArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBQYXJz
ZSBidWlsZGVyIHBhcmFtIGxhc3QsIHNpbmNlIHRoZSBsaXN0IG9mIHZhbGlkIGJ1aWxkZXJzIGRl
cGVuZHMgb24gdGhlIG90aGVyIHBhcmFtZXRlcnMuCisgICAgZm9yICh2YXIga2V5IGluIHBhcmFt
c01hcCkgeworICAgICAgICBpZiAoa2V5ICE9ICdidWlsZGVyJykKKyAgICAgICAgICAgIHBhcnNl
UGFyYW0oa2V5KTsKKyAgICB9CisgICAgaWYgKCdidWlsZGVyJyBpbiBwYXJhbXNNYXApIHsKKyAg
ICAgICAgaWYgKCFnX2J1aWxkZXJzKSB7CisgICAgICAgICAgICB2YXIgdGVtcFN0YXRlID0ge307
CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZ19jdXJyZW50U3RhdGUpCisgICAgICAgICAg
ICAgICAgdGVtcFN0YXRlW2tleV0gPSBnX2N1cnJlbnRTdGF0ZVtrZXldOworICAgICAgICAgICAg
ZmlsbE1pc3NpbmdWYWx1ZXModGVtcFN0YXRlLCBnX2RlZmF1bHRDcm9zc0Rhc2hib2FyZFN0YXRl
VmFsdWVzKTsKKyAgICAgICAgICAgIGZpbGxNaXNzaW5nVmFsdWVzKHRlbXBTdGF0ZSwgZ19kZWZh
dWx0U3RhdGVWYWx1ZXMpOworICAgICAgICAgICAgaW5pdEJ1aWxkZXJzKHRlbXBTdGF0ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcGFyc2VQYXJhbSgnYnVpbGRlcicpOwogICAgIH0KLSAgICBwYXJz
ZVBhcmFtKCdidWlsZGVyJyk7Ci0gIH0KIAotICBpZiAoaW52YWxpZEtleXMubGVuZ3RoKQotICAg
IGNvbnNvbGUubG9nKCJJbnZhbGlkIHF1ZXJ5IHBhcmFtZXRlcnM6ICIgKyBpbnZhbGlkS2V5cy5q
b2luKCcsJykpOworICAgIGlmIChpbnZhbGlkS2V5cy5sZW5ndGgpCisgICAgICAgIGNvbnNvbGUu
bG9nKCJJbnZhbGlkIHF1ZXJ5IHBhcmFtZXRlcnM6ICIgKyBpbnZhbGlkS2V5cy5qb2luKCcsJykp
OwogCi0gIHZhciBkaWZmU3RhdGUgPSBkaWZmU3RhdGVzKCk7CisgICAgdmFyIGRpZmZTdGF0ZSA9
IGRpZmZTdGF0ZXMoKTsKIAotICBmaWxsTWlzc2luZ1ZhbHVlcyhjdXJyZW50U3RhdGUsIGRlZmF1
bHRDcm9zc0Rhc2hib2FyZFN0YXRlVmFsdWVzKTsKLSAgZmlsbE1pc3NpbmdWYWx1ZXMoY3VycmVu
dFN0YXRlLCBkZWZhdWx0U3RhdGVWYWx1ZXMpOworICAgIGZpbGxNaXNzaW5nVmFsdWVzKGdfY3Vy
cmVudFN0YXRlLCBnX2RlZmF1bHRDcm9zc0Rhc2hib2FyZFN0YXRlVmFsdWVzKTsKKyAgICBmaWxs
TWlzc2luZ1ZhbHVlcyhnX2N1cnJlbnRTdGF0ZSwgZ19kZWZhdWx0U3RhdGVWYWx1ZXMpOwogCi0g
IC8vIFNvbWUgcGFyYW1ldGVycyByZXF1aXJlIGxvYWRpbmcgZGlmZmVyZW50IEpTT04gZmlsZXMg
d2hlbiB0aGUgdmFsdWUgY2hhbmdlcy4gRG8gYSByZWxvYWQuCi0gIGlmIChvbGRTdGF0ZSkgewot
ICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50U3RhdGUpIHsKLSAgICAgIGlmIChvbGRTdGF0ZVtr
ZXldICE9IGN1cnJlbnRTdGF0ZVtrZXldICYmIFJFTE9BRF9SRVFVSVJJTkdfUEFSQU1FVEVSUy5p
bmRleE9mKGtleSkgIT0gLTEpCi0gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKKyAg
ICAvLyBTb21lIHBhcmFtZXRlcnMgcmVxdWlyZSBsb2FkaW5nIGRpZmZlcmVudCBKU09OIGZpbGVz
IHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMuIERvIGEgcmVsb2FkLgorICAgIGlmIChnX29sZFN0YXRl
KSB7CisgICAgICAgIGZvciAodmFyIGtleSBpbiBnX2N1cnJlbnRTdGF0ZSkgeworICAgICAgICAg
ICAgaWYgKGdfb2xkU3RhdGVba2V5XSAhPSBnX2N1cnJlbnRTdGF0ZVtrZXldICYmIFJFTE9BRF9S
RVFVSVJJTkdfUEFSQU1FVEVSUy5pbmRleE9mKGtleSkgIT0gLTEpCisgICAgICAgICAgICAgICAg
d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgcmV0
dXJuIGRpZmZTdGF0ZTsKKyAgICByZXR1cm4gZGlmZlN0YXRlOwogfQogCi0vKioKLSAqIEZpbmQg
dGhlIGRpZmZlcmVuY2Ugb2YgY3VycmVudFN0YXRlIHdpdGggb2xkU3RhdGUuCi0gKiBAcmV0dXJu
IHtPYmplY3R9IGtleTp2YWx1ZXMgb2YgdGhlIG5ldyBvciBjaGFuZ2VkIHBhcmFtcy4KLSAqLwot
ZnVuY3Rpb24gZGlmZlN0YXRlcygpIHsKLSAgLy8gSWYgdGhlcmUgaXMgbm8gb2xkIHN0YXRlLCBl
dmVyeXRoaW5nIGluIHRoZSBjdXJyZW50IHN0YXRlIGlzIG5ldy4KLSAgaWYgKCFvbGRTdGF0ZSkg
ewotICAgIHJldHVybiBjdXJyZW50U3RhdGU7Ci0gIH0KLQotICB2YXIgY2hhbmdlZFBhcmFtcyA9
IHt9OwotICBmb3IgKGN1cktleSBpbiBjdXJyZW50U3RhdGUpIHsKLSAgICB2YXIgb2xkVmFsID0g
b2xkU3RhdGVbY3VyS2V5XTsKLSAgICB2YXIgbmV3VmFsID0gY3VycmVudFN0YXRlW2N1cktleV07
Ci0gICAgLy8gQWRkIG5ldyBrZXlzIG9yIGNoYW5nZWQgdmFsdWVzLgotICAgIGlmICghb2xkVmFs
IHx8IG9sZFZhbCAhPSBuZXdWYWwpIHsKLSAgICAgIGNoYW5nZWRQYXJhbXNbY3VyS2V5XSA9IG5l
d1ZhbDsKKy8vIEZpbmQgdGhlIGRpZmZlcmVuY2Ugb2YgZ19jdXJyZW50U3RhdGUgd2l0aCBnX29s
ZFN0YXRlLgorLy8gQHJldHVybiB7T2JqZWN0fSBrZXk6dmFsdWVzIG9mIHRoZSBuZXcgb3IgY2hh
bmdlZCBwYXJhbXMuCitmdW5jdGlvbiBkaWZmU3RhdGVzKCkKK3sKKyAgICAvLyBJZiB0aGVyZSBp
cyBubyBvbGQgc3RhdGUsIGV2ZXJ5dGhpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaXMgbmV3Lgor
ICAgIGlmICghZ19vbGRTdGF0ZSkKKyAgICAgICAgcmV0dXJuIGdfY3VycmVudFN0YXRlOworCisg
ICAgdmFyIGNoYW5nZWRQYXJhbXMgPSB7fTsKKyAgICBmb3IgKGN1cktleSBpbiBnX2N1cnJlbnRT
dGF0ZSkgeworICAgICAgICB2YXIgb2xkVmFsID0gZ19vbGRTdGF0ZVtjdXJLZXldOworICAgICAg
ICB2YXIgbmV3VmFsID0gZ19jdXJyZW50U3RhdGVbY3VyS2V5XTsKKyAgICAgICAgLy8gQWRkIG5l
dyBrZXlzIG9yIGNoYW5nZWQgdmFsdWVzLgorICAgICAgICBpZiAoIW9sZFZhbCB8fCBvbGRWYWwg
IT0gbmV3VmFsKQorICAgICAgICAgICAgY2hhbmdlZFBhcmFtc1tjdXJLZXldID0gbmV3VmFsOwog
ICAgIH0KLSAgfQotICByZXR1cm4gY2hhbmdlZFBhcmFtczsKKyAgICByZXR1cm4gY2hhbmdlZFBh
cmFtczsKIH0KIAotZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKGtleSkgewotICBpZiAoa2V5IGlu
IGRlZmF1bHRTdGF0ZVZhbHVlcykKLSAgICByZXR1cm4gZGVmYXVsdFN0YXRlVmFsdWVzW2tleV07
Ci0gIHJldHVybiBkZWZhdWx0Q3Jvc3NEYXNoYm9hcmRTdGF0ZVZhbHVlc1trZXldOworZnVuY3Rp
b24gZ2V0RGVmYXVsdFZhbHVlKGtleSkKK3sKKyAgICBpZiAoa2V5IGluIGdfZGVmYXVsdFN0YXRl
VmFsdWVzKQorICAgICAgICByZXR1cm4gZ19kZWZhdWx0U3RhdGVWYWx1ZXNba2V5XTsKKyAgICBy
ZXR1cm4gZ19kZWZhdWx0Q3Jvc3NEYXNoYm9hcmRTdGF0ZVZhbHVlc1trZXldOwogfQogCi1mdW5j
dGlvbiBmaWxsTWlzc2luZ1ZhbHVlcyh0bywgZnJvbSkgewotICBmb3IgKHZhciBzdGF0ZSBpbiBm
cm9tKSB7Ci0gICAgaWYgKCEoc3RhdGUgaW4gdG8pKQotICAgICAgdG9bc3RhdGVdID0gZnJvbVtz
dGF0ZV07Ci0gIH0KK2Z1bmN0aW9uIGZpbGxNaXNzaW5nVmFsdWVzKHRvLCBmcm9tKQoreworICAg
IGZvciAodmFyIHN0YXRlIGluIGZyb20pIHsKKyAgICAgICAgaWYgKCEoc3RhdGUgaW4gdG8pKQor
ICAgICAgICAgICAgdG9bc3RhdGVdID0gZnJvbVtzdGF0ZV07CisgICAgfQogfQogCi0vKioKLSAq
IExvYWQgYSBzY3JpcHQuCi0gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHRvIHRoZSBzY3Jp
cHQgdG8gbG9hZC4KLSAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRfb25FcnJvciBPcHRpb25hbCBm
dW5jdGlvbiB0byBjYWxsIGlmIHRoZSBzY3JpcHQKLSAqICAgICBkb2VzIG5vdCBsb2FkLgotICog
QHBhcmFtIHtGdW5jdGlvbj19IG9wdF9vbkxvYWQgT3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3
aGVuIHRoZSBzY3JpcHQKLSAqICAgICBpcyBsb2FkZWQuICBDYWxsZWQgd2l0aCB0aGUgc2NyaXB0
IGVsZW1lbnQgYXMgaXRzIDFzdCBhcmd1bWVudC4KLSAqLwotZnVuY3Rpb24gYXBwZW5kU2NyaXB0
KHBhdGgsIG9wdF9vbkVycm9yLCBvcHRfb25Mb2FkKSB7Ci0gIHZhciBzY3JpcHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKLSAgc2NyaXB0LnNyYyA9IHBhdGg7Ci0gIGlmIChv
cHRfb25Mb2FkKSB7Ci0gICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKSBvcHRfb25Mb2FkKHNj
cmlwdCk7Ci0gICAgfTsKLSAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24oKSB7IG9wdF9vbkxv
YWQoc2NyaXB0KTsgfTsKLSAgfQotICBpZiAob3B0X29uRXJyb3IpIHsKLSAgICBzY3JpcHQub25l
cnJvciA9IG9wdF9vbkVycm9yOwotICB9Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTsKKy8vIExvYWQgYSBzY3JpcHQuCisvLyBA
cGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHRvIHRoZSBzY3JpcHQgdG8gbG9hZC4KKy8vIEBwYXJh
bSB7RnVuY3Rpb249fSBvcHRfb25FcnJvciBPcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIGlmIHRo
ZSBzY3JpcHQKKy8vICAgICAgICAgZG9lcyBub3QgbG9hZC4KKy8vIEBwYXJhbSB7RnVuY3Rpb249
fSBvcHRfb25Mb2FkIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgc2NyaXB0Cisv
LyAgICAgICAgIGlzIGxvYWRlZC4gICAgQ2FsbGVkIHdpdGggdGhlIHNjcmlwdCBlbGVtZW50IGFz
IGl0cyAxc3QgYXJndW1lbnQuCitmdW5jdGlvbiBhcHBlbmRTY3JpcHQocGF0aCwgb3B0X29uRXJy
b3IsIG9wdF9vbkxvYWQpCit7CisgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3NjcmlwdCcpOworICAgIHNjcmlwdC5zcmMgPSBwYXRoOworICAgIGlmIChvcHRfb25Mb2Fk
KSB7CisgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gJ2NvbXBsZXRlJykKKyAgICAgICAgICAg
ICAgICBvcHRfb25Mb2FkKHNjcmlwdCk7CisgICAgICAgIH07CisgICAgICAgIHNjcmlwdC5vbmxv
YWQgPSBmdW5jdGlvbigpIHsgb3B0X29uTG9hZChzY3JpcHQpOyB9OworICAgIH0KKyAgICBpZiAo
b3B0X29uRXJyb3IpCisgICAgICAgIHNjcmlwdC5vbmVycm9yID0gb3B0X29uRXJyb3I7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3Jp
cHQpOwogfQogCiAvLyBQZXJtYWxpbmthYmxlIHN0YXRlIG9mIHRoZSBwYWdlLgotdmFyIGN1cnJl
bnRTdGF0ZTsKK3ZhciBnX2N1cnJlbnRTdGF0ZTsKIAotLy8gU2F2ZWQgdmFsdWUgb2YgcHJldmlv
dXMgY3VycmVudFN0YXRlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZWN0IGNoYW5naW5nIGZyb20KKy8v
IFNhdmVkIHZhbHVlIG9mIHByZXZpb3VzIGdfY3VycmVudFN0YXRlLiBUaGlzIGlzIHVzZWQgdG8g
ZGV0ZWN0IGNoYW5naW5nIGZyb20KIC8vIG9uZSBzZXQgb2YgYnVpbGRlcnMgdG8gYW5vdGhlciwg
d2hpY2ggcmVxdWlyZXMgcmVsb2FkaW5nIHRoZSBwYWdlLgotdmFyIG9sZFN0YXRlOwordmFyIGdf
b2xkU3RhdGU7CiAKIC8vIFBhcnNlIGNyb3NzLWRhc2hib2FyZCBwYXJhbWV0ZXJzIGJlZm9yZSB1
c2luZyB0aGVtLgogcGFyc2VQYXJhbWV0ZXJzKCk7CiAKLWZ1bmN0aW9uIGlzTGF5b3V0VGVzdFJl
c3VsdHMoKSB7Ci0gIHJldHVybiBjdXJyZW50U3RhdGUudGVzdFR5cGUgPT0gJ2xheW91dC10ZXN0
cyc7CitmdW5jdGlvbiBpc0xheW91dFRlc3RSZXN1bHRzKCkKK3sKKyAgICByZXR1cm4gZ19jdXJy
ZW50U3RhdGUudGVzdFR5cGUgPT0gJ2xheW91dC10ZXN0cyc7CiB9CiAKLWZ1bmN0aW9uIGdldEN1
cnJlbnRCdWlsZGVyR3JvdXAob3B0X3N0YXRlKSB7Ci0gIHZhciBzdGF0ZSA9IG9wdF9zdGF0ZSB8
fCBjdXJyZW50U3RhdGU7Ci0gIHN3aXRjaCAoc3RhdGUudGVzdFR5cGUpIHsKK2Z1bmN0aW9uIGdl
dEN1cnJlbnRCdWlsZGVyR3JvdXAob3B0X3N0YXRlKQoreworICAgIHZhciBzdGF0ZSA9IG9wdF9z
dGF0ZSB8fCBnX2N1cnJlbnRTdGF0ZTsKKyAgICBzd2l0Y2ggKHN0YXRlLnRlc3RUeXBlKSB7CiAg
ICAgY2FzZSAnbGF5b3V0LXRlc3RzJzoKLSAgICAgIHJldHVybiBMQVlPVVRfVEVTVFNfQlVJTERF
Ul9HUk9VUFNbc3RhdGUuZ3JvdXBdCi0gICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIExBWU9V
VF9URVNUU19CVUlMREVSX0dST1VQU1tzdGF0ZS5ncm91cF0KKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSAnYXBwX3VuaXR0ZXN0cyc6CiAgICAgY2FzZSAnYmFzZV91bml0dGVzdHMnOgogICAgIGNh
c2UgJ2Jyb3dzZXJfdGVzdHMnOgpAQCAtNDM4LDYyNiArNDE5LDYwOSBAQCBmdW5jdGlvbiBnZXRD
dXJyZW50QnVpbGRlckdyb3VwKG9wdF9zdGF0ZSkgewogICAgIGNhc2UgJ3Rlc3Rfc2hlbGxfdGVz
dHMnOgogICAgIGNhc2UgJ3VpX3Rlc3RzJzoKICAgICBjYXNlICd1bml0X3Rlc3RzJzoKLSAgICAg
IHJldHVybiBHX1RFU1RTX0JVSUxERVJfR1JPVVA7Ci0gICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIEdfVEVTVFNfQlVJTERFUl9HUk9VUDsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
LSAgICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkIHRlc3RUeXBlIHBhcmFtZXRlcjogJyArIHN0YXRl
LnRlc3RUeXBlKTsKLSAgfQorICAgICAgICBjb25zb2xlLmxvZygnaW52YWxpZCB0ZXN0VHlwZSBw
YXJhbWV0ZXI6ICcgKyBzdGF0ZS50ZXN0VHlwZSk7CisgICAgfQogfQogCi1mdW5jdGlvbiBnZXRC
dWlsZGVyTWFzdGVyKGJ1aWxkZXJOYW1lKSB7Ci0gIHJldHVybiBCVUlMREVSX1RPX01BU1RFUlti
dWlsZGVyTmFtZV07CitmdW5jdGlvbiBnZXRCdWlsZGVyTWFzdGVyKGJ1aWxkZXJOYW1lKQorewor
ICAgIHJldHVybiBCVUlMREVSX1RPX01BU1RFUltidWlsZGVyTmFtZV07CiB9CiAKLWZ1bmN0aW9u
IGlzVGlwT2ZUcmVlV2ViS2l0QnVpbGRlcigpIHsKLSAgcmV0dXJuIGdldEN1cnJlbnRCdWlsZGVy
R3JvdXAoKS5pc1RvVFdlYktpdDsKK2Z1bmN0aW9uIGlzVGlwT2ZUcmVlV2ViS2l0QnVpbGRlcigp
Cit7CisgICAgcmV0dXJuIGdldEN1cnJlbnRCdWlsZGVyR3JvdXAoKS5pc1RvVFdlYktpdDsKIH0K
IAotdmFyIGRlZmF1bHRCdWlsZGVyTmFtZSwgYnVpbGRlcnMsIGV4cGVjdGF0aW9uc0J1aWxkZXI7
Ci1mdW5jdGlvbiBpbml0QnVpbGRlcnMoc3RhdGUpIHsKLSAgaWYgKHN0YXRlLmJ1aWxkRGlyKSB7
Ci0gICAgLy8gSWYgYnVpbGREaXIgaXMgc2V0LCBwb2ludCB0byB0aGUgcmVzdWx0cy5qc29uIGFu
ZCBleHBlY3RhdGlvbnMuanNvbiBpbiB0aGUKLSAgICAvLyBsb2NhbCB0cmVlLiBVc2VmdWwgZm9y
IGRlYnVnZ2luZyBjaGFuZ2VzIHRvIHRoZSBweXRob24gSlNPTiBnZW5lcmF0b3IuCi0gICAgZGVm
YXVsdEJ1aWxkZXJOYW1lID0gJ0RVTU1ZX0JVSUxERVJfTkFNRSc7Ci0gICAgYnVpbGRlcnMgPSB7
J0RVTU1ZX0JVSUxERVJfTkFNRSc6ICcnfTsKLSAgICB2YXIgbG9jID0gZG9jdW1lbnQubG9jYXRp
b24udG9TdHJpbmcoKTsKLSAgICB2YXIgb2Zmc2V0ID0gbG9jLmluZGV4T2YoJ3dlYmtpdC8nKTsK
LSAgfSBlbHNlIHsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHN1cHBvcnQgZm9yIG1hcHBpbmcgZnJv
bSB0aGUgbWFzdGVyIHBhcmFtZXRlciB0byB0aGUgZ3JvdXAKLSAgICAvLyBvbmUgb25jZSB0aGUg
d2F0ZXJmYWxsIHN0YXJ0cyB0byBwYXNzIGluIHRoZSBidWlsZGVyIG5hbWUgaW5zdGVhZC4KLSAg
ICBpZiAoc3RhdGUubWFzdGVyKSB7Ci0gICAgICBzdGF0ZS5ncm91cCA9IExFR0FDWV9CVUlMREVS
X01BU1RFUlNfVE9fR1JPVVBTW3N0YXRlLm1hc3Rlcl07Ci0gICAgICB3aW5kb3cubG9jYXRpb24u
aGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJ21hc3Rlcj0nICsgc3RhdGUubWFz
dGVyLCAnZ3JvdXA9JyArIHN0YXRlLmdyb3VwKTsKLSAgICAgIGRlbGV0ZSBzdGF0ZS5tYXN0ZXI7
Cit2YXIgZ19kZWZhdWx0QnVpbGRlck5hbWUsIGdfYnVpbGRlcnMsIGdfZXhwZWN0YXRpb25zQnVp
bGRlcjsKK2Z1bmN0aW9uIGluaXRCdWlsZGVycyhzdGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUuYnVp
bGREaXIpIHsKKyAgICAgICAgLy8gSWYgYnVpbGREaXIgaXMgc2V0LCBwb2ludCB0byB0aGUgcmVz
dWx0cy5qc29uIGFuZCBleHBlY3RhdGlvbnMuanNvbiBpbiB0aGUKKyAgICAgICAgLy8gbG9jYWwg
dHJlZS4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgY2hhbmdlcyB0byB0aGUgcHl0aG9uIEpTT04gZ2Vu
ZXJhdG9yLgorICAgICAgICBnX2RlZmF1bHRCdWlsZGVyTmFtZSA9ICdEVU1NWV9CVUlMREVSX05B
TUUnOworICAgICAgICBnX2J1aWxkZXJzID0geydEVU1NWV9CVUlMREVSX05BTUUnOiAnJ307Cisg
ICAgICAgIHZhciBsb2MgPSBkb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpOworICAgICAgICB2
YXIgb2Zmc2V0ID0gbG9jLmluZGV4T2YoJ3dlYmtpdC8nKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHN1cHBvcnQgZm9yIG1hcHBpbmcgZnJvbSB0aGUgbWFzdGVyIHBh
cmFtZXRlciB0byB0aGUgZ3JvdXAKKyAgICAgICAgLy8gb25lIG9uY2UgdGhlIHdhdGVyZmFsbCBz
dGFydHMgdG8gcGFzcyBpbiB0aGUgYnVpbGRlciBuYW1lIGluc3RlYWQuCisgICAgICAgIGlmIChz
dGF0ZS5tYXN0ZXIpIHsKKyAgICAgICAgICAgIHN0YXRlLmdyb3VwID0gTEVHQUNZX0JVSUxERVJf
TUFTVEVSU19UT19HUk9VUFNbc3RhdGUubWFzdGVyXTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2Nh
dGlvbi5oYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnbWFzdGVyPScgKyBzdGF0
ZS5tYXN0ZXIsICdncm91cD0nICsgc3RhdGUuZ3JvdXApOworICAgICAgICAgICAgZGVsZXRlIHN0
YXRlLm1hc3RlcjsKKyAgICAgICAgfQorICAgICAgICBnZXRDdXJyZW50QnVpbGRlckdyb3VwKHN0
YXRlKS5zZXR1cCgpOwogICAgIH0KLSAgICBnZXRDdXJyZW50QnVpbGRlckdyb3VwKHN0YXRlKS5z
ZXR1cCgpOwotICB9CiB9Ci1pbml0QnVpbGRlcnMoY3VycmVudFN0YXRlKTsKK2luaXRCdWlsZGVy
cyhnX2N1cnJlbnRTdGF0ZSk7CiAKIC8vIEFwcGVuZCBKU09OIHNjcmlwdCBlbGVtZW50cy4KLXZh
ciByZXN1bHRzQnlCdWlsZGVyID0ge307Ci12YXIgZXhwZWN0YXRpb25zQnlUZXN0ID0ge307Ci1m
dW5jdGlvbiBBRERfUkVTVUxUUyhidWlsZHMpIHsKLSAgZm9yICh2YXIgYnVpbGRlck5hbWUgaW4g
YnVpbGRzKSB7Ci0gICAgaWYgKGJ1aWxkZXJOYW1lICE9ICd2ZXJzaW9uJykKLSAgICAgIHJlc3Vs
dHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdID0gYnVpbGRzW2J1aWxkZXJOYW1lXTsKLSAgfQotCi0g
IGhhbmRsZVJlc291cmNlTG9hZCgpOwordmFyIGdfcmVzdWx0c0J5QnVpbGRlciA9IHt9OwordmFy
IGdfZXhwZWN0YXRpb25zQnlUZXN0ID0ge307CitmdW5jdGlvbiBBRERfUkVTVUxUUyhidWlsZHMp
Cit7CisgICAgZm9yICh2YXIgYnVpbGRlck5hbWUgaW4gYnVpbGRzKSB7CisgICAgICAgIGlmIChi
dWlsZGVyTmFtZSAhPSAndmVyc2lvbicpCisgICAgICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlck5hbWVdID0gYnVpbGRzW2J1aWxkZXJOYW1lXTsKKyAgICB9CisKKyAgICBoYW5kbGVS
ZXNvdXJjZUxvYWQoKTsKIH0KIAotZnVuY3Rpb24gZ2V0UGF0aFRvQnVpbGRlclJlc3VsdHNGaWxl
KGJ1aWxkZXJOYW1lKSB7Ci0gIHJldHVybiBURVNUX1JFU1VMVFNfU0VSVkVSICsgJ3Rlc3RmaWxl
P2J1aWxkZXI9JyArIGJ1aWxkZXJOYW1lICsKLSAgICAgICcmbWFzdGVyPScgKyBnZXRCdWlsZGVy
TWFzdGVyKGJ1aWxkZXJOYW1lKS5uYW1lICsKLSAgICAgICcmdGVzdHR5cGU9JyArIGN1cnJlbnRT
dGF0ZS50ZXN0VHlwZSArICcmbmFtZT0nOworZnVuY3Rpb24gZ2V0UGF0aFRvQnVpbGRlclJlc3Vs
dHNGaWxlKGJ1aWxkZXJOYW1lKQoreworICAgIHJldHVybiBURVNUX1JFU1VMVFNfU0VSVkVSICsg
J3Rlc3RmaWxlP2J1aWxkZXI9JyArIGJ1aWxkZXJOYW1lICsKKyAgICAgICAgICAgICcmbWFzdGVy
PScgKyBnZXRCdWlsZGVyTWFzdGVyKGJ1aWxkZXJOYW1lKS5uYW1lICsKKyAgICAgICAgICAgICcm
dGVzdHR5cGU9JyArIGdfY3VycmVudFN0YXRlLnRlc3RUeXBlICsgJyZuYW1lPSc7CiB9CiAKIC8v
IE9ubHkgd2Via2l0IHRlc3RzIGhhdmUgYSBzZW5zZSBvZiB0ZXN0IGV4cGVjdGF0aW9ucy4KLXZh
ciB3YWl0aW5nT25FeHBlY3RhdGlvbnMgPSBpc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgIWlzVHJl
ZU1hcCgpOwotaWYgKHdhaXRpbmdPbkV4cGVjdGF0aW9ucykgewotICBmdW5jdGlvbiBBRERfRVhQ
RUNUQVRJT05TKGV4cGVjdGF0aW9ucykgewotICAgIHdhaXRpbmdPbkV4cGVjdGF0aW9ucyA9IGZh
bHNlOwotICAgIGV4cGVjdGF0aW9uc0J5VGVzdCA9IGV4cGVjdGF0aW9uczsKLSAgICBoYW5kbGVS
ZXNvdXJjZUxvYWQoKTsKLSAgfQordmFyIGdfd2FpdGluZ09uRXhwZWN0YXRpb25zID0gaXNMYXlv
dXRUZXN0UmVzdWx0cygpICYmICFpc1RyZWVNYXAoKTsKK2lmIChnX3dhaXRpbmdPbkV4cGVjdGF0
aW9ucykgeworICAgIGZ1bmN0aW9uIEFERF9FWFBFQ1RBVElPTlMoZXhwZWN0YXRpb25zKQorICAg
IHsKKyAgICAgICAgZ193YWl0aW5nT25FeHBlY3RhdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgZ19l
eHBlY3RhdGlvbnNCeVRlc3QgPSBleHBlY3RhdGlvbnM7CisgICAgICAgIGhhbmRsZVJlc291cmNl
TG9hZCgpOworICAgIH0KIH0KIAotZnVuY3Rpb24gaXNUcmVlTWFwKCkgewotICByZXR1cm4gZW5k
c1dpdGgod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCAndHJlZW1hcC5odG1sJyk7CitmdW5jdGlv
biBpc1RyZWVNYXAoKQoreworICAgIHJldHVybiBlbmRzV2l0aCh3aW5kb3cubG9jYXRpb24ucGF0
aG5hbWUsICd0cmVlbWFwLmh0bWwnKTsKIH0KIAotZnVuY3Rpb24gYXBwZW5kSlNPTlNjcmlwdEVs
ZW1lbnRGb3IoYnVpbGRlck5hbWUpIHsKLSAgdmFyIHJlc3VsdHNGaWxlbmFtZTsKLSAgaWYgKGlz
VHJlZU1hcCgpKQotICAgIHJlc3VsdHNGaWxlbmFtZSA9ICd0aW1lc19tcy5qc29uJzsKLSAgZWxz
ZSBpZiAoY3VycmVudFN0YXRlLnNob3dBbGxSdW5zKQotICAgIHJlc3VsdHNGaWxlbmFtZSA9ICdy
ZXN1bHRzLmpzb24nOwotICBlbHNlCi0gICAgcmVzdWx0c0ZpbGVuYW1lID0gJ3Jlc3VsdHMtc21h
bGwuanNvbic7Ci0KLSAgYXBwZW5kU2NyaXB0KGdldFBhdGhUb0J1aWxkZXJSZXN1bHRzRmlsZShi
dWlsZGVyTmFtZSkgKyByZXN1bHRzRmlsZW5hbWUsCi0gICAgICBwYXJ0aWFsKGhhbmRsZVJlc291
cmNlTG9hZEVycm9yLCBidWlsZGVyTmFtZSksCi0gICAgICBwYXJ0aWFsKGhhbmRsZVNjcmlwdExv
YWRlZCwgYnVpbGRlck5hbWUpKTsKK2Z1bmN0aW9uIGFwcGVuZEpTT05TY3JpcHRFbGVtZW50Rm9y
KGJ1aWxkZXJOYW1lKQoreworICAgIHZhciByZXN1bHRzRmlsZW5hbWU7CisgICAgaWYgKGlzVHJl
ZU1hcCgpKQorICAgICAgICByZXN1bHRzRmlsZW5hbWUgPSAndGltZXNfbXMuanNvbic7CisgICAg
ZWxzZSBpZiAoZ19jdXJyZW50U3RhdGUuc2hvd0FsbFJ1bnMpCisgICAgICAgIHJlc3VsdHNGaWxl
bmFtZSA9ICdyZXN1bHRzLmpzb24nOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0c0ZpbGVuYW1l
ID0gJ3Jlc3VsdHMtc21hbGwuanNvbic7CisKKyAgICBhcHBlbmRTY3JpcHQoZ2V0UGF0aFRvQnVp
bGRlclJlc3VsdHNGaWxlKGJ1aWxkZXJOYW1lKSArIHJlc3VsdHNGaWxlbmFtZSwKKyAgICAgICAg
ICAgIHBhcnRpYWwoaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IsIGJ1aWxkZXJOYW1lKSwKKyAgICAg
ICAgICAgIHBhcnRpYWwoaGFuZGxlU2NyaXB0TG9hZGVkLCBidWlsZGVyTmFtZSkpOwogfQogCi1m
dW5jdGlvbiBhcHBlbmRKU09OU2NyaXB0RWxlbWVudHMoKSB7Ci0gIGNsZWFyRXJyb3JzKCk7Citm
dW5jdGlvbiBhcHBlbmRKU09OU2NyaXB0RWxlbWVudHMoKQoreworICAgIGNsZWFyRXJyb3JzKCk7
CiAKLSAgaWYgKGlzVHJlZU1hcCgpKQotICAgIHJldHVybjsKKyAgICBpZiAoaXNUcmVlTWFwKCkp
CisgICAgICAgIHJldHVybjsKIAotICBwYXJzZVBhcmFtZXRlcnMoKTsKKyAgICBwYXJzZVBhcmFt
ZXRlcnMoKTsKIAotICBpZiAoY3VycmVudFN0YXRlLnVzZVRlc3REYXRhKSB7Ci0gICAgYXBwZW5k
U2NyaXB0KCdmbGFraW5lc3NfZGFzaGJvYXJkX3Rlc3RzLmpzJyk7Ci0gICAgcmV0dXJuOwotICB9
CisgICAgaWYgKGdfY3VycmVudFN0YXRlLnVzZVRlc3REYXRhKSB7CisgICAgICAgIGFwcGVuZFNj
cmlwdCgnZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5qcycpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gIGZvciAodmFyIGJ1aWxkZXJOYW1lIGluIGJ1aWxkZXJzKSB7Ci0gICAgYXBwZW5k
SlNPTlNjcmlwdEVsZW1lbnRGb3IoYnVpbGRlck5hbWUpOwotICB9CisgICAgZm9yICh2YXIgYnVp
bGRlck5hbWUgaW4gZ19idWlsZGVycykKKyAgICAgICAgYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRG
b3IoYnVpbGRlck5hbWUpOwogCi0gIC8vIEdyYWIgZXhwZWN0YXRpb25zIGZpbGUgZnJvbSB0aGUg
ZmFzdGVzdCBidWlsZGVyLCB3aGljaCBpcyBMaW51eCByZWxlYXNlCi0gIC8vIHJpZ2h0IG5vdy4g
IENvdWxkIGJlIGNoYW5nZWQgdG8gYW55IG90aGVyIGJ1aWxkZXIgaWYgbmVlZGVkLgotICBpZiAo
d2FpdGluZ09uRXhwZWN0YXRpb25zKSB7Ci0gICAgYXBwZW5kU2NyaXB0KGdldFBhdGhUb0J1aWxk
ZXJSZXN1bHRzRmlsZShleHBlY3RhdGlvbnNCdWlsZGVyKSArCi0gICAgICAgICdleHBlY3RhdGlv
bnMuanNvbicpOwotICB9CisgICAgLy8gR3JhYiBleHBlY3RhdGlvbnMgZmlsZSBmcm9tIHRoZSBm
YXN0ZXN0IGJ1aWxkZXIsIHdoaWNoIGlzIExpbnV4IHJlbGVhc2UKKyAgICAvLyByaWdodCBub3cu
ICAgIENvdWxkIGJlIGNoYW5nZWQgdG8gYW55IG90aGVyIGJ1aWxkZXIgaWYgbmVlZGVkLgorICAg
IGlmIChnX3dhaXRpbmdPbkV4cGVjdGF0aW9ucykKKyAgICAgICAgYXBwZW5kU2NyaXB0KGdldFBh
dGhUb0J1aWxkZXJSZXN1bHRzRmlsZShnX2V4cGVjdGF0aW9uc0J1aWxkZXIpICsgJ2V4cGVjdGF0
aW9ucy5qc29uJyk7CiB9CiAKLXZhciBoYXNEb25lSW5pdGlhbFBhZ2VHZW5lcmF0aW9uID0gZmFs
c2U7Cit2YXIgZ19oYXNEb25lSW5pdGlhbFBhZ2VHZW5lcmF0aW9uID0gZmFsc2U7CiAvLyBTdHJp
bmcgb2YgZXJyb3IgbWVzc2FnZXMgdG8gZGlzcGxheSB0byB0aGUgdXNlci4KLXZhciBlcnJvck1l
c3NhZ2VzID0gJyc7Ci0KLWZ1bmN0aW9uIGhhbmRsZVJlc291cmNlTG9hZCgpIHsKLSAgLy8gSW4g
Y2FzZSB3ZSBsb2FkIGEgcmVzdWx0cy5qc29uIHRoYXQncyBub3QgaW4gdGhlIGxpc3Qgb2YgYnVp
bGRlcnMsCi0gIC8vIG1ha2Ugc3VyZSB0byBvbmx5IGNhbGwgaGFuZGxlTG9jYXRpb25DaGFuZ2Ug
b25jZSBmcm9tIHRoZSByZXNvdXJjZSBsb2Fkcy4KLSAgaWYgKCFoYXNEb25lSW5pdGlhbFBhZ2VH
ZW5lcmF0aW9uKQotICAgIGhhbmRsZUxvY2F0aW9uQ2hhbmdlKCk7Cit2YXIgZ19lcnJvck1lc3Nh
Z2VzID0gJyc7CisKK2Z1bmN0aW9uIGhhbmRsZVJlc291cmNlTG9hZCgpCit7CisgICAgLy8gSW4g
Y2FzZSB3ZSBsb2FkIGEgcmVzdWx0cy5qc29uIHRoYXQncyBub3QgaW4gdGhlIGxpc3Qgb2YgYnVp
bGRlcnMsCisgICAgLy8gbWFrZSBzdXJlIHRvIG9ubHkgY2FsbCBoYW5kbGVMb2NhdGlvbkNoYW5n
ZSBvbmNlIGZyb20gdGhlIHJlc291cmNlIGxvYWRzLgorICAgIGlmICghZ19oYXNEb25lSW5pdGlh
bFBhZ2VHZW5lcmF0aW9uKQorICAgICAgICBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpOwogfQogCi1m
dW5jdGlvbiBoYW5kbGVTY3JpcHRMb2FkZWQoYnVpbGRlck5hbWUsIHNjcmlwdCkgewotICAvLyBX
ZSBuZWVkIHRoaXMgd29yay1hcm91bmQgZm9yIHdlYmtpdC5vcmcvYi81MDU4OS4KLSAgaWYgKCFy
ZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSkgewotICAgIHZhciBlcnJvciA9IG5ldyBFcnJv
cigiQnVpbGRlciBkYXRhIHdhcyBlbXB0eSIpOwotICAgIGVycm9yLnRhcmdldCA9IHNjcmlwdDsK
LSAgICBoYW5kbGVSZXNvdXJjZUxvYWRFcnJvcihidWlsZGVyTmFtZSwgZXJyb3IpOwotICB9Citm
dW5jdGlvbiBoYW5kbGVTY3JpcHRMb2FkZWQoYnVpbGRlck5hbWUsIHNjcmlwdCkKK3sKKyAgICAv
LyBXZSBuZWVkIHRoaXMgd29yay1hcm91bmQgZm9yIHdlYmtpdC5vcmcvYi81MDU4OS4KKyAgICBp
ZiAoIWdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0pIHsKKyAgICAgICAgdmFyIGVycm9y
ID0gbmV3IEVycm9yKCJCdWlsZGVyIGRhdGEgd2FzIGVtcHR5Iik7CisgICAgICAgIGVycm9yLnRh
cmdldCA9IHNjcmlwdDsKKyAgICAgICAgaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoYnVpbGRlck5h
bWUsIGVycm9yKTsKKyAgICB9CiB9CiAKLS8qKgotICogSGFuZGxlIHJlc291cmNlIGxvYWRpbmcg
ZXJyb3JzIC0gNDA0cywgNTAwcywgZXRjLiAgUmVjb3ZlciBmcm9tIHRoZSBlcnJvciB0bwotICog
c3RpbGwgc2hvdyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGJ1dCBzaG93IHNvbWUgVUkgYWJv
dXQgdGhlIGZhaWx1cmUsIGFuZAotICogZG8gbm90IHRyeSB1c2luZyB0aGlzIHJlc291cmNlIGFn
YWluIHVudGlsIHVzZXIgcmVmcmVzaGVzLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBidWlsZGVy
TmFtZSBOYW1lIG9mIGJ1aWxkZXIgdGhhdCB0aGUgcmVzb3VyY2UgZmFpbGVkIGZvci4KLSAqIEBw
YXJhbSB7RXZlbnR9IGUgVGhlIGVycm9yIGV2ZW50LgotICovCi1mdW5jdGlvbiBoYW5kbGVSZXNv
dXJjZUxvYWRFcnJvcihidWlsZGVyTmFtZSwgZSkgewotICB2YXIgZXJyb3IgPSBlLnRhcmdldC5z
cmMgKyAnIGZhaWxlZCB0byBsb2FkIGZvciAnICsgYnVpbGRlck5hbWUgKyAnLic7Ci0KLSAgaWYg
KGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgewotICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotICAg
IGFkZEVycm9yKGVycm9yKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBBdm9pZCB0byBzaG93IGVycm9y
L3dhcm5pbmcgbWVzc2FnZXMgZm9yIG5vbi1sYXlvdXQgdGVzdHMuIFdlIG1heSBiZQotICAgIC8v
IGNoZWNraW5nIHRoZSBidWlsZGVycyB0aGF0IGFyZSBub3QgcnVubmluZyB0aGUgdGVzdHMuCi0g
ICAgY29uc29sZS5pbmZvKCdpbmZvOicgKyBlcnJvcik7Ci0gIH0KLQotICAvLyBSZW1vdmUgdGhp
cyBidWlsZGVyIGZyb20gYnVpbGRlcnMsIHNvIHdlIGRvbid0IHRyeSB0byB1c2UgdGhlCi0gIC8v
IGRhdGEgdGhhdCBpc24ndCB0aGVyZS4KLSAgZGVsZXRlIGJ1aWxkZXJzW2J1aWxkZXJOYW1lXTsK
LQotICAvLyBDaGFuZ2UgdGhlIGRlZmF1bHQgYnVpbGRlciBuYW1lIGlmIGl0IGhhcyBiZWVuIGRl
bGV0ZWQuCi0gIGlmIChkZWZhdWx0QnVpbGRlck5hbWUgPT0gYnVpbGRlck5hbWUpIHsKLSAgICBk
ZWZhdWx0QnVpbGRlck5hbWUgPSBudWxsOwotICAgIGZvciAodmFyIGF2YWlsYWJsZUJ1aWxkZXJO
YW1lIGluIGJ1aWxkZXJzKSB7Ci0gICAgICBkZWZhdWx0QnVpbGRlck5hbWUgPSBhdmFpbGFibGVC
dWlsZGVyTmFtZTsKLSAgICAgIGRlZmF1bHRTdGF0ZVZhbHVlcy5idWlsZGVyID0gYXZhaWxhYmxl
QnVpbGRlck5hbWU7Ci0gICAgICBicmVhazsKKy8vIEhhbmRsZSByZXNvdXJjZSBsb2FkaW5nIGVy
cm9ycyAtIDQwNHMsIDUwMHMsIGV0Yy4gICAgUmVjb3ZlciBmcm9tIHRoZSBlcnJvciB0bworLy8g
c3RpbGwgc2hvdyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGJ1dCBzaG93IHNvbWUgVUkgYWJv
dXQgdGhlIGZhaWx1cmUsIGFuZAorLy8gZG8gbm90IHRyeSB1c2luZyB0aGlzIHJlc291cmNlIGFn
YWluIHVudGlsIHVzZXIgcmVmcmVzaGVzLgorLy8KKy8vIEBwYXJhbSB7c3RyaW5nfSBidWlsZGVy
TmFtZSBOYW1lIG9mIGJ1aWxkZXIgdGhhdCB0aGUgcmVzb3VyY2UgZmFpbGVkIGZvci4KKy8vIEBw
YXJhbSB7RXZlbnR9IGUgVGhlIGVycm9yIGV2ZW50LgorZnVuY3Rpb24gaGFuZGxlUmVzb3VyY2VM
b2FkRXJyb3IoYnVpbGRlck5hbWUsIGUpCit7CisgICAgdmFyIGVycm9yID0gZS50YXJnZXQuc3Jj
ICsgJyBmYWlsZWQgdG8gbG9hZCBmb3IgJyArIGJ1aWxkZXJOYW1lICsgJy4nOworCisgICAgaWYg
KGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgeworICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsK
KyAgICAgICAgYWRkRXJyb3IoZXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEF2b2lk
IHRvIHNob3cgZXJyb3Ivd2FybmluZyBtZXNzYWdlcyBmb3Igbm9uLWxheW91dCB0ZXN0cy4gV2Ug
bWF5IGJlCisgICAgICAgIC8vIGNoZWNraW5nIHRoZSBidWlsZGVycyB0aGF0IGFyZSBub3QgcnVu
bmluZyB0aGUgdGVzdHMuCisgICAgICAgIGNvbnNvbGUuaW5mbygnaW5mbzonICsgZXJyb3IpOwog
ICAgIH0KLSAgICBpZiAoIWRlZmF1bHRCdWlsZGVyTmFtZSkgewotICAgICAgdmFyIGVycm9yID0g
J05vIHRlc3RzIHJlc3VsdHMgZm91bmQgZm9yICcgKyBjdXJyZW50U3RhdGUudGVzdFR5cGUgKwot
ICAgICAgICAgICcuIFJlbG9hZCB0aGUgcGFnZSB0byB0cnkgZmV0Y2hpbmcgaXQgYWdhaW4uJzsK
LSAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotICAgICAgYWRkRXJyb3IoZXJyb3IpOworCisg
ICAgLy8gUmVtb3ZlIHRoaXMgYnVpbGRlciBmcm9tIGJ1aWxkZXJzLCBzbyB3ZSBkb24ndCB0cnkg
dG8gdXNlIHRoZQorICAgIC8vIGRhdGEgdGhhdCBpc24ndCB0aGVyZS4KKyAgICBkZWxldGUgZ19i
dWlsZGVyc1tidWlsZGVyTmFtZV07CisKKyAgICAvLyBDaGFuZ2UgdGhlIGRlZmF1bHQgYnVpbGRl
ciBuYW1lIGlmIGl0IGhhcyBiZWVuIGRlbGV0ZWQuCisgICAgaWYgKGdfZGVmYXVsdEJ1aWxkZXJO
YW1lID09IGJ1aWxkZXJOYW1lKSB7CisgICAgICAgIGdfZGVmYXVsdEJ1aWxkZXJOYW1lID0gbnVs
bDsKKyAgICAgICAgZm9yICh2YXIgYXZhaWxhYmxlQnVpbGRlck5hbWUgaW4gZ19idWlsZGVycykg
eworICAgICAgICAgICAgZ19kZWZhdWx0QnVpbGRlck5hbWUgPSBhdmFpbGFibGVCdWlsZGVyTmFt
ZTsKKyAgICAgICAgICAgIGdfZGVmYXVsdFN0YXRlVmFsdWVzLmJ1aWxkZXIgPSBhdmFpbGFibGVC
dWlsZGVyTmFtZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgh
Z19kZWZhdWx0QnVpbGRlck5hbWUpIHsKKyAgICAgICAgICAgIHZhciBlcnJvciA9ICdObyB0ZXN0
cyByZXN1bHRzIGZvdW5kIGZvciAnICsgZ19jdXJyZW50U3RhdGUudGVzdFR5cGUgKyAnLiBSZWxv
YWQgdGhlIHBhZ2UgdG8gdHJ5IGZldGNoaW5nIGl0IGFnYWluLic7CisgICAgICAgICAgICBjb25z
b2xlLmVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIGFkZEVycm9yKGVycm9yKTsKKyAgICAgICAg
fQogICAgIH0KLSAgfQogCi0gIC8vIFByb2NlZWQgYXMgaWYgdGhlIHJlc291cmNlIGhhZCBsb2Fk
ZWQuCi0gIGhhbmRsZVJlc291cmNlTG9hZCgpOworICAgIC8vIFByb2NlZWQgYXMgaWYgdGhlIHJl
c291cmNlIGhhZCBsb2FkZWQuCisgICAgaGFuZGxlUmVzb3VyY2VMb2FkKCk7CiB9CiAKIAotLyoq
Ci0gKiBSZWNvcmQgYSBuZXcgZXJyb3IgbWVzc2FnZS4KLSAqIEBwYXJhbSB7c3RyaW5nfSBlcnJv
ck1zZyBUaGUgbWVzc2FnZSB0byBzaG93IHRvIHRoZSB1c2VyLgotICovCi1mdW5jdGlvbiBhZGRF
cnJvcihlcnJvck1zZykgewotICBlcnJvck1lc3NhZ2VzICs9IGVycm9yTXNnICsgJzxiciAvPic7
CisvLyBSZWNvcmQgYSBuZXcgZXJyb3IgbWVzc2FnZS4KKy8vIEBwYXJhbSB7c3RyaW5nfSBlcnJv
ck1zZyBUaGUgbWVzc2FnZSB0byBzaG93IHRvIHRoZSB1c2VyLgorZnVuY3Rpb24gYWRkRXJyb3Io
ZXJyb3JNc2cpCit7CisgICAgZ19lcnJvck1lc3NhZ2VzICs9IGVycm9yTXNnICsgJzxiciAvPic7
CiB9CiAKLS8qKgotICogQ2xlYXIgb3V0IGVycm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzLgotICov
Ci1mdW5jdGlvbiBjbGVhckVycm9ycygpIHsKLSAgZXJyb3JNZXNzYWdlcyA9ICcnOworLy8gQ2xl
YXIgb3V0IGVycm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzLgorZnVuY3Rpb24gY2xlYXJFcnJvcnMo
KQoreworICAgIGdfZXJyb3JNZXNzYWdlcyA9ICcnOwogfQogCi0vKioKLSAqIElmIHRoZXJlIGFy
ZSBlcnJvcnMsIHNob3cgYmlnIGFuZCByZWQgVUkgZm9yIGVycm9ycyBzbyBhcyB0byBiZSBub3Rp
Y2VkLgotICovCi1mdW5jdGlvbiBzaG93RXJyb3JzKCkgewotICB2YXIgZXJyb3JzID0gJCgnZXJy
b3JzJyk7Ci0KLSAgaWYgKCFlcnJvck1lc3NhZ2VzKSB7Ci0gICAgaWYgKGVycm9ycykKLSAgICAg
IGVycm9ycy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycm9ycyk7Ci0gICAgcmV0dXJuOwotICB9
Ci0KLSAgaWYgKCFlcnJvcnMpIHsKLSAgICBlcnJvcnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdIMicpOwotICAgIGVycm9ycy5zdHlsZS5jb2xvciA9ICdyZWQnOwotICAgIGVycm9ycy5pZCA9
ICdlcnJvcnMnOwotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXJyb3JzKTsKLSAgfQot
Ci0gIGVycm9ycy5pbm5lckhUTUwgPSBlcnJvck1lc3NhZ2VzOworLy8gSWYgdGhlcmUgYXJlIGVy
cm9ycywgc2hvdyBiaWcgYW5kIHJlZCBVSSBmb3IgZXJyb3JzIHNvIGFzIHRvIGJlIG5vdGljZWQu
CitmdW5jdGlvbiBzaG93RXJyb3JzKCkKK3sKKyAgICB2YXIgZXJyb3JzID0gJCgnZXJyb3JzJyk7
CisKKyAgICBpZiAoIWdfZXJyb3JNZXNzYWdlcykgeworICAgICAgICBpZiAoZXJyb3JzKQorICAg
ICAgICAgICAgZXJyb3JzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXJyb3JzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghZXJyb3JzKSB7CisgICAgICAgIGVycm9ycyA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0gyJyk7CisgICAgICAgIGVycm9ycy5zdHlsZS5jb2xvciA9
ICdyZWQnOworICAgICAgICBlcnJvcnMuaWQgPSAnZXJyb3JzJzsKKyAgICAgICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChlcnJvcnMpOworICAgIH0KKworICAgIGVycm9ycy5pbm5lckhUTUwg
PSBnX2Vycm9yTWVzc2FnZXM7CiB9CiAKLS8qKgotICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhl
ciB0aGUganNvbiBmaWxlcyBoYXZlIGFsbCBjb21wbGV0ZWQgbG9hZGluZy4KLSAqLwotZnVuY3Rp
b24gaGF2ZUpzb25GaWxlc0xvYWRlZCgpIHsKLSAgaWYgKHdhaXRpbmdPbkV4cGVjdGF0aW9ucykK
LSAgICByZXR1cm4gZmFsc2U7CisvLyBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBqc29u
IGZpbGVzIGhhdmUgYWxsIGNvbXBsZXRlZCBsb2FkaW5nLgorZnVuY3Rpb24gaGF2ZUpzb25GaWxl
c0xvYWRlZCgpCit7CisgICAgaWYgKGdfd2FpdGluZ09uRXhwZWN0YXRpb25zKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgaWYgKGlzVHJlZU1hcCgpKQotICAgIHJldHVybiB0cnVlOworICAg
IGlmIChpc1RyZWVNYXAoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgZm9yICh2YXIgYnVp
bGRlciBpbiBidWlsZGVycykgewotICAgIGlmICghcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXSkK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKHZhciBi
dWlsZGVyIGluIGdfYnVpbGRlcnMpIHsKKyAgICAgICAgaWYgKCFnX3Jlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlcl0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOwogfQogCi1mdW5jdGlvbiBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpIHsKLSAgaWYoIWhhdmVK
c29uRmlsZXNMb2FkZWQoKSkgewotICAgIHJldHVybjsKLSAgfQotCi0gIGhhc0RvbmVJbml0aWFs
UGFnZUdlbmVyYXRpb24gPSB0cnVlOwotCi0gIHZhciBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnMo
KTsKLSAgdmFyIHNob3VsZEdlbmVyYXRlUGFnZSA9IHRydWU7Ci0gIGlmIChPYmplY3Qua2V5cyhw
YXJhbXMpLmxlbmd0aCkKLSAgICBzaG91bGRHZW5lcmF0ZVBhZ2UgPSBoYW5kbGVRdWVyeVBhcmFt
ZXRlckNoYW5nZShwYXJhbXMpOwotCi0gIHZhciBuZXdIYXNoID0gZ2V0UGVybWFMaW5rVVJMSGFz
aCgpOwotICB2YXIgd2luSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoIHx8ICIjIjsKLSAgLy8g
TWFrZSBzdXJlIHRoZSBsb2NhdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGUgc3RhdGUgd2UgYXJlIHVz
aW5nIGludGVybmFsbHkuCi0gIC8vIFRoZXNlIGdldCBvdXQgb2Ygc3luYyBpZiBwcm9jZXNzUXVl
cnlQYXJhbUNoYW5nZSBjaGFuZ2VkIHN0YXRlLgotICBpZiAobmV3SGFzaCAhPSB3aW5IYXNoKSB7
Ci0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIGFub3RoZXIgaGFzaGNoYW5nZSwgYW5kIHdoZW4gd2Ug
bG9vcAotICAgIC8vIGJhY2sgdGhyb3VnaCBoZXJlIG5leHQgdGltZSwgd2UnbGwgZ28gdGhyb3Vn
aCBnZW5lcmF0ZVBhZ2UuCi0gICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBuZXdIYXNoOwotICB9
IGVsc2UgaWYgKHNob3VsZEdlbmVyYXRlUGFnZSkgewotICAgIGdlbmVyYXRlUGFnZSgpOwotICB9
CitmdW5jdGlvbiBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpCit7CisgICAgaWYoIWhhdmVKc29uRmls
ZXNMb2FkZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19oYXNEb25lSW5pdGlhbFBhZ2VH
ZW5lcmF0aW9uID0gdHJ1ZTsKKworICAgIHZhciBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnMoKTsK
KyAgICB2YXIgc2hvdWxkR2VuZXJhdGVQYWdlID0gdHJ1ZTsKKyAgICBpZiAoT2JqZWN0LmtleXMo
cGFyYW1zKS5sZW5ndGgpCisgICAgICAgIHNob3VsZEdlbmVyYXRlUGFnZSA9IGhhbmRsZVF1ZXJ5
UGFyYW1ldGVyQ2hhbmdlKHBhcmFtcyk7CisKKyAgICB2YXIgbmV3SGFzaCA9IGdldFBlcm1hTGlu
a1VSTEhhc2goKTsKKyAgICB2YXIgd2luSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoIHx8ICIj
IjsKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGxvY2F0aW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBzdGF0
ZSB3ZSBhcmUgdXNpbmcgaW50ZXJuYWxseS4KKyAgICAvLyBUaGVzZSBnZXQgb3V0IG9mIHN5bmMg
aWYgcHJvY2Vzc1F1ZXJ5UGFyYW1DaGFuZ2UgY2hhbmdlZCBzdGF0ZS4KKyAgICBpZiAobmV3SGFz
aCAhPSB3aW5IYXNoKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBhbm90aGVyIGhhc2hj
aGFuZ2UsIGFuZCB3aGVuIHdlIGxvb3AKKyAgICAgICAgLy8gYmFjayB0aHJvdWdoIGhlcmUgbmV4
dCB0aW1lLCB3ZSdsbCBnbyB0aHJvdWdoIGdlbmVyYXRlUGFnZS4KKyAgICAgICAgd2luZG93Lmxv
Y2F0aW9uLmhhc2ggPSBuZXdIYXNoOworICAgIH0gZWxzZSBpZiAoc2hvdWxkR2VuZXJhdGVQYWdl
KQorICAgICAgICBnZW5lcmF0ZVBhZ2UoKTsKIH0KIAogd2luZG93Lm9uaGFzaGNoYW5nZSA9IGhh
bmRsZUxvY2F0aW9uQ2hhbmdlOwogCi0vKioKLSAqIFNldHMgdGhlIHBhZ2Ugc3RhdGUuIFRha2Vz
IHZhcmFyZ3Mgb2Yga2V5LCB2YWx1ZSBwYWlycy4KLSAqLwotZnVuY3Rpb24gc2V0UXVlcnlQYXJh
bWV0ZXIodmFyX2FyZ3MpIHsKLSAgdmFyIHN0YXRlID0gT2JqZWN0LmNyZWF0ZShjdXJyZW50U3Rh
dGUpOwotICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMikgewot
ICAgIHZhciBrZXkgPSBhcmd1bWVudHNbaV07Ci0gICAgc3RhdGVba2V5XSA9IGFyZ3VtZW50c1tp
ICsgMV07Ci0gIH0KLSAgLy8gTm90ZTogV2UgdXNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoIHJhdGhl
ciB0aGF0IHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlCi0gIC8vIGJlY2F1c2Ugb2YgYnVncyBpbiBD
aHJvbWUgd2hlcmUgZXh0cmEgZW50cmllcyB3ZXJlIGdldHRpbmcgY3JlYXRlZAotICAvLyB3aGVu
IGJhY2sgYnV0dG9uIHdhcyBwcmVzc2VkIGFuZCBmdWxsIHBhZ2UgbmF2aWdhdGlvbiB3YXMgb2Nj
dXJpbmcuCi0gIC8vIFRPRE86IGZpbGUgdGhvc2UgYnVncy4KLSAgd2luZG93LmxvY2F0aW9uLmhh
c2ggPSBnZXRQZXJtYUxpbmtVUkxIYXNoKHN0YXRlKTsKKy8vIFNldHMgdGhlIHBhZ2Ugc3RhdGUu
IFRha2VzIHZhcmFyZ3Mgb2Yga2V5LCB2YWx1ZSBwYWlycy4KK2Z1bmN0aW9uIHNldFF1ZXJ5UGFy
YW1ldGVyKHZhcl9hcmdzKQoreworICAgIHZhciBzdGF0ZSA9IE9iamVjdC5jcmVhdGUoZ19jdXJy
ZW50U3RhdGUpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSAr
PSAyKSB7CisgICAgICAgIHZhciBrZXkgPSBhcmd1bWVudHNbaV07CisgICAgICAgIHN0YXRlW2tl
eV0gPSBhcmd1bWVudHNbaSArIDFdOworICAgIH0KKyAgICAvLyBOb3RlOiBXZSB1c2Ugd2luZG93
LmxvY2F0aW9uLmhhc2ggcmF0aGVyIHRoYXQgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UKKyAgICAv
LyBiZWNhdXNlIG9mIGJ1Z3MgaW4gQ2hyb21lIHdoZXJlIGV4dHJhIGVudHJpZXMgd2VyZSBnZXR0
aW5nIGNyZWF0ZWQKKyAgICAvLyB3aGVuIGJhY2sgYnV0dG9uIHdhcyBwcmVzc2VkIGFuZCBmdWxs
IHBhZ2UgbmF2aWdhdGlvbiB3YXMgb2NjdXJpbmcuCisgICAgLy8gVE9ETzogZmlsZSB0aG9zZSBi
dWdzLgorICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gZ2V0UGVybWFMaW5rVVJMSGFzaChzdGF0
ZSk7CiB9CiAKLWZ1bmN0aW9uIGdldFBlcm1hTGlua1VSTEhhc2gob3B0X3N0YXRlKSB7Ci0gIHZh
ciBzdGF0ZSA9IG9wdF9zdGF0ZSB8fCBjdXJyZW50U3RhdGU7Ci0gIHJldHVybiAnIycgKyBqb2lu
UGFyYW1ldGVycyhzdGF0ZSk7CitmdW5jdGlvbiBnZXRQZXJtYUxpbmtVUkxIYXNoKG9wdF9zdGF0
ZSkKK3sKKyAgICB2YXIgc3RhdGUgPSBvcHRfc3RhdGUgfHwgZ19jdXJyZW50U3RhdGU7CisgICAg
cmV0dXJuICcjJyArIGpvaW5QYXJhbWV0ZXJzKHN0YXRlKTsKIH0KIAotZnVuY3Rpb24gam9pblBh
cmFtZXRlcnMoc3RhdGVPYmplY3QpIHsKLSAgdmFyIHN0YXRlID0gW107Ci0gIGZvciAodmFyIGtl
eSBpbiBzdGF0ZU9iamVjdCkgewotICAgIHZhciB2YWx1ZSA9IHN0YXRlT2JqZWN0W2tleV07Ci0g
ICAgaWYgKHZhbHVlICE9IGdldERlZmF1bHRWYWx1ZShrZXkpKQotICAgICAgc3RhdGUucHVzaChr
ZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTsKLSAgfQotICByZXR1cm4gc3Rh
dGUuam9pbignJicpOworZnVuY3Rpb24gam9pblBhcmFtZXRlcnMoc3RhdGVPYmplY3QpCit7Cisg
ICAgdmFyIHN0YXRlID0gW107CisgICAgZm9yICh2YXIga2V5IGluIHN0YXRlT2JqZWN0KSB7Cisg
ICAgICAgIHZhciB2YWx1ZSA9IHN0YXRlT2JqZWN0W2tleV07CisgICAgICAgIGlmICh2YWx1ZSAh
PSBnZXREZWZhdWx0VmFsdWUoa2V5KSkKKyAgICAgICAgICAgIHN0YXRlLnB1c2goa2V5ICsgJz0n
ICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7CisgICAgfQorICAgIHJldHVybiBzdGF0ZS5q
b2luKCcmJyk7CiB9CiAKLWZ1bmN0aW9uIGxvZ1RpbWUobXNnLCBzdGFydFRpbWUpIHsKLSAgY29u
c29sZS5sb2cobXNnICsgJzogJyArIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSk7CitmdW5jdGlv
biBsb2dUaW1lKG1zZywgc3RhcnRUaW1lKQoreworICAgIGNvbnNvbGUubG9nKG1zZyArICc6ICcg
KyAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpOwogfQogCi1mdW5jdGlvbiBoaWRlUG9wdXAoKSB7
Ci0gIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7Ci0gIGlmIChwb3B1cCkKLSAgICBwb3B1cC5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKHBvcHVwKTsKK2Z1bmN0aW9uIGhpZGVQb3B1cCgpCit7CisgICAg
dmFyIHBvcHVwID0gJCgncG9wdXAnKTsKKyAgICBpZiAocG9wdXApCisgICAgICAgIHBvcHVwLnBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQocG9wdXApOwogfQogCi1mdW5jdGlvbiBzaG93UG9wdXAoZSwg
aHRtbCkgewotICB2YXIgcG9wdXAgPSAkKCdwb3B1cCcpOwotICBpZiAoIXBvcHVwKSB7Ci0gICAg
cG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBwb3B1cC5pZCA9ICdw
b3B1cCc7Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwb3B1cCk7Ci0gIH0KLQotICAv
LyBTZXQgaHRtbCBmaXJzdCBzbyB0aGF0IHdlIGNhbiBnZXQgYWNjdXJhdGUgc2l6ZSBtZXRyaWNz
IG9uIHRoZSBwb3B1cC4KLSAgcG9wdXAuaW5uZXJIVE1MID0gaHRtbDsKLQotICB2YXIgdGFyZ2V0
UmVjdCA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotCi0gIHZhciB4ID0gTWF0
aC5taW4odGFyZ2V0UmVjdC5sZWZ0IC0gMTAsCi0gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuY2xpZW50V2lkdGggLSBwb3B1cC5vZmZzZXRXaWR0aCk7Ci0gIHggPSBNYXRoLm1heCgwLCB4
KTsKLSAgcG9wdXAuc3R5bGUubGVmdCA9IHggKyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgKyAn
cHgnOwotCi0gIHZhciB5ID0gdGFyZ2V0UmVjdC50b3AgKyB0YXJnZXRSZWN0LmhlaWdodDsKLSAg
aWYgKHkgKyBwb3B1cC5vZmZzZXRIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xp
ZW50SGVpZ2h0KSB7Ci0gICAgeSA9IHRhcmdldFJlY3QudG9wIC0gcG9wdXAub2Zmc2V0SGVpZ2h0
OwotICB9Ci0gIHkgPSBNYXRoLm1heCgwLCB5KTsKLSAgcG9wdXAuc3R5bGUudG9wID0geSArIGRv
Y3VtZW50LmJvZHkuc2Nyb2xsVG9wICsgJ3B4JzsKK2Z1bmN0aW9uIHNob3dQb3B1cChlLCBodG1s
KQoreworICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7CisgICAgaWYgKCFwb3B1cCkgeworICAg
ICAgICBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBwb3B1
cC5pZCA9ICdwb3B1cCc7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocG9wdXAp
OworICAgIH0KKworICAgIC8vIFNldCBodG1sIGZpcnN0IHNvIHRoYXQgd2UgY2FuIGdldCBhY2N1
cmF0ZSBzaXplIG1ldHJpY3Mgb24gdGhlIHBvcHVwLgorICAgIHBvcHVwLmlubmVySFRNTCA9IGh0
bWw7CisKKyAgICB2YXIgdGFyZ2V0UmVjdCA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpOworCisgICAgdmFyIHggPSBNYXRoLm1pbih0YXJnZXRSZWN0LmxlZnQgLSAxMCwgZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gcG9wdXAub2Zmc2V0V2lkdGgpOworICAg
IHggPSBNYXRoLm1heCgwLCB4KTsKKyAgICBwb3B1cC5zdHlsZS5sZWZ0ID0geCArIGRvY3VtZW50
LmJvZHkuc2Nyb2xsTGVmdCArICdweCc7CisKKyAgICB2YXIgeSA9IHRhcmdldFJlY3QudG9wICsg
dGFyZ2V0UmVjdC5oZWlnaHQ7CisgICAgaWYgKHkgKyBwb3B1cC5vZmZzZXRIZWlnaHQgPiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KQorICAgICAgICB5ID0gdGFyZ2V0UmVj
dC50b3AgLSBwb3B1cC5vZmZzZXRIZWlnaHQ7CisgICAgeSA9IE1hdGgubWF4KDAsIHkpOworICAg
IHBvcHVwLnN0eWxlLnRvcCA9IHkgKyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCArICdweCc7CiB9
CiAKLS8qKgotICogQ3JlYXRlIGEgbmV3IGZ1bmN0aW9uIHdpdGggc29tZSBvZiBpdHMgYXJndWVt
ZW50cwotICogcHJlLWZpbGxlZC4KLSAqIFRha2VuIGZyb20gZ29vZy5wYXJ0aWFsIGluIHRoZSBD
bG9zdXJlIGxpYnJhcnkuCi0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBBIGZ1bmN0aW9uIHRvIHBh
cnRpYWxseSBhcHBseS4KLSAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRkaXRpb25hbCBhcmd1
bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5Ci0gKiAgICAgYXBwbGllZCB0byBmbi4KLSAqIEByZXR1
cm4geyFGdW5jdGlvbn0gQSBwYXJ0aWFsbHktYXBwbGllZCBmb3JtIG9mIHRoZSBmdW5jdGlvbiBi
aW5kKCkgd2FzCi0gKiAgICAgaW52b2tlZCBhcyBhIG1ldGhvZCBvZi4KLSAqLwotZnVuY3Rpb24g
cGFydGlhbChmbiwgdmFyX2FyZ3MpIHsKLSAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDEpOwotICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgLy8gUHJl
cGVuZCB0aGUgYm91bmQgYXJndW1lbnRzIHRvIHRoZSBjdXJyZW50IGFyZ3VtZW50cy4KLSAgICB2
YXIgbmV3QXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAg
bmV3QXJncy51bnNoaWZ0LmFwcGx5KG5ld0FyZ3MsIGFyZ3MpOwotICAgIHJldHVybiBmbi5hcHBs
eSh0aGlzLCBuZXdBcmdzKTsKLSAgfTsKKy8vIENyZWF0ZSBhIG5ldyBmdW5jdGlvbiB3aXRoIHNv
bWUgb2YgaXRzIGFyZ3VlbWVudHMKKy8vIHByZS1maWxsZWQuCisvLyBUYWtlbiBmcm9tIGdvb2cu
cGFydGlhbCBpbiB0aGUgQ2xvc3VyZSBsaWJyYXJ5LgorLy8gQHBhcmFtIHtGdW5jdGlvbn0gZm4g
QSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuCisvLyBAcGFyYW0gey4uLip9IHZhcl9hcmdz
IEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseQorLy8gICAgICAgICBhcHBs
aWVkIHRvIGZuLgorLy8gQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZv
cm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXMKKy8vICAgICAgICAgaW52b2tlZCBhcyBhIG1l
dGhvZCBvZi4KK2Z1bmN0aW9uIHBhcnRpYWwoZm4sIHZhcl9hcmdzKQoreworICAgIHZhciBhcmdz
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKyAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIFByZXBlbmQgdGhlIGJvdW5kIGFyZ3VtZW50cyB0byB0
aGUgY3VycmVudCBhcmd1bWVudHMuCisgICAgICAgIHZhciBuZXdBcmdzID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKKyAgICAgICAgbmV3QXJncy51bnNoaWZ0LmFwcGx5
KG5ld0FyZ3MsIGFyZ3MpOworICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgbmV3QXJncyk7
CisgICAgfTsKIH07CiAKLS8qKgotICogUmV0dXJucyB0aGUga2V5cyBvZiB0aGUgb2JqZWN0L21h
cC9oYXNoLgotICogVGFrZW4gZnJvbSBnb29nLm9iamVjdC5nZXRLZXlzIGluIHRoZSBDbG9zdXJl
IGxpYnJhcnkuCi0gKgotICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IGZyb20gd2hp
Y2ggdG8gZ2V0IHRoZSBrZXlzLgotICogQHJldHVybiB7IUFycmF5LjxzdHJpbmc+fSBBcnJheSBv
ZiBwcm9wZXJ0eSBrZXlzLgotICovCi1mdW5jdGlvbiBnZXRLZXlzKG9iaikgewotICB2YXIgcmVz
ID0gW107Ci0gIGZvciAodmFyIGtleSBpbiBvYmopIHsKLSAgICByZXMucHVzaChrZXkpOwotICB9
Ci0gIHJldHVybiByZXM7CisvLyBSZXR1cm5zIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QvbWFwL2hh
c2guCisvLyBUYWtlbiBmcm9tIGdvb2cub2JqZWN0LmdldEtleXMgaW4gdGhlIENsb3N1cmUgbGli
cmFyeS4KKy8vCisvLyBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0
byBnZXQgdGhlIGtleXMuCisvLyBAcmV0dXJuIHshQXJyYXkuPHN0cmluZz59IEFycmF5IG9mIHBy
b3BlcnR5IGtleXMuCitmdW5jdGlvbiBnZXRLZXlzKG9iaikKK3sKKyAgICB2YXIgcmVzID0gW107
CisgICAgZm9yICh2YXIga2V5IGluIG9iaikKKyAgICAgICAgcmVzLnB1c2goa2V5KTsKKyAgICBy
ZXR1cm4gcmVzOwogfQogCi0vKioKLSAqIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGV4cGVjdGF0
aW9zbiBtYXAgZm9yIHRoZSBjdXJyZW50IHRlc3RUeXBlLgotICovCi1mdW5jdGlvbiBnZXRFeHBl
Y3RhdGlvbnNNYXAoKSB7Ci0gIHJldHVybiBpc0xheW91dFRlc3RSZXN1bHRzKCkgPyBMQVlPVVRf
VEVTVF9FWFBFQ1RBVElPTlNfTUFQXyA6Ci0gICAgICBHVEVTVF9FWFBFQ1RBVElPTlNfTUFQXzsK
Ky8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGV4cGVjdGF0aW9zbiBtYXAgZm9yIHRoZSBjdXJy
ZW50IHRlc3RUeXBlLgorZnVuY3Rpb24gZ2V0RXhwZWN0YXRpb25zTWFwKCkKK3sKKyAgICByZXR1
cm4gaXNMYXlvdXRUZXN0UmVzdWx0cygpID8gTEFZT1VUX1RFU1RfRVhQRUNUQVRJT05TX01BUF8g
OiBHVEVTVF9FWFBFQ1RBVElPTlNfTUFQXzsKIH0KIAotZnVuY3Rpb24gdG9nZ2xlUXVlcnlQYXJh
bWV0ZXIocGFyYW0pIHsKLSAgc2V0UXVlcnlQYXJhbWV0ZXIocGFyYW0sICFjdXJyZW50U3RhdGVb
cGFyYW1dKTsKK2Z1bmN0aW9uIHRvZ2dsZVF1ZXJ5UGFyYW1ldGVyKHBhcmFtKQoreworICAgIHNl
dFF1ZXJ5UGFyYW1ldGVyKHBhcmFtLCAhZ19jdXJyZW50U3RhdGVbcGFyYW1dKTsKIH0KIAotZnVu
Y3Rpb24gY2hlY2tib3hIVE1MKHF1ZXJ5UGFyYW1ldGVyLCBsYWJlbCwgaXNDaGVja2VkLCBvcHRf
ZXh0cmFKYXZhU2NyaXB0KSB7Ci0gIHZhciBqcyA9IG9wdF9leHRyYUphdmFTY3JpcHQgfHwgJyc7
Ci0gIHJldHVybiAnPGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDJlbSI+JyArCi0gICAgICAn
PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbmNoYW5nZT0idG9nZ2xlUXVlcnlQYXJhbWV0ZXIoXCcn
ICsgcXVlcnlQYXJhbWV0ZXIgKyAnXCcpOycgKyBqcyArICciICcgKwotICAgICAgICAgIChpc0No
ZWNrZWQgPyAnY2hlY2tlZCcgOiAnJykgKyAnPicgKyBsYWJlbCArCi0gICAgICAnPC9sYWJlbD4n
OworZnVuY3Rpb24gY2hlY2tib3hIVE1MKHF1ZXJ5UGFyYW1ldGVyLCBsYWJlbCwgaXNDaGVja2Vk
LCBvcHRfZXh0cmFKYXZhU2NyaXB0KQoreworICAgIHZhciBqcyA9IG9wdF9leHRyYUphdmFTY3Jp
cHQgfHwgJyc7CisgICAgcmV0dXJuICc8bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDogMmVtIj4n
ICsKKyAgICAgICAgJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25jaGFuZ2U9InRvZ2dsZVF1ZXJ5
UGFyYW1ldGVyKFwnJyArIHF1ZXJ5UGFyYW1ldGVyICsgJ1wnKTsnICsganMgKyAnIiAnICsKKyAg
ICAgICAgICAgIChpc0NoZWNrZWQgPyAnY2hlY2tlZCcgOiAnJykgKyAnPicgKyBsYWJlbCArCisg
ICAgICAgICc8L2xhYmVsPic7CiB9CiAKLWZ1bmN0aW9uIHNlbGVjdEhUTUwobGFiZWwsIHF1ZXJ5
UGFyYW1ldGVyLCBvcHRpb25zKSB7Ci0gIHZhciBodG1sID0gJzxsYWJlbCBzdHlsZT0icGFkZGlu
Zy1sZWZ0OiAyZW0iPicgKwotICAgICAgbGFiZWwgKyAnOiAnICsKLSAgICAgICc8c2VsZWN0IG9u
Y2hhbmdlPSJzZXRRdWVyeVBhcmFtZXRlcihcJycgKwotICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVy
ICsgJ1wnLCB0aGlzW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4nOwotCi0gIGZvciAodmFy
IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykgewotICAgIHZhciB2YWx1ZSA9IG9wdGlv
bnNbaV07Ci0gICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIHZhbHVlICsgJyIgJyArCi0g
ICAgICAoY3VycmVudFN0YXRlW3F1ZXJ5UGFyYW1ldGVyXSA9PSB2YWx1ZSA/ICdzZWxlY3RlZCcg
OiAnJykgKwotICAgICAgJz4nICsgdmFsdWUgKyAnPC9vcHRpb24+JwotICB9Ci0gIGh0bWwgKz0g
Jzwvc2VsZWN0PjxsYWJlbD4nOwotICByZXR1cm4gaHRtbDsKK2Z1bmN0aW9uIHNlbGVjdEhUTUwo
bGFiZWwsIHF1ZXJ5UGFyYW1ldGVyLCBvcHRpb25zKQoreworICAgIHZhciBodG1sID0gJzxsYWJl
bCBzdHlsZT0icGFkZGluZy1sZWZ0OiAyZW0iPicgKyBsYWJlbCArICc6ICcgKworICAgICAgICAn
PHNlbGVjdCBvbmNoYW5nZT0ic2V0UXVlcnlQYXJhbWV0ZXIoXCcnICsgcXVlcnlQYXJhbWV0ZXIg
KyAnXCcsIHRoaXNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSkiPic7CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHZhbHVlID0g
b3B0aW9uc1tpXTsKKyAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIHZhbHVlICsg
JyIgJyArCisgICAgICAgICAgICAoZ19jdXJyZW50U3RhdGVbcXVlcnlQYXJhbWV0ZXJdID09IHZh
bHVlID8gJ3NlbGVjdGVkJyA6ICcnKSArCisgICAgICAgICAgICAnPicgKyB2YWx1ZSArICc8L29w
dGlvbj4nCisgICAgfQorICAgIGh0bWwgKz0gJzwvc2VsZWN0PjxsYWJlbD4nOworICAgIHJldHVy
biBodG1sOwogfQogCi0vKioKLSAqIFJldHVybnMgdGhlIEhUTUwgZm9yIHRoZSBzZWxlY3QgZWxl
bWVudCB0byBzd2l0Y2ggdG8gZGlmZmVyZW50IHRlc3RUeXBlcy4KLSAqLwotZnVuY3Rpb24gZ2V0
SFRNTEZvclRlc3RUeXBlU3dpdGNoZXIob3B0X25vQnVpbGRlck1lbnUsIG9wdF9leHRyYUh0bWws
IG9wdF9pbmNsdWRlTm9uZUJ1aWxkZXIpIHsKLSAgdmFyIGh0bWwgPSAnPGRpdiBzdHlsZT0iYm9y
ZGVyLWJvdHRvbToxcHggZGFzaGVkIj4nOwotICBodG1sICs9ICcnICsKLSAgICAgIGh0bWxGb3JE
YXNoYm9hcmRMaW5rKCdTdGF0cycsICdhZ2dyZWdhdGVfcmVzdWx0cy5odG1sJykgKwotICAgICAg
aHRtbEZvckRhc2hib2FyZExpbmsoJ1RpbWVsaW5lJywgJ3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwn
KSArCi0gICAgICBodG1sRm9yRGFzaGJvYXJkTGluaygnUmVzdWx0cycsICdmbGFraW5lc3NfZGFz
aGJvYXJkLmh0bWwnKSArCi0gICAgICBodG1sRm9yRGFzaGJvYXJkTGluaygnVHJlZW1hcCcsICd0
cmVlbWFwLmh0bWwnKTsKLQotICBodG1sICs9IHNlbGVjdEhUTUwoJ1Rlc3QgdHlwZScsICd0ZXN0
VHlwZScsIFRFU1RfVFlQRVMpOwotCi0gIGlmICghb3B0X25vQnVpbGRlck1lbnUpIHsKLSAgICB2
YXIgYnVpbGRlcnNGb3JNZW51ID0gT2JqZWN0LmtleXMoYnVpbGRlcnMpOwotICAgIGlmIChvcHRf
aW5jbHVkZU5vbmVCdWlsZGVyKQotICAgICAgYnVpbGRlcnNGb3JNZW51LnVuc2hpZnQoJy0tLS0t
LS0tLS0tLS0tJyk7Ci0gICAgaHRtbCArPSBzZWxlY3RIVE1MKCdCdWlsZGVyJywgJ2J1aWxkZXIn
LCBidWlsZGVyc0Zvck1lbnUpOwotICB9Ci0KLSAgaWYgKGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkg
ewotICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnR3JvdXAnLCAnZ3JvdXAnLCBnZXRLZXlzKExBWU9V
VF9URVNUU19CVUlMREVSX0dST1VQUykpOwotICB9Ci0KLSAgaWYgKCFpc1RyZWVNYXAoKSkgewot
ICAgIGh0bWwgKz0gY2hlY2tib3hIVE1MKCdzaG93QWxsUnVucycsICdTaG93IGFsbCBydW5zJywg
Y3VycmVudFN0YXRlLnNob3dBbGxSdW5zKTsKLSAgfQotCi0gIGlmIChvcHRfZXh0cmFIdG1sKSB7
Ci0gICAgaHRtbCArPSBvcHRfZXh0cmFIdG1sOwotICB9Ci0gIHJldHVybiBodG1sICsgJzwvZGl2
Pic7CisvLyBSZXR1cm5zIHRoZSBIVE1MIGZvciB0aGUgc2VsZWN0IGVsZW1lbnQgdG8gc3dpdGNo
IHRvIGRpZmZlcmVudCB0ZXN0VHlwZXMuCitmdW5jdGlvbiBnZXRIVE1MRm9yVGVzdFR5cGVTd2l0
Y2hlcihvcHRfbm9CdWlsZGVyTWVudSwgb3B0X2V4dHJhSHRtbCwgb3B0X2luY2x1ZGVOb25lQnVp
bGRlcikKK3sKKyAgICB2YXIgaHRtbCA9ICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBk
YXNoZWQiPic7CisgICAgaHRtbCArPSAnJyArCisgICAgICAgIGh0bWxGb3JEYXNoYm9hcmRMaW5r
KCdTdGF0cycsICdhZ2dyZWdhdGVfcmVzdWx0cy5odG1sJykgKworICAgICAgICBodG1sRm9yRGFz
aGJvYXJkTGluaygnVGltZWxpbmUnLCAndGltZWxpbmVfZXhwbG9yZXIuaHRtbCcpICsKKyAgICAg
ICAgaHRtbEZvckRhc2hib2FyZExpbmsoJ1Jlc3VsdHMnLCAnZmxha2luZXNzX2Rhc2hib2FyZC5o
dG1sJykgKworICAgICAgICBodG1sRm9yRGFzaGJvYXJkTGluaygnVHJlZW1hcCcsICd0cmVlbWFw
Lmh0bWwnKTsKKworICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnVGVzdCB0eXBlJywgJ3Rlc3RUeXBl
JywgVEVTVF9UWVBFUyk7CisKKyAgICBpZiAoIW9wdF9ub0J1aWxkZXJNZW51KSB7CisgICAgICAg
IHZhciBidWlsZGVyc0Zvck1lbnUgPSBPYmplY3Qua2V5cyhnX2J1aWxkZXJzKTsKKyAgICAgICAg
aWYgKG9wdF9pbmNsdWRlTm9uZUJ1aWxkZXIpCisgICAgICAgICAgICBidWlsZGVyc0Zvck1lbnUu
dW5zaGlmdCgnLS0tLS0tLS0tLS0tLS0nKTsKKyAgICAgICAgaHRtbCArPSBzZWxlY3RIVE1MKCdC
dWlsZGVyJywgJ2J1aWxkZXInLCBidWlsZGVyc0Zvck1lbnUpOworICAgIH0KKworICAgIGlmIChp
c0xheW91dFRlc3RSZXN1bHRzKCkpCisgICAgICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnR3JvdXAn
LCAnZ3JvdXAnLCBnZXRLZXlzKExBWU9VVF9URVNUU19CVUlMREVSX0dST1VQUykpOworCisgICAg
aWYgKCFpc1RyZWVNYXAoKSkKKyAgICAgICAgaHRtbCArPSBjaGVja2JveEhUTUwoJ3Nob3dBbGxS
dW5zJywgJ1Nob3cgYWxsIHJ1bnMnLCBnX2N1cnJlbnRTdGF0ZS5zaG93QWxsUnVucyk7CisKKyAg
ICBpZiAob3B0X2V4dHJhSHRtbCkKKyAgICAgICAgaHRtbCArPSBvcHRfZXh0cmFIdG1sOworICAg
IHJldHVybiBodG1sICsgJzwvZGl2Pic7CiB9CiAKLWZ1bmN0aW9uIHNlbGVjdEJ1aWxkZXIoYnVp
bGRlcikgewotICBzZXRRdWVyeVBhcmFtZXRlcignYnVpbGRlcicsIGJ1aWxkZXIpOworZnVuY3Rp
b24gc2VsZWN0QnVpbGRlcihidWlsZGVyKQoreworICAgIHNldFF1ZXJ5UGFyYW1ldGVyKCdidWls
ZGVyJywgYnVpbGRlcik7CiB9CiAKLWZ1bmN0aW9uIGxvYWREYXNoYm9hcmQoZmlsZU5hbWUpIHsK
LSAgdmFyIHBhdGhOYW1lID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOwotICBwYXRoTmFtZSA9
IHBhdGhOYW1lLnN1YnN0cmluZygwLCBwYXRoTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7Ci0g
IHdpbmRvdy5sb2NhdGlvbiA9IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cubG9jYXRpb24u
aGFzaDsKK2Z1bmN0aW9uIGxvYWREYXNoYm9hcmQoZmlsZU5hbWUpCit7CisgICAgdmFyIHBhdGhO
YW1lID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOworICAgIHBhdGhOYW1lID0gcGF0aE5hbWUu
c3Vic3RyaW5nKDAsIHBhdGhOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKKyAgICB3aW5kb3cu
bG9jYXRpb24gPSBwYXRoTmFtZSArIGZpbGVOYW1lICsgd2luZG93LmxvY2F0aW9uLmhhc2g7CiB9
CiAKLWZ1bmN0aW9uIGh0bWxGb3JUb3BMaW5rKGh0bWwsIG9uQ2xpY2ssIGlzU2VsZWN0ZWQpIHsK
LSAgdmFyIGNzc1RleHQgPSBpc1NlbGVjdGVkID8gJ2ZvbnQtd2VpZ2h0OiBib2xkOycgOgotICAg
ICAgJ2NvbG9yOmJsdWU7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcjsn
OwotICBjc3NUZXh0ICs9ICdtYXJnaW46IDAgNXB4Oyc7Ci0gIHJldHVybiAnPHNwYW4gc3R5bGU9
IicgKyBjc3NUZXh0ICsKLSAgICAgICciIG9uY2xpY2s9IicgKyBvbkNsaWNrICsgJyI+JyArIGh0
bWwgKyAnPC9zcGFuPic7CitmdW5jdGlvbiBodG1sRm9yVG9wTGluayhodG1sLCBvbkNsaWNrLCBp
c1NlbGVjdGVkKQoreworICAgIHZhciBjc3NUZXh0ID0gaXNTZWxlY3RlZCA/ICdmb250LXdlaWdo
dDogYm9sZDsnIDogJ2NvbG9yOmJsdWU7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6
cG9pbnRlcjsnOworICAgIGNzc1RleHQgKz0gJ21hcmdpbjogMCA1cHg7JzsKKyAgICByZXR1cm4g
JzxzcGFuIHN0eWxlPSInICsgY3NzVGV4dCArICciIG9uY2xpY2s9IicgKyBvbkNsaWNrICsgJyI+
JyArIGh0bWwgKyAnPC9zcGFuPic7CiB9CiAKLWZ1bmN0aW9uIGh0bWxGb3JEYXNoYm9hcmRMaW5r
KGh0bWwsIGZpbGVOYW1lKSB7Ci0gIHZhciBwYXRoTmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRo
bmFtZTsKLSAgdmFyIGN1cnJlbnRGaWxlTmFtZSA9IHBhdGhOYW1lLnN1YnN0cmluZyhwYXRoTmFt
ZS5sYXN0SW5kZXhPZignLycpICsgMSk7Ci0gIHZhciBpc1NlbGVjdGVkID0gY3VycmVudEZpbGVO
YW1lID09IGZpbGVOYW1lOwotICB2YXIgb25DbGljayA9ICdsb2FkRGFzaGJvYXJkKFwnJyArIGZp
bGVOYW1lICsgJ1wnKSc7Ci0gIHJldHVybiBodG1sRm9yVG9wTGluayhodG1sLCBvbkNsaWNrLCBp
c1NlbGVjdGVkKTsKK2Z1bmN0aW9uIGh0bWxGb3JEYXNoYm9hcmRMaW5rKGh0bWwsIGZpbGVOYW1l
KQoreworICAgIHZhciBwYXRoTmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTsKKyAgICB2
YXIgY3VycmVudEZpbGVOYW1lID0gcGF0aE5hbWUuc3Vic3RyaW5nKHBhdGhOYW1lLmxhc3RJbmRl
eE9mKCcvJykgKyAxKTsKKyAgICB2YXIgaXNTZWxlY3RlZCA9IGN1cnJlbnRGaWxlTmFtZSA9PSBm
aWxlTmFtZTsKKyAgICB2YXIgb25DbGljayA9ICdsb2FkRGFzaGJvYXJkKFwnJyArIGZpbGVOYW1l
ICsgJ1wnKSc7CisgICAgcmV0dXJuIGh0bWxGb3JUb3BMaW5rKGh0bWwsIG9uQ2xpY2ssIGlzU2Vs
ZWN0ZWQpOwogfQogCi1mdW5jdGlvbiBnZXRSZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgsIGtl
eSwgc2luZ2xlVXJsVGVtcGxhdGUsIHJhbmdlVXJsVGVtcGxhdGUpIHsKLSAgdmFyIGN1cnJlbnRS
ZXZpc2lvbiA9IHBhcnNlSW50KHJlc3VsdHNba2V5XVtpbmRleF0sIDEwKTsKLSAgdmFyIHByZXZp
b3VzUmV2aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXggKyAxXSwgMTApOwotCi0g
IGZ1bmN0aW9uIGdldFNpbmdsZVVybCgpIHsKLSAgICByZXR1cm4gc2luZ2xlVXJsVGVtcGxhdGUu
cmVwbGFjZSgnPHJldj4nLCBjdXJyZW50UmV2aXNpb24pOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0
UmFuZ2VVcmwoKSB7Ci0gICAgcmV0dXJuIHJhbmdlVXJsVGVtcGxhdGUucmVwbGFjZSgnPHJldjE+
JywgY3VycmVudFJldmlzaW9uKS4KLSAgICAgICAgcmVwbGFjZSgnPHJldjI+JywgcHJldmlvdXNS
ZXZpc2lvbiArIDEpOwotICB9Ci0KLSAgaWYgKGN1cnJlbnRSZXZpc2lvbiA9PSBwcmV2aW91c1Jl
dmlzaW9uKSB7Ci0gICAgcmV0dXJuICdBdCA8YSBocmVmPSInICsgZ2V0U2luZ2xlVXJsKCkgKyAn
Ij5yJyArIGN1cnJlbnRSZXZpc2lvbiAgKyAnPC9hPic7Ci0gIH0gZWxzZSBpZiAoY3VycmVudFJl
dmlzaW9uIC0gcHJldmlvdXNSZXZpc2lvbiA9PSAxKSB7Ci0gICAgcmV0dXJuICc8YSBocmVmPSIn
ICsgZ2V0U2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1cnJlbnRSZXZpc2lvbiAgKyAnPC9hPic7Ci0g
IH0gZWxzZSB7Ci0gICAgcmV0dXJuICc8YSBocmVmPSInICsgZ2V0UmFuZ2VVcmwoKSArICciPnIn
ICsKLSAgICAgICAgKHByZXZpb3VzUmV2aXNpb24gKyAxKSArICcgdG8gcicgKwotICAgICAgICBj
dXJyZW50UmV2aXNpb24gKyAnPC9hPic7Ci0gIH0KK2Z1bmN0aW9uIGdldFJldmlzaW9uTGluayhy
ZXN1bHRzLCBpbmRleCwga2V5LCBzaW5nbGVVcmxUZW1wbGF0ZSwgcmFuZ2VVcmxUZW1wbGF0ZSkK
K3sKKyAgICB2YXIgY3VycmVudFJldmlzaW9uID0gcGFyc2VJbnQocmVzdWx0c1trZXldW2luZGV4
XSwgMTApOworICAgIHZhciBwcmV2aW91c1JldmlzaW9uID0gcGFyc2VJbnQocmVzdWx0c1trZXld
W2luZGV4ICsgMV0sIDEwKTsKKworICAgIGZ1bmN0aW9uIGdldFNpbmdsZVVybCgpCisgICAgewor
ICAgICAgICByZXR1cm4gc2luZ2xlVXJsVGVtcGxhdGUucmVwbGFjZSgnPHJldj4nLCBjdXJyZW50
UmV2aXNpb24pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldFJhbmdlVXJsKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiByYW5nZVVybFRlbXBsYXRlLnJlcGxhY2UoJzxyZXYxPicsIGN1cnJlbnRS
ZXZpc2lvbikucmVwbGFjZSgnPHJldjI+JywgcHJldmlvdXNSZXZpc2lvbiArIDEpOworICAgIH0K
KworICAgIGlmIChjdXJyZW50UmV2aXNpb24gPT0gcHJldmlvdXNSZXZpc2lvbikKKyAgICAgICAg
cmV0dXJuICdBdCA8YSBocmVmPSInICsgZ2V0U2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1cnJlbnRS
ZXZpc2lvbiAgICArICc8L2E+JzsKKyAgICBlbHNlIGlmIChjdXJyZW50UmV2aXNpb24gLSBwcmV2
aW91c1JldmlzaW9uID09IDEpCisgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJyArIGdldFNpbmds
ZVVybCgpICsgJyI+cicgKyBjdXJyZW50UmV2aXNpb24gICAgKyAnPC9hPic7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gJzxhIGhyZWY9IicgKyBnZXRSYW5nZVVybCgpICsgJyI+cicgKyAocHJl
dmlvdXNSZXZpc2lvbiArIDEpICsgJyB0byByJyArIGN1cnJlbnRSZXZpc2lvbiArICc8L2E+JzsK
IH0KIAotZnVuY3Rpb24gZ2V0Q2hyb21pdW1SZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgpIHsK
LSAgcmV0dXJuIGdldFJldmlzaW9uTGluaygKLSAgICAgIHJlc3VsdHMsCi0gICAgICBpbmRleCwK
LSAgICAgIENIUk9NRV9SRVZJU0lPTlNfS0VZLAotICAgICAgJ2h0dHA6Ly9zcmMuY2hyb21pdW0u
b3JnL3ZpZXd2Yy9jaHJvbWU/dmlldz1yZXYmcmV2aXNpb249PHJldj4nLAotICAgICAgJ2h0dHA6
Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9wZXJmL2Rhc2hib2FyZC91aS9jaGFuZ2Vs
b2cuaHRtbD91cmw9L3RydW5rL3NyYyZyYW5nZT08cmV2Mj46PHJldjE+Jm1vZGU9aHRtbCcpOwor
ZnVuY3Rpb24gZ2V0Q2hyb21pdW1SZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgpCit7CisgICAg
cmV0dXJuIGdldFJldmlzaW9uTGluaygKKyAgICAgICAgcmVzdWx0cywKKyAgICAgICAgaW5kZXgs
CisgICAgICAgIENIUk9NRV9SRVZJU0lPTlNfS0VZLAorICAgICAgICAnaHR0cDovL3NyYy5jaHJv
bWl1bS5vcmcvdmlld3ZjL2Nocm9tZT92aWV3PXJldiZyZXZpc2lvbj08cmV2PicsCisgICAgICAg
ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vcGVyZi9kYXNoYm9hcmQvdWkv
Y2hhbmdlbG9nLmh0bWw/dXJsPS90cnVuay9zcmMmcmFuZ2U9PHJldjI+OjxyZXYxPiZtb2RlPWh0
bWwnKTsKIH0KIAotZnVuY3Rpb24gZ2V0V2ViS2l0UmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4
KSB7Ci0gIHJldHVybiBnZXRSZXZpc2lvbkxpbmsoCi0gICAgICByZXN1bHRzLAotICAgICAgaW5k
ZXgsCi0gICAgICBXRUJLSVRfUkVWSVNJT05TX0tFWSwKLSAgICAgICdodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2NoYW5nZXNldC88cmV2PicsCi0gICAgICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9s
b2cvdHJ1bmsvP3Jldj08cmV2MT4mc3RvcF9yZXY9PHJldjI+JmxpbWl0PTEwMCZ2ZXJib3NlPW9u
Jyk7CitmdW5jdGlvbiBnZXRXZWJLaXRSZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgpCit7Cisg
ICAgcmV0dXJuIGdldFJldmlzaW9uTGluaygKKyAgICAgICAgcmVzdWx0cywKKyAgICAgICAgaW5k
ZXgsCisgICAgICAgIFdFQktJVF9SRVZJU0lPTlNfS0VZLAorICAgICAgICAnaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvPHJldj4nLAorICAgICAgICAnaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9sb2cvdHJ1bmsvP3Jldj08cmV2MT4mc3RvcF9yZXY9PHJldjI+JmxpbWl0PTEwMCZ2ZXJi
b3NlPW9uJyk7CiB9CiAKLS8qKgotICogIkRlY29tcHJlc3NlcyIgdGhlIFJMRS1lbmNvZGluZyBv
ZiB0ZXN0IHJlc3VsdHMgc28gdGhhdCB3ZSBjYW4gcXVlcnkgaXQKLSAqIGJ5IGJ1aWxkIGluZGV4
IGFuZCB0ZXN0IG5hbWUuCi0gKgotICogQHBhcmFtIHtPYmplY3R9IHJlc3VsdHMgcmVzdWx0cyBm
b3IgdGhlIGN1cnJlbnQgYnVpbGRlcgotICogQHJldHVybiBPYmplY3Qgd2l0aCB0aGVzZSBwcm9w
ZXJ0aWVzOgotICogICAtIHRlc3ROYW1lczogYXJyYXkgbWFwcGluZyB0ZXN0IGluZGV4IHRvIHRl
c3QgbmFtZXMuCi0gKiAgIC0gcmVzdWx0c0J5QnVpbGQ6IGFycmF5IG9mIGJ1aWxkcywgZm9yIGVh
Y2ggYnVpbGQgYSAoc3BhcnNlKSBhcnJheSBvZiB0ZXN0Ci0gKiAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdHMgYnkgdGVzdCBpbmRleC4KLSAqICAgLSBmbGFreVRlc3RzOiBhcnJheSB3aXRoIHRo
ZSBib29sZWFuIHZhbHVlIHRydWUgYXQgdGVzdCBpbmRpY2VzIHRoYXQgYXJlCi0gKiAgICAgICAg
ICAgICAgICAgY29uc2lkZXJlZCBmbGFreSAobW9yZSB0aGFuIG9uZSBzaW5nbGUtYnVpbGQgZmFp
bHVyZSkuCi0gKiAgIC0gZmxha3lEZWx0YXNCeUJ1aWxkOiBhcnJheSBvZiBidWlsZHMsIGZvciBl
YWNoIGJ1aWxkIGEgY291bnQgb2YgZmxha3kKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3QgcmVzdWx0cyBieSBleHBlY3RhdGlvbiwgYXMgd2VsbCBhcyBhIHRvdGFsLgotICovCi1mdW5j
dGlvbiBnZXRUZXN0UmVzdWx0c0J5QnVpbGQoYnVpbGRlclJlc3VsdHMpIHsKLSAgdmFyIGJ1aWxk
ZXJUZXN0UmVzdWx0cyA9IGJ1aWxkZXJSZXN1bHRzW1RFU1RTX0tFWV07Ci0gIHZhciBidWlsZENv
dW50ID0gYnVpbGRlclJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXS5sZW5ndGg7Ci0gIHZhciB0
ZXN0UmVzdWx0c0J5QnVpbGQgPSBuZXcgQXJyYXkoYnVpbGRDb3VudCk7Ci0gIHZhciBmbGFreURl
bHRhc0J5QnVpbGQgPSBuZXcgQXJyYXkoYnVpbGRDb3VudCk7Ci0KLSAgLy8gUHJlLXNpemluZyB0
aGUgdGVzdCByZXN1bHQgYXJyYXlzIGZvciBlYWNoIGJ1aWxkIHNhdmVzIHVzIH4yNTBtcwotICB2
YXIgdGVzdENvdW50ID0gMDsKLSAgZm9yICh2YXIgdGVzdE5hbWUgaW4gYnVpbGRlclRlc3RSZXN1
bHRzKSB7Ci0gICAgdGVzdENvdW50Kys7Ci0gIH0KLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWls
ZENvdW50OyBpKyspIHsKLSAgICB0ZXN0UmVzdWx0c0J5QnVpbGRbaV0gPSBuZXcgQXJyYXkodGVz
dENvdW50KTsKLSAgICB0ZXN0UmVzdWx0c0J5QnVpbGRbaV1bdGVzdENvdW50IC0gMV0gPSB1bmRl
ZmluZWQ7Ci0KLSAgICBmbGFreURlbHRhc0J5QnVpbGRbaV0gPSB7fTsKLSAgfQotCi0gIC8vIFVz
aW5nIGluZGljZXMgaW5zdGVhZCBvZiB0aGUgZnVsbCB0ZXN0IG5hbWVzIGZvciBlYWNoIGJ1aWxk
IHNhdmVzIHVzCi0gIC8vIH4xNTAwbXMKLSAgdmFyIHRlc3RJbmRleCA9IDA7Ci0gIHZhciB0ZXN0
TmFtZXMgPSBuZXcgQXJyYXkodGVzdENvdW50KTsKLSAgdmFyIGZsYWt5VGVzdHMgPSBuZXcgQXJy
YXkodGVzdENvdW50KTsKLQotICAvLyBEZWNvbXByZXNzIGFuZCAiaW52ZXJ0IiB0ZXN0IHJlc3Vs
dHMgKGJ5IGJ1aWxkIGluc3RlYWQgb2YgYnkgdGVzdCkgYW5kCi0gIC8vIGRldGVybWluZSB3aGlj
aCBhcmUgZmxha3kuCi0gIGZvciAodmFyIHRlc3ROYW1lIGluIGJ1aWxkZXJUZXN0UmVzdWx0cykg
ewotICAgIHZhciBvbmVCdWlsZEZhaWx1cmVDb3VudCA9IDA7Ci0KLSAgICB0ZXN0TmFtZXNbdGVz
dEluZGV4XSA9IHRlc3ROYW1lOwotICAgIHZhciB0ZXN0UmVzdWx0cyA9IGJ1aWxkZXJUZXN0UmVz
dWx0c1t0ZXN0TmFtZV0ucmVzdWx0czsKLSAgICBmb3IgKHZhciBpID0gMCwgcmxlUmVzdWx0LCBj
dXJyZW50QnVpbGRJbmRleCA9IDA7Ci0gICAgICAgICAocmxlUmVzdWx0ID0gdGVzdFJlc3VsdHNb
aV0pICYmIGN1cnJlbnRCdWlsZEluZGV4IDwgYnVpbGRDb3VudDsKLSAgICAgICAgIGkrKykgewot
ICAgICAgdmFyIGNvdW50ID0gcmxlUmVzdWx0W1JMRS5MRU5HVEhdOwotICAgICAgdmFyIHZhbHVl
ID0gcmxlUmVzdWx0W1JMRS5WQUxVRV07Ci0KLSAgICAgIGlmIChjb3VudCA9PSAxICYmIHZhbHVl
IGluIEZBSUxVUkVfRVhQRUNUQVRJT05TXykgewotICAgICAgICBvbmVCdWlsZEZhaWx1cmVDb3Vu
dCsrOwotICAgICAgfQotCi0gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvdW50OyBqKyspIHsK
LSAgICAgICAgdGVzdFJlc3VsdHNCeUJ1aWxkW2N1cnJlbnRCdWlsZEluZGV4KytdW3Rlc3RJbmRl
eF0gPSB2YWx1ZTsKLSAgICAgICAgaWYgKGN1cnJlbnRCdWlsZEluZGV4ID09IGJ1aWxkQ291bnQp
IHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQorLy8gIkRlY29tcHJlc3Nl
cyIgdGhlIFJMRS1lbmNvZGluZyBvZiB0ZXN0IHJlc3VsdHMgc28gdGhhdCB3ZSBjYW4gcXVlcnkg
aXQKKy8vIGJ5IGJ1aWxkIGluZGV4IGFuZCB0ZXN0IG5hbWUuCisvLworLy8gQHBhcmFtIHtPYmpl
Y3R9IHJlc3VsdHMgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgYnVpbGRlcgorLy8gQHJldHVybiBP
YmplY3Qgd2l0aCB0aGVzZSBwcm9wZXJ0aWVzOgorLy8gICAgIC0gdGVzdE5hbWVzOiBhcnJheSBt
YXBwaW5nIHRlc3QgaW5kZXggdG8gdGVzdCBuYW1lcy4KKy8vICAgICAtIHJlc3VsdHNCeUJ1aWxk
OiBhcnJheSBvZiBidWlsZHMsIGZvciBlYWNoIGJ1aWxkIGEgKHNwYXJzZSkgYXJyYXkgb2YgdGVz
dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgYnkg
dGVzdCBpbmRleC4KKy8vICAgICAtIGZsYWt5VGVzdHM6IGFycmF5IHdpdGggdGhlIGJvb2xlYW4g
dmFsdWUgdHJ1ZSBhdCB0ZXN0IGluZGljZXMgdGhhdCBhcmUKKy8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc2lkZXJlZCBmbGFreSAobW9yZSB0aGFuIG9uZSBzaW5nbGUtYnVp
bGQgZmFpbHVyZSkuCisvLyAgICAgLSBmbGFreURlbHRhc0J5QnVpbGQ6IGFycmF5IG9mIGJ1aWxk
cywgZm9yIGVhY2ggYnVpbGQgYSBjb3VudCBvZiBmbGFreQorLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCByZXN1bHRzIGJ5IGV4cGVjdGF0aW9u
LCBhcyB3ZWxsIGFzIGEgdG90YWwuCitmdW5jdGlvbiBnZXRUZXN0UmVzdWx0c0J5QnVpbGQoYnVp
bGRlclJlc3VsdHMpCit7CisgICAgdmFyIGJ1aWxkZXJUZXN0UmVzdWx0cyA9IGJ1aWxkZXJSZXN1
bHRzW1RFU1RTX0tFWV07CisgICAgdmFyIGJ1aWxkQ291bnQgPSBidWlsZGVyUmVzdWx0c1tGSVhB
QkxFX0NPVU5UU19LRVldLmxlbmd0aDsKKyAgICB2YXIgdGVzdFJlc3VsdHNCeUJ1aWxkID0gbmV3
IEFycmF5KGJ1aWxkQ291bnQpOworICAgIHZhciBmbGFreURlbHRhc0J5QnVpbGQgPSBuZXcgQXJy
YXkoYnVpbGRDb3VudCk7CisKKyAgICAvLyBQcmUtc2l6aW5nIHRoZSB0ZXN0IHJlc3VsdCBhcnJh
eXMgZm9yIGVhY2ggYnVpbGQgc2F2ZXMgdXMgfjI1MG1zCisgICAgdmFyIHRlc3RDb3VudCA9IDA7
CisgICAgZm9yICh2YXIgdGVzdE5hbWUgaW4gYnVpbGRlclRlc3RSZXN1bHRzKQorICAgICAgICB0
ZXN0Q291bnQrKzsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1aWxkQ291bnQ7IGkrKykgewor
ICAgICAgICB0ZXN0UmVzdWx0c0J5QnVpbGRbaV0gPSBuZXcgQXJyYXkodGVzdENvdW50KTsKKyAg
ICAgICAgdGVzdFJlc3VsdHNCeUJ1aWxkW2ldW3Rlc3RDb3VudCAtIDFdID0gdW5kZWZpbmVkOwor
ICAgICAgICBmbGFreURlbHRhc0J5QnVpbGRbaV0gPSB7fTsKICAgICB9CiAKLSAgICBpZiAob25l
QnVpbGRGYWlsdXJlQ291bnQgPiAyKSB7Ci0gICAgICBmbGFreVRlc3RzW3Rlc3RJbmRleF0gPSB0
cnVlOwotICAgIH0KKyAgICAvLyBVc2luZyBpbmRpY2VzIGluc3RlYWQgb2YgdGhlIGZ1bGwgdGVz
dCBuYW1lcyBmb3IgZWFjaCBidWlsZCBzYXZlcyB1cworICAgIC8vIH4xNTAwbXMKKyAgICB2YXIg
dGVzdEluZGV4ID0gMDsKKyAgICB2YXIgdGVzdE5hbWVzID0gbmV3IEFycmF5KHRlc3RDb3VudCk7
CisgICAgdmFyIGZsYWt5VGVzdHMgPSBuZXcgQXJyYXkodGVzdENvdW50KTsKKworICAgIC8vIERl
Y29tcHJlc3MgYW5kICJpbnZlcnQiIHRlc3QgcmVzdWx0cyAoYnkgYnVpbGQgaW5zdGVhZCBvZiBi
eSB0ZXN0KSBhbmQKKyAgICAvLyBkZXRlcm1pbmUgd2hpY2ggYXJlIGZsYWt5LgorICAgIGZvciAo
dmFyIHRlc3ROYW1lIGluIGJ1aWxkZXJUZXN0UmVzdWx0cykgeworICAgICAgICB2YXIgb25lQnVp
bGRGYWlsdXJlQ291bnQgPSAwOworCisgICAgICAgIHRlc3ROYW1lc1t0ZXN0SW5kZXhdID0gdGVz
dE5hbWU7CisgICAgICAgIHZhciB0ZXN0UmVzdWx0cyA9IGJ1aWxkZXJUZXN0UmVzdWx0c1t0ZXN0
TmFtZV0ucmVzdWx0czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIHJsZVJlc3VsdCwgY3VycmVu
dEJ1aWxkSW5kZXggPSAwOyAocmxlUmVzdWx0ID0gdGVzdFJlc3VsdHNbaV0pICYmIGN1cnJlbnRC
dWlsZEluZGV4IDwgYnVpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgY291bnQgPSBy
bGVSZXN1bHRbUkxFLkxFTkdUSF07CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBybGVSZXN1bHRb
UkxFLlZBTFVFXTsKKworICAgICAgICAgICAgaWYgKGNvdW50ID09IDEgJiYgdmFsdWUgaW4gRkFJ
TFVSRV9FWFBFQ1RBVElPTlNfKQorICAgICAgICAgICAgICAgIG9uZUJ1aWxkRmFpbHVyZUNvdW50
Kys7CisKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykgeworICAg
ICAgICAgICAgICAgIHRlc3RSZXN1bHRzQnlCdWlsZFtjdXJyZW50QnVpbGRJbmRleCsrXVt0ZXN0
SW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCdWlsZEluZGV4ID09
IGJ1aWxkQ291bnQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CiAKLSAgICB0ZXN0SW5kZXgrKzsKLSAgfQorICAgICAgICBpZiAob25lQnVpbGRG
YWlsdXJlQ291bnQgPiAyKQorICAgICAgICAgICAgZmxha3lUZXN0c1t0ZXN0SW5kZXhdID0gdHJ1
ZTsKIAotICAvLyBOb3cgdGhhdCB3ZSBrbm93IHdoaWNoIHRlc3RzIGFyZSBmbGFreSwgY291bnQg
dGhlIHRlc3QgcmVzdWx0cyB0aGF0IGFyZQotICAvLyBmcm9tIGZsYWt5IHRlc3RzIGZvciBlYWNo
IGJ1aWxkLgotICB0ZXN0SW5kZXggPSAwOwotICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBidWlsZGVy
VGVzdFJlc3VsdHMpIHsKLSAgICBpZiAoIWZsYWt5VGVzdHNbdGVzdEluZGV4KytdKSB7Ci0gICAg
ICBjb250aW51ZTsKKyAgICAgICAgdGVzdEluZGV4Kys7CiAgICAgfQogCi0gICAgdmFyIHRlc3RS
ZXN1bHRzID0gYnVpbGRlclRlc3RSZXN1bHRzW3Rlc3ROYW1lXS5yZXN1bHRzOwotICAgIGZvciAo
dmFyIGkgPSAwLCBybGVSZXN1bHQsIGN1cnJlbnRCdWlsZEluZGV4ID0gMDsKLSAgICAgICAgKHJs
ZVJlc3VsdCA9IHRlc3RSZXN1bHRzW2ldKSAmJiBjdXJyZW50QnVpbGRJbmRleCA8IGJ1aWxkQ291
bnQ7Ci0gICAgICAgIGkrKykgewotICAgICAgdmFyIGNvdW50ID0gcmxlUmVzdWx0W1JMRS5MRU5H
VEhdOwotICAgICAgdmFyIHZhbHVlID0gcmxlUmVzdWx0W1JMRS5WQUxVRV07Ci0KLSAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykgewotICAgICAgICB2YXIgYnVpbGRUZXN0UmVz
dWx0cyA9IGZsYWt5RGVsdGFzQnlCdWlsZFtjdXJyZW50QnVpbGRJbmRleCsrXTsKLSAgICAgICAg
ZnVuY3Rpb24gYWRkRmxha3lEZWx0YShrZXkpIHsKLSAgICAgICAgICBpZiAoIShrZXkgaW4gYnVp
bGRUZXN0UmVzdWx0cykpIHsKLSAgICAgICAgICAgIGJ1aWxkVGVzdFJlc3VsdHNba2V5XSA9IDA7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGJ1aWxkVGVzdFJlc3VsdHNba2V5XSsrOworICAgIC8v
IE5vdyB0aGF0IHdlIGtub3cgd2hpY2ggdGVzdHMgYXJlIGZsYWt5LCBjb3VudCB0aGUgdGVzdCBy
ZXN1bHRzIHRoYXQgYXJlCisgICAgLy8gZnJvbSBmbGFreSB0ZXN0cyBmb3IgZWFjaCBidWlsZC4K
KyAgICB0ZXN0SW5kZXggPSAwOworICAgIGZvciAodmFyIHRlc3ROYW1lIGluIGJ1aWxkZXJUZXN0
UmVzdWx0cykgeworICAgICAgICBpZiAoIWZsYWt5VGVzdHNbdGVzdEluZGV4KytdKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgdmFyIHRlc3RSZXN1bHRzID0gYnVpbGRlclRlc3RS
ZXN1bHRzW3Rlc3ROYW1lXS5yZXN1bHRzOworICAgICAgICBmb3IgKHZhciBpID0gMCwgcmxlUmVz
dWx0LCBjdXJyZW50QnVpbGRJbmRleCA9IDA7IChybGVSZXN1bHQgPSB0ZXN0UmVzdWx0c1tpXSkg
JiYgY3VycmVudEJ1aWxkSW5kZXggPCBidWlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHZh
ciBjb3VudCA9IHJsZVJlc3VsdFtSTEUuTEVOR1RIXTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9
IHJsZVJlc3VsdFtSTEUuVkFMVUVdOworCisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGNvdW50OyBqKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYnVpbGRUZXN0UmVzdWx0cyA9IGZs
YWt5RGVsdGFzQnlCdWlsZFtjdXJyZW50QnVpbGRJbmRleCsrXTsKKyAgICAgICAgICAgICAgICBm
dW5jdGlvbiBhZGRGbGFreURlbHRhKGtleSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghKGtleSBpbiBidWlsZFRlc3RSZXN1bHRzKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1aWxkVGVzdFJlc3VsdHNba2V5XSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGJ1aWxkVGVzdFJlc3VsdHNba2V5XSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBhZGRGbGFreURlbHRhKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0g
J1AnICYmIHZhbHVlICE9ICdOJykKKyAgICAgICAgICAgICAgICAgICAgYWRkRmxha3lEZWx0YSgn
dG90YWwnKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJ1aWxkSW5kZXggPT0gYnVpbGRD
b3VudCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgYWRkRmxha3lEZWx0YSh2YWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSAn
UCcgJiYgdmFsdWUgIT0gJ04nKSB7Ci0gICAgICAgICAgYWRkRmxha3lEZWx0YSgndG90YWwnKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoY3VycmVudEJ1aWxkSW5kZXggPT0gYnVpbGRDb3VudCkg
ewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9CiAgICAgfQotICB9Ci0KLSAg
cmV0dXJuIHsKLSAgICB0ZXN0TmFtZXM6IHRlc3ROYW1lcywKLSAgICByZXN1bHRzQnlCdWlsZDog
dGVzdFJlc3VsdHNCeUJ1aWxkLAotICAgIGZsYWt5VGVzdHM6IGZsYWt5VGVzdHMsCi0gICAgZmxh
a3lEZWx0YXNCeUJ1aWxkOiBmbGFreURlbHRhc0J5QnVpbGQKLSAgfTsKKworICAgIHJldHVybiB7
CisgICAgICAgIHRlc3ROYW1lczogdGVzdE5hbWVzLAorICAgICAgICByZXN1bHRzQnlCdWlsZDog
dGVzdFJlc3VsdHNCeUJ1aWxkLAorICAgICAgICBmbGFreVRlc3RzOiBmbGFreVRlc3RzLAorICAg
ICAgICBmbGFreURlbHRhc0J5QnVpbGQ6IGZsYWt5RGVsdGFzQnlCdWlsZAorICAgIH07CiB9CiAK
IAogYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRzKCk7CiAKIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHsKLSAgICAgIC8vIENsZWFyIHRoZSBvcGVuIHBv
cHVwLCB1bmxlc3MgdGhlIGNsaWNrIHdhcyBpbnNpZGUgdGhlIHBvcHVwLgotICAgICAgdmFyIHBv
cHVwID0gJCgncG9wdXAnKTsKLSAgICAgIGlmIChwb3B1cCAmJiBlLnRhcmdldCAhPSBwb3B1cCAm
JgotICAgICAgICAgICEocG9wdXAuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZS50YXJnZXQpICYg
MTYpKSB7CisgICAgLy8gQ2xlYXIgdGhlIG9wZW4gcG9wdXAsIHVubGVzcyB0aGUgY2xpY2sgd2Fz
IGluc2lkZSB0aGUgcG9wdXAuCisgICAgdmFyIHBvcHVwID0gJCgncG9wdXAnKTsKKyAgICBpZiAo
cG9wdXAgJiYgZS50YXJnZXQgIT0gcG9wdXAgJiYgIShwb3B1cC5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbihlLnRhcmdldCkgJiAxNikpCiAgICAgICAgIGhpZGVQb3B1cCgpOwotICAgICAgfQotICAg
IH0sIGZhbHNlKTsKK30sIGZhbHNlKTsKIAogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQn
LCBmdW5jdGlvbigpIHsKLSAgICAgIC8vIFRoaXMgZG9lc24ndCBzZWVtIHRvdGFsbHkgYWNjdXJh
dGUgYXMgdGhlcmUgaXMgYSByYWNlIGJldHdlZW4KLSAgICAgIC8vIG9ubG9hZCBmaXJpbmcgYW5k
IHRoZSBsYXN0IHNjcmlwdCB0YWcgYmVpbmcgZXhlY3V0ZWQuCi0gICAgICBsb2dUaW1lKCdUaW1l
IHRvIGxvYWQgSlMnLCBwYWdlTG9hZFN0YXJ0VGltZSk7Ci0gICAgfSwgZmFsc2UpOworICAgIC8v
IFRoaXMgZG9lc24ndCBzZWVtIHRvdGFsbHkgYWNjdXJhdGUgYXMgdGhlcmUgaXMgYSByYWNlIGJl
dHdlZW4KKyAgICAvLyBvbmxvYWQgZmlyaW5nIGFuZCB0aGUgbGFzdCBzY3JpcHQgdGFnIGJlaW5n
IGV4ZWN1dGVkLgorICAgIGxvZ1RpbWUoJ1RpbWUgdG8gbG9hZCBKUycsIGdfcGFnZUxvYWRTdGFy
dFRpbWUpOworfSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwgYi9Ub29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbAppbmRl
eCBlZDlkNWJlNzgzY2ZjMWVmZWE0ZDM4YTlmMmFkYWFjNjUyYjkwMTA0Li5jYmRiMDRkNTc0OWYz
MmEyNTY0ZDc3NzlhMzIyNDUxYmY0ZGM3YzFjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbAorKysgYi9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9h
cmQuaHRtbApAQCAtMzQ1LDcgKzM0NSw3IEBAIHZhciBNQVhfUkVTVUxUUyA9IDE1MDA7CiAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiB7Ci0gICAgaWYgKGN1
cnJlbnRTdGF0ZS51c2VUZXN0RGF0YSkKKyAgICBpZiAoZ19jdXJyZW50U3RhdGUudXNlVGVzdERh
dGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVwZGF0ZURlZmF1bHRCdWlsZGVyU3RhdGUoKTsK
QEAgLTM1NCwxNCArMzU0LDE0IEBAIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiAKICAgICAvLyB0
ZXN0cyBleHBhbmRzIHRvIGFsbCB0ZXN0cyB0aGF0IG1hdGNoIHRoZSBDU1YgbGlzdC4KICAgICAv
LyByZXN1bHQgZXhwYW5kcyB0byBhbGwgdGVzdHMgdGhhdCBldmVyIGhhdmUgdGhlIGdpdmVuIHJl
c3VsdAotICAgIGlmIChjdXJyZW50U3RhdGUudGVzdHMgfHwgY3VycmVudFN0YXRlLnJlc3VsdCkK
KyAgICBpZiAoZ19jdXJyZW50U3RhdGUudGVzdHMgfHwgZ19jdXJyZW50U3RhdGUucmVzdWx0KQog
ICAgICAgICBnZW5lcmF0ZVBhZ2VGb3JJbmRpdmlkdWFsVGVzdHMoaW5kaXZpZHVhbFRlc3RzKCkp
OwotICAgIGVsc2UgaWYgKGN1cnJlbnRTdGF0ZS5leHBlY3RhdGlvbnNVcGRhdGUpCisgICAgZWxz
ZSBpZiAoZ19jdXJyZW50U3RhdGUuZXhwZWN0YXRpb25zVXBkYXRlKQogICAgICAgICBnZW5lcmF0
ZVBhZ2VGb3JFeHBlY3RhdGlvbnNVcGRhdGUoKTsKICAgICBlbHNlCi0gICAgICAgIGdlbmVyYXRl
UGFnZUZvckJ1aWxkZXIoY3VycmVudFN0YXRlLmJ1aWxkZXIpOworICAgICAgICBnZW5lcmF0ZVBh
Z2VGb3JCdWlsZGVyKGdfY3VycmVudFN0YXRlLmJ1aWxkZXIpOwogCi0gICAgZm9yICh2YXIgYnVp
bGRlciBpbiBidWlsZGVycykKKyAgICBmb3IgKHZhciBidWlsZGVyIGluIGdfYnVpbGRlcnMpCiAg
ICAgICAgIHByb2Nlc3NUZXN0UmVzdWx0c0ZvckJ1aWxkZXJBc3luYyhidWlsZGVyKTsKIH0KIApA
QCAtMzY5LDcgKzM2OSw3IEBAIGZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXks
IHZhbHVlKQogewogICAgIHN3aXRjaChrZXkpIHsKICAgICBjYXNlICd0ZXN0cyc6Ci0gICAgICAg
IHZhbGlkYXRlUGFyYW1ldGVyKGN1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgdmFs
aWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCiAgICAgICAgICAgICBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZE5hbWUodmFsdWUpOwog
ICAgICAgICAgICAgfSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgZnVuY3Rpb24gaGFuZGxlVmFsaWRI
YXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCiAKICAgICBjYXNlICdyZXN1bHQnOgogICAgICAgICB2
YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGN1
cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJy
ZW50U3RhdGUsIGtleSwgdmFsdWUsCiAgICAgICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgICBmb3IgKHZhciByZXN1bHQgaW4gTEFZT1VUX1RFU1RfRVhQRUNUQVRJT05TX01BUF8p
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IExBWU9VVF9URVNUX0VYUEVDVEFU
SU9OU19NQVBfW3Jlc3VsdF0pCkBAIC0zODgsMTcgKzM4OCwxNyBAQCBmdW5jdGlvbiBoYW5kbGVW
YWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBjYXNlICdidWlsZGVyJzoKLSAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoY3VycmVudFN0YXRl
LCBrZXksIHZhbHVlLAorICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihnX2N1cnJlbnRTdGF0ZSwg
a2V5LCB2YWx1ZSwKICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZSBpbiBidWlsZGVyczsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgaW4g
Z19idWlsZGVyczsKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGNhc2UgJ3NvcnRDb2x1bW4nOgotICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3Rh
dGUsIGtleSwgdmFsdWUsCisgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGdfY3VycmVudFN0YXRl
LCBrZXksIHZhbHVlLAogICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
Ly8gR2V0IGFsbCBwb3NzaWJsZSBoZWFkZXJzIHNpbmNlIHRoZSBhY3R1YWwgdXNlZCBzZXQgb2Yg
aGVhZGVycwotICAgICAgICAgICAgICAgIC8vIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBpbiBjdXJy
ZW50U3RhdGUsIHdoaWNoIGFyZSBjdXJyZW50bHkgYmVpbmcgc2V0LgorICAgICAgICAgICAgICAg
IC8vIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBpbiBnX2N1cnJlbnRTdGF0ZSwgd2hpY2ggYXJlIGN1
cnJlbnRseSBiZWluZyBzZXQuCiAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB0YWJsZUhl
YWRlcnModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJz
Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBzb3J0Q29s
dW1uRnJvbVRhYmxlSGVhZGVyKGhlYWRlcnNbaV0pKQpAQCAtNDA5LDcgKzQwOSw3IEBAIGZ1bmN0
aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGNhc2UgJ3NvcnRPcmRlcic6Ci0gICAgICAgIHZhbGlkYXRlUGFyYW1ldGVy
KGN1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19j
dXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCiAgICAgICAgICAgICBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gRk9SV0FSRCB8fCB2YWx1ZSA9PSBCQUNLV0FSRDsK
ICAgICAgICAgICAgIH0pOwpAQCAtNDE4LDcgKzQxOCw3IEBAIGZ1bmN0aW9uIGhhbmRsZVZhbGlk
SGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogICAgIGNhc2UgJ3Jlc3VsdHNIZWlnaHQnOgogICAg
IGNhc2UgJ3VwZGF0ZUluZGV4JzoKICAgICBjYXNlICdyZXZpc2lvbic6Ci0gICAgICAgIHZhbGlk
YXRlUGFyYW1ldGVyKGN1cnJlbnRTdGF0ZSwga2V5LCBOdW1iZXIodmFsdWUpLAorICAgICAgICB2
YWxpZGF0ZVBhcmFtZXRlcihnX2N1cnJlbnRTdGF0ZSwga2V5LCBOdW1iZXIodmFsdWUpLAogICAg
ICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hdGNo
KC9eXGQrJC8pOwogICAgICAgICAgICAgfSk7CkBAIC00MzUsNyArNDM1LDcgQEAgZnVuY3Rpb24g
aGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCiAgICAgY2FzZSAnc2hvd1dvbnRG
aXhTa2lwJzoKICAgICBjYXNlICdleHBlY3RhdGlvbnNVcGRhdGUnOgogICAgIGNhc2UgJ3Nob3dS
dW5zT25CdWlsZGVyUGFnZSc6Ci0gICAgICAgIGN1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWUgPT0g
J3RydWUnOworICAgICAgICBnX2N1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWUgPT0gJ3RydWUnOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGRlZmF1bHQ6CkBAIC00NDMsNyArNDQzLDcgQEAg
ZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCiAgICAgfQogfQog
Ci1kZWZhdWx0U3RhdGVWYWx1ZXMgPSB7CitnX2RlZmF1bHRTdGF0ZVZhbHVlcyA9IHsKICAgICBz
b3J0T3JkZXI6IEJBQ0tXQVJELAogICAgIHNvcnRDb2x1bW46ICdmbGFraW5lc3MnLAogICAgIHNo
b3dFeHBlY3RhdGlvbnM6IGZhbHNlLApAQCAtNDU4LDcgKzQ1OCw3IEBAIGRlZmF1bHRTdGF0ZVZh
bHVlcyA9IHsKICAgICBleHBlY3RhdGlvbnNVcGRhdGU6IGZhbHNlLAogICAgIHNob3dSdW5zT25C
dWlsZGVyUGFnZTogZmFsc2UsCiAgICAgdXBkYXRlSW5kZXg6IDAsCi0gICAgYnVpbGRlcjogZGVm
YXVsdEJ1aWxkZXJOYW1lLAorICAgIGJ1aWxkZXI6IGdfZGVmYXVsdEJ1aWxkZXJOYW1lLAogICAg
IHJlc3VsdHNIZWlnaHQ6IDMwMCwKICAgICByZXZpc2lvbjogbnVsbAogfTsKQEAgLTU2Nyw3ICs1
NjcsNyBAQCBmdW5jdGlvbiBnZXRBbGxUZXN0cygpCiB7CiAgICAgaWYgKCFnX2FsbFRlc3RzKSB7
CiAgICAgICAgIGdfYWxsVGVzdHMgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgYnVpbGRlciBpbiBi
dWlsZGVycykKKyAgICAgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxkZXJzKQogICAgICAg
ICAgICAgYWRkVGVzdHNGb3JCdWlsZGVyKGJ1aWxkZXIsIGdfYWxsVGVzdHMpOwogICAgIH0KICAg
ICByZXR1cm4gZ19hbGxUZXN0czsKQEAgLTU3OCwxMCArNTc4LDEwIEBAIGZ1bmN0aW9uIGdldEFs
bFRlc3RzKCkKIC8vIHRlc3RzIGluIHRoZSBkaXJlY3RvcnkuCiBmdW5jdGlvbiBpbmRpdmlkdWFs
VGVzdHMoKQogewotICAgIGlmIChjdXJyZW50U3RhdGUucmVzdWx0KQotICAgICAgICByZXR1cm4g
YWxsVGVzdHNXaXRoUmVzdWx0KGN1cnJlbnRTdGF0ZS5yZXN1bHQpOworICAgIGlmIChnX2N1cnJl
bnRTdGF0ZS5yZXN1bHQpCisgICAgICAgIHJldHVybiBhbGxUZXN0c1dpdGhSZXN1bHQoZ19jdXJy
ZW50U3RhdGUucmVzdWx0KTsKIAotICAgIGlmICghY3VycmVudFN0YXRlLnRlc3RzKQorICAgIGlm
ICghZ19jdXJyZW50U3RhdGUudGVzdHMpCiAgICAgICAgIHJldHVybiBbXTsKIAogICAgIHJldHVy
biBpbmRpdmlkdWFsVGVzdHNGb3JTdWJzdHJpbmdMaXN0KCk7CkBAIC01OTAsNyArNTkwLDcgQEAg
ZnVuY3Rpb24gaW5kaXZpZHVhbFRlc3RzKCkKIGZ1bmN0aW9uIGluZGl2aWR1YWxUZXN0c0ZvclN1
YnN0cmluZ0xpc3QoKQogewogICAgIC8vIENvbnZlcnQgd2luZG93cyBzbGFzaGVzIHRvIHVuaXgg
c2xhc2hlcy4KLSAgICB2YXIgdGVzdHMgPSBjdXJyZW50U3RhdGUudGVzdHMucmVwbGFjZSgvXFwv
ZywgJy8nKTsKKyAgICB2YXIgdGVzdHMgPSBnX2N1cnJlbnRTdGF0ZS50ZXN0cy5yZXBsYWNlKC9c
XC9nLCAnLycpOwogICAgIHZhciBzZXBhcmF0b3IgPSBzdHJpbmdDb250YWlucyh0ZXN0cywgJyAn
KSA/ICcgJyA6ICcsJzsKICAgICB2YXIgdGVzdExpc3QgPSB0ZXN0cy5zcGxpdChzZXBhcmF0b3Ip
OwogCkBAIC02NzcsNyArNjc3LDcgQEAgZnVuY3Rpb24gYWxsVGVzdHNXaXRoUmVzdWx0KHJlc3Vs
dCkKIC8vIEFkZHMgYWxsIHRoZSB0ZXN0cyBmb3IgdGhlIGdpdmVuIGJ1aWxkZXIgdG8gdGhlIHRl
c3RNYXBUb1BvcHVsYXRlLgogZnVuY3Rpb24gYWRkVGVzdHNGb3JCdWlsZGVyKGJ1aWxkZXIsIHRl
c3RNYXBUb1BvcHVsYXRlKQogewotICAgIHZhciB0ZXN0cyA9IHJlc3VsdHNCeUJ1aWxkZXJbYnVp
bGRlcl0udGVzdHM7CisgICAgdmFyIHRlc3RzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJd
LnRlc3RzOwogICAgIGZvciAodmFyIHRlc3QgaW4gdGVzdHMpIHsKICAgICAgICAgdGVzdE1hcFRv
UG9wdWxhdGVbdGVzdF0gPSB0cnVlOwogICAgIH0KQEAgLTY5Nyw3ICs2OTcsNyBAQCBmdW5jdGlv
biBhbGxUZXN0c1dpdGhTYW1lUGxhdGZvcm1BbmRCdWlsZFR5cGUocGxhdGZvcm0sIGJ1aWxkVHlw
ZSkKIHsKICAgICBpZiAoIWdfYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlW3BsYXRmb3Jt
XVtidWlsZFR5cGVdKSB7CiAgICAgICAgIHZhciB0ZXN0cyA9IHt9OwotICAgICAgICBmb3IgKHZh
ciB0aGlzQnVpbGRlciBpbiBidWlsZGVycykgeworICAgICAgICBmb3IgKHZhciB0aGlzQnVpbGRl
ciBpbiBnX2J1aWxkZXJzKSB7CiAgICAgICAgICAgICB2YXIgdGhpc0J1aWxkZXJCdWlsZEluZm8g
PSBwbGF0Zm9ybUFuZEJ1aWxkVHlwZSh0aGlzQnVpbGRlcik7CiAgICAgICAgICAgICBpZiAodGhp
c0J1aWxkZXJCdWlsZEluZm8uYnVpbGRUeXBlID09IGJ1aWxkVHlwZSAmJiB0aGlzQnVpbGRlckJ1
aWxkSW5mby5wbGF0Zm9ybSA9PSBwbGF0Zm9ybSkgewogICAgICAgICAgICAgICAgIGFkZFRlc3Rz
Rm9yQnVpbGRlcih0aGlzQnVpbGRlciwgdGVzdHMpOwpAQCAtNzY5LDcgKzc2OSw3IEBAIGZ1bmN0
aW9uIHBvcHVsYXRlRXhwZWN0YXRpb25zRGF0YShyZXN1bHRzT2JqZWN0KQogICAgIGh0bWxBcnJh
eXMubW9kaWZpZXJzID0gW107CiAgICAgaHRtbEFycmF5cy5idWdzID0gW107CiAKLSAgICB2YXIg
dGVzdHMgPSByZXN1bHRzQnlCdWlsZGVyW3Jlc3VsdHNPYmplY3QuYnVpbGRlcl0udGVzdHM7Cisg
ICAgdmFyIHRlc3RzID0gZ19yZXN1bHRzQnlCdWlsZGVyW3Jlc3VsdHNPYmplY3QuYnVpbGRlcl0u
dGVzdHM7CiAKICAgICB2YXIgdGVzdE9iamVjdCA9IGdfYWxsRXhwZWN0YXRpb25zW3Rlc3RdOwog
ICAgIHZhciB1c2VkRXhwZWN0YXRpb25zID0ge307CkBAIC04ODIsOCArODgyLDggQEAgZnVuY3Rp
b24gcHJvY2Vzc0V4cGVjdGF0aW9ucygpCiAgICAgZ19hbGxFeHBlY3RhdGlvbnMgPSB7fTsKIAog
ICAgIHZhciBleHBlY3RhdGlvbnNBcnJheSA9IFtdOwotICAgIGZvciAodmFyIHBhdGggaW4gZXhw
ZWN0YXRpb25zQnlUZXN0KQotICAgICAgICBleHBlY3RhdGlvbnNBcnJheS5wdXNoKHtwYXRoOiBw
YXRoLCBleHBlY3RhdGlvbnM6IGV4cGVjdGF0aW9uc0J5VGVzdFtwYXRoXX0pOworICAgIGZvciAo
dmFyIHBhdGggaW4gZ19leHBlY3RhdGlvbnNCeVRlc3QpCisgICAgICAgIGV4cGVjdGF0aW9uc0Fy
cmF5LnB1c2goe3BhdGg6IHBhdGgsIGV4cGVjdGF0aW9uczogZ19leHBlY3RhdGlvbnNCeVRlc3Rb
cGF0aF19KTsKIAogICAgIC8vIFNvcnQgdGhlIGFycmF5IHRvIGhpdCBtb3JlIHNwZWNpZmljIHBh
dGhzIGxhc3QuIE1vcmUgc3BlY2lmaWMKICAgICAvLyBwYXRocyAoZS5nLiBmb28vYmFyL2Jhei5o
dG1sKSBvdmVycmlkZSBlbnRyaWVzIGZvciBsZXNzLXNwZWNpZmljIG9uZXMKQEAgLTk1MSw3ICs5
NTEsNyBAQCBmdW5jdGlvbiBwcm9jZXNzVGVzdFJlc3VsdHNGb3JCdWlsZGVyQXN5bmMoYnVpbGRl
cikKIAogZnVuY3Rpb24gcHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVpbGRlcnMoKQogewotICAgIGZv
ciAodmFyIGJ1aWxkZXIgaW4gYnVpbGRlcnMpCisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1
aWxkZXJzKQogICAgICAgICBwcm9jZXNzVGVzdFJ1bnNGb3JCdWlsZGVyKGJ1aWxkZXIpOwogfQog
CkBAIC05NjAsNyArOTYwLDcgQEAgZnVuY3Rpb24gcHJvY2Vzc1Rlc3RSdW5zRm9yQnVpbGRlcihi
dWlsZGVyTmFtZSkKICAgICBpZiAoZ19wZXJCdWlsZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdKQog
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFyZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSkg
eworICAgIGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSkgewogICAgICAgICBj
b25zb2xlLmVycm9yKCdObyB0ZXN0cyBmb3VuZCBmb3IgJyArIGJ1aWxkZXJOYW1lKTsKICAgICAg
ICAgZ19wZXJCdWlsZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdID0gW107CiAgICAgICAgIHJldHVy
bjsKQEAgLTk3NSwxMyArOTc1LDEzIEBAIGZ1bmN0aW9uIHByb2Nlc3NUZXN0UnVuc0ZvckJ1aWxk
ZXIoYnVpbGRlck5hbWUpCiAgICAgcHJvY2Vzc01pc3NpbmdUZXN0c1dpdGhFeHBlY3RhdGlvbnMo
YnVpbGRlck5hbWUsIHBsYXRmb3JtLCBidWlsZFR5cGUpOwogCiAgICAgdmFyIGZhaWx1cmVzID0g
W107Ci0gICAgdmFyIGFsbFRlc3RzRm9yVGhpc0J1aWxkZXIgPSByZXN1bHRzQnlCdWlsZGVyW2J1
aWxkZXJOYW1lXS50ZXN0czsKKyAgICB2YXIgYWxsVGVzdHNGb3JUaGlzQnVpbGRlciA9IGdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0udGVzdHM7CiAKICAgICBmb3IgKHZhciB0ZXN0IGlu
IGFsbFRlc3RzRm9yVGhpc0J1aWxkZXIpIHsKICAgICAgICAgdmFyIHJlc3VsdHNGb3JUZXN0ID0g
Y3JlYXRlUmVzdWx0c09iamVjdEZvclRlc3QodGVzdCwgYnVpbGRlck5hbWUpOwogICAgICAgICBw
b3B1bGF0ZUV4cGVjdGF0aW9uc0RhdGEocmVzdWx0c0ZvclRlc3QpOwogCi0gICAgICAgIHZhciBy
YXdUZXN0ID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0udGVzdHNbdGVzdF07CisgICAg
ICAgIHZhciByYXdUZXN0ID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXS50ZXN0c1t0
ZXN0XTsKICAgICAgICAgcmVzdWx0c0ZvclRlc3QucmF3VGltZXMgPSByYXdUZXN0LnRpbWVzOwog
ICAgICAgICB2YXIgcmF3UmVzdWx0cyA9IHJhd1Rlc3QucmVzdWx0czsKICAgICAgICAgcmVzdWx0
c0ZvclRlc3QucmF3UmVzdWx0cyA9IHJhd1Jlc3VsdHM7CkBAIC0xMDkyLDcgKzEwOTIsNyBAQCBm
dW5jdGlvbiBwcm9jZXNzTWlzc2luZ0FuZEV4dHJhRXhwZWN0YXRpb25zKHJlc3VsdHNGb3JUZXN0
KQogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBPbmNlIGFsbCB0aGUgRkFJTCBsaW5lcyBhcmUg
cmVtb3ZlZCBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGVzdF9leHBlY3RhdGlvbnMudHh0LCBk
ZWxldGUgYWxsIHRoZSBsZWdhY3lFeHBlY3RhdGlvbnNTZW1hbnRpY3MKICAgICAgICAgICAgICAg
ICAvLyBjb2RlLgotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUubGVnYWN5RXhwZWN0
YXRpb25zU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgaWYgKGdfY3VycmVudFN0YXRlLmxl
Z2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcykgewogICAgICAgICAgICAgICAgICAgICBpZiAoZWxl
bWVudCA9PSAnRkFJTCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdHNNYXBbRkFJTF9SRVNVTFRTW2ldXSkKQEAgLTExMTMsNyArMTExMyw3
IEBAIGZ1bmN0aW9uIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMocmVzdWx0c0Zv
clRlc3QpCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE9uY2UgYWxsIHRoZSBGQUlMIGxpbmVz
IGFyZSByZW1vdmVkIGZyb20KICAgICAgICAgICAgICAgICAvLyB0ZXN0X2V4cGVjdGF0aW9ucy50
eHQsIGRlbGV0ZSBhbGwgdGhlIGxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcwogICAgICAgICAg
ICAgICAgIC8vIGNvZGUuCi0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5sZWdhY3lF
eHBlY3RhdGlvbnNTZW1hbnRpY3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ19jdXJyZW50U3Rh
dGUubGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChleHBlY3RhdGlvbiA9PSAnRkFJTCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBGQUlMX1JFU1VMVFNbal0pIHsKQEAgLTEyMTgs
NyArMTIxOCw3IEBAIGZ1bmN0aW9uIGNyZWF0ZUJsYW1lTGlzdEhUTUwocmV2aXNpb25zLCBpbmRl
eCwgdXJsQmFzZSwgc2VwYXJhdG9yLCByZXBvKQogZnVuY3Rpb24gaXNGYWlsdXJlKGJ1aWxkZXIs
IHRlc3ROYW1lLCBpbmRleCkKIHsKICAgICB2YXIgY3VycmVudEluZGV4ID0gMDsKLSAgICB2YXIg
cmF3UmVzdWx0cyA9IHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0udGVzdHNbdGVzdE5hbWVdLnJl
c3VsdHM7CisgICAgdmFyIHJhd1Jlc3VsdHMgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0u
dGVzdHNbdGVzdE5hbWVdLnJlc3VsdHM7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdSZXN1
bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGN1cnJlbnRJbmRleCArPSByYXdSZXN1bHRzW2ld
W1JMRS5MRU5HVEhdOwogICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gaW5kZXgpCkBAIC0xMjMw
LDggKzEyMzAsOCBAQCBmdW5jdGlvbiBpc0ZhaWx1cmUoYnVpbGRlciwgdGVzdE5hbWUsIGluZGV4
KQogLy8gUmV0dXJucyBhbiBhcnJheSBvZiBidWlsZE51bWJlcnMgZm9yIGFsbCBidWlsZHMgd2hl
cmUgdGhpcyB0ZXN0IGZhaWxlZC4KIGZ1bmN0aW9uIGJ1aWxkTnVtYmVyc0ZvckZhaWx1cmVzKGJ1
aWxkZXIsIHRlc3ROYW1lKQogewotICAgIHZhciByYXdSZXN1bHRzID0gcmVzdWx0c0J5QnVpbGRl
cltidWlsZGVyXS50ZXN0c1t0ZXN0TmFtZV0ucmVzdWx0czsKLSAgICB2YXIgYnVpbGROdW1iZXJz
ID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnM7CisgICAgdmFyIHJhd1Jl
c3VsdHMgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0udGVzdHNbdGVzdE5hbWVdLnJlc3Vs
dHM7CisgICAgdmFyIGJ1aWxkTnVtYmVycyA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5i
dWlsZE51bWJlcnM7CiAgICAgdmFyIGluZGV4ID0gMDsKICAgICB2YXIgZmFpbHVyZXMgPSBbXTsK
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd1Jlc3VsdHMubGVuZ3RoOyBpKyspIHsKQEAgLTEy
NDgsNDQgKzEyNDgsNDQgQEAgZnVuY3Rpb24gYnVpbGROdW1iZXJzRm9yRmFpbHVyZXMoYnVpbGRl
ciwgdGVzdE5hbWUpCiAvLyBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBmYWlsdXJlIGxvZyBmb3Ig
dGhpcyBub24td2Via2l0IHRlc3QuCiBmdW5jdGlvbiBwYXRoVG9GYWlsdXJlTG9nKHRlc3ROYW1l
KQogewotICAgIHJldHVybiAnL3N0ZXBzLycgKyBjdXJyZW50U3RhdGUudGVzdFR5cGUgKyAnL2xv
Z3MvJyArIHRlc3ROYW1lLnNwbGl0KCcuJylbMV0KKyAgICByZXR1cm4gJy9zdGVwcy8nICsgZ19j
dXJyZW50U3RhdGUudGVzdFR5cGUgKyAnL2xvZ3MvJyArIHRlc3ROYW1lLnNwbGl0KCcuJylbMV0K
IH0KIAogZnVuY3Rpb24gc2hvd1BvcHVwRm9yQnVpbGQoZSwgYnVpbGRlciwgaW5kZXgsIG9wdF90
ZXN0TmFtZSkKIHsKICAgICB2YXIgaHRtbCA9ICcnOwogCi0gICAgdmFyIHRpbWUgPSByZXN1bHRz
QnlCdWlsZGVyW2J1aWxkZXJdLnNlY29uZHNTaW5jZUVwb2NoW2luZGV4XTsKKyAgICB2YXIgdGlt
ZSA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5zZWNvbmRzU2luY2VFcG9jaFtpbmRleF07
CiAgICAgaWYgKHRpbWUpIHsKICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lICogMTAw
MCk7CiAgICAgICAgIGh0bWwgKz0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKSArICcgJyArIGRh
dGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7CiAgICAgfQogCi0gICAgdmFyIGJ1aWxkTnVtYmVyID0g
cmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaW5kZXhdOworICAgIHZhciBi
dWlsZE51bWJlciA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaW5k
ZXhdOwogICAgIHZhciBidWlsZGVyTWFzdGVyID0gZ2V0QnVpbGRlck1hc3RlcihidWlsZGVyKTsK
ICAgICB2YXIgYnVpbGRCYXNlUGF0aCA9IGJ1aWxkZXJNYXN0ZXIuZ2V0TG9nUGF0aChidWlsZGVy
LCBidWlsZE51bWJlcik7CiAKICAgICBodG1sICs9ICc8dWw+PGxpPicgKyBsaW5rSFRNTFRvT3Bl
bldpbmRvdyhidWlsZEJhc2VQYXRoLCAnQnVpbGQgbG9nJykgKwogICAgICAgICAnPC9saT48bGk+
JyArCi0gICAgICAgIGNyZWF0ZUJsYW1lTGlzdEhUTUwocmVzdWx0c0J5QnVpbGRlcltidWlsZGVy
XS53ZWJraXRSZXZpc2lvbiwgaW5kZXgsCisgICAgICAgIGNyZWF0ZUJsYW1lTGlzdEhUTUwoZ19y
ZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uLCBpbmRleCwKICAgICAgICAg
ICAgICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2xvZy8/dmVyYm9zZT1vbiZyZXY9JywgJyZzdG9w
X3Jldj0nLAogICAgICAgICAgICAgJ1dlYktpdCcpICsKICAgICAgICAgJzwvbGk+JzsKIAogICAg
IGlmIChidWlsZGVyTWFzdGVyID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgewotICAgICAgICB2
YXIgcmV2aXNpb24gPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uW2lu
ZGV4XTsKKyAgICAgICAgdmFyIHJldmlzaW9uID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJd
LndlYmtpdFJldmlzaW9uW2luZGV4XTsKICAgICAgICAgaHRtbCArPSAnPGxpPjxzcGFuIGNsYXNz
PWxpbmsgb25jbGljaz0ic2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXZpc2lvblwnLCcgKwogICAgICAg
ICAgICAgcmV2aXNpb24gKyAnKSI+U2hvdyByZXN1bHRzIGZvciBXZWJLaXQgcicgKyByZXZpc2lv
biArCiAgICAgICAgICAgICAnPC9zcGFuPjwvbGk+JzsKICAgICB9IGVsc2UgewogICAgICAgICBo
dG1sICs9ICc8bGk+JyArCi0gICAgICAgICAgICBjcmVhdGVCbGFtZUxpc3RIVE1MKHJlc3VsdHNC
eUJ1aWxkZXJbYnVpbGRlcl0uY2hyb21lUmV2aXNpb24sIGluZGV4LAorICAgICAgICAgICAgY3Jl
YXRlQmxhbWVMaXN0SFRNTChnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uY2hyb21lUmV2aXNp
b24sIGluZGV4LAogICAgICAgICAgICAgICAgICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2Yv
Y2hyb21pdW0vcGVyZi9kYXNoYm9hcmQvdWkvY2hhbmdlbG9nLmh0bWw/dXJsPS90cnVuay9zcmMm
bW9kZT1odG1sJnJhbmdlPScsICc6JywgJ0Nocm9tZScpICsKICAgICAgICAgICAgICc8L2xpPic7
CiAKLSAgICAgICAgdmFyIGNocm9tZVJldmlzaW9uID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVy
XS5jaHJvbWVSZXZpc2lvbltpbmRleF07CisgICAgICAgIHZhciBjaHJvbWVSZXZpc2lvbiA9IGdf
cmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5jaHJvbWVSZXZpc2lvbltpbmRleF07CiAgICAgICAg
IGlmIChjaHJvbWVSZXZpc2lvbiAmJiBpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKLSAgICAgICAg
ICAgIGh0bWwgKz0gJzxsaT48YSBocmVmPSInICsgVEVTVF9SRVNVTFRTX0JBU0VfUEFUSCArIGJ1
aWxkZXJzW2J1aWxkZXJdICsKKyAgICAgICAgICAgIGh0bWwgKz0gJzxsaT48YSBocmVmPSInICsg
VEVTVF9SRVNVTFRTX0JBU0VfUEFUSCArIGdfYnVpbGRlcnNbYnVpbGRlcl0gKwogICAgICAgICAg
ICAgICAgICcvJyArIGNocm9tZVJldmlzaW9uICsgJy9sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCI+
bGF5b3V0LXRlc3QtcmVzdWx0cy56aXA8L2E+PC9saT4nOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTMwNSw3ICsxMzA1LDcgQEAgZnVuY3Rpb24gc2hvd1BvcHVwRm9yVGVzdChlLCB0ZXN0KQogCiBm
dW5jdGlvbiBodG1sRm9yVGVzdFJlc3VsdHModGVzdCkKIHsKLSAgICBpZiAoIWN1cnJlbnRTdGF0
ZS5zaG93UnVuc09uQnVpbGRlclBhZ2UgJiYgIWlzQ3Jvc3NCdWlsZGVyVmlldygpKQorICAgIGlm
ICghZ19jdXJyZW50U3RhdGUuc2hvd1J1bnNPbkJ1aWxkZXJQYWdlICYmICFpc0Nyb3NzQnVpbGRl
clZpZXcoKSkKICAgICAgICAgcmV0dXJuICc8dGQ+JyArIHRlc3QuZmxpcHM7CiAKICAgICB2YXIg
aHRtbCA9ICcnOwpAQCAtMTMxMyw3ICsxMzEzLDcgQEAgZnVuY3Rpb24gaHRtbEZvclRlc3RSZXN1
bHRzKHRlc3QpCiAgICAgdmFyIHRpbWVzID0gdGVzdC5yYXdUaW1lcy5jb25jYXQoKTsKICAgICB2
YXIgYnVpbGRlciA9IHRlc3QuYnVpbGRlcjsKICAgICB2YXIgYnVpbGRlck1hc3RlciA9IGdldEJ1
aWxkZXJNYXN0ZXIoYnVpbGRlcik7Ci0gICAgdmFyIGJ1aWxkTnVtYmVycyA9IHJlc3VsdHNCeUJ1
aWxkZXJbYnVpbGRlcl0uYnVpbGROdW1iZXJzOworICAgIHZhciBidWlsZE51bWJlcnMgPSBnX3Jl
c3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uYnVpbGROdW1iZXJzOwogCiAgICAgdmFyIGluZGV4VG9S
ZXBsYWNlQ3VycmVudFJlc3VsdCA9IC0xOwogICAgIHZhciBpbmRleFRvUmVwbGFjZUN1cnJlbnRU
aW1lID0gLTE7CkBAIC0xMzQ3LDcgKzEzNDcsNyBAQCBmdW5jdGlvbiBodG1sRm9yVGVzdFJlc3Vs
dHModGVzdCkKICAgICAgICAgfQogCiAgICAgICAgIHZhciBleHRyYUNsYXNzTmFtZXMgPSAnJzsK
LSAgICAgICAgdmFyIHdlYmtpdFJldmlzaW9uID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53
ZWJraXRSZXZpc2lvbjsKKyAgICAgICAgdmFyIHdlYmtpdFJldmlzaW9uID0gZ19yZXN1bHRzQnlC
dWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uOwogICAgICAgICB2YXIgaXNXZWJraXRNZXJn
ZSA9IHdlYmtpdFJldmlzaW9uW2kgKyAxXSAmJiB3ZWJraXRSZXZpc2lvbltpXSAhPSB3ZWJraXRS
ZXZpc2lvbltpICsgMV07CiAgICAgICAgIGlmIChpc1dlYmtpdE1lcmdlICYmIGJ1aWxkZXJNYXN0
ZXIgIT0gV0VCS0lUX0JVSUxERVJfTUFTVEVSKQogICAgICAgICAgICAgZXh0cmFDbGFzc05hbWVz
ICs9ICcgbWVyZ2UnOwpAQCAtMTM3Miw3ICsxMzcyLDcgQEAgZnVuY3Rpb24gaHRtbEZvclRlc3Rz
V2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVpbGRlcikKICAgICB2YXIgb3BlbiA9ICc8
ZGl2IG9uY2xpY2s9InNlbGVjdENvbnRlbnRzKHRoaXMpIj4nOwogCiAgICAgaWYgKHRlc3RzLmxl
bmd0aCkgewotICAgICAgICBodG1sICs9ICAnPGgzPkhhdmUgbm90IGZhaWxlZCBpbiBsYXN0ICcg
KyByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxkTnVtYmVycy5sZW5ndGggKyAnIHJ1bnMu
PC9oMz48ZGl2IGlkPSJwYXNzaW5nLXRlc3RzIj4nOworICAgICAgICBodG1sICs9ICAnPGgzPkhh
dmUgbm90IGZhaWxlZCBpbiBsYXN0ICcgKyBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uYnVp
bGROdW1iZXJzLmxlbmd0aCArICcgcnVucy48L2gzPjxkaXYgaWQ9InBhc3NpbmctdGVzdHMiPic7
CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykKICAgICAg
ICAgICAgIGh0bWwgKz0gb3BlbiArIHRlc3RzW2ldLnRlc3QgKyAnPC9kaXY+JzsKQEAgLTEzODMs
NyArMTM4Myw3IEBAIGZ1bmN0aW9uIGh0bWxGb3JUZXN0c1dpdGhFeHBlY3RhdGlvbnNCdXROb0Zh
aWx1cmVzKGJ1aWxkZXIpCiAgICAgaWYgKHNraXBwZWRQYXRocy5sZW5ndGgpIHsKICAgICAgICAg
aHRtbCArPSAnPGgzPicgKyBsaW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dTa2lwcGVkJywgJ1Nr
aXBwZWQgdGVzdHMgaW4gdGVzdF9leHBlY3RhdGlvbnMudHh0JykgKyAnPC9oMz4nOwogCi0gICAg
ICAgIGlmIChjdXJyZW50U3RhdGUuc2hvd1NraXBwZWQpCisgICAgICAgIGlmIChnX2N1cnJlbnRT
dGF0ZS5zaG93U2tpcHBlZCkKICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9InBhc3Npbmct
dGVzdHMiPicgKyBvcGVuICsgc2tpcHBlZFBhdGhzLmpvaW4oJzwvZGl2PicgKyBvcGVuKSArICc8
L2Rpdj48L2Rpdj4nOwogICAgIH0KICAgICByZXR1cm4gaHRtbDsKQEAgLTEzOTMsMTggKzEzOTMs
MTggQEAgZnVuY3Rpb24gaHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMo
YnVpbGRlcikKIGZ1bmN0aW9uIHNob3VsZEhpZGVUZXN0KHRlc3RSZXN1bHQpCiB7CiAgICAgaWYg
KHRlc3RSZXN1bHQuaXNXb250Rml4U2tpcCkKLSAgICAgICAgcmV0dXJuICFjdXJyZW50U3RhdGUu
c2hvd1dvbnRGaXhTa2lwOworICAgICAgICByZXR1cm4gIWdfY3VycmVudFN0YXRlLnNob3dXb250
Rml4U2tpcDsKIAogICAgIGlmICh0ZXN0UmVzdWx0LmlzRmxha3kpCi0gICAgICAgIHJldHVybiAh
Y3VycmVudFN0YXRlLnNob3dGbGFreTsKKyAgICAgICAgcmV0dXJuICFnX2N1cnJlbnRTdGF0ZS5z
aG93Rmxha3k7CiAKICAgICBpZiAoaXNTbG93VGVzdCh0ZXN0UmVzdWx0KSkKLSAgICAgICAgcmV0
dXJuICFjdXJyZW50U3RhdGUuc2hvd1Nsb3c7CisgICAgICAgIHJldHVybiAhZ19jdXJyZW50U3Rh
dGUuc2hvd1Nsb3c7CiAKICAgICBpZiAodGVzdFJlc3VsdC5tZWV0c0V4cGVjdGF0aW9ucykKLSAg
ICAgICAgcmV0dXJuICFjdXJyZW50U3RhdGUuc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnM7CisgICAg
ICAgIHJldHVybiAhZ19jdXJyZW50U3RhdGUuc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnM7CiAKLSAg
ICByZXR1cm4gIWN1cnJlbnRTdGF0ZS5zaG93V3JvbmdFeHBlY3RhdGlvbnM7CisgICAgcmV0dXJu
ICFnX2N1cnJlbnRTdGF0ZS5zaG93V3JvbmdFeHBlY3RhdGlvbnM7CiB9CiAKIC8vIFNldHMgdGhl
IGJyb3dzZXIncyBzZWxlY3Rpb24gdG8gdGhlIGVsZW1lbnQncyBjb250ZW50cy4KQEAgLTE0Mjgs
NyArMTQyOCw3IEBAIGZ1bmN0aW9uIGNyZWF0ZUJ1Z0hUTUwodGVzdCkKIAogZnVuY3Rpb24gaXND
cm9zc0J1aWxkZXJWaWV3KCkKIHsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlLnRlc3RzIHx8IGN1
cnJlbnRTdGF0ZS5yZXN1bHQgfHwgY3VycmVudFN0YXRlLmV4cGVjdGF0aW9uc1VwZGF0ZTsKKyAg
ICByZXR1cm4gZ19jdXJyZW50U3RhdGUudGVzdHMgfHwgZ19jdXJyZW50U3RhdGUucmVzdWx0IHx8
IGdfY3VycmVudFN0YXRlLmV4cGVjdGF0aW9uc1VwZGF0ZTsKIH0KIAogZnVuY3Rpb24gdGFibGVI
ZWFkZXJzKG9wdF9nZXRBbGwpCkBAIC0xNDQyLDExICsxNDQyLDExIEBAIGZ1bmN0aW9uIHRhYmxl
SGVhZGVycyhvcHRfZ2V0QWxsKQogCiAgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3VsdHMoKSB8fCBv
cHRfZ2V0QWxsKSB7CiAgICAgICAgIGhlYWRlcnMucHVzaCgnYnVncycpOwotICAgICAgICBpZiAo
aXNDcm9zc0J1aWxkZXJWaWV3KCkgfHwgY3VycmVudFN0YXRlLnNob3dSdW5zT25CdWlsZGVyUGFn
ZSB8fCBvcHRfZ2V0QWxsKQorICAgICAgICBpZiAoaXNDcm9zc0J1aWxkZXJWaWV3KCkgfHwgZ19j
dXJyZW50U3RhdGUuc2hvd1J1bnNPbkJ1aWxkZXJQYWdlIHx8IG9wdF9nZXRBbGwpCiAgICAgICAg
ICAgICBoZWFkZXJzLnB1c2goJ21vZGlmaWVycycsICdleHBlY3RhdGlvbnMnKTsKICAgICB9CiAK
LSAgICBpZiAoY3VycmVudFN0YXRlLnNob3dSdW5zT25CdWlsZGVyUGFnZSB8fCBvcHRfZ2V0QWxs
IHx8IGlzQ3Jvc3NCdWlsZGVyVmlldygpKQorICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5zaG93UnVu
c09uQnVpbGRlclBhZ2UgfHwgb3B0X2dldEFsbCB8fCBpc0Nyb3NzQnVpbGRlclZpZXcoKSkKICAg
ICAgICAgaGVhZGVycy5wdXNoKCdtaXNzaW5nJywgJ2V4dHJhJyk7CiAKICAgICBoZWFkZXJzLnB1
c2goJ3Nsb3dlc3QgcnVuJywgJyUgZmFpbCcpOwpAQCAtMTQ1NCwxMCArMTQ1NCwxMCBAQCBmdW5j
dGlvbiB0YWJsZUhlYWRlcnMob3B0X2dldEFsbCkKICAgICB2YXIgRkxBS0lORVNTX0hFQURFUiA9
ICdmbGFraW5lc3MgKG51bWJlcnMgYXJlIHJ1bnRpbWVzIGluIHNlY29uZHMpJzsKICAgICB2YXIg
RkxJUFNfSEVBREVSID0gJ2ZsYWtpbmVzcyAobnVtYmVyIG9mIGZsaXBzKSc7CiAKLSAgICBpZiAo
Y3VycmVudFN0YXRlLnNob3dSdW5zT25CdWlsZGVyUGFnZSB8fCBvcHRfZ2V0QWxsKQorICAgIGlm
IChnX2N1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRlclBhZ2UgfHwgb3B0X2dldEFsbCkKICAg
ICAgICAgaGVhZGVycy5wdXNoKEZMQUtJTkVTU19IRUFERVIpOwogCi0gICAgaWYgKCFjdXJyZW50
U3RhdGUuc2hvd1J1bnNPbkJ1aWxkZXJQYWdlIHx8IG9wdF9nZXRBbGwpCisgICAgaWYgKCFnX2N1
cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRlclBhZ2UgfHwgb3B0X2dldEFsbCkKICAgICAgICAg
aGVhZGVycy5wdXNoKEZMSVBTX0hFQURFUik7CiAKICAgICByZXR1cm4gaGVhZGVyczsKQEAgLTE1
MTQsOCArMTUxNCw4IEBAIGZ1bmN0aW9uIGh0bWxGb3JUYWJsZUNvbHVtbkhlYWRlcihoZWFkZXJO
YW1lLCBvcHRfZmlsbENvbFNwYW4pCiB7CiAgICAgLy8gVXNlIHRoZSBmaXJzdCB3b3JkIG9mIHRo
ZSBoZWFkZXIgdGl0bGUgYXMgdGhlIHNvcnRrZXkKICAgICB2YXIgdGhpc1NvcnRWYWx1ZSA9IHNv
cnRDb2x1bW5Gcm9tVGFibGVIZWFkZXIoaGVhZGVyTmFtZSk7Ci0gICAgdmFyIGFycm93SFRNTCA9
IHRoaXNTb3J0VmFsdWUgPT0gY3VycmVudFN0YXRlLnNvcnRDb2x1bW4gPwotICAgICAgICAnPHNw
YW4gY2xhc3M9JyArIGN1cnJlbnRTdGF0ZS5zb3J0T3JkZXIgKyAnPicgKyAoY3VycmVudFN0YXRl
LnNvcnRPcmRlciA9PSBGT1JXQVJEID8gJyZ1YXJyOycgOiAnJmRhcnI7JyApICsgJzwvc3Bhbj4n
IDogJyc7CisgICAgdmFyIGFycm93SFRNTCA9IHRoaXNTb3J0VmFsdWUgPT0gZ19jdXJyZW50U3Rh
dGUuc29ydENvbHVtbiA/CisgICAgICAgICc8c3BhbiBjbGFzcz0nICsgZ19jdXJyZW50U3RhdGUu
c29ydE9yZGVyICsgJz4nICsgKGdfY3VycmVudFN0YXRlLnNvcnRPcmRlciA9PSBGT1JXQVJEID8g
JyZ1YXJyOycgOiAnJmRhcnI7JyApICsgJzwvc3Bhbj4nIDogJyc7CiAgICAgcmV0dXJuICc8dGgg
c29ydFZhbHVlPScgKyB0aGlzU29ydFZhbHVlICsKICAgICAgICAgLy8gRXh0ZW5kIGxhc3QgdGgg
dGhyb3VnaCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGNvbHVtbnMuCiAgICAgICAgIChvcHRfZmlsbENv
bFNwYW4gPyAnIGNvbHNwYW49MTAwMDAnIDogJycpICsKQEAgLTE2MDUsNyArMTYwNSw3IEBAIGZ1
bmN0aW9uIGNoYW5nZVNvcnQoZSkKIAogICAgIHZhciBzb3J0ID0gJ3NvcnRDb2x1bW4nOwogICAg
IHZhciBvcmRlcktleSA9ICdzb3J0T3JkZXInOwotICAgIGlmIChzb3J0VmFsdWUgPT0gY3VycmVu
dFN0YXRlW3NvcnRdICYmIGN1cnJlbnRTdGF0ZVtvcmRlcktleV0gPT0gRk9SV0FSRCkKKyAgICBp
ZiAoc29ydFZhbHVlID09IGdfY3VycmVudFN0YXRlW3NvcnRdICYmIGdfY3VycmVudFN0YXRlW29y
ZGVyS2V5XSA9PSBGT1JXQVJEKQogICAgICAgICBvcmRlciA9IEJBQ0tXQVJEOwogICAgIGVsc2UK
ICAgICAgICAgb3JkZXIgPSBGT1JXQVJEOwpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgZnVuY3Rpb24g
cmVhbE1vZGlmaWVycyhtb2RpZmllclN0cmluZykKIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZUZvckV4
cGVjdGF0aW9uc1VwZGF0ZSgpCiB7CiAgICAgLy8gQWx3YXlzIHNob3cgYWxsIHJ1bnMgd2hlbiBh
dXRvLXVwZGF0aW5nIGV4cGVjdGF0aW9ucy4KLSAgICBpZiAoIWN1cnJlbnRTdGF0ZS5zaG93QWxs
UnVucykKKyAgICBpZiAoIWdfY3VycmVudFN0YXRlLnNob3dBbGxSdW5zKQogICAgICAgICBzZXRR
dWVyeVBhcmFtZXRlcignc2hvd0FsbFJ1bnMnLCB0cnVlKTsKIAogICAgIHByb2Nlc3NUZXN0UnVu
c0ZvckFsbEJ1aWxkZXJzKCk7CkBAIC0xNzAxLDcgKzE3MDEsNyBAQCBmdW5jdGlvbiBnZW5lcmF0
ZVBhZ2VGb3JFeHBlY3RhdGlvbnNVcGRhdGUoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9y
ICh2YXIgYnVpbGRlciBpbiBidWlsZGVycykgeworICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gZ19i
dWlsZGVycykgewogICAgICAgICB2YXIgdGVzdHMgPSBnX3BlckJ1aWxkZXJXaXRoRXhwZWN0YXRp
b25zQnV0Tm9GYWlsdXJlc1tidWlsZGVyXQogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRl
c3RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAvLyBBbnl0aGluZyBleHRyYSBpbiB0aGlz
IGNhc2UgaXMgd2hhdCBpcyBsaXN0ZWQgaW4gZXhwZWN0YXRpb25zCkBAIC0xNzI2LDkgKzE3MjYs
OSBAQCBmdW5jdGlvbiBnZW5lcmF0ZVBhZ2VGb3JFeHBlY3RhdGlvbnNVcGRhdGUoKQogLy8gQHBh
cmFtIHtBcnJheS48c3RyaW5nPn0ga2V5cyBLZXlzIGludG8gdGhlIHRlc3ROZWVkaW5nVXBkYXRl
IG9iamVjdC4KIGZ1bmN0aW9uIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0ZXN0c05lZWRpbmdVcGRh
dGUsIGtleXMpCiB7Ci0gICAgdmFyIHRlc3QgPSBrZXlzW2N1cnJlbnRTdGF0ZS51cGRhdGVJbmRl
eF07CisgICAgdmFyIHRlc3QgPSBrZXlzW2dfY3VycmVudFN0YXRlLnVwZGF0ZUluZGV4XTsKICAg
ICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8Yj4nICsgdGVzdCArICc8L2I+JyArCi0gICAg
ICAgICc8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodCI+JyArIChjdXJyZW50U3RhdGUudXBkYXRlSW5k
ZXggKyAxKSArICcgb2YgJyArCisgICAgICAgICc8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodCI+JyAr
IChnX2N1cnJlbnRTdGF0ZS51cGRhdGVJbmRleCArIDEpICsgJyBvZiAnICsKICAgICAgICAgKyBr
ZXlzLmxlbmd0aCArICcgdGVzdHM8L2Rpdj48YnI+PGJyPic7CiAKICAgICB2YXIgYnV0dG9uUmVn
aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CkBAIC0xNzQzLDcgKzE3NDMsNyBA
QCBmdW5jdGlvbiBzaG93VXBkYXRlSW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlz
KQogICAgIHByZXZpb3VzQnRuLnZhbHVlID0gJ3ByZXZpb3VzJzsKICAgICBwcmV2aW91c0J0bi5h
ZGRFdmVudExpc3RlbmVyKCdjbGljaycsCiAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAg
IHNldFVwZGF0ZUluZGV4KGN1cnJlbnRTdGF0ZS51cGRhdGVJbmRleCAtIDEsIHRlc3RzTmVlZGlu
Z1VwZGF0ZSwga2V5cyk7CisgICAgICAgICAgc2V0VXBkYXRlSW5kZXgoZ19jdXJyZW50U3RhdGUu
dXBkYXRlSW5kZXggLSAxLCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOwogICAgICAgICB9LAog
ICAgICAgICBmYWxzZSk7CiAgICAgYnV0dG9uUmVnaW9uLmFwcGVuZENoaWxkKHByZXZpb3VzQnRu
KTsKQEAgLTE4MDUsNyArMTgwNSw3IEBAIGZ1bmN0aW9uIGZpbmlzaFVwZGF0ZSgpCiAvLyBAcGFy
YW0ge0FycmF5LjxzdHJpbmc+fSBrZXlzIEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUg
b2JqZWN0LgogZnVuY3Rpb24gaGFuZGxlVXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cykK
IHsKLSAgICB2YXIgdGVzdCA9IGtleXNbY3VycmVudFN0YXRlLnVwZGF0ZUluZGV4XTsKKyAgICB2
YXIgdGVzdCA9IGtleXNbZ19jdXJyZW50U3RhdGUudXBkYXRlSW5kZXhdOwogICAgIHZhciB1cGRh
dGVzID0gdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdOwogICAgIGZvciAodmFyIGJ1aWxkZXIgaW4g
dXBkYXRlcykgewogICAgICAgICAvLyBBZGQgaW5jbHVkZWQgdGVzdHMsIGFuZCBkZWxldGUgZXhj
bHVkZWQgdGVzdHMgaWYKQEAgLTE4MjksNyArMTgyOSw3IEBAIGZ1bmN0aW9uIGhhbmRsZVVwZGF0
ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpCiAvLyBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBr
ZXlzIEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUgb2JqZWN0LgogZnVuY3Rpb24gbmV4
dFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpCiB7Ci0gICAgc2V0VXBkYXRlSW5kZXgo
Y3VycmVudFN0YXRlLnVwZGF0ZUluZGV4ICsgMSwgdGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsK
KyAgICBzZXRVcGRhdGVJbmRleChnX2N1cnJlbnRTdGF0ZS51cGRhdGVJbmRleCArIDEsIHRlc3Rz
TmVlZGluZ1VwZGF0ZSwga2V5cyk7CiB9CiAKIApAQCAtMTg3MCwxMCArMTg3MCwxMCBAQCBmdW5j
dGlvbiBodG1sRm9ySW5kaXZpZHVsVGVzdE9uQWxsQnVpbGRlcnModGVzdCkKICAgICAgICAgICAg
IGh0bWwgKz0gaHRtbEZvclNpbmdsZVRlc3RSb3codGVzdFJlc3VsdHNbal0pOwogICAgICAgICBo
dG1sID0gaHRtbEZvclRlc3RUYWJsZShodG1sKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAo
ZXhwZWN0YXRpb25zQnlUZXN0W3Rlc3RdKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGV4cGVjdGF0aW9uc0J5VGVzdFt0ZXN0XS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
ICBodG1sICs9ICc8ZGl2PicgKyBleHBlY3RhdGlvbnNCeVRlc3RbdGVzdF1baV0ubW9kaWZpZXJz
ICsgJyB8ICcgKwotICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zQnlUZXN0W3Rlc3RdW2ld
LmV4cGVjdGF0aW9ucyArICc8L2Rpdj4nOworICAgICAgICBpZiAoZ19leHBlY3RhdGlvbnNCeVRl
c3RbdGVzdF0pIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ19leHBlY3RhdGlv
bnNCeVRlc3RbdGVzdF0ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgaHRtbCArPSAnPGRp
dj4nICsgZ19leHBlY3RhdGlvbnNCeVRlc3RbdGVzdF1baV0ubW9kaWZpZXJzICsgJyB8ICcgKwor
ICAgICAgICAgICAgICAgICAgZ19leHBlY3RhdGlvbnNCeVRlc3RbdGVzdF1baV0uZXhwZWN0YXRp
b25zICsgJzwvZGl2Pic7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaHRtbCAr
PSAnPGRpdiBjbGFzcz0ibm90LWZvdW5kIj5UZXN0IG5vdCBmb3VuZC4gRWl0aGVyIGl0IGRvZXMg
JyArCkBAIC0xODg2LDcgKzE4ODYsNyBAQCBmdW5jdGlvbiBodG1sRm9ySW5kaXZpZHVsVGVzdE9u
QWxsQnVpbGRlcnModGVzdCkKICAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7CiAgICAg
ICAgIGh0bWwgKz0gJyB8ICcgKyBsaW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dMYXJnZUV4cGVj
dGF0aW9ucycsICdsYXJnZSB0aHVtYm5haWxzJyk7CiAgICAgICAgIGlmIChidWlsZGVyTWFzdGVy
ID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgewotICAgICAgICAgICAgdmFyIHJldmlzaW9uID0g
Y3VycmVudFN0YXRlLnJldmlzaW9uIHx8ICcnOworICAgICAgICAgICAgdmFyIHJldmlzaW9uID0g
Z19jdXJyZW50U3RhdGUucmV2aXNpb24gfHwgJyc7CiAgICAgICAgICAgICBodG1sICs9ICc8Zm9y
bSBvbnN1Ym1pdD0ic2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXZpc2lvblwnLCByZXZpc2lvbi52YWx1
ZSk7JyArCiAgICAgICAgICAgICAgICAgJ3JldHVybiBmYWxzZTsiPlNob3cgcmVzdWx0cyBmb3Ig
V2ViS2l0IHJldmlzaW9uOiAnICsKICAgICAgICAgICAgICAgICAnPGlucHV0IG5hbWU9cmV2aXNp
b24gcGxhY2Vob2xkZXI9ImUuZy4gNjU1NDAiIHZhbHVlPSInICsgcmV2aXNpb24gKwpAQCAtMTg5
Niw3ICsxODk2LDcgQEAgZnVuY3Rpb24gaHRtbEZvckluZGl2aWR1bFRlc3RPbkFsbEJ1aWxkZXJz
KHRlc3QpCiAgICAgfSBlbHNlIHsKICAgICAgIGh0bWwgKz0gJyB8IDxzcGFuPlJlc3VsdHMgaGVp
Z2h0OjxpbnB1dCAnICsKICAgICAgICAgICAnb25jaGFuZ2U9InNldFF1ZXJ5UGFyYW1ldGVyKFwn
cmVzdWx0c0hlaWdodFwnLHRoaXMudmFsdWUpIiB2YWx1ZT0iJyArCi0gICAgICAgICAgY3VycmVu
dFN0YXRlLnJlc3VsdHNIZWlnaHQgKyAnIiBzdHlsZT0id2lkdGg6Mi41ZW0iPnB4PC9zcGFuPic7
CisgICAgICAgICAgZ19jdXJyZW50U3RhdGUucmVzdWx0c0hlaWdodCArICciIHN0eWxlPSJ3aWR0
aDoyLjVlbSI+cHg8L3NwYW4+JzsKICAgICB9CiAgICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JzsK
ICAgICByZXR1cm4gaHRtbDsKQEAgLTE5ODQsNyArMTk4NCw3IEBAIGZ1bmN0aW9uIGFkZEV4cGVj
dGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBwYXJlbnRDb250YWluZXIsIHBsYXRm
b3JtLCBwCiAgICAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxkKGV4cGVjdGF0aW9uc1Rp
dGxlKHBsYXRmb3JtLCBwYXRoLCBvcHRfYnVpbGRlciB8fCAnJykpOwogICAgICAgICBjaGlsZENv
bnRhaW5lci5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWl0ZW0nOwogICAgICAgICBpdGVtLmNs
YXNzTmFtZSA9ICdleHBlY3RhdGlvbiAnICsgZmlsZUV4dGVuc2lvbjsKLSAgICAgICAgaWYgKGN1
cnJlbnRTdGF0ZS5zaG93TGFyZ2VFeHBlY3RhdGlvbnMpCisgICAgICAgIGlmIChnX2N1cnJlbnRT
dGF0ZS5zaG93TGFyZ2VFeHBlY3RhdGlvbnMpCiAgICAgICAgICAgICBpdGVtLmNsYXNzTmFtZSAr
PSAnIGxhcmdlJzsKICAgICAgICAgY2hpbGRDb250YWluZXIuYXBwZW5kQ2hpbGQoaXRlbSk7CiAg
ICAgICAgIGhhbmRsZUZpbmlzaGVkTG9hZGluZ0V4cGVjdGF0aW9ucyhjb250YWluZXIpOwpAQCAt
MjE5OCw3ICsyMTk4LDcgQEAgZnVuY3Rpb24gYXBwZW5kTm9uV2ViS2l0UmVzdWx0cyhjb250YWlu
ZXIsIHVybCkKICAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJh
bWUnKTsKICAgICAgICAgaXRlbS5zcmMgPSBkdW1teU5vZGUuc3JjOwogICAgICAgICBpdGVtLmNs
YXNzTmFtZSA9ICdub24td2Via2l0LXJlc3VsdHMnOwotICAgICAgICBpdGVtLnN0eWxlLmhlaWdo
dCA9IGN1cnJlbnRTdGF0ZS5yZXN1bHRzSGVpZ2h0ICsgJ3B4JzsKKyAgICAgICAgaXRlbS5zdHls
ZS5oZWlnaHQgPSBnX2N1cnJlbnRTdGF0ZS5yZXN1bHRzSGVpZ2h0ICsgJ3B4JzsKICAgICAgICAg
Y29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgIH0KICAgICBkdW1teU5vZGUub25lcnJv
ciA9IGZ1bmN0aW9uKCkgewpAQCAtMjIxMCwxMyArMjIxMCwxMyBAQCBmdW5jdGlvbiBhcHBlbmRO
b25XZWJLaXRSZXN1bHRzKGNvbnRhaW5lciwgdXJsKQogCiBmdW5jdGlvbiBidWlsZEluZm9Gb3JS
ZXZpc2lvbihidWlsZGVyLCByZXZpc2lvbikKIHsKLSAgICB2YXIgcmV2aXNpb25zID0gcmVzdWx0
c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvbjsKKyAgICB2YXIgcmV2aXNpb25zID0g
Z19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uOwogICAgIHZhciByZXZp
c2lvblN0YXJ0ID0gMCwgcmV2aXNpb25FbmQgPSAwLCBidWlsZE51bWJlciA9IDA7CiAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCByZXZpc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgaWYgKHJl
dmlzaW9uID4gcmV2aXNpb25zW2ldKSB7CiAgICAgICAgICAgICByZXZpc2lvblN0YXJ0ID0gcmV2
aXNpb25zW2kgLSAxXTsKICAgICAgICAgICAgIHJldmlzaW9uRW5kID0gcmV2aXNpb25zW2ldOwot
ICAgICAgICAgICAgYnVpbGROdW1iZXIgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxk
TnVtYmVyc1tpIC0gMV07CisgICAgICAgICAgICBidWlsZE51bWJlciA9IGdfcmVzdWx0c0J5QnVp
bGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaSAtIDFdOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMjM4LDkgKzIyMzgsOSBAQCBmdW5jdGlvbiBsb2FkRXhwZWN0
YXRpb25zTGF5b3V0VGVzdHMoZXhwZWN0YXRpb25zQ29udGFpbmVyKQogICAgIHZhciByZXZpc2lv
bkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgIHJldmlzaW9u
Q29udGFpbmVyLnRleHRDb250ZW50ID0gIlNob3dpbmcgcmVzdWx0cyBmb3I6ICIKICAgICBleHBl
Y3RhdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQocmV2aXNpb25Db250YWluZXIpOwotICAgIGZv
ciAodmFyIGJ1aWxkZXIgaW4gYnVpbGRlcnMpIHsKKyAgICBmb3IgKHZhciBidWlsZGVyIGluIGdf
YnVpbGRlcnMpIHsKICAgICAgICAgaWYgKGdldEJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikgPT0gV0VC
S0lUX0JVSUxERVJfTUFTVEVSKSB7Ci0gICAgICAgICAgICB2YXIgbGF0ZXN0UmV2aXNpb24gPSBj
dXJyZW50U3RhdGUucmV2aXNpb24gfHwgcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRS
ZXZpc2lvblswXTsKKyAgICAgICAgICAgIHZhciBsYXRlc3RSZXZpc2lvbiA9IGdfY3VycmVudFN0
YXRlLnJldmlzaW9uIHx8IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lv
blswXTsKICAgICAgICAgICAgIHZhciBidWlsZEluZm8gPSBidWlsZEluZm9Gb3JSZXZpc2lvbihi
dWlsZGVyLCBsYXRlc3RSZXZpc2lvbik7CiAgICAgICAgICAgICB2YXIgcmV2aXNpb25JbmZvID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICByZXZpc2lvbkluZm8u
c3R5bGUuY3NzVGV4dCA9ICdiYWNrZ3JvdW5kOmxpZ2h0Z3JheTttYXJnaW46MCAzcHg7cGFkZGlu
ZzowIDJweDtkaXNwbGF5OmlubGluZS1ibG9jazsnOwpAQCAtMjI3MCwxNSArMjI3MCwxNSBAQCBm
dW5jdGlvbiBsb2FkRXhwZWN0YXRpb25zTGF5b3V0VGVzdHMoZXhwZWN0YXRpb25zQ29udGFpbmVy
KQogCiAgICAgdmFyIGFjdHVhbFJlc3VsdFN1ZmZpeGVzID0gWyctYWN0dWFsLnR4dCcsICctYWN0
dWFsLnBuZycsICctY3Jhc2gtbG9nLnR4dCcsICctZGlmZi50eHQnLCAnLXdkaWZmLmh0bWwnLCAn
LWRpZmYucG5nJ107CiAKLSAgICBmb3IgKHZhciBidWlsZGVyIGluIGJ1aWxkZXJzKSB7CisgICAg
Zm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxkZXJzKSB7CiAgICAgICAgIHZhciBhY3R1YWxSZXN1
bHRzQmFzZTsKICAgICAgICAgaWYgKGdldEJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikgPT0gV0VCS0lU
X0JVSUxERVJfTUFTVEVSKSB7Ci0gICAgICAgICAgICB2YXIgbGF0ZXN0UmV2aXNpb24gPSBjdXJy
ZW50U3RhdGUucmV2aXNpb24gfHwgcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZp
c2lvblswXTsKKyAgICAgICAgICAgIHZhciBsYXRlc3RSZXZpc2lvbiA9IGdfY3VycmVudFN0YXRl
LnJldmlzaW9uIHx8IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvblsw
XTsKICAgICAgICAgICAgIHZhciBidWlsZEluZm8gPSBidWlsZEluZm9Gb3JSZXZpc2lvbihidWls
ZGVyLCBsYXRlc3RSZXZpc2lvbik7CiAgICAgICAgICAgICBhY3R1YWxSZXN1bHRzQmFzZSA9ICdo
dHRwOi8vYnVpbGQud2Via2l0Lm9yZy9yZXN1bHRzLycgKyBidWlsZGVyICsKICAgICAgICAgICAg
ICAgICAnL3InICsgYnVpbGRJbmZvLnJldmlzaW9uU3RhcnQgKyAnICgnICsgYnVpbGRJbmZvLmJ1
aWxkTnVtYmVyICsgJykvJzsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhY3R1YWxSZXN1
bHRzQmFzZSA9IFRFU1RfUkVTVUxUU19CQVNFX1BBVEggKyBidWlsZGVyc1tidWlsZGVyXSArICcv
cmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzLyc7CisgICAgICAgICAgICBhY3R1YWxSZXN1bHRz
QmFzZSA9IFRFU1RfUkVTVUxUU19CQVNFX1BBVEggKyBnX2J1aWxkZXJzW2J1aWxkZXJdICsgJy9y
ZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvJzsKIAogICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGFjdHVhbFJlc3VsdFN1ZmZpeGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBhZGRF
eHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgZXhwZWN0YXRpb25zQ29udGFp
bmVyLCBudWxsLApAQCAtMjMyMiw3ICsyMzIyLDcgQEAgZnVuY3Rpb24gYWxsRmFsbGJhY2tzKCkK
IAogZnVuY3Rpb24gYXBwZW5kRXhwZWN0YXRpb25zKCkKIHsKLSAgICB2YXIgZXhwZWN0YXRpb25z
ID0gY3VycmVudFN0YXRlLnNob3dFeHBlY3RhdGlvbnMgPyBkb2N1bWVudC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCdleHBlY3RhdGlvbnMnKSA6IFtdOworICAgIHZhciBleHBlY3RhdGlvbnMgPSBn
X2N1cnJlbnRTdGF0ZS5zaG93RXhwZWN0YXRpb25zID8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSgnZXhwZWN0YXRpb25zJykgOiBbXTsKICAgICAvLyBMb2FkaW5nIGV4cGVjdGF0aW9u
cyBpcyAqdmVyeSogc2xvdy4gVXNlIGEgbGFyZ2UgdGltZW91dCB0byBhdm9pZAogICAgIC8vIHRv
dGFsbHkgaGFuZ2luZyB0aGUgcmVuZGVyZXIuCiAgICAgcGVyZm9ybUNodW5rZWRBY3Rpb24oZXhw
ZWN0YXRpb25zLCBmdW5jdGlvbihjaHVuaykgewpAQCAtMjM0NSw3ICsyMzQ1LDcgQEAgZnVuY3Rp
b24gZ2VuZXJhdGVQYWdlRm9ySW5kaXZpZHVhbFRlc3RzKHRlc3RzKQogICAgIHBlcmZvcm1DaHVu
a2VkQWN0aW9uKHRlc3RzLCBmdW5jdGlvbihjaHVuaykgewogICAgICAgICBhcHBlbmRIVE1MKGh0
bWxGb3JJbmRpdmlkdWFsVGVzdHMoY2h1bmspKTsKICAgICB9LCBhcHBlbmRFeHBlY3RhdGlvbnMs
IDUwMCk7Ci0gICAgJCgndGVzdHMtaW5wdXQnKS52YWx1ZSA9IGN1cnJlbnRTdGF0ZS50ZXN0czsK
KyAgICAkKCd0ZXN0cy1pbnB1dCcpLnZhbHVlID0gZ19jdXJyZW50U3RhdGUudGVzdHM7CiB9CiAK
IGZ1bmN0aW9uIHBlcmZvcm1DaHVua2VkQWN0aW9uKHRlc3RzLCBoYW5kbGVDaHVuaywgb25Db21w
bGV0ZSwgdGltZW91dCwgb3B0X2luZGV4KSB7CkBAIC0yMzczLDcgKzIzNzMsNyBAQCBmdW5jdGlv
biBodG1sRm9yTmF2QmFyKCkKIHsKICAgICB2YXIgZXh0cmFIVE1MID0gJyc7CiAgICAgaWYgKCFp
c0Nyb3NzQnVpbGRlclZpZXcoKSkKLSAgICAgICAgZXh0cmFIVE1MICs9IGNoZWNrYm94SFRNTCgn
c2hvd1J1bnNPbkJ1aWxkZXJQYWdlJywgJ1Nob3cgZmxha2luZXNzIGRldGFpbHMnLCBjdXJyZW50
U3RhdGUuc2hvd1J1bnNPbkJ1aWxkZXJQYWdlKTsKKyAgICAgICAgZXh0cmFIVE1MICs9IGNoZWNr
Ym94SFRNTCgnc2hvd1J1bnNPbkJ1aWxkZXJQYWdlJywgJ1Nob3cgZmxha2luZXNzIGRldGFpbHMn
LCBnX2N1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRlclBhZ2UpOwogCiAgICAgdmFyIGh0bWwg
PSBnZXRIVE1MRm9yVGVzdFR5cGVTd2l0Y2hlcihmYWxzZSwgZXh0cmFIVE1MLCBpc0Nyb3NzQnVp
bGRlclZpZXcoKSk7CiAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1mb3Jtcz48Zm9ybSBpZD1yZXN1
bHQtZm9ybSAnICsKQEAgLTIzOTMsNyArMjM5Myw3IEBAIGZ1bmN0aW9uIGh0bWxGb3JOYXZCYXIo
KQogCiBmdW5jdGlvbiBsaW5rSFRNTFRvVG9nZ2xlU3RhdGUoa2V5LCBsaW5rVGV4dCkKIHsKLSAg
ICB2YXIgaXNUcnVlID0gY3VycmVudFN0YXRlW2tleV07CisgICAgdmFyIGlzVHJ1ZSA9IGdfY3Vy
cmVudFN0YXRlW2tleV07CiAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1saW5rIG9uY2xpY2s9InNl
dFF1ZXJ5UGFyYW1ldGVyKFwnJyArIGtleSArICdcJywgJyArCiAgICAgICAgICFpc1RydWUgKyAn
KSI+JyArIChpc1RydWUgPyAnSGlkZScgOiAnU2hvdycpICsgJyAnICsgbGlua1RleHQgKyAnPC9z
cGFuPic7CiB9CkBAIC0yNDAzLDcgKzI0MDMsNyBAQCBmdW5jdGlvbiBnZW5lcmF0ZVBhZ2VGb3JC
dWlsZGVyKGJ1aWxkZXJOYW1lKQogICAgIHByb2Nlc3NUZXN0UnVuc0ZvckJ1aWxkZXIoYnVpbGRl
ck5hbWUpOwogCiAgICAgdmFyIHJlc3VsdHMgPSBnX3BlckJ1aWxkZXJGYWlsdXJlc1tidWlsZGVy
TmFtZV07Ci0gICAgc29ydFRlc3RzKHJlc3VsdHMsIGN1cnJlbnRTdGF0ZS5zb3J0Q29sdW1uLCBj
dXJyZW50U3RhdGUuc29ydE9yZGVyKTsKKyAgICBzb3J0VGVzdHMocmVzdWx0cywgZ19jdXJyZW50
U3RhdGUuc29ydENvbHVtbiwgZ19jdXJyZW50U3RhdGUuc29ydE9yZGVyKTsKIAogICAgIHZhciB0
ZXN0c0hUTUwgPSAnJzsKICAgICBpZiAocmVzdWx0cy5sZW5ndGgpIHsKQEAgLTI0NTUsMTUgKzI0
NTUsMTUgQEAgdmFyIFZBTElEX0tFWVNfRk9SX0NST1NTX0JVSUxERVJfVklFVyA9IHsKIAogZnVu
Y3Rpb24gaXNJbnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhrZXkpCiB7Ci0gICAgcmV0dXJu
ICEoa2V5IGluIFZBTElEX0tFWVNfRk9SX0NST1NTX0JVSUxERVJfVklFVykgJiYgIShrZXkgaW4g
ZGVmYXVsdENyb3NzRGFzaGJvYXJkU3RhdGVWYWx1ZXMpOworICAgIHJldHVybiAhKGtleSBpbiBW
QUxJRF9LRVlTX0ZPUl9DUk9TU19CVUlMREVSX1ZJRVcpICYmICEoa2V5IGluIGdfZGVmYXVsdENy
b3NzRGFzaGJvYXJkU3RhdGVWYWx1ZXMpOwogfQogCiBmdW5jdGlvbiB1cGRhdGVEZWZhdWx0QnVp
bGRlclN0YXRlKCkKIHsKICAgICBpZiAoaXNDcm9zc0J1aWxkZXJWaWV3KCkpCi0gICAgICAgIGRl
bGV0ZSBkZWZhdWx0U3RhdGVWYWx1ZXMuYnVpbGRlcjsKKyAgICAgICAgZGVsZXRlIGdfZGVmYXVs
dFN0YXRlVmFsdWVzLmJ1aWxkZXI7CiAgICAgZWxzZQotICAgICAgICBkZWZhdWx0U3RhdGVWYWx1
ZXMuYnVpbGRlciA9IGRlZmF1bHRCdWlsZGVyTmFtZTsKKyAgICAgICAgZ19kZWZhdWx0U3RhdGVW
YWx1ZXMuYnVpbGRlciA9IGdfZGVmYXVsdEJ1aWxkZXJOYW1lOwogfQogCiAvLyBTZXRzIHRoZSBw
YWdlIHN0YXRlIHRvIHJlZ2VuZXJhdGUgdGhlIHBhZ2UuCkBAIC0yNDczLDE0ICsyNDczLDE0IEBA
IGZ1bmN0aW9uIGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlKHBhcmFtcykKICAgICBmb3IgKGtl
eSBpbiBwYXJhbXMpIHsKICAgICAgICAgaWYgKGtleSA9PSAndGVzdHMnKSB7CiAgICAgICAgICAg
ICAvLyBFbnRlcmluZyBjcm9zcy1idWlsZGVyIHZpZXcsIG9ubHkga2VlcCB2YWxpZCBrZXlzIGZv
ciB0aGF0IHZpZXcuCi0gICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50S2V5IGluIGN1cnJlbnRT
dGF0ZSkgeworICAgICAgICAgICAgZm9yICh2YXIgY3VycmVudEtleSBpbiBnX2N1cnJlbnRTdGF0
ZSkgewogICAgICAgICAgICAgICBpZiAoaXNJbnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhj
dXJyZW50S2V5KSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50U3RhdGVbY3VycmVu
dEtleV07CisgICAgICAgICAgICAgICAgZGVsZXRlIGdfY3VycmVudFN0YXRlW2N1cnJlbnRLZXld
OwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJ
bnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhrZXkpKSB7Ci0gICAgICAgICAgICBkZWxldGUg
Y3VycmVudFN0YXRlLnRlc3RzOwotICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnRTdGF0ZS5yZXN1
bHQ7CisgICAgICAgICAgICBkZWxldGUgZ19jdXJyZW50U3RhdGUudGVzdHM7CisgICAgICAgICAg
ICBkZWxldGUgZ19jdXJyZW50U3RhdGUucmVzdWx0OwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVz
c19kYXNoYm9hcmRfdGVzdHMuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuanMKaW5kZXggMjEyMzg3MmYzN2ZiMzRi
Zjk4ZDc0MjgyYmZjMDIxNTg2NmViNmM4NS4uNjJlMjAzY2Y1OTJjYzljOTY4MTA0NmFmNGJlOWI4
ZDUzYWFhM2NjZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3Rlc3RzLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5qcwpA
QCAtNDgsOSArNDgsOSBAQAogZnVuY3Rpb24gc2V0dXBFeHBlY3RhdGlvbnNUZXN0KCkgewogICBh
bGxFeHBlY3RhdGlvbnMgPSBudWxsOwogICBhbGxUZXN0cyA9IG51bGw7Ci0gIGV4cGVjdGF0aW9u
c0J5VGVzdCA9IHt9OwotICByZXN1bHRzQnlCdWlsZGVyID0ge307Ci0gIGJ1aWxkZXJzID0ge307
CisgIGdfZXhwZWN0YXRpb25zQnlUZXN0ID0ge307CisgIGdfcmVzdWx0c0J5QnVpbGRlciA9IHt9
OworICBnX2J1aWxkZXJzID0ge307CiB9CiAKIC8qKgpAQCAtNjUsMTMgKzY1LDEzIEBAIGZ1bmN0
aW9uIHNldHVwRXhwZWN0YXRpb25zVGVzdCgpIHsKICAqICAgIHRlc3Qgb3VnaHQgdG8gYmUgZm9y
IHRoaXMgYnVpbGRlci4KICAqLwogZnVuY3Rpb24gcnVuRXhwZWN0YXRpb25zVGVzdChidWlsZGVy
LCB0ZXN0LCBleHBlY3RhdGlvbnMsIG1vZGlmaWVycykgewotICBidWlsZGVyc1tidWlsZGVyXSA9
IHRydWU7CisgIGdfYnVpbGRlcnNbYnVpbGRlcl0gPSB0cnVlOwogCiAgIC8vIFB1dCBpbiBzb21l
IGR1bW15IHJlc3VsdHMuIHByb2Nlc3NFeHBlY3RhdGlvbnMgZXhwZWN0cyB0aGUgdGVzdCB0byBi
ZQogICAvLyB0aGVyZS4KICAgdmFyIHRlc3RzID0ge307CiAgIHRlc3RzW3Rlc3RdID0geydyZXN1
bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfTsKLSAgcmVzdWx0c0J5QnVp
bGRlcltidWlsZGVyXSA9IHsndGVzdHMnOiB0ZXN0c307CisgIGdfcmVzdWx0c0J5QnVpbGRlclti
dWlsZGVyXSA9IHsndGVzdHMnOiB0ZXN0c307CiAKICAgcHJvY2Vzc0V4cGVjdGF0aW9ucygpOwog
ICB2YXIgcmVzdWx0c0ZvclRlc3QgPSBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBi
dWlsZGVyKTsKQEAgLTk3LDcgKzk3LDcgQEAgZnVuY3Rpb24gdGVzdFJlbGVhc2VGYWlsKCkgewog
ICB2YXIgZXhwZWN0YXRpb25zQXJyYXkgPSBbCiAgICAgeydtb2RpZmllcnMnOiAnUkVMRUFTRScs
ICdleHBlY3RhdGlvbnMnOiAnRkFJTCd9CiAgIF07Ci0gIGV4cGVjdGF0aW9uc0J5VGVzdFt0ZXN0
XSA9IGV4cGVjdGF0aW9uc0FycmF5OworICBnX2V4cGVjdGF0aW9uc0J5VGVzdFt0ZXN0XSA9IGV4
cGVjdGF0aW9uc0FycmF5OwogICBydW5FeHBlY3RhdGlvbnNUZXN0KGJ1aWxkZXIsIHRlc3QsICdG
QUlMJywgJ1JFTEVBU0UnKTsKIH0KIApAQCAtMTA4LDcgKzEwOCw3IEBAIGZ1bmN0aW9uIHRlc3RS
ZWxlYXNlRmFpbERlYnVnQ3Jhc2hSZWxlYXNlQnVpbGRlcigpIHsKICAgICB7J21vZGlmaWVycyc6
ICdSRUxFQVNFJywgJ2V4cGVjdGF0aW9ucyc6ICdGQUlMJ30sCiAgICAgeydtb2RpZmllcnMnOiAn
REVCVUcnLCAnZXhwZWN0YXRpb25zJzogJ0NSQVNIJ30KICAgXTsKLSAgZXhwZWN0YXRpb25zQnlU
ZXN0W3Rlc3RdID0gZXhwZWN0YXRpb25zQXJyYXk7CisgIGdfZXhwZWN0YXRpb25zQnlUZXN0W3Rl
c3RdID0gZXhwZWN0YXRpb25zQXJyYXk7CiAgIHJ1bkV4cGVjdGF0aW9uc1Rlc3QoYnVpbGRlciwg
dGVzdCwgJ0ZBSUwnLCAnUkVMRUFTRScpOwogfQogCkBAIC0xMTksMTYgKzExOSwxNiBAQCBmdW5j
dGlvbiB0ZXN0UmVsZWFzZUZhaWxEZWJ1Z0NyYXNoRGVidWdCdWlsZGVyKCkgewogICAgIHsnbW9k
aWZpZXJzJzogJ1JFTEVBU0UnLCAnZXhwZWN0YXRpb25zJzogJ0ZBSUwnfSwKICAgICB7J21vZGlm
aWVycyc6ICdERUJVRycsICdleHBlY3RhdGlvbnMnOiAnQ1JBU0gnfQogICBdOwotICBleHBlY3Rh
dGlvbnNCeVRlc3RbdGVzdF0gPSBleHBlY3RhdGlvbnNBcnJheTsKKyAgZ19leHBlY3RhdGlvbnNC
eVRlc3RbdGVzdF0gPSBleHBlY3RhdGlvbnNBcnJheTsKICAgcnVuRXhwZWN0YXRpb25zVGVzdChi
dWlsZGVyLCB0ZXN0LCAnQ1JBU0gnLCAnREVCVUcnKTsKIH0KIAogZnVuY3Rpb24gdGVzdE92ZXJy
aWRlSnVzdEJ1aWxkVHlwZSgpIHsKICAgdmFyIHRlc3QgPSAnYmFyLzEuaHRtbCc7Ci0gIGV4cGVj
dGF0aW9uc0J5VGVzdFsnYmFyJ10gPSBbCisgIGdfZXhwZWN0YXRpb25zQnlUZXN0WydiYXInXSA9
IFsKICAgICB7J21vZGlmaWVycyc6ICdXT05URklYJywgJ2V4cGVjdGF0aW9ucyc6ICdGQUlMIFBB
U1MgVElNRU9VVCd9CiAgIF07Ci0gIGV4cGVjdGF0aW9uc0J5VGVzdFt0ZXN0XSA9IFsKKyAgZ19l
eHBlY3RhdGlvbnNCeVRlc3RbdGVzdF0gPSBbCiAgICAgeydtb2RpZmllcnMnOiAnV09OVEZJWCBN
QUMnLCAnZXhwZWN0YXRpb25zJzogJ0ZBSUwnfSwKICAgICB7J21vZGlmaWVycyc6ICdMSU5VWCBE
RUJVRycsICdleHBlY3RhdGlvbnMnOiAnQ1JBU0gnfSwKICAgXTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRt
bCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhw
bG9yZXIuaHRtbAppbmRleCBlOGE2MjU4N2EwZTg3ODFmM2JhMzkxNzZmYTJjYTQ5YTJmYTk4NmFm
Li4wNGIzZDE3MjNjMjVmOThjZTBhODg5Nzk2MjlmMGVlOGZhNWY3MGE2IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVy
Lmh0bWwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1l
bGluZV9leHBsb3Jlci5odG1sCkBAIC0xMTIsMTcgKzExMiwxNyBAQCBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KICAgZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkgewogICAgIGJ1
aWxkSW5kaWNlc0J5VGltZXN0YW1wID0ge307Ci0gICAgdmFyIHJlc3VsdHMgPSByZXN1bHRzQnlC
dWlsZGVyW2N1cnJlbnRTdGF0ZS5idWlsZGVyXTsKKyAgICB2YXIgcmVzdWx0cyA9IGdfcmVzdWx0
c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5idWlsZGVyXTsKIAogICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldLmxlbmd0aDsgaSsrKSB7CiAgICAgICB2
YXIgYnVpbGREYXRlID0gbmV3IERhdGUocmVzdWx0c1tUSU1FU1RBTVBTX0tFWV1baV0gKiAxMDAw
KTsKICAgICAgIGJ1aWxkSW5kaWNlc0J5VGltZXN0YW1wW2J1aWxkRGF0ZS5nZXRUaW1lKCldID0g
aTsKICAgICB9CiAKLSAgICBpZiAoY3VycmVudFN0YXRlLmJ1aWxkVGltZXN0YW1wICE9IC0xICYm
Ci0gICAgICAgIGN1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCBpbiBidWlsZEluZGljZXNCeVRp
bWVzdGFtcCkgeworICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCAhPSAtMSAm
JgorICAgICAgICBnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCBpbiBidWlsZEluZGljZXNC
eVRpbWVzdGFtcCkgewogICAgICAgICB2YXIgbmV3QnVpbGRJbmRleCA9Ci0gICAgICAgICAgICBi
dWlsZEluZGljZXNCeVRpbWVzdGFtcFtjdXJyZW50U3RhdGUuYnVpbGRUaW1lc3RhbXBdOworICAg
ICAgICAgICAgYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbZ19jdXJyZW50U3RhdGUuYnVpbGRUaW1l
c3RhbXBdOwogCiAgICAgICAgIGlmIChuZXdCdWlsZEluZGV4ID09IGN1cnJlbnRCdWlsZEluZGV4
KSB7CiAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gc2VsZWN0QnVpbGQgaXMgY2FsbGVk
LCB3aGljaCB1cGRhdGVzIHRoZSBVSQpAQCAtMTQwLDcgKzE0MCw3IEBAIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
ICAgJCgndGVzdC10eXBlLXN3aXRjaGVyJykuaW5uZXJIVE1MID0gZ2V0SFRNTEZvclRlc3RUeXBl
U3dpdGNoZXIoCiAgICAgICAgIGZhbHNlLAogICAgICAgICBjaGVja2JveEhUTUwoJ2lnbm9yZUZs
YWt5VGVzdHMnLCAnSWdub3JlIGZsYWt5IHRlc3RzJywKLSAgICAgICAgICAgIGN1cnJlbnRTdGF0
ZS5pZ25vcmVGbGFreVRlc3RzLCAnY3VycmVudEJ1aWxkSW5kZXggPSAtMScpCisgICAgICAgICAg
ICBnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzLCAnY3VycmVudEJ1aWxkSW5kZXggPSAt
MScpCiAgICAgKTsKIAogICAgIHVwZGF0ZVRpbWVsaW5lRm9yQnVpbGRlcigpOwpAQCAtMTQ5LDcg
KzE0OSw3IEBAIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgIGZ1bmN0aW9uIGluaXRDdXJyZW50QnVpbGRlclRlc3RS
ZXN1bHRzKCkgewogICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgIGN1cnJlbnRC
dWlsZGVyVGVzdFJlc3VsdHMgPQotICAgICAgICBnZXRUZXN0UmVzdWx0c0J5QnVpbGQocmVzdWx0
c0J5QnVpbGRlcltjdXJyZW50U3RhdGUuYnVpbGRlcl0pOworICAgICAgICBnZXRUZXN0UmVzdWx0
c0J5QnVpbGQoZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJdKTsKICAg
ICBjb25zb2xlLmxvZygKICAgICAgICAgJ1RpbWUgdG8gZ2V0IHRlc3QgcmVzdWx0cyBieSBidWls
ZDogJyArIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSk7CiAgIH0KQEAgLTE1NywyNSArMTU3LDI1
IEBAIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgIGZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXks
IHZhbHVlKSB7CiAgICAgc3dpdGNoKGtleSkgewogICAgICAgY2FzZSAnYnVpbGRUaW1lc3RhbXAn
OgotICAgICAgICBjdXJyZW50U3RhdGUuYnVpbGRUaW1lc3RhbXAgPSBwYXJzZUludCh2YWx1ZSwg
MTApOworICAgICAgICBnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCA9IHBhcnNlSW50KHZh
bHVlLCAxMCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSAnaWdub3JlRmxha3lU
ZXN0cyc6Ci0gICAgICAgIGN1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzID0gdmFsdWUgPT0g
J3RydWUnOworICAgICAgICBnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzID0gdmFsdWUg
PT0gJ3RydWUnOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgIH0KIAotICBkZWZhdWx0U3RhdGVWYWx1ZXMgPSB7Cisg
IGdfZGVmYXVsdFN0YXRlVmFsdWVzID0gewogICAgIGJ1aWxkVGltZXN0YW1wOiAtMSwKLSAgICBi
dWlsZGVyOiBkZWZhdWx0QnVpbGRlck5hbWUsCisgICAgYnVpbGRlcjogZ19kZWZhdWx0QnVpbGRl
ck5hbWUsCiAgICAgaWdub3JlRmxha3lUZXN0czogdHJ1ZQogICB9OwogCiAgIGZ1bmN0aW9uIHVw
ZGF0ZVRpbWVsaW5lRm9yQnVpbGRlcigpIHsKLSAgICB2YXIgYnVpbGRlciA9IGN1cnJlbnRTdGF0
ZS5idWlsZGVyOwotICAgIHZhciByZXN1bHRzID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXTsK
KyAgICB2YXIgYnVpbGRlciA9IGdfY3VycmVudFN0YXRlLmJ1aWxkZXI7CisgICAgdmFyIHJlc3Vs
dHMgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl07CiAgICAgdmFyIGdyYXBoRGF0YSA9IFtd
OwogCiAgICAgdmFyIGFubm90YXRpb25zID0gW107CkBAIC0xODcsNyArMTg3LDcgQEAgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAgICAgIC8vIGV4Y2x1ZGUgcnVucyB3aGVyZSBldmVyeSB0ZXN0IGZhaWxlZC4KICAg
ICAgIHZhciBmYWlsdXJlQ291bnQgPSBNYXRoLm1pbihyZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZ
XVtpXSwgMTAwMDApOwogCi0gICAgICBpZiAoY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMp
IHsKKyAgICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzKSB7CiAgICAgICAg
IGZhaWx1cmVDb3VudCAtPQogICAgICAgICAgICAgY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5m
bGFreURlbHRhc0J5QnVpbGRbaV0udG90YWwgfHwgMDsKICAgICAgIH0KQEAgLTI5OSw3ICsyOTks
NyBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICAgIH0gZWxzZSB7CiAgICAgICB2YXIgcmVzdWx0c1VybCA9CiAg
ICAgICAgICAgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVz
dF9yZXN1bHRzLycgKwotICAgICAgICAgIGJ1aWxkZXJzW2J1aWxkZXJdICsgJy8nICsgcmVzdWx0
c1tDSFJPTUVfUkVWSVNJT05TX0tFWV1baW5kZXhdOworICAgICAgICAgIGdfYnVpbGRlcnNbYnVp
bGRlcl0gKyAnLycgKyByZXN1bHRzW0NIUk9NRV9SRVZJU0lPTlNfS0VZXVtpbmRleF07CiAgICAg
fQogCiAgICAgYWRkUm93KApAQCAtMzM2LDcgKzMzNiw3IEBAIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgICAg
ICAgICByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1baW5kZXhdW2V4cGVjdGF0aW9uS2V5XTsK
ICAgICAgICAgdmFyIHByZXZpb3VzQ291bnQgPQogICAgICAgICAgICAgcmVzdWx0c1tGSVhBQkxF
X0NPVU5UU19LRVldW2luZGV4ICsgMV1bZXhwZWN0YXRpb25LZXldOwotICAgICAgICBpZiAoY3Vy
cmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMpIHsKKyAgICAgICAgaWYgKGdfY3VycmVudFN0YXRl
Lmlnbm9yZUZsYWt5VGVzdHMpIHsKICAgICAgICAgICBjdXJyZW50Q291bnQgLT0gZmxha3lEZWx0
YXNCeUJ1aWxkW2luZGV4XVtleHBlY3RhdGlvbktleV0gfHwgMDsKICAgICAgICAgICBwcmV2aW91
c0NvdW50IC09IGZsYWt5RGVsdGFzQnlCdWlsZFtpbmRleCArIDFdW2V4cGVjdGF0aW9uS2V5XSB8
fCAwOwogICAgICAgICB9CkBAIC0zNDcsNyArMzQ3LDcgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogICAgIHZh
ciBjdXJyZW50VG90YWwgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZXVtpbmRleF07CiAgICAg
dmFyIHByZXZpb3VzVG90YWwgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZXVtpbmRleCArIDFd
OwotICAgIGlmIChjdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cykgeworICAgIGlmIChnX2N1
cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzKSB7CiAgICAgICBjdXJyZW50VG90YWwgLT0gZmxh
a3lEZWx0YXNCeUJ1aWxkW2luZGV4XS50b3RhbCB8fCAwOwogICAgICAgcHJldmlvdXNUb3RhbCAt
PSBmbGFreURlbHRhc0J5QnVpbGRbaW5kZXggKyAxXS50b3RhbCB8fCAwOwogICAgIH0KQEAgLTM4
Nyw3ICszODcsNyBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAgICAgdmFyIGRlbHRhcyA9IHt9OwogICAgIGZ1
bmN0aW9uIGFkZERlbHRhKGNhdGVnb3J5LCB0ZXN0SW5kZXgpIHsKLSAgICAgIGlmIChjdXJyZW50
U3RhdGUuaWdub3JlRmxha3lUZXN0cyAmJiBmbGFreVRlc3RzW3Rlc3RJbmRleF0pIHsKKyAgICAg
IGlmIChnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzICYmIGZsYWt5VGVzdHNbdGVzdElu
ZGV4XSkgewogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICBpZiAoIShjYXRlZ29yeSBp
biBkZWx0YXMpKSB7CkBAIC00NjMsMTUgKzQ2MywxNSBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIHN3aXRj
aCAoZS5rZXlJZGVudGlmaWVyKSB7CiAgICAgICBjYXNlICdMZWZ0JzoKICAgICAgICAgc2VsZWN0
QnVpbGQoCi0gICAgICAgICAgICByZXN1bHRzQnlCdWlsZGVyW2N1cnJlbnRTdGF0ZS5idWlsZGVy
XSwKLSAgICAgICAgICAgIGN1cnJlbnRTdGF0ZS5idWlsZGVyLAorICAgICAgICAgICAgZ19yZXN1
bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJdLAorICAgICAgICAgICAgZ19jdXJy
ZW50U3RhdGUuYnVpbGRlciwKICAgICAgICAgICAgIGR5Z3JhcGgsCiAgICAgICAgICAgICBjdXJy
ZW50QnVpbGRJbmRleCArIDEpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgJ1JpZ2h0JzoK
ICAgICAgICAgc2VsZWN0QnVpbGQoCi0gICAgICAgICAgICByZXN1bHRzQnlCdWlsZGVyW2N1cnJl
bnRTdGF0ZS5idWlsZGVyXSwKLSAgICAgICAgICAgIGN1cnJlbnRTdGF0ZS5idWlsZGVyLAorICAg
ICAgICAgICAgZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJdLAorICAg
ICAgICAgICAgZ19jdXJyZW50U3RhdGUuYnVpbGRlciwKICAgICAgICAgICAgIGR5Z3JhcGgsCiAg
ICAgICAgICAgICBjdXJyZW50QnVpbGRJbmRleCAtIDEpOwogICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5o
dG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0
bWwKaW5kZXggYmY2ZWRkNzk2Mzk1ZTA0Mzc2MzA0NjEzNzNkMzBkOTgxMzFiZjBmMy4uZTI5ODM5
YmExMmRjMzNkNzExNGM2MGUwOGI2ODZlOGNhZTE0OTU0YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwKKysrIGIvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwKQEAgLTE1NCwx
MyArMTU0LDEzIEBAIGZ1bmN0aW9uIGNvbnZlcnRUb1dlYlRyZWVtYXBGb3JtYXQodHJlZW5hbWUs
IHRyZWUpIHsKICAgfTsKIH0KIAotdmFyIHJlc3VsdHNCeUJ1aWxkZXIgPSB7fTsKK3ZhciBnX3Jl
c3VsdHNCeUJ1aWxkZXIgPSB7fTsKIAogZnVuY3Rpb24gQUREX1JFU1VMVFMoZGF0YSkgewogICAv
LyBUT0RPKG9qYW4pOiBXZSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSB0aGUgYnVpbGRlck5hbWUg
aW4gdGhlIEpTT04KICAgLy8gcmF0aGVyIHRoYW4gcmVseWluZyBvbiBvbmx5IGxvYWRpbmcgb25l
IEpTT04gZmlsZSBwZXIgcGFnZS4KLSAgaWYgKCFyZXN1bHRzQnlCdWlsZGVyW2N1cnJlbnRTdGF0
ZS5idWlsZGVyXSkKLSAgICByZXN1bHRzQnlCdWlsZGVyW2N1cnJlbnRTdGF0ZS5idWlsZGVyXSA9
IGRhdGE7CisgIGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJd
KQorICAgIGdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5idWlsZGVyXSA9IGRhdGE7
CiAKICAgaGFuZGxlTG9jYXRpb25DaGFuZ2UoKTsKIH0KQEAgLTE2OCwxOSArMTY4LDE5IEBAIGZ1
bmN0aW9uIEFERF9SRVNVTFRTKGRhdGEpIHsKIHZhciBpc0dlbmVyYXRpbmdQYWdlID0gZmFsc2U7
CiAKIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpIHsKLSAgaWYgKCFyZXN1bHRzQnlCdWlsZGVyW2N1
cnJlbnRTdGF0ZS5idWlsZGVyXSkgewotICAgIGhhbmRsZVJlc291cmNlTG9hZEVycm9yKGN1cnJl
bnRTdGF0ZS5idWlsZGVyKTsKKyAgaWYgKCFnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50U3Rh
dGUuYnVpbGRlcl0pIHsKKyAgICBoYW5kbGVSZXNvdXJjZUxvYWRFcnJvcihnX2N1cnJlbnRTdGF0
ZS5idWlsZGVyKTsKICAgICByZXR1cm47CiAgIH0KIAogICBpc0dlbmVyYXRpbmdQYWdlID0gdHJ1
ZTsKIAotICB2YXIgcmF3VHJlZSA9IHJlc3VsdHNCeUJ1aWxkZXJbY3VycmVudFN0YXRlLmJ1aWxk
ZXJdOworICB2YXIgcmF3VHJlZSA9IGdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5i
dWlsZGVyXTsKICAgdmFyIHdlYnRyZWUgPSBjb252ZXJ0VG9XZWJUcmVlbWFwRm9ybWF0KCdMYXlv
dXRUZXN0cycsIHJhd1RyZWUpOwogICBhcHBlbmRUcmVlbWFwKCQoJ21hcCcpLCB3ZWJ0cmVlKTsK
IAotICBpZiAoY3VycmVudFN0YXRlLnRyZWVtYXBmb2N1cykKLSAgICBmb2N1c1BhdGgod2VidHJl
ZSwgY3VycmVudFN0YXRlLnRyZWVtYXBmb2N1cykKKyAgaWYgKGdfY3VycmVudFN0YXRlLnRyZWVt
YXBmb2N1cykKKyAgICBmb2N1c1BhdGgod2VidHJlZSwgZ19jdXJyZW50U3RhdGUudHJlZW1hcGZv
Y3VzKQogCiAgIGlzR2VuZXJhdGluZ1BhZ2UgPSBmYWxzZTsKIH0KQEAgLTIxMywxNSArMjEzLDE1
IEBAIGZ1bmN0aW9uIGZvY3VzUGF0aCh0cmVlLCBwYXRoKSB7CiBmdW5jdGlvbiBoYW5kbGVWYWxp
ZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkgewogICBzd2l0Y2goa2V5KSB7CiAgICAgY2FzZSAn
YnVpbGRlcic6Ci0gICAgICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3RhdGUsIGtleSwgdmFs
dWUsCisgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihnX2N1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwK
ICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBidWls
ZGVyczsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBnX2J1aWxkZXJzOwogICAgICAgICAg
IH0pOwogCiAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgJ3RyZWVtYXBmb2N1cyc6Ci0g
ICAgICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAgICB2
YWxpZGF0ZVBhcmFtZXRlcihnX2N1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKICAgICAgICAgICBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgIC8vIFRPRE8ob2phbik6IFRoZXJlJ3MgcHJvYmFibHkg
YSBzaW1wbGVyIHJlZ2V4cCBoZXJlLiBKdXN0IHRyeWluZyB0byBtYXRjaCBhc2NpaSArIGZvcndh
cmQtc2xhc2guCiAgICAgICAgICAgICAvLyBlLmcuIExheW91dFRlc3RzL2Zvby9iYXIuaHRtbApA
QCAtMjM1LDEzICsyMzUsMTMgQEAgZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtl
eSwgdmFsdWUpIHsKICAgfQogfQogCi1kZWZhdWx0U3RhdGVWYWx1ZXMgPSB7Ci0gIGJ1aWxkZXI6
IGRlZmF1bHRCdWlsZGVyTmFtZQorZ19kZWZhdWx0U3RhdGVWYWx1ZXMgPSB7CisgIGJ1aWxkZXI6
IGdfZGVmYXVsdEJ1aWxkZXJOYW1lCiB9OwogCiBmdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFtZXRl
ckNoYW5nZShwYXJhbXMpIHsKLSAgaWYgKCFyZXN1bHRzQnlCdWlsZGVyW2N1cnJlbnRTdGF0ZS5i
dWlsZGVyXSkKLSAgICBhcHBlbmRKU09OU2NyaXB0RWxlbWVudEZvcihjdXJyZW50U3RhdGUuYnVp
bGRlcik7CisgIGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJd
KQorICAgIGFwcGVuZEpTT05TY3JpcHRFbGVtZW50Rm9yKGdfY3VycmVudFN0YXRlLmJ1aWxkZXIp
OwogCiAgIGZvciAodmFyIHBhcmFtIGluIHBhcmFtcykgewogICAgIGlmIChwYXJhbSAhPSAndHJl
ZW1hcGZvY3VzJykgewpAQCAtMjU2LDcgKzI1Niw3IEBAIGZ1bmN0aW9uIGhhbmRsZVF1ZXJ5UGFy
YW1ldGVyQ2hhbmdlKHBhcmFtcykgewogZnVuY3Rpb24gaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3Io
YnVpbGRlck5hbWUsIGUpIHsKICAgJCgnbWFwJykuaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPWVy
cm9yPkNvdWxkIG5vdCBsb2FkIGRhdGEgZm9yICcgKyBidWlsZGVyTmFtZSArICcuICcgKwogICAg
ICAgJ0VpdGhlciB0aGVyZSB3YXMgYSBzZXJ2ZXItc2lkZSBlcnJvciBvciAnICsgYnVpbGRlck5h
bWUgKyAnIGRvZXMgbm90IHJ1biAnICsKLSAgICAgIGN1cnJlbnRTdGF0ZS50ZXN0VHlwZSArICcu
PC9zcGFuPic7CisgICAgICBnX2N1cnJlbnRTdGF0ZS50ZXN0VHlwZSArICcuPC9zcGFuPic7CiB9
CiAKIGZ1bmN0aW9uIGV4dHJhY3ROYW1lKG5vZGUpIHsKQEAgLTMwNSw1ICszMDUsNSBAQCBmdW5j
dGlvbiBoYW5kbGVGb2N1cyh0cmVlKSB7CiB9CiAKIHBhcnNlUGFyYW1ldGVycygpOwotYXBwZW5k
SlNPTlNjcmlwdEVsZW1lbnRGb3IoY3VycmVudFN0YXRlLmJ1aWxkZXIpOworYXBwZW5kSlNPTlNj
cmlwdEVsZW1lbnRGb3IoZ19jdXJyZW50U3RhdGUuYnVpbGRlcik7CiA8L3NjcmlwdD4K
</data>
<flag name="review"
          id="95598"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>