<?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>115638</bug_id>
          
          <creation_ts>2013-05-06 06:51:26 -0700</creation_ts>
          <short_desc>[Flakiness Dashboard] Remove the results loading code</short_desc>
          <delta_ts>2014-02-05 17:25:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>114971</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>884929</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-05-06 06:51:26 -0700</bug_when>
    <thetext>[Dashboard] Remove the results loading code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884941</commentid>
    <comment_count>1</comment_count>
      <attachid>200669</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-05-06 07:22:12 -0700</bug_when>
    <thetext>Created attachment 200669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885865</commentid>
    <comment_count>2</comment_count>
      <attachid>200944</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-05-07 11:26:21 -0700</bug_when>
    <thetext>Created attachment 200944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885874</commentid>
    <comment_count>3</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-05-07 11:32:07 -0700</bug_when>
    <thetext>*** Bug 115051 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885876</commentid>
    <comment_count>4</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-05-07 11:32:24 -0700</bug_when>
    <thetext>*** Bug 114956 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200669</attachid>
            <date>2013-05-06 07:22:12 -0700</date>
            <delta_ts>2013-05-07 11:25:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115638-20130506162119.patch</filename>
            <type>text/plain</type>
            <size>36553</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NTk0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzllYWM4NzY4ODhiYzlhODI0NGFlNzNkZGJhNDU3MWQ3
MWM2Y2FmNy4uOTNmMDZhOWFiYTQxZDNkNGUxNTkxZGZkMjRhMTc2NGI2YmM2YWRlZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5
IEBACiAyMDEzLTA1LTA2ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAor
ICAgICAgICBbRGFzaGJvYXJkXSBSZW1vdmUgdGhlIHJlc3VsdHMgbG9hZGluZyBjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU2MzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIGNv
ZGUgdGhhdCBoYW5kbGVzIHRoZSBzY3JhcGluZyBvZiByZXN1bHRzIG9mZiB0aGUgYnVpbGRlcnMg
Zm9yIHNwZWNpZmljIHJldmlzaW9ucy4gVGhlIGNvZGUgaW50cm9kdWNlZAorICAgICAgICBtdWNo
IGNvbXBsZXhpdHkgaW50byB0aGUgZmxha2luZXNzIGRhc2hib2FyZCBhbmQgd2FzIHZlcnkgbXVj
aCBDaHJvbWl1bS1vcmllbnRlZCwgb25seSBhY2NvdW50aW5nIGZvciBDaHJvbWl1bQorICAgICAg
ICBwbGF0Zm9ybSBmYWxsYmFjayBwYXRocyBhbmQgc3Vic2VxdWVudGx5IG9ubHkgd29ya2VkIHdo
ZW4gdmlld2luZyByZXN1bHRzIGZyb20gdGhlIENocm9taXVtIGJ1aWxkZXJzLgorCisgICAgICAg
IEFwYXJ0IGZyb20gYWxsIHRoZSByZXN1bHRzIGxvYWRpbmctc3BlY2lmaWMgY29kZSBiZWluZyBy
ZW1vdmVkLCB0aGUgJ1Nob3cgcmVzdWx0cyBmb3IgV2ViS2l0IFtyZXZpc2lvbl0nIGxpbmsgaXMg
YWxzbworICAgICAgICByZW1vdmVkIGZyb20gdGhlIGJ1aWxkIGluZm9ybWF0aW9uIHBvcHVwLiBU
aGUgbGluaywgd2hlbiBjbGlja2VkLCB3b3VsZCBhY3RpdmF0ZSB0aGUgcmV2aXNpb24gcGFyYW1l
dGVyIGluc2lkZSB0aGUgZ2xvYmFsCisgICAgICAgIGNyb3NzLWRhc2hib2FyZCBzdGF0ZSwgd2hp
Y2ggc2hvdWxkIGNhdXNlIHRoZSByZXN1bHRzIHRvIGJlIGxvYWRlZCBhbmQgcHJlc2VudGVkLiBB
dCB0aGlzIHRpbWUgdGhpcyBkb2VzIG5vdCBoYXBwZW4gYW5kCisgICAgICAgIHRvIG15IGJlc3Qg
a25vd2xlZGdlIGRpZCBub3Qgd29yayBhdCBhbGwgZm9yIG5vbi1DaHJvbWl1bSBidWlsZGVycy4K
KworICAgICAgICBUaGUgaHRtbEZvckluZGl2aWR1YWxUZXN0T25BbGxCdWlsZGVyc1dpdGhSZXN1
bHRzTGlua3MgbWV0aG9kIGlzIHJlbW92ZWQgYXMgd2VsbCwgaXRzIHVzZSByZXBsYWNlZCBieSB0
aGUKKyAgICAgICAgaHRtbEZvckluZGl2aWR1YWxUZXN0T25BbGxCdWlsZGVycyBtZXRob2QuIFRo
ZSByZW1vdmVkIG1ldGhvZCB3YXMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgbGF0dGVyLCBhZGRpbmcg
YSBjb3VwbGUgb2YgbGlua3MKKyAgICAgICAgdG8gYWN0aXZhdGUgbG9hZGluZyBvZiByZXN1bHRz
IGFuZCBzcGVjaWZ5IHRoZSBkZXNpcmVkIHJldmlzaW9uIHRocm91Z2ggYW4gaW5wdXQgZmllbGQu
IFRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGFueW1vcmUKKyAgICAgICAgYXMgdGhlIGNvZGUgaXMg
YmVpbmQgcmVtb3ZlZC4KKworICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qczoKKyAgICAgICAgKHNob3dQb3B1cEZvckJ1aWxk
KToKKworMjAxMy0wNS0wNiAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisK
ICAgICAgICAgW0Rhc2hib2FyZF0gUmVtb3ZlIHRoZSBDaHJvbWl1bSBmYWxsYmFjayBwbGF0Zm9y
bXMgbGlzdGluZyBmcm9tIHRoZSBsZWdlbmQgcG9wdXAKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTYzNgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuanMgYi9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9h
cmQuanMKaW5kZXggMTJiZGNiMTQ3NWFjNDk4ZDYyMmJmYTM1MGJkODZhMjE5NmFhZjdjNC4uZWMw
MDQwNzM2OGVhN2YyOTliNzFiYzE3NmIzMzEzZWFmYjdiN2U0OSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpz
CisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNz
X2Rhc2hib2FyZC5qcwpAQCAtMTI0MiwyNCArMTI0Miw2IEBAIGZ1bmN0aW9uIHNob3dQb3B1cEZv
ckJ1aWxkKGUsIGJ1aWxkZXIsIGluZGV4LCBvcHRfdGVzdE5hbWUpCiAgICAgICAgICAgICAnV2Vi
S2l0JykgKwogICAgICAgICAnPC9saT4nOwogCi0gICAgaWYgKG1hc3Rlci5uYW1lID09IFdFQktJ
VF9CVUlMREVSX01BU1RFUikgewotICAgICAgICB2YXIgcmV2aXNpb24gPSBnX3Jlc3VsdHNCeUJ1
aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb25baW5kZXhdOwotICAgICAgICBodG1sICs9ICc8
bGk+PHNwYW4gY2xhc3M9bGluayBvbmNsaWNrPSJnX2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIo
XCdyZXZpc2lvblwnLCcgKwotICAgICAgICAgICAgcmV2aXNpb24gKyAnKSI+U2hvdyByZXN1bHRz
IGZvciBXZWJLaXQgcicgKyByZXZpc2lvbiArCi0gICAgICAgICAgICAnPC9zcGFuPjwvbGk+JzsK
LSAgICB9IGVsc2UgewotICAgICAgICBodG1sICs9ICc8bGk+JyArCi0gICAgICAgICAgICBjcmVh
dGVCbGFtZUxpc3RIVE1MKGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5jaHJvbWVSZXZpc2lv
biwgaW5kZXgsCi0gICAgICAgICAgICAgICAgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9j
aHJvbWl1bS9wZXJmL2Rhc2hib2FyZC91aS9jaGFuZ2Vsb2cuaHRtbD91cmw9L3RydW5rL3NyYyZt
b2RlPWh0bWwmcmFuZ2U9JywgJzonLCAnQ2hyb21lJykgKwotICAgICAgICAgICAgJzwvbGk+JzsK
LQotICAgICAgICB2YXIgY2hyb21lUmV2aXNpb24gPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRl
cl0uY2hyb21lUmV2aXNpb25baW5kZXhdOwotICAgICAgICBpZiAoY2hyb21lUmV2aXNpb24gJiYg
Z19oaXN0b3J5LmlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgewotICAgICAgICAgICAgaHRtbCArPSAn
PGxpPjxhIGhyZWY9IicgKyBURVNUX1JFU1VMVFNfQkFTRV9QQVRIICsgY3VycmVudEJ1aWxkZXJz
KClbYnVpbGRlcl0gKwotICAgICAgICAgICAgICAgICcvJyArIGNocm9tZVJldmlzaW9uICsgJy9s
YXlvdXQtdGVzdC1yZXN1bHRzLnppcCI+bGF5b3V0LXRlc3QtcmVzdWx0cy56aXA8L2E+PC9saT4n
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKCFnX2hpc3RvcnkuaXNMYXlvdXRUZXN0UmVz
dWx0cygpICYmIG9wdF90ZXN0TmFtZSAmJiBpc0ZhaWx1cmUoYnVpbGRlciwgb3B0X3Rlc3ROYW1l
LCBpbmRleCkpCiAgICAgICAgIGh0bWwgKz0gJzxsaT4nICsgbGlua0hUTUxUb09wZW5XaW5kb3co
YnVpbGRCYXNlUGF0aCArIHBhdGhUb0ZhaWx1cmVMb2cob3B0X3Rlc3ROYW1lKSwgJ0ZhaWx1cmUg
bG9nJykgKyAnPC9saT4nOwogCkBAIC0xNTYwLDMyICsxNTQyLDYgQEAgZnVuY3Rpb24gc29ydFRl
c3RzKHRlc3RzLCBjb2x1bW4sIG9yZGVyKQogICAgIHRlc3RzLnNvcnQoc29ydEZ1bmN0aW9uR2V0
dGVyKHJlc3VsdHNQcm9wZXJ0eSwgb3JkZXIgPT0gQkFDS1dBUkQpKTsKIH0KIAotLy8gU29ydHMg
YSBzcGFjZSBzZXBhcmF0ZWQgZXhwZWN0YXRpb25zIHN0cmluZyBpbiBhbHBoYW51bWVyaWMgb3Jk
ZXIuCi0vLyBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBleHBlY3RhdGlvbnMgc3RyaW5nLgotLy8g
QHJldHVybiB7c3RyaW5nfSBUaGUgc29ydGVkIHN0cmluZy4KLWZ1bmN0aW9uIHNvcnRFeHBlY3Rh
dGlvbnNTdHJpbmcoc3RyKQotewotICAgIHJldHVybiBzdHIuc3BsaXQoJyAnKS5zb3J0KCkuam9p
bignICcpOwotfQotCi1mdW5jdGlvbiBhZGRVcGRhdGUodGVzdHNOZWVkaW5nVXBkYXRlLCB0ZXN0
LCBidWlsZGVyTmFtZSwgbWlzc2luZywgZXh0cmEpCi17Ci0gICAgaWYgKCF0ZXN0c05lZWRpbmdV
cGRhdGVbdGVzdF0pCi0gICAgICAgIHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XSA9IHt9OwotCi0g
ICAgdmFyIGJ1aWxkSW5mbyA9IHBsYXRmb3JtQW5kQnVpbGRUeXBlKGJ1aWxkZXJOYW1lKTsKLSAg
ICB2YXIgYnVpbGRlciA9IGJ1aWxkSW5mby5wbGF0Zm9ybSArICcgJyArIGJ1aWxkSW5mby5idWls
ZFR5cGU7Ci0gICAgaWYgKCF0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF1bYnVpbGRlcl0pCi0gICAg
ICAgIHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWlsZGVyXSA9IHt9OwotCi0gICAgaWYgKG1p
c3NpbmcpCi0gICAgICAgIHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWlsZGVyXS5taXNzaW5n
ID0gc29ydEV4cGVjdGF0aW9uc1N0cmluZyhtaXNzaW5nKTsKLQotICAgIGlmIChleHRyYSkKLSAg
ICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJdLmV4dHJhID0gc29ydEV4cGVj
dGF0aW9uc1N0cmluZyhleHRyYSk7Ci19Ci0KLQogLy8gRnJvbSBhIHN0cmluZyBvZiBtb2RpZmll
cnMsIHJldHVybnMgYSBzdHJpbmcgb2YgbW9kaWZpZXJzIHRoYXQKIC8vIGFyZSBmb3IgcmVhbCBy
ZXN1bHQgY2hhbmdlcywgbGlrZSBTTE9XLCBhbmQgZXhjbHVkZXMgbW9kaWZpZXJzCiAvLyB0aGF0
IHNwZWNpZmljeSB0aGluZ3MgbGlrZSBwbGF0Zm9ybSwgYnVpbGRfdHlwZSwgYnVnLgpAQCAtMTYy
MSwxODIgKzE1NzcsNiBAQCBmdW5jdGlvbiByZWFsTW9kaWZpZXJzKG1vZGlmaWVyU3RyaW5nKQog
ICAgIH0pLmpvaW4oJyAnKTsKIH0KIAotZnVuY3Rpb24gZ2VuZXJhdGVQYWdlRm9yRXhwZWN0YXRp
b25zVXBkYXRlKCkKLXsKLSAgICAvLyBBbHdheXMgc2hvdyBhbGwgcnVucyB3aGVuIGF1dG8tdXBk
YXRpbmcgZXhwZWN0YXRpb25zLgotICAgIGlmICghZ19oaXN0b3J5LmNyb3NzRGFzaGJvYXJkU3Rh
dGUuc2hvd0FsbFJ1bnMpCi0gICAgICAgIGdfaGlzdG9yeS5zZXRRdWVyeVBhcmFtZXRlcignc2hv
d0FsbFJ1bnMnLCB0cnVlKTsKLQotICAgIHByb2Nlc3NUZXN0UnVuc0ZvckFsbEJ1aWxkZXJzKCk7
Ci0gICAgdmFyIHRlc3RzTmVlZGluZ1VwZGF0ZSA9IHt9OwotICAgIGZvciAodmFyIHRlc3QgaW4g
Z190ZXN0VG9SZXN1bHRzTWFwKSB7Ci0gICAgICAgIHZhciByZXN1bHRzID0gZ190ZXN0VG9SZXN1
bHRzTWFwW3Rlc3RdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgIHZhciB0aGlzUmVzdWx0ID0gcmVzdWx0c1tpXTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKCF0aGlzUmVzdWx0Lm1pc3NpbmcgJiYgIXRoaXNSZXN1
bHQuZXh0cmEpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHZhciBh
bGxQYXNzZXNPck5vRGF0YXMgPSB0aGlzUmVzdWx0LnJhd1Jlc3VsdHMuZmlsdGVyKGZ1bmN0aW9u
ICh4KSB7IHJldHVybiB4WzFdICE9ICJQIiAmJiB4WzFdICE9ICJOIjsgfSkubGVuZ3RoID09IDA7
Ci0KLSAgICAgICAgICAgIGlmIChhbGxQYXNzZXNPck5vRGF0YXMpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIGFkZFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIHRl
c3QsIHRoaXNSZXN1bHQuYnVpbGRlciwgdGhpc1Jlc3VsdC5taXNzaW5nLCB0aGlzUmVzdWx0LmV4
dHJhKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gY3VycmVu
dEJ1aWxkZXJzKCkpIHsKLSAgICAgICAgdmFyIHRlc3RzID0gZ19wZXJCdWlsZGVyV2l0aEV4cGVj
dGF0aW9uc0J1dE5vRmFpbHVyZXNbYnVpbGRlcl0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0ZXN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgLy8gQW55dGhpbmcgZXh0cmEgaW4g
dGhpcyBjYXNlIGlzIHdoYXQgaXMgbGlzdGVkIGluIGV4cGVjdGF0aW9ucwotICAgICAgICAgICAg
Ly8gcGx1cyBtb2RpZmllcnMgb3RoZXIgdGhhbiBidWcsIHBsYXRmb3JtLCBidWlsZCB0eXBlLgot
ICAgICAgICAgICAgdmFyIG1vZGlmaWVycyA9IHJlYWxNb2RpZmllcnModGVzdHNbaV0ubW9kaWZp
ZXJzKTsKLSAgICAgICAgICAgIHZhciBleHRyYXMgPSB0ZXN0c1tpXS5leHBlY3RhdGlvbnM7Ci0g
ICAgICAgICAgICBleHRyYXMgKz0gbW9kaWZpZXJzID8gJyAnICsgbW9kaWZpZXJzIDogJyc7Ci0g
ICAgICAgICAgICBhZGRVcGRhdGUodGVzdHNOZWVkaW5nVXBkYXRlLCB0ZXN0c1tpXS50ZXN0LCBi
dWlsZGVyLCBudWxsLCBleHRyYXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gR2V0IHRo
ZSBrZXlzIGluIGFscGhhYmV0aWNhbCBvcmRlciwgc28gaXQgaXMgZWFzeSB0byBwcm9jZXNzIGdy
b3VwcwotICAgIC8vIG9mIHRlc3RzLgotICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVzdHNO
ZWVkaW5nVXBkYXRlKS5zb3J0KCk7Ci0gICAgc2hvd1VwZGF0ZUluZm9Gb3JUZXN0KHRlc3RzTmVl
ZGluZ1VwZGF0ZSwga2V5cyk7Ci19Ci0KLS8vIFNob3cgdGhlIHRlc3QgcmVzdWx0cyBhbmQgdGhl
IGpzb24gZm9yIGRpZmZlcmluZyBleHBlY3RhdGlvbnMsIGFuZAotLy8gYWxsb3cgdGhlIHVzZXIg
dG8gaW5jbHVkZSBvciBleGNsdWRlIHRoaXMgdXBkYXRlLgotLy8KLS8vIEBwYXJhbSB7T2JqZWN0
fSB0ZXN0c05lZWRpbmdVcGRhdGUgVGVzdHMgdGhhdCBuZWVkIHVwZGF0aW5nLgotLy8gQHBhcmFt
IHtBcnJheS48c3RyaW5nPn0ga2V5cyBLZXlzIGludG8gdGhlIHRlc3ROZWVkaW5nVXBkYXRlIG9i
amVjdC4KLWZ1bmN0aW9uIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0ZXN0c05lZWRpbmdVcGRhdGUs
IGtleXMpCi17Ci0gICAgdmFyIHRlc3QgPSBrZXlzW2dfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLnVwZGF0ZUluZGV4XTsKLSAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICcnOwot
Ci0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBET00gY3JlYXRpb24gbGVzcyB2ZXJib3NlLgotICAg
IHZhciBpbmRleCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGluZGV4LnN0
eWxlLmNzc0Zsb2F0ID0gJ3JpZ2h0JzsKLSAgICBpbmRleC50ZXh0Q29udGVudCA9IChnX2hpc3Rv
cnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS51cGRhdGVJbmRleCArIDEpICsgJyBvZiAnICsga2V5
cy5sZW5ndGggKyAnIHRlc3RzJzsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGluZGV4
KTsKLQotICAgIHZhciBidXR0b25SZWdpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKLSAgICB2YXIgaW5jbHVkZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7
Ci0gICAgaW5jbHVkZUJ0bi50eXBlID0gJ2J1dHRvbic7Ci0gICAgaW5jbHVkZUJ0bi52YWx1ZSA9
ICdpbmNsdWRlIHNlbGVjdGVkJzsKLSAgICBpbmNsdWRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywgcGFydGlhbChoYW5kbGVVcGRhdGUsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyksIGZh
bHNlKTsKLSAgICBidXR0b25SZWdpb24uYXBwZW5kQ2hpbGQoaW5jbHVkZUJ0bik7Ci0KLSAgICB2
YXIgcHJldmlvdXNCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwotICAgIHBy
ZXZpb3VzQnRuLnR5cGUgPSAnYnV0dG9uJzsKLSAgICBwcmV2aW91c0J0bi52YWx1ZSA9ICdwcmV2
aW91cyc7Ci0gICAgcHJldmlvdXNCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLAotICAgICAg
ICBmdW5jdGlvbigpIHsKLSAgICAgICAgICBzZXRVcGRhdGVJbmRleChnX2hpc3RvcnkuZGFzaGJv
YXJkU3BlY2lmaWNTdGF0ZS51cGRhdGVJbmRleCAtIDEsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5
cyk7Ci0gICAgICAgIH0sCi0gICAgICAgIGZhbHNlKTsKLSAgICBidXR0b25SZWdpb24uYXBwZW5k
Q2hpbGQocHJldmlvdXNCdG4pOwotCi0gICAgdmFyIG5leHRCdG4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdpbnB1dCcpOwotICAgIG5leHRCdG4udHlwZSA9ICdidXR0b24nOwotICAgIG5leHRC
dG4udmFsdWUgPSAnbmV4dCc7Ci0gICAgbmV4dEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycs
IHBhcnRpYWwobmV4dFVwZGF0ZSwgdGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKSwgZmFsc2UpOwot
ICAgIGJ1dHRvblJlZ2lvbi5hcHBlbmRDaGlsZChuZXh0QnRuKTsKLQotICAgIHZhciBkb25lQnRu
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKLSAgICBkb25lQnRuLnR5cGUgPSAn
YnV0dG9uJzsKLSAgICBkb25lQnRuLnZhbHVlID0gJ2RvbmUnOwotICAgIGRvbmVCdG4uYWRkRXZl
bnRMaXN0ZW5lcignY2xpY2snLCBmaW5pc2hVcGRhdGUsIGZhbHNlKTsKLSAgICBidXR0b25SZWdp
b24uYXBwZW5kQ2hpbGQoZG9uZUJ0bik7Ci0KLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGJ1dHRvblJlZ2lvbik7Ci0KLSAgICB2YXIgdXBkYXRlcyA9IHRlc3RzTmVlZGluZ1VwZGF0ZVt0
ZXN0XTsKLSAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OwotICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gdXBkYXRlcykgewotICAgICAgICAvLyBDcmVhdGUg
YSBjaGVja2JveCBmb3IgZWFjaCBidWlsZGVyLgotICAgICAgICB2YXIgY2hlY2tib3hSZWdpb24g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgdmFyIGNoZWNrYm94ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKLSAgICAgICAgY2hlY2tib3gudHlwZSA9
ICdjaGVja2JveCc7Ci0gICAgICAgIGNoZWNrYm94LmlkID0gYnVpbGRlcjsKLSAgICAgICAgY2hl
Y2tib3guY2hlY2tlZCA9IHRydWU7Ci0gICAgICAgIGNoZWNrYm94UmVnaW9uLmFwcGVuZENoaWxk
KGNoZWNrYm94KTsKLSAgICAgICAgY2hlY2tib3hSZWdpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoYnVpbGRlciArICcgOiAnICsgSlNPTi5zdHJpbmdpZnkodXBkYXRlc1ti
dWlsZGVyXSkpKTsKLSAgICAgICAgY2hlY2tib3hlcy5hcHBlbmRDaGlsZChjaGVja2JveFJlZ2lv
bik7Ci0gICAgfQotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2hlY2tib3hlcyk7Ci0K
LSAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgZGl2Lmlu
bmVySFRNTCA9IGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnNXaXRoUmVzdWx0c0xp
bmtzKHRlc3QpOwotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKLSAgICBhcHBl
bmRFeHBlY3RhdGlvbnMoKTsKLX0KLQotCi0vLyBXaGVuIHRoZSB1c2VyIGhhcyBmaW5pc2hlZCBz
ZWxlY3RpbmcgZXhwZWN0YXRpb25zIHRvIHVwZGF0ZSwgcHJvdmlkZSB0aGVtCi0vLyB3aXRoIGpz
b24gdG8gY29weSBvdmVyLgotZnVuY3Rpb24gZmluaXNoVXBkYXRlKCkKLXsKLSAgICBkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCA9ICdUaGUgbmV4dCBzdGVwIGlzIHRvIGNvcHkgdGhlIG91dHB1dCBi
ZWxvdyAnICsKLSAgICAgICAgJ2ludG8gYSBsb2NhbCBmaWxlIGFuZCBzYXZlIGl0LiAgVGhlbiwg
cnVuPGJyPjxjb2RlPnB5dGhvbiAnICsKLSAgICAgICAgJ3NyYy93ZWJraXQvdG9vbHMvbGF5b3V0
X3Rlc3RzL3dlYmtpdHB5L2xheW91dF90ZXN0cy91cGRhdGVfZXhwZWN0YXQnICsKLSAgICAgICAg
J2lvbnNfZnJvbV9kYXNoYm9hcmQucHkgcGF0aC90by9sb2NhbC9maWxlPC9jb2RlPjxicj5pbiBv
cmRlciB0byAnICsKLSAgICAgICAgJ3VwZGF0ZSB0aGUgZXhwZWN0YXRpb25zIGZpbGUuPGJyPjx0
ZXh0YXJlYSBpZD0icmVzdWx0cyIgJysKLSAgICAgICAgJ3N0eWxlPSJ3aWR0aDo2MDBweDtoZWln
aHQ6NjAwcHg7Ij4gJyArCi0gICAgICAgIEpTT04uc3RyaW5naWZ5KGdfY29uZmlybWVkVGVzdHMp
ICsgJzwvdGV4dGFyZWE+JzsKLSAgICByZXN1bHRzLmZvY3VzKCk7Ci0gICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ1NlbGVjdEFsbCcpOwotfQotCi0vLyBIYW5kbGUgdXNlciBjbGljayBvbiAiaW5j
bHVkZSBzZWxlY3RlZCIgYnV0dG9uLgotLy8gSW5jbHVkZXMgdGhlIHRlc3RzIHRoYXQgYXJlIHNl
bGVjdGVkIGFuZCBleGNsdWRlIHRoZSByZXN0LgotLy8gQHBhcmFtIHtPYmplY3R9IHRlc3RzTmVl
ZGluZ1VwZGF0ZSBUZXN0cyB0aGF0IG5lZWQgdXBkYXRpbmcuCi0vLyBAcGFyYW0ge0FycmF5Ljxz
dHJpbmc+fSBrZXlzIEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUgb2JqZWN0LgotZnVu
Y3Rpb24gaGFuZGxlVXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cykKLXsKLSAgICB2YXIg
dGVzdCA9IGtleXNbZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudXBkYXRlSW5kZXhd
OwotICAgIHZhciB1cGRhdGVzID0gdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdOwotICAgIGZvciAo
dmFyIGJ1aWxkZXIgaW4gdXBkYXRlcykgewotICAgICAgICAvLyBBZGQgaW5jbHVkZWQgdGVzdHMs
IGFuZCBkZWxldGUgZXhjbHVkZWQgdGVzdHMgaWYKLSAgICAgICAgLy8gdGhleSB3ZXJlIHByZXZp
b3VzbHkgaW5jbHVkZWQuCi0gICAgICAgIGlmICgkKGJ1aWxkZXIpLmNoZWNrZWQpIHsKLSAgICAg
ICAgICAgIGlmICghZ19jb25maXJtZWRUZXN0c1t0ZXN0XSkKLSAgICAgICAgICAgICAgICBnX2Nv
bmZpcm1lZFRlc3RzW3Rlc3RdID0ge307Ci0gICAgICAgICAgICBnX2NvbmZpcm1lZFRlc3RzW3Rl
c3RdW2J1aWxkZXJdID0gdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJdOwotICAgICAg
ICB9IGVsc2UgaWYgKGdfY29uZmlybWVkVGVzdHNbdGVzdF0gJiYgZ19jb25maXJtZWRUZXN0c1t0
ZXN0XVtidWlsZGVyXSkgewotICAgICAgICAgICAgZGVsZXRlIGdfY29uZmlybWVkVGVzdHNbdGVz
dF1bYnVpbGRlcl07Ci0gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGdfY29uZmlybWVkVGVz
dHNbdGVzdF0pLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBkZWxldGUgZ19jb25maXJtZWRUZXN0
c1t0ZXN0XTsKLSAgICAgICAgfQotICAgIH0KLSAgICBuZXh0VXBkYXRlKHRlc3RzTmVlZGluZ1Vw
ZGF0ZSwga2V5cyk7Ci19Ci0KLQotLy8gTW92ZSB0byB0aGUgbmV4dCBpdGVtIHRvIHVwZGF0ZS4K
LS8vIEBwYXJhbSB7T2JqZWN0fSB0ZXN0c05lZWRpbmdVcGRhdGUgVGVzdHMgdGhhdCBuZWVkIHVw
ZGF0aW5nLgotLy8gQHBhcmFtIHtBcnJheS48c3RyaW5nPn0ga2V5cyBLZXlzIGludG8gdGhlIHRl
c3ROZWVkaW5nVXBkYXRlIG9iamVjdC4KLWZ1bmN0aW9uIG5leHRVcGRhdGUodGVzdHNOZWVkaW5n
VXBkYXRlLCBrZXlzKQotewotICAgIHNldFVwZGF0ZUluZGV4KGdfaGlzdG9yeS5kYXNoYm9hcmRT
cGVjaWZpY1N0YXRlLnVwZGF0ZUluZGV4ICsgMSwgdGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsK
LX0KLQotCi0vLyBBZHZhbmNlIHRoZSBpbmRleCB3ZSBhcmUgdXBkYXRpbmcgYXQuICBJZiB3ZSB3
YWxrIG92ZXIgdGhlIGVuZAotLy8gb3IgYmVnaW5uaW5nLCBqdXN0IGxvb3AuCi0vLyBAcGFyYW0g
e3N0cmluZ30gbmV3SW5kZXggVGhlIGluZGV4IGludG8gdGhlIGtleXMgdG8gbW92ZSB0by4KLS8v
IEBwYXJhbSB7T2JqZWN0fSB0ZXN0c05lZWRpbmdVcGRhdGUgVGVzdHMgdGhhdCBuZWVkIHVwZGF0
aW5nLgotLy8gQHBhcmFtIHtBcnJheS48c3RyaW5nPn0ga2V5cyBLZXlzIGludG8gdGhlIHRlc3RO
ZWVkaW5nVXBkYXRlIG9iamVjdC4KLWZ1bmN0aW9uIHNldFVwZGF0ZUluZGV4KG5ld0luZGV4LCB0
ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpCi17Ci0gICAgaWYgKG5ld0luZGV4ID09IC0xKQotICAg
ICAgICBuZXdJbmRleCA9IGtleXMubGVuZ3RoIC0gMTsKLSAgICBlbHNlIGlmIChuZXdJbmRleCA9
PSBrZXlzLmxlbmd0aCkKLSAgICAgICAgbmV3SW5kZXggPSAwOwotICAgIGdfaGlzdG9yeS5zZXRR
dWVyeVBhcmFtZXRlcigidXBkYXRlSW5kZXgiLCBuZXdJbmRleCk7Ci0gICAgc2hvd1VwZGF0ZUlu
Zm9Gb3JUZXN0KHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyk7Ci19Ci0KIGZ1bmN0aW9uIGh0bWxG
b3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnModGVzdCkKIHsKICAgICBwcm9jZXNzVGVzdFJ1
bnNGb3JBbGxCdWlsZGVycygpOwpAQCAtMTgyNyw1MzQgKzE2MDcsNiBAQCBmdW5jdGlvbiBodG1s
Rm9ySW5kaXZpZHVhbFRlc3RPbkFsbEJ1aWxkZXJzKHRlc3QpCiAgICAgcmV0dXJuIGh0bWxGb3JU
ZXN0VGFibGUoaHRtbCkgKyBza2lwcGVkQnVpbGRlcnNIdG1sOwogfQogCi1mdW5jdGlvbiBodG1s
Rm9ySW5kaXZpZHVhbFRlc3RPbkFsbEJ1aWxkZXJzV2l0aFJlc3VsdHNMaW5rcyh0ZXN0KQotewot
ICAgIHByb2Nlc3NUZXN0UnVuc0ZvckFsbEJ1aWxkZXJzKCk7Ci0KLSAgICB2YXIgdGVzdFJlc3Vs
dHMgPSBnX3Rlc3RUb1Jlc3VsdHNNYXBbdGVzdF07Ci0gICAgdmFyIGh0bWwgPSAnJzsKLSAgICBo
dG1sICs9IGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnModGVzdCk7Ci0KLSAgICBo
dG1sICs9ICc8ZGl2IGNsYXNzPWV4cGVjdGF0aW9ucyB0ZXN0PScgKyB0ZXN0ICsgJz48ZGl2Picg
KwotICAgICAgICBsaW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dFeHBlY3RhdGlvbnMnLCAncmVz
dWx0cycpCi0KLSAgICBpZiAoZ19oaXN0b3J5LmlzTGF5b3V0VGVzdFJlc3VsdHMoKSB8fCBnX2hp
c3RvcnkuaXNHUFVUZXN0UmVzdWx0cygpKSB7Ci0gICAgICAgIGlmIChnX2hpc3RvcnkuaXNMYXlv
dXRUZXN0UmVzdWx0cygpKQotICAgICAgICAgICAgaHRtbCArPSAnIHwgJyArIGxpbmtIVE1MVG9U
b2dnbGVTdGF0ZSgnc2hvd0xhcmdlRXhwZWN0YXRpb25zJywgJ2xhcmdlIHRodW1ibmFpbHMnKTsK
LSAgICAgICAgaWYgKHRlc3RSZXN1bHRzICYmIGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5tYXN0ZXIo
KS5uYW1lID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgewotICAgICAgICAgICAgdmFyIHJldmlz
aW9uID0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmV2aXNpb24gfHwgJyc7Ci0g
ICAgICAgICAgICBodG1sICs9ICc8Zm9ybSBvbnN1Ym1pdD0iZ19oaXN0b3J5LnNldFF1ZXJ5UGFy
YW1ldGVyKFwncmV2aXNpb25cJywgcmV2aXNpb24udmFsdWUpOycgKwotICAgICAgICAgICAgICAg
ICdyZXR1cm4gZmFsc2U7Ij5TaG93IHJlc3VsdHMgZm9yIFdlYktpdCByZXZpc2lvbjogJyArCi0g
ICAgICAgICAgICAgICAgJzxpbnB1dCBuYW1lPXJldmlzaW9uIHBsYWNlaG9sZGVyPSJlLmcuIDY1
NTQwIiB2YWx1ZT0iJyArIHJldmlzaW9uICsKLSAgICAgICAgICAgICAgICAnIiBpZD1yZXZpc2lv
bi1pbnB1dD48L2Zvcm0+JzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBodG1sICs9ICcg
fCA8Yj5Pbmx5IHNob3dzIGFjdHVhbCByZXN1bHRzL2RpZmZzIGZyb20gdGhlIG1vc3QgcmVjZW50
ICpmYWlsdXJlKiBvbiBlYWNoIGJvdC48L2I+JzsKLSAgICB9IGVsc2UgewotICAgICAgaHRtbCAr
PSAnIHwgPHNwYW4+UmVzdWx0cyBoZWlnaHQ6PGlucHV0ICcgKwotICAgICAgICAgICdvbmNoYW5n
ZT0iZ19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKFwncmVzdWx0c0hlaWdodFwnLHRoaXMudmFs
dWUpIiB2YWx1ZT0iJyArCi0gICAgICAgICAgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3Rh
dGUucmVzdWx0c0hlaWdodCArICciIHN0eWxlPSJ3aWR0aDoyLjVlbSI+cHg8L3NwYW4+JzsKLSAg
ICB9Ci0gICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JzsKLSAgICByZXR1cm4gaHRtbDsKLX0KLQot
ZnVuY3Rpb24gZ2V0RXhwZWN0YXRpb25zQ29udGFpbmVyKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMs
IHBhcmVudENvbnRhaW5lciwgZXhwZWN0YXRpb25zVHlwZSkKLXsKLSAgICBpZiAoIWV4cGVjdGF0
aW9uc0NvbnRhaW5lcnNbZXhwZWN0YXRpb25zVHlwZV0pIHsKLSAgICAgICAgdmFyIGNvbnRhaW5l
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICBjb250YWluZXIuY2xh
c3NOYW1lID0gJ2V4cGVjdGF0aW9ucy1jb250YWluZXInOwotICAgICAgICBwYXJlbnRDb250YWlu
ZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLSAgICAgICAgZXhwZWN0YXRpb25zQ29udGFpbmVy
c1tleHBlY3RhdGlvbnNUeXBlXSA9IGNvbnRhaW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIGV4cGVj
dGF0aW9uc0NvbnRhaW5lcnNbZXhwZWN0YXRpb25zVHlwZV07Ci19Ci0KLWZ1bmN0aW9uIGVuc3Vy
ZVRyYWlsaW5nU2xhc2gocGF0aCkKLXsKLSAgICBpZiAocGF0aC5tYXRjaCgvXC8kLykpCi0gICAg
ICAgIHJldHVybiBwYXRoOwotICAgIHJldHVybiBwYXRoICsgJy8nOwotfQotCi1mdW5jdGlvbiBt
YXliZUFkZFBuZ0NoZWNrc3VtKGV4cGVjdGF0aW9uRGl2LCBwbmdVcmwpCi17Ci0gICAgLy8gcG5n
VXJsIGdldHMgc2VydmVkIGZyb20gdGhlIGJyb3dzZXIgY2FjaGUgc2luY2Ugd2UganVzdCBsb2Fk
ZWQgaXQgaW4gYW4KLSAgICAvLyA8aW1nPiB0YWcuCi0gICAgbG9hZGVyLnJlcXVlc3QocG5nVXJs
LAotICAgICAgICBmdW5jdGlvbih4aHIpIHsKLSAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGZp
cnN0IDJrIG9mIHRoZSByZXNwb25zZSB0byBhIGJ5dGUgc3RyaW5nLgotICAgICAgICAgICAgdmFy
IGJ5dGVzID0geGhyLnJlc3BvbnNlVGV4dC5zdWJzdHJpbmcoMCwgMjA0OCk7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgYnl0ZXMubGVuZ3RoOyArK3Bvc2l0
aW9uKQotICAgICAgICAgICAgICAgIGJ5dGVzW3Bvc2l0aW9uXSA9IGJ5dGVzW3Bvc2l0aW9uXSAm
IDB4ZmY7Ci0KLSAgICAgICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tZW50LgotICAgICAgICAg
ICAgdmFyIGNvbW1lbnRLZXkgPSAndEVYdGNoZWNrc3VtXHgwMCc7Ci0gICAgICAgICAgICB2YXIg
Y2hlY2tzdW1Qb3NpdGlvbiA9IGJ5dGVzLmluZGV4T2YoY29tbWVudEtleSk7Ci0gICAgICAgICAg
ICBpZiAoY2hlY2tzdW1Qb3NpdGlvbiA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIHZhciBjaGVja3N1bSA9IGJ5dGVzLnN1YnN0cmluZyhjaGVja3N1bVBvc2l0
aW9uICsgY29tbWVudEtleS5sZW5ndGgsIGNoZWNrc3VtUG9zaXRpb24gKyBjb21tZW50S2V5Lmxl
bmd0aCArIDMyKTsKLSAgICAgICAgICAgIHZhciBjaGVja3N1bUNvbnRhaW5lciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICAgIGNoZWNrc3VtQ29udGFpbmVyLmlu
bmVyVGV4dCA9ICdFbWJlZGRlZCBjaGVja3N1bTogJyArIGNoZWNrc3VtOwotICAgICAgICAgICAg
Y2hlY2tzdW1Db250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdwbmdjaGVja3N1bScpOwot
ICAgICAgICAgICAgZXhwZWN0YXRpb25EaXYucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGVja3N1
bUNvbnRhaW5lcik7Ci0gICAgICAgIH0sCi0gICAgICAgIGZ1bmN0aW9uKHhocikge30sCi0gICAg
ICAgIHRydWUpOwotfQotCi0vLyBBZGRzIGEgc3BlY2lmaWMgZXhwZWN0YXRpb24uIElmIGl0J3Mg
YW4gaW1hZ2UsIGl0J3Mgb25seSBhZGRlZCBvbiB0aGUKLS8vIGltYWdlJ3Mgb25sb2FkIGhhbmRs
ZXIuIElmIGl0J3MgYSB0ZXh0IGZpbGUsIHRoZW4gYSBzY3JpcHQgdGFnIGlzIGFwcGVuZGVkCi0v
LyBhcyBhIGhhY2sgdG8gc2VlIGlmIHRoZSBmaWxlIDQwNHMgKG5lY2Vzc2FyeSBzaW5jZSBpdCdz
IGNyb3NzLWRvbWFpbikuCi0vLyBPbmNlIGFsbCB0aGUgZXhwZWN0YXRpb25zIGZvciBhIHNwZWNp
ZmljIHR5cGUgaGF2ZSBsb2FkZWQgb3IgZXJyb3JlZAotLy8gKGUuZy4gYWxsIHRoZSB0ZXh0IHJl
c3VsdHMpLCB0aGVuIHdlIGdvIHRocm91Z2ggYW5kIGlkZW50aWZ5IHdoaWNoIHBsYXRmb3JtCi0v
LyB1c2VzIHdoaWNoIGV4cGVjdGF0aW9uLgotLy8KLS8vIEBwYXJhbSB7T2JqZWN0fSBleHBlY3Rh
dGlvbnNDb250YWluZXJzIE1hcCBmcm9tIGV4cGVjdGF0aW9ucyB0eXBlIHRvCi0vLyAgICAgY29u
dGFpbmVyIERJVi4KLS8vIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50Q29udGFpbmVyIENvbnRhaW5l
ciBlbGVtZW50IGZvcgotLy8gICAgIGV4cGVjdGF0aW9uc0NvbnRhaW5lciBkaXZzLgotLy8gQHBh
cmFtIHtzdHJpbmd9IHBsYXRmb3JtIFBsYXRmb3JtIHN0cmluZy4gRW1wdHkgc3RyaW5nIGZvciBu
b24tcGxhdGZvcm0KLS8vICAgICBzcGVjaWZpYyBleHBlY3RhdGlvbnMuCi0vLyBAcGFyYW0ge3N0
cmluZ30gcGF0aCBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBleHBlY3RhdGlvbi4KLS8vIEBwYXJhbSB7
c3RyaW5nfSBiYXNlIEJhc2UgcGF0aCBmb3IgdGhlIGV4cGVjdGF0aW9uIFVSTC4KLS8vIEBwYXJh
bSB7c3RyaW5nfSBvcHRfYnVpbGRlciBCdWlsZGVyIHdob3NlIGFjdHVhbCByZXN1bHRzIHRoaXMg
ZXhwZWN0YXRpb24KLS8vICAgICBwb2ludHMgdG8uCi0vLyBAcGFyYW0ge3N0cmluZ30gb3B0X3N1
aXRlICJ2aXJ0dWFsIHN1aXRlIiB0aGF0IHRoZSB0ZXN0IGJlbG9uZ3MgdG8sIGlmIGFueS4KLWZ1
bmN0aW9uIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBwYXJlbnRD
b250YWluZXIsIHBsYXRmb3JtLCBwYXRoLCBiYXNlLCBvcHRfYnVpbGRlciwgb3B0X3N1aXRlKQot
ewotICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKQotICAgIHZhciBmaWxlRXh0ZW5zaW9u
ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07Ci0gICAgaWYgKGZpbGVFeHRlbnNpb24gPT0gJ2h0
bWwnKQotICAgICAgICBmaWxlRXh0ZW5zaW9uID0gJ3R4dCc7Ci0gICAgCi0gICAgdmFyIGNvbnRh
aW5lciA9IGdldEV4cGVjdGF0aW9uc0NvbnRhaW5lcihleHBlY3RhdGlvbnNDb250YWluZXJzLCBw
YXJlbnRDb250YWluZXIsIGZpbGVFeHRlbnNpb24pOwotICAgIHZhciBpc0ltYWdlID0gcGF0aC5t
YXRjaCgvXC5wbmckLyk7Ci0KLSAgICAvLyBGSVhNRTogU3RvcCB1c2luZyBzY3JpcHQgdGFncyBv
bmNlIGFsbCB0aGUgcGxhY2VzIHdlIHB1bGwgZnJvbSBzdXBwb3J0IENPUlMuCi0gICAgdmFyIHBs
YXRmb3JtUGFydCA9IHBsYXRmb3JtID8gZW5zdXJlVHJhaWxpbmdTbGFzaChwbGF0Zm9ybSkgOiAn
JzsKLSAgICB2YXIgc3VpdGVQYXJ0ID0gb3B0X3N1aXRlID8gZW5zdXJlVHJhaWxpbmdTbGFzaChv
cHRfc3VpdGUpIDogJyc7Ci0KLSAgICB2YXIgY2hpbGRDb250YWluZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzcGFuJyk7Ci0gICAgY2hpbGRDb250YWluZXIuY2xhc3NOYW1lID0gJ3VubG9h
ZGVkJzsKLQotICAgIHZhciBhcHBlbmRFeHBlY3RhdGlvbnNJdGVtID0gZnVuY3Rpb24oaXRlbSkg
ewotICAgICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChleHBlY3RhdGlvbnNUaXRsZShw
bGF0Zm9ybVBhcnQgKyBzdWl0ZVBhcnQsIHBhdGgsIG9wdF9idWlsZGVyKSk7Ci0gICAgICAgIGNo
aWxkQ29udGFpbmVyLmNsYXNzTmFtZSA9ICdleHBlY3RhdGlvbnMtaXRlbSc7Ci0gICAgICAgIGl0
ZW0uY2xhc3NOYW1lID0gJ2V4cGVjdGF0aW9uICcgKyBmaWxlRXh0ZW5zaW9uOwotICAgICAgICBp
ZiAoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hvd0xhcmdlRXhwZWN0YXRpb25z
KQotICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUgKz0gJyBsYXJnZSc7Ci0gICAgICAgIGNoaWxk
Q29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW0pOwotICAgICAgICBoYW5kbGVGaW5pc2hlZExvYWRp
bmdFeHBlY3RhdGlvbnMoY29udGFpbmVyKTsKLSAgICB9OwotCi0gICAgdmFyIHVybCA9IGJhc2Ug
KyBwbGF0Zm9ybVBhcnQgKyBwYXRoOwotICAgIGlmIChpc0ltYWdlIHx8ICFzdHJpbmcuc3RhcnRz
V2l0aChiYXNlLCAnaHR0cDovL3N2bi53ZWJraXQub3JnJykpIHsKLSAgICAgICAgdmFyIGR1bW15
Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXNJbWFnZSA/ICdpbWcnIDogJ3NjcmlwdCcp
OwotICAgICAgICBkdW1teU5vZGUuc3JjID0gdXJsOwotICAgICAgICBkdW1teU5vZGUub25sb2Fk
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgaXRlbTsKLSAgICAgICAgICAgIGlmIChp
c0ltYWdlKSB7Ci0gICAgICAgICAgICAgICAgaXRlbSA9IGR1bW15Tm9kZTsKLSAgICAgICAgICAg
ICAgICBpZiAoc3RyaW5nLnN0YXJ0c1dpdGgoYmFzZSwgJ2h0dHA6Ly9zdm4ud2Via2l0Lm9yZycp
KQotICAgICAgICAgICAgICAgICAgICBtYXliZUFkZFBuZ0NoZWNrc3VtKGl0ZW0sIHVybCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdpZnJhbWUnKTsKLSAgICAgICAgICAgICAgICBpdGVtLnNyYyA9IHVybDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZEV4cGVjdGF0aW9uc0l0ZW0oaXRlbSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZHVtbXlOb2RlLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIGNoaWxkQ29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGRDb250YWlu
ZXIpOwotICAgICAgICAgICAgaGFuZGxlRmluaXNoZWRMb2FkaW5nRXhwZWN0YXRpb25zKGNvbnRh
aW5lcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBcHBlbmQgc2NyaXB0IGVsZW1lbnRzIG5v
dyBzbyB0aGF0IHRoZXkgbG9hZC4gSW1hZ2VzIGxvYWQgd2l0aG91dCBiZWluZwotICAgICAgICAv
LyBhcHBlbmRlZCB0byB0aGUgRE9NLgotICAgICAgICBpZiAoIWlzSW1hZ2UpCi0gICAgICAgICAg
ICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChkdW1teU5vZGUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGxvYWRlci5yZXF1ZXN0KHVybCwKLSAgICAgICAgICAgIGZ1bmN0aW9uKHhocikgewot
ICAgICAgICAgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7
Ci0gICAgICAgICAgICAgICAgaXRlbS5pbm5lclRleHQgPSB4aHIucmVzcG9uc2VUZXh0OwotICAg
ICAgICAgICAgICAgIGFwcGVuZEV4cGVjdGF0aW9uc0l0ZW0oaXRlbSk7Ci0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgZnVuY3Rpb24oeGhyKSB7LyogRG8gbm90aGluZyBvbiBlcnJvcnMgc2lu
Y2UgdGhleSdyZSBleHBlY3RlZCAqL30pOwotICAgIH0KLQotICAgIGNvbnRhaW5lci5hcHBlbmRD
aGlsZChjaGlsZENvbnRhaW5lcik7Ci19Ci0KLQotLy8gSWRlbnRpZmllcyB3aGljaCBleHBlY3Rh
dGlvbnMgYXJlIHVzZWQgb24gd2hpY2ggcGxhdGZvcm0gb25jZSBhbGwgdGhlCi0vLyBleHBlY3Rh
dGlvbnMgb2YgYSBnaXZlbiB0eXBlIGhhdmUgbG9hZGVkIChlLmcuIHRoZSBjb250YWluZXIgZm9y
IHBuZwotLy8gZXhwZWN0YXRpb25zIGZvciB0aGlzIHRlc3QgaGFkIG5vIGNoaWxkIGVsZW1lbnRz
IHdpdGggdGhlIGNsYXNzCi0vLyAidW5sb2FkZWQiKS4KLS8vCi0vLyBAcGFyYW0ge3N0cmluZ30g
Y29udGFpbmVyIEVsZW1lbnQgY29udGFpbmluZyB0aGUgZXhwZWN0YXRpb25zIGZvciBhIGdpdmVu
Ci0vLyAgICAgdGVzdCBhbmQgYSBnaXZlbiB0eXBlIChlLmcuIHBuZykuCi1mdW5jdGlvbiBoYW5k
bGVGaW5pc2hlZExvYWRpbmdFeHBlY3RhdGlvbnMoY29udGFpbmVyKQotewotICAgIGlmIChjb250
YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndW5sb2FkZWQnKS5sZW5ndGgpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHZhciB0aXRsZXMgPSBjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnZXhwZWN0YXRpb25zLXRpdGxlJyk7Ci0gICAgZm9yICh2YXIgcGxhdGZvcm0gaW4gZ19m
YWxsYmFja3NNYXApIHsKLSAgICAgICAgdmFyIGZhbGxiYWNrcyA9IGdfZmFsbGJhY2tzTWFwW3Bs
YXRmb3JtXTsKLSAgICAgICAgdmFyIHdpbm5lciA9IG51bGw7Ci0gICAgICAgIHZhciB3aW5uaW5n
SW5kZXggPSAtMTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aXRsZXMubGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgIHZhciB0aXRsZSA9IHRpdGxlc1tpXTsKLQotICAgICAgICAgICAg
aWYgKCF3aW5uZXIgJiYgdGl0bGUucGxhdGZvcm0gPT0gIiIpIHsKLSAgICAgICAgICAgICAgICB3
aW5uZXIgPSB0aXRsZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdmFyIHJhd1BsYXRmb3JtID0gdGl0bGUucGxhdGZvcm0gJiYgdGl0bGUu
cGxhdGZvcm0ucmVwbGFjZSgncGxhdGZvcm0vJywgJycpOwotICAgICAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCBmYWxsYmFja3MubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICBpZiAo
KHdpbm5pbmdJbmRleCA9PSAtMSB8fCB3aW5uaW5nSW5kZXggPiBqKSAmJiByYXdQbGF0Zm9ybSA9
PSBmYWxsYmFja3Nbal0pIHsKLSAgICAgICAgICAgICAgICAgICAgd2lubmluZ0luZGV4ID0gajsK
LSAgICAgICAgICAgICAgICAgICAgd2lubmVyID0gdGl0bGU7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAod2lubmVyKQotICAgICAgICAgICAgd2lubmVyLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoJ3BsYXRmb3JtcycpWzBdLmlubmVySFRNTCArPSAnPGRpdiBjbGFzcz11c2VkLXBsYXRmb3Jt
PicgKyBwbGF0Zm9ybSArICc8L2Rpdj4nOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnNvbGUubG9nKCdObyBleHBlY3RhdGlvbnMgaWRlbnRpZmllZCBmb3IgdGhpcyB0ZXN0LiBUaGlz
IG1lYW5zICcgKwotICAgICAgICAgICAgICAgICd0aGVyZSBpcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUg
ZGFzaGJvYXJkIGZvciB3aGljaCBleHBlY3RhdGlvbnMgYSAnICsKLSAgICAgICAgICAgICAgICAn
cGxhdGZvcm0gdXNlcyBvciB0cmFjLndlYmtpdC5vcmcvc3JjLmNocm9taXVtLm9yZyBpcyBnaXZp
bmcgNVhYcy4nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnNvbGlkYXRlVXNlZFBsYXRm
b3Jtcyhjb250YWluZXIpOwotfQotCi0vLyBDb25zb2xpZGF0ZSBwbGF0Zm9ybXMgd2hlbiBhbGwg
c3ViLXBsYXRmb3JtcyBmb3IgYSBnaXZlbiBwbGF0Zm9ybSBhcmUgcmVwcmVzZW50ZWQuCi0vLyBl
LmcuLCBpZiBhbGwgb2YgdGhlIFdJTi0gcGxhdGZvcm1zIGFyZSB0aGVyZSwgcmVwbGFjZSB0aGVt
IHdpdGgganVzdCBXSU4uCi1mdW5jdGlvbiBjb25zb2xpZGF0ZVVzZWRQbGF0Zm9ybXMoY29udGFp
bmVyKQotewotICAgIHZhciBhbGxQbGF0Zm9ybXMgPSBPYmplY3Qua2V5cyhnX2ZhbGxiYWNrc01h
cCk7Ci0KLSAgICB2YXIgcGxhdGZvcm1FbGVtZW50cyA9IGNvbnRhaW5lci5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCdwbGF0Zm9ybXMnKTsKLSAgICBmb3IgKHZhciBpID0gMCwgcGxhdGZvcm1zTGVu
Z3RoID0gcGxhdGZvcm1FbGVtZW50cy5sZW5ndGg7IGkgPCBwbGF0Zm9ybXNMZW5ndGg7IGkrKykg
ewotICAgICAgICB2YXIgdXNlZFBsYXRmb3JtcyA9IHBsYXRmb3JtRWxlbWVudHNbaV0uZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSgndXNlZC1wbGF0Zm9ybScpOwotICAgICAgICBpZiAoIXVzZWRQbGF0
Zm9ybXMubGVuZ3RoKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdmFyIHBsYXRm
b3JtcyA9IHt9OwotICAgICAgICBwbGF0Zm9ybXNbJ01BQyddID0ge307Ci0gICAgICAgIHBsYXRm
b3Jtc1snV0lOJ10gPSB7fTsKLSAgICAgICAgcGxhdGZvcm1zWydMSU5VWCddID0ge307Ci0gICAg
ICAgIGFsbFBsYXRmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uKHBsYXRmb3JtKSB7Ci0gICAgICAgICAg
ICBpZiAoc3RyaW5nLnN0YXJ0c1dpdGgocGxhdGZvcm0sICdNQUMnKSkKLSAgICAgICAgICAgICAg
ICBwbGF0Zm9ybXNbJ01BQyddW3BsYXRmb3JtXSA9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChz
dHJpbmcuc3RhcnRzV2l0aChwbGF0Zm9ybSwgJ1dJTicpKQotICAgICAgICAgICAgICAgIHBsYXRm
b3Jtc1snV0lOJ11bcGxhdGZvcm1dID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZy5z
dGFydHNXaXRoKHBsYXRmb3JtLCAnTElOVVgnKSkKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybXNb
J0xJTlVYJ11bcGxhdGZvcm1dID0gMTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZm9yICh2YXIg
aiA9IDAsIHVzZWRQbGF0Zm9ybXNMZW5ndGggPSB1c2VkUGxhdGZvcm1zLmxlbmd0aDsgaiA8IHVz
ZWRQbGF0Zm9ybXNMZW5ndGg7IGorKykgewotICAgICAgICAgICAgZm9yICh2YXIgcGxhdGZvcm0g
aW4gcGxhdGZvcm1zKQotICAgICAgICAgICAgICAgIGRlbGV0ZSBwbGF0Zm9ybXNbcGxhdGZvcm1d
W3VzZWRQbGF0Zm9ybXNbal0udGV4dENvbnRlbnRdOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
ICh2YXIgcGxhdGZvcm0gaW4gcGxhdGZvcm1zKSB7Ci0gICAgICAgICAgICBpZiAoIU9iamVjdC5r
ZXlzKHBsYXRmb3Jtc1twbGF0Zm9ybV0pLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHZhciBu
b2Rlc1RvUmVtb3ZlID0gW107Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIHVzZWRQ
bGF0Zm9ybXNMZW5ndGggPSB1c2VkUGxhdGZvcm1zLmxlbmd0aDsgaiA8IHVzZWRQbGF0Zm9ybXNM
ZW5ndGg7IGorKykgewotICAgICAgICAgICAgICAgICAgICB2YXIgdXNlZFBsYXRmb3JtID0gdXNl
ZFBsYXRmb3Jtc1tqXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZy5zdGFydHNXaXRo
KHVzZWRQbGF0Zm9ybS50ZXh0Q29udGVudCwgcGxhdGZvcm0pKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZXNUb1JlbW92ZS5wdXNoKHVzZWRQbGF0Zm9ybSk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1l
bnQpIHsgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpOyB9KTsKLSAgICAg
ICAgICAgICAgICBwbGF0Zm9ybUVsZW1lbnRzW2ldLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJC
ZWdpbicsICc8ZGl2IGNsYXNzPXVzZWQtcGxhdGZvcm0+JyArIHBsYXRmb3JtICsgJzwvZGl2Picp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1mdW5jdGlvbiBhZGRFeHBl
Y3RhdGlvbnMoZXhwZWN0YXRpb25zQ29udGFpbmVycywgY29udGFpbmVyLCBiYXNlLAotICAgIHBs
YXRmb3JtLCB0ZXh0LCBwbmcsIHJlZnRlc3RfaHRtbF9maWxlLCByZWZ0ZXN0X21pc21hdGNoX2h0
bWxfZmlsZSwgc3VpdGUpCi17Ci0gICAgdmFyIGJ1aWxkZXIgPSAnJzsKLSAgICBhZGRFeHBlY3Rh
dGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgY29udGFpbmVyLCBwbGF0Zm9ybSwgdGV4
dCwgYmFzZSwgYnVpbGRlciwgc3VpdGUpOwotICAgIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3Rh
dGlvbnNDb250YWluZXJzLCBjb250YWluZXIsIHBsYXRmb3JtLCBwbmcsIGJhc2UsIGJ1aWxkZXIs
IHN1aXRlKTsKLSAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywg
Y29udGFpbmVyLCBwbGF0Zm9ybSwgcmVmdGVzdF9odG1sX2ZpbGUsIGJhc2UsIGJ1aWxkZXIsIHN1
aXRlKTsKLSAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgY29u
dGFpbmVyLCBwbGF0Zm9ybSwgcmVmdGVzdF9taXNtYXRjaF9odG1sX2ZpbGUsIGJhc2UsIGJ1aWxk
ZXIsIHN1aXRlKTsKLX0KLQotZnVuY3Rpb24gZXhwZWN0YXRpb25zVGl0bGUocGxhdGZvcm0sIHBh
dGgsIGJ1aWxkZXIpCi17Ci0gICAgdmFyIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2gzJyk7Ci0gICAgaGVhZGVyLmNsYXNzTmFtZSA9ICdleHBlY3RhdGlvbnMtdGl0bGUnOwotCi0g
ICAgdmFyIGlubmVySFRNTDsKLSAgICBpZiAoYnVpbGRlcikgewotICAgICAgICB2YXIgcmVzdWx0
c1R5cGU7Ci0gICAgICAgIGlmIChzdHJpbmcuZW5kc1dpdGgocGF0aCwgJy1jcmFzaC1sb2cudHh0
JykpCi0gICAgICAgICAgICByZXN1bHRzVHlwZSA9ICdTVEFDS1RSQUNFJzsKLSAgICAgICAgZWxz
ZSBpZiAoc3RyaW5nLmVuZHNXaXRoKHBhdGgsICctYWN0dWFsLnR4dCcpIHx8IHN0cmluZy5lbmRz
V2l0aChwYXRoLCAnLWFjdHVhbC5wbmcnKSkKLSAgICAgICAgICAgIHJlc3VsdHNUeXBlID0gJ0FD
VFVBTCBSRVNVTFRTJzsKLSAgICAgICAgZWxzZSBpZiAoc3RyaW5nLmVuZHNXaXRoKHBhdGgsICct
d2RpZmYuaHRtbCcpKQotICAgICAgICAgICAgcmVzdWx0c1R5cGUgPSAnV0RJRkYnOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXN1bHRzVHlwZSA9ICdESUZGJzsKLQotICAgICAgICBpbm5l
ckhUTUwgPSByZXN1bHRzVHlwZSArICc6ICcgKyBidWlsZGVyOwotICAgIH0gZWxzZSBpZiAocGxh
dGZvcm0gPT09ICIiKSB7Ci0gICAgICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTsKLSAg
ICAgICAgaW5uZXJIVE1MID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGlubmVySFRNTCA9IHBsYXRmb3JtIHx8IHBhdGg7Ci0KLSAgICBoZWFkZXIuaW5uZXJI
VE1MID0gJzxkaXYgY2xhc3M9dGl0bGU+JyArIGlubmVySFRNTCArCi0gICAgICAgICc8L2Rpdj48
ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij4mbmJzcDs8L2Rpdj4nICsKLSAgICAgICAgJzxkaXYgY2xh
c3M9cGxhdGZvcm1zIHN0eWxlPSJmbG9hdDpyaWdodCI+PC9kaXY+JzsKLSAgICBoZWFkZXIucGxh
dGZvcm0gPSBwbGF0Zm9ybTsKLSAgICByZXR1cm4gaGVhZGVyOwotfQotCi1mdW5jdGlvbiBsb2Fk
RXhwZWN0YXRpb25zKGV4cGVjdGF0aW9uc0NvbnRhaW5lcikKLXsKLSAgICB2YXIgdGVzdCA9IGV4
cGVjdGF0aW9uc0NvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ3Rlc3QnKTsKLSAgICBpZiAoZ19oaXN0
b3J5LmlzTGF5b3V0VGVzdFJlc3VsdHMoKSkKLSAgICAgICAgbG9hZEV4cGVjdGF0aW9uc0xheW91
dFRlc3RzKHRlc3QsIGV4cGVjdGF0aW9uc0NvbnRhaW5lcik7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IHZhciByZXN1bHRzID0gZ190ZXN0VG9SZXN1bHRzTWFwW3Rlc3RdOwotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBpZiAoZ19oaXN0
b3J5LmlzR1BVVGVzdFJlc3VsdHMoKSkKLSAgICAgICAgICAgICAgICBsb2FkR1BVUmVzdWx0c0Zv
ckJ1aWxkZXIocmVzdWx0c1tpXS5idWlsZGVyLCB0ZXN0LCBleHBlY3RhdGlvbnNDb250YWluZXIp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxvYWROb25XZWJLaXRSZXN1bHRz
Rm9yQnVpbGRlcihyZXN1bHRzW2ldLmJ1aWxkZXIsIHRlc3QsIGV4cGVjdGF0aW9uc0NvbnRhaW5l
cik7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBncHVSZXN1bHRzUGF0aChjaHJvbWVSZXZpc2lvbiwg
YnVpbGRlcikKLXsKLSAgcmV0dXJuIGNocm9tZVJldmlzaW9uICsgJ18nICsgYnVpbGRlci5yZXBs
YWNlKC9bXkEtWmEtejAtOV0rL2csICdfJyk7Ci19Ci0KLWZ1bmN0aW9uIGxvYWRHUFVSZXN1bHRz
Rm9yQnVpbGRlcihidWlsZGVyLCB0ZXN0LCBleHBlY3RhdGlvbnNDb250YWluZXIpCi17Ci0gICAg
dmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGNvbnRh
aW5lci5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWNvbnRhaW5lcic7Ci0gICAgY29udGFpbmVy
LmlubmVySFRNTCA9ICc8ZGl2PjxiPicgKyBidWlsZGVyICsgJzwvYj48L2Rpdj4nOwotICAgIGV4
cGVjdGF0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpOwotCi0gICAgdmFyIGZh
aWx1cmVJbmRleCA9IGluZGV4ZXNGb3JGYWlsdXJlcyhidWlsZGVyLCB0ZXN0KVswXTsKLQotICAg
IHZhciBidWlsZE51bWJlciA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJl
cnNbZmFpbHVyZUluZGV4XTsKLSAgICB2YXIgcGF0aFRvTG9nID0gYnVpbGRlck1hc3RlcihidWls
ZGVyKS5sb2dQYXRoKGJ1aWxkZXIsIGJ1aWxkTnVtYmVyKSArIHBhdGhUb0ZhaWx1cmVMb2codGVz
dCk7Ci0KLSAgICB2YXIgY2hyb21lUmV2aXNpb24gPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRl
cl0uY2hyb21lUmV2aXNpb25bZmFpbHVyZUluZGV4XTsKLSAgICB2YXIgcmVzdWx0c1VybCA9IEdQ
VV9SRVNVTFRTX0JBU0VfUEFUSCArIGdwdVJlc3VsdHNQYXRoKGNocm9tZVJldmlzaW9uLCBidWls
ZGVyKTsKLSAgICB2YXIgZmlsZW5hbWUgPSB0ZXN0LnNwbGl0KC9cLi8pWzFdICsgJy5wbmcnOwot
Ci0gICAgYXBwZW5kTm9uV2ViS2l0UmVzdWx0cyhjb250YWluZXIsIHBhdGhUb0xvZywgJ25vbi13
ZWJraXQtcmVzdWx0cycpOwotICAgIGFwcGVuZE5vbldlYktpdFJlc3VsdHMoY29udGFpbmVyLCBy
ZXN1bHRzVXJsICsgJy9nZW4vJyArIGZpbGVuYW1lLCAnZ3B1LXRlc3QtcmVzdWx0cycsICdHZW5l
cmF0ZWQnKTsKLSAgICBhcHBlbmROb25XZWJLaXRSZXN1bHRzKGNvbnRhaW5lciwgcmVzdWx0c1Vy
bCArICcvcmVmLycgKyBmaWxlbmFtZSwgJ2dwdS10ZXN0LXJlc3VsdHMnLCAnUmVmZXJlbmNlJyk7
Ci0gICAgYXBwZW5kTm9uV2ViS2l0UmVzdWx0cyhjb250YWluZXIsIHJlc3VsdHNVcmwgKyAnL2Rp
ZmYvJyArIGZpbGVuYW1lLCAnZ3B1LXRlc3QtcmVzdWx0cycsICdEaWZmJyk7Ci19Ci0KLWZ1bmN0
aW9uIGxvYWROb25XZWJLaXRSZXN1bHRzRm9yQnVpbGRlcihidWlsZGVyLCB0ZXN0LCBleHBlY3Rh
dGlvbnNDb250YWluZXIpCi17Ci0gICAgdmFyIGZhaWx1cmVJbmRleGVzID0gaW5kZXhlc0ZvckZh
aWx1cmVzKGJ1aWxkZXIsIHRlc3QpOwotICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKLSAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXY+PGI+JyAr
IGJ1aWxkZXIgKyAnPC9iPjwvZGl2Pic7Ci0gICAgZXhwZWN0YXRpb25zQ29udGFpbmVyLmFwcGVu
ZENoaWxkKGNvbnRhaW5lcik7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWlsdXJlSW5kZXhl
cy5sZW5ndGg7IGkrKykgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHNlZW0gdG8g
d29yayBhbnltb3JlLiBEaWQgdGhlIHBhdGhzIGNoYW5nZT8KLSAgICAgICAgLy8gT25jZSB0aGF0
J3MgcmVzb2x2ZWQsIHNlZSBpZiB3ZSBuZWVkIHRvIHRyeSBlYWNoIEdURVNUX01PRElGSUVSUyBw
cmVmaXggYXMgd2VsbC4KLSAgICAgICAgdmFyIGJ1aWxkTnVtYmVyID0gZ19yZXN1bHRzQnlCdWls
ZGVyW2J1aWxkZXJdLmJ1aWxkTnVtYmVyc1tmYWlsdXJlSW5kZXhlc1tpXV07Ci0gICAgICAgIHZh
ciBwYXRoVG9Mb2cgPSBidWlsZGVyTWFzdGVyKGJ1aWxkZXIpLmxvZ1BhdGgoYnVpbGRlciwgYnVp
bGROdW1iZXIpICsgcGF0aFRvRmFpbHVyZUxvZyh0ZXN0KTsKLSAgICAgICAgYXBwZW5kTm9uV2Vi
S2l0UmVzdWx0cyhjb250YWluZXIsIHBhdGhUb0xvZywgJ25vbi13ZWJraXQtcmVzdWx0cycpOwot
ICAgIH0KLX0KLQotZnVuY3Rpb24gYXBwZW5kTm9uV2ViS2l0UmVzdWx0cyhjb250YWluZXIsIHVy
bCwgaXRlbUNsYXNzTmFtZSwgb3B0X3RpdGxlKQotewotICAgIC8vIFVzZSBhIHNjcmlwdCB0YWcg
dG8gZGV0ZWN0IHdoZXRoZXIgdGhlIFVSTCA0MDRzLgotICAgIC8vIE5lZWQgdG8gdXNlIGEgc2Ny
aXB0IHRhZyBzaW5jZSB0aGUgVVJMIGlzIGNyb3NzLWRvbWFpbi4KLSAgICB2YXIgZHVtbXlOb2Rl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7Ci0gICAgZHVtbXlOb2RlLnNyYyA9
IHVybDsKLQotICAgIGR1bW15Tm9kZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFy
IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKLSAgICAgICAgaXRlbS5z
cmMgPSBkdW1teU5vZGUuc3JjOwotICAgICAgICBpdGVtLmNsYXNzTmFtZSA9IGl0ZW1DbGFzc05h
bWU7Ci0gICAgICAgIGl0ZW0uc3R5bGUuaGVpZ2h0ID0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNp
ZmljU3RhdGUucmVzdWx0c0hlaWdodCArICdweCc7Ci0KLSAgICAgICAgaWYgKG9wdF90aXRsZSkg
ewotICAgICAgICAgICAgdmFyIGNoaWxkQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7Ci0gICAgICAgICAgICBjaGlsZENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2lu
bGluZS1ibG9jayc7Ci0gICAgICAgICAgICB2YXIgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTsKLSAgICAgICAgICAgIHRpdGxlLnRleHRDb250ZW50ID0gb3B0X3RpdGxlOwot
ICAgICAgICAgICAgY2hpbGRDb250YWluZXIuYXBwZW5kQ2hpbGQodGl0bGUpOwotICAgICAgICAg
ICAgY2hpbGRDb250YWluZXIuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgICAgICAgICBjb250YWlu
ZXIucmVwbGFjZUNoaWxkKGNoaWxkQ29udGFpbmVyLCBkdW1teU5vZGUpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGNvbnRhaW5lci5yZXBsYWNlQ2hpbGQoaXRlbSwgZHVtbXlOb2RlKTsK
LSAgICB9Ci0gICAgZHVtbXlOb2RlLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgY29u
dGFpbmVyLnJlbW92ZUNoaWxkKGR1bW15Tm9kZSk7Ci0gICAgfQotCi0gICAgY29udGFpbmVyLmFw
cGVuZENoaWxkKGR1bW15Tm9kZSk7Ci19Ci0KLWZ1bmN0aW9uIGJ1aWxkSW5mb0ZvclJldmlzaW9u
KGJ1aWxkZXIsIHJldmlzaW9uKQotewotICAgIHZhciByZXZpc2lvbnMgPSBnX3Jlc3VsdHNCeUJ1
aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb247Ci0gICAgdmFyIHJldmlzaW9uU3RhcnQgPSAw
LCByZXZpc2lvbkVuZCA9IDAsIGJ1aWxkTnVtYmVyID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJldmlzaW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAocmV2aXNpb24gPiByZXZp
c2lvbnNbaV0pIHsKLSAgICAgICAgICAgIHJldmlzaW9uU3RhcnQgPSByZXZpc2lvbnNbaSAtIDFd
OwotICAgICAgICAgICAgcmV2aXNpb25FbmQgPSByZXZpc2lvbnNbaV07Ci0gICAgICAgICAgICBi
dWlsZE51bWJlciA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaSAt
IDFdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmV2
aXNpb25FbmQpCi0gICAgICByZXZpc2lvbkVuZCsrOwotICAgIGVsc2UKLSAgICAgIHJldmlzaW9u
RW5kID0gJyc7Ci0KLSAgICByZXR1cm4ge3JldmlzaW9uU3RhcnQ6IHJldmlzaW9uU3RhcnQsIHJl
dmlzaW9uRW5kOiByZXZpc2lvbkVuZCwgYnVpbGROdW1iZXI6IGJ1aWxkTnVtYmVyfTsKLX0KLQot
ZnVuY3Rpb24gbG9va3VwVmlydHVhbFRlc3RTdWl0ZSh0ZXN0KSB7Ci0gICAgZm9yICh2YXIgc3Vp
dGUgaW4gVklSVFVBTF9TVUlURVMpIHsKLSAgICAgICAgaWYgKHRlc3QuaW5kZXhPZihzdWl0ZSkg
IT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gc3VpdGU7Ci0gICAgfQotICAgIHJldHVybiAnJzsK
LX0KLQotZnVuY3Rpb24gYmFzZVRlc3QodGVzdCwgc3VpdGUpIHsKLSAgICBiYXNlID0gVklSVFVB
TF9TVUlURVNbc3VpdGVdOwotICAgIHJldHVybiBiYXNlID8gdGVzdC5yZXBsYWNlKHN1aXRlLCBi
YXNlKSA6IHRlc3Q7Ci19Ci0KLWZ1bmN0aW9uIGxvYWRCYXNlbGluZXNGb3JUZXN0KGV4cGVjdGF0
aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9uc0NvbnRhaW5lciwgdGVzdCkgewotICAgIHZhciB0
ZXN0V2l0aG91dFN1ZmZpeCA9IHRlc3Quc3Vic3RyaW5nKDAsIHRlc3QubGFzdEluZGV4T2YoJy4n
KSk7Ci0gICAgdmFyIHRleHQgPSB0ZXN0V2l0aG91dFN1ZmZpeCArICItZXhwZWN0ZWQudHh0IjsK
LSAgICB2YXIgcG5nID0gdGVzdFdpdGhvdXRTdWZmaXggKyAiLWV4cGVjdGVkLnBuZyI7Ci0gICAg
dmFyIHJlZnRlc3RfaHRtbF9maWxlID0gdGVzdFdpdGhvdXRTdWZmaXggKyAiLWV4cGVjdGVkLmh0
bWwiOwotICAgIHZhciByZWZ0ZXN0X21pc21hdGNoX2h0bWxfZmlsZSA9IHRlc3RXaXRob3V0U3Vm
Zml4ICsgIi1leHBlY3RlZC1taXNtYXRjaC5odG1sIjsKLSAgICB2YXIgc3VpdGUgPSBsb29rdXBW
aXJ0dWFsVGVzdFN1aXRlKHRlc3QpOwotCi0gICAgaWYgKCFzdWl0ZSkKLSAgICAgICAgYWRkRXhw
ZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9uc0NvbnRhaW5l
ciwgbnVsbCwgdGVzdCwgVEVTVF9VUkxfQkFTRV9QQVRIKTsKLQotICAgIGFkZEV4cGVjdGF0aW9u
cyhleHBlY3RhdGlvbnNDb250YWluZXJzLCBleHBlY3RhdGlvbnNDb250YWluZXIsCi0gICAgICAg
IFRFU1RfVVJMX0JBU0VfUEFUSCwgJycsIHRleHQsIHBuZywgcmVmdGVzdF9odG1sX2ZpbGUsIHJl
ZnRlc3RfbWlzbWF0Y2hfaHRtbF9maWxlLCBzdWl0ZSk7Ci0KLSAgICB2YXIgZmFsbGJhY2tzID0g
YWxsRmFsbGJhY2tzKCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWxsYmFja3MubGVuZ3Ro
OyBpKyspIHsKLSAgICAgIHZhciBmYWxsYmFjayA9ICdwbGF0Zm9ybS8nICsgZmFsbGJhY2tzW2ld
OwotICAgICAgYWRkRXhwZWN0YXRpb25zKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0
aW9uc0NvbnRhaW5lciwgVEVTVF9VUkxfQkFTRV9QQVRILCBmYWxsYmFjaywgdGV4dCwgcG5nLAot
ICAgICAgICAgIHJlZnRlc3RfaHRtbF9maWxlLCByZWZ0ZXN0X21pc21hdGNoX2h0bWxfZmlsZSwg
c3VpdGUpOwotICAgIH0KLQotICAgIGlmIChzdWl0ZSkKLSAgICAgICAgbG9hZEJhc2VsaW5lc0Zv
clRlc3QoZXhwZWN0YXRpb25zQ29udGFpbmVycywgZXhwZWN0YXRpb25zQ29udGFpbmVyLCBiYXNl
VGVzdCh0ZXN0LCBzdWl0ZSkpOwotfQotCi1mdW5jdGlvbiBsb2FkRXhwZWN0YXRpb25zTGF5b3V0
VGVzdHModGVzdCwgZXhwZWN0YXRpb25zQ29udGFpbmVyKQotewotICAgIC8vIE1hcCBmcm9tIGZp
bGUgZXh0ZW5zaW9uIHRvIGNvbnRhaW5lciBkaXYgZm9yIGV4cGVjdGF0aW9ucyBvZiB0aGF0IHR5
cGUuCi0gICAgdmFyIGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMgPSB7fTsKLQotICAgIHZhciByZXZp
c2lvbkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIHJldmlz
aW9uQ29udGFpbmVyLnRleHRDb250ZW50ID0gIlNob3dpbmcgcmVzdWx0cyBmb3I6ICIKLSAgICBl
eHBlY3RhdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQocmV2aXNpb25Db250YWluZXIpOwotICAg
IGZvciAodmFyIGJ1aWxkZXIgaW4gY3VycmVudEJ1aWxkZXJzKCkpIHsKLSAgICAgICAgaWYgKGJ1
aWxkZXJNYXN0ZXIoYnVpbGRlcikubmFtZSA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKLSAg
ICAgICAgICAgIHZhciBsYXRlc3RSZXZpc2lvbiA9IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLnJldmlzaW9uIHx8IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZp
c2lvblswXTsKLSAgICAgICAgICAgIHZhciBidWlsZEluZm8gPSBidWlsZEluZm9Gb3JSZXZpc2lv
bihidWlsZGVyLCBsYXRlc3RSZXZpc2lvbik7Ci0gICAgICAgICAgICB2YXIgcmV2aXNpb25JbmZv
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgICAgICByZXZpc2lvbklu
Zm8uc3R5bGUuY3NzVGV4dCA9ICdiYWNrZ3JvdW5kOmxpZ2h0Z3JheTttYXJnaW46MCAzcHg7cGFk
ZGluZzowIDJweDtkaXNwbGF5OmlubGluZS1ibG9jazsnOwotICAgICAgICAgICAgcmV2aXNpb25J
bmZvLmlubmVySFRNTCA9IGJ1aWxkZXIgKyAnIHInICsgYnVpbGRJbmZvLnJldmlzaW9uRW5kICsK
LSAgICAgICAgICAgICAgICAnOnInICsgYnVpbGRJbmZvLnJldmlzaW9uU3RhcnQgKyAnLCBidWls
ZCAnICsgYnVpbGRJbmZvLmJ1aWxkTnVtYmVyOwotICAgICAgICAgICAgcmV2aXNpb25Db250YWlu
ZXIuYXBwZW5kQ2hpbGQocmV2aXNpb25JbmZvKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGxv
YWRCYXNlbGluZXNGb3JUZXN0KGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9uc0Nv
bnRhaW5lciwgdGVzdCk7Ci0gICAgICAgIAotICAgIHZhciB0ZXN0V2l0aG91dFN1ZmZpeCA9IHRl
c3Quc3Vic3RyaW5nKDAsIHRlc3QubGFzdEluZGV4T2YoJy4nKSk7Ci0gICAgdmFyIGFjdHVhbFJl
c3VsdFN1ZmZpeGVzID0gWyctYWN0dWFsLnR4dCcsICctYWN0dWFsLnBuZycsICctY3Jhc2gtbG9n
LnR4dCcsICctZGlmZi50eHQnLCAnLXdkaWZmLmh0bWwnLCAnLWRpZmYucG5nJ107Ci0KLSAgICBm
b3IgKHZhciBidWlsZGVyIGluIGN1cnJlbnRCdWlsZGVycygpKSB7Ci0gICAgICAgIHZhciBhY3R1
YWxSZXN1bHRzQmFzZTsKLSAgICAgICAgaWYgKGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikubmFtZSA9
PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKLSAgICAgICAgICAgIHZhciBsYXRlc3RSZXZpc2lv
biA9IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnJldmlzaW9uIHx8IGdfcmVzdWx0
c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvblswXTsKLSAgICAgICAgICAgIHZhciBi
dWlsZEluZm8gPSBidWlsZEluZm9Gb3JSZXZpc2lvbihidWlsZGVyLCBsYXRlc3RSZXZpc2lvbik7
Ci0gICAgICAgICAgICBhY3R1YWxSZXN1bHRzQmFzZSA9ICdodHRwOi8vYnVpbGQud2Via2l0Lm9y
Zy9yZXN1bHRzLycgKyBidWlsZGVyICsKLSAgICAgICAgICAgICAgICAnL3InICsgYnVpbGRJbmZv
LnJldmlzaW9uU3RhcnQgKyAnICgnICsgYnVpbGRJbmZvLmJ1aWxkTnVtYmVyICsgJykvJzsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhY3R1YWxSZXN1bHRzQmFzZSA9IFRFU1RfUkVTVUxU
U19CQVNFX1BBVEggKyBjdXJyZW50QnVpbGRlcnMoKVtidWlsZGVyXSArICcvcmVzdWx0cy9sYXlv
dXQtdGVzdC1yZXN1bHRzLyc7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3R1YWxS
ZXN1bHRTdWZmaXhlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgYWRkRXhwZWN0YXRpb25J
dGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9uc0NvbnRhaW5lciwgbnVsbCwK
LSAgICAgICAgICAgICAgICB0ZXN0V2l0aG91dFN1ZmZpeCArIGFjdHVhbFJlc3VsdFN1ZmZpeGVz
W2ldLCBhY3R1YWxSZXN1bHRzQmFzZSwgYnVpbGRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBBZGQgYSBjbGVhcmluZyBlbGVtZW50IHNvIGZsb2F0ZWQgZWxlbWVudHMgZG9uJ3QgYmxl
ZWQgb3V0IG9mIHRoZWlyCi0gICAgLy8gY29udGFpbmluZyBibG9jay4KLSAgICB2YXIgYnIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpOwotICAgIGJyLnN0eWxlLmNsZWFyID0gJ2JvdGgn
OwotICAgIGV4cGVjdGF0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChicik7Ci19Ci0KLXZhciBn
X2FsbEZhbGxiYWNrczsKLQotLy8gUmV0dXJucyB0aGUgcmV2ZXJzZSBzb3J0ZWQsIGRlZHVwZWQg
bGlzdCBvZiBhbGwgcGxhdGZvcm0gZmFsbGJhY2sKLS8vIGRpcmVjdG9yaWVzLgotZnVuY3Rpb24g
YWxsRmFsbGJhY2tzKCkKLXsKLSAgICBpZiAoIWdfYWxsRmFsbGJhY2tzKSB7Ci0gICAgICAgIHZh
ciBob2xkZXIgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgcGxhdGZvcm0gaW4gZ19mYWxsYmFja3NN
YXApIHsKLSAgICAgICAgICAgIHZhciBmYWxsYmFja3MgPSBnX2ZhbGxiYWNrc01hcFtwbGF0Zm9y
bV07Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhbGxiYWNrcy5sZW5ndGg7IGkr
KykKLSAgICAgICAgICAgICAgICBob2xkZXJbZmFsbGJhY2tzW2ldXSA9IDE7Ci0gICAgICAgIH0K
LQotICAgICAgICBnX2FsbEZhbGxiYWNrcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBmYWxsYmFj
ayBpbiBob2xkZXIpCi0gICAgICAgICAgICBnX2FsbEZhbGxiYWNrcy5wdXNoKGZhbGxiYWNrKTsK
LQotICAgICAgICBnX2FsbEZhbGxiYWNrcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAg
ICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBy
ZXR1cm4gYSA8IGI7Ci0gICAgICAgIH0pOwotICAgIH0KLSAgICByZXR1cm4gZ19hbGxGYWxsYmFj
a3M7Ci19Ci0KLWZ1bmN0aW9uIGFwcGVuZEV4cGVjdGF0aW9ucygpCi17Ci0gICAgdmFyIGV4cGVj
dGF0aW9ucyA9IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnNob3dFeHBlY3RhdGlv
bnMgPyBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdleHBlY3RhdGlvbnMnKSA6IFtd
OwotICAgIC8vIExvYWRpbmcgZXhwZWN0YXRpb25zIGlzICp2ZXJ5KiBzbG93LiBVc2UgYSBsYXJn
ZSB0aW1lb3V0IHRvIGF2b2lkCi0gICAgLy8gdG90YWxseSBoYW5naW5nIHRoZSByZW5kZXJlci4K
LSAgICBwZXJmb3JtQ2h1bmtlZEFjdGlvbihleHBlY3RhdGlvbnMsIGZ1bmN0aW9uKGNodW5rKSB7
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkgPCBsZW47IGkr
KykKLSAgICAgICAgICAgIGxvYWRFeHBlY3RhdGlvbnMoY2h1bmtbaV0pOwotICAgICAgICBwb3N0
SGVpZ2h0Q2hhbmdlZE1lc3NhZ2UoKTsKLQotICAgIH0sIGhpZGVMb2FkaW5nVUksIDEwMDAwKTsK
LX0KLQogZnVuY3Rpb24gaGlkZUxvYWRpbmdVSSgpCiB7CiAgICAgdmFyIGxvYWRpbmdEaXYgPSAk
KCdsb2FkaW5nLXVpJyk7CkBAIC0yMzcwLDcgKzE2MjIsNyBAQCBmdW5jdGlvbiBnZW5lcmF0ZVBh
Z2VGb3JJbmRpdmlkdWFsVGVzdHModGVzdHMpCiAgICAgICAgIGFwcGVuZEhUTUwoaHRtbEZvck5h
dkJhcigpKTsKICAgICBwZXJmb3JtQ2h1bmtlZEFjdGlvbih0ZXN0cywgZnVuY3Rpb24oY2h1bmsp
IHsKICAgICAgICAgYXBwZW5kSFRNTChodG1sRm9ySW5kaXZpZHVhbFRlc3RzKGNodW5rKSk7Ci0g
ICAgfSwgYXBwZW5kRXhwZWN0YXRpb25zLCA1MDApOworICAgIH0sIGhpZGVMb2FkaW5nVUksIDUw
MCk7CiAgICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnNob3dDaHJvbWUp
CiAgICAgICAgICQoJ3Rlc3RzLWlucHV0JykudmFsdWUgPSBnX2hpc3RvcnkuZGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZS50ZXN0czsKIH0KQEAgLTIzOTYsMTUgKzE2NDgsMTMgQEAgZnVuY3Rpb24gaHRt
bEZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cykKICAgICAgICAgdmFyIHRlc3ROYW1lSHRtbCA9ICcn
OwogICAgICAgICBpZiAoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hvd0Nocm9t
ZSB8fCB0ZXN0cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICBpZiAoZ19oaXN0b3J5LmlzTGF5
b3V0VGVzdFJlc3VsdHMoKSkgewotICAgICAgICAgICAgICAgIHZhciBzdWl0ZSA9IGxvb2t1cFZp
cnR1YWxUZXN0U3VpdGUodGVzdCk7Ci0gICAgICAgICAgICAgICAgdmFyIGJhc2UgPSBzdWl0ZSA/
IGJhc2VUZXN0KHRlc3QsIHN1aXRlKSA6IHRlc3Q7Ci0gICAgICAgICAgICAgICAgdmFyIHRyYWNV
UkwgPSBURVNUX1VSTF9CQVNFX1BBVEhfVFJBQyArIGJhc2U7CisgICAgICAgICAgICAgICAgdmFy
IHRyYWNVUkwgPSBURVNUX1VSTF9CQVNFX1BBVEhfVFJBQyArIHRlc3Q7CiAgICAgICAgICAgICAg
ICAgdGVzdE5hbWVIdG1sICs9ICc8aDI+JyArIGxpbmtIVE1MVG9PcGVuV2luZG93KHRyYWNVUkws
IHRlc3QpICsgJzwvaDI+JzsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHRl
c3ROYW1lSHRtbCArPSAnPGgyPicgKyB0ZXN0ICsgJzwvaDI+JzsKICAgICAgICAgfQogCi0gICAg
ICAgIHRlc3RzSFRNTC5wdXNoKHRlc3ROYW1lSHRtbCArIGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9u
QWxsQnVpbGRlcnNXaXRoUmVzdWx0c0xpbmtzKHRlc3QpKTsKKyAgICAgICAgdGVzdHNIVE1MLnB1
c2godGVzdE5hbWVIdG1sICsgaHRtbEZvckluZGl2aWR1YWxUZXN0T25BbGxCdWlsZGVycyh0ZXN0
KSk7CiAgICAgfQogICAgIHJldHVybiB0ZXN0c0hUTUwuam9pbignPGhyPicpOwogfQpAQCAtMjUx
MSwxNCArMTc2MSw2IEBAIGZ1bmN0aW9uIGhpZGVMZWdlbmQoKQogICAgICAgICBsZWdlbmQucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChsZWdlbmQpOwogfQogCi12YXIgZ19mYWxsYmFja3NNYXAgPSB7
fTsKLWdfZmFsbGJhY2tzTWFwWydXSU4tWFAnXSA9IFsnY2hyb21pdW0td2luLXhwJywgJ2Nocm9t
aXVtLXdpbicsICdjaHJvbWl1bSddOwotZ19mYWxsYmFja3NNYXBbJ1dJTi03J10gPSBbJ2Nocm9t
aXVtLXdpbicsICdjaHJvbWl1bSddOwotZ19mYWxsYmFja3NNYXBbJ01BQy1TTk9XTEVPUEFSRCdd
ID0gWydjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQnLCAnY2hyb21pdW0tbWFjJywgJ2Nocm9taXVt
J107Ci1nX2ZhbGxiYWNrc01hcFsnTUFDLUxJT04nXSA9IFsnY2hyb21pdW0tbWFjJywgJ2Nocm9t
aXVtJ107Ci1nX2ZhbGxiYWNrc01hcFsnTElOVVgtMzInXSA9IFsnY2hyb21pdW0tbGludXgteDg2
JywgJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbicsICdjaHJvbWl1bSddOwotZ19mYWxs
YmFja3NNYXBbJ0xJTlVYLTY0J10gPSBbJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbics
ICdjaHJvbWl1bSddOwotCiBmdW5jdGlvbiBzaG93TGVnZW5kKCkKIHsKICAgICB2YXIgbGVnZW5k
ID0gJCgnbGVnZW5kJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200944</attachid>
            <date>2013-05-07 11:26:21 -0700</date>
            <delta_ts>2014-02-05 17:25:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115638-20130507202520.patch</filename>
            <type>text/plain</type>
            <size>36573</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NjgyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmVmYWZjYjdlNTMwNTZlOTJhMjgwZWY5MjNlMzNiNDll
MzczMjUxZi4uZGJiMTdmMzQ2MmU5M2I4ZDg0NmIzYmIyNzQ4YjU0OWMxMjJiYmQ4ZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5
IEBACiAyMDEzLTA1LTA2ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAor
ICAgICAgICBbRmxha2luZXNzIERhc2hib2FyZF0gUmVtb3ZlIHRoZSByZXN1bHRzIGxvYWRpbmcg
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1
NjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyB0aGUgc2NyYXBpbmcgb2YgcmVzdWx0cyBvZmYgdGhl
IGJ1aWxkZXJzIGZvciBzcGVjaWZpYyByZXZpc2lvbnMuIFRoZSBjb2RlIGludHJvZHVjZWQKKyAg
ICAgICAgbXVjaCBjb21wbGV4aXR5IGludG8gdGhlIGZsYWtpbmVzcyBkYXNoYm9hcmQgYW5kIHdh
cyB2ZXJ5IG11Y2ggQ2hyb21pdW0tb3JpZW50ZWQsIG9ubHkgYWNjb3VudGluZyBmb3IgQ2hyb21p
dW0KKyAgICAgICAgcGxhdGZvcm0gZmFsbGJhY2sgcGF0aHMgYW5kIHN1YnNlcXVlbnRseSBvbmx5
IHdvcmtlZCB3aGVuIHZpZXdpbmcgcmVzdWx0cyBmcm9tIHRoZSBDaHJvbWl1bSBidWlsZGVycy4K
KworICAgICAgICBBcGFydCBmcm9tIGFsbCB0aGUgcmVzdWx0cyBsb2FkaW5nLXNwZWNpZmljIGNv
ZGUgYmVpbmcgcmVtb3ZlZCwgdGhlICdTaG93IHJlc3VsdHMgZm9yIFdlYktpdCBbcmV2aXNpb25d
JyBsaW5rIGlzIGFsc28KKyAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBidWlsZCBpbmZvcm1hdGlv
biBwb3B1cC4gVGhlIGxpbmssIHdoZW4gY2xpY2tlZCwgd291bGQgYWN0aXZhdGUgdGhlIHJldmlz
aW9uIHBhcmFtZXRlciBpbnNpZGUgdGhlIGdsb2JhbAorICAgICAgICBjcm9zcy1kYXNoYm9hcmQg
c3RhdGUsIHdoaWNoIHNob3VsZCBjYXVzZSB0aGUgcmVzdWx0cyB0byBiZSBsb2FkZWQgYW5kIHBy
ZXNlbnRlZC4gQXQgdGhpcyB0aW1lIHRoaXMgZG9lcyBub3QgaGFwcGVuIGFuZAorICAgICAgICB0
byBteSBiZXN0IGtub3dsZWRnZSBkaWQgbm90IHdvcmsgYXQgYWxsIGZvciBub24tQ2hyb21pdW0g
YnVpbGRlcnMuCisKKyAgICAgICAgVGhlIGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRl
cnNXaXRoUmVzdWx0c0xpbmtzIG1ldGhvZCBpcyByZW1vdmVkIGFzIHdlbGwsIGl0cyB1c2UgcmVw
bGFjZWQgYnkgdGhlCisgICAgICAgIGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnMg
bWV0aG9kLiBUaGUgcmVtb3ZlZCBtZXRob2Qgd2FzIHRoZSBleHRlbnNpb24gb2YgdGhlIGxhdHRl
ciwgYWRkaW5nIGEgY291cGxlIG9mIGxpbmtzCisgICAgICAgIHRvIGFjdGl2YXRlIGxvYWRpbmcg
b2YgcmVzdWx0cyBhbmQgc3BlY2lmeSB0aGUgZGVzaXJlZCByZXZpc2lvbiB0aHJvdWdoIGFuIGlu
cHV0IGZpZWxkLiBUaGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBhbnltb3JlCisgICAgICAgIGFzIHRo
ZSBjb2RlIGlzIGJlaW5kIHJlbW92ZWQuCisKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuanM6CisgICAgICAgIChzaG93UG9w
dXBGb3JCdWlsZCk6CisKKzIwMTMtMDUtMDYgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2Fs
aWEuY29tPgorCiAgICAgICAgIFtGbGFraW5lc3MgRGFzaGJvYXJkXSBSZW1vdmUgdGhlIENocm9t
aXVtIGZhbGxiYWNrIHBsYXRmb3JtcyBsaXN0aW5nIGZyb20gdGhlIGxlZ2VuZCBwb3B1cAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1NjM2CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2lu
ZXNzX2Rhc2hib2FyZC5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qcwppbmRleCA0MmRkZjdlODc2ZTI0ODU5MzRiNjM0Yjc1
YjEwZGVlZTVjZGJiYzA1Li4yMWViOTVmNzE1NDlhYTQ0ZWRlNDBjMTY2NzczYzA1NWYxMDE0NTQy
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Zs
YWtpbmVzc19kYXNoYm9hcmQuanMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCkBAIC0xMTg1LDI0ICsxMTg1LDYgQEAg
ZnVuY3Rpb24gc2hvd1BvcHVwRm9yQnVpbGQoZSwgYnVpbGRlciwgaW5kZXgsIG9wdF90ZXN0TmFt
ZSkKICAgICAgICAgICAgICdXZWJLaXQnKSArCiAgICAgICAgICc8L2xpPic7CiAKLSAgICBpZiAo
bWFzdGVyLm5hbWUgPT0gV0VCS0lUX0JVSUxERVJfTUFTVEVSKSB7Ci0gICAgICAgIHZhciByZXZp
c2lvbiA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvbltpbmRleF07
Ci0gICAgICAgIGh0bWwgKz0gJzxsaT48c3BhbiBjbGFzcz1saW5rIG9uY2xpY2s9ImdfaGlzdG9y
eS5zZXRRdWVyeVBhcmFtZXRlcihcJ3JldmlzaW9uXCcsJyArCi0gICAgICAgICAgICByZXZpc2lv
biArICcpIj5TaG93IHJlc3VsdHMgZm9yIFdlYktpdCByJyArIHJldmlzaW9uICsKLSAgICAgICAg
ICAgICc8L3NwYW4+PC9saT4nOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGh0bWwgKz0gJzxsaT4n
ICsKLSAgICAgICAgICAgIGNyZWF0ZUJsYW1lTGlzdEhUTUwoZ19yZXN1bHRzQnlCdWlsZGVyW2J1
aWxkZXJdLmNocm9tZVJldmlzaW9uLCBpbmRleCwKLSAgICAgICAgICAgICAgICAnaHR0cDovL2J1
aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL3BlcmYvZGFzaGJvYXJkL3VpL2NoYW5nZWxvZy5o
dG1sP3VybD0vdHJ1bmsvc3JjJm1vZGU9aHRtbCZyYW5nZT0nLCAnOicsICdDaHJvbWUnKSArCi0g
ICAgICAgICAgICAnPC9saT4nOwotCi0gICAgICAgIHZhciBjaHJvbWVSZXZpc2lvbiA9IGdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyXS5jaHJvbWVSZXZpc2lvbltpbmRleF07Ci0gICAgICAgIGlm
IChjaHJvbWVSZXZpc2lvbiAmJiBnX2hpc3RvcnkuaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7Ci0g
ICAgICAgICAgICBodG1sICs9ICc8bGk+PGEgaHJlZj0iJyArIFRFU1RfUkVTVUxUU19CQVNFX1BB
VEggKyBjdXJyZW50QnVpbGRlcnMoKVtidWlsZGVyXSArCi0gICAgICAgICAgICAgICAgJy8nICsg
Y2hyb21lUmV2aXNpb24gKyAnL2xheW91dC10ZXN0LXJlc3VsdHMuemlwIj5sYXlvdXQtdGVzdC1y
ZXN1bHRzLnppcDwvYT48L2xpPic7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoIWdfaGlz
dG9yeS5pc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgb3B0X3Rlc3ROYW1lICYmIGlzRmFpbHVyZShi
dWlsZGVyLCBvcHRfdGVzdE5hbWUsIGluZGV4KSkKICAgICAgICAgaHRtbCArPSAnPGxpPicgKyBs
aW5rSFRNTFRvT3BlbldpbmRvdyhidWlsZEJhc2VQYXRoICsgcGF0aFRvRmFpbHVyZUxvZyhvcHRf
dGVzdE5hbWUpLCAnRmFpbHVyZSBsb2cnKSArICc8L2xpPic7CiAKQEAgLTE1MDMsMzIgKzE0ODUs
NiBAQCBmdW5jdGlvbiBzb3J0VGVzdHModGVzdHMsIGNvbHVtbiwgb3JkZXIpCiAgICAgdGVzdHMu
c29ydChzb3J0RnVuY3Rpb25HZXR0ZXIocmVzdWx0c1Byb3BlcnR5LCBvcmRlciA9PSBCQUNLV0FS
RCkpOwogfQogCi0vLyBTb3J0cyBhIHNwYWNlIHNlcGFyYXRlZCBleHBlY3RhdGlvbnMgc3RyaW5n
IGluIGFscGhhbnVtZXJpYyBvcmRlci4KLS8vIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIGV4cGVj
dGF0aW9ucyBzdHJpbmcuCi0vLyBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzb3J0ZWQgc3RyaW5nLgot
ZnVuY3Rpb24gc29ydEV4cGVjdGF0aW9uc1N0cmluZyhzdHIpCi17Ci0gICAgcmV0dXJuIHN0ci5z
cGxpdCgnICcpLnNvcnQoKS5qb2luKCcgJyk7Ci19Ci0KLWZ1bmN0aW9uIGFkZFVwZGF0ZSh0ZXN0
c05lZWRpbmdVcGRhdGUsIHRlc3QsIGJ1aWxkZXJOYW1lLCBtaXNzaW5nLCBleHRyYSkKLXsKLSAg
ICBpZiAoIXRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XSkKLSAgICAgICAgdGVzdHNOZWVkaW5nVXBk
YXRlW3Rlc3RdID0ge307Ci0KLSAgICB2YXIgYnVpbGRJbmZvID0gcGxhdGZvcm1BbmRCdWlsZFR5
cGUoYnVpbGRlck5hbWUpOwotICAgIHZhciBidWlsZGVyID0gYnVpbGRJbmZvLnBsYXRmb3JtICsg
JyAnICsgYnVpbGRJbmZvLmJ1aWxkVHlwZTsKLSAgICBpZiAoIXRlc3RzTmVlZGluZ1VwZGF0ZVt0
ZXN0XVtidWlsZGVyXSkKLSAgICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJd
ID0ge307Ci0KLSAgICBpZiAobWlzc2luZykKLSAgICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rl
c3RdW2J1aWxkZXJdLm1pc3NpbmcgPSBzb3J0RXhwZWN0YXRpb25zU3RyaW5nKG1pc3NpbmcpOwot
Ci0gICAgaWYgKGV4dHJhKQotICAgICAgICB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF1bYnVpbGRl
cl0uZXh0cmEgPSBzb3J0RXhwZWN0YXRpb25zU3RyaW5nKGV4dHJhKTsKLX0KLQotCiAvLyBGcm9t
IGEgc3RyaW5nIG9mIG1vZGlmaWVycywgcmV0dXJucyBhIHN0cmluZyBvZiBtb2RpZmllcnMgdGhh
dAogLy8gYXJlIGZvciByZWFsIHJlc3VsdCBjaGFuZ2VzLCBsaWtlIFNMT1csIGFuZCBleGNsdWRl
cyBtb2RpZmllcnMKIC8vIHRoYXQgc3BlY2lmaWN5IHRoaW5ncyBsaWtlIHBsYXRmb3JtLCBidWls
ZF90eXBlLCBidWcuCkBAIC0xNTQyLDE4MiArMTQ5OCw2IEBAIGZ1bmN0aW9uIHJlYWxNb2RpZmll
cnMobW9kaWZpZXJTdHJpbmcpCiAgICAgfSkuam9pbignICcpOwogfQogCi1mdW5jdGlvbiBnZW5l
cmF0ZVBhZ2VGb3JFeHBlY3RhdGlvbnNVcGRhdGUoKQotewotICAgIC8vIEFsd2F5cyBzaG93IGFs
bCBydW5zIHdoZW4gYXV0by11cGRhdGluZyBleHBlY3RhdGlvbnMuCi0gICAgaWYgKCFnX2hpc3Rv
cnkuY3Jvc3NEYXNoYm9hcmRTdGF0ZS5zaG93QWxsUnVucykKLSAgICAgICAgZ19oaXN0b3J5LnNl
dFF1ZXJ5UGFyYW1ldGVyKCdzaG93QWxsUnVucycsIHRydWUpOwotCi0gICAgcHJvY2Vzc1Rlc3RS
dW5zRm9yQWxsQnVpbGRlcnMoKTsKLSAgICB2YXIgdGVzdHNOZWVkaW5nVXBkYXRlID0ge307Ci0g
ICAgZm9yICh2YXIgdGVzdCBpbiBnX3Rlc3RUb1Jlc3VsdHNNYXApIHsKLSAgICAgICAgdmFyIHJl
c3VsdHMgPSBnX3Rlc3RUb1Jlc3VsdHNNYXBbdGVzdF07Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHRoaXNSZXN1bHQg
PSByZXN1bHRzW2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXRoaXNSZXN1bHQu
bWlzc2luZyAmJiAhdGhpc1Jlc3VsdC5leHRyYSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgdmFyIGFsbFBhc3Nlc09yTm9EYXRhcyA9IHRoaXNSZXN1bHQucmF3UmVz
dWx0cy5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHhbMV0gIT0gIlAiICYmIHhbMV0gIT0g
Ik4iOyB9KS5sZW5ndGggPT0gMDsKLQotICAgICAgICAgICAgaWYgKGFsbFBhc3Nlc09yTm9EYXRh
cykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYWRkVXBkYXRlKHRl
c3RzTmVlZGluZ1VwZGF0ZSwgdGVzdCwgdGhpc1Jlc3VsdC5idWlsZGVyLCB0aGlzUmVzdWx0Lm1p
c3NpbmcsIHRoaXNSZXN1bHQuZXh0cmEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh2
YXIgYnVpbGRlciBpbiBjdXJyZW50QnVpbGRlcnMoKSkgewotICAgICAgICB2YXIgdGVzdHMgPSBn
X3BlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlc1tidWlsZGVyXQotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAv
LyBBbnl0aGluZyBleHRyYSBpbiB0aGlzIGNhc2UgaXMgd2hhdCBpcyBsaXN0ZWQgaW4gZXhwZWN0
YXRpb25zCi0gICAgICAgICAgICAvLyBwbHVzIG1vZGlmaWVycyBvdGhlciB0aGFuIGJ1ZywgcGxh
dGZvcm0sIGJ1aWxkIHR5cGUuCi0gICAgICAgICAgICB2YXIgbW9kaWZpZXJzID0gcmVhbE1vZGlm
aWVycyh0ZXN0c1tpXS5tb2RpZmllcnMpOwotICAgICAgICAgICAgdmFyIGV4dHJhcyA9IHRlc3Rz
W2ldLmV4cGVjdGF0aW9uczsKLSAgICAgICAgICAgIGV4dHJhcyArPSBtb2RpZmllcnMgPyAnICcg
KyBtb2RpZmllcnMgOiAnJzsKLSAgICAgICAgICAgIGFkZFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRh
dGUsIHRlc3RzW2ldLnRlc3QsIGJ1aWxkZXIsIG51bGwsIGV4dHJhcyk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBHZXQgdGhlIGtleXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBzbyBpdCBp
cyBlYXN5IHRvIHByb2Nlc3MgZ3JvdXBzCi0gICAgLy8gb2YgdGVzdHMuCi0gICAgdmFyIGtleXMg
PSBPYmplY3Qua2V5cyh0ZXN0c05lZWRpbmdVcGRhdGUpLnNvcnQoKTsKLSAgICBzaG93VXBkYXRl
SW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsKLX0KLQotLy8gU2hvdyB0aGUg
dGVzdCByZXN1bHRzIGFuZCB0aGUganNvbiBmb3IgZGlmZmVyaW5nIGV4cGVjdGF0aW9ucywgYW5k
Ci0vLyBhbGxvdyB0aGUgdXNlciB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhpcyB1cGRhdGUuCi0v
LwotLy8gQHBhcmFtIHtPYmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0ZSBUZXN0cyB0aGF0IG5lZWQg
dXBkYXRpbmcuCi0vLyBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBrZXlzIEtleXMgaW50byB0aGUg
dGVzdE5lZWRpbmdVcGRhdGUgb2JqZWN0LgotZnVuY3Rpb24gc2hvd1VwZGF0ZUluZm9Gb3JUZXN0
KHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cykKLXsKLSAgICB2YXIgdGVzdCA9IGtleXNbZ19oaXN0
b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudXBkYXRlSW5kZXhdOwotICAgIGRvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MID0gJyc7Ci0KLSAgICAvLyBGSVhNRTogTWFrZSB0aGlzIERPTSBjcmVhdGlv
biBsZXNzIHZlcmJvc2UuCi0gICAgdmFyIGluZGV4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7Ci0gICAgaW5kZXguc3R5bGUuY3NzRmxvYXQgPSAncmlnaHQnOwotICAgIGluZGV4LnRl
eHRDb250ZW50ID0gKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnVwZGF0ZUluZGV4
ICsgMSkgKyAnIG9mICcgKyBrZXlzLmxlbmd0aCArICcgdGVzdHMnOwotICAgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoaW5kZXgpOwotCi0gICAgdmFyIGJ1dHRvblJlZ2lvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIHZhciBpbmNsdWRlQnRuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaW5wdXQnKTsKLSAgICBpbmNsdWRlQnRuLnR5cGUgPSAnYnV0dG9uJzsKLSAg
ICBpbmNsdWRlQnRuLnZhbHVlID0gJ2luY2x1ZGUgc2VsZWN0ZWQnOwotICAgIGluY2x1ZGVCdG4u
YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBwYXJ0aWFsKGhhbmRsZVVwZGF0ZSwgdGVzdHNOZWVk
aW5nVXBkYXRlLCBrZXlzKSwgZmFsc2UpOwotICAgIGJ1dHRvblJlZ2lvbi5hcHBlbmRDaGlsZChp
bmNsdWRlQnRuKTsKLQotICAgIHZhciBwcmV2aW91c0J0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2lucHV0Jyk7Ci0gICAgcHJldmlvdXNCdG4udHlwZSA9ICdidXR0b24nOwotICAgIHByZXZp
b3VzQnRuLnZhbHVlID0gJ3ByZXZpb3VzJzsKLSAgICBwcmV2aW91c0J0bi5hZGRFdmVudExpc3Rl
bmVyKCdjbGljaycsCi0gICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHNldFVwZGF0ZUlu
ZGV4KGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnVwZGF0ZUluZGV4IC0gMSwgdGVz
dHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsKLSAgICAgICAgfSwKLSAgICAgICAgZmFsc2UpOwotICAg
IGJ1dHRvblJlZ2lvbi5hcHBlbmRDaGlsZChwcmV2aW91c0J0bik7Ci0KLSAgICB2YXIgbmV4dEJ0
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Ci0gICAgbmV4dEJ0bi50eXBlID0g
J2J1dHRvbic7Ci0gICAgbmV4dEJ0bi52YWx1ZSA9ICduZXh0JzsKLSAgICBuZXh0QnRuLmFkZEV2
ZW50TGlzdGVuZXIoJ2NsaWNrJywgcGFydGlhbChuZXh0VXBkYXRlLCB0ZXN0c05lZWRpbmdVcGRh
dGUsIGtleXMpLCBmYWxzZSk7Ci0gICAgYnV0dG9uUmVnaW9uLmFwcGVuZENoaWxkKG5leHRCdG4p
OwotCi0gICAgdmFyIGRvbmVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwot
ICAgIGRvbmVCdG4udHlwZSA9ICdidXR0b24nOwotICAgIGRvbmVCdG4udmFsdWUgPSAnZG9uZSc7
Ci0gICAgZG9uZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZpbmlzaFVwZGF0ZSwgZmFs
c2UpOwotICAgIGJ1dHRvblJlZ2lvbi5hcHBlbmRDaGlsZChkb25lQnRuKTsKLQotICAgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoYnV0dG9uUmVnaW9uKTsKLQotICAgIHZhciB1cGRhdGVzID0g
dGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdOwotICAgIHZhciBjaGVja2JveGVzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgZm9yICh2YXIgYnVpbGRlciBpbiB1cGRhdGVzKSB7
Ci0gICAgICAgIC8vIENyZWF0ZSBhIGNoZWNrYm94IGZvciBlYWNoIGJ1aWxkZXIuCi0gICAgICAg
IHZhciBjaGVja2JveFJlZ2lvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAg
ICAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwotICAg
ICAgICBjaGVja2JveC50eXBlID0gJ2NoZWNrYm94JzsKLSAgICAgICAgY2hlY2tib3guaWQgPSBi
dWlsZGVyOwotICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgICAgY2hlY2ti
b3hSZWdpb24uYXBwZW5kQ2hpbGQoY2hlY2tib3gpOwotICAgICAgICBjaGVja2JveFJlZ2lvbi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShidWlsZGVyICsgJyA6ICcgKyBKU09O
LnN0cmluZ2lmeSh1cGRhdGVzW2J1aWxkZXJdKSkpOwotICAgICAgICBjaGVja2JveGVzLmFwcGVu
ZENoaWxkKGNoZWNrYm94UmVnaW9uKTsKLSAgICB9Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChjaGVja2JveGVzKTsKLQotICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTsKLSAgICBkaXYuaW5uZXJIVE1MID0gaHRtbEZvckluZGl2aWR1YWxUZXN0T25BbGxC
dWlsZGVyc1dpdGhSZXN1bHRzTGlua3ModGVzdCk7Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChkaXYpOwotICAgIGFwcGVuZEV4cGVjdGF0aW9ucygpOwotfQotCi0KLS8vIFdoZW4gdGhl
IHVzZXIgaGFzIGZpbmlzaGVkIHNlbGVjdGluZyBleHBlY3RhdGlvbnMgdG8gdXBkYXRlLCBwcm92
aWRlIHRoZW0KLS8vIHdpdGgganNvbiB0byBjb3B5IG92ZXIuCi1mdW5jdGlvbiBmaW5pc2hVcGRh
dGUoKQotewotICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJ1RoZSBuZXh0IHN0ZXAgaXMg
dG8gY29weSB0aGUgb3V0cHV0IGJlbG93ICcgKwotICAgICAgICAnaW50byBhIGxvY2FsIGZpbGUg
YW5kIHNhdmUgaXQuICBUaGVuLCBydW48YnI+PGNvZGU+cHl0aG9uICcgKwotICAgICAgICAnc3Jj
L3dlYmtpdC90b29scy9sYXlvdXRfdGVzdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3VwZGF0ZV9l
eHBlY3RhdCcgKwotICAgICAgICAnaW9uc19mcm9tX2Rhc2hib2FyZC5weSBwYXRoL3RvL2xvY2Fs
L2ZpbGU8L2NvZGU+PGJyPmluIG9yZGVyIHRvICcgKwotICAgICAgICAndXBkYXRlIHRoZSBleHBl
Y3RhdGlvbnMgZmlsZS48YnI+PHRleHRhcmVhIGlkPSJyZXN1bHRzIiAnKwotICAgICAgICAnc3R5
bGU9IndpZHRoOjYwMHB4O2hlaWdodDo2MDBweDsiPiAnICsKLSAgICAgICAgSlNPTi5zdHJpbmdp
ZnkoZ19jb25maXJtZWRUZXN0cykgKyAnPC90ZXh0YXJlYT4nOwotICAgIHJlc3VsdHMuZm9jdXMo
KTsKLSAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnU2VsZWN0QWxsJyk7Ci19Ci0KLS8vIEhhbmRs
ZSB1c2VyIGNsaWNrIG9uICJpbmNsdWRlIHNlbGVjdGVkIiBidXR0b24uCi0vLyBJbmNsdWRlcyB0
aGUgdGVzdHMgdGhhdCBhcmUgc2VsZWN0ZWQgYW5kIGV4Y2x1ZGUgdGhlIHJlc3QuCi0vLyBAcGFy
YW0ge09iamVjdH0gdGVzdHNOZWVkaW5nVXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRhdGluZy4K
LS8vIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGlu
Z1VwZGF0ZSBvYmplY3QuCi1mdW5jdGlvbiBoYW5kbGVVcGRhdGUodGVzdHNOZWVkaW5nVXBkYXRl
LCBrZXlzKQotewotICAgIHZhciB0ZXN0ID0ga2V5c1tnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lm
aWNTdGF0ZS51cGRhdGVJbmRleF07Ci0gICAgdmFyIHVwZGF0ZXMgPSB0ZXN0c05lZWRpbmdVcGRh
dGVbdGVzdF07Ci0gICAgZm9yICh2YXIgYnVpbGRlciBpbiB1cGRhdGVzKSB7Ci0gICAgICAgIC8v
IEFkZCBpbmNsdWRlZCB0ZXN0cywgYW5kIGRlbGV0ZSBleGNsdWRlZCB0ZXN0cyBpZgotICAgICAg
ICAvLyB0aGV5IHdlcmUgcHJldmlvdXNseSBpbmNsdWRlZC4KLSAgICAgICAgaWYgKCQoYnVpbGRl
cikuY2hlY2tlZCkgewotICAgICAgICAgICAgaWYgKCFnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdKQot
ICAgICAgICAgICAgICAgIGdfY29uZmlybWVkVGVzdHNbdGVzdF0gPSB7fTsKLSAgICAgICAgICAg
IGdfY29uZmlybWVkVGVzdHNbdGVzdF1bYnVpbGRlcl0gPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVz
dF1bYnVpbGRlcl07Ci0gICAgICAgIH0gZWxzZSBpZiAoZ19jb25maXJtZWRUZXN0c1t0ZXN0XSAm
JiBnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdW2J1aWxkZXJdKSB7Ci0gICAgICAgICAgICBkZWxldGUg
Z19jb25maXJtZWRUZXN0c1t0ZXN0XVtidWlsZGVyXTsKLSAgICAgICAgICAgIGlmICghT2JqZWN0
LmtleXMoZ19jb25maXJtZWRUZXN0c1t0ZXN0XSkubGVuZ3RoKQotICAgICAgICAgICAgICAgIGRl
bGV0ZSBnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdOwotICAgICAgICB9Ci0gICAgfQotICAgIG5leHRV
cGRhdGUodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsKLX0KLQotCi0vLyBNb3ZlIHRvIHRoZSBu
ZXh0IGl0ZW0gdG8gdXBkYXRlLgotLy8gQHBhcmFtIHtPYmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0
ZSBUZXN0cyB0aGF0IG5lZWQgdXBkYXRpbmcuCi0vLyBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBr
ZXlzIEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUgb2JqZWN0LgotZnVuY3Rpb24gbmV4
dFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpCi17Ci0gICAgc2V0VXBkYXRlSW5kZXgo
Z19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudXBkYXRlSW5kZXggKyAxLCB0ZXN0c05l
ZWRpbmdVcGRhdGUsIGtleXMpOwotfQotCi0KLS8vIEFkdmFuY2UgdGhlIGluZGV4IHdlIGFyZSB1
cGRhdGluZyBhdC4gIElmIHdlIHdhbGsgb3ZlciB0aGUgZW5kCi0vLyBvciBiZWdpbm5pbmcsIGp1
c3QgbG9vcC4KLS8vIEBwYXJhbSB7c3RyaW5nfSBuZXdJbmRleCBUaGUgaW5kZXggaW50byB0aGUg
a2V5cyB0byBtb3ZlIHRvLgotLy8gQHBhcmFtIHtPYmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0ZSBU
ZXN0cyB0aGF0IG5lZWQgdXBkYXRpbmcuCi0vLyBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBrZXlz
IEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUgb2JqZWN0LgotZnVuY3Rpb24gc2V0VXBk
YXRlSW5kZXgobmV3SW5kZXgsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cykKLXsKLSAgICBpZiAo
bmV3SW5kZXggPT0gLTEpCi0gICAgICAgIG5ld0luZGV4ID0ga2V5cy5sZW5ndGggLSAxOwotICAg
IGVsc2UgaWYgKG5ld0luZGV4ID09IGtleXMubGVuZ3RoKQotICAgICAgICBuZXdJbmRleCA9IDA7
Ci0gICAgZ19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKCJ1cGRhdGVJbmRleCIsIG5ld0luZGV4
KTsKLSAgICBzaG93VXBkYXRlSW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsK
LX0KLQogZnVuY3Rpb24gaHRtbEZvckluZGl2aWR1YWxUZXN0T25BbGxCdWlsZGVycyh0ZXN0KQog
ewogICAgIHByb2Nlc3NUZXN0UnVuc0ZvckFsbEJ1aWxkZXJzKCk7CkBAIC0xNzQ4LDUzNCArMTUy
OCw2IEBAIGZ1bmN0aW9uIGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnModGVzdCkK
ICAgICByZXR1cm4gaHRtbEZvclRlc3RUYWJsZShodG1sKSArIHNraXBwZWRCdWlsZGVyc0h0bWw7
CiB9CiAKLWZ1bmN0aW9uIGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnNXaXRoUmVz
dWx0c0xpbmtzKHRlc3QpCi17Ci0gICAgcHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVpbGRlcnMoKTsK
LQotICAgIHZhciB0ZXN0UmVzdWx0cyA9IGdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0XTsKLSAgICB2
YXIgaHRtbCA9ICcnOwotICAgIGh0bWwgKz0gaHRtbEZvckluZGl2aWR1YWxUZXN0T25BbGxCdWls
ZGVycyh0ZXN0KTsKLQotICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ZXhwZWN0YXRpb25zIHRlc3Q9
JyArIHRlc3QgKyAnPjxkaXY+JyArCi0gICAgICAgIGxpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hv
d0V4cGVjdGF0aW9ucycsICdyZXN1bHRzJykKLQotICAgIGlmIChnX2hpc3RvcnkuaXNMYXlvdXRU
ZXN0UmVzdWx0cygpIHx8IGdfaGlzdG9yeS5pc0dQVVRlc3RSZXN1bHRzKCkpIHsKLSAgICAgICAg
aWYgKGdfaGlzdG9yeS5pc0xheW91dFRlc3RSZXN1bHRzKCkpCi0gICAgICAgICAgICBodG1sICs9
ICcgfCAnICsgbGlua0hUTUxUb1RvZ2dsZVN0YXRlKCdzaG93TGFyZ2VFeHBlY3RhdGlvbnMnLCAn
bGFyZ2UgdGh1bWJuYWlscycpOwotICAgICAgICBpZiAodGVzdFJlc3VsdHMgJiYgY3VycmVudEJ1
aWxkZXJHcm91cCgpLm1hc3RlcigpLm5hbWUgPT0gV0VCS0lUX0JVSUxERVJfTUFTVEVSKSB7Ci0g
ICAgICAgICAgICB2YXIgcmV2aXNpb24gPSBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZS5yZXZpc2lvbiB8fCAnJzsKLSAgICAgICAgICAgIGh0bWwgKz0gJzxmb3JtIG9uc3VibWl0PSJn
X2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXZpc2lvblwnLCByZXZpc2lvbi52YWx1ZSk7
JyArCi0gICAgICAgICAgICAgICAgJ3JldHVybiBmYWxzZTsiPlNob3cgcmVzdWx0cyBmb3IgV2Vi
S2l0IHJldmlzaW9uOiAnICsKLSAgICAgICAgICAgICAgICAnPGlucHV0IG5hbWU9cmV2aXNpb24g
cGxhY2Vob2xkZXI9ImUuZy4gNjU1NDAiIHZhbHVlPSInICsgcmV2aXNpb24gKwotICAgICAgICAg
ICAgICAgICciIGlkPXJldmlzaW9uLWlucHV0PjwvZm9ybT4nOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGh0bWwgKz0gJyB8IDxiPk9ubHkgc2hvd3MgYWN0dWFsIHJlc3VsdHMvZGlmZnMg
ZnJvbSB0aGUgbW9zdCByZWNlbnQgKmZhaWx1cmUqIG9uIGVhY2ggYm90LjwvYj4nOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBodG1sICs9ICcgfCA8c3Bhbj5SZXN1bHRzIGhlaWdodDo8aW5wdXQgJyAr
Ci0gICAgICAgICAgJ29uY2hhbmdlPSJnX2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXN1
bHRzSGVpZ2h0XCcsdGhpcy52YWx1ZSkiIHZhbHVlPSInICsKLSAgICAgICAgICBnX2hpc3Rvcnku
ZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5yZXN1bHRzSGVpZ2h0ICsgJyIgc3R5bGU9IndpZHRoOjIu
NWVtIj5weDwvc3Bhbj4nOwotICAgIH0KLSAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nOwotICAg
IHJldHVybiBodG1sOwotfQotCi1mdW5jdGlvbiBnZXRFeHBlY3RhdGlvbnNDb250YWluZXIoZXhw
ZWN0YXRpb25zQ29udGFpbmVycywgcGFyZW50Q29udGFpbmVyLCBleHBlY3RhdGlvbnNUeXBlKQot
ewotICAgIGlmICghZXhwZWN0YXRpb25zQ29udGFpbmVyc1tleHBlY3RhdGlvbnNUeXBlXSkgewot
ICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0g
ICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWNvbnRhaW5lcic7Ci0g
ICAgICAgIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpOwotICAgICAgICBl
eHBlY3RhdGlvbnNDb250YWluZXJzW2V4cGVjdGF0aW9uc1R5cGVdID0gY29udGFpbmVyOwotICAg
IH0KLSAgICByZXR1cm4gZXhwZWN0YXRpb25zQ29udGFpbmVyc1tleHBlY3RhdGlvbnNUeXBlXTsK
LX0KLQotZnVuY3Rpb24gZW5zdXJlVHJhaWxpbmdTbGFzaChwYXRoKQotewotICAgIGlmIChwYXRo
Lm1hdGNoKC9cLyQvKSkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgcmV0dXJuIHBhdGggKyAn
Lyc7Ci19Ci0KLWZ1bmN0aW9uIG1heWJlQWRkUG5nQ2hlY2tzdW0oZXhwZWN0YXRpb25EaXYsIHBu
Z1VybCkKLXsKLSAgICAvLyBwbmdVcmwgZ2V0cyBzZXJ2ZWQgZnJvbSB0aGUgYnJvd3NlciBjYWNo
ZSBzaW5jZSB3ZSBqdXN0IGxvYWRlZCBpdCBpbiBhbgotICAgIC8vIDxpbWc+IHRhZy4KLSAgICBs
b2FkZXIucmVxdWVzdChwbmdVcmwsCi0gICAgICAgIGZ1bmN0aW9uKHhocikgewotICAgICAgICAg
ICAgLy8gQ29udmVydCB0aGUgZmlyc3QgMmsgb2YgdGhlIHJlc3BvbnNlIHRvIGEgYnl0ZSBzdHJp
bmcuCi0gICAgICAgICAgICB2YXIgYnl0ZXMgPSB4aHIucmVzcG9uc2VUZXh0LnN1YnN0cmluZygw
LCAyMDQ4KTsKLSAgICAgICAgICAgIGZvciAodmFyIHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBi
eXRlcy5sZW5ndGg7ICsrcG9zaXRpb24pCi0gICAgICAgICAgICAgICAgYnl0ZXNbcG9zaXRpb25d
ID0gYnl0ZXNbcG9zaXRpb25dICYgMHhmZjsKLQotICAgICAgICAgICAgLy8gTG9vayBmb3IgdGhl
IGNvbW1lbnQuCi0gICAgICAgICAgICB2YXIgY29tbWVudEtleSA9ICd0RVh0Y2hlY2tzdW1ceDAw
JzsKLSAgICAgICAgICAgIHZhciBjaGVja3N1bVBvc2l0aW9uID0gYnl0ZXMuaW5kZXhPZihjb21t
ZW50S2V5KTsKLSAgICAgICAgICAgIGlmIChjaGVja3N1bVBvc2l0aW9uID09IC0xKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIGNoZWNrc3VtID0gYnl0ZXMuc3Vi
c3RyaW5nKGNoZWNrc3VtUG9zaXRpb24gKyBjb21tZW50S2V5Lmxlbmd0aCwgY2hlY2tzdW1Qb3Np
dGlvbiArIGNvbW1lbnRLZXkubGVuZ3RoICsgMzIpOwotICAgICAgICAgICAgdmFyIGNoZWNrc3Vt
Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwotICAgICAgICAgICAg
Y2hlY2tzdW1Db250YWluZXIuaW5uZXJUZXh0ID0gJ0VtYmVkZGVkIGNoZWNrc3VtOiAnICsgY2hl
Y2tzdW07Ci0gICAgICAgICAgICBjaGVja3N1bUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2NsYXNz
JywgJ3BuZ2NoZWNrc3VtJyk7Ci0gICAgICAgICAgICBleHBlY3RhdGlvbkRpdi5wYXJlbnROb2Rl
LmFwcGVuZENoaWxkKGNoZWNrc3VtQ29udGFpbmVyKTsKLSAgICAgICAgfSwKLSAgICAgICAgZnVu
Y3Rpb24oeGhyKSB7fSwKLSAgICAgICAgdHJ1ZSk7Ci19Ci0KLS8vIEFkZHMgYSBzcGVjaWZpYyBl
eHBlY3RhdGlvbi4gSWYgaXQncyBhbiBpbWFnZSwgaXQncyBvbmx5IGFkZGVkIG9uIHRoZQotLy8g
aW1hZ2UncyBvbmxvYWQgaGFuZGxlci4gSWYgaXQncyBhIHRleHQgZmlsZSwgdGhlbiBhIHNjcmlw
dCB0YWcgaXMgYXBwZW5kZWQKLS8vIGFzIGEgaGFjayB0byBzZWUgaWYgdGhlIGZpbGUgNDA0cyAo
bmVjZXNzYXJ5IHNpbmNlIGl0J3MgY3Jvc3MtZG9tYWluKS4KLS8vIE9uY2UgYWxsIHRoZSBleHBl
Y3RhdGlvbnMgZm9yIGEgc3BlY2lmaWMgdHlwZSBoYXZlIGxvYWRlZCBvciBlcnJvcmVkCi0vLyAo
ZS5nLiBhbGwgdGhlIHRleHQgcmVzdWx0cyksIHRoZW4gd2UgZ28gdGhyb3VnaCBhbmQgaWRlbnRp
Znkgd2hpY2ggcGxhdGZvcm0KLS8vIHVzZXMgd2hpY2ggZXhwZWN0YXRpb24uCi0vLwotLy8gQHBh
cmFtIHtPYmplY3R9IGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMgTWFwIGZyb20gZXhwZWN0YXRpb25z
IHR5cGUgdG8KLS8vICAgICBjb250YWluZXIgRElWLgotLy8gQHBhcmFtIHtFbGVtZW50fSBwYXJl
bnRDb250YWluZXIgQ29udGFpbmVyIGVsZW1lbnQgZm9yCi0vLyAgICAgZXhwZWN0YXRpb25zQ29u
dGFpbmVyIGRpdnMuCi0vLyBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm0gUGxhdGZvcm0gc3RyaW5n
LiBFbXB0eSBzdHJpbmcgZm9yIG5vbi1wbGF0Zm9ybQotLy8gICAgIHNwZWNpZmljIGV4cGVjdGF0
aW9ucy4KLS8vIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFJlbGF0aXZlIHBhdGggdG8gdGhlIGV4cGVj
dGF0aW9uLgotLy8gQHBhcmFtIHtzdHJpbmd9IGJhc2UgQmFzZSBwYXRoIGZvciB0aGUgZXhwZWN0
YXRpb24gVVJMLgotLy8gQHBhcmFtIHtzdHJpbmd9IG9wdF9idWlsZGVyIEJ1aWxkZXIgd2hvc2Ug
YWN0dWFsIHJlc3VsdHMgdGhpcyBleHBlY3RhdGlvbgotLy8gICAgIHBvaW50cyB0by4KLS8vIEBw
YXJhbSB7c3RyaW5nfSBvcHRfc3VpdGUgInZpcnR1YWwgc3VpdGUiIHRoYXQgdGhlIHRlc3QgYmVs
b25ncyB0bywgaWYgYW55LgotZnVuY3Rpb24gYWRkRXhwZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9u
c0NvbnRhaW5lcnMsIHBhcmVudENvbnRhaW5lciwgcGxhdGZvcm0sIHBhdGgsIGJhc2UsIG9wdF9i
dWlsZGVyLCBvcHRfc3VpdGUpCi17Ci0gICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpCi0g
ICAgdmFyIGZpbGVFeHRlbnNpb24gPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKLSAgICBpZiAo
ZmlsZUV4dGVuc2lvbiA9PSAnaHRtbCcpCi0gICAgICAgIGZpbGVFeHRlbnNpb24gPSAndHh0JzsK
LSAgICAKLSAgICB2YXIgY29udGFpbmVyID0gZ2V0RXhwZWN0YXRpb25zQ29udGFpbmVyKGV4cGVj
dGF0aW9uc0NvbnRhaW5lcnMsIHBhcmVudENvbnRhaW5lciwgZmlsZUV4dGVuc2lvbik7Ci0gICAg
dmFyIGlzSW1hZ2UgPSBwYXRoLm1hdGNoKC9cLnBuZyQvKTsKLQotICAgIC8vIEZJWE1FOiBTdG9w
IHVzaW5nIHNjcmlwdCB0YWdzIG9uY2UgYWxsIHRoZSBwbGFjZXMgd2UgcHVsbCBmcm9tIHN1cHBv
cnQgQ09SUy4KLSAgICB2YXIgcGxhdGZvcm1QYXJ0ID0gcGxhdGZvcm0gPyBlbnN1cmVUcmFpbGlu
Z1NsYXNoKHBsYXRmb3JtKSA6ICcnOwotICAgIHZhciBzdWl0ZVBhcnQgPSBvcHRfc3VpdGUgPyBl
bnN1cmVUcmFpbGluZ1NsYXNoKG9wdF9zdWl0ZSkgOiAnJzsKLQotICAgIHZhciBjaGlsZENvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICBjaGlsZENvbnRhaW5l
ci5jbGFzc05hbWUgPSAndW5sb2FkZWQnOwotCi0gICAgdmFyIGFwcGVuZEV4cGVjdGF0aW9uc0l0
ZW0gPSBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxk
KGV4cGVjdGF0aW9uc1RpdGxlKHBsYXRmb3JtUGFydCArIHN1aXRlUGFydCwgcGF0aCwgb3B0X2J1
aWxkZXIpKTsKLSAgICAgICAgY2hpbGRDb250YWluZXIuY2xhc3NOYW1lID0gJ2V4cGVjdGF0aW9u
cy1pdGVtJzsKLSAgICAgICAgaXRlbS5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb24gJyArIGZpbGVF
eHRlbnNpb247Ci0gICAgICAgIGlmIChnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5z
aG93TGFyZ2VFeHBlY3RhdGlvbnMpCi0gICAgICAgICAgICBpdGVtLmNsYXNzTmFtZSArPSAnIGxh
cmdlJzsKLSAgICAgICAgY2hpbGRDb250YWluZXIuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgICAg
IGhhbmRsZUZpbmlzaGVkTG9hZGluZ0V4cGVjdGF0aW9ucyhjb250YWluZXIpOwotICAgIH07Ci0K
LSAgICB2YXIgdXJsID0gYmFzZSArIHBsYXRmb3JtUGFydCArIHBhdGg7Ci0gICAgaWYgKGlzSW1h
Z2UgfHwgIXN0cmluZy5zdGFydHNXaXRoKGJhc2UsICdodHRwOi8vc3ZuLndlYmtpdC5vcmcnKSkg
ewotICAgICAgICB2YXIgZHVtbXlOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpc0ltYWdl
ID8gJ2ltZycgOiAnc2NyaXB0Jyk7Ci0gICAgICAgIGR1bW15Tm9kZS5zcmMgPSB1cmw7Ci0gICAg
ICAgIGR1bW15Tm9kZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBpdGVt
OwotICAgICAgICAgICAgaWYgKGlzSW1hZ2UpIHsKLSAgICAgICAgICAgICAgICBpdGVtID0gZHVt
bXlOb2RlOwotICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuc3RhcnRzV2l0aChiYXNlLCAnaHR0
cDovL3N2bi53ZWJraXQub3JnJykpCi0gICAgICAgICAgICAgICAgICAgIG1heWJlQWRkUG5nQ2hl
Y2tzdW0oaXRlbSwgdXJsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwotICAgICAgICAgICAgICAg
IGl0ZW0uc3JjID0gdXJsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kRXhwZWN0
YXRpb25zSXRlbShpdGVtKTsKLSAgICAgICAgfQotICAgICAgICBkdW1teU5vZGUub25lcnJvciA9
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgY2hpbGRDb250YWluZXIucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZChjaGlsZENvbnRhaW5lcik7Ci0gICAgICAgICAgICBoYW5kbGVGaW5pc2hlZExvYWRp
bmdFeHBlY3RhdGlvbnMoY29udGFpbmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFwcGVu
ZCBzY3JpcHQgZWxlbWVudHMgbm93IHNvIHRoYXQgdGhleSBsb2FkLiBJbWFnZXMgbG9hZCB3aXRo
b3V0IGJlaW5nCi0gICAgICAgIC8vIGFwcGVuZGVkIHRvIHRoZSBET00uCi0gICAgICAgIGlmICgh
aXNJbWFnZSkKLSAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxkKGR1bW15Tm9k
ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbG9hZGVyLnJlcXVlc3QodXJsLAotICAgICAgICAg
ICAgZnVuY3Rpb24oeGhyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdwcmUnKTsKLSAgICAgICAgICAgICAgICBpdGVtLmlubmVyVGV4dCA9IHho
ci5yZXNwb25zZVRleHQ7Ci0gICAgICAgICAgICAgICAgYXBwZW5kRXhwZWN0YXRpb25zSXRlbShp
dGVtKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBmdW5jdGlvbih4aHIpIHsvKiBEbyBu
b3RoaW5nIG9uIGVycm9ycyBzaW5jZSB0aGV5J3JlIGV4cGVjdGVkICovfSk7Ci0gICAgfQotCi0g
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkQ29udGFpbmVyKTsKLX0KLQotCi0vLyBJZGVu
dGlmaWVzIHdoaWNoIGV4cGVjdGF0aW9ucyBhcmUgdXNlZCBvbiB3aGljaCBwbGF0Zm9ybSBvbmNl
IGFsbCB0aGUKLS8vIGV4cGVjdGF0aW9ucyBvZiBhIGdpdmVuIHR5cGUgaGF2ZSBsb2FkZWQgKGUu
Zy4gdGhlIGNvbnRhaW5lciBmb3IgcG5nCi0vLyBleHBlY3RhdGlvbnMgZm9yIHRoaXMgdGVzdCBo
YWQgbm8gY2hpbGQgZWxlbWVudHMgd2l0aCB0aGUgY2xhc3MKLS8vICJ1bmxvYWRlZCIpLgotLy8K
LS8vIEBwYXJhbSB7c3RyaW5nfSBjb250YWluZXIgRWxlbWVudCBjb250YWluaW5nIHRoZSBleHBl
Y3RhdGlvbnMgZm9yIGEgZ2l2ZW4KLS8vICAgICB0ZXN0IGFuZCBhIGdpdmVuIHR5cGUgKGUuZy4g
cG5nKS4KLWZ1bmN0aW9uIGhhbmRsZUZpbmlzaGVkTG9hZGluZ0V4cGVjdGF0aW9ucyhjb250YWlu
ZXIpCi17Ci0gICAgaWYgKGNvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd1bmxvYWRl
ZCcpLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmFyIHRpdGxlcyA9IGNvbnRhaW5l
ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdleHBlY3RhdGlvbnMtdGl0bGUnKTsKLSAgICBmb3Ig
KHZhciBwbGF0Zm9ybSBpbiBnX2ZhbGxiYWNrc01hcCkgewotICAgICAgICB2YXIgZmFsbGJhY2tz
ID0gZ19mYWxsYmFja3NNYXBbcGxhdGZvcm1dOwotICAgICAgICB2YXIgd2lubmVyID0gbnVsbDsK
LSAgICAgICAgdmFyIHdpbm5pbmdJbmRleCA9IC0xOwotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRpdGxlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHRpdGxlID0gdGl0bGVz
W2ldOwotCi0gICAgICAgICAgICBpZiAoIXdpbm5lciAmJiB0aXRsZS5wbGF0Zm9ybSA9PSAiIikg
ewotICAgICAgICAgICAgICAgIHdpbm5lciA9IHRpdGxlOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcmF3UGxhdGZvcm0gPSB0aXRs
ZS5wbGF0Zm9ybSAmJiB0aXRsZS5wbGF0Zm9ybS5yZXBsYWNlKCdwbGF0Zm9ybS8nLCAnJyk7Ci0g
ICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZhbGxiYWNrcy5sZW5ndGg7IGorKykgewot
ICAgICAgICAgICAgICAgIGlmICgod2lubmluZ0luZGV4ID09IC0xIHx8IHdpbm5pbmdJbmRleCA+
IGopICYmIHJhd1BsYXRmb3JtID09IGZhbGxiYWNrc1tqXSkgewotICAgICAgICAgICAgICAgICAg
ICB3aW5uaW5nSW5kZXggPSBqOwotICAgICAgICAgICAgICAgICAgICB3aW5uZXIgPSB0aXRsZTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh3aW5uZXIpCi0gICAgICAgICAgICB3aW5uZXIu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGxhdGZvcm1zJylbMF0uaW5uZXJIVE1MICs9ICc8ZGl2
IGNsYXNzPXVzZWQtcGxhdGZvcm0+JyArIHBsYXRmb3JtICsgJzwvZGl2Pic7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGV4cGVjdGF0aW9ucyBpZGVudGlmaWVk
IGZvciB0aGlzIHRlc3QuIFRoaXMgbWVhbnMgJyArCi0gICAgICAgICAgICAgICAgJ3RoZXJlIGlz
IGEgbG9naWMgYnVnIGluIHRoZSBkYXNoYm9hcmQgZm9yIHdoaWNoIGV4cGVjdGF0aW9ucyBhICcg
KwotICAgICAgICAgICAgICAgICdwbGF0Zm9ybSB1c2VzIG9yIHRyYWMud2Via2l0Lm9yZy9zcmMu
Y2hyb21pdW0ub3JnIGlzIGdpdmluZyA1WFhzLicpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Y29uc29saWRhdGVVc2VkUGxhdGZvcm1zKGNvbnRhaW5lcik7Ci19Ci0KLS8vIENvbnNvbGlkYXRl
IHBsYXRmb3JtcyB3aGVuIGFsbCBzdWItcGxhdGZvcm1zIGZvciBhIGdpdmVuIHBsYXRmb3JtIGFy
ZSByZXByZXNlbnRlZC4KLS8vIGUuZy4sIGlmIGFsbCBvZiB0aGUgV0lOLSBwbGF0Zm9ybXMgYXJl
IHRoZXJlLCByZXBsYWNlIHRoZW0gd2l0aCBqdXN0IFdJTi4KLWZ1bmN0aW9uIGNvbnNvbGlkYXRl
VXNlZFBsYXRmb3Jtcyhjb250YWluZXIpCi17Ci0gICAgdmFyIGFsbFBsYXRmb3JtcyA9IE9iamVj
dC5rZXlzKGdfZmFsbGJhY2tzTWFwKTsKLQotICAgIHZhciBwbGF0Zm9ybUVsZW1lbnRzID0gY29u
dGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BsYXRmb3JtcycpOwotICAgIGZvciAodmFy
IGkgPSAwLCBwbGF0Zm9ybXNMZW5ndGggPSBwbGF0Zm9ybUVsZW1lbnRzLmxlbmd0aDsgaSA8IHBs
YXRmb3Jtc0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciB1c2VkUGxhdGZvcm1zID0gcGxhdGZv
cm1FbGVtZW50c1tpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd1c2VkLXBsYXRmb3JtJyk7Ci0g
ICAgICAgIGlmICghdXNlZFBsYXRmb3Jtcy5sZW5ndGgpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICB2YXIgcGxhdGZvcm1zID0ge307Ci0gICAgICAgIHBsYXRmb3Jtc1snTUFDJ10g
PSB7fTsKLSAgICAgICAgcGxhdGZvcm1zWydXSU4nXSA9IHt9OwotICAgICAgICBwbGF0Zm9ybXNb
J0xJTlVYJ10gPSB7fTsKLSAgICAgICAgYWxsUGxhdGZvcm1zLmZvckVhY2goZnVuY3Rpb24ocGxh
dGZvcm0pIHsKLSAgICAgICAgICAgIGlmIChzdHJpbmcuc3RhcnRzV2l0aChwbGF0Zm9ybSwgJ01B
QycpKQotICAgICAgICAgICAgICAgIHBsYXRmb3Jtc1snTUFDJ11bcGxhdGZvcm1dID0gMTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKHN0cmluZy5zdGFydHNXaXRoKHBsYXRmb3JtLCAnV0lOJykpCi0g
ICAgICAgICAgICAgICAgcGxhdGZvcm1zWydXSU4nXVtwbGF0Zm9ybV0gPSAxOwotICAgICAgICAg
ICAgZWxzZSBpZiAoc3RyaW5nLnN0YXJ0c1dpdGgocGxhdGZvcm0sICdMSU5VWCcpKQotICAgICAg
ICAgICAgICAgIHBsYXRmb3Jtc1snTElOVVgnXVtwbGF0Zm9ybV0gPSAxOwotICAgICAgICB9KTsK
LQotICAgICAgICBmb3IgKHZhciBqID0gMCwgdXNlZFBsYXRmb3Jtc0xlbmd0aCA9IHVzZWRQbGF0
Zm9ybXMubGVuZ3RoOyBqIDwgdXNlZFBsYXRmb3Jtc0xlbmd0aDsgaisrKSB7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXMpCi0gICAgICAgICAgICAgICAgZGVsZXRl
IHBsYXRmb3Jtc1twbGF0Zm9ybV1bdXNlZFBsYXRmb3Jtc1tqXS50ZXh0Q29udGVudF07Ci0gICAg
ICAgIH0KLQotICAgICAgICBmb3IgKHZhciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXMpIHsKLSAgICAg
ICAgICAgIGlmICghT2JqZWN0LmtleXMocGxhdGZvcm1zW3BsYXRmb3JtXSkubGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIG5vZGVzVG9SZW1vdmUgPSBbXTsKLSAgICAgICAgICAgICAgICBm
b3IgKHZhciBqID0gMCwgdXNlZFBsYXRmb3Jtc0xlbmd0aCA9IHVzZWRQbGF0Zm9ybXMubGVuZ3Ro
OyBqIDwgdXNlZFBsYXRmb3Jtc0xlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciB1c2VkUGxhdGZvcm0gPSB1c2VkUGxhdGZvcm1zW2pdOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RyaW5nLnN0YXJ0c1dpdGgodXNlZFBsYXRmb3JtLnRleHRDb250ZW50LCBwbGF0Zm9ybSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLnB1c2godXNlZFBsYXRmb3Jt
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmZv
ckVhY2goZnVuY3Rpb24oZWxlbWVudCkgeyBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
ZWxlbWVudCk7IH0pOwotICAgICAgICAgICAgICAgIHBsYXRmb3JtRWxlbWVudHNbaV0uaW5zZXJ0
QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywgJzxkaXYgY2xhc3M9dXNlZC1wbGF0Zm9ybT4nICsg
cGxhdGZvcm0gKyAnPC9kaXY+Jyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLWZ1bmN0aW9uIGFkZEV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnNDb250YWluZXJzLCBjb250
YWluZXIsIGJhc2UsCi0gICAgcGxhdGZvcm0sIHRleHQsIHBuZywgcmVmdGVzdF9odG1sX2ZpbGUs
IHJlZnRlc3RfbWlzbWF0Y2hfaHRtbF9maWxlLCBzdWl0ZSkKLXsKLSAgICB2YXIgYnVpbGRlciA9
ICcnOwotICAgIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBjb250
YWluZXIsIHBsYXRmb3JtLCB0ZXh0LCBiYXNlLCBidWlsZGVyLCBzdWl0ZSk7Ci0gICAgYWRkRXhw
ZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGNvbnRhaW5lciwgcGxhdGZvcm0s
IHBuZywgYmFzZSwgYnVpbGRlciwgc3VpdGUpOwotICAgIGFkZEV4cGVjdGF0aW9uSXRlbShleHBl
Y3RhdGlvbnNDb250YWluZXJzLCBjb250YWluZXIsIHBsYXRmb3JtLCByZWZ0ZXN0X2h0bWxfZmls
ZSwgYmFzZSwgYnVpbGRlciwgc3VpdGUpOwotICAgIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3Rh
dGlvbnNDb250YWluZXJzLCBjb250YWluZXIsIHBsYXRmb3JtLCByZWZ0ZXN0X21pc21hdGNoX2h0
bWxfZmlsZSwgYmFzZSwgYnVpbGRlciwgc3VpdGUpOwotfQotCi1mdW5jdGlvbiBleHBlY3RhdGlv
bnNUaXRsZShwbGF0Zm9ybSwgcGF0aCwgYnVpbGRlcikKLXsKLSAgICB2YXIgaGVhZGVyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnaDMnKTsKLSAgICBoZWFkZXIuY2xhc3NOYW1lID0gJ2V4cGVj
dGF0aW9ucy10aXRsZSc7Ci0KLSAgICB2YXIgaW5uZXJIVE1MOwotICAgIGlmIChidWlsZGVyKSB7
Ci0gICAgICAgIHZhciByZXN1bHRzVHlwZTsKLSAgICAgICAgaWYgKHN0cmluZy5lbmRzV2l0aChw
YXRoLCAnLWNyYXNoLWxvZy50eHQnKSkKLSAgICAgICAgICAgIHJlc3VsdHNUeXBlID0gJ1NUQUNL
VFJBQ0UnOwotICAgICAgICBlbHNlIGlmIChzdHJpbmcuZW5kc1dpdGgocGF0aCwgJy1hY3R1YWwu
dHh0JykgfHwgc3RyaW5nLmVuZHNXaXRoKHBhdGgsICctYWN0dWFsLnBuZycpKQotICAgICAgICAg
ICAgcmVzdWx0c1R5cGUgPSAnQUNUVUFMIFJFU1VMVFMnOwotICAgICAgICBlbHNlIGlmIChzdHJp
bmcuZW5kc1dpdGgocGF0aCwgJy13ZGlmZi5odG1sJykpCi0gICAgICAgICAgICByZXN1bHRzVHlw
ZSA9ICdXRElGRic7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdHNUeXBlID0gJ0RJ
RkYnOwotCi0gICAgICAgIGlubmVySFRNTCA9IHJlc3VsdHNUeXBlICsgJzogJyArIGJ1aWxkZXI7
Ci0gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gIiIpIHsKLSAgICAgICAgdmFyIHBhcnRzID0g
cGF0aC5zcGxpdCgnLycpOwotICAgICAgICBpbm5lckhUTUwgPSBwYXJ0c1twYXJ0cy5sZW5ndGgg
LSAxXTsKLSAgICB9IGVsc2UKLSAgICAgICAgaW5uZXJIVE1MID0gcGxhdGZvcm0gfHwgcGF0aDsK
LQotICAgIGhlYWRlci5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz10aXRsZT4nICsgaW5uZXJIVE1M
ICsKLSAgICAgICAgJzwvZGl2PjxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiPiZuYnNwOzwvZGl2Picg
KwotICAgICAgICAnPGRpdiBjbGFzcz1wbGF0Zm9ybXMgc3R5bGU9ImZsb2F0OnJpZ2h0Ij48L2Rp
dj4nOwotICAgIGhlYWRlci5wbGF0Zm9ybSA9IHBsYXRmb3JtOwotICAgIHJldHVybiBoZWFkZXI7
Ci19Ci0KLWZ1bmN0aW9uIGxvYWRFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zQ29udGFpbmVyKQot
ewotICAgIHZhciB0ZXN0ID0gZXhwZWN0YXRpb25zQ29udGFpbmVyLmdldEF0dHJpYnV0ZSgndGVz
dCcpOwotICAgIGlmIChnX2hpc3RvcnkuaXNMYXlvdXRUZXN0UmVzdWx0cygpKQotICAgICAgICBs
b2FkRXhwZWN0YXRpb25zTGF5b3V0VGVzdHModGVzdCwgZXhwZWN0YXRpb25zQ29udGFpbmVyKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgdmFyIHJlc3VsdHMgPSBnX3Rlc3RUb1Jlc3VsdHNNYXBbdGVz
dF07Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykKLSAg
ICAgICAgICAgIGlmIChnX2hpc3RvcnkuaXNHUFVUZXN0UmVzdWx0cygpKQotICAgICAgICAgICAg
ICAgIGxvYWRHUFVSZXN1bHRzRm9yQnVpbGRlcihyZXN1bHRzW2ldLmJ1aWxkZXIsIHRlc3QsIGV4
cGVjdGF0aW9uc0NvbnRhaW5lcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bG9hZE5vbldlYktpdFJlc3VsdHNGb3JCdWlsZGVyKHJlc3VsdHNbaV0uYnVpbGRlciwgdGVzdCwg
ZXhwZWN0YXRpb25zQ29udGFpbmVyKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGdwdVJlc3VsdHNQ
YXRoKGNocm9tZVJldmlzaW9uLCBidWlsZGVyKQotewotICByZXR1cm4gY2hyb21lUmV2aXNpb24g
KyAnXycgKyBidWlsZGVyLnJlcGxhY2UoL1teQS1aYS16MC05XSsvZywgJ18nKTsKLX0KLQotZnVu
Y3Rpb24gbG9hZEdQVVJlc3VsdHNGb3JCdWlsZGVyKGJ1aWxkZXIsIHRlc3QsIGV4cGVjdGF0aW9u
c0NvbnRhaW5lcikKLXsKLSAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7Ci0gICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICdleHBlY3RhdGlvbnMtY29udGFp
bmVyJzsKLSAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXY+PGI+JyArIGJ1aWxkZXIgKyAn
PC9iPjwvZGl2Pic7Ci0gICAgZXhwZWN0YXRpb25zQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRh
aW5lcik7Ci0KLSAgICB2YXIgZmFpbHVyZUluZGV4ID0gaW5kZXhlc0ZvckZhaWx1cmVzKGJ1aWxk
ZXIsIHRlc3QpWzBdOwotCi0gICAgdmFyIGJ1aWxkTnVtYmVyID0gZ19yZXN1bHRzQnlCdWlsZGVy
W2J1aWxkZXJdLmJ1aWxkTnVtYmVyc1tmYWlsdXJlSW5kZXhdOwotICAgIHZhciBwYXRoVG9Mb2cg
PSBidWlsZGVyTWFzdGVyKGJ1aWxkZXIpLmxvZ1BhdGgoYnVpbGRlciwgYnVpbGROdW1iZXIpICsg
cGF0aFRvRmFpbHVyZUxvZyh0ZXN0KTsKLQotICAgIHZhciBjaHJvbWVSZXZpc2lvbiA9IGdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyXS5jaHJvbWVSZXZpc2lvbltmYWlsdXJlSW5kZXhdOwotICAg
IHZhciByZXN1bHRzVXJsID0gR1BVX1JFU1VMVFNfQkFTRV9QQVRIICsgZ3B1UmVzdWx0c1BhdGgo
Y2hyb21lUmV2aXNpb24sIGJ1aWxkZXIpOwotICAgIHZhciBmaWxlbmFtZSA9IHRlc3Quc3BsaXQo
L1wuLylbMV0gKyAnLnBuZyc7Ci0KLSAgICBhcHBlbmROb25XZWJLaXRSZXN1bHRzKGNvbnRhaW5l
ciwgcGF0aFRvTG9nLCAnbm9uLXdlYmtpdC1yZXN1bHRzJyk7Ci0gICAgYXBwZW5kTm9uV2ViS2l0
UmVzdWx0cyhjb250YWluZXIsIHJlc3VsdHNVcmwgKyAnL2dlbi8nICsgZmlsZW5hbWUsICdncHUt
dGVzdC1yZXN1bHRzJywgJ0dlbmVyYXRlZCcpOwotICAgIGFwcGVuZE5vbldlYktpdFJlc3VsdHMo
Y29udGFpbmVyLCByZXN1bHRzVXJsICsgJy9yZWYvJyArIGZpbGVuYW1lLCAnZ3B1LXRlc3QtcmVz
dWx0cycsICdSZWZlcmVuY2UnKTsKLSAgICBhcHBlbmROb25XZWJLaXRSZXN1bHRzKGNvbnRhaW5l
ciwgcmVzdWx0c1VybCArICcvZGlmZi8nICsgZmlsZW5hbWUsICdncHUtdGVzdC1yZXN1bHRzJywg
J0RpZmYnKTsKLX0KLQotZnVuY3Rpb24gbG9hZE5vbldlYktpdFJlc3VsdHNGb3JCdWlsZGVyKGJ1
aWxkZXIsIHRlc3QsIGV4cGVjdGF0aW9uc0NvbnRhaW5lcikKLXsKLSAgICB2YXIgZmFpbHVyZUlu
ZGV4ZXMgPSBpbmRleGVzRm9yRmFpbHVyZXMoYnVpbGRlciwgdGVzdCk7Ci0gICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGNvbnRhaW5lci5pbm5l
ckhUTUwgPSAnPGRpdj48Yj4nICsgYnVpbGRlciArICc8L2I+PC9kaXY+JzsKLSAgICBleHBlY3Rh
dGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGZhaWx1cmVJbmRleGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGFueW1vcmUuIERpZCB0aGUgcGF0aHMgY2hhbmdlPwot
ICAgICAgICAvLyBPbmNlIHRoYXQncyByZXNvbHZlZCwgc2VlIGlmIHdlIG5lZWQgdG8gdHJ5IGVh
Y2ggR1RFU1RfTU9ESUZJRVJTIHByZWZpeCBhcyB3ZWxsLgotICAgICAgICB2YXIgYnVpbGROdW1i
ZXIgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uYnVpbGROdW1iZXJzW2ZhaWx1cmVJbmRl
eGVzW2ldXTsKLSAgICAgICAgdmFyIHBhdGhUb0xvZyA9IGJ1aWxkZXJNYXN0ZXIoYnVpbGRlciku
bG9nUGF0aChidWlsZGVyLCBidWlsZE51bWJlcikgKyBwYXRoVG9GYWlsdXJlTG9nKHRlc3QpOwot
ICAgICAgICBhcHBlbmROb25XZWJLaXRSZXN1bHRzKGNvbnRhaW5lciwgcGF0aFRvTG9nLCAnbm9u
LXdlYmtpdC1yZXN1bHRzJyk7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBhcHBlbmROb25XZWJLaXRS
ZXN1bHRzKGNvbnRhaW5lciwgdXJsLCBpdGVtQ2xhc3NOYW1lLCBvcHRfdGl0bGUpCi17Ci0gICAg
Ly8gVXNlIGEgc2NyaXB0IHRhZyB0byBkZXRlY3Qgd2hldGhlciB0aGUgVVJMIDQwNHMuCi0gICAg
Ly8gTmVlZCB0byB1c2UgYSBzY3JpcHQgdGFnIHNpbmNlIHRoZSBVUkwgaXMgY3Jvc3MtZG9tYWlu
LgotICAgIHZhciBkdW1teU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsK
LSAgICBkdW1teU5vZGUuc3JjID0gdXJsOwotCi0gICAgZHVtbXlOb2RlLm9ubG9hZCA9IGZ1bmN0
aW9uKCkgewotICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFt
ZScpOwotICAgICAgICBpdGVtLnNyYyA9IGR1bW15Tm9kZS5zcmM7Ci0gICAgICAgIGl0ZW0uY2xh
c3NOYW1lID0gaXRlbUNsYXNzTmFtZTsKLSAgICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBnX2hp
c3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5yZXN1bHRzSGVpZ2h0ICsgJ3B4JzsKLQotICAg
ICAgICBpZiAob3B0X3RpdGxlKSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGRDb250YWluZXIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgICAgIGNoaWxkQ29udGFpbmVy
LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsKLSAgICAgICAgICAgIHZhciB0aXRsZSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICAgICAgdGl0bGUudGV4dENv
bnRlbnQgPSBvcHRfdGl0bGU7Ci0gICAgICAgICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGls
ZCh0aXRsZSk7Ci0gICAgICAgICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtKTsK
LSAgICAgICAgICAgIGNvbnRhaW5lci5yZXBsYWNlQ2hpbGQoY2hpbGRDb250YWluZXIsIGR1bW15
Tm9kZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGFpbmVyLnJlcGxhY2VDaGls
ZChpdGVtLCBkdW1teU5vZGUpOwotICAgIH0KLSAgICBkdW1teU5vZGUub25lcnJvciA9IGZ1bmN0
aW9uKCkgewotICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoZHVtbXlOb2RlKTsKLSAgICB9
Ci0KLSAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZHVtbXlOb2RlKTsKLX0KLQotZnVuY3Rpb24g
YnVpbGRJbmZvRm9yUmV2aXNpb24oYnVpbGRlciwgcmV2aXNpb24pCi17Ci0gICAgdmFyIHJldmlz
aW9ucyA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvbjsKLSAgICB2
YXIgcmV2aXNpb25TdGFydCA9IDAsIHJldmlzaW9uRW5kID0gMCwgYnVpbGROdW1iZXIgPSAwOwot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmV2aXNpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IGlmIChyZXZpc2lvbiA+IHJldmlzaW9uc1tpXSkgewotICAgICAgICAgICAgcmV2aXNpb25TdGFy
dCA9IHJldmlzaW9uc1tpIC0gMV07Ci0gICAgICAgICAgICByZXZpc2lvbkVuZCA9IHJldmlzaW9u
c1tpXTsKLSAgICAgICAgICAgIGJ1aWxkTnVtYmVyID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJdLmJ1aWxkTnVtYmVyc1tpIC0gMV07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChyZXZpc2lvbkVuZCkKLSAgICAgIHJldmlzaW9uRW5kKys7Ci0gICAg
ZWxzZQotICAgICAgcmV2aXNpb25FbmQgPSAnJzsKLQotICAgIHJldHVybiB7cmV2aXNpb25TdGFy
dDogcmV2aXNpb25TdGFydCwgcmV2aXNpb25FbmQ6IHJldmlzaW9uRW5kLCBidWlsZE51bWJlcjog
YnVpbGROdW1iZXJ9OwotfQotCi1mdW5jdGlvbiBsb29rdXBWaXJ0dWFsVGVzdFN1aXRlKHRlc3Qp
IHsKLSAgICBmb3IgKHZhciBzdWl0ZSBpbiBWSVJUVUFMX1NVSVRFUykgewotICAgICAgICBpZiAo
dGVzdC5pbmRleE9mKHN1aXRlKSAhPSAtMSkKLSAgICAgICAgICAgIHJldHVybiBzdWl0ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuICcnOwotfQotCi1mdW5jdGlvbiBiYXNlVGVzdCh0ZXN0LCBzdWl0ZSkg
ewotICAgIGJhc2UgPSBWSVJUVUFMX1NVSVRFU1tzdWl0ZV07Ci0gICAgcmV0dXJuIGJhc2UgPyB0
ZXN0LnJlcGxhY2Uoc3VpdGUsIGJhc2UpIDogdGVzdDsKLX0KLQotZnVuY3Rpb24gbG9hZEJhc2Vs
aW5lc0ZvclRlc3QoZXhwZWN0YXRpb25zQ29udGFpbmVycywgZXhwZWN0YXRpb25zQ29udGFpbmVy
LCB0ZXN0KSB7Ci0gICAgdmFyIHRlc3RXaXRob3V0U3VmZml4ID0gdGVzdC5zdWJzdHJpbmcoMCwg
dGVzdC5sYXN0SW5kZXhPZignLicpKTsKLSAgICB2YXIgdGV4dCA9IHRlc3RXaXRob3V0U3VmZml4
ICsgIi1leHBlY3RlZC50eHQiOwotICAgIHZhciBwbmcgPSB0ZXN0V2l0aG91dFN1ZmZpeCArICIt
ZXhwZWN0ZWQucG5nIjsKLSAgICB2YXIgcmVmdGVzdF9odG1sX2ZpbGUgPSB0ZXN0V2l0aG91dFN1
ZmZpeCArICItZXhwZWN0ZWQuaHRtbCI7Ci0gICAgdmFyIHJlZnRlc3RfbWlzbWF0Y2hfaHRtbF9m
aWxlID0gdGVzdFdpdGhvdXRTdWZmaXggKyAiLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwiOwotICAg
IHZhciBzdWl0ZSA9IGxvb2t1cFZpcnR1YWxUZXN0U3VpdGUodGVzdCk7Ci0KLSAgICBpZiAoIXN1
aXRlKQotICAgICAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywg
ZXhwZWN0YXRpb25zQ29udGFpbmVyLCBudWxsLCB0ZXN0LCBURVNUX1VSTF9CQVNFX1BBVEgpOwot
Ci0gICAgYWRkRXhwZWN0YXRpb25zKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9u
c0NvbnRhaW5lciwKLSAgICAgICAgVEVTVF9VUkxfQkFTRV9QQVRILCAnJywgdGV4dCwgcG5nLCBy
ZWZ0ZXN0X2h0bWxfZmlsZSwgcmVmdGVzdF9taXNtYXRjaF9odG1sX2ZpbGUsIHN1aXRlKTsKLQot
ICAgIHZhciBmYWxsYmFja3MgPSBhbGxGYWxsYmFja3MoKTsKLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGZhbGxiYWNrcy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIGZhbGxiYWNrID0gJ3BsYXRm
b3JtLycgKyBmYWxsYmFja3NbaV07Ci0gICAgICBhZGRFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25z
Q29udGFpbmVycywgZXhwZWN0YXRpb25zQ29udGFpbmVyLCBURVNUX1VSTF9CQVNFX1BBVEgsIGZh
bGxiYWNrLCB0ZXh0LCBwbmcsCi0gICAgICAgICAgcmVmdGVzdF9odG1sX2ZpbGUsIHJlZnRlc3Rf
bWlzbWF0Y2hfaHRtbF9maWxlLCBzdWl0ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN1aXRlKQotICAg
ICAgICBsb2FkQmFzZWxpbmVzRm9yVGVzdChleHBlY3RhdGlvbnNDb250YWluZXJzLCBleHBlY3Rh
dGlvbnNDb250YWluZXIsIGJhc2VUZXN0KHRlc3QsIHN1aXRlKSk7Ci19Ci0KLWZ1bmN0aW9uIGxv
YWRFeHBlY3RhdGlvbnNMYXlvdXRUZXN0cyh0ZXN0LCBleHBlY3RhdGlvbnNDb250YWluZXIpCi17
Ci0gICAgLy8gTWFwIGZyb20gZmlsZSBleHRlbnNpb24gdG8gY29udGFpbmVyIGRpdiBmb3IgZXhw
ZWN0YXRpb25zIG9mIHRoYXQgdHlwZS4KLSAgICB2YXIgZXhwZWN0YXRpb25zQ29udGFpbmVycyA9
IHt9OwotCi0gICAgdmFyIHJldmlzaW9uQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7Ci0gICAgcmV2aXNpb25Db250YWluZXIudGV4dENvbnRlbnQgPSAiU2hvd2luZyBy
ZXN1bHRzIGZvcjogIgotICAgIGV4cGVjdGF0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyZXZp
c2lvbkNvbnRhaW5lcik7Ci0gICAgZm9yICh2YXIgYnVpbGRlciBpbiBjdXJyZW50QnVpbGRlcnMo
KSkgewotICAgICAgICBpZiAoYnVpbGRlck1hc3RlcihidWlsZGVyKS5uYW1lID09IFdFQktJVF9C
VUlMREVSX01BU1RFUikgewotICAgICAgICAgICAgdmFyIGxhdGVzdFJldmlzaW9uID0gZ19oaXN0
b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmV2aXNpb24gfHwgZ19yZXN1bHRzQnlCdWlsZGVy
W2J1aWxkZXJdLndlYmtpdFJldmlzaW9uWzBdOwotICAgICAgICAgICAgdmFyIGJ1aWxkSW5mbyA9
IGJ1aWxkSW5mb0ZvclJldmlzaW9uKGJ1aWxkZXIsIGxhdGVzdFJldmlzaW9uKTsKLSAgICAgICAg
ICAgIHZhciByZXZpc2lvbkluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAg
ICAgICAgICAgIHJldmlzaW9uSW5mby5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tncm91bmQ6bGlnaHRn
cmF5O21hcmdpbjowIDNweDtwYWRkaW5nOjAgMnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrOyc7Ci0g
ICAgICAgICAgICByZXZpc2lvbkluZm8uaW5uZXJIVE1MID0gYnVpbGRlciArICcgcicgKyBidWls
ZEluZm8ucmV2aXNpb25FbmQgKwotICAgICAgICAgICAgICAgICc6cicgKyBidWlsZEluZm8ucmV2
aXNpb25TdGFydCArICcsIGJ1aWxkICcgKyBidWlsZEluZm8uYnVpbGROdW1iZXI7Ci0gICAgICAg
ICAgICByZXZpc2lvbkNvbnRhaW5lci5hcHBlbmRDaGlsZChyZXZpc2lvbkluZm8pOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbG9hZEJhc2VsaW5lc0ZvclRlc3QoZXhwZWN0YXRpb25zQ29udGFp
bmVycywgZXhwZWN0YXRpb25zQ29udGFpbmVyLCB0ZXN0KTsKLSAgICAgICAgCi0gICAgdmFyIHRl
c3RXaXRob3V0U3VmZml4ID0gdGVzdC5zdWJzdHJpbmcoMCwgdGVzdC5sYXN0SW5kZXhPZignLicp
KTsKLSAgICB2YXIgYWN0dWFsUmVzdWx0U3VmZml4ZXMgPSBbJy1hY3R1YWwudHh0JywgJy1hY3R1
YWwucG5nJywgJy1jcmFzaC1sb2cudHh0JywgJy1kaWZmLnR4dCcsICctd2RpZmYuaHRtbCcsICct
ZGlmZi5wbmcnXTsKLQotICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gY3VycmVudEJ1aWxkZXJzKCkp
IHsKLSAgICAgICAgdmFyIGFjdHVhbFJlc3VsdHNCYXNlOwotICAgICAgICBpZiAoYnVpbGRlck1h
c3RlcihidWlsZGVyKS5uYW1lID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgewotICAgICAgICAg
ICAgdmFyIGxhdGVzdFJldmlzaW9uID0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUu
cmV2aXNpb24gfHwgZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uWzBd
OwotICAgICAgICAgICAgdmFyIGJ1aWxkSW5mbyA9IGJ1aWxkSW5mb0ZvclJldmlzaW9uKGJ1aWxk
ZXIsIGxhdGVzdFJldmlzaW9uKTsKLSAgICAgICAgICAgIGFjdHVhbFJlc3VsdHNCYXNlID0gJ2h0
dHA6Ly9idWlsZC53ZWJraXQub3JnL3Jlc3VsdHMvJyArIGJ1aWxkZXIgKwotICAgICAgICAgICAg
ICAgICcvcicgKyBidWlsZEluZm8ucmV2aXNpb25TdGFydCArICcgKCcgKyBidWlsZEluZm8uYnVp
bGROdW1iZXIgKyAnKS8nOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFjdHVhbFJlc3Vs
dHNCYXNlID0gVEVTVF9SRVNVTFRTX0JBU0VfUEFUSCArIGN1cnJlbnRCdWlsZGVycygpW2J1aWxk
ZXJdICsgJy9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvJzsKLQotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFjdHVhbFJlc3VsdFN1ZmZpeGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgZXhwZWN0YXRp
b25zQ29udGFpbmVyLCBudWxsLAotICAgICAgICAgICAgICAgIHRlc3RXaXRob3V0U3VmZml4ICsg
YWN0dWFsUmVzdWx0U3VmZml4ZXNbaV0sIGFjdHVhbFJlc3VsdHNCYXNlLCBidWlsZGVyKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIEFkZCBhIGNsZWFyaW5nIGVsZW1lbnQgc28gZmxvYXRl
ZCBlbGVtZW50cyBkb24ndCBibGVlZCBvdXQgb2YgdGhlaXIKLSAgICAvLyBjb250YWluaW5nIGJs
b2NrLgotICAgIHZhciBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyk7Ci0gICAgYnIu
c3R5bGUuY2xlYXIgPSAnYm90aCc7Ci0gICAgZXhwZWN0YXRpb25zQ29udGFpbmVyLmFwcGVuZENo
aWxkKGJyKTsKLX0KLQotdmFyIGdfYWxsRmFsbGJhY2tzOwotCi0vLyBSZXR1cm5zIHRoZSByZXZl
cnNlIHNvcnRlZCwgZGVkdXBlZCBsaXN0IG9mIGFsbCBwbGF0Zm9ybSBmYWxsYmFjawotLy8gZGly
ZWN0b3JpZXMuCi1mdW5jdGlvbiBhbGxGYWxsYmFja3MoKQotewotICAgIGlmICghZ19hbGxGYWxs
YmFja3MpIHsKLSAgICAgICAgdmFyIGhvbGRlciA9IHt9OwotICAgICAgICBmb3IgKHZhciBwbGF0
Zm9ybSBpbiBnX2ZhbGxiYWNrc01hcCkgewotICAgICAgICAgICAgdmFyIGZhbGxiYWNrcyA9IGdf
ZmFsbGJhY2tzTWFwW3BsYXRmb3JtXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ZmFsbGJhY2tzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGhvbGRlcltmYWxsYmFja3Nb
aV1dID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGdfYWxsRmFsbGJhY2tzID0gW107Ci0gICAg
ICAgIGZvciAodmFyIGZhbGxiYWNrIGluIGhvbGRlcikKLSAgICAgICAgICAgIGdfYWxsRmFsbGJh
Y2tzLnB1c2goZmFsbGJhY2spOwotCi0gICAgICAgIGdfYWxsRmFsbGJhY2tzLnNvcnQoZnVuY3Rp
b24oYSwgYikgewotICAgICAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBhIDwgYjsKLSAgICAgICAgfSk7Ci0gICAgfQotICAg
IHJldHVybiBnX2FsbEZhbGxiYWNrczsKLX0KLQotZnVuY3Rpb24gYXBwZW5kRXhwZWN0YXRpb25z
KCkKLXsKLSAgICB2YXIgZXhwZWN0YXRpb25zID0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmlj
U3RhdGUuc2hvd0V4cGVjdGF0aW9ucyA/IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
J2V4cGVjdGF0aW9ucycpIDogW107Ci0gICAgLy8gTG9hZGluZyBleHBlY3RhdGlvbnMgaXMgKnZl
cnkqIHNsb3cuIFVzZSBhIGxhcmdlIHRpbWVvdXQgdG8gYXZvaWQKLSAgICAvLyB0b3RhbGx5IGhh
bmdpbmcgdGhlIHJlbmRlcmVyLgotICAgIHBlcmZvcm1DaHVua2VkQWN0aW9uKGV4cGVjdGF0aW9u
cywgZnVuY3Rpb24oY2h1bmspIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNodW5r
Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKQotICAgICAgICAgICAgbG9hZEV4cGVjdGF0aW9ucyhjaHVu
a1tpXSk7Ci0gICAgICAgIHBvc3RIZWlnaHRDaGFuZ2VkTWVzc2FnZSgpOwotCi0gICAgfSwgaGlk
ZUxvYWRpbmdVSSwgMTAwMDApOwotfQotCiBmdW5jdGlvbiBoaWRlTG9hZGluZ1VJKCkKIHsKICAg
ICB2YXIgbG9hZGluZ0RpdiA9ICQoJ2xvYWRpbmctdWknKTsKQEAgLTIyOTEsNyArMTU0Myw3IEBA
IGZ1bmN0aW9uIGdlbmVyYXRlUGFnZUZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cykKICAgICAgICAg
YXBwZW5kSFRNTChodG1sRm9yTmF2QmFyKCkpOwogICAgIHBlcmZvcm1DaHVua2VkQWN0aW9uKHRl
c3RzLCBmdW5jdGlvbihjaHVuaykgewogICAgICAgICBhcHBlbmRIVE1MKGh0bWxGb3JJbmRpdmlk
dWFsVGVzdHMoY2h1bmspKTsKLSAgICB9LCBhcHBlbmRFeHBlY3RhdGlvbnMsIDUwMCk7CisgICAg
fSwgaGlkZUxvYWRpbmdVSSwgNTAwKTsKICAgICBpZiAoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNp
ZmljU3RhdGUuc2hvd0Nocm9tZSkKICAgICAgICAgJCgndGVzdHMtaW5wdXQnKS52YWx1ZSA9IGdf
aGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRlc3RzOwogfQpAQCAtMjMxNywxNSArMTU2
OSwxMyBAQCBmdW5jdGlvbiBodG1sRm9ySW5kaXZpZHVhbFRlc3RzKHRlc3RzKQogICAgICAgICB2
YXIgdGVzdE5hbWVIdG1sID0gJyc7CiAgICAgICAgIGlmIChnX2hpc3RvcnkuZGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZS5zaG93Q2hyb21lIHx8IHRlc3RzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAg
IGlmIChnX2hpc3RvcnkuaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHN1aXRlID0gbG9va3VwVmlydHVhbFRlc3RTdWl0ZSh0ZXN0KTsKLSAgICAgICAgICAgICAg
ICB2YXIgYmFzZSA9IHN1aXRlID8gYmFzZVRlc3QodGVzdCwgc3VpdGUpIDogdGVzdDsKLSAgICAg
ICAgICAgICAgICB2YXIgdHJhY1VSTCA9IFRFU1RfVVJMX0JBU0VfUEFUSF9UUkFDICsgYmFzZTsK
KyAgICAgICAgICAgICAgICB2YXIgdHJhY1VSTCA9IFRFU1RfVVJMX0JBU0VfUEFUSF9UUkFDICsg
dGVzdDsKICAgICAgICAgICAgICAgICB0ZXN0TmFtZUh0bWwgKz0gJzxoMj4nICsgbGlua0hUTUxU
b09wZW5XaW5kb3codHJhY1VSTCwgdGVzdCkgKyAnPC9oMj4nOwogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgdGVzdE5hbWVIdG1sICs9ICc8aDI+JyArIHRlc3QgKyAnPC9oMj4n
OwogICAgICAgICB9CiAKLSAgICAgICAgdGVzdHNIVE1MLnB1c2godGVzdE5hbWVIdG1sICsgaHRt
bEZvckluZGl2aWR1YWxUZXN0T25BbGxCdWlsZGVyc1dpdGhSZXN1bHRzTGlua3ModGVzdCkpOwor
ICAgICAgICB0ZXN0c0hUTUwucHVzaCh0ZXN0TmFtZUh0bWwgKyBodG1sRm9ySW5kaXZpZHVhbFRl
c3RPbkFsbEJ1aWxkZXJzKHRlc3QpKTsKICAgICB9CiAgICAgcmV0dXJuIHRlc3RzSFRNTC5qb2lu
KCc8aHI+Jyk7CiB9CkBAIC0yNDMyLDE0ICsxNjgyLDYgQEAgZnVuY3Rpb24gaGlkZUxlZ2VuZCgp
CiAgICAgICAgIGxlZ2VuZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxlZ2VuZCk7CiB9CiAKLXZh
ciBnX2ZhbGxiYWNrc01hcCA9IHt9OwotZ19mYWxsYmFja3NNYXBbJ1dJTi1YUCddID0gWydjaHJv
bWl1bS13aW4teHAnLCAnY2hyb21pdW0td2luJywgJ2Nocm9taXVtJ107Ci1nX2ZhbGxiYWNrc01h
cFsnV0lOLTcnXSA9IFsnY2hyb21pdW0td2luJywgJ2Nocm9taXVtJ107Ci1nX2ZhbGxiYWNrc01h
cFsnTUFDLVNOT1dMRU9QQVJEJ10gPSBbJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcsICdjaHJv
bWl1bS1tYWMnLCAnY2hyb21pdW0nXTsKLWdfZmFsbGJhY2tzTWFwWydNQUMtTElPTiddID0gWydj
aHJvbWl1bS1tYWMnLCAnY2hyb21pdW0nXTsKLWdfZmFsbGJhY2tzTWFwWydMSU5VWC0zMiddID0g
WydjaHJvbWl1bS1saW51eC14ODYnLCAnY2hyb21pdW0tbGludXgnLCAnY2hyb21pdW0td2luJywg
J2Nocm9taXVtJ107Ci1nX2ZhbGxiYWNrc01hcFsnTElOVVgtNjQnXSA9IFsnY2hyb21pdW0tbGlu
dXgnLCAnY2hyb21pdW0td2luJywgJ2Nocm9taXVtJ107Ci0KIGZ1bmN0aW9uIHNob3dMZWdlbmQo
KQogewogICAgIHZhciBsZWdlbmQgPSAkKCdsZWdlbmQnKTsK
</data>
<flag name="review"
          id="222246"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>