<?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>33128</bug_id>
          
          <creation_ts>2010-01-03 22:49:53 -0800</creation_ts>
          <short_desc>Rename Scripts/modules to Scripts/webkitpy</short_desc>
          <delta_ts>2010-01-03 23:08:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>176530</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-03 22:49:53 -0800</bug_when>
    <thetext>Rename Scripts/modules to Scripts/webkitpy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176532</commentid>
    <comment_count>1</comment_count>
      <attachid>45766</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-03 22:54:27 -0800</bug_when>
    <thetext>Created attachment 45766
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176533</commentid>
    <comment_count>2</comment_count>
      <attachid>45766</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-03 22:55:40 -0800</bug_when>
    <thetext>Comment on attachment 45766
Patch

Rubber stamped.  I saw the search/replace process and it looked correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176534</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-03 23:08:01 -0800</bug_when>
    <thetext>Had troubles with bzt, closing manually.  Landed as:
http://trac.webkit.org/changeset/52703</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45766</attachid>
            <date>2010-01-03 22:54:27 -0800</date>
            <delta_ts>2010-01-03 22:55:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33128-20100103225423.patch</filename>
            <type>text/plain</type>
            <size>815837</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEzIEBACisyMDEwLTAxLTAzICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW5hbWUgU2NyaXB0cy9tb2R1bGVzIHRvIFNjcmlwdHMvd2Via2l0cHkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMTI4CisKKyAgICAg
ICAgSnVzdCBzZWFyY2gtcmVwbGFjZSBhbmQgc3ZuIG12IGNvbW1hbmRzLgorCisgICAgICAgICog
U2NyaXB0cy9idWd6aWxsYS10b29sOgorICAgICAgICAqIFNjcmlwdHMvY2hlY2std2Via2l0LXN0
eWxlOgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlczogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL21vZHVsZXMvQmVhdXRpZnVsU291cC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRz
L21vZHVsZXMvX19pbml0X18ucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVz
L2J1Z3ppbGxhLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9idWd6aWxs
YV91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvYnVpbGRi
b3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2J1aWxkYm90X3VuaXR0
ZXN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9idWlsZHN0ZXBzLnB5
OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9idWlsZHN0ZXBzX3VuaXR0ZXN0
LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jaGFuZ2Vsb2dzLnB5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jaGFuZ2Vsb2dzX3VuaXR0ZXN0LnB5
OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jb21tYW5kczogUmVtb3ZlZC4K
KyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvX19pbml0X18ucHk6IFJlbW92ZWQu
CisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL2NvbW1hbmR0ZXN0LnB5OiBSZW1v
dmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jb21tYW5kcy9kb3dubG9hZC5weTogUmVt
b3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvZG93bmxvYWRfdW5pdHRl
c3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL2Vhcmx5
X3dhcm5pbmdfc3lzdGVtLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9j
b21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3RlbV91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVlcmllcy5weTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVldWVzLnB5OiBSZW1vdmVk
LgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHk6
IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXVlc3Rlc3Qu
cHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3VwbG9hZC5w
eTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvdXBsb2FkX3Vu
aXR0ZXN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jb21tZW50cy5w
eTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY29tbWl0dGVycy5weTogUmVt
b3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY29tbWl0dGVyc191bml0dGVzdC5weTog
UmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlLnB5OiBSZW1vdmVk
LgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGVfdW5pdHRlc3QucHk6IFJlbW92
ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NyZWRlbnRpYWxzLnB5OiBSZW1vdmVkLgor
ICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcmVkZW50aWFsc191bml0dGVzdC5weTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvZGlmZl9wYXJzZXIucHk6IFJlbW92ZWQuCisg
ICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2RpZmZfcGFyc2VyX3VuaXR0ZXN0LnB5OiBSZW1vdmVk
LgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9leGVjdXRpdmUucHk6IFJlbW92ZWQuCisgICAg
ICAgICogU2NyaXB0cy9tb2R1bGVzL2V4ZWN1dGl2ZV91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL21vZHVsZXMvZ3JhbW1hci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL21vZHVsZXMvbW9jay5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVs
ZXMvbW9ja19idWd6aWxsYXRvb2wucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1
bGVzL211bHRpY29tbWFuZHRvb2wucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1
bGVzL211bHRpY29tbWFuZHRvb2xfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2Ny
aXB0cy9tb2R1bGVzL291dHB1dGNhcHR1cmUucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0
cy9tb2R1bGVzL3BhdGNoY29sbGVjdGlvbi5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRz
L21vZHVsZXMvcXVldWVlbmdpbmUucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1
bGVzL3F1ZXVlZW5naW5lX3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMv
bW9kdWxlcy9zY20ucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL3NjbV91
bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvc3RhdHVzYm90
LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9zdGVwc2VxdWVuY2UucHk6
IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL3N0eWxlOiBSZW1vdmVkLgorICAg
ICAgICAqIFNjcmlwdHMvbW9kdWxlcy9zdHlsZS5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL21vZHVsZXMvc3R5bGVfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0
cy9tb2R1bGVzL3RleHRfc3R5bGUucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1
bGVzL3RleHRfc3R5bGVfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9t
b2R1bGVzL3VzZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL3dlYmtp
dF9sb2dnaW5nLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy93ZWJraXRf
bG9nZ2luZ191bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMv
d2Via2l0X21lY2hhbml6ZS5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMv
d2Via2l0cG9ydC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvd2Via2l0
cG9ydF91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3Qtd2Via2l0
LXB5dGhvbjogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3Qtd2Via2l0cHk6IENvcGll
ZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXQtcHl0aG9uLgorICAgICAgICAq
IFNjcmlwdHMvdmFsaWRhdGUtY29tbWl0dGVyLWxpc3RzOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHk6IENvcGllZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxhLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvYnVnemlsbGFfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9idWls
ZGJvdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2J1aWxkYm90X3VuaXR0ZXN0LnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYnVpbGRzdGVwcy5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2J1aWxkc3RlcHNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tYW5kcy9jb21tYW5kdGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1hbmRzL2Rvd25sb2FkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbWFuZHMvZG93bmxvYWRfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdfc3lzdGVtX3VuaXR0ZXN0LnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVlcmllcy5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tYW5kcy9xdWV1ZXMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tYW5kcy9xdWV1ZXN0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbWFuZHMvdXBsb2FkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMv
dXBsb2FkX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbWVudHMu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jcmVkZW50aWFscy5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NyZWRlbnRpYWxzX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvZXhlY3V0aXZlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
ZXhlY3V0aXZlX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbW9ja19i
dWd6aWxsYXRvb2wucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9tdWx0aWNvbW1hbmR0
b29sLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbXVsdGljb21tYW5kdG9vbF91bml0
dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3F1ZXVlZW5naW5lLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcXVldWVlbmdpbmVfdW5pdHRlc3QucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9zY20ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
Y21fdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGF0dXNib3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwc2VxdWVuY2UucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS93ZWJraXRfbG9nZ2luZ191bml0dGVzdC5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3dlYmtpdHBvcnRfdW5pdHRlc3QucHk6CisKIDIwMTAtMDEtMDMgIENo
cmlzIEplcmRvbmVrICA8Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10
b29sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbAkocmV2
aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDE4ICszMiwxOCBAQAogCiBpbXBvcnQgb3MKIAotZnJvbSBtb2R1bGVz
LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYQotZnJvbSBtb2R1bGVzLmJ1aWxkYm90IGltcG9ydCBC
dWlsZEJvdAotZnJvbSBtb2R1bGVzLmNvbW1hbmRzLmRvd25sb2FkIGltcG9ydCAqCi1mcm9tIG1v
ZHVsZXMuY29tbWFuZHMuZWFybHlfd2FybmluZ19zeXN0ZW0gaW1wb3J0ICoKLWZyb20gbW9kdWxl
cy5jb21tYW5kcy5xdWVyaWVzIGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuY29tbWFuZHMucXVldWVz
IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuY29tbWFuZHMudXBsb2FkIGltcG9ydCAqCi1mcm9tIG1v
ZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKLWZyb20gbW9kdWxlcy53ZWJraXRfbG9n
Z2luZyBpbXBvcnQgbG9nCi1mcm9tIG1vZHVsZXMubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgTXVs
dGlDb21tYW5kVG9vbAotZnJvbSBtb2R1bGVzLnNjbSBpbXBvcnQgZGV0ZWN0X3NjbV9zeXN0ZW0K
LWZyb20gbW9kdWxlcy51c2VyIGltcG9ydCBVc2VyCitmcm9tIHdlYmtpdHB5LmJ1Z3ppbGxhIGlt
cG9ydCBCdWd6aWxsYQorZnJvbSB3ZWJraXRweS5idWlsZGJvdCBpbXBvcnQgQnVpbGRCb3QKK2Zy
b20gd2Via2l0cHkuY29tbWFuZHMuZG93bmxvYWQgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkuY29t
bWFuZHMuZWFybHlfd2FybmluZ19zeXN0ZW0gaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkuY29tbWFu
ZHMucXVlcmllcyBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5jb21tYW5kcy5xdWV1ZXMgaW1wb3J0
ICoKK2Zyb20gd2Via2l0cHkuY29tbWFuZHMudXBsb2FkIGltcG9ydCAqCitmcm9tIHdlYmtpdHB5
LmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCitmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5n
IGltcG9ydCBsb2cKK2Zyb20gd2Via2l0cHkubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgTXVsdGlD
b21tYW5kVG9vbAorZnJvbSB3ZWJraXRweS5zY20gaW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCitm
cm9tIHdlYmtpdHB5LnVzZXIgaW1wb3J0IFVzZXIKIAogCiBjbGFzcyBCdWd6aWxsYVRvb2woTXVs
dGlDb21tYW5kVG9vbCk6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1z
dHlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHls
ZQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1z
dHlsZQkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBpbXBvcnQgb3MKIGltcG9ydCBv
cy5wYXRoCiBpbXBvcnQgc3lzCiAKLWltcG9ydCBtb2R1bGVzLnN0eWxlIGFzIHN0eWxlCi1mcm9t
IG1vZHVsZXMuc2NtIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQoraW1wb3J0IHdlYmtpdHB5LnN0
eWxlIGFzIHN0eWxlCitmcm9tIHdlYmtpdHB5LnNjbSBpbXBvcnQgZGV0ZWN0X3NjbV9zeXN0ZW0K
IAogCiBkZWYgbWFpbigpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdC1w
eXRob24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdC1weXRo
b24JKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdC1w
eXRob24JKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCi0jIENvcHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1
dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQot
ZnJvbSBtb2R1bGVzLmJ1Z3ppbGxhX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuYnVp
bGRib3RfdW5pdHRlc3QgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy5idWlsZHN0ZXBzX3VuaXR0ZXN0
IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuY2hhbmdlbG9nc191bml0dGVzdCBpbXBvcnQgKgotZnJv
bSBtb2R1bGVzLmNvbW1hbmRzLmRvd25sb2FkX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVs
ZXMuY29tbWFuZHMuZWFybHlfd2FybmluZ19zeXN0ZW1fdW5pdHRlc3QgaW1wb3J0ICoKLWZyb20g
bW9kdWxlcy5jb21tYW5kcy51cGxvYWRfdW5pdHRlc3QgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy5j
b21tYW5kcy5xdWVyaWVzX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuY29tbWFuZHMu
cXVldWVzX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuY29tbWl0dGVyc191bml0dGVz
dCBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLmNyZWRlbnRpYWxzX3VuaXR0ZXN0IGltcG9ydCAqCi1m
cm9tIG1vZHVsZXMuY3BwX3N0eWxlX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuZGlm
Zl9wYXJzZXJfdW5pdHRlc3QgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy5leGVjdXRpdmVfdW5pdHRl
c3QgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy5tdWx0aWNvbW1hbmR0b29sX3VuaXR0ZXN0IGltcG9y
dCAqCi1mcm9tIG1vZHVsZXMucXVldWVlbmdpbmVfdW5pdHRlc3QgaW1wb3J0ICoKLWZyb20gbW9k
dWxlcy5zdHlsZV91bml0dGVzdCBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLnRleHRfc3R5bGVfdW5p
dHRlc3QgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy53ZWJraXRfbG9nZ2luZ191bml0dGVzdCBpbXBv
cnQgKgotZnJvbSBtb2R1bGVzLndlYmtpdHBvcnRfdW5pdHRlc3QgaW1wb3J0ICoKLQotaWYgX19u
YW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICAjIEZJWE1FOiBUaGlzIGlzIGEgaGFjaywgYnV0IEkn
bSB0aXJlZCBvZiBjb21tZW50aW5nIG91dCB0aGUgdGVzdC4KLSAgICAjICAgICAgICBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxODE4Ci0gICAgaWYgbGVuKHN5
cy5hcmd2KSA+IDEgYW5kIHN5cy5hcmd2WzFdID09ICItLWFsbCI6Ci0gICAgICAgIHN5cy5hcmd2
LnJlbW92ZSgiLS1hbGwiKQotICAgICAgICBmcm9tIG1vZHVsZXMuc2NtX3VuaXR0ZXN0IGltcG9y
dCAqCi0KLSAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvdGVz
dC13ZWJraXRweQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0
cHkJKHJldmlzaW9uIDUyNzAyKQkoZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0
LXB5dGhvbjo1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChjKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIG1vZHVs
ZXMuYnVnemlsbGFfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gbW9kdWxlcy5idWlsZGJvdF91bml0
dGVzdCBpbXBvcnQgKgorZnJvbSBtb2R1bGVzLmJ1aWxkc3RlcHNfdW5pdHRlc3QgaW1wb3J0ICoK
K2Zyb20gbW9kdWxlcy5jaGFuZ2Vsb2dzX3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIG1vZHVsZXMu
Y29tbWFuZHMuZG93bmxvYWRfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gbW9kdWxlcy5jb21tYW5k
cy5lYXJseV93YXJuaW5nX3N5c3RlbV91bml0dGVzdCBpbXBvcnQgKgorZnJvbSBtb2R1bGVzLmNv
bW1hbmRzLnVwbG9hZF91bml0dGVzdCBpbXBvcnQgKgorZnJvbSBtb2R1bGVzLmNvbW1hbmRzLnF1
ZXJpZXNfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gbW9kdWxlcy5jb21tYW5kcy5xdWV1ZXNfdW5p
dHRlc3QgaW1wb3J0ICoKK2Zyb20gbW9kdWxlcy5jb21taXR0ZXJzX3VuaXR0ZXN0IGltcG9ydCAq
Citmcm9tIG1vZHVsZXMuY3JlZGVudGlhbHNfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gbW9kdWxl
cy5jcHBfc3R5bGVfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gbW9kdWxlcy5kaWZmX3BhcnNlcl91
bml0dGVzdCBpbXBvcnQgKgorZnJvbSBtb2R1bGVzLmV4ZWN1dGl2ZV91bml0dGVzdCBpbXBvcnQg
KgorZnJvbSBtb2R1bGVzLm11bHRpY29tbWFuZHRvb2xfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20g
bW9kdWxlcy5xdWV1ZWVuZ2luZV91bml0dGVzdCBpbXBvcnQgKgorZnJvbSBtb2R1bGVzLnN0eWxl
X3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIG1vZHVsZXMudGV4dF9zdHlsZV91bml0dGVzdCBpbXBv
cnQgKgorZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nX3VuaXR0ZXN0IGltcG9ydCAqCitmcm9t
IG1vZHVsZXMud2Via2l0cG9ydF91bml0dGVzdCBpbXBvcnQgKgorCitpZiBfX25hbWVfXyA9PSAi
X19tYWluX18iOgorICAgICMgRklYTUU6IFRoaXMgaXMgYSBoYWNrLCBidXQgSSdtIHRpcmVkIG9m
IGNvbW1lbnRpbmcgb3V0IHRoZSB0ZXN0LgorICAgICMgICAgICAgIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4MTgKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID4g
MSBhbmQgc3lzLmFyZ3ZbMV0gPT0gIi0tYWxsIjoKKyAgICAgICAgc3lzLmFyZ3YucmVtb3ZlKCIt
LWFsbCIpCisgICAgICAgIGZyb20gbW9kdWxlcy5zY21fdW5pdHRlc3QgaW1wb3J0ICoKKworICAg
IHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQkocmV2aXNp
b24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDMyICszMCwzMiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAK
LWZyb20gbW9kdWxlcy5idWd6aWxsYV91bml0dGVzdCBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLmJ1
aWxkYm90X3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuYnVpbGRzdGVwc191bml0dGVz
dCBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLmNoYW5nZWxvZ3NfdW5pdHRlc3QgaW1wb3J0ICoKLWZy
b20gbW9kdWxlcy5jb21tYW5kcy5kb3dubG9hZF91bml0dGVzdCBpbXBvcnQgKgotZnJvbSBtb2R1
bGVzLmNvbW1hbmRzLmVhcmx5X3dhcm5pbmdfc3lzdGVtX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9t
IG1vZHVsZXMuY29tbWFuZHMudXBsb2FkX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMu
Y29tbWFuZHMucXVlcmllc191bml0dGVzdCBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLmNvbW1hbmRz
LnF1ZXVlc191bml0dGVzdCBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLmNvbW1pdHRlcnNfdW5pdHRl
c3QgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy5jcmVkZW50aWFsc191bml0dGVzdCBpbXBvcnQgKgot
ZnJvbSBtb2R1bGVzLmNwcF9zdHlsZV91bml0dGVzdCBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLmRp
ZmZfcGFyc2VyX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlX3VuaXR0
ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMubXVsdGljb21tYW5kdG9vbF91bml0dGVzdCBpbXBv
cnQgKgotZnJvbSBtb2R1bGVzLnF1ZXVlZW5naW5lX3VuaXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1v
ZHVsZXMuc3R5bGVfdW5pdHRlc3QgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy50ZXh0X3N0eWxlX3Vu
aXR0ZXN0IGltcG9ydCAqCi1mcm9tIG1vZHVsZXMud2Via2l0X2xvZ2dpbmdfdW5pdHRlc3QgaW1w
b3J0ICoKLWZyb20gbW9kdWxlcy53ZWJraXRwb3J0X3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdl
YmtpdHB5LmJ1Z3ppbGxhX3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LmJ1aWxkYm90
X3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LmJ1aWxkc3RlcHNfdW5pdHRlc3QgaW1w
b3J0ICoKK2Zyb20gd2Via2l0cHkuY2hhbmdlbG9nc191bml0dGVzdCBpbXBvcnQgKgorZnJvbSB3
ZWJraXRweS5jb21tYW5kcy5kb3dubG9hZF91bml0dGVzdCBpbXBvcnQgKgorZnJvbSB3ZWJraXRw
eS5jb21tYW5kcy5lYXJseV93YXJuaW5nX3N5c3RlbV91bml0dGVzdCBpbXBvcnQgKgorZnJvbSB3
ZWJraXRweS5jb21tYW5kcy51cGxvYWRfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHku
Y29tbWFuZHMucXVlcmllc191bml0dGVzdCBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5jb21tYW5k
cy5xdWV1ZXNfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkuY29tbWl0dGVyc191bml0
dGVzdCBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5jcmVkZW50aWFsc191bml0dGVzdCBpbXBvcnQg
KgorZnJvbSB3ZWJraXRweS5jcHBfc3R5bGVfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Via2l0
cHkuZGlmZl9wYXJzZXJfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkuZXhlY3V0aXZl
X3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5Lm11bHRpY29tbWFuZHRvb2xfdW5pdHRl
c3QgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkucXVldWVlbmdpbmVfdW5pdHRlc3QgaW1wb3J0ICoK
K2Zyb20gd2Via2l0cHkuc3R5bGVfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkudGV4
dF9zdHlsZV91bml0dGVzdCBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZ191
bml0dGVzdCBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS53ZWJraXRwb3J0X3VuaXR0ZXN0IGltcG9y
dCAqCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgIyBGSVhNRTogVGhpcyBpcyBh
IGhhY2ssIGJ1dCBJJ20gdGlyZWQgb2YgY29tbWVudGluZyBvdXQgdGhlIHRlc3QuCiAgICAgIyAg
ICAgICAgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTgxOAog
ICAgIGlmIGxlbihzeXMuYXJndikgPiAxIGFuZCBzeXMuYXJndlsxXSA9PSAiLS1hbGwiOgogICAg
ICAgICBzeXMuYXJndi5yZW1vdmUoIi0tYWxsIikKLSAgICAgICAgZnJvbSBtb2R1bGVzLnNjbV91
bml0dGVzdCBpbXBvcnQgKgorICAgICAgICBmcm9tIHdlYmtpdHB5LnNjbV91bml0dGVzdCBpbXBv
cnQgKgogCiAgICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3Zh
bGlkYXRlLWNvbW1pdHRlci1saXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3ZhbGlkYXRlLWNvbW1pdHRlci1saXN0cwkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29s
cy9TY3JpcHRzL3ZhbGlkYXRlLWNvbW1pdHRlci1saXN0cwkod29ya2luZyBjb3B5KQpAQCAtMzYs
MTMgKzM2LDEzIEBAIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgcmUKIGltcG9ydCB1cmxsaWIy
CiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCBkYXRldGltZSwgdGltZWRlbHRhCi1mcm9tIG1v
ZHVsZXMuY29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSBtb2R1bGVzLmxvZ2dp
bmcgaW1wb3J0IGxvZywgZXJyb3IKLWZyb20gbW9kdWxlcy5zY20gaW1wb3J0IEdpdAorZnJvbSB3
ZWJraXRweS5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0Citmcm9tIHdlYmtpdHB5Lmxv
Z2dpbmcgaW1wb3J0IGxvZywgZXJyb3IKK2Zyb20gd2Via2l0cHkuc2NtIGltcG9ydCBHaXQKIAot
IyBXZWJLaXQgaW5jbHVkZXMgYSBidWlsdCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0
cy9tb2R1bGVzCisjIFdlYktpdCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkgb2YgQmVhdXRpZnVsU291
cCBpbiBTY3JpcHRzL3dlYmtpdHB5CiAjIHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3Vj
Y2VlZC4KLWZyb20gbW9kdWxlcy5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCitm
cm9tIHdlYmtpdHB5LkJlYXV0aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKIAogZGVmIHBy
aW50X2xpc3RfaWZfbm9uX2VtcHR5KHRpdGxlLCBsaXN0X3RvX3ByaW50KToKICAgICBpZiBub3Qg
bGlzdF90b19wcmludDoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9CZWF1dGlm
dWxTb3VwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9CZWF1
dGlmdWxTb3VwLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9k
dWxlcy9CZWF1dGlmdWxTb3VwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwMDAgKzAsMCBAQAot
IiIiQmVhdXRpZnVsIFNvdXAKLUVsaXhpciBhbmQgVG9uaWMKLSJUaGUgU2NyZWVuLVNjcmFwZXIn
cyBGcmllbmQiCi1odHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC8K
LQotQmVhdXRpZnVsIFNvdXAgcGFyc2VzIGEgKHBvc3NpYmx5IGludmFsaWQpIFhNTCBvciBIVE1M
IGRvY3VtZW50IGludG8gYQotdHJlZSByZXByZXNlbnRhdGlvbi4gSXQgcHJvdmlkZXMgbWV0aG9k
cyBhbmQgUHl0aG9uaWMgaWRpb21zIHRoYXQgbWFrZQotaXQgZWFzeSB0byBuYXZpZ2F0ZSwgc2Vh
cmNoLCBhbmQgbW9kaWZ5IHRoZSB0cmVlLgotCi1BIHdlbGwtZm9ybWVkIFhNTC9IVE1MIGRvY3Vt
ZW50IHlpZWxkcyBhIHdlbGwtZm9ybWVkIGRhdGEKLXN0cnVjdHVyZS4gQW4gaWxsLWZvcm1lZCBY
TUwvSFRNTCBkb2N1bWVudCB5aWVsZHMgYSBjb3JyZXNwb25kaW5nbHkKLWlsbC1mb3JtZWQgZGF0
YSBzdHJ1Y3R1cmUuIElmIHlvdXIgZG9jdW1lbnQgaXMgb25seSBsb2NhbGx5Ci13ZWxsLWZvcm1l
ZCwgeW91IGNhbiB1c2UgdGhpcyBsaWJyYXJ5IHRvIGZpbmQgYW5kIHByb2Nlc3MgdGhlCi13ZWxs
LWZvcm1lZCBwYXJ0IG9mIGl0LgotCi1CZWF1dGlmdWwgU291cCB3b3JrcyB3aXRoIFB5dGhvbiAy
LjIgYW5kIHVwLiBJdCBoYXMgbm8gZXh0ZXJuYWwKLWRlcGVuZGVuY2llcywgYnV0IHlvdSdsbCBo
YXZlIG1vcmUgc3VjY2VzcyBhdCBjb252ZXJ0aW5nIGRhdGEgdG8gVVRGLTgKLWlmIHlvdSBhbHNv
IGluc3RhbGwgdGhlc2UgdGhyZWUgcGFja2FnZXM6Ci0KLSogY2hhcmRldCwgZm9yIGF1dG8tZGV0
ZWN0aW5nIGNoYXJhY3RlciBlbmNvZGluZ3MKLSAgaHR0cDovL2NoYXJkZXQuZmVlZHBhcnNlci5v
cmcvCi0qIGNqa2NvZGVjcyBhbmQgaWNvbnZfY29kZWMsIHdoaWNoIGFkZCBtb3JlIGVuY29kaW5n
cyB0byB0aGUgb25lcyBzdXBwb3J0ZWQKLSAgYnkgc3RvY2sgUHl0aG9uLgotICBodHRwOi8vY2pr
cHl0aG9uLmkxOG4ub3JnLwotCi1CZWF1dGlmdWwgU291cCBkZWZpbmVzIGNsYXNzZXMgZm9yIHR3
byBtYWluIHBhcnNpbmcgc3RyYXRlZ2llczoKLQotICogQmVhdXRpZnVsU3RvbmVTb3VwLCBmb3Ig
cGFyc2luZyBYTUwsIFNHTUwsIG9yIHlvdXIgZG9tYWluLXNwZWNpZmljCi0gICBsYW5ndWFnZSB0
aGF0IGtpbmQgb2YgbG9va3MgbGlrZSBYTUwuCi0KLSAqIEJlYXV0aWZ1bFNvdXAsIGZvciBwYXJz
aW5nIHJ1bi1vZi10aGUtbWlsbCBIVE1MIGNvZGUsIGJlIGl0IHZhbGlkCi0gICBvciBpbnZhbGlk
LiBUaGlzIGNsYXNzIGhhcyB3ZWIgYnJvd3Nlci1saWtlIGhldXJpc3RpY3MgZm9yCi0gICBvYnRh
aW5pbmcgYSBzZW5zaWJsZSBwYXJzZSB0cmVlIGluIHRoZSBmYWNlIG9mIGNvbW1vbiBIVE1MIGVy
cm9ycy4KLQotQmVhdXRpZnVsIFNvdXAgYWxzbyBkZWZpbmVzIGEgY2xhc3MgKFVuaWNvZGVEYW1t
aXQpIGZvciBhdXRvZGV0ZWN0aW5nCi10aGUgZW5jb2Rpbmcgb2YgYW4gSFRNTCBvciBYTUwgZG9j
dW1lbnQsIGFuZCBjb252ZXJ0aW5nIGl0IHRvCi1Vbmljb2RlLiBNdWNoIG9mIHRoaXMgY29kZSBp
cyB0YWtlbiBmcm9tIE1hcmsgUGlsZ3JpbSdzIFVuaXZlcnNhbCBGZWVkIFBhcnNlci4KLQotRm9y
IG1vcmUgdGhhbiB5b3UgZXZlciB3YW50ZWQgdG8ga25vdyBhYm91dCBCZWF1dGlmdWwgU291cCwg
c2VlIHRoZQotZG9jdW1lbnRhdGlvbjoKLWh0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9C
ZWF1dGlmdWxTb3VwL2RvY3VtZW50YXRpb24uaHRtbAotCi1IZXJlLCBoYXZlIHNvbWUgbGVnYWxl
c2U6Ci0KLUNvcHlyaWdodCAoYykgMjAwNC0yMDA5LCBMZW9uYXJkIFJpY2hhcmRzb24KLQotQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi1tZXQ6Ci0KLSAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLQotICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLQotICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHRoZSBCZWF1dGlm
dWwgU291cCBDb25zb3J0aXVtIGFuZCBBbGwKLSAgICBOaWdodCBLb3NoZXIgQmFrZXJ5IG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKLSAgICB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi1F
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi1QUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLVBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKLUxJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLCBEQU1NSVQuCi0KLSIiIgotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBnZW5lcmF0b3Jz
Ci0KLV9fYXV0aG9yX18gPSAiTGVvbmFyZCBSaWNoYXJkc29uIChsZW9uYXJkckBzZWdmYXVsdC5v
cmcpIgotX192ZXJzaW9uX18gPSAiMy4xLjAuMSIKLV9fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0
IChjKSAyMDA0LTIwMDkgTGVvbmFyZCBSaWNoYXJkc29uIgotX19saWNlbnNlX18gPSAiTmV3LXN0
eWxlIEJTRCIKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0IG1hcmt1cGJhc2UKLWltcG9ydCB0eXBl
cwotaW1wb3J0IHJlCi1mcm9tIEhUTUxQYXJzZXIgaW1wb3J0IEhUTUxQYXJzZXIsIEhUTUxQYXJz
ZUVycm9yCi10cnk6Ci0gICAgZnJvbSBodG1sZW50aXR5ZGVmcyBpbXBvcnQgbmFtZTJjb2RlcG9p
bnQKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBuYW1lMmNvZGVwb2ludCA9IHt9Ci10cnk6Ci0g
ICAgc2V0Ci1leGNlcHQgTmFtZUVycm9yOgotICAgIGZyb20gc2V0cyBpbXBvcnQgU2V0IGFzIHNl
dAotCi0jVGhlc2UgaGFja3MgbWFrZSBCZWF1dGlmdWwgU291cCBhYmxlIHRvIHBhcnNlIFhNTCB3
aXRoIG5hbWVzcGFjZXMKLW1hcmt1cGJhc2UuX2RlY2xuYW1lX21hdGNoID0gcmUuY29tcGlsZShy
J1thLXpBLVpdWy1fLjphLXpBLVowLTldKlxzKicpLm1hdGNoCi0KLURFRkFVTFRfT1VUUFVUX0VO
Q09ESU5HID0gInV0Zi04IgotCi0jIEZpcnN0LCB0aGUgY2xhc3NlcyB0aGF0IHJlcHJlc2VudCBt
YXJrdXAgZWxlbWVudHMuCi0KLWRlZiBzb2IodW5pY29kZSwgZW5jb2RpbmcpOgotICAgICIiIlJl
dHVybnMgZWl0aGVyIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZyBvciBpdHMgZW5jb2RpbmcuIiIi
Ci0gICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIHVuaWNvZGUKLSAgICBl
bHNlOgotICAgICAgICByZXR1cm4gdW5pY29kZS5lbmNvZGUoZW5jb2RpbmcpCi0KLWNsYXNzIFBh
Z2VFbGVtZW50OgotICAgICIiIkNvbnRhaW5zIHRoZSBuYXZpZ2F0aW9uYWwgaW5mb3JtYXRpb24g
Zm9yIHNvbWUgcGFydCBvZiB0aGUgcGFnZQotICAgIChlaXRoZXIgYSB0YWcgb3IgYSBwaWVjZSBv
ZiB0ZXh0KSIiIgotCi0gICAgZGVmIHNldHVwKHNlbGYsIHBhcmVudD1Ob25lLCBwcmV2aW91cz1O
b25lKToKLSAgICAgICAgIiIiU2V0cyB1cCB0aGUgaW5pdGlhbCByZWxhdGlvbnMgYmV0d2VlbiB0
aGlzIGVsZW1lbnQgYW5kCi0gICAgICAgIG90aGVyIGVsZW1lbnRzLiIiIgotICAgICAgICBzZWxm
LnBhcmVudCA9IHBhcmVudAotICAgICAgICBzZWxmLnByZXZpb3VzID0gcHJldmlvdXMKLSAgICAg
ICAgc2VsZi5uZXh0ID0gTm9uZQotICAgICAgICBzZWxmLnByZXZpb3VzU2libGluZyA9IE5vbmUK
LSAgICAgICAgc2VsZi5uZXh0U2libGluZyA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5wYXJlbnQg
YW5kIHNlbGYucGFyZW50LmNvbnRlbnRzOgotICAgICAgICAgICAgc2VsZi5wcmV2aW91c1NpYmxp
bmcgPSBzZWxmLnBhcmVudC5jb250ZW50c1stMV0KLSAgICAgICAgICAgIHNlbGYucHJldmlvdXNT
aWJsaW5nLm5leHRTaWJsaW5nID0gc2VsZgotCi0gICAgZGVmIHJlcGxhY2VXaXRoKHNlbGYsIHJl
cGxhY2VXaXRoKToKLSAgICAgICAgb2xkUGFyZW50ID0gc2VsZi5wYXJlbnQKLSAgICAgICAgbXlJ
bmRleCA9IHNlbGYucGFyZW50LmNvbnRlbnRzLmluZGV4KHNlbGYpCi0gICAgICAgIGlmIGhhc2F0
dHIocmVwbGFjZVdpdGgsICdwYXJlbnQnKSBhbmQgcmVwbGFjZVdpdGgucGFyZW50ID09IHNlbGYu
cGFyZW50OgotICAgICAgICAgICAgIyBXZSdyZSByZXBsYWNpbmcgdGhpcyBlbGVtZW50IHdpdGgg
b25lIG9mIGl0cyBzaWJsaW5ncy4KLSAgICAgICAgICAgIGluZGV4ID0gc2VsZi5wYXJlbnQuY29u
dGVudHMuaW5kZXgocmVwbGFjZVdpdGgpCi0gICAgICAgICAgICBpZiBpbmRleCBhbmQgaW5kZXgg
PCBteUluZGV4OgotICAgICAgICAgICAgICAgICMgRnVydGhlcm1vcmUsIGl0IGNvbWVzIGJlZm9y
ZSB0aGlzIGVsZW1lbnQuIFRoYXQKLSAgICAgICAgICAgICAgICAjIG1lYW5zIHRoYXQgd2hlbiB3
ZSBleHRyYWN0IGl0LCB0aGUgaW5kZXggb2YgdGhpcwotICAgICAgICAgICAgICAgICMgZWxlbWVu
dCB3aWxsIGNoYW5nZS4KLSAgICAgICAgICAgICAgICBteUluZGV4ID0gbXlJbmRleCAtIDEKLSAg
ICAgICAgc2VsZi5leHRyYWN0KCkKLSAgICAgICAgb2xkUGFyZW50Lmluc2VydChteUluZGV4LCBy
ZXBsYWNlV2l0aCkKLQotICAgIGRlZiBleHRyYWN0KHNlbGYpOgotICAgICAgICAiIiJEZXN0cnVj
dGl2ZWx5IHJpcHMgdGhpcyBlbGVtZW50IG91dCBvZiB0aGUgdHJlZS4iIiIKLSAgICAgICAgaWYg
c2VsZi5wYXJlbnQ6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5wYXJl
bnQuY29udGVudHMucmVtb3ZlKHNlbGYpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoK
LSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgI0ZpbmQgdGhlIHR3byBlbGVtZW50cyB0
aGF0IHdvdWxkIGJlIG5leHQgdG8gZWFjaCBvdGhlciBpZgotICAgICAgICAjdGhpcyBlbGVtZW50
IChhbmQgYW55IGNoaWxkcmVuKSBoYWRuJ3QgYmVlbiBwYXJzZWQuIENvbm5lY3QKLSAgICAgICAg
I3RoZSB0d28uCi0gICAgICAgIGxhc3RDaGlsZCA9IHNlbGYuX2xhc3RSZWN1cnNpdmVDaGlsZCgp
Ci0gICAgICAgIG5leHRFbGVtZW50ID0gbGFzdENoaWxkLm5leHQKLQotICAgICAgICBpZiBzZWxm
LnByZXZpb3VzOgotICAgICAgICAgICAgc2VsZi5wcmV2aW91cy5uZXh0ID0gbmV4dEVsZW1lbnQK
LSAgICAgICAgaWYgbmV4dEVsZW1lbnQ6Ci0gICAgICAgICAgICBuZXh0RWxlbWVudC5wcmV2aW91
cyA9IHNlbGYucHJldmlvdXMKLSAgICAgICAgc2VsZi5wcmV2aW91cyA9IE5vbmUKLSAgICAgICAg
bGFzdENoaWxkLm5leHQgPSBOb25lCi0KLSAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCi0gICAg
ICAgIGlmIHNlbGYucHJldmlvdXNTaWJsaW5nOgotICAgICAgICAgICAgc2VsZi5wcmV2aW91c1Np
YmxpbmcubmV4dFNpYmxpbmcgPSBzZWxmLm5leHRTaWJsaW5nCi0gICAgICAgIGlmIHNlbGYubmV4
dFNpYmxpbmc6Ci0gICAgICAgICAgICBzZWxmLm5leHRTaWJsaW5nLnByZXZpb3VzU2libGluZyA9
IHNlbGYucHJldmlvdXNTaWJsaW5nCi0gICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5nID0gc2Vs
Zi5uZXh0U2libGluZyA9IE5vbmUKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfbGFz
dFJlY3Vyc2l2ZUNoaWxkKHNlbGYpOgotICAgICAgICAiRmluZHMgdGhlIGxhc3QgZWxlbWVudCBi
ZW5lYXRoIHRoaXMgb2JqZWN0IHRvIGJlIHBhcnNlZC4iCi0gICAgICAgIGxhc3RDaGlsZCA9IHNl
bGYKLSAgICAgICAgd2hpbGUgaGFzYXR0cihsYXN0Q2hpbGQsICdjb250ZW50cycpIGFuZCBsYXN0
Q2hpbGQuY29udGVudHM6Ci0gICAgICAgICAgICBsYXN0Q2hpbGQgPSBsYXN0Q2hpbGQuY29udGVu
dHNbLTFdCi0gICAgICAgIHJldHVybiBsYXN0Q2hpbGQKLQotICAgIGRlZiBpbnNlcnQoc2VsZiwg
cG9zaXRpb24sIG5ld0NoaWxkKToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UobmV3Q2hpbGQsIGJh
c2VzdHJpbmcpCi0gICAgICAgICAgICBvciBpc2luc3RhbmNlKG5ld0NoaWxkLCB1bmljb2RlKSkg
XAotICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNlKG5ld0NoaWxkLCBOYXZpZ2FibGVTdHJp
bmcpOgotICAgICAgICAgICAgbmV3Q2hpbGQgPSBOYXZpZ2FibGVTdHJpbmcobmV3Q2hpbGQpCi0K
LSAgICAgICAgcG9zaXRpb24gPSAgbWluKHBvc2l0aW9uLCBsZW4oc2VsZi5jb250ZW50cykpCi0g
ICAgICAgIGlmIGhhc2F0dHIobmV3Q2hpbGQsICdwYXJlbnQnKSBhbmQgbmV3Q2hpbGQucGFyZW50
ICE9IE5vbmU6Ci0gICAgICAgICAgICAjIFdlJ3JlICdpbnNlcnRpbmcnIGFuIGVsZW1lbnQgdGhh
dCdzIGFscmVhZHkgb25lCi0gICAgICAgICAgICAjIG9mIHRoaXMgb2JqZWN0J3MgY2hpbGRyZW4u
Ci0gICAgICAgICAgICBpZiBuZXdDaGlsZC5wYXJlbnQgPT0gc2VsZjoKLSAgICAgICAgICAgICAg
ICBpbmRleCA9IHNlbGYuZmluZChuZXdDaGlsZCkKLSAgICAgICAgICAgICAgICBpZiBpbmRleCBh
bmQgaW5kZXggPCBwb3NpdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgIyBGdXJ0aGVybW9yZSB3
ZSdyZSBtb3ZpbmcgaXQgZnVydGhlciBkb3duIHRoZQotICAgICAgICAgICAgICAgICAgICAjIGxp
c3Qgb2YgdGhpcyBvYmplY3QncyBjaGlsZHJlbi4gVGhhdCBtZWFucyB0aGF0Ci0gICAgICAgICAg
ICAgICAgICAgICMgd2hlbiB3ZSBleHRyYWN0IHRoaXMgZWxlbWVudCwgb3VyIHRhcmdldCBpbmRl
eAotICAgICAgICAgICAgICAgICAgICAjIHdpbGwganVtcCBkb3duIG9uZS4KLSAgICAgICAgICAg
ICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIDEKLSAgICAgICAgICAgIG5ld0NoaWxkLmV4
dHJhY3QoKQotCi0gICAgICAgIG5ld0NoaWxkLnBhcmVudCA9IHNlbGYKLSAgICAgICAgcHJldmlv
dXNDaGlsZCA9IE5vbmUKLSAgICAgICAgaWYgcG9zaXRpb24gPT0gMDoKLSAgICAgICAgICAgIG5l
d0NoaWxkLnByZXZpb3VzU2libGluZyA9IE5vbmUKLSAgICAgICAgICAgIG5ld0NoaWxkLnByZXZp
b3VzID0gc2VsZgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJldmlvdXNDaGlsZCA9IHNl
bGYuY29udGVudHNbcG9zaXRpb24tMV0KLSAgICAgICAgICAgIG5ld0NoaWxkLnByZXZpb3VzU2li
bGluZyA9IHByZXZpb3VzQ2hpbGQKLSAgICAgICAgICAgIG5ld0NoaWxkLnByZXZpb3VzU2libGlu
Zy5uZXh0U2libGluZyA9IG5ld0NoaWxkCi0gICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91cyA9
IHByZXZpb3VzQ2hpbGQuX2xhc3RSZWN1cnNpdmVDaGlsZCgpCi0gICAgICAgIGlmIG5ld0NoaWxk
LnByZXZpb3VzOgotICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXMubmV4dCA9IG5ld0NoaWxk
Ci0KLSAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQgPSBuZXdDaGlsZC5fbGFzdFJlY3Vyc2l2
ZUNoaWxkKCkKLQotICAgICAgICBpZiBwb3NpdGlvbiA+PSBsZW4oc2VsZi5jb250ZW50cyk6Ci0g
ICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGluZyA9IE5vbmUKLQotICAgICAgICAgICAgcGFy
ZW50ID0gc2VsZgotICAgICAgICAgICAgcGFyZW50c05leHRTaWJsaW5nID0gTm9uZQotICAgICAg
ICAgICAgd2hpbGUgbm90IHBhcmVudHNOZXh0U2libGluZzoKLSAgICAgICAgICAgICAgICBwYXJl
bnRzTmV4dFNpYmxpbmcgPSBwYXJlbnQubmV4dFNpYmxpbmcKLSAgICAgICAgICAgICAgICBwYXJl
bnQgPSBwYXJlbnQucGFyZW50Ci0gICAgICAgICAgICAgICAgaWYgbm90IHBhcmVudDogIyBUaGlz
IGlzIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICAgICAgICAgICAg
ICBicmVhawotICAgICAgICAgICAgaWYgcGFyZW50c05leHRTaWJsaW5nOgotICAgICAgICAgICAg
ICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQgPSBwYXJlbnRzTmV4dFNpYmxpbmcKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dCA9
IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5leHRDaGlsZCA9IHNlbGYuY29udGVu
dHNbcG9zaXRpb25dCi0gICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGluZyA9IG5leHRDaGls
ZAotICAgICAgICAgICAgaWYgbmV3Q2hpbGQubmV4dFNpYmxpbmc6Ci0gICAgICAgICAgICAgICAg
bmV3Q2hpbGQubmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nID0gbmV3Q2hpbGQKLSAgICAgICAg
ICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQgPSBuZXh0Q2hpbGQKLQotICAgICAgICBpZiBu
ZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0OgotICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1l
bnQubmV4dC5wcmV2aW91cyA9IG5ld0NoaWxkc0xhc3RFbGVtZW50Ci0gICAgICAgIHNlbGYuY29u
dGVudHMuaW5zZXJ0KHBvc2l0aW9uLCBuZXdDaGlsZCkKLQotICAgIGRlZiBhcHBlbmQoc2VsZiwg
dGFnKToKLSAgICAgICAgIiIiQXBwZW5kcyB0aGUgZ2l2ZW4gdGFnIHRvIHRoZSBjb250ZW50cyBv
ZiB0aGlzIHRhZy4iIiIKLSAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYuY29udGVudHMpLCB0
YWcpCi0KLSAgICBkZWYgZmluZE5leHQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1O
b25lLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGZpcnN0IGl0ZW0gdGhhdCBt
YXRjaGVzIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQKLSAgICAgICAgYXBwZWFycyBhZnRlciB0aGlz
IFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9maW5kT25lKHNl
bGYuZmluZEFsbE5leHQsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncykKLQotICAgIGRlZiBm
aW5kQWxsTmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5v
bmUsCi0gICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKLSAgICAgICAgIiIiUmV0dXJucyBh
bGwgaXRlbXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcgotICAgICAg
ICBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCi0gICAgICAgIHJldHVybiBzZWxm
Ll9maW5kQWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwgc2VsZi5uZXh0R2VuZXJhdG9yLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKLQotICAgIGRlZiBmaW5kTmV4
dFNpYmxpbmcoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6
Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGluZyB0byB0aGlzIFRhZyB0aGF0
IG1hdGNoZXMgdGhlCi0gICAgICAgIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXJzIGFmdGVyIHRo
aXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRPbmUo
c2VsZi5maW5kTmV4dFNpYmxpbmdzLCBuYW1lLCBhdHRycywgdGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiprd2FyZ3MpCi0KLSAgICBkZWYgZmluZE5leHRTaWJsaW5ncyhzZWxm
LCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgKiprd2FyZ3MpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBzaWJsaW5n
cyBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgotICAgICAgICBjcml0ZXJpYSBhbmQg
YXBwZWFyIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLm5leHRTaWJsaW5nR2VuZXJhdG9yLCAqKmt3YXJncykKLSAgICBm
ZXRjaE5leHRTaWJsaW5ncyA9IGZpbmROZXh0U2libGluZ3MgIyBDb21wYXRpYmlsaXR5IHdpdGgg
cHJlLTMueAotCi0gICAgZGVmIGZpbmRQcmV2aW91cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9
LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgZmlyc3QgaXRl
bSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlhIGFuZAotICAgICAgICBhcHBlYXJzIGJl
Zm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9m
aW5kT25lKHNlbGYuZmluZEFsbFByZXZpb3VzLCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3Mp
Ci0KLSAgICBkZWYgZmluZEFsbFByZXZpb3VzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRl
eHQ9Tm9uZSwgbGltaXQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToK
LSAgICAgICAgIiIiUmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVy
aWEgYW5kIGFwcGVhcgotICAgICAgICBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIi
IgotICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQs
IHNlbGYucHJldmlvdXNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3
YXJncykKLSAgICBmZXRjaFByZXZpb3VzID0gZmluZEFsbFByZXZpb3VzICMgQ29tcGF0aWJpbGl0
eSB3aXRoIHByZS0zLngKLQotICAgIGRlZiBmaW5kUHJldmlvdXNTaWJsaW5nKHNlbGYsIG5hbWU9
Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICAiIiJSZXR1cm5z
IHRoZSBjbG9zZXN0IHNpYmxpbmcgdG8gdGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZQotICAgICAg
ICBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFycyBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3Vt
ZW50LiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZmluZE9uZShzZWxmLmZpbmRQcmV2aW91c1Np
YmxpbmdzLCBuYW1lLCBhdHRycywgdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Kiprd2FyZ3MpCi0KLSAgICBkZWYgZmluZFByZXZpb3VzU2libGluZ3Moc2VsZiwgbmFtZT1Ob25l
LCBhdHRycz17fSwgdGV4dD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1p
dD1Ob25lLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHNpYmxpbmdzIG9mIHRo
aXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCi0gICAgICAgIGNyaXRlcmlhIGFuZCBhcHBlYXIg
YmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnByZXZpb3VzU2libGluZ0dlbmVyYXRvciwgKiprd2FyZ3MpCi0gICAgZmV0
Y2hQcmV2aW91c1NpYmxpbmdzID0gZmluZFByZXZpb3VzU2libGluZ3MgIyBDb21wYXRpYmlsaXR5
IHdpdGggcHJlLTMueAotCi0gICAgZGVmIGZpbmRQYXJlbnQoc2VsZiwgbmFtZT1Ob25lLCBhdHRy
cz17fSwgKiprd2FyZ3MpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHBhcmVudCBv
ZiB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCi0gICAgICAgIGNyaXRlcmlhLiIiIgot
ICAgICAgICAjIE5PVEU6IFdlIGNhbid0IHVzZSBfZmluZE9uZSBiZWNhdXNlIGZpbmRQYXJlbnRz
IHRha2VzIGEgZGlmZmVyZW50Ci0gICAgICAgICMgc2V0IG9mIGFyZ3VtZW50cy4KLSAgICAgICAg
ciA9IE5vbmUKLSAgICAgICAgbCA9IHNlbGYuZmluZFBhcmVudHMobmFtZSwgYXR0cnMsIDEpCi0g
ICAgICAgIGlmIGw6Ci0gICAgICAgICAgICByID0gbFswXQotICAgICAgICByZXR1cm4gcgotCi0g
ICAgZGVmIGZpbmRQYXJlbnRzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIGxpbWl0PU5vbmUs
ICoqa3dhcmdzKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgcGFyZW50cyBvZiB0aGlzIFRhZyB0
aGF0IG1hdGNoIHRoZSBnaXZlbgotICAgICAgICBjcml0ZXJpYS4iIiIKLQotICAgICAgICByZXR1
cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgTm9uZSwgbGltaXQsIHNlbGYucGFyZW50R2Vu
ZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKLSAgICBmZXRj
aFBhcmVudHMgPSBmaW5kUGFyZW50cyAjIENvbXBhdGliaWxpdHkgd2l0aCBwcmUtMy54Ci0KLSAg
ICAjVGhlc2UgbWV0aG9kcyBkbyB0aGUgcmVhbCBoZWF2eSBsaWZ0aW5nLgotCi0gICAgZGVmIF9m
aW5kT25lKHNlbGYsIG1ldGhvZCwgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKToKLSAgICAg
ICAgciA9IE5vbmUKLSAgICAgICAgbCA9IG1ldGhvZChuYW1lLCBhdHRycywgdGV4dCwgMSwgKipr
d2FyZ3MpCi0gICAgICAgIGlmIGw6Ci0gICAgICAgICAgICByID0gbFswXQotICAgICAgICByZXR1
cm4gcgotCi0gICAgZGVmIF9maW5kQWxsKHNlbGYsIG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwg
Z2VuZXJhdG9yLCAqKmt3YXJncyk6Ci0gICAgICAgICJJdGVyYXRlcyBvdmVyIGEgZ2VuZXJhdG9y
IGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1hdGNoLiIKLQotICAgICAgICBpZiBpc2luc3RhbmNl
KG5hbWUsIFNvdXBTdHJhaW5lcik6Ci0gICAgICAgICAgICBzdHJhaW5lciA9IG5hbWUKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICMgQnVpbGQgYSBTb3VwU3RyYWluZXIKLSAgICAgICAgICAg
IHN0cmFpbmVyID0gU291cFN0cmFpbmVyKG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncykKLSAg
ICAgICAgcmVzdWx0cyA9IFJlc3VsdFNldChzdHJhaW5lcikKLSAgICAgICAgZyA9IGdlbmVyYXRv
cigpCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg
ICAgaSA9IGcubmV4dCgpCi0gICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAg
ICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgaToKLSAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHN0cmFpbmVyLnNlYXJjaChpKQotICAgICAgICAgICAgICAgIGlmIGZvdW5kOgotICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChmb3VuZCkKLSAgICAgICAgICAgICAgICAgICAg
aWYgbGltaXQgYW5kIGxlbihyZXN1bHRzKSA+PSBsaW1pdDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCi0gICAgICAgIHJldHVybiByZXN1bHRzCi0KLSAgICAjVGhlc2UgR2VuZXJhdG9y
cyBjYW4gYmUgdXNlZCB0byBuYXZpZ2F0ZSBzdGFydGluZyBmcm9tIGJvdGgKLSAgICAjTmF2aWdh
YmxlU3RyaW5ncyBhbmQgVGFncy4KLSAgICBkZWYgbmV4dEdlbmVyYXRvcihzZWxmKToKLSAgICAg
ICAgaSA9IHNlbGYKLSAgICAgICAgd2hpbGUgaToKLSAgICAgICAgICAgIGkgPSBpLm5leHQKLSAg
ICAgICAgICAgIHlpZWxkIGkKLQotICAgIGRlZiBuZXh0U2libGluZ0dlbmVyYXRvcihzZWxmKToK
LSAgICAgICAgaSA9IHNlbGYKLSAgICAgICAgd2hpbGUgaToKLSAgICAgICAgICAgIGkgPSBpLm5l
eHRTaWJsaW5nCi0gICAgICAgICAgICB5aWVsZCBpCi0KLSAgICBkZWYgcHJldmlvdXNHZW5lcmF0
b3Ioc2VsZik6Ci0gICAgICAgIGkgPSBzZWxmCi0gICAgICAgIHdoaWxlIGk6Ci0gICAgICAgICAg
ICBpID0gaS5wcmV2aW91cwotICAgICAgICAgICAgeWllbGQgaQotCi0gICAgZGVmIHByZXZpb3Vz
U2libGluZ0dlbmVyYXRvcihzZWxmKToKLSAgICAgICAgaSA9IHNlbGYKLSAgICAgICAgd2hpbGUg
aToKLSAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzU2libGluZwotICAgICAgICAgICAgeWllbGQg
aQotCi0gICAgZGVmIHBhcmVudEdlbmVyYXRvcihzZWxmKToKLSAgICAgICAgaSA9IHNlbGYKLSAg
ICAgICAgd2hpbGUgaToKLSAgICAgICAgICAgIGkgPSBpLnBhcmVudAotICAgICAgICAgICAgeWll
bGQgaQotCi0gICAgIyBVdGlsaXR5IG1ldGhvZHMKLSAgICBkZWYgc3Vic3RpdHV0ZUVuY29kaW5n
KHNlbGYsIHN0ciwgZW5jb2Rpbmc9Tm9uZSk6Ci0gICAgICAgIGVuY29kaW5nID0gZW5jb2Rpbmcg
b3IgInV0Zi04IgotICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoIiVTT1VQLUVOQ09ESU5HJSIs
IGVuY29kaW5nKQotCi0gICAgZGVmIHRvRW5jb2Rpbmcoc2VsZiwgcywgZW5jb2Rpbmc9Tm9uZSk6
Ci0gICAgICAgICIiIkVuY29kZXMgYW4gb2JqZWN0IHRvIGEgc3RyaW5nIGluIHNvbWUgZW5jb2Rp
bmcsIG9yIHRvIFVuaWNvZGUuCi0gICAgICAgIC4iIiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShz
LCB1bmljb2RlKToKLSAgICAgICAgICAgIGlmIGVuY29kaW5nOgotICAgICAgICAgICAgICAgIHMg
PSBzLmVuY29kZShlbmNvZGluZykKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHMsIHN0cik6Ci0g
ICAgICAgICAgICBpZiBlbmNvZGluZzoKLSAgICAgICAgICAgICAgICBzID0gcy5lbmNvZGUoZW5j
b2RpbmcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHMgPSB1bmljb2RlKHMp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBlbmNvZGluZzoKLSAgICAgICAgICAgICAg
ICBzICA9IHNlbGYudG9FbmNvZGluZyhzdHIocyksIGVuY29kaW5nKQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICBzID0gdW5pY29kZShzKQotICAgICAgICByZXR1cm4gcwotCi1j
bGFzcyBOYXZpZ2FibGVTdHJpbmcodW5pY29kZSwgUGFnZUVsZW1lbnQpOgotCi0gICAgZGVmIF9f
bmV3X18oY2xzLCB2YWx1ZSk6Ci0gICAgICAgICIiIkNyZWF0ZSBhIG5ldyBOYXZpZ2FibGVTdHJp
bmcuCi0KLSAgICAgICAgV2hlbiB1bnBpY2tsaW5nIGEgTmF2aWdhYmxlU3RyaW5nLCB0aGlzIG1l
dGhvZCBpcyBjYWxsZWQgd2l0aAotICAgICAgICB0aGUgc3RyaW5nIGluIERFRkFVTFRfT1VUUFVU
X0VOQ09ESU5HLiBUaGF0IGVuY29kaW5nIG5lZWRzIHRvIGJlCi0gICAgICAgIHBhc3NlZCBpbiB0
byB0aGUgc3VwZXJjbGFzcydzIF9fbmV3X18gb3IgdGhlIHN1cGVyY2xhc3Mgd29uJ3Qga25vdwot
ICAgICAgICBob3cgdG8gaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgotICAgICAgICAiIiIK
LSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSk6Ci0gICAgICAgICAgICByZXR1
cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUpCi0gICAgICAgIHJldHVybiB1bmljb2RlLl9f
bmV3X18oY2xzLCB2YWx1ZSwgREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpCi0KLSAgICBkZWYgX19n
ZXRuZXdhcmdzX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAodW5pY29kZShzZWxmKSwpCi0KLSAg
ICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6Ci0gICAgICAgICIiInRleHQuc3RyaW5nIGdp
dmVzIHlvdSB0ZXh0LiBUaGlzIGlzIGZvciBiYWNrd2FyZHMKLSAgICAgICAgY29tcGF0aWJpbGl0
eSBmb3IgTmF2aWdhYmxlKlN0cmluZywgYnV0IGZvciBDRGF0YSogaXQgbGV0cyB5b3UKLSAgICAg
ICAgZ2V0IHRoZSBzdHJpbmcgd2l0aG91dCB0aGUgQ0RhdGEgd3JhcHBlci4iIiIKLSAgICAgICAg
aWYgYXR0ciA9PSAnc3RyaW5nJzoKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgIiclcycgb2JqZWN0IGhhcyBu
byBhdHRyaWJ1dGUgJyVzJyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGF0dHIpCi0KLSAg
ICBkZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKCkuZW5jb2RlKGVuY29kaW5nKQotCi0gICAgZGVmIGRl
Y29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYKLQotY2xhc3MgQ0RhdGEoTmF2aWdhYmxlU3RyaW5nKToKLQotICAgIGRl
ZiBkZWNvZGVHaXZlbkV2ZW50dWFsRW5jb2Rpbmcoc2VsZiwgZXZlbnR1YWxFbmNvZGluZyk6Ci0g
ICAgICAgIHJldHVybiB1JzwhW0NEQVRBWycgKyBzZWxmICsgdSddXT4nCi0KLWNsYXNzIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbihOYXZpZ2FibGVTdHJpbmcpOgotCi0gICAgZGVmIGRlY29kZUdpdmVu
RXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToKLSAgICAgICAgb3V0cHV0
ID0gc2VsZgotICAgICAgICBpZiB1JyVTT1VQLUVOQ09ESU5HJScgaW4gb3V0cHV0OgotICAgICAg
ICAgICAgb3V0cHV0ID0gc2VsZi5zdWJzdGl0dXRlRW5jb2Rpbmcob3V0cHV0LCBldmVudHVhbEVu
Y29kaW5nKQotICAgICAgICByZXR1cm4gdSc8PycgKyBvdXRwdXQgKyB1Jz8+JwotCi1jbGFzcyBD
b21tZW50KE5hdmlnYWJsZVN0cmluZyk6Ci0gICAgZGVmIGRlY29kZUdpdmVuRXZlbnR1YWxFbmNv
ZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToKLSAgICAgICAgcmV0dXJuIHUnPCEtLScgKyBz
ZWxmICsgdSctLT4nCi0KLWNsYXNzIERlY2xhcmF0aW9uKE5hdmlnYWJsZVN0cmluZyk6Ci0gICAg
ZGVmIGRlY29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToK
LSAgICAgICAgcmV0dXJuIHUnPCEnICsgc2VsZiArIHUnPicKLQotY2xhc3MgVGFnKFBhZ2VFbGVt
ZW50KToKLQotICAgICIiIlJlcHJlc2VudHMgYSBmb3VuZCBIVE1MIHRhZyB3aXRoIGl0cyBhdHRy
aWJ1dGVzIGFuZCBjb250ZW50cy4iIiIKLQotICAgIGRlZiBfaW52ZXJ0KGgpOgotICAgICAgICAi
Q2hlYXAgZnVuY3Rpb24gdG8gaW52ZXJ0IGEgaGFzaC4iCi0gICAgICAgIGkgPSB7fQotICAgICAg
ICBmb3Igayx2IGluIGguaXRlbXMoKToKLSAgICAgICAgICAgIGlbdl0gPSBrCi0gICAgICAgIHJl
dHVybiBpCi0KLSAgICBYTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSUyA9IHsgImFwb3MiIDog
IiciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicXVvdCIgOiAnIics
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbXAiIDogIiYiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHQiIDogIjwiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3QiIDogIj4iIH0KLQotICAgIFhNTF9TUEVD
SUFMX0NIQVJTX1RPX0VOVElUSUVTID0gX2ludmVydChYTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9D
SEFSUykKLQotICAgIGRlZiBfY29udmVydEVudGl0aWVzKHNlbGYsIG1hdGNoKToKLSAgICAgICAg
IiIiVXNlZCBpbiBhIGNhbGwgdG8gcmUuc3ViIHRvIHJlcGxhY2UgSFRNTCwgWE1MLCBhbmQgbnVt
ZXJpYwotICAgICAgICBlbnRpdGllcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBVbmljb2RlIGNoYXJh
Y3RlcnMuIElmIEhUTUwKLSAgICAgICAgZW50aXRpZXMgYXJlIGJlaW5nIGNvbnZlcnRlZCwgYW55
IHVucmVjb2duaXplZCBlbnRpdGllcyBhcmUKLSAgICAgICAgZXNjYXBlZC4iIiIKLSAgICAgICAg
eCA9IG1hdGNoLmdyb3VwKDEpCi0gICAgICAgIGlmIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyBh
bmQgeCBpbiBuYW1lMmNvZGVwb2ludDoKLSAgICAgICAgICAgIHJldHVybiB1bmljaHIobmFtZTJj
b2RlcG9pbnRbeF0pCi0gICAgICAgIGVsaWYgeCBpbiBzZWxmLlhNTF9FTlRJVElFU19UT19TUEVD
SUFMX0NIQVJTOgotICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXM6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hBUlNbeF0K
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHUnJiVzOycgJSB4Ci0g
ICAgICAgIGVsaWYgbGVuKHgpID4gMCBhbmQgeFswXSA9PSAnIyc6Ci0gICAgICAgICAgICAjIEhh
bmRsZSBudW1lcmljIGVudGl0aWVzCi0gICAgICAgICAgICBpZiBsZW4oeCkgPiAxIGFuZCB4WzFd
ID09ICd4JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5pY2hyKGludCh4WzI6XSwgMTYpKQot
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5pY2hyKGludCh4WzE6
XSkpCi0KLSAgICAgICAgZWxpZiBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzOgotICAg
ICAgICAgICAgcmV0dXJuIHUnJmFtcDslczsnICUgeAotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgcmV0dXJuIHUnJiVzOycgJSB4Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyc2VyLCBu
YW1lLCBhdHRycz1Ob25lLCBwYXJlbnQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgcHJldmlvdXM9
Tm9uZSk6Ci0gICAgICAgICJCYXNpYyBjb25zdHJ1Y3Rvci4iCi0KLSAgICAgICAgIyBXZSBkb24n
dCBhY3R1YWxseSBzdG9yZSB0aGUgcGFyc2VyIG9iamVjdDogdGhhdCBsZXRzIGV4dHJhY3RlZAot
ICAgICAgICAjIGNodW5rcyBiZSBnYXJiYWdlLWNvbGxlY3RlZAotICAgICAgICBzZWxmLnBhcnNl
ckNsYXNzID0gcGFyc2VyLl9fY2xhc3NfXwotICAgICAgICBzZWxmLmlzU2VsZkNsb3NpbmcgPSBw
YXJzZXIuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKQotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0g
ICAgICAgIGlmIGF0dHJzID09IE5vbmU6Ci0gICAgICAgICAgICBhdHRycyA9IFtdCi0gICAgICAg
IHNlbGYuYXR0cnMgPSBhdHRycwotICAgICAgICBzZWxmLmNvbnRlbnRzID0gW10KLSAgICAgICAg
c2VsZi5zZXR1cChwYXJlbnQsIHByZXZpb3VzKQotICAgICAgICBzZWxmLmhpZGRlbiA9IEZhbHNl
Ci0gICAgICAgIHNlbGYuY29udGFpbnNTdWJzdGl0dXRpb25zID0gRmFsc2UKLSAgICAgICAgc2Vs
Zi5jb252ZXJ0SFRNTEVudGl0aWVzID0gcGFyc2VyLmNvbnZlcnRIVE1MRW50aXRpZXMKLSAgICAg
ICAgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBwYXJzZXIuY29udmVydFhNTEVudGl0aWVzCi0g
ICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMgPSBwYXJzZXIuZXNjYXBlVW5y
ZWNvZ25pemVkRW50aXRpZXMKLQotICAgICAgICBkZWYgY29udmVydChrdmFsKToKLSAgICAgICAg
ICAgICJDb252ZXJ0cyBIVE1MLCBYTUwgYW5kIG51bWVyaWMgZW50aXRpZXMgaW4gdGhlIGF0dHJp
YnV0ZSB2YWx1ZS4iCi0gICAgICAgICAgICBrLCB2YWwgPSBrdmFsCi0gICAgICAgICAgICBpZiB2
YWwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4ga3ZhbAotICAgICAgICAgICAgcmV0
dXJuIChrLCByZS5zdWIoIiYoI1xkK3wjeFswLTlhLWZBLUZdK3xcdyspOyIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb252ZXJ0RW50aXRpZXMsIHZhbCkpCi0gICAgICAg
IHNlbGYuYXR0cnMgPSBtYXAoY29udmVydCwgc2VsZi5hdHRycykKLQotICAgIGRlZiBnZXQoc2Vs
Ziwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0
aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUgdGFnLCBvcgotICAgICAgICB0aGUgdmFsdWUgZ2l2
ZW4gZm9yICdkZWZhdWx0JyBpZiBpdCBkb2Vzbid0IGhhdmUgdGhhdAotICAgICAgICBhdHRyaWJ1
dGUuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFwKCkuZ2V0KGtleSwgZGVmYXVs
dCkKLQotICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9n
ZXRBdHRyTWFwKCkuaGFzX2tleShrZXkpCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5
KToKLSAgICAgICAgIiIidGFnW2tleV0gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0
dHJpYnV0ZSBmb3IgdGhlIHRhZywKLSAgICAgICAgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaWYg
aXQncyBub3QgdGhlcmUuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFwKClba2V5
XQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAiSXRlcmF0aW5nIG92ZXIgYSB0
YWcgaXRlcmF0ZXMgb3ZlciBpdHMgY29udGVudHMuIgotICAgICAgICByZXR1cm4gaXRlcihzZWxm
LmNvbnRlbnRzKQotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgICJUaGUgbGVuZ3Ro
IG9mIGEgdGFnIGlzIHRoZSBsZW5ndGggb2YgaXRzIGxpc3Qgb2YgY29udGVudHMuIgotICAgICAg
ICByZXR1cm4gbGVuKHNlbGYuY29udGVudHMpCi0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYs
IHgpOgotICAgICAgICByZXR1cm4geCBpbiBzZWxmLmNvbnRlbnRzCi0KLSAgICBkZWYgX19ub256
ZXJvX18oc2VsZik6Ci0gICAgICAgICJBIHRhZyBpcyBub24tTm9uZSBldmVuIGlmIGl0IGhhcyBu
byBjb250ZW50cy4iCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX19zZXRpdGVtX18o
c2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgICAgICIiIlNldHRpbmcgdGFnW2tleV0gc2V0cyB0aGUg
dmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlCi0gICAgICAgIHRhZy4iIiIKLSAg
ICAgICAgc2VsZi5fZ2V0QXR0ck1hcCgpCi0gICAgICAgIHNlbGYuYXR0ck1hcFtrZXldID0gdmFs
dWUKLSAgICAgICAgZm91bmQgPSBGYWxzZQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4o
c2VsZi5hdHRycykpOgotICAgICAgICAgICAgaWYgc2VsZi5hdHRyc1tpXVswXSA9PSBrZXk6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5hdHRyc1tpXSA9IChrZXksIHZhbHVlKQotICAgICAgICAgICAg
ICAgIGZvdW5kID0gVHJ1ZQotICAgICAgICBpZiBub3QgZm91bmQ6Ci0gICAgICAgICAgICBzZWxm
LmF0dHJzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCi0gICAgICAgIHNlbGYuX2dldEF0dHJNYXAoKVtr
ZXldID0gdmFsdWUKLQotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICAi
RGVsZXRpbmcgdGFnW2tleV0gZGVsZXRlcyBhbGwgJ2tleScgYXR0cmlidXRlcyBmb3IgdGhlIHRh
Zy4iCi0gICAgICAgIGZvciBpdGVtIGluIHNlbGYuYXR0cnM6Ci0gICAgICAgICAgICBpZiBpdGVt
WzBdID09IGtleToKLSAgICAgICAgICAgICAgICBzZWxmLmF0dHJzLnJlbW92ZShpdGVtKQotICAg
ICAgICAgICAgICAgICNXZSBkb24ndCBicmVhayBiZWNhdXNlIGJhZCBIVE1MIGNhbiBkZWZpbmUg
dGhlIHNhbWUKLSAgICAgICAgICAgICAgICAjYXR0cmlidXRlIG11bHRpcGxlIHRpbWVzLgotICAg
ICAgICAgICAgc2VsZi5fZ2V0QXR0ck1hcCgpCi0gICAgICAgICAgICBpZiBzZWxmLmF0dHJNYXAu
aGFzX2tleShrZXkpOgotICAgICAgICAgICAgICAgIGRlbCBzZWxmLmF0dHJNYXBba2V5XQotCi0g
ICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIkNhbGxp
bmcgYSB0YWcgbGlrZSBhIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgaXRzCi0gICAg
ICAgIGZpbmRBbGwoKSBtZXRob2QuIEVnLiB0YWcoJ2EnKSByZXR1cm5zIGEgbGlzdCBvZiBhbGwg
dGhlIEEgdGFncwotICAgICAgICBmb3VuZCB3aXRoaW4gdGhpcyB0YWcuIiIiCi0gICAgICAgIHJl
dHVybiBhcHBseShzZWxmLmZpbmRBbGwsIGFyZ3MsIGt3YXJncykKLQotICAgIGRlZiBfX2dldGF0
dHJfXyhzZWxmLCB0YWcpOgotICAgICAgICAjcHJpbnQgIkdldGF0dHIgJXMuJXMiICUgKHNlbGYu
X19jbGFzc19fLCB0YWcpCi0gICAgICAgIGlmIGxlbih0YWcpID4gMyBhbmQgdGFnLnJmaW5kKCdU
YWcnKSA9PSBsZW4odGFnKS0zOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0YWdbOi0z
XSkKLSAgICAgICAgZWxpZiB0YWcuZmluZCgnX18nKSAhPSAwOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuZmluZCh0YWcpCi0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiJyVzJyBvYmpl
Y3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlIChzZWxmLl9fY2xhc3NfXywgdGFnKQotCi0gICAg
ZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhp
cyB0YWcgaGFzIHRoZSBzYW1lIG5hbWUsIHRoZSBzYW1lIGF0dHJpYnV0ZXMsCi0gICAgICAgIGFu
ZCB0aGUgc2FtZSBjb250ZW50cyAocmVjdXJzaXZlbHkpIGFzIHRoZSBnaXZlbiB0YWcuCi0KLSAg
ICAgICAgTk9URTogcmlnaHQgbm93IHRoaXMgd2lsbCByZXR1cm4gZmFsc2UgaWYgdHdvIHRhZ3Mg
aGF2ZSB0aGUKLSAgICAgICAgc2FtZSBhdHRyaWJ1dGVzIGluIGEgZGlmZmVyZW50IG9yZGVyLiBT
aG91bGQgdGhpcyBiZSBmaXhlZD8iIiIKLSAgICAgICAgaWYgbm90IGhhc2F0dHIob3RoZXIsICdu
YW1lJykgb3Igbm90IGhhc2F0dHIob3RoZXIsICdhdHRycycpIG9yIG5vdCBoYXNhdHRyKG90aGVy
LCAnY29udGVudHMnKSBvciBzZWxmLm5hbWUgIT0gb3RoZXIubmFtZSBvciBzZWxmLmF0dHJzICE9
IG90aGVyLmF0dHJzIG9yIGxlbihzZWxmKSAhPSBsZW4ob3RoZXIpOgotICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLmNvbnRlbnRzKSk6
Ci0gICAgICAgICAgICBpZiBzZWxmLmNvbnRlbnRzW2ldICE9IG90aGVyLmNvbnRlbnRzW2ldOgot
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAg
ZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhp
cyB0YWcgaXMgbm90IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgdGFnLAotICAgICAgICBhcyBkZWZp
bmVkIGluIF9fZXFfXy4iIiIKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KLSAg
ICBkZWYgX19yZXByX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgot
ICAgICAgICAiIiJSZW5kZXJzIHRoaXMgdGFnIGFzIGEgc3RyaW5nLiIiIgotICAgICAgICByZXR1
cm4gc2VsZi5kZWNvZGUoZXZlbnR1YWxFbmNvZGluZz1lbmNvZGluZykKLQotICAgIEJBUkVfQU1Q
RVJTQU5EX09SX0JSQUNLRVQgPSByZS5jb21waWxlKCIoWzw+XXwiCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiJig/ISNcZCs7fCN4WzAtOWEtZkEtRl0rO3xc
dys7KSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIpIikK
LQotICAgIGRlZiBfc3ViX2VudGl0eShzZWxmLCB4KToKLSAgICAgICAgIiIiVXNlZCB3aXRoIGEg
cmVndWxhciBleHByZXNzaW9uIHRvIHN1YnN0aXR1dGUgdGhlCi0gICAgICAgIGFwcHJvcHJpYXRl
IFhNTCBlbnRpdHkgZm9yIGFuIFhNTCBzcGVjaWFsIGNoYXJhY3Rlci4iIiIKLSAgICAgICAgcmV0
dXJuICImIiArIHNlbGYuWE1MX1NQRUNJQUxfQ0hBUlNfVE9fRU5USVRJRVNbeC5ncm91cCgwKVsw
XV0gKyAiOyIKLQotICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuZGVjb2RlKCkKLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5lbmNvZGUoKQotCi0gICAgZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBV
VF9FTkNPRElORywKLSAgICAgICAgICAgICAgIHByZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZl
bD0wKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKHByZXR0eVByaW50LCBpbmRlbnRMZXZl
bCwgZW5jb2RpbmcpLmVuY29kZShlbmNvZGluZykKLQotICAgIGRlZiBkZWNvZGUoc2VsZiwgcHJl
dHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTAsCi0gICAgICAgICAgICAgICBldmVudHVhbEVu
Y29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHN0
cmluZyBvciBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGFnIGFuZAotICAgICAgICBp
dHMgY29udGVudHMuIFRvIGdldCBVbmljb2RlLCBwYXNzIE5vbmUgZm9yIGVuY29kaW5nLiIiIgot
Ci0gICAgICAgIGF0dHJzID0gW10KLSAgICAgICAgaWYgc2VsZi5hdHRyczoKLSAgICAgICAgICAg
IGZvciBrZXksIHZhbCBpbiBzZWxmLmF0dHJzOgotICAgICAgICAgICAgICAgIGZtdCA9ICclcz0i
JXMiJwotICAgICAgICAgICAgICAgIGlmIGlzU3RyaW5nKHZhbCk6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzZWxmLmNvbnRhaW5zU3Vic3RpdHV0aW9ucwotICAgICAgICAgICAgICAgICAgICAg
ICAgYW5kIGV2ZW50dWFsRW5jb2RpbmcgaXMgbm90IE5vbmUKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZCAnJVNPVVAtRU5DT0RJTkclJyBpbiB2YWwpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsID0gc2VsZi5zdWJzdGl0dXRlRW5jb2RpbmcodmFsLCBldmVudHVhbEVuY29kaW5nKQot
Ci0gICAgICAgICAgICAgICAgICAgICMgVGhlIGF0dHJpYnV0ZSB2YWx1ZSBlaXRoZXI6Ci0gICAg
ICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAgICAgIyAqIENvbnRhaW5zIG5vIGVt
YmVkZGVkIGRvdWJsZSBxdW90ZXMgb3Igc2luZ2xlIHF1b3Rlcy4KLSAgICAgICAgICAgICAgICAg
ICAgIyAgIE5vIHByb2JsZW06IHdlIGVuY2xvc2UgaXQgaW4gZG91YmxlIHF1b3Rlcy4KLSAgICAg
ICAgICAgICAgICAgICAgIyAqIENvbnRhaW5zIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMuIE5vIHBy
b2JsZW06Ci0gICAgICAgICAgICAgICAgICAgICMgICBkb3VibGUgcXVvdGVzIHdvcmsgaGVyZSB0
b28uCi0gICAgICAgICAgICAgICAgICAgICMgKiBDb250YWlucyBlbWJlZGRlZCBkb3VibGUgcXVv
dGVzLiBObyBwcm9ibGVtOgotICAgICAgICAgICAgICAgICAgICAjICAgd2UgZW5jbG9zZSBpdCBp
biBzaW5nbGUgcXVvdGVzLgotICAgICAgICAgICAgICAgICAgICAjICogRW1iZWRzIGJvdGggc2lu
Z2xlIF9hbmRfIGRvdWJsZSBxdW90ZXMuIFRoaXMKLSAgICAgICAgICAgICAgICAgICAgIyAgIGNh
bid0IGhhcHBlbiBuYXR1cmFsbHksIGJ1dCBpdCBjYW4gaGFwcGVuIGlmCi0gICAgICAgICAgICAg
ICAgICAgICMgICB5b3UgbW9kaWZ5IGFuIGF0dHJpYnV0ZSB2YWx1ZSBhZnRlciBwYXJzaW5nCi0g
ICAgICAgICAgICAgICAgICAgICMgICB0aGUgZG9jdW1lbnQuIE5vdyB3ZSBoYXZlIGEgYml0IG9m
IGEKLSAgICAgICAgICAgICAgICAgICAgIyAgIHByb2JsZW0uIFdlIHNvbHZlIGl0IGJ5IGVuY2xv
c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyAgIGF0dHJpYnV0ZSBpbiBzaW5nbGUgcXVv
dGVzLCBhbmQgZXNjYXBpbmcgYW55Ci0gICAgICAgICAgICAgICAgICAgICMgICBlbWJlZGRlZCBz
aW5nbGUgcXVvdGVzIHRvIFhNTCBlbnRpdGllcy4KLSAgICAgICAgICAgICAgICAgICAgaWYgJyIn
IGluIHZhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICIlcz0nJXMnIgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgIiciIGluIHZhbDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIFRPRE86IHJlcGxhY2Ugd2l0aCBhcG9zIHdoZW4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIGFwcHJvcHJpYXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9
IHZhbC5yZXBsYWNlKCInIiwgIiZzcXVvdDsiKQotCi0gICAgICAgICAgICAgICAgICAgICMgTm93
IHdlJ3JlIG9rYXkgdy9yL3QgcXVvdGVzLiBCdXQgdGhlIGF0dHJpYnV0ZQotICAgICAgICAgICAg
ICAgICAgICAjIHZhbHVlIG1pZ2h0IGFsc28gY29udGFpbiBhbmdsZSBicmFja2V0cywgb3IKLSAg
ICAgICAgICAgICAgICAgICAgIyBhbXBlcnNhbmRzIHRoYXQgYXJlbid0IHBhcnQgb2YgZW50aXRp
ZXMuIFdlIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgIyB0byBlc2NhcGUgdGhvc2UgdG8gWE1M
IGVudGl0aWVzIHRvby4KLSAgICAgICAgICAgICAgICAgICAgdmFsID0gc2VsZi5CQVJFX0FNUEVS
U0FORF9PUl9CUkFDS0VULnN1YihzZWxmLl9zdWJfZW50aXR5LCB2YWwpCi0gICAgICAgICAgICAg
ICAgaWYgdmFsIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMgSGFuZGxlIGJvb2xlYW4g
YXR0cmlidXRlcy4KLSAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGtleQotICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSBmbXQgJSAoa2V5LCB2
YWwpCi0gICAgICAgICAgICAgICAgYXR0cnMuYXBwZW5kKGRlY29kZWQpCi0gICAgICAgIGNsb3Nl
ID0gJycKLSAgICAgICAgY2xvc2VUYWcgPSAnJwotICAgICAgICBpZiBzZWxmLmlzU2VsZkNsb3Np
bmc6Ci0gICAgICAgICAgICBjbG9zZSA9ICcgLycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IGNsb3NlVGFnID0gJzwvJXM+JyAlIHNlbGYubmFtZQotCi0gICAgICAgIGluZGVudFRhZywgaW5k
ZW50Q29udGVudHMgPSAwLCAwCi0gICAgICAgIGlmIHByZXR0eVByaW50OgotICAgICAgICAgICAg
aW5kZW50VGFnID0gaW5kZW50TGV2ZWwKLSAgICAgICAgICAgIHNwYWNlID0gKCcgJyAqIChpbmRl
bnRUYWctMSkpCi0gICAgICAgICAgICBpbmRlbnRDb250ZW50cyA9IGluZGVudFRhZyArIDEKLSAg
ICAgICAgY29udGVudHMgPSBzZWxmLmRlY29kZUNvbnRlbnRzKHByZXR0eVByaW50LCBpbmRlbnRD
b250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50dWFs
RW5jb2RpbmcpCi0gICAgICAgIGlmIHNlbGYuaGlkZGVuOgotICAgICAgICAgICAgcyA9IGNvbnRl
bnRzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzID0gW10KLSAgICAgICAgICAgIGF0dHJp
YnV0ZVN0cmluZyA9ICcnCi0gICAgICAgICAgICBpZiBhdHRyczoKLSAgICAgICAgICAgICAgICBh
dHRyaWJ1dGVTdHJpbmcgPSAnICcgKyAnICcuam9pbihhdHRycykKLSAgICAgICAgICAgIGlmIHBy
ZXR0eVByaW50OgotICAgICAgICAgICAgICAgIHMuYXBwZW5kKHNwYWNlKQotICAgICAgICAgICAg
cy5hcHBlbmQoJzwlcyVzJXM+JyAlIChzZWxmLm5hbWUsIGF0dHJpYnV0ZVN0cmluZywgY2xvc2Up
KQotICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6Ci0gICAgICAgICAgICAgICAgcy5hcHBlbmQo
IlxuIikKLSAgICAgICAgICAgIHMuYXBwZW5kKGNvbnRlbnRzKQotICAgICAgICAgICAgaWYgcHJl
dHR5UHJpbnQgYW5kIGNvbnRlbnRzIGFuZCBjb250ZW50c1stMV0gIT0gIlxuIjoKLSAgICAgICAg
ICAgICAgICBzLmFwcGVuZCgiXG4iKQotICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQgYW5kIGNs
b3NlVGFnOgotICAgICAgICAgICAgICAgIHMuYXBwZW5kKHNwYWNlKQotICAgICAgICAgICAgcy5h
cHBlbmQoY2xvc2VUYWcpCi0gICAgICAgICAgICBpZiBwcmV0dHlQcmludCBhbmQgY2xvc2VUYWcg
YW5kIHNlbGYubmV4dFNpYmxpbmc6Ci0gICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKLSAg
ICAgICAgICAgIHMgPSAnJy5qb2luKHMpCi0gICAgICAgIHJldHVybiBzCi0KLSAgICBkZWYgZGVj
b21wb3NlKHNlbGYpOgotICAgICAgICAiIiJSZWN1cnNpdmVseSBkZXN0cm95cyB0aGUgY29udGVu
dHMgb2YgdGhpcyB0cmVlLiIiIgotICAgICAgICBjb250ZW50cyA9IFtpIGZvciBpIGluIHNlbGYu
Y29udGVudHNdCi0gICAgICAgIGZvciBpIGluIGNvbnRlbnRzOgotICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShpLCBUYWcpOgotICAgICAgICAgICAgICAgIGkuZGVjb21wb3NlKCkKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaS5leHRyYWN0KCkKLSAgICAgICAgc2VsZi5leHRy
YWN0KCkKLQotICAgIGRlZiBwcmV0dGlmeShzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9F
TkNPRElORyk6Ci0gICAgICAgIHJldHVybiBzZWxmLmVuY29kZShlbmNvZGluZywgVHJ1ZSkKLQot
ICAgIGRlZiBlbmNvZGVDb250ZW50cyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNP
RElORywKLSAgICAgICAgICAgICAgICAgICAgICAgcHJldHR5UHJpbnQ9RmFsc2UsIGluZGVudExl
dmVsPTApOgotICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGVDb250ZW50cyhwcmV0dHlQcmludCwg
aW5kZW50TGV2ZWwpLmVuY29kZShlbmNvZGluZykKLQotICAgIGRlZiBkZWNvZGVDb250ZW50cyhz
ZWxmLCBwcmV0dHlQcmludD1GYWxzZSwgaW5kZW50TGV2ZWw9MCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnR1YWxFbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6Ci0gICAgICAg
ICIiIlJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnIGFzIGEgc3RyaW5nIGluIHRoZSBn
aXZlbgotICAgICAgICBlbmNvZGluZy4gSWYgZW5jb2RpbmcgaXMgTm9uZSwgcmV0dXJucyBhIFVu
aWNvZGUgc3RyaW5nLi4iIiIKLSAgICAgICAgcz1bXQotICAgICAgICBmb3IgYyBpbiBzZWxmOgot
ICAgICAgICAgICAgdGV4dCA9IE5vbmUKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYywgTmF2
aWdhYmxlU3RyaW5nKToKLSAgICAgICAgICAgICAgICB0ZXh0ID0gYy5kZWNvZGVHaXZlbkV2ZW50
dWFsRW5jb2RpbmcoZXZlbnR1YWxFbmNvZGluZykKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShjLCBUYWcpOgotICAgICAgICAgICAgICAgIHMuYXBwZW5kKGMuZGVjb2RlKHByZXR0eVByaW50
LCBpbmRlbnRMZXZlbCwgZXZlbnR1YWxFbmNvZGluZykpCi0gICAgICAgICAgICBpZiB0ZXh0IGFu
ZCBwcmV0dHlQcmludDoKLSAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcCgpCi0gICAg
ICAgICAgICBpZiB0ZXh0OgotICAgICAgICAgICAgICAgIGlmIHByZXR0eVByaW50OgotICAgICAg
ICAgICAgICAgICAgICBzLmFwcGVuZCgiICIgKiAoaW5kZW50TGV2ZWwtMSkpCi0gICAgICAgICAg
ICAgICAgcy5hcHBlbmQodGV4dCkKLSAgICAgICAgICAgICAgICBpZiBwcmV0dHlQcmludDoKLSAg
ICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKLSAgICAgICAgcmV0dXJuICcnLmpvaW4o
cykKLQotICAgICNTb3VwIG1ldGhvZHMKLQotICAgIGRlZiBmaW5kKHNlbGYsIG5hbWU9Tm9uZSwg
YXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCi0gICAgICAgICAgICAgKiprd2Fy
Z3MpOgotICAgICAgICAiIiJSZXR1cm4gb25seSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhpcyBUYWcg
bWF0Y2hpbmcgdGhlIGdpdmVuCi0gICAgICAgIGNyaXRlcmlhLiIiIgotICAgICAgICByID0gTm9u
ZQotICAgICAgICBsID0gc2VsZi5maW5kQWxsKG5hbWUsIGF0dHJzLCByZWN1cnNpdmUsIHRleHQs
IDEsICoqa3dhcmdzKQotICAgICAgICBpZiBsOgotICAgICAgICAgICAgciA9IGxbMF0KLSAgICAg
ICAgcmV0dXJuIHIKLSAgICBmaW5kQ2hpbGQgPSBmaW5kCi0KLSAgICBkZWYgZmluZEFsbChzZWxm
LCBuYW1lPU5vbmUsIGF0dHJzPXt9LCByZWN1cnNpdmU9VHJ1ZSwgdGV4dD1Ob25lLAotICAgICAg
ICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgIiIiRXh0cmFjdHMgYSBs
aXN0IG9mIFRhZyBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCi0gICAgICAgIGNyaXRlcmlh
LiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBUYWcgYW5kIGFueQotICAgICAgICBh
dHRyaWJ1dGVzIHlvdSB3YW50IHRoZSBUYWcgdG8gaGF2ZS4KLQotICAgICAgICBUaGUgdmFsdWUg
b2YgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgJ2F0dHJzJyBtYXAgY2FuIGJlIGEKLSAgICAgICAg
c3RyaW5nLCBhIGxpc3Qgb2Ygc3RyaW5ncywgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBv
ciBhCi0gICAgICAgIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgd2hl
dGhlciBvciBub3QgdGhlCi0gICAgICAgIHN0cmluZyBtYXRjaGVzIGZvciBzb21lIGN1c3RvbSBk
ZWZpbml0aW9uIG9mICdtYXRjaGVzJy4gVGhlCi0gICAgICAgIHNhbWUgaXMgdHJ1ZSBvZiB0aGUg
dGFnIG5hbWUuIiIiCi0gICAgICAgIGdlbmVyYXRvciA9IHNlbGYucmVjdXJzaXZlQ2hpbGRHZW5l
cmF0b3IKLSAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKLSAgICAgICAgICAgIGdlbmVyYXRvciA9
IHNlbGYuY2hpbGRHZW5lcmF0b3IKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwg
YXR0cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKQotICAgIGZpbmRDaGlsZHJl
biA9IGZpbmRBbGwKLQotICAgICMgUHJlLTMueCBjb21wYXRpYmlsaXR5IG1ldGhvZHMuIFdpbGwg
Z28gYXdheSBpbiA0LjAuCi0gICAgZmlyc3QgPSBmaW5kCi0gICAgZmV0Y2ggPSBmaW5kQWxsCi0K
LSAgICBkZWYgZmV0Y2hUZXh0KHNlbGYsIHRleHQ9Tm9uZSwgcmVjdXJzaXZlPVRydWUsIGxpbWl0
PU5vbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5maW5kQWxsKHRleHQ9dGV4dCwgcmVjdXJzaXZl
PXJlY3Vyc2l2ZSwgbGltaXQ9bGltaXQpCi0KLSAgICBkZWYgZmlyc3RUZXh0KHNlbGYsIHRleHQ9
Tm9uZSwgcmVjdXJzaXZlPVRydWUpOgotICAgICAgICByZXR1cm4gc2VsZi5maW5kKHRleHQ9dGV4
dCwgcmVjdXJzaXZlPXJlY3Vyc2l2ZSkKLQotICAgICMgMy54IGNvbXBhdGliaWxpdHkgbWV0aG9k
cy4gV2lsbCBnbyBhd2F5IGluIDQuMC4KLSAgICBkZWYgcmVuZGVyQ29udGVudHMoc2VsZiwgZW5j
b2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgIHBy
ZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKLSAgICAgICAgaWYgZW5jb2RpbmcgaXMg
Tm9uZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY29kZUNvbnRlbnRzKHByZXR0eVByaW50
LCBpbmRlbnRMZXZlbCwgZW5jb2RpbmcpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1
cm4gc2VsZi5lbmNvZGVDb250ZW50cyhlbmNvZGluZywgcHJldHR5UHJpbnQsIGluZGVudExldmVs
KQotCi0KLSAgICAjUHJpdmF0ZSBtZXRob2RzCi0KLSAgICBkZWYgX2dldEF0dHJNYXAoc2VsZik6
Ci0gICAgICAgICIiIkluaXRpYWxpemVzIGEgbWFwIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGFn
J3MgYXR0cmlidXRlcywKLSAgICAgICAgaWYgbm90IGFscmVhZHkgaW5pdGlhbGl6ZWQuIiIiCi0g
ICAgICAgIGlmIG5vdCBnZXRhdHRyKHNlbGYsICdhdHRyTWFwJyk6Ci0gICAgICAgICAgICBzZWxm
LmF0dHJNYXAgPSB7fQotICAgICAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBzZWxmLmF0dHJz
OgotICAgICAgICAgICAgICAgIHNlbGYuYXR0ck1hcFtrZXldID0gdmFsdWUKLSAgICAgICAgcmV0
dXJuIHNlbGYuYXR0ck1hcAotCi0gICAgI0dlbmVyYXRvciBtZXRob2RzCi0gICAgZGVmIHJlY3Vy
c2l2ZUNoaWxkR2VuZXJhdG9yKHNlbGYpOgotICAgICAgICBpZiBub3QgbGVuKHNlbGYuY29udGVu
dHMpOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgICAgICBzdG9wTm9kZSA9
IHNlbGYuX2xhc3RSZWN1cnNpdmVDaGlsZCgpLm5leHQKLSAgICAgICAgY3VycmVudCA9IHNlbGYu
Y29udGVudHNbMF0KLSAgICAgICAgd2hpbGUgY3VycmVudCBpcyBub3Qgc3RvcE5vZGU6Ci0gICAg
ICAgICAgICB5aWVsZCBjdXJyZW50Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0
Ci0KLSAgICBkZWYgY2hpbGRHZW5lcmF0b3Ioc2VsZik6Ci0gICAgICAgIGlmIG5vdCBsZW4oc2Vs
Zi5jb250ZW50cyk6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgIGN1
cnJlbnQgPSBzZWxmLmNvbnRlbnRzWzBdCi0gICAgICAgIHdoaWxlIGN1cnJlbnQ6Ci0gICAgICAg
ICAgICB5aWVsZCBjdXJyZW50Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0U2li
bGluZwotICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0KLSMgTmV4dCwgYSBjb3VwbGUgY2xh
c3NlcyB0byByZXByZXNlbnQgcXVlcmllcyBhbmQgdGhlaXIgcmVzdWx0cy4KLWNsYXNzIFNvdXBT
dHJhaW5lcjoKLSAgICAiIiJFbmNhcHN1bGF0ZXMgYSBudW1iZXIgb2Ygd2F5cyBvZiBtYXRjaGlu
ZyBhIG1hcmt1cCBlbGVtZW50ICh0YWcgb3IKLSAgICB0ZXh0KS4iIiIKLQotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKLSAg
ICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBpZiBpc1N0cmluZyhhdHRycyk6Ci0gICAg
ICAgICAgICBrd2FyZ3NbJ2NsYXNzJ10gPSBhdHRycwotICAgICAgICAgICAgYXR0cnMgPSBOb25l
Ci0gICAgICAgIGlmIGt3YXJnczoKLSAgICAgICAgICAgIGlmIGF0dHJzOgotICAgICAgICAgICAg
ICAgIGF0dHJzID0gYXR0cnMuY29weSgpCi0gICAgICAgICAgICAgICAgYXR0cnMudXBkYXRlKGt3
YXJncykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYXR0cnMgPSBrd2FyZ3MK
LSAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJzCi0gICAgICAgIHNlbGYudGV4dCA9IHRleHQKLQot
ICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnRleHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi50ZXh0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIiVz
fCVzIiAlIChzZWxmLm5hbWUsIHNlbGYuYXR0cnMpCi0KLSAgICBkZWYgc2VhcmNoVGFnKHNlbGYs
IG1hcmt1cE5hbWU9Tm9uZSwgbWFya3VwQXR0cnM9e30pOgotICAgICAgICBmb3VuZCA9IE5vbmUK
LSAgICAgICAgbWFya3VwID0gTm9uZQotICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cE5hbWUs
IFRhZyk6Ci0gICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXBOYW1lCi0gICAgICAgICAgICBtYXJr
dXBBdHRycyA9IG1hcmt1cAotICAgICAgICBjYWxsRnVuY3Rpb25XaXRoVGFnRGF0YSA9IGNhbGxh
YmxlKHNlbGYubmFtZSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90
IGlzaW5zdGFuY2UobWFya3VwTmFtZSwgVGFnKQotCi0gICAgICAgIGlmIChub3Qgc2VsZi5uYW1l
KSBcCi0gICAgICAgICAgICAgICBvciBjYWxsRnVuY3Rpb25XaXRoVGFnRGF0YSBcCi0gICAgICAg
ICAgICAgICBvciAobWFya3VwIGFuZCBzZWxmLl9tYXRjaGVzKG1hcmt1cCwgc2VsZi5uYW1lKSkg
XAotICAgICAgICAgICAgICAgb3IgKG5vdCBtYXJrdXAgYW5kIHNlbGYuX21hdGNoZXMobWFya3Vw
TmFtZSwgc2VsZi5uYW1lKSk6Ci0gICAgICAgICAgICBpZiBjYWxsRnVuY3Rpb25XaXRoVGFnRGF0
YToKLSAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYubmFtZShtYXJrdXBOYW1lLCBtYXJrdXBB
dHRycykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbWF0Y2ggPSBUcnVlCi0g
ICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcCA9IE5vbmUKLSAgICAgICAgICAgICAgICBmb3Ig
YXR0ciwgbWF0Y2hBZ2FpbnN0IGluIHNlbGYuYXR0cnMuaXRlbXMoKToKLSAgICAgICAgICAgICAg
ICAgICAgaWYgbm90IG1hcmt1cEF0dHJNYXA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgaWYg
aGFzYXR0cihtYXJrdXBBdHRycywgJ2dldCcpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hcmt1cEF0dHJNYXAgPSBtYXJrdXBBdHRycwotICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcCA9IHt9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBtYXJrdXBBdHRyczoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcFtrXSA9IHYKLSAgICAgICAgICAg
ICAgICAgICAgYXR0clZhbHVlID0gbWFya3VwQXR0ck1hcC5nZXQoYXR0cikKLSAgICAgICAgICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX21hdGNoZXMoYXR0clZhbHVlLCBtYXRjaEFnYWluc3QpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgIGlmIG1h
cmt1cDoKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXAKLSAgICAgICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cE5hbWUKLSAgICAgICAg
cmV0dXJuIGZvdW5kCi0KLSAgICBkZWYgc2VhcmNoKHNlbGYsIG1hcmt1cCk6Ci0gICAgICAgICNw
cmludCAnbG9va2luZyBmb3IgJXMgaW4gJXMnICUgKHNlbGYsIG1hcmt1cCkKLSAgICAgICAgZm91
bmQgPSBOb25lCi0gICAgICAgICMgSWYgZ2l2ZW4gYSBsaXN0IG9mIGl0ZW1zLCBzY2FuIGl0IGZv
ciBhIHRleHQgZWxlbWVudCB0aGF0Ci0gICAgICAgICMgbWF0Y2hlcy4KLSAgICAgICAgaWYgaXNM
aXN0KG1hcmt1cCkgYW5kIG5vdCBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToKLSAgICAgICAgICAg
IGZvciBlbGVtZW50IGluIG1hcmt1cDoKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVs
ZW1lbnQsIE5hdmlnYWJsZVN0cmluZykgXAotICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2Vs
Zi5zZWFyY2goZWxlbWVudCk6Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZWxlbWVudAot
ICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAjIElmIGl0J3MgYSBUYWcsIG1ha2Ug
c3VyZSBpdHMgbmFtZSBvciBhdHRyaWJ1dGVzIG1hdGNoLgotICAgICAgICAjIERvbid0IGJvdGhl
ciB3aXRoIFRhZ3MgaWYgd2UncmUgc2VhcmNoaW5nIGZvciB0ZXh0LgotICAgICAgICBlbGlmIGlz
aW5zdGFuY2UobWFya3VwLCBUYWcpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYudGV4dDoKLSAg
ICAgICAgICAgICAgICBmb3VuZCA9IHNlbGYuc2VhcmNoVGFnKG1hcmt1cCkKLSAgICAgICAgIyBJ
ZiBpdCdzIHRleHQsIG1ha2Ugc3VyZSB0aGUgdGV4dCBtYXRjaGVzLgotICAgICAgICBlbGlmIGlz
aW5zdGFuY2UobWFya3VwLCBOYXZpZ2FibGVTdHJpbmcpIG9yIFwKLSAgICAgICAgICAgICAgICAg
aXNTdHJpbmcobWFya3VwKToKLSAgICAgICAgICAgIGlmIHNlbGYuX21hdGNoZXMobWFya3VwLCBz
ZWxmLnRleHQpOgotICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICJJIGRvbid0IGtub3cgaG93IHRvIG1hdGNo
IGFnYWluc3QgYSAlcyIgXAotICAgICAgICAgICAgICAgICAgJSBtYXJrdXAuX19jbGFzc19fCi0g
ICAgICAgIHJldHVybiBmb3VuZAotCi0gICAgZGVmIF9tYXRjaGVzKHNlbGYsIG1hcmt1cCwgbWF0
Y2hBZ2FpbnN0KToKLSAgICAgICAgI3ByaW50ICJNYXRjaGluZyAlcyBhZ2FpbnN0ICVzIiAlICht
YXJrdXAsIG1hdGNoQWdhaW5zdCkKLSAgICAgICAgcmVzdWx0ID0gRmFsc2UKLSAgICAgICAgaWYg
bWF0Y2hBZ2FpbnN0ID09IFRydWUgYW5kIHR5cGUobWF0Y2hBZ2FpbnN0KSA9PSB0eXBlcy5Cb29s
ZWFuVHlwZToKLSAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCAhPSBOb25lCi0gICAgICAgIGVs
aWYgY2FsbGFibGUobWF0Y2hBZ2FpbnN0KToKLSAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoQWdh
aW5zdChtYXJrdXApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjQ3VzdG9tIG1hdGNoIG1l
dGhvZHMgdGFrZSB0aGUgdGFnIGFzIGFuIGFyZ3VtZW50LCBidXQgYWxsCi0gICAgICAgICAgICAj
b3RoZXIgd2F5cyBvZiBtYXRjaGluZyBtYXRjaCB0aGUgdGFnIG5hbWUgYXMgYSBzdHJpbmcuCi0g
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToKLSAgICAgICAgICAgICAgICBt
YXJrdXAgPSBtYXJrdXAubmFtZQotICAgICAgICAgICAgaWYgbWFya3VwIGlzIG5vdCBOb25lIGFu
ZCBub3QgaXNTdHJpbmcobWFya3VwKToKLSAgICAgICAgICAgICAgICBtYXJrdXAgPSB1bmljb2Rl
KG1hcmt1cCkKLSAgICAgICAgICAgICNOb3cgd2Uga25vdyB0aGF0IGNodW5rIGlzIGVpdGhlciBh
IHN0cmluZywgb3IgTm9uZS4KLSAgICAgICAgICAgIGlmIGhhc2F0dHIobWF0Y2hBZ2FpbnN0LCAn
bWF0Y2gnKToKLSAgICAgICAgICAgICAgICAjIEl0J3MgYSByZWdleHAgb2JqZWN0LgotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCBhbmQgbWF0Y2hBZ2FpbnN0LnNlYXJjaChtYXJrdXAp
Ci0gICAgICAgICAgICBlbGlmIChpc0xpc3QobWF0Y2hBZ2FpbnN0KQotICAgICAgICAgICAgICAg
ICAgYW5kIChtYXJrdXAgaXMgbm90IE5vbmUgb3Igbm90IGlzU3RyaW5nKG1hdGNoQWdhaW5zdCkp
KToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgaW4gbWF0Y2hBZ2FpbnN0Ci0gICAg
ICAgICAgICBlbGlmIGhhc2F0dHIobWF0Y2hBZ2FpbnN0LCAnaXRlbXMnKToKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtYXJrdXAuaGFzX2tleShtYXRjaEFnYWluc3QpCi0gICAgICAgICAgICBl
bGlmIG1hdGNoQWdhaW5zdCBhbmQgaXNTdHJpbmcobWFya3VwKToKLSAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNo
QWdhaW5zdCA9IHVuaWNvZGUobWF0Y2hBZ2FpbnN0KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgICAgIG1hdGNoQWdhaW5zdCA9IHN0cihtYXRjaEFnYWluc3QpCi0KLSAg
ICAgICAgICAgIGlmIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hB
Z2FpbnN0ID09IG1hcmt1cAotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLWNsYXNzIFJlc3VsdFNl
dChsaXN0KToKLSAgICAiIiJBIFJlc3VsdFNldCBpcyBqdXN0IGEgbGlzdCB0aGF0IGtlZXBzIHRy
YWNrIG9mIHRoZSBTb3VwU3RyYWluZXIKLSAgICB0aGF0IGNyZWF0ZWQgaXQuIiIiCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHNvdXJjZSk6Ci0gICAgICAgIGxpc3QuX19pbml0X18oW10pCi0gICAg
ICAgIHNlbGYuc291cmNlID0gc291cmNlCi0KLSMgTm93LCBzb21lIGhlbHBlciBmdW5jdGlvbnMu
Ci0KLWRlZiBpc0xpc3QobCk6Ci0gICAgIiIiQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgd29ya3Mg
d2l0aCBhbGwgMi54IHZlcnNpb25zIG9mIFB5dGhvbgotICAgIHRvIGRldGVybWluZSB3aGV0aGVy
IG9yIG5vdCBzb21ldGhpbmcgaXMgbGlzdGxpa2UuIiIiCi0gICAgcmV0dXJuICgoaGFzYXR0cihs
LCAnX19pdGVyX18nKSBhbmQgbm90IGlzU3RyaW5nKGwpKQotICAgICAgICAgICAgb3IgKHR5cGUo
bCkgaW4gKHR5cGVzLkxpc3RUeXBlLCB0eXBlcy5UdXBsZVR5cGUpKSkKLQotZGVmIGlzU3RyaW5n
KHMpOgotICAgICIiIkNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHdvcmtzIHdpdGggYWxsIDIueCB2
ZXJzaW9ucyBvZiBQeXRob24KLSAgICB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgc29tZXRo
aW5nIGlzIHN0cmluZ2xpa2UuIiIiCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gaXNpbnN0YW5j
ZShzLCB1bmljb2RlKSBvciBpc2luc3RhbmNlKHMsIGJhc2VzdHJpbmcpCi0gICAgZXhjZXB0IE5h
bWVFcnJvcjoKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uocywgc3RyKQotCi1kZWYgYnVpbGRU
YWdNYXAoZGVmYXVsdCwgKmFyZ3MpOgotICAgICIiIlR1cm5zIGEgbGlzdCBvZiBtYXBzLCBsaXN0
cywgb3Igc2NhbGFycyBpbnRvIGEgc2luZ2xlIG1hcC4KLSAgICBVc2VkIHRvIGJ1aWxkIHRoZSBT
RUxGX0NMT1NJTkdfVEFHUywgTkVTVEFCTEVfVEFHUywgYW5kCi0gICAgTkVTVElOR19SRVNFVF9U
QUdTIG1hcHMgb3V0IG9mIGxpc3RzIGFuZCBwYXJ0aWFsIG1hcHMuIiIiCi0gICAgYnVpbHQgPSB7
fQotICAgIGZvciBwb3J0aW9uIGluIGFyZ3M6Ci0gICAgICAgIGlmIGhhc2F0dHIocG9ydGlvbiwg
J2l0ZW1zJyk6Ci0gICAgICAgICAgICAjSXQncyBhIG1hcC4gTWVyZ2UgaXQuCi0gICAgICAgICAg
ICBmb3Igayx2IGluIHBvcnRpb24uaXRlbXMoKToKLSAgICAgICAgICAgICAgICBidWlsdFtrXSA9
IHYKLSAgICAgICAgZWxpZiBpc0xpc3QocG9ydGlvbikgYW5kIG5vdCBpc1N0cmluZyhwb3J0aW9u
KToKLSAgICAgICAgICAgICNJdCdzIGEgbGlzdC4gTWFwIGVhY2ggaXRlbSB0byB0aGUgZGVmYXVs
dC4KLSAgICAgICAgICAgIGZvciBrIGluIHBvcnRpb246Ci0gICAgICAgICAgICAgICAgYnVpbHRb
a10gPSBkZWZhdWx0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjSXQncyBhIHNjYWxhci4g
TWFwIGl0IHRvIHRoZSBkZWZhdWx0LgotICAgICAgICAgICAgYnVpbHRbcG9ydGlvbl0gPSBkZWZh
dWx0Ci0gICAgcmV0dXJuIGJ1aWx0Ci0KLSMgTm93LCB0aGUgcGFyc2VyIGNsYXNzZXMuCi0KLWNs
YXNzIEhUTUxQYXJzZXJCdWlsZGVyKEhUTUxQYXJzZXIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIHNvdXApOgotICAgICAgICBIVE1MUGFyc2VyLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNl
bGYuc291cCA9IHNvdXAKLQotICAgICMgV2UgaW5oZXJpdCBmZWVkKCkgYW5kIHJlc2V0KCkuCi0K
LSAgICBkZWYgaGFuZGxlX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIGF0dHJzKToKLSAgICAgICAgaWYg
bmFtZSA9PSAnbWV0YSc6Ci0gICAgICAgICAgICBzZWxmLnNvdXAuZXh0cmFjdENoYXJzZXRGcm9t
TWV0YShhdHRycykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc291cC51bmtub3du
X3N0YXJ0dGFnKG5hbWUsIGF0dHJzKQotCi0gICAgZGVmIGhhbmRsZV9lbmR0YWcoc2VsZiwgbmFt
ZSk6Ci0gICAgICAgIHNlbGYuc291cC51bmtub3duX2VuZHRhZyhuYW1lKQotCi0gICAgZGVmIGhh
bmRsZV9kYXRhKHNlbGYsIGNvbnRlbnQpOgotICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEo
Y29udGVudCkKLQotICAgIGRlZiBfdG9TdHJpbmdTdWJjbGFzcyhzZWxmLCB0ZXh0LCBzdWJjbGFz
cyk6Ci0gICAgICAgICIiIkFkZHMgYSBjZXJ0YWluIHBpZWNlIG9mIHRleHQgdG8gdGhlIHRyZWUg
YXMgYSBOYXZpZ2FibGVTdHJpbmcKLSAgICAgICAgc3ViY2xhc3MuIiIiCi0gICAgICAgIHNlbGYu
c291cC5lbmREYXRhKCkKLSAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh0ZXh0KQotICAgICAgICBz
ZWxmLnNvdXAuZW5kRGF0YShzdWJjbGFzcykKLQotICAgIGRlZiBoYW5kbGVfcGkoc2VsZiwgdGV4
dCk6Ci0gICAgICAgICIiIkhhbmRsZSBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gYXMgYSBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24KLSAgICAgICAgb2JqZWN0LCBwb3NzaWJseSBvbmUgd2l0aCBhICVT
T1VQLUVOQ09ESU5HJSBzbG90IGludG8gd2hpY2ggYW4KLSAgICAgICAgZW5jb2Rpbmcgd2lsbCBi
ZSBwbHVnZ2VkIGxhdGVyLiIiIgotICAgICAgICBpZiB0ZXh0WzozXSA9PSAieG1sIjoKLSAgICAg
ICAgICAgIHRleHQgPSB1InhtbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSclU09VUC1FTkNPRElO
RyUnIgotICAgICAgICBzZWxmLl90b1N0cmluZ1N1YmNsYXNzKHRleHQsIFByb2Nlc3NpbmdJbnN0
cnVjdGlvbikKLQotICAgIGRlZiBoYW5kbGVfY29tbWVudChzZWxmLCB0ZXh0KToKLSAgICAgICAg
IkhhbmRsZSBjb21tZW50cyBhcyBDb21tZW50IG9iamVjdHMuIgotICAgICAgICBzZWxmLl90b1N0
cmluZ1N1YmNsYXNzKHRleHQsIENvbW1lbnQpCi0KLSAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2Vs
ZiwgcmVmKToKLSAgICAgICAgIkhhbmRsZSBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBhcyBkYXRhLiIK
LSAgICAgICAgaWYgc2VsZi5zb3VwLmNvbnZlcnRFbnRpdGllczoKLSAgICAgICAgICAgIGRhdGEg
PSB1bmljaHIoaW50KHJlZikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gJyYj
JXM7JyAlIHJlZgotICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKGRhdGEpCi0KLSAgICBkZWYgaGFu
ZGxlX2VudGl0eXJlZihzZWxmLCByZWYpOgotICAgICAgICAiIiJIYW5kbGUgZW50aXR5IHJlZmVy
ZW5jZXMgYXMgZGF0YSwgcG9zc2libHkgY29udmVydGluZyBrbm93bgotICAgICAgICBIVE1MIGFu
ZC9vciBYTUwgZW50aXR5IHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZQot
ICAgICAgICBjaGFyYWN0ZXJzLiIiIgotICAgICAgICBkYXRhID0gTm9uZQotICAgICAgICBpZiBz
ZWxmLnNvdXAuY29udmVydEhUTUxFbnRpdGllczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICBkYXRhID0gdW5pY2hyKG5hbWUyY29kZXBvaW50W3JlZl0pCi0gICAgICAgICAgICBl
eGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGlmIG5vdCBk
YXRhIGFuZCBzZWxmLnNvdXAuY29udmVydFhNTEVudGl0aWVzOgotICAgICAgICAgICAgICAgIGRh
dGEgPSBzZWxmLnNvdXAuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hBUlMuZ2V0KHJlZikKLQot
ICAgICAgICBpZiBub3QgZGF0YSBhbmQgc2VsZi5zb3VwLmNvbnZlcnRIVE1MRW50aXRpZXMgYW5k
IFwKLSAgICAgICAgICAgIG5vdCBzZWxmLnNvdXAuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hB
UlMuZ2V0KHJlZik6Ci0gICAgICAgICAgICAgICAgIyBUT0RPOiBXZSd2ZSBnb3QgYSBwcm9ibGVt
IGhlcmUuIFdlJ3JlIHRvbGQgdGhpcyBpcwotICAgICAgICAgICAgICAgICMgYW4gZW50aXR5IHJl
ZmVyZW5jZSwgYnV0IGl0J3Mgbm90IGFuIFhNTCBlbnRpdHkKLSAgICAgICAgICAgICAgICAjIHJl
ZmVyZW5jZSBvciBhbiBIVE1MIGVudGl0eSByZWZlcmVuY2UuIE5vbmV0aGVsZXNzLAotICAgICAg
ICAgICAgICAgICMgdGhlIGxvZ2ljYWwgdGhpbmcgdG8gZG8gaXMgdG8gcGFzcyBpdCB0aHJvdWdo
IGFzIGFuCi0gICAgICAgICAgICAgICAgIyB1bnJlY29nbml6ZWQgZW50aXR5IHJlZmVyZW5jZS4K
LSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyBFeGNlcHQ6IHdoZW4gdGhlIGlu
cHV0IGlzICImY2Fyb2w7IiB0aGlzIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgIyB3aWxsIGJl
IGNhbGxlZCB3aXRoIGlucHV0ICJjYXJvbCIuIFdoZW4gdGhlIGlucHV0IGlzCi0gICAgICAgICAg
ICAgICAgIyAiQVQmVCIsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBpbnB1dAot
ICAgICAgICAgICAgICAgICMgIlQiLiBXZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIHdoZXRoZXIg
YSBzZW1pY29sb24KLSAgICAgICAgICAgICAgICAjIHdhcyBwcmVzZW50IG9yaWdpbmFsbHksIHNv
IHdlIGRvbid0IGtub3cgd2hldGhlcgotICAgICAgICAgICAgICAgICMgdGhpcyBpcyBhbiB1bmtu
b3duIGVudGl0eSBvciBqdXN0IGEgbWlzcGxhY2VkCi0gICAgICAgICAgICAgICAgIyBhbXBlcnNh
bmQuCi0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgVGhlIG1vcmUgY29tbW9u
IGNhc2UgaXMgYSBtaXNwbGFjZWQgYW1wZXJzYW5kLCBzbyBJCi0gICAgICAgICAgICAgICAgIyBl
c2NhcGUgdGhlIGFtcGVyc2FuZCBhbmQgb21pdCB0aGUgdHJhaWxpbmcgc2VtaWNvbG9uLgotICAg
ICAgICAgICAgICAgIGRhdGEgPSAiJmFtcDslcyIgJSByZWYKLSAgICAgICAgaWYgbm90IGRhdGE6
Ci0gICAgICAgICAgICAjIFRoaXMgY2FzZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIGFib3Zl
LCBiZWNhdXNlIHdlCi0gICAgICAgICAgICAjIGhhdmVuJ3QgYWxyZWFkeSBnb25lIHRocm91Z2gg
YSBzdXBwb3NlZGx5IGNvbXByZWhlbnNpdmUKLSAgICAgICAgICAgICMgbWFwcGluZyBvZiBlbnRp
dGllcyB0byBVbmljb2RlIGNoYXJhY3RlcnMuIFdlIG1pZ2h0IG5vdAotICAgICAgICAgICAgIyBo
YXZlIGdvbmUgdGhyb3VnaCBhbnkgbWFwcGluZyBhdCBhbGwuIFNvIHRoZSBjaGFuY2VzIGFyZQot
ICAgICAgICAgICAgIyB2ZXJ5IGhpZ2ggdGhhdCB0aGlzIGlzIGEgcmVhbCBlbnRpdHksIGFuZCBu
b3QgYQotICAgICAgICAgICAgIyBtaXNwbGFjZWQgYW1wZXJzYW5kLgotICAgICAgICAgICAgZGF0
YSA9ICImJXM7IiAlIHJlZgotICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKGRhdGEpCi0KLSAgICBk
ZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6Ci0gICAgICAgICJIYW5kbGUgRE9DVFlQRXMgYW5k
IHRoZSBsaWtlIGFzIERlY2xhcmF0aW9uIG9iamVjdHMuIgotICAgICAgICBzZWxmLl90b1N0cmlu
Z1N1YmNsYXNzKGRhdGEsIERlY2xhcmF0aW9uKQotCi0gICAgZGVmIHBhcnNlX2RlY2xhcmF0aW9u
KHNlbGYsIGkpOgotICAgICAgICAiIiJUcmVhdCBhIGJvZ3VzIFNHTUwgZGVjbGFyYXRpb24gYXMg
cmF3IGRhdGEuIFRyZWF0IGEgQ0RBVEEKLSAgICAgICAgZGVjbGFyYXRpb24gYXMgYSBDRGF0YSBv
YmplY3QuIiIiCi0gICAgICAgIGogPSBOb25lCi0gICAgICAgIGlmIHNlbGYucmF3ZGF0YVtpOmkr
OV0gPT0gJzwhW0NEQVRBWyc6Ci0gICAgICAgICAgICAgayA9IHNlbGYucmF3ZGF0YS5maW5kKCdd
XT4nLCBpKQotICAgICAgICAgICAgIGlmIGsgPT0gLTE6Ci0gICAgICAgICAgICAgICAgIGsgPSBs
ZW4oc2VsZi5yYXdkYXRhKQotICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJhd2RhdGFbaSs5Omtd
Ci0gICAgICAgICAgICAgaiA9IGsrMwotICAgICAgICAgICAgIHNlbGYuX3RvU3RyaW5nU3ViY2xh
c3MoZGF0YSwgQ0RhdGEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAgICAgaiA9IEhUTUxQYXJzZXIucGFyc2VfZGVjbGFyYXRpb24oc2VsZiwgaSkKLSAgICAg
ICAgICAgIGV4Y2VwdCBIVE1MUGFyc2VFcnJvcjoKLSAgICAgICAgICAgICAgICB0b0hhbmRsZSA9
IHNlbGYucmF3ZGF0YVtpOl0KLSAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHRvSGFu
ZGxlKQotICAgICAgICAgICAgICAgIGogPSBpICsgbGVuKHRvSGFuZGxlKQotICAgICAgICByZXR1
cm4gagotCi0KLWNsYXNzIEJlYXV0aWZ1bFN0b25lU291cChUYWcpOgotCi0gICAgIiIiVGhpcyBj
bGFzcyBjb250YWlucyB0aGUgYmFzaWMgcGFyc2VyIGFuZCBzZWFyY2ggY29kZS4gSXQgZGVmaW5l
cwotICAgIGEgcGFyc2VyIHRoYXQga25vd3Mgbm90aGluZyBhYm91dCB0YWcgYmVoYXZpb3IgZXhj
ZXB0IGZvciB0aGUKLSAgICBmb2xsb3dpbmc6Ci0KLSAgICAgIFlvdSBjYW4ndCBjbG9zZSBhIHRh
ZyB3aXRob3V0IGNsb3NpbmcgYWxsIHRoZSB0YWdzIGl0IGVuY2xvc2VzLgotICAgICAgVGhhdCBp
cywgIjxmb28+PGJhcj48L2Zvbz4iIGFjdHVhbGx5IG1lYW5zCi0gICAgICAiPGZvbz48YmFyPjwv
YmFyPjwvZm9vPiIuCi0KLSAgICBbQW5vdGhlciBwb3NzaWJsZSBleHBsYW5hdGlvbiBpcyAiPGZv
bz48YmFyIC8+PC9mb28+IiwgYnV0IHNpbmNlCi0gICAgdGhpcyBjbGFzcyBkZWZpbmVzIG5vIFNF
TEZfQ0xPU0lOR19UQUdTLCBpdCB3aWxsIG5ldmVyIHVzZSB0aGF0Ci0gICAgZXhwbGFuYXRpb24u
XQotCi0gICAgVGhpcyBjbGFzcyBpcyB1c2VmdWwgZm9yIHBhcnNpbmcgWE1MIG9yIG1hZGUtdXAg
bWFya3VwIGxhbmd1YWdlcywKLSAgICBvciB3aGVuIEJlYXV0aWZ1bFNvdXAgbWFrZXMgYW4gYXNz
dW1wdGlvbiBjb3VudGVyIHRvIHdoYXQgeW91IHdlcmUKLSAgICBleHBlY3RpbmcuIiIiCi0KLSAg
ICBTRUxGX0NMT1NJTkdfVEFHUyA9IHt9Ci0gICAgTkVTVEFCTEVfVEFHUyA9IHt9Ci0gICAgUkVT
RVRfTkVTVElOR19UQUdTID0ge30KLSAgICBRVU9URV9UQUdTID0ge30KLSAgICBQUkVTRVJWRV9X
SElURVNQQUNFX1RBR1MgPSBbXQotCi0gICAgTUFSS1VQX01BU1NBR0UgPSBbKHJlLmNvbXBpbGUo
Jyg8W148Pl0qKS8+JyksCi0gICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4Lmdyb3Vw
KDEpICsgJyAvPicpLAotICAgICAgICAgICAgICAgICAgICAgIChyZS5jb21waWxlKCc8IVxzKyhb
Xjw+XSopPicpLAotICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogJzwhJyArIHguZ3Jv
dXAoMSkgKyAnPicpCi0gICAgICAgICAgICAgICAgICAgICAgXQotCi0gICAgUk9PVF9UQUdfTkFN
RSA9IHUnW2RvY3VtZW50XScKLQotICAgIEhUTUxfRU5USVRJRVMgPSAiaHRtbCIKLSAgICBYTUxf
RU5USVRJRVMgPSAieG1sIgotICAgIFhIVE1MX0VOVElUSUVTID0gInhodG1sIgotICAgICMgVE9E
TzogVGhpcyBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkKLSAgICBBTExf
RU5USVRJRVMgPSBYSFRNTF9FTlRJVElFUwotCi0gICAgIyBVc2VkIHdoZW4gZGV0ZXJtaW5pbmcg
d2hldGhlciBhIHRleHQgbm9kZSBpcyBhbGwgd2hpdGVzcGFjZSBhbmQKLSAgICAjIGNhbiBiZSBy
ZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLiBBIHRleHQgbm9kZSB0aGF0IGNvbnRhaW5zCi0g
ICAgIyBmYW5jeSBVbmljb2RlIHNwYWNlcyAodXN1YWxseSBub24tYnJlYWtpbmcpIHNob3VsZCBi
ZSBsZWZ0Ci0gICAgIyBhbG9uZS4KLSAgICBTVFJJUF9BU0NJSV9TUEFDRVMgPSB7IDk6IE5vbmUs
IDEwOiBOb25lLCAxMjogTm9uZSwgMTM6IE5vbmUsIDMyOiBOb25lLCB9Ci0KLSAgICBkZWYgX19p
bml0X18oc2VsZiwgbWFya3VwPSIiLCBwYXJzZU9ubHlUaGVzZT1Ob25lLCBmcm9tRW5jb2Rpbmc9
Tm9uZSwKLSAgICAgICAgICAgICAgICAgbWFya3VwTWFzc2FnZT1UcnVlLCBzbWFydFF1b3Rlc1Rv
PVhNTF9FTlRJVElFUywKLSAgICAgICAgICAgICAgICAgY29udmVydEVudGl0aWVzPU5vbmUsIHNl
bGZDbG9zaW5nVGFncz1Ob25lLCBpc0hUTUw9RmFsc2UsCi0gICAgICAgICAgICAgICAgIGJ1aWxk
ZXI9SFRNTFBhcnNlckJ1aWxkZXIpOgotICAgICAgICAiIiJUaGUgU291cCBvYmplY3QgaXMgaW5p
dGlhbGl6ZWQgYXMgdGhlICdyb290IHRhZycsIGFuZCB0aGUKLSAgICAgICAgcHJvdmlkZWQgbWFy
a3VwICh3aGljaCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0KQotICAgICAg
ICBpcyBmZWQgaW50byB0aGUgdW5kZXJseWluZyBwYXJzZXIuCi0KLSAgICAgICAgSFRNTFBhcnNl
ciB3aWxsIHByb2Nlc3MgbW9zdCBiYWQgSFRNTCwgYW5kIHRoZSBCZWF1dGlmdWxTb3VwCi0gICAg
ICAgIGNsYXNzIGhhcyBzb21lIHRyaWNrcyBmb3IgZGVhbGluZyB3aXRoIHNvbWUgSFRNTCB0aGF0
IGtpbGxzCi0gICAgICAgIEhUTUxQYXJzZXIsIGJ1dCBCZWF1dGlmdWwgU291cCBjYW4gbm9uZXRo
ZWxlc3MgY2hva2Ugb3IgbG9zZSBkYXRhCi0gICAgICAgIGlmIHlvdXIgZGF0YSB1c2VzIHNlbGYt
Y2xvc2luZyB0YWdzIG9yIGRlY2xhcmF0aW9ucwotICAgICAgICBpbmNvcnJlY3RseS4KLQotICAg
ICAgICBCeSBkZWZhdWx0LCBCZWF1dGlmdWwgU291cCB1c2VzIHJlZ2V4ZXMgdG8gc2FuaXRpemUg
aW5wdXQsCi0gICAgICAgIGF2b2lkaW5nIHRoZSB2YXN0IG1ham9yaXR5IG9mIHRoZXNlIHByb2Js
ZW1zLiBJZiB0aGUgcHJvYmxlbXMKLSAgICAgICAgZG9uJ3QgYXBwbHkgdG8geW91LCBwYXNzIGlu
IEZhbHNlIGZvciBtYXJrdXBNYXNzYWdlLCBhbmQKLSAgICAgICAgeW91J2xsIGdldCBiZXR0ZXIg
cGVyZm9ybWFuY2UuCi0KLSAgICAgICAgVGhlIGRlZmF1bHQgcGFyc2VyIG1hc3NhZ2UgdGVjaG5p
cXVlcyBmaXggdGhlIHR3byBtb3N0IGNvbW1vbgotICAgICAgICBpbnN0YW5jZXMgb2YgaW52YWxp
ZCBIVE1MIHRoYXQgY2hva2UgSFRNTFBhcnNlcjoKLQotICAgICAgICAgPGJyLz4gKE5vIHNwYWNl
IGJldHdlZW4gbmFtZSBvZiBjbG9zaW5nIHRhZyBhbmQgdGFnIGNsb3NlKQotICAgICAgICAgPCEg
LS1Db21tZW50LS0+IChFeHRyYW5lb3VzIHdoaXRlc3BhY2UgaW4gZGVjbGFyYXRpb24pCi0KLSAg
ICAgICAgWW91IGNhbiBwYXNzIGluIGEgY3VzdG9tIGxpc3Qgb2YgKFJFIG9iamVjdCwgcmVwbGFj
ZSBtZXRob2QpCi0gICAgICAgIHR1cGxlcyB0byBnZXQgQmVhdXRpZnVsIFNvdXAgdG8gc2NydWIg
eW91ciBpbnB1dCB0aGUgd2F5IHlvdQotICAgICAgICB3YW50LiIiIgotCi0gICAgICAgIHNlbGYu
cGFyc2VPbmx5VGhlc2UgPSBwYXJzZU9ubHlUaGVzZQotICAgICAgICBzZWxmLmZyb21FbmNvZGlu
ZyA9IGZyb21FbmNvZGluZwotICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBzbWFydFF1b3Rl
c1RvCi0gICAgICAgIHNlbGYuY29udmVydEVudGl0aWVzID0gY29udmVydEVudGl0aWVzCi0gICAg
ICAgICMgU2V0IHRoZSBydWxlcyBmb3IgaG93IHdlJ2xsIGRlYWwgd2l0aCB0aGUgZW50aXRpZXMg
d2UKLSAgICAgICAgIyBlbmNvdW50ZXIKLSAgICAgICAgaWYgc2VsZi5jb252ZXJ0RW50aXRpZXM6
Ci0gICAgICAgICAgICAjIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjb252ZXJ0IGVuY29kZWQg
Y2hhcmFjdGVycyB0bwotICAgICAgICAgICAgIyBlbnRpdGllcyBldmVuIHdoaWxlIHlvdSdyZSBj
b252ZXJ0aW5nIGVudGl0aWVzIHRvIFVuaWNvZGUuCi0gICAgICAgICAgICAjIEp1c3QgY29udmVy
dCBpdCBhbGwgdG8gVW5pY29kZS4KLSAgICAgICAgICAgIHNlbGYuc21hcnRRdW90ZXNUbyA9IE5v
bmUKLSAgICAgICAgICAgIGlmIGNvbnZlcnRFbnRpdGllcyA9PSBzZWxmLkhUTUxfRU5USVRJRVM6
Ci0gICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBGYWxzZQotICAgICAg
ICAgICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9IFRydWUKLSAgICAgICAgICAgICAg
ICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gVHJ1ZQotICAgICAgICAgICAgZWxp
ZiBjb252ZXJ0RW50aXRpZXMgPT0gc2VsZi5YSFRNTF9FTlRJVElFUzoKLSAgICAgICAgICAgICAg
ICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9IFRydWUKLSAgICAgICAgICAgICAgICBzZWxmLmNv
bnZlcnRIVE1MRW50aXRpZXMgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5lc2NhcGVVbnJl
Y29nbml6ZWRFbnRpdGllcyA9IEZhbHNlCi0gICAgICAgICAgICBlbGlmIGNvbnZlcnRFbnRpdGll
cyA9PSBzZWxmLlhNTF9FTlRJVElFUzoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRYTUxF
bnRpdGllcyA9IFRydWUKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMg
PSBGYWxzZQotICAgICAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMg
PSBGYWxzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRp
ZXMgPSBGYWxzZQotICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzID0gRmFsc2UK
LSAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMgPSBGYWxzZQotCi0g
ICAgICAgIHNlbGYuaW5zdGFuY2VTZWxmQ2xvc2luZ1RhZ3MgPSBidWlsZFRhZ01hcChOb25lLCBz
ZWxmQ2xvc2luZ1RhZ3MpCi0gICAgICAgIHNlbGYuYnVpbGRlciA9IGJ1aWxkZXIoc2VsZikKLSAg
ICAgICAgc2VsZi5yZXNldCgpCi0KLSAgICAgICAgaWYgaGFzYXR0cihtYXJrdXAsICdyZWFkJyk6
ICAgICAgICAjIEl0J3MgYSBmaWxlLXR5cGUgb2JqZWN0LgotICAgICAgICAgICAgbWFya3VwID0g
bWFya3VwLnJlYWQoKQotICAgICAgICBzZWxmLm1hcmt1cCA9IG1hcmt1cAotICAgICAgICBzZWxm
Lm1hcmt1cE1hc3NhZ2UgPSBtYXJrdXBNYXNzYWdlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IHNlbGYuX2ZlZWQoaXNIVE1MPWlzSFRNTCkKLSAgICAgICAgZXhjZXB0IFN0b3BQYXJzaW5nOgot
ICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLm1hcmt1cCA9IE5vbmUgICAgICAgICAgICAg
ICAgICMgVGhlIG1hcmt1cCBjYW4gbm93IGJlIEdDZWQuCi0gICAgICAgIHNlbGYuYnVpbGRlciA9
IE5vbmUgICAgICAgICAgICAgICAgIyBTbyBjYW4gdGhlIGJ1aWxkZXIuCi0KLSAgICBkZWYgX2Zl
ZWQoc2VsZiwgaW5Eb2N1bWVudEVuY29kaW5nPU5vbmUsIGlzSFRNTD1GYWxzZSk6Ci0gICAgICAg
ICMgQ29udmVydCB0aGUgZG9jdW1lbnQgdG8gVW5pY29kZS4KLSAgICAgICAgbWFya3VwID0gc2Vs
Zi5tYXJrdXAKLSAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgotICAgICAg
ICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ29yaWdpbmFsRW5jb2RpbmcnKToKLSAgICAgICAg
ICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0XAotICAgICAgICAgICAgICAgICAgICAgKG1h
cmt1cCwgW3NlbGYuZnJvbUVuY29kaW5nLCBpbkRvY3VtZW50RW5jb2RpbmddLAotICAgICAgICAg
ICAgICAgICAgICAgIHNtYXJ0UXVvdGVzVG89c2VsZi5zbWFydFF1b3Rlc1RvLCBpc0hUTUw9aXNI
VE1MKQotICAgICAgICAgICAgbWFya3VwID0gZGFtbWl0LnVuaWNvZGUKLSAgICAgICAgICAgIHNl
bGYub3JpZ2luYWxFbmNvZGluZyA9IGRhbW1pdC5vcmlnaW5hbEVuY29kaW5nCi0gICAgICAgICAg
ICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0gZGFtbWl0LmRlY2xhcmVkSFRNTEVuY29kaW5n
Ci0gICAgICAgIGlmIG1hcmt1cDoKLSAgICAgICAgICAgIGlmIHNlbGYubWFya3VwTWFzc2FnZToK
LSAgICAgICAgICAgICAgICBpZiBub3QgaXNMaXN0KHNlbGYubWFya3VwTWFzc2FnZSk6Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYubWFya3VwTWFzc2FnZSA9IHNlbGYuTUFSS1VQX01BU1NBR0UK
LSAgICAgICAgICAgICAgICBmb3IgZml4LCBtIGluIHNlbGYubWFya3VwTWFzc2FnZToKLSAgICAg
ICAgICAgICAgICAgICAgbWFya3VwID0gZml4LnN1YihtLCBtYXJrdXApCi0gICAgICAgICAgICAg
ICAgIyBUT0RPOiBXZSBnZXQgcmlkIG9mIG1hcmt1cE1hc3NhZ2Ugc28gdGhhdCB0aGUKLSAgICAg
ICAgICAgICAgICAjIHNvdXAgb2JqZWN0IGNhbiBiZSBkZWVwY29waWVkIGxhdGVyIG9uLiBTb21l
Ci0gICAgICAgICAgICAgICAgIyBQeXRob24gaW5zdGFsbGF0aW9ucyBjYW4ndCBjb3B5IHJlZ2V4
ZXMuIElmIGFueW9uZQotICAgICAgICAgICAgICAgICMgd2FzIHJlbHlpbmcgb24gdGhlIGV4aXN0
ZW5jZSBvZiBtYXJrdXBNYXNzYWdlLCB0aGlzCi0gICAgICAgICAgICAgICAgIyBtaWdodCBjYXVz
ZSBwcm9ibGVtcy4KLSAgICAgICAgICAgICAgICBkZWwoc2VsZi5tYXJrdXBNYXNzYWdlKQotICAg
ICAgICBzZWxmLmJ1aWxkZXIucmVzZXQoKQotCi0gICAgICAgIHNlbGYuYnVpbGRlci5mZWVkKG1h
cmt1cCkKLSAgICAgICAgIyBDbG9zZSBvdXQgYW55IHVuZmluaXNoZWQgc3RyaW5ncyBhbmQgY2xv
c2UgYWxsIHRoZSBvcGVuIHRhZ3MuCi0gICAgICAgIHNlbGYuZW5kRGF0YSgpCi0gICAgICAgIHdo
aWxlIHNlbGYuY3VycmVudFRhZy5uYW1lICE9IHNlbGYuUk9PVF9UQUdfTkFNRToKLSAgICAgICAg
ICAgIHNlbGYucG9wVGFnKCkKLQotICAgIGRlZiBpc1NlbGZDbG9zaW5nVGFnKHNlbGYsIG5hbWUp
OgotICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoZSBnaXZlbiBzdHJpbmcgaXMgdGhlIG5h
bWUgb2YgYQotICAgICAgICBzZWxmLWNsb3NpbmcgdGFnIGFjY29yZGluZyB0byB0aGlzIHBhcnNl
ci4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuU0VMRl9DTE9TSU5HX1RBR1MuaGFzX2tleShuYW1l
KSBcCi0gICAgICAgICAgICAgICBvciBzZWxmLmluc3RhbmNlU2VsZkNsb3NpbmdUYWdzLmhhc19r
ZXkobmFtZSkKLQotICAgIGRlZiByZXNldChzZWxmKToKLSAgICAgICAgVGFnLl9faW5pdF9fKHNl
bGYsIHNlbGYsIHNlbGYuUk9PVF9UQUdfTkFNRSkKLSAgICAgICAgc2VsZi5oaWRkZW4gPSAxCi0g
ICAgICAgIHNlbGYuYnVpbGRlci5yZXNldCgpCi0gICAgICAgIHNlbGYuY3VycmVudERhdGEgPSBb
XQotICAgICAgICBzZWxmLmN1cnJlbnRUYWcgPSBOb25lCi0gICAgICAgIHNlbGYudGFnU3RhY2sg
PSBbXQotICAgICAgICBzZWxmLnF1b3RlU3RhY2sgPSBbXQotICAgICAgICBzZWxmLnB1c2hUYWco
c2VsZikKLQotICAgIGRlZiBwb3BUYWcoc2VsZik6Ci0gICAgICAgIHRhZyA9IHNlbGYudGFnU3Rh
Y2sucG9wKCkKLSAgICAgICAgIyBUYWdzIHdpdGgganVzdCBvbmUgc3RyaW5nLW93bmluZyBjaGls
ZCBnZXQgdGhlIGNoaWxkIGFzIGEKLSAgICAgICAgIyAnc3RyaW5nJyBwcm9wZXJ0eSwgc28gdGhh
dCBzb3VwLnRhZy5zdHJpbmcgaXMgc2hvcnRoYW5kIGZvcgotICAgICAgICAjIHNvdXAudGFnLmNv
bnRlbnRzWzBdCi0gICAgICAgIGlmIGxlbihzZWxmLmN1cnJlbnRUYWcuY29udGVudHMpID09IDEg
YW5kIFwKLSAgICAgICAgICAgaXNpbnN0YW5jZShzZWxmLmN1cnJlbnRUYWcuY29udGVudHNbMF0s
IE5hdmlnYWJsZVN0cmluZyk6Ci0gICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcuc3RyaW5nID0g
c2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzWzBdCi0KLSAgICAgICAgI3ByaW50ICJQb3AiLCB0YWcu
bmFtZQotICAgICAgICBpZiBzZWxmLnRhZ1N0YWNrOgotICAgICAgICAgICAgc2VsZi5jdXJyZW50
VGFnID0gc2VsZi50YWdTdGFja1stMV0KLSAgICAgICAgcmV0dXJuIHNlbGYuY3VycmVudFRhZwot
Ci0gICAgZGVmIHB1c2hUYWcoc2VsZiwgdGFnKToKLSAgICAgICAgI3ByaW50ICJQdXNoIiwgdGFn
Lm5hbWUKLSAgICAgICAgaWYgc2VsZi5jdXJyZW50VGFnOgotICAgICAgICAgICAgc2VsZi5jdXJy
ZW50VGFnLmNvbnRlbnRzLmFwcGVuZCh0YWcpCi0gICAgICAgIHNlbGYudGFnU3RhY2suYXBwZW5k
KHRhZykKLSAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFja1stMV0KLQotICAg
IGRlZiBlbmREYXRhKHNlbGYsIGNvbnRhaW5lckNsYXNzPU5hdmlnYWJsZVN0cmluZyk6Ci0gICAg
ICAgIGlmIHNlbGYuY3VycmVudERhdGE6Ci0gICAgICAgICAgICBjdXJyZW50RGF0YSA9IHUnJy5q
b2luKHNlbGYuY3VycmVudERhdGEpCi0gICAgICAgICAgICBpZiAoY3VycmVudERhdGEudHJhbnNs
YXRlKHNlbGYuU1RSSVBfQVNDSUlfU1BBQ0VTKSA9PSAnJyBhbmQKLSAgICAgICAgICAgICAgICBu
b3Qgc2V0KFt0YWcubmFtZSBmb3IgdGFnIGluIHNlbGYudGFnU3RhY2tdKS5pbnRlcnNlY3Rpb24o
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuUFJFU0VSVkVfV0hJVEVTUEFDRV9UQUdTKSk6Ci0g
ICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBjdXJyZW50RGF0YToKLSAgICAgICAgICAgICAgICAg
ICAgY3VycmVudERhdGEgPSAnXG4nCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgY3VycmVudERhdGEgPSAnICcKLSAgICAgICAgICAgIHNlbGYuY3VycmVudERhdGEg
PSBbXQotICAgICAgICAgICAgaWYgc2VsZi5wYXJzZU9ubHlUaGVzZSBhbmQgbGVuKHNlbGYudGFn
U3RhY2spIDw9IDEgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAobm90IHNlbGYucGFyc2VPbmx5
VGhlc2UudGV4dCBvciBcCi0gICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLnBhcnNlT25seVRo
ZXNlLnNlYXJjaChjdXJyZW50RGF0YSkpOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAg
ICAgICAgbyA9IGNvbnRhaW5lckNsYXNzKGN1cnJlbnREYXRhKQotICAgICAgICAgICAgby5zZXR1
cChzZWxmLmN1cnJlbnRUYWcsIHNlbGYucHJldmlvdXMpCi0gICAgICAgICAgICBpZiBzZWxmLnBy
ZXZpb3VzOgotICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXMubmV4dCA9IG8KLSAgICAgICAg
ICAgIHNlbGYucHJldmlvdXMgPSBvCi0gICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcuY29udGVu
dHMuYXBwZW5kKG8pCi0KLQotICAgIGRlZiBfcG9wVG9UYWcoc2VsZiwgbmFtZSwgaW5jbHVzaXZl
UG9wPVRydWUpOgotICAgICAgICAiIiJQb3BzIHRoZSB0YWcgc3RhY2sgdXAgdG8gYW5kIGluY2x1
ZGluZyB0aGUgbW9zdCByZWNlbnQKLSAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHRhZy4g
SWYgaW5jbHVzaXZlUG9wIGlzIGZhbHNlLCBwb3BzIHRoZSB0YWcKLSAgICAgICAgc3RhY2sgdXAg
dG8gYnV0ICpub3QqIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQgaW5zdHFhbmNlIG9mCi0gICAg
ICAgIHRoZSBnaXZlbiB0YWcuIiIiCi0gICAgICAgICNwcmludCAiUG9wcGluZyB0byAlcyIgJSBu
YW1lCi0gICAgICAgIGlmIG5hbWUgPT0gc2VsZi5ST09UX1RBR19OQU1FOgotICAgICAgICAgICAg
cmV0dXJuCi0KLSAgICAgICAgbnVtUG9wcyA9IDAKLSAgICAgICAgbW9zdFJlY2VudFRhZyA9IE5v
bmUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYudGFnU3RhY2spLTEsIDAsIC0xKToK
LSAgICAgICAgICAgIGlmIG5hbWUgPT0gc2VsZi50YWdTdGFja1tpXS5uYW1lOgotICAgICAgICAg
ICAgICAgIG51bVBvcHMgPSBsZW4oc2VsZi50YWdTdGFjayktaQotICAgICAgICAgICAgICAgIGJy
ZWFrCi0gICAgICAgIGlmIG5vdCBpbmNsdXNpdmVQb3A6Ci0gICAgICAgICAgICBudW1Qb3BzID0g
bnVtUG9wcyAtIDEKLQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBudW1Qb3BzKToKLSAgICAg
ICAgICAgIG1vc3RSZWNlbnRUYWcgPSBzZWxmLnBvcFRhZygpCi0gICAgICAgIHJldHVybiBtb3N0
UmVjZW50VGFnCi0KLSAgICBkZWYgX3NtYXJ0UG9wKHNlbGYsIG5hbWUpOgotCi0gICAgICAgICIi
IldlIG5lZWQgdG8gcG9wIHVwIHRvIHRoZSBwcmV2aW91cyB0YWcgb2YgdGhpcyB0eXBlLCB1bmxl
c3MKLSAgICAgICAgb25lIG9mIHRoaXMgdGFnJ3MgbmVzdGluZyByZXNldCB0cmlnZ2VycyBjb21l
cyBiZXR3ZWVuIHRoaXMKLSAgICAgICAgdGFnIGFuZCB0aGUgcHJldmlvdXMgdGFnIG9mIHRoaXMg
dHlwZSwgT1IgdW5sZXNzIHRoaXMgdGFnIGlzIGEKLSAgICAgICAgZ2VuZXJpYyBuZXN0aW5nIHRy
aWdnZXIgYW5kIGFub3RoZXIgZ2VuZXJpYyBuZXN0aW5nIHRyaWdnZXIKLSAgICAgICAgY29tZXMg
YmV0d2VlbiB0aGlzIHRhZyBhbmQgdGhlIHByZXZpb3VzIHRhZyBvZiB0aGlzIHR5cGUuCi0KLSAg
ICAgICAgRXhhbXBsZXM6Ci0gICAgICAgICA8cD5Gb288Yj5CYXIgKjxwPiogc2hvdWxkIHBvcCB0
byAncCcsIG5vdCAnYicuCi0gICAgICAgICA8cD5Gb288dGFibGU+QmFyICo8cD4qIHNob3VsZCBw
b3AgdG8gJ3RhYmxlJywgbm90ICdwJy4KLSAgICAgICAgIDxwPkZvbzx0YWJsZT48dHI+QmFyICo8
cD4qIHNob3VsZCBwb3AgdG8gJ3RyJywgbm90ICdwJy4KLQotICAgICAgICAgPGxpPjx1bD48bGk+
ICo8bGk+KiBzaG91bGQgcG9wIHRvICd1bCcsIG5vdCB0aGUgZmlyc3QgJ2xpJy4KLSAgICAgICAg
IDx0cj48dGFibGU+PHRyPiAqPHRyPiogc2hvdWxkIHBvcCB0byAndGFibGUnLCBub3QgdGhlIGZp
cnN0ICd0cicKLSAgICAgICAgIDx0ZD48dHI+PHRkPiAqPHRkPiogc2hvdWxkIHBvcCB0byAndHIn
LCBub3QgdGhlIGZpcnN0ICd0ZCcKLSAgICAgICAgIiIiCi0KLSAgICAgICAgbmVzdGluZ1Jlc2V0
VHJpZ2dlcnMgPSBzZWxmLk5FU1RBQkxFX1RBR1MuZ2V0KG5hbWUpCi0gICAgICAgIGlzTmVzdGFi
bGUgPSBuZXN0aW5nUmVzZXRUcmlnZ2VycyAhPSBOb25lCi0gICAgICAgIGlzUmVzZXROZXN0aW5n
ID0gc2VsZi5SRVNFVF9ORVNUSU5HX1RBR1MuaGFzX2tleShuYW1lKQotICAgICAgICBwb3BUbyA9
IE5vbmUKLSAgICAgICAgaW5jbHVzaXZlID0gVHJ1ZQotICAgICAgICBmb3IgaSBpbiByYW5nZShs
ZW4oc2VsZi50YWdTdGFjayktMSwgMCwgLTEpOgotICAgICAgICAgICAgcCA9IHNlbGYudGFnU3Rh
Y2tbaV0KLSAgICAgICAgICAgIGlmIChub3QgcCBvciBwLm5hbWUgPT0gbmFtZSkgYW5kIG5vdCBp
c05lc3RhYmxlOgotICAgICAgICAgICAgICAgICNOb24tbmVzdGFibGUgdGFncyBnZXQgcG9wcGVk
IHRvIHRoZSB0b3Agb3IgdG8gdGhlaXIKLSAgICAgICAgICAgICAgICAjbGFzdCBvY2N1cmFuY2Uu
Ci0gICAgICAgICAgICAgICAgcG9wVG8gPSBuYW1lCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAg
ICAgICAgICAgIGlmIChuZXN0aW5nUmVzZXRUcmlnZ2VycyAhPSBOb25lCi0gICAgICAgICAgICAg
ICAgYW5kIHAubmFtZSBpbiBuZXN0aW5nUmVzZXRUcmlnZ2VycykgXAotICAgICAgICAgICAgICAg
IG9yIChuZXN0aW5nUmVzZXRUcmlnZ2VycyA9PSBOb25lIGFuZCBpc1Jlc2V0TmVzdGluZwotICAg
ICAgICAgICAgICAgICAgICBhbmQgc2VsZi5SRVNFVF9ORVNUSU5HX1RBR1MuaGFzX2tleShwLm5h
bWUpKToKLQotICAgICAgICAgICAgICAgICNJZiB3ZSBlbmNvdW50ZXIgb25lIG9mIHRoZSBuZXN0
aW5nIHJlc2V0IHRyaWdnZXJzCi0gICAgICAgICAgICAgICAgI3BlY3VsaWFyIHRvIHRoaXMgdGFn
LCBvciB3ZSBlbmNvdW50ZXIgYW5vdGhlciB0YWcKLSAgICAgICAgICAgICAgICAjdGhhdCBjYXVz
ZXMgbmVzdGluZyB0byByZXNldCwgcG9wIHVwIHRvIGJ1dCBub3QKLSAgICAgICAgICAgICAgICAj
aW5jbHVkaW5nIHRoYXQgdGFnLgotICAgICAgICAgICAgICAgIHBvcFRvID0gcC5uYW1lCi0gICAg
ICAgICAgICAgICAgaW5jbHVzaXZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBicmVhawotICAg
ICAgICAgICAgcCA9IHAucGFyZW50Ci0gICAgICAgIGlmIHBvcFRvOgotICAgICAgICAgICAgc2Vs
Zi5fcG9wVG9UYWcocG9wVG8sIGluY2x1c2l2ZSkKLQotICAgIGRlZiB1bmtub3duX3N0YXJ0dGFn
KHNlbGYsIG5hbWUsIGF0dHJzLCBzZWxmQ2xvc2luZz0wKToKLSAgICAgICAgI3ByaW50ICJTdGFy
dCB0YWcgJXM6ICVzIiAlIChuYW1lLCBhdHRycykKLSAgICAgICAgaWYgc2VsZi5xdW90ZVN0YWNr
OgotICAgICAgICAgICAgI1RoaXMgaXMgbm90IGEgcmVhbCB0YWcuCi0gICAgICAgICAgICAjcHJp
bnQgIjwlcz4gaXMgbm90IHJlYWwhIiAlIG5hbWUKLSAgICAgICAgICAgIGF0dHJzID0gJycuam9p
bihtYXAobGFtYmRhKHgsIHkpOiAnICVzPSIlcyInICUgKHgsIHkpLCBhdHRycykpCi0gICAgICAg
ICAgICBzZWxmLmhhbmRsZV9kYXRhKCc8JXMlcz4nICUgKG5hbWUsIGF0dHJzKSkKLSAgICAgICAg
ICAgIHJldHVybgotICAgICAgICBzZWxmLmVuZERhdGEoKQotCi0gICAgICAgIGlmIG5vdCBzZWxm
LmlzU2VsZkNsb3NpbmdUYWcobmFtZSkgYW5kIG5vdCBzZWxmQ2xvc2luZzoKLSAgICAgICAgICAg
IHNlbGYuX3NtYXJ0UG9wKG5hbWUpCi0KLSAgICAgICAgaWYgc2VsZi5wYXJzZU9ubHlUaGVzZSBh
bmQgbGVuKHNlbGYudGFnU3RhY2spIDw9IDEgXAotICAgICAgICAgICAgICAgYW5kIChzZWxmLnBh
cnNlT25seVRoZXNlLnRleHQgb3Igbm90IHNlbGYucGFyc2VPbmx5VGhlc2Uuc2VhcmNoVGFnKG5h
bWUsIGF0dHJzKSk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICB0YWcgPSBUYWcoc2Vs
ZiwgbmFtZSwgYXR0cnMsIHNlbGYuY3VycmVudFRhZywgc2VsZi5wcmV2aW91cykKLSAgICAgICAg
aWYgc2VsZi5wcmV2aW91czoKLSAgICAgICAgICAgIHNlbGYucHJldmlvdXMubmV4dCA9IHRhZwot
ICAgICAgICBzZWxmLnByZXZpb3VzID0gdGFnCi0gICAgICAgIHNlbGYucHVzaFRhZyh0YWcpCi0g
ICAgICAgIGlmIHNlbGZDbG9zaW5nIG9yIHNlbGYuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKToKLSAg
ICAgICAgICAgIHNlbGYucG9wVGFnKCkKLSAgICAgICAgaWYgbmFtZSBpbiBzZWxmLlFVT1RFX1RB
R1M6Ci0gICAgICAgICAgICAjcHJpbnQgIkJlZ2lubmluZyBxdW90ZSAoJXMpIiAlIG5hbWUKLSAg
ICAgICAgICAgIHNlbGYucXVvdGVTdGFjay5hcHBlbmQobmFtZSkKLSAgICAgICAgICAgIHNlbGYu
bGl0ZXJhbCA9IDEKLSAgICAgICAgcmV0dXJuIHRhZwotCi0gICAgZGVmIHVua25vd25fZW5kdGFn
KHNlbGYsIG5hbWUpOgotICAgICAgICAjcHJpbnQgIkVuZCB0YWcgJXMiICUgbmFtZQotICAgICAg
ICBpZiBzZWxmLnF1b3RlU3RhY2sgYW5kIHNlbGYucXVvdGVTdGFja1stMV0gIT0gbmFtZToKLSAg
ICAgICAgICAgICNUaGlzIGlzIG5vdCBhIHJlYWwgZW5kIHRhZy4KLSAgICAgICAgICAgICNwcmlu
dCAiPC8lcz4gaXMgbm90IHJlYWwhIiAlIG5hbWUKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Rh
dGEoJzwvJXM+JyAlIG5hbWUpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5lbmRE
YXRhKCkKLSAgICAgICAgc2VsZi5fcG9wVG9UYWcobmFtZSkKLSAgICAgICAgaWYgc2VsZi5xdW90
ZVN0YWNrIGFuZCBzZWxmLnF1b3RlU3RhY2tbLTFdID09IG5hbWU6Ci0gICAgICAgICAgICBzZWxm
LnF1b3RlU3RhY2sucG9wKCkKLSAgICAgICAgICAgIHNlbGYubGl0ZXJhbCA9IChsZW4oc2VsZi5x
dW90ZVN0YWNrKSA+IDApCi0KLSAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAg
ICAgIHNlbGYuY3VycmVudERhdGEuYXBwZW5kKGRhdGEpCi0KLSAgICBkZWYgZXh0cmFjdENoYXJz
ZXRGcm9tTWV0YShzZWxmLCBhdHRycyk6Ci0gICAgICAgIHNlbGYudW5rbm93bl9zdGFydHRhZygn
bWV0YScsIGF0dHJzKQotCi0KLWNsYXNzIEJlYXV0aWZ1bFNvdXAoQmVhdXRpZnVsU3RvbmVTb3Vw
KToKLQotICAgICIiIlRoaXMgcGFyc2VyIGtub3dzIHRoZSBmb2xsb3dpbmcgZmFjdHMgYWJvdXQg
SFRNTDoKLQotICAgICogU29tZSB0YWdzIGhhdmUgbm8gY2xvc2luZyB0YWcgYW5kIHNob3VsZCBi
ZSBpbnRlcnByZXRlZCBhcyBiZWluZwotICAgICAgY2xvc2VkIGFzIHNvb24gYXMgdGhleSBhcmUg
ZW5jb3VudGVyZWQuCi0KLSAgICAqIFRoZSB0ZXh0IGluc2lkZSBzb21lIHRhZ3MgKGllLiAnc2Ny
aXB0JykgbWF5IGNvbnRhaW4gdGFncyB3aGljaAotICAgICAgYXJlIG5vdCByZWFsbHkgcGFydCBv
ZiB0aGUgZG9jdW1lbnQgYW5kIHdoaWNoIHNob3VsZCBiZSBwYXJzZWQKLSAgICAgIGFzIHRleHQs
IG5vdCB0YWdzLiBJZiB5b3Ugd2FudCB0byBwYXJzZSB0aGUgdGV4dCBhcyB0YWdzLCB5b3UgY2Fu
Ci0gICAgICBhbHdheXMgZmV0Y2ggaXQgYW5kIHBhcnNlIGl0IGV4cGxpY2l0bHkuCi0KLSAgICAq
IFRhZyBuZXN0aW5nIHJ1bGVzOgotCi0gICAgICBNb3N0IHRhZ3MgY2FuJ3QgYmUgbmVzdGVkIGF0
IGFsbC4gRm9yIGluc3RhbmNlLCB0aGUgb2NjdXJhbmNlIG9mCi0gICAgICBhIDxwPiB0YWcgc2hv
dWxkIGltcGxpY2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzIDxwPiB0YWcuCi0KLSAgICAgICA8cD5Q
YXJhMTxwPlBhcmEyCi0gICAgICAgIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgotICAgICAg
IDxwPlBhcmExPC9wPjxwPlBhcmEyCi0KLSAgICAgIFNvbWUgdGFncyBjYW4gYmUgbmVzdGVkIGFy
Yml0cmFyaWx5LiBGb3IgaW5zdGFuY2UsIHRoZSBvY2N1cmFuY2UKLSAgICAgIG9mIGEgPGJsb2Nr
cXVvdGU+IHRhZyBzaG91bGQgX25vdF8gaW1wbGljaXRseSBjbG9zZSB0aGUgcHJldmlvdXMKLSAg
ICAgIDxibG9ja3F1b3RlPiB0YWcuCi0KLSAgICAgICBBbGljZSBzYWlkOiA8YmxvY2txdW90ZT5C
b2Igc2FpZDogPGJsb2NrcXVvdGU+QmxhaAotICAgICAgICBzaG91bGQgTk9UIGJlIHRyYW5zZm9y
bWVkIGludG86Ci0gICAgICAgQWxpY2Ugc2FpZDogPGJsb2NrcXVvdGU+Qm9iIHNhaWQ6IDwvYmxv
Y2txdW90ZT48YmxvY2txdW90ZT5CbGFoCi0KLSAgICAgIFNvbWUgdGFncyBjYW4gYmUgbmVzdGVk
LCBidXQgdGhlIG5lc3RpbmcgaXMgcmVzZXQgYnkgdGhlCi0gICAgICBpbnRlcnBvc2l0aW9uIG9m
IG90aGVyIHRhZ3MuIEZvciBpbnN0YW5jZSwgYSA8dHI+IHRhZyBzaG91bGQKLSAgICAgIGltcGxp
Y2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzIDx0cj4gdGFnIHdpdGhpbiB0aGUgc2FtZSA8dGFibGU+
LAotICAgICAgYnV0IG5vdCBjbG9zZSBhIDx0cj4gdGFnIGluIGFub3RoZXIgdGFibGUuCi0KLSAg
ICAgICA8dGFibGU+PHRyPkJsYWg8dHI+QmxhaAotICAgICAgICBzaG91bGQgYmUgdHJhbnNmb3Jt
ZWQgaW50bzoKLSAgICAgICA8dGFibGU+PHRyPkJsYWg8L3RyPjx0cj5CbGFoCi0gICAgICAgIGJ1
dCwKLSAgICAgICA8dHI+QmxhaDx0YWJsZT48dHI+QmxhaAotICAgICAgICBzaG91bGQgTk9UIGJl
IHRyYW5zZm9ybWVkIGludG8KLSAgICAgICA8dHI+QmxhaDx0YWJsZT48L3RyPjx0cj5CbGFoCi0K
LSAgICBEaWZmZXJpbmcgYXNzdW1wdGlvbnMgYWJvdXQgdGFnIG5lc3RpbmcgcnVsZXMgYXJlIGEg
bWFqb3Igc291cmNlCi0gICAgb2YgcHJvYmxlbXMgd2l0aCB0aGUgQmVhdXRpZnVsU291cCBjbGFz
cy4gSWYgQmVhdXRpZnVsU291cCBpcyBub3QKLSAgICB0cmVhdGluZyBhcyBuZXN0YWJsZSBhIHRh
ZyB5b3VyIHBhZ2UgYXV0aG9yIHRyZWF0cyBhcyBuZXN0YWJsZSwKLSAgICB0cnkgSUNhbnRCZWxp
ZXZlSXRzQmVhdXRpZnVsU291cCwgTWluaW1hbFNvdXAsIG9yCi0gICAgQmVhdXRpZnVsU3RvbmVT
b3VwIGJlZm9yZSB3cml0aW5nIHlvdXIgb3duIHN1YmNsYXNzLiIiIgotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIGlmIG5vdCBrd2FyZ3MuaGFzX2tl
eSgnc21hcnRRdW90ZXNUbycpOgotICAgICAgICAgICAga3dhcmdzWydzbWFydFF1b3Rlc1RvJ10g
PSBzZWxmLkhUTUxfRU5USVRJRVMKLSAgICAgICAga3dhcmdzWydpc0hUTUwnXSA9IFRydWUKLSAg
ICAgICAgQmVhdXRpZnVsU3RvbmVTb3VwLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykK
LQotICAgIFNFTEZfQ0xPU0lOR19UQUdTID0gYnVpbGRUYWdNYXAoTm9uZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsnYnInICwgJ2hyJywgJ2lucHV0JywgJ2ltZycsICdt
ZXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFjZXInLCAnbGlu
aycsICdmcmFtZScsICdiYXNlJ10pCi0KLSAgICBQUkVTRVJWRV9XSElURVNQQUNFX1RBR1MgPSBz
ZXQoWydwcmUnLCAndGV4dGFyZWEnXSkKLQotICAgIFFVT1RFX1RBR1MgPSB7J3NjcmlwdCcgOiBO
b25lLCAndGV4dGFyZWEnIDogTm9uZX0KLQotICAgICNBY2NvcmRpbmcgdG8gdGhlIEhUTUwgc3Rh
bmRhcmQsIGVhY2ggb2YgdGhlc2UgaW5saW5lIHRhZ3MgY2FuCi0gICAgI2NvbnRhaW4gYW5vdGhl
ciB0YWcgb2YgdGhlIHNhbWUgdHlwZS4gRnVydGhlcm1vcmUsIGl0J3MgY29tbW9uCi0gICAgI3Rv
IGFjdHVhbGx5IHVzZSB0aGVzZSB0YWdzIHRoaXMgd2F5LgotICAgIE5FU1RBQkxFX0lOTElORV9U
QUdTID0gWydzcGFuJywgJ2ZvbnQnLCAncScsICdvYmplY3QnLCAnYmRvJywgJ3N1YicsICdzdXAn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXInXQotCi0gICAgI0FjY29yZGlu
ZyB0byB0aGUgSFRNTCBzdGFuZGFyZCwgdGhlc2UgYmxvY2sgdGFncyBjYW4gY29udGFpbgotICAg
ICNhbm90aGVyIHRhZyBvZiB0aGUgc2FtZSB0eXBlLiBGdXJ0aGVybW9yZSwgaXQncyBjb21tb24K
LSAgICAjdG8gYWN0dWFsbHkgdXNlIHRoZXNlIHRhZ3MgdGhpcyB3YXkuCi0gICAgTkVTVEFCTEVf
QkxPQ0tfVEFHUyA9IFsnYmxvY2txdW90ZScsICdkaXYnLCAnZmllbGRzZXQnLCAnaW5zJywgJ2Rl
bCddCi0KLSAgICAjTGlzdHMgY2FuIGNvbnRhaW4gb3RoZXIgbGlzdHMsIGJ1dCB0aGVyZSBhcmUg
cmVzdHJpY3Rpb25zLgotICAgIE5FU1RBQkxFX0xJU1RfVEFHUyA9IHsgJ29sJyA6IFtdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3VsJyA6IFtdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2xpJyA6IFsndWwnLCAnb2wnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdk
bCcgOiBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZCcgOiBbJ2RsJ10sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZHQnIDogWydkbCddIH0KLQotICAgICNUYWJsZXMgY2Fu
IGNvbnRhaW4gb3RoZXIgdGFibGVzLCBidXQgdGhlcmUgYXJlIHJlc3RyaWN0aW9ucy4KLSAgICBO
RVNUQUJMRV9UQUJMRV9UQUdTID0geyd0YWJsZScgOiBbXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd0cicgOiBbJ3RhYmxlJywgJ3Rib2R5JywgJ3Rmb290JywgJ3RoZWFkJ10sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAndGQnIDogWyd0ciddLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3RoJyA6IFsndHInXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGVh
ZCcgOiBbJ3RhYmxlJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAndGJvZHknIDogWyd0
YWJsZSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rmb290JyA6IFsndGFibGUnXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgIE5PTl9ORVNUQUJMRV9CTE9DS19U
QUdTID0gWydhZGRyZXNzJywgJ2Zvcm0nLCAncCcsICdwcmUnXQotCi0gICAgI0lmIG9uZSBvZiB0
aGVzZSB0YWdzIGlzIGVuY291bnRlcmVkLCBhbGwgdGFncyB1cCB0byB0aGUgbmV4dCB0YWcgb2YK
LSAgICAjdGhpcyB0eXBlIGFyZSBwb3BwZWQuCi0gICAgUkVTRVRfTkVTVElOR19UQUdTID0gYnVp
bGRUYWdNYXAoTm9uZSwgTkVTVEFCTEVfQkxPQ0tfVEFHUywgJ25vc2NyaXB0JywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT05fTkVTVEFCTEVfQkxPQ0tfVEFHUywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVNUQUJMRV9MSVNUX1RBR1MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVTVEFCTEVfVEFCTEVfVEFHUykK
LQotICAgIE5FU1RBQkxFX1RBR1MgPSBidWlsZFRhZ01hcChbXSwgTkVTVEFCTEVfSU5MSU5FX1RB
R1MsIE5FU1RBQkxFX0JMT0NLX1RBR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5FU1RBQkxFX0xJU1RfVEFHUywgTkVTVEFCTEVfVEFCTEVfVEFHUykKLQotICAgICMgVXNlZCB0
byBkZXRlY3QgdGhlIGNoYXJzZXQgaW4gYSBNRVRBIHRhZzsgc2VlIHN0YXJ0X21ldGEKLSAgICBD
SEFSU0VUX1JFID0gcmUuY29tcGlsZSgiKChefDspXHMqY2hhcnNldD0pKFteO10qKSIsIHJlLk0p
Ci0KLSAgICBkZWYgZXh0cmFjdENoYXJzZXRGcm9tTWV0YShzZWxmLCBhdHRycyk6Ci0gICAgICAg
ICIiIkJlYXV0aWZ1bCBTb3VwIGNhbiBkZXRlY3QgYSBjaGFyc2V0IGluY2x1ZGVkIGluIGEgTUVU
QSB0YWcsCi0gICAgICAgIHRyeSB0byBjb252ZXJ0IHRoZSBkb2N1bWVudCB0byB0aGF0IGNoYXJz
ZXQsIGFuZCByZS1wYXJzZSB0aGUKLSAgICAgICAgZG9jdW1lbnQgZnJvbSB0aGUgYmVnaW5uaW5n
LiIiIgotICAgICAgICBodHRwRXF1aXYgPSBOb25lCi0gICAgICAgIGNvbnRlbnRUeXBlID0gTm9u
ZQotICAgICAgICBjb250ZW50VHlwZUluZGV4ID0gTm9uZQotICAgICAgICB0YWdOZWVkc0VuY29k
aW5nU3Vic3RpdHV0aW9uID0gRmFsc2UKLQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4o
YXR0cnMpKToKLSAgICAgICAgICAgIGtleSwgdmFsdWUgPSBhdHRyc1tpXQotICAgICAgICAgICAg
a2V5ID0ga2V5Lmxvd2VyKCkKLSAgICAgICAgICAgIGlmIGtleSA9PSAnaHR0cC1lcXVpdic6Ci0g
ICAgICAgICAgICAgICAgaHR0cEVxdWl2ID0gdmFsdWUKLSAgICAgICAgICAgIGVsaWYga2V5ID09
ICdjb250ZW50JzoKLSAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IHZhbHVlCi0gICAgICAg
ICAgICAgICAgY29udGVudFR5cGVJbmRleCA9IGkKLQotICAgICAgICBpZiBodHRwRXF1aXYgYW5k
IGNvbnRlbnRUeXBlOiAjIEl0J3MgYW4gaW50ZXJlc3RpbmcgbWV0YSB0YWcuCi0gICAgICAgICAg
ICBtYXRjaCA9IHNlbGYuQ0hBUlNFVF9SRS5zZWFyY2goY29udGVudFR5cGUpCi0gICAgICAgICAg
ICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICBpZiAoc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGlu
ZyBpcyBub3QgTm9uZSBvcgotICAgICAgICAgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2Rp
bmcgPT0gc2VsZi5mcm9tRW5jb2RpbmcpOgotICAgICAgICAgICAgICAgICAgICAjIEFuIEhUTUwg
ZW5jb2Rpbmcgd2FzIHNuaWZmZWQgd2hpbGUgY29udmVydGluZwotICAgICAgICAgICAgICAgICAg
ICAjIHRoZSBkb2N1bWVudCB0byBVbmljb2RlLCBvciBhbiBIVE1MIGVuY29kaW5nIHdhcwotICAg
ICAgICAgICAgICAgICAgICAjIHNuaWZmZWQgZHVyaW5nIGEgcHJldmlvdXMgcGFzcyB0aHJvdWdo
IHRoZQotICAgICAgICAgICAgICAgICAgICAjIGRvY3VtZW50LCBvciBhbiBlbmNvZGluZyB3YXMg
c3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgICAgICMgZXhwbGljaXRseSBhbmQgaXQgd29ya2Vk
LiBSZXdyaXRlIHRoZSBtZXRhIHRhZy4KLSAgICAgICAgICAgICAgICAgICAgZGVmIHJld3JpdGUo
bWF0Y2gpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpICsg
IiVTT1VQLUVOQ09ESU5HJSIKLSAgICAgICAgICAgICAgICAgICAgbmV3QXR0ciA9IHNlbGYuQ0hB
UlNFVF9SRS5zdWIocmV3cml0ZSwgY29udGVudFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIGF0
dHJzW2NvbnRlbnRUeXBlSW5kZXhdID0gKGF0dHJzW2NvbnRlbnRUeXBlSW5kZXhdWzBdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBdHRyKQotICAg
ICAgICAgICAgICAgICAgICB0YWdOZWVkc0VuY29kaW5nU3Vic3RpdHV0aW9uID0gVHJ1ZQotICAg
ICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBvdXIgZmly
c3QgcGFzcyB0aHJvdWdoIHRoZSBkb2N1bWVudC4KLSAgICAgICAgICAgICAgICAgICAgIyBHbyB0
aHJvdWdoIGl0IGFnYWluIHdpdGggdGhlIGVuY29kaW5nIGluZm9ybWF0aW9uLgotICAgICAgICAg
ICAgICAgICAgICBuZXdDaGFyc2V0ID0gbWF0Y2guZ3JvdXAoMykKLSAgICAgICAgICAgICAgICAg
ICAgaWYgbmV3Q2hhcnNldCBhbmQgbmV3Q2hhcnNldCAhPSBzZWxmLm9yaWdpbmFsRW5jb2Rpbmc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0gbmV3
Q2hhcnNldAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChzZWxmLmRlY2xhcmVk
SFRNTEVuY29kaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcFBhcnNpbmcK
LSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICB0YWcgPSBzZWxmLnVua25vd25fc3Rh
cnR0YWcoIm1ldGEiLCBhdHRycykKLSAgICAgICAgaWYgdGFnIGFuZCB0YWdOZWVkc0VuY29kaW5n
U3Vic3RpdHV0aW9uOgotICAgICAgICAgICAgdGFnLmNvbnRhaW5zU3Vic3RpdHV0aW9ucyA9IFRy
dWUKLQotCi1jbGFzcyBTdG9wUGFyc2luZyhFeGNlcHRpb24pOgotICAgIHBhc3MKLQotY2xhc3Mg
SUNhbnRCZWxpZXZlSXRzQmVhdXRpZnVsU291cChCZWF1dGlmdWxTb3VwKToKLQotICAgICIiIlRo
ZSBCZWF1dGlmdWxTb3VwIGNsYXNzIGlzIG9yaWVudGVkIHRvd2FyZHMgc2tpcHBpbmcgb3Zlcgot
ICAgIGNvbW1vbiBIVE1MIGVycm9ycyBsaWtlIHVuY2xvc2VkIHRhZ3MuIEhvd2V2ZXIsIHNvbWV0
aW1lcyBpdCBtYWtlcwotICAgIGVycm9ycyBvZiBpdHMgb3duLiBGb3IgaW5zdGFuY2UsIGNvbnNp
ZGVyIHRoaXMgZnJhZ21lbnQ6Ci0KLSAgICAgPGI+Rm9vPGI+QmFyPC9iPjwvYj4KLQotICAgIFRo
aXMgaXMgcGVyZmVjdGx5IHZhbGlkIChpZiBiaXphcnJlKSBIVE1MLiBIb3dldmVyLCB0aGUKLSAg
ICBCZWF1dGlmdWxTb3VwIGNsYXNzIHdpbGwgaW1wbGljaXRseSBjbG9zZSB0aGUgZmlyc3QgYiB0
YWcgd2hlbiBpdAotICAgIGVuY291bnRlcnMgdGhlIHNlY29uZCAnYicuIEl0IHdpbGwgdGhpbmsg
dGhlIGF1dGhvciB3cm90ZQotICAgICI8Yj5Gb288Yj5CYXIiLCBhbmQgZGlkbid0IGNsb3NlIHRo
ZSBmaXJzdCAnYicgdGFnLCBiZWNhdXNlCi0gICAgdGhlcmUncyBubyByZWFsLXdvcmxkIHJlYXNv
biB0byBib2xkIHNvbWV0aGluZyB0aGF0J3MgYWxyZWFkeQotICAgIGJvbGQuIFdoZW4gaXQgZW5j
b3VudGVycyAnPC9iPjwvYj4nIGl0IHdpbGwgY2xvc2UgdHdvIG1vcmUgJ2InCi0gICAgdGFncywg
Zm9yIGEgZ3JhbmQgdG90YWwgb2YgdGhyZWUgdGFncyBjbG9zZWQgaW5zdGVhZCBvZiB0d28uIFRo
aXMKLSAgICBjYW4gdGhyb3cgb2ZmIHRoZSByZXN0IG9mIHlvdXIgZG9jdW1lbnQgc3RydWN0dXJl
LiBUaGUgc2FtZSBpcwotICAgIHRydWUgb2YgYSBudW1iZXIgb2Ygb3RoZXIgdGFncywgbGlzdGVk
IGJlbG93LgotCi0gICAgSXQncyBtdWNoIG1vcmUgY29tbW9uIGZvciBzb21lb25lIHRvIGZvcmdl
dCB0byBjbG9zZSBhICdiJyB0YWcKLSAgICB0aGFuIHRvIGFjdHVhbGx5IHVzZSBuZXN0ZWQgJ2In
IHRhZ3MsIGFuZCB0aGUgQmVhdXRpZnVsU291cCBjbGFzcwotICAgIGhhbmRsZXMgdGhlIGNvbW1v
biBjYXNlLiBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIG5vdC1jby1jb21tb24KLSAgICBjYXNlOiB3
aGVyZSB5b3UgY2FuJ3QgYmVsaWV2ZSBzb21lb25lIHdyb3RlIHdoYXQgdGhleSBkaWQsIGJ1dAot
ICAgIGl0J3MgdmFsaWQgSFRNTCBhbmQgQmVhdXRpZnVsU291cCBzY3Jld2VkIHVwIGJ5IGFzc3Vt
aW5nIGl0Ci0gICAgd291bGRuJ3QgYmUuIiIiCi0KLSAgICBJX0NBTlRfQkVMSUVWRV9USEVZUkVf
TkVTVEFCTEVfSU5MSU5FX1RBR1MgPSBcCi0gICAgIFsnZW0nLCAnYmlnJywgJ2knLCAnc21hbGwn
LCAndHQnLCAnYWJicicsICdhY3JvbnltJywgJ3N0cm9uZycsCi0gICAgICAnY2l0ZScsICdjb2Rl
JywgJ2RmbicsICdrYmQnLCAnc2FtcCcsICdzdHJvbmcnLCAndmFyJywgJ2InLAotICAgICAgJ2Jp
ZyddCi0KLSAgICBJX0NBTlRfQkVMSUVWRV9USEVZUkVfTkVTVEFCTEVfQkxPQ0tfVEFHUyA9IFsn
bm9zY3JpcHQnXQotCi0gICAgTkVTVEFCTEVfVEFHUyA9IGJ1aWxkVGFnTWFwKFtdLCBCZWF1dGlm
dWxTb3VwLk5FU1RBQkxFX1RBR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElf
Q0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9CTE9DS19UQUdTLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJX0NBTlRfQkVMSUVWRV9USEVZUkVfTkVTVEFCTEVfSU5MSU5FX1RB
R1MpCi0KLWNsYXNzIE1pbmltYWxTb3VwKEJlYXV0aWZ1bFNvdXApOgotICAgICIiIlRoZSBNaW5p
bWFsU291cCBjbGFzcyBpcyBmb3IgcGFyc2luZyBIVE1MIHRoYXQgY29udGFpbnMKLSAgICBwYXRo
b2xvZ2ljYWxseSBiYWQgbWFya3VwLiBJdCBtYWtlcyBubyBhc3N1bXB0aW9ucyBhYm91dCB0YWcK
LSAgICBuZXN0aW5nLCBidXQgaXQgZG9lcyBrbm93IHdoaWNoIHRhZ3MgYXJlIHNlbGYtY2xvc2lu
ZywgdGhhdAotICAgIDxzY3JpcHQ+IHRhZ3MgY29udGFpbiBKYXZhc2NyaXB0IGFuZCBzaG91bGQg
bm90IGJlIHBhcnNlZCwgdGhhdAotICAgIE1FVEEgdGFncyBtYXkgY29udGFpbiBlbmNvZGluZyBp
bmZvcm1hdGlvbiwgYW5kIHNvIG9uLgotCi0gICAgVGhpcyBhbHNvIG1ha2VzIGl0IGJldHRlciBm
b3Igc3ViY2xhc3NpbmcgdGhhbiBCZWF1dGlmdWxTdG9uZVNvdXAKLSAgICBvciBCZWF1dGlmdWxT
b3VwLiIiIgotCi0gICAgUkVTRVRfTkVTVElOR19UQUdTID0gYnVpbGRUYWdNYXAoJ25vc2NyaXB0
JykKLSAgICBORVNUQUJMRV9UQUdTID0ge30KLQotY2xhc3MgQmVhdXRpZnVsU09BUChCZWF1dGlm
dWxTdG9uZVNvdXApOgotICAgICIiIlRoaXMgY2xhc3Mgd2lsbCBwdXNoIGEgdGFnIHdpdGggb25s
eSBhIHNpbmdsZSBzdHJpbmcgY2hpbGQgaW50bwotICAgIHRoZSB0YWcncyBwYXJlbnQgYXMgYW4g
YXR0cmlidXRlLiBUaGUgYXR0cmlidXRlJ3MgbmFtZSBpcyB0aGUgdGFnCi0gICAgbmFtZSwgYW5k
IHRoZSB2YWx1ZSBpcyB0aGUgc3RyaW5nIGNoaWxkLiBBbiBleGFtcGxlIHNob3VsZCBnaXZlCi0g
ICAgdGhlIGZsYXZvciBvZiB0aGUgY2hhbmdlOgotCi0gICAgPGZvbz48YmFyPmJhejwvYmFyPjwv
Zm9vPgotICAgICA9PgotICAgIDxmb28gYmFyPSJiYXoiPjxiYXI+YmF6PC9iYXI+PC9mb28+Ci0K
LSAgICBZb3UgY2FuIHRoZW4gYWNjZXNzIGZvb1RhZ1snYmFyJ10gaW5zdGVhZCBvZiBmb29UYWcu
YmFyVGFnLnN0cmluZy4KLQotICAgIFRoaXMgaXMsIG9mIGNvdXJzZSwgdXNlZnVsIGZvciBzY3Jh
cGluZyBzdHJ1Y3R1cmVzIHRoYXQgdGVuZCB0bwotICAgIHVzZSBzdWJlbGVtZW50cyBpbnN0ZWFk
IG9mIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgU09BUCBtZXNzYWdlcy4gTm90ZQotICAgIHRoYXQgaXQg
bW9kaWZpZXMgaXRzIGlucHV0LCBzbyBkb24ndCBwcmludCB0aGUgbW9kaWZpZWQgdmVyc2lvbgot
ICAgIG91dC4KLQotICAgIEknbSBub3Qgc3VyZSBob3cgbWFueSBwZW9wbGUgcmVhbGx5IHdhbnQg
dG8gdXNlIHRoaXMgY2xhc3M7IGxldCBtZQotICAgIGtub3cgaWYgeW91IGRvLiBNYWlubHkgSSBs
aWtlIHRoZSBuYW1lLiIiIgotCi0gICAgZGVmIHBvcFRhZyhzZWxmKToKLSAgICAgICAgaWYgbGVu
KHNlbGYudGFnU3RhY2spID4gMToKLSAgICAgICAgICAgIHRhZyA9IHNlbGYudGFnU3RhY2tbLTFd
Ci0gICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhZ1N0YWNrWy0yXQotICAgICAgICAgICAgcGFy
ZW50Ll9nZXRBdHRyTWFwKCkKLSAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHRhZywgVGFnKSBh
bmQgbGVuKHRhZy5jb250ZW50cykgPT0gMSBhbmQKLSAgICAgICAgICAgICAgICBpc2luc3RhbmNl
KHRhZy5jb250ZW50c1swXSwgTmF2aWdhYmxlU3RyaW5nKSBhbmQKLSAgICAgICAgICAgICAgICBu
b3QgcGFyZW50LmF0dHJNYXAuaGFzX2tleSh0YWcubmFtZSkpOgotICAgICAgICAgICAgICAgIHBh
cmVudFt0YWcubmFtZV0gPSB0YWcuY29udGVudHNbMF0KLSAgICAgICAgQmVhdXRpZnVsU3RvbmVT
b3VwLnBvcFRhZyhzZWxmKQotCi0jRW50ZXJwcmlzZSBjbGFzcyBuYW1lcyEgSXQgaGFzIGNvbWUg
dG8gb3VyIGF0dGVudGlvbiB0aGF0IHNvbWUgcGVvcGxlCi0jdGhpbmsgdGhlIG5hbWVzIG9mIHRo
ZSBCZWF1dGlmdWwgU291cCBwYXJzZXIgY2xhc3NlcyBhcmUgdG9vIHNpbGx5Ci0jYW5kICJ1bnBy
b2Zlc3Npb25hbCIgZm9yIHVzZSBpbiBlbnRlcnByaXNlIHNjcmVlbi1zY3JhcGluZy4gV2UgZmVl
bAotI3lvdXIgcGFpbiEgRm9yIHN1Y2gtbWluZGVkIGZvbGssIHRoZSBCZWF1dGlmdWwgU291cCBD
b25zb3J0aXVtIEFuZAotI0FsbC1OaWdodCBLb3NoZXIgQmFrZXJ5IHJlY29tbWVuZHMgcmVuYW1p
bmcgdGhpcyBmaWxlIHRvCi0jIlJvYnVzdFBhcnNlci5weSIgKG9yLCBpbiBjYXNlcyBvZiBleHRy
ZW1lIGVudGVycHJpc2luZXNzLAotIyJSb2J1c3RQYXJzZXJCZWFuSW50ZXJmYWNlLmNsYXNzIikg
YW5kIHVzaW5nIHRoZSBmb2xsb3dpbmcKLSNlbnRlcnByaXNlLWZyaWVuZGx5IGNsYXNzIGFsaWFz
ZXM6Ci1jbGFzcyBSb2J1c3RYTUxQYXJzZXIoQmVhdXRpZnVsU3RvbmVTb3VwKToKLSAgICBwYXNz
Ci1jbGFzcyBSb2J1c3RIVE1MUGFyc2VyKEJlYXV0aWZ1bFNvdXApOgotICAgIHBhc3MKLWNsYXNz
IFJvYnVzdFdhY2tBc3NIVE1MUGFyc2VyKElDYW50QmVsaWV2ZUl0c0JlYXV0aWZ1bFNvdXApOgot
ICAgIHBhc3MKLWNsYXNzIFJvYnVzdEluc2FuZWx5V2Fja0Fzc0hUTUxQYXJzZXIoTWluaW1hbFNv
dXApOgotICAgIHBhc3MKLWNsYXNzIFNpbXBsaWZ5aW5nU09BUFBhcnNlcihCZWF1dGlmdWxTT0FQ
KToKLSAgICBwYXNzCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIwotIwotIyBCb251cyBsaWJyYXJ5OiBVbmljb2RlLCBEYW1taXQKLSMKLSMg
VGhpcyBjbGFzcyBmb3JjZXMgWE1MIGRhdGEgaW50byBhIHN0YW5kYXJkIGZvcm1hdCAodXN1YWxs
eSB0byBVVEYtOAotIyBvciBVbmljb2RlKS4gIEl0IGlzIGhlYXZpbHkgYmFzZWQgb24gY29kZSBm
cm9tIE1hcmsgUGlsZ3JpbSdzCi0jIFVuaXZlcnNhbCBGZWVkIFBhcnNlci4gSXQgZG9lcyBub3Qg
cmV3cml0ZSB0aGUgWE1MIG9yIEhUTUwgdG8KLSMgcmVmbGVjdCBhIG5ldyBlbmNvZGluZzogdGhh
dCBoYXBwZW5zIGluIEJlYXV0aWZ1bFN0b25lU291cC5oYW5kbGVfcGkKLSMgKFhNTCkgYW5kIEJl
YXV0aWZ1bFNvdXAuc3RhcnRfbWV0YSAoSFRNTCkuCi0KLSMgQXV0b2RldGVjdHMgY2hhcmFjdGVy
IGVuY29kaW5ncy4KLSMgRG93bmxvYWQgZnJvbSBodHRwOi8vY2hhcmRldC5mZWVkcGFyc2VyLm9y
Zy8KLXRyeToKLSAgICBpbXBvcnQgY2hhcmRldAotIyAgICBpbXBvcnQgY2hhcmRldC5jb25zdGFu
dHMKLSMgICAgY2hhcmRldC5jb25zdGFudHMuX2RlYnVnID0gMQotZXhjZXB0IEltcG9ydEVycm9y
OgotICAgIGNoYXJkZXQgPSBOb25lCi0KLSMgY2prY29kZWNzIGFuZCBpY29udl9jb2RlYyBtYWtl
IFB5dGhvbiBrbm93IGFib3V0IG1vcmUgY2hhcmFjdGVyIGVuY29kaW5ncy4KLSMgQm90aCBhcmUg
YXZhaWxhYmxlIGZyb20gaHR0cDovL2Nqa3B5dGhvbi5pMThuLm9yZy8KLSMgVGhleSdyZSBidWls
dCBpbiBpZiB5b3UgdXNlIFB5dGhvbiAyLjQuCi10cnk6Ci0gICAgaW1wb3J0IGNqa2NvZGVjcy5h
bGlhc2VzCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotdHJ5OgotICAgIGltcG9ydCBp
Y29udl9jb2RlYwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLQotY2xhc3MgVW5pY29k
ZURhbW1pdDoKLSAgICAiIiJBIGNsYXNzIGZvciBkZXRlY3RpbmcgdGhlIGVuY29kaW5nIG9mIGEg
Kk1MIGRvY3VtZW50IGFuZAotICAgIGNvbnZlcnRpbmcgaXQgdG8gYSBVbmljb2RlIHN0cmluZy4g
SWYgdGhlIHNvdXJjZSBlbmNvZGluZyBpcwotICAgIHdpbmRvd3MtMTI1MiwgY2FuIHJlcGxhY2Ug
TVMgc21hcnQgcXVvdGVzIHdpdGggdGhlaXIgSFRNTCBvciBYTUwKLSAgICBlcXVpdmFsZW50cy4i
IiIKLQotICAgICMgVGhpcyBkaWN0aW9uYXJ5IG1hcHMgY29tbW9ubHkgc2VlbiB2YWx1ZXMgZm9y
ICJjaGFyc2V0IiBpbiBIVE1MCi0gICAgIyBtZXRhIHRhZ3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcg
UHl0aG9uIGNvZGVjIG5hbWVzLiBJdCBvbmx5IGNvdmVycwotICAgICMgdmFsdWVzIHRoYXQgYXJl
bid0IGluIFB5dGhvbidzIGFsaWFzZXMgYW5kIGNhbid0IGJlIGRldGVybWluZWQKLSAgICAjIGJ5
IHRoZSBoZXVyaXN0aWNzIGluIGZpbmRfY29kZWMuCi0gICAgQ0hBUlNFVF9BTElBU0VTID0geyAi
bWFjaW50b3NoIiA6ICJtYWMtcm9tYW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIngtc2pp
cyIgOiAic2hpZnQtamlzIiB9Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBvdmVy
cmlkZUVuY29kaW5ncz1bXSwKLSAgICAgICAgICAgICAgICAgc21hcnRRdW90ZXNUbz0neG1sJywg
aXNIVE1MPUZhbHNlKToKLSAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IE5vbmUK
LSAgICAgICAgc2VsZi5tYXJrdXAsIGRvY3VtZW50RW5jb2RpbmcsIHNuaWZmZWRFbmNvZGluZyA9
IFwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RldGVjdEVuY29kaW5nKG1hcmt1cCwgaXNI
VE1MKQotICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBzbWFydFF1b3Rlc1RvCi0gICAgICAg
IHNlbGYudHJpZWRFbmNvZGluZ3MgPSBbXQotICAgICAgICBpZiBtYXJrdXAgPT0gJycgb3IgaXNp
bnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgotICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29k
aW5nID0gTm9uZQotICAgICAgICAgICAgc2VsZi51bmljb2RlID0gdW5pY29kZShtYXJrdXApCi0g
ICAgICAgICAgICByZXR1cm4KLQotICAgICAgICB1ID0gTm9uZQotICAgICAgICBmb3IgcHJvcG9z
ZWRFbmNvZGluZyBpbiBvdmVycmlkZUVuY29kaW5nczoKLSAgICAgICAgICAgIHUgPSBzZWxmLl9j
b252ZXJ0RnJvbShwcm9wb3NlZEVuY29kaW5nKQotICAgICAgICAgICAgaWYgdTogYnJlYWsKLSAg
ICAgICAgaWYgbm90IHU6Ci0gICAgICAgICAgICBmb3IgcHJvcG9zZWRFbmNvZGluZyBpbiAoZG9j
dW1lbnRFbmNvZGluZywgc25pZmZlZEVuY29kaW5nKToKLSAgICAgICAgICAgICAgICB1ID0gc2Vs
Zi5fY29udmVydEZyb20ocHJvcG9zZWRFbmNvZGluZykKLSAgICAgICAgICAgICAgICBpZiB1OiBi
cmVhawotCi0gICAgICAgICMgSWYgbm8gbHVjayBhbmQgd2UgaGF2ZSBhdXRvLWRldGVjdGlvbiBs
aWJyYXJ5LCB0cnkgdGhhdDoKLSAgICAgICAgaWYgbm90IHUgYW5kIGNoYXJkZXQgYW5kIG5vdCBp
c2luc3RhbmNlKHNlbGYubWFya3VwLCB1bmljb2RlKToKLSAgICAgICAgICAgIHUgPSBzZWxmLl9j
b252ZXJ0RnJvbShjaGFyZGV0LmRldGVjdChzZWxmLm1hcmt1cClbJ2VuY29kaW5nJ10pCi0KLSAg
ICAgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB0cnkgdXRmLTggYW5kIHdpbmRvd3MtMTI1MjoKLSAg
ICAgICAgaWYgbm90IHU6Ci0gICAgICAgICAgICBmb3IgcHJvcG9zZWRfZW5jb2RpbmcgaW4gKCJ1
dGYtOCIsICJ3aW5kb3dzLTEyNTIiKToKLSAgICAgICAgICAgICAgICB1ID0gc2VsZi5fY29udmVy
dEZyb20ocHJvcG9zZWRfZW5jb2RpbmcpCi0gICAgICAgICAgICAgICAgaWYgdTogYnJlYWsKLQot
ICAgICAgICBzZWxmLnVuaWNvZGUgPSB1Ci0gICAgICAgIGlmIG5vdCB1OiBzZWxmLm9yaWdpbmFs
RW5jb2RpbmcgPSBOb25lCi0KLSAgICBkZWYgX3N1Yk1TQ2hhcihzZWxmLCBtYXRjaCk6Ci0gICAg
ICAgICIiIkNoYW5nZXMgYSBNUyBzbWFydCBxdW90ZSBjaGFyYWN0ZXIgdG8gYW4gWE1MIG9yIEhU
TUwKLSAgICAgICAgZW50aXR5LiIiIgotICAgICAgICBvcmlnID0gbWF0Y2guZ3JvdXAoMSkKLSAg
ICAgICAgc3ViID0gc2VsZi5NU19DSEFSUy5nZXQob3JpZykKLSAgICAgICAgaWYgdHlwZShzdWIp
ID09IHR5cGVzLlR1cGxlVHlwZToKLSAgICAgICAgICAgIGlmIHNlbGYuc21hcnRRdW90ZXNUbyA9
PSAneG1sJzoKLSAgICAgICAgICAgICAgICBzdWIgPSAnJiN4Jy5lbmNvZGUoKSArIHN1YlsxXS5l
bmNvZGUoKSArICc7Jy5lbmNvZGUoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICBzdWIgPSAnJicuZW5jb2RlKCkgKyBzdWJbMF0uZW5jb2RlKCkgKyAnOycuZW5jb2RlKCkKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIHN1YiA9IHN1Yi5lbmNvZGUoKQotICAgICAgICByZXR1
cm4gc3ViCi0KLSAgICBkZWYgX2NvbnZlcnRGcm9tKHNlbGYsIHByb3Bvc2VkKToKLSAgICAgICAg
cHJvcG9zZWQgPSBzZWxmLmZpbmRfY29kZWMocHJvcG9zZWQpCi0gICAgICAgIGlmIG5vdCBwcm9w
b3NlZCBvciBwcm9wb3NlZCBpbiBzZWxmLnRyaWVkRW5jb2RpbmdzOgotICAgICAgICAgICAgcmV0
dXJuIE5vbmUKLSAgICAgICAgc2VsZi50cmllZEVuY29kaW5ncy5hcHBlbmQocHJvcG9zZWQpCi0g
ICAgICAgIG1hcmt1cCA9IHNlbGYubWFya3VwCi0KLSAgICAgICAgIyBDb252ZXJ0IHNtYXJ0IHF1
b3RlcyB0byBIVE1MIGlmIGNvbWluZyBmcm9tIGFuIGVuY29kaW5nCi0gICAgICAgICMgdGhhdCBt
aWdodCBoYXZlIHRoZW0uCi0gICAgICAgIGlmIHNlbGYuc21hcnRRdW90ZXNUbyBhbmQgcHJvcG9z
ZWQubG93ZXIoKSBpbigid2luZG93cy0xMjUyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc28tODg1OS0xIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc28tODg1OS0yIik6Ci0g
ICAgICAgICAgICBzbWFydF9xdW90ZXNfcmUgPSAiKFtceDgwLVx4OWZdKSIKLSAgICAgICAgICAg
IHNtYXJ0X3F1b3Rlc19jb21waWxlZCA9IHJlLmNvbXBpbGUoc21hcnRfcXVvdGVzX3JlKQotICAg
ICAgICAgICAgbWFya3VwID0gc21hcnRfcXVvdGVzX2NvbXBpbGVkLnN1YihzZWxmLl9zdWJNU0No
YXIsIG1hcmt1cCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIHByaW50ICJUcnlpbmcg
dG8gY29udmVydCBkb2N1bWVudCB0byAlcyIgJSBwcm9wb3NlZAotICAgICAgICAgICAgdSA9IHNl
bGYuX3RvVW5pY29kZShtYXJrdXAsIHByb3Bvc2VkKQotICAgICAgICAgICAgc2VsZi5tYXJrdXAg
PSB1Ci0gICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBwcm9wb3NlZAotICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgIyBwcmludCAiVGhhdCBkaWRuJ3Qg
d29yayEiCi0gICAgICAgICAgICAjIHByaW50IGUKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0g
ICAgICAgICNwcmludCAiQ29ycmVjdCBlbmNvZGluZzogJXMiICUgcHJvcG9zZWQKLSAgICAgICAg
cmV0dXJuIHNlbGYubWFya3VwCi0KLSAgICBkZWYgX3RvVW5pY29kZShzZWxmLCBkYXRhLCBlbmNv
ZGluZyk6Ci0gICAgICAgICcnJ0dpdmVuIGEgc3RyaW5nIGFuZCBpdHMgZW5jb2RpbmcsIGRlY29k
ZXMgdGhlIHN0cmluZyBpbnRvIFVuaWNvZGUuCi0gICAgICAgICVlbmNvZGluZyBpcyBhIHN0cmlu
ZyByZWNvZ25pemVkIGJ5IGVuY29kaW5ncy5hbGlhc2VzJycnCi0KLSAgICAgICAgIyBzdHJpcCBC
eXRlIE9yZGVyIE1hcmsgKGlmIHByZXNlbnQpCi0gICAgICAgIGlmIChsZW4oZGF0YSkgPj0gNCkg
YW5kIChkYXRhWzoyXSA9PSAnXHhmZVx4ZmYnKSBcCi0gICAgICAgICAgICAgICBhbmQgKGRhdGFb
Mjo0XSAhPSAnXHgwMFx4MDAnKToKLSAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmJlJwot
ICAgICAgICAgICAgZGF0YSA9IGRhdGFbMjpdCi0gICAgICAgIGVsaWYgKGxlbihkYXRhKSA+PSA0
KSBhbmQgKGRhdGFbOjJdID09ICdceGZmXHhmZScpIFwKLSAgICAgICAgICAgICAgICAgYW5kIChk
YXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6Ci0gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMTZs
ZScKLSAgICAgICAgICAgIGRhdGEgPSBkYXRhWzI6XQotICAgICAgICBlbGlmIGRhdGFbOjNdID09
ICdceGVmXHhiYlx4YmYnOgotICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTgnCi0gICAgICAg
ICAgICBkYXRhID0gZGF0YVszOl0KLSAgICAgICAgZWxpZiBkYXRhWzo0XSA9PSAnXHgwMFx4MDBc
eGZlXHhmZic6Ci0gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMzJiZScKLSAgICAgICAgICAg
IGRhdGEgPSBkYXRhWzQ6XQotICAgICAgICBlbGlmIGRhdGFbOjRdID09ICdceGZmXHhmZVx4MDBc
eDAwJzoKLSAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0zMmxlJwotICAgICAgICAgICAgZGF0
YSA9IGRhdGFbNDpdCi0gICAgICAgIG5ld2RhdGEgPSB1bmljb2RlKGRhdGEsIGVuY29kaW5nKQot
ICAgICAgICByZXR1cm4gbmV3ZGF0YQotCi0gICAgZGVmIF9kZXRlY3RFbmNvZGluZyhzZWxmLCB4
bWxfZGF0YSwgaXNIVE1MPUZhbHNlKToKLSAgICAgICAgIiIiR2l2ZW4gYSBkb2N1bWVudCwgdHJp
ZXMgdG8gZGV0ZWN0IGl0cyBYTUwgZW5jb2RpbmcuIiIiCi0gICAgICAgIHhtbF9lbmNvZGluZyA9
IHNuaWZmZWRfeG1sX2VuY29kaW5nID0gTm9uZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBp
ZiB4bWxfZGF0YVs6NF0gPT0gJ1x4NGNceDZmXHhhN1x4OTQnOgotICAgICAgICAgICAgICAgICMg
RUJDRElDCi0gICAgICAgICAgICAgICAgeG1sX2RhdGEgPSBzZWxmLl9lYmNkaWNfdG9fYXNjaWko
eG1sX2RhdGEpCi0gICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4M2NceDAw
XHgzZic6Ci0gICAgICAgICAgICAgICAgIyBVVEYtMTZCRQotICAgICAgICAgICAgICAgIHNuaWZm
ZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0xNmJlJwotICAgICAgICAgICAgICAgIHhtbF9kYXRhID0g
dW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0xNmJlJykuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAg
ICBlbGlmIChsZW4oeG1sX2RhdGEpID49IDQpIGFuZCAoeG1sX2RhdGFbOjJdID09ICdceGZlXHhm
ZicpIFwKLSAgICAgICAgICAgICAgICAgICAgIGFuZCAoeG1sX2RhdGFbMjo0XSAhPSAnXHgwMFx4
MDAnKToKLSAgICAgICAgICAgICAgICAjIFVURi0xNkJFIHdpdGggQk9NCi0gICAgICAgICAgICAg
ICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2YmUnCi0gICAgICAgICAgICAgICAgeG1s
X2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzI6XSwgJ3V0Zi0xNmJlJykuZW5jb2RlKCd1dGYtOCcp
Ci0gICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgzY1x4MDBceDNmXHgwMCc6Ci0g
ICAgICAgICAgICAgICAgIyBVVEYtMTZMRQotICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2Vu
Y29kaW5nID0gJ3V0Zi0xNmxlJwotICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4
bWxfZGF0YSwgJ3V0Zi0xNmxlJykuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBlbGlmIChs
ZW4oeG1sX2RhdGEpID49IDQpIGFuZCAoeG1sX2RhdGFbOjJdID09ICdceGZmXHhmZScpIGFuZCBc
Ci0gICAgICAgICAgICAgICAgICAgICAoeG1sX2RhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKLSAg
ICAgICAgICAgICAgICAjIFVURi0xNkxFIHdpdGggQk9NCi0gICAgICAgICAgICAgICAgc25pZmZl
ZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2bGUnCi0gICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1
bmljb2RlKHhtbF9kYXRhWzI6XSwgJ3V0Zi0xNmxlJykuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAg
ICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4MDBceDAwXHgzYyc6Ci0gICAgICAgICAg
ICAgICAgIyBVVEYtMzJCRQotICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0g
J3V0Zi0zMmJlJwotICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwg
J3V0Zi0zMmJlJykuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0
XSA9PSAnXHgzY1x4MDBceDAwXHgwMCc6Ci0gICAgICAgICAgICAgICAgIyBVVEYtMzJMRQotICAg
ICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmxlJwotICAgICAgICAg
ICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0zMmxlJykuZW5jb2RlKCd1
dGYtOCcpCi0gICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4MDBceGZlXHhm
Zic6Ci0gICAgICAgICAgICAgICAgIyBVVEYtMzJCRSB3aXRoIEJPTQotICAgICAgICAgICAgICAg
IHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmJlJwotICAgICAgICAgICAgICAgIHhtbF9k
YXRhID0gdW5pY29kZSh4bWxfZGF0YVs0Ol0sICd1dGYtMzJiZScpLmVuY29kZSgndXRmLTgnKQot
ICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4ZmZceGZlXHgwMFx4MDAnOgotICAg
ICAgICAgICAgICAgICMgVVRGLTMyTEUgd2l0aCBCT00KLSAgICAgICAgICAgICAgICBzbmlmZmVk
X3htbF9lbmNvZGluZyA9ICd1dGYtMzJsZScKLSAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVu
aWNvZGUoeG1sX2RhdGFbNDpdLCAndXRmLTMybGUnKS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAg
ICAgIGVsaWYgeG1sX2RhdGFbOjNdID09ICdceGVmXHhiYlx4YmYnOgotICAgICAgICAgICAgICAg
ICMgVVRGLTggd2l0aCBCT00KLSAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9
ICd1dGYtOCcKLSAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMzpd
LCAndXRmLTgnKS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAnYXNjaWknCi0gICAgICAgICAgICAgICAgcGFz
cwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICB4bWxfZW5jb2RpbmdfbWF0Y2ggPSBOb25l
Ci0gICAgICAgIHhtbF9lbmNvZGluZ19yZSA9ICdePFw/LiplbmNvZGluZz1bXCciXSguKj8pW1wn
Il0uKlw/PicuZW5jb2RlKCkKLSAgICAgICAgeG1sX2VuY29kaW5nX21hdGNoID0gcmUuY29tcGls
ZSh4bWxfZW5jb2RpbmdfcmUpLm1hdGNoKHhtbF9kYXRhKQotICAgICAgICBpZiBub3QgeG1sX2Vu
Y29kaW5nX21hdGNoIGFuZCBpc0hUTUw6Ci0gICAgICAgICAgICBtZXRhX3JlID0gJzxccyptZXRh
W14+XStjaGFyc2V0PShbXj5dKj8pWztcJyI+XScuZW5jb2RlKCkKLSAgICAgICAgICAgIHJlZ2V4
cCA9IHJlLmNvbXBpbGUobWV0YV9yZSwgcmUuSSkKLSAgICAgICAgICAgIHhtbF9lbmNvZGluZ19t
YXRjaCA9IHJlZ2V4cC5zZWFyY2goeG1sX2RhdGEpCi0gICAgICAgIGlmIHhtbF9lbmNvZGluZ19t
YXRjaCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHhtbF9lbmNvZGluZyA9IHhtbF9lbmNvZGlu
Z19tYXRjaC5ncm91cHMoKVswXS5kZWNvZGUoCi0gICAgICAgICAgICAgICAgJ2FzY2lpJykubG93
ZXIoKQotICAgICAgICAgICAgaWYgaXNIVE1MOgotICAgICAgICAgICAgICAgIHNlbGYuZGVjbGFy
ZWRIVE1MRW5jb2RpbmcgPSB4bWxfZW5jb2RpbmcKLSAgICAgICAgICAgIGlmIHNuaWZmZWRfeG1s
X2VuY29kaW5nIGFuZCBcCi0gICAgICAgICAgICAgICAoeG1sX2VuY29kaW5nIGluICgnaXNvLTEw
NjQ2LXVjcy0yJywgJ3Vjcy0yJywgJ2NzdW5pY29kZScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnaXNvLTEwNjQ2LXVjcy00JywgJ3Vjcy00JywgJ2NzdWNzNCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmLTE2JywgJ3V0Zi0zMicsICd1dGZfMTYnLCAn
dXRmXzMyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1dGYxNicsICd1MTYn
KSk6Ci0gICAgICAgICAgICAgICAgeG1sX2VuY29kaW5nID0gc25pZmZlZF94bWxfZW5jb2RpbmcK
LSAgICAgICAgcmV0dXJuIHhtbF9kYXRhLCB4bWxfZW5jb2RpbmcsIHNuaWZmZWRfeG1sX2VuY29k
aW5nCi0KLQotICAgIGRlZiBmaW5kX2NvZGVjKHNlbGYsIGNoYXJzZXQpOgotICAgICAgICByZXR1
cm4gc2VsZi5fY29kZWMoc2VsZi5DSEFSU0VUX0FMSUFTRVMuZ2V0KGNoYXJzZXQsIGNoYXJzZXQp
KSBcCi0gICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5y
ZXBsYWNlKCItIiwgIiIpKSkgXAotICAgICAgICAgICAgICAgb3IgKGNoYXJzZXQgYW5kIHNlbGYu
X2NvZGVjKGNoYXJzZXQucmVwbGFjZSgiLSIsICJfIikpKSBcCi0gICAgICAgICAgICAgICBvciBj
aGFyc2V0Ci0KLSAgICBkZWYgX2NvZGVjKHNlbGYsIGNoYXJzZXQpOgotICAgICAgICBpZiBub3Qg
Y2hhcnNldDogcmV0dXJuIGNoYXJzZXQKLSAgICAgICAgY29kZWMgPSBOb25lCi0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIGNvZGVjcy5sb29rdXAoY2hhcnNldCkKLSAgICAgICAgICAgIGNvZGVj
ID0gY2hhcnNldAotICAgICAgICBleGNlcHQgKExvb2t1cEVycm9yLCBWYWx1ZUVycm9yKToKLSAg
ICAgICAgICAgIHBhc3MKLSAgICAgICAgcmV0dXJuIGNvZGVjCi0KLSAgICBFQkNESUNfVE9fQVND
SUlfTUFQID0gTm9uZQotICAgIGRlZiBfZWJjZGljX3RvX2FzY2lpKHNlbGYsIHMpOgotICAgICAg
ICBjID0gc2VsZi5fX2NsYXNzX18KLSAgICAgICAgaWYgbm90IGMuRUJDRElDX1RPX0FTQ0lJX01B
UDoKLSAgICAgICAgICAgIGVtYXAgPSAoMCwxLDIsMywxNTYsOSwxMzQsMTI3LDE1MSwxNDEsMTQy
LDExLDEyLDEzLDE0LDE1LAotICAgICAgICAgICAgICAgICAgICAxNiwxNywxOCwxOSwxNTcsMTMz
LDgsMTM1LDI0LDI1LDE0NiwxNDMsMjgsMjksMzAsMzEsCi0gICAgICAgICAgICAgICAgICAgIDEy
OCwxMjksMTMwLDEzMSwxMzIsMTAsMjMsMjcsMTM2LDEzNywxMzgsMTM5LDE0MCw1LDYsNywKLSAg
ICAgICAgICAgICAgICAgICAgMTQ0LDE0NSwyMiwxNDcsMTQ4LDE0OSwxNTAsNCwxNTIsMTUzLDE1
NCwxNTUsMjAsMjEsMTU4LDI2LAotICAgICAgICAgICAgICAgICAgICAzMiwxNjAsMTYxLDE2Miwx
NjMsMTY0LDE2NSwxNjYsMTY3LDE2OCw5MSw0Niw2MCw0MCw0MywzMywKLSAgICAgICAgICAgICAg
ICAgICAgMzgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsOTMsMzYsNDIsNDEs
NTksOTQsCi0gICAgICAgICAgICAgICAgICAgIDQ1LDQ3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgz
LDE4NCwxODUsMTI0LDQ0LDM3LDk1LDYyLDYzLAotICAgICAgICAgICAgICAgICAgICAxODYsMTg3
LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCw5Niw1OCwzNSw2NCwzOSw2MSwzNCwKLSAgICAg
ICAgICAgICAgICAgICAgMTk1LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDE5Niwx
OTcsMTk4LDE5OSwyMDAsCi0gICAgICAgICAgICAgICAgICAgIDIwMSwyMDIsMTA2LDEwNywxMDgs
MTA5LDExMCwxMTEsMTEyLDExMywxMTQsMjAzLDIwNCwyMDUsCi0gICAgICAgICAgICAgICAgICAg
IDIwNiwyMDcsMjA4LDIwOSwxMjYsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwyMTAs
Ci0gICAgICAgICAgICAgICAgICAgIDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5
LDIyMCwyMjEsMjIyLDIyMywyMjQsCi0gICAgICAgICAgICAgICAgICAgIDIyNSwyMjYsMjI3LDIy
OCwyMjksMjMwLDIzMSwxMjMsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsCi0gICAgICAgICAgICAg
ICAgICAgIDczLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDEyNSw3NCw3NSw3Niw3Nyw3OCw3OSw4
MCw4MSwKLSAgICAgICAgICAgICAgICAgICAgODIsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsOTIs
MTU5LDgzLDg0LDg1LDg2LDg3LDg4LDg5LAotICAgICAgICAgICAgICAgICAgICA5MCwyNDQsMjQ1
LDI0NiwyNDcsMjQ4LDI0OSw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1NywKLSAgICAgICAg
ICAgICAgICAgICAgMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUpCi0gICAgICAgICAgICBpbXBvcnQg
c3RyaW5nCi0gICAgICAgICAgICBjLkVCQ0RJQ19UT19BU0NJSV9NQVAgPSBzdHJpbmcubWFrZXRy
YW5zKCBcCi0gICAgICAgICAgICAnJy5qb2luKG1hcChjaHIsIHJhbmdlKDI1NikpKSwgJycuam9p
bihtYXAoY2hyLCBlbWFwKSkpCi0gICAgICAgIHJldHVybiBzLnRyYW5zbGF0ZShjLkVCQ0RJQ19U
T19BU0NJSV9NQVApCi0KLSAgICBNU19DSEFSUyA9IHsgJ1x4ODAnIDogKCdldXJvJywgJzIwQUMn
KSwKLSAgICAgICAgICAgICAgICAgJ1x4ODEnIDogJyAnLAotICAgICAgICAgICAgICAgICAnXHg4
MicgOiAoJ3NicXVvJywgJzIwMUEnKSwKLSAgICAgICAgICAgICAgICAgJ1x4ODMnIDogKCdmbm9m
JywgJzE5MicpLAotICAgICAgICAgICAgICAgICAnXHg4NCcgOiAoJ2JkcXVvJywgJzIwMUUnKSwK
LSAgICAgICAgICAgICAgICAgJ1x4ODUnIDogKCdoZWxsaXAnLCAnMjAyNicpLAotICAgICAgICAg
ICAgICAgICAnXHg4NicgOiAoJ2RhZ2dlcicsICcyMDIwJyksCi0gICAgICAgICAgICAgICAgICdc
eDg3JyA6ICgnRGFnZ2VyJywgJzIwMjEnKSwKLSAgICAgICAgICAgICAgICAgJ1x4ODgnIDogKCdj
aXJjJywgJzJDNicpLAotICAgICAgICAgICAgICAgICAnXHg4OScgOiAoJ3Blcm1pbCcsICcyMDMw
JyksCi0gICAgICAgICAgICAgICAgICdceDhBJyA6ICgnU2Nhcm9uJywgJzE2MCcpLAotICAgICAg
ICAgICAgICAgICAnXHg4QicgOiAoJ2xzYXF1bycsICcyMDM5JyksCi0gICAgICAgICAgICAgICAg
ICdceDhDJyA6ICgnT0VsaWcnLCAnMTUyJyksCi0gICAgICAgICAgICAgICAgICdceDhEJyA6ICc/
JywKLSAgICAgICAgICAgICAgICAgJ1x4OEUnIDogKCcjeDE3RCcsICcxN0QnKSwKLSAgICAgICAg
ICAgICAgICAgJ1x4OEYnIDogJz8nLAotICAgICAgICAgICAgICAgICAnXHg5MCcgOiAnPycsCi0g
ICAgICAgICAgICAgICAgICdceDkxJyA6ICgnbHNxdW8nLCAnMjAxOCcpLAotICAgICAgICAgICAg
ICAgICAnXHg5MicgOiAoJ3JzcXVvJywgJzIwMTknKSwKLSAgICAgICAgICAgICAgICAgJ1x4OTMn
IDogKCdsZHF1bycsICcyMDFDJyksCi0gICAgICAgICAgICAgICAgICdceDk0JyA6ICgncmRxdW8n
LCAnMjAxRCcpLAotICAgICAgICAgICAgICAgICAnXHg5NScgOiAoJ2J1bGwnLCAnMjAyMicpLAot
ICAgICAgICAgICAgICAgICAnXHg5NicgOiAoJ25kYXNoJywgJzIwMTMnKSwKLSAgICAgICAgICAg
ICAgICAgJ1x4OTcnIDogKCdtZGFzaCcsICcyMDE0JyksCi0gICAgICAgICAgICAgICAgICdceDk4
JyA6ICgndGlsZGUnLCAnMkRDJyksCi0gICAgICAgICAgICAgICAgICdceDk5JyA6ICgndHJhZGUn
LCAnMjEyMicpLAotICAgICAgICAgICAgICAgICAnXHg5YScgOiAoJ3NjYXJvbicsICcxNjEnKSwK
LSAgICAgICAgICAgICAgICAgJ1x4OWInIDogKCdyc2FxdW8nLCAnMjAzQScpLAotICAgICAgICAg
ICAgICAgICAnXHg5YycgOiAoJ29lbGlnJywgJzE1MycpLAotICAgICAgICAgICAgICAgICAnXHg5
ZCcgOiAnPycsCi0gICAgICAgICAgICAgICAgICdceDllJyA6ICgnI3gxN0UnLCAnMTdFJyksCi0g
ICAgICAgICAgICAgICAgICdceDlmJyA6ICgnWXVtbCcsICcnKSx9Ci0KLSMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Ci0KLQotI0J5IGRlZmF1bHQsIGFjdCBhcyBhbiBIVE1MIHByZXR0eS1wcmludGVyLgotaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzCi0gICAgc291cCA9IEJlYXV0aWZ1
bFNvdXAoc3lzLnN0ZGluKQotICAgIHByaW50IHNvdXAucHJldHRpZnkoKQpJbmRleDogV2ViS2l0
VG9vbHMvU2NyaXB0cy9tb2R1bGVzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvbW9kdWxlcy9fX2luaXRfXy5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJL
aXRUb29scy9TY3JpcHRzL21vZHVsZXMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEg
KzAsMCBAQAotIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBm
b3IgbW9kdWxlIGZpbGVzCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvYnVnemls
bGEucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2J1Z3ppbGxh
LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9idWd6
aWxsYS5weQkod29ya2luZyBjb3B5KQpAQCAtMSw1NjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMp
IDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIAotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0j
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotIwotIyBXZWJLaXQncyBQeXRob24gbW9kdWxlIGZvciBpbnRlcmFjdGluZyB3aXRoIEJ1Z3pp
bGxhCi0KLWltcG9ydCByZQotaW1wb3J0IHN1YnByb2Nlc3MKLQotZnJvbSBkYXRldGltZSBpbXBv
cnQgZGF0ZXRpbWUgIyB1c2VkIGluIHRpbWVzdGFtcCgpCi0KLSMgSW1wb3J0IFdlYktpdC1zcGVj
aWZpYyBtb2R1bGVzLgotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGltcG9ydCBlcnJvciwg
bG9nCi1mcm9tIG1vZHVsZXMuY29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSBt
b2R1bGVzLmNyZWRlbnRpYWxzIGltcG9ydCBDcmVkZW50aWFscwotCi0jIFdlYktpdCBpbmNsdWRl
cyBhIGJ1aWx0IGNvcHkgb2YgQmVhdXRpZnVsU291cCBpbiBTY3JpcHRzL21vZHVsZXMKLSMgc28g
dGhpcyBpbXBvcnQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgotZnJvbSAuQmVhdXRpZnVsU291cCBp
bXBvcnQgQmVhdXRpZnVsU291cCwgU291cFN0cmFpbmVyCi0KLWZyb20gbW9kdWxlcy53ZWJraXRf
bWVjaGFuaXplIGltcG9ydCBCcm93c2VyCi0KLWRlZiBwYXJzZV9idWdfaWQobWVzc2FnZSk6Ci0g
ICAgbWF0Y2ggPSByZS5zZWFyY2goImh0dHBcOi8vd2Via2l0XC5vcmcvYi8oP1A8YnVnX2lkPlxk
KykiLCBtZXNzYWdlKQotICAgIGlmIG1hdGNoOgotICAgICAgICByZXR1cm4gaW50KG1hdGNoLmdy
b3VwKCdidWdfaWQnKSkKLSAgICBtYXRjaCA9IHJlLnNlYXJjaChCdWd6aWxsYS5idWdfc2VydmVy
X3JlZ2V4ICsgInNob3dfYnVnXC5jZ2lcP2lkPSg/UDxidWdfaWQ+XGQrKSIsIG1lc3NhZ2UpCi0g
ICAgaWYgbWF0Y2g6Ci0gICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoJ2J1Z19pZCcpKQot
ICAgIHJldHVybiBOb25lCi0KLQotZGVmIHRpbWVzdGFtcCgpOgotICAgIHJldHVybiBkYXRldGlt
ZS5ub3coKS5zdHJmdGltZSgiJVklbSVkJUglTSVTIikKLQotCi0jIEZJWE1FOiBUaGlzIGNsYXNz
IGlzIGtpbmRhIGEgaGFjayBmb3Igbm93LiAgSXQgZXhpc3RzIHNvIHdlIGhhdmUgb25lIHBsYWNl
Ci0jIHRvIGhvbGQgYnVnIGxvZ2ljLCBldmVuIGlmIG11Y2ggb2YgdGhlIGNvZGUgZGVhbHMgd2l0
aCBkaWN0aW9uYXJpZXMgc3RpbGwuCi1jbGFzcyBCdWcob2JqZWN0KToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgYnVnX2RpY3Rpb25hcnkpOgotICAgICAgICBzZWxmLmJ1Z19kaWN0aW9uYXJ5ID0g
YnVnX2RpY3Rpb25hcnkKLQotICAgIGRlZiBhc3NpZ25lZF90b19lbWFpbChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuYnVnX2RpY3Rpb25hcnlbImFzc2lnbmVkX3RvX2VtYWlsIl0KLQotICAg
ICMgUmFyZWx5IGRvIHdlIGFjdHVhbGx5IHdhbnQgb2Jzb2xldGUgYXR0YWNobWVudHMKLSAgICBk
ZWYgYXR0YWNobWVudHMoc2VsZiwgaW5jbHVkZV9vYnNvbGV0ZT1GYWxzZSk6Ci0gICAgICAgIGlm
IGluY2x1ZGVfb2Jzb2xldGU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5idWdfZGljdGlvbmFy
eVsiYXR0YWNobWVudHMiXVs6XSAjIFJldHVybiBhIGNvcHkgaW4gZWl0aGVyIGNhc2UuCi0gICAg
ICAgIHJldHVybiBbYXR0YWNobWVudCBmb3IgYXR0YWNobWVudCBpbiBzZWxmLmJ1Z19kaWN0aW9u
YXJ5WyJhdHRhY2htZW50cyJdIGlmIG5vdCBhdHRhY2htZW50WyJpc19vYnNvbGV0ZSJdXQotCi0g
ICAgZGVmIHBhdGNoZXMoc2VsZiwgaW5jbHVkZV9vYnNvbGV0ZT1GYWxzZSk6Ci0gICAgICAgIHJl
dHVybiBbcGF0Y2ggZm9yIHBhdGNoIGluIHNlbGYuYXR0YWNobWVudHMoaW5jbHVkZV9vYnNvbGV0
ZSkgaWYgcGF0Y2hbImlzX3BhdGNoIl1dCi0KLSAgICBkZWYgdW5yZXZpZXdlZF9wYXRjaGVzKHNl
bGYpOgotICAgICAgICByZXR1cm4gW3BhdGNoIGZvciBwYXRjaCBpbiBzZWxmLnBhdGNoZXMoKSBp
ZiBwYXRjaC5nZXQoInJldmlldyIpID09ICI/Il0KLQotCi0jIEEgY29udGFpbmVyIGZvciBhbGwg
b2YgdGhlIGxvZ2ljIGZvciBtYWtpbmcgYSBwYXJzaW5nIGJ1emlsbGEgcXVlcmllcy4KLWNsYXNz
IEJ1Z3ppbGxhUXVlcmllcyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWd6aWxs
YSk6Ci0gICAgICAgIHNlbGYuYnVnemlsbGEgPSBidWd6aWxsYQotCi0gICAgZGVmIF9sb2FkX3F1
ZXJ5KHNlbGYsIHF1ZXJ5KToKLSAgICAgICAgZnVsbF91cmwgPSAiJXMlcyIgJSAoc2VsZi5idWd6
aWxsYS5idWdfc2VydmVyX3VybCwgcXVlcnkpCi0gICAgICAgIHJldHVybiBzZWxmLmJ1Z3ppbGxh
LmJyb3dzZXIub3BlbihmdWxsX3VybCkKLQotICAgIGRlZiBfZmV0Y2hfYnVnX2lkc19hZHZhbmNl
ZF9xdWVyeShzZWxmLCBxdWVyeSk6Ci0gICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHNlbGYu
X2xvYWRfcXVlcnkocXVlcnkpKQotICAgICAgICAjIFRoZSBjb250ZW50cyBvZiB0aGUgPGE+IGlu
c2lkZSB0aGUgY2VsbHMgaW4gdGhlIGZpcnN0IGNvbHVtbiBoYXBwZW4gdG8gYmUgdGhlIGJ1ZyBp
ZC4KLSAgICAgICAgcmV0dXJuIFtpbnQoYnVnX2xpbmtfY2VsbC5maW5kKCJhIikuc3RyaW5nKSBm
b3IgYnVnX2xpbmtfY2VsbCBpbiBzb3VwKCd0ZCcsICJmaXJzdC1jaGlsZCIpXQotCi0gICAgZGVm
IF9wYXJzZV9hdHRhY2htZW50X2lkc19yZXF1ZXN0X3F1ZXJ5KHNlbGYsIHBhZ2UpOgotICAgICAg
ICBkaWdpdHMgPSByZS5jb21waWxlKCJcZCsiKQotICAgICAgICBhdHRhY2htZW50X2hyZWYgPSBy
ZS5jb21waWxlKCJhdHRhY2htZW50LmNnaVw/aWQ9XGQrJmFjdGlvbj1yZXZpZXciKQotICAgICAg
ICBhdHRhY2htZW50X2xpbmtzID0gU291cFN0cmFpbmVyKCJhIiwgaHJlZj1hdHRhY2htZW50X2hy
ZWYpCi0gICAgICAgIHJldHVybiBbaW50KGRpZ2l0cy5zZWFyY2godGFnWyJocmVmIl0pLmdyb3Vw
KDApKSBmb3IgdGFnIGluIEJlYXV0aWZ1bFNvdXAocGFnZSwgcGFyc2VPbmx5VGhlc2U9YXR0YWNo
bWVudF9saW5rcyldCi0KLSAgICBkZWYgX2ZldGNoX2F0dGFjaG1lbnRfaWRzX3JlcXVlc3RfcXVl
cnkoc2VsZiwgcXVlcnkpOgotICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VfYXR0YWNobWVudF9p
ZHNfcmVxdWVzdF9xdWVyeShzZWxmLl9sb2FkX3F1ZXJ5KHF1ZXJ5KSkKLQotICAgICMgTGlzdCBv
ZiBhbGwgcisnZCBidWdzLgotICAgIGRlZiBmZXRjaF9idWdfaWRzX2Zyb21fcGVuZGluZ19jb21t
aXRfbGlzdChzZWxmKToKLSAgICAgICAgbmVlZHNfY29tbWl0X3F1ZXJ5X3VybCA9ICJidWdsaXN0
LmNnaT9xdWVyeV9mb3JtYXQ9YWR2YW5jZWQmYnVnX3N0YXR1cz1VTkNPTkZJUk1FRCZidWdfc3Rh
dHVzPU5FVyZidWdfc3RhdHVzPUFTU0lHTkVEJmJ1Z19zdGF0dXM9UkVPUEVORUQmZmllbGQwLTAt
MD1mbGFndHlwZXMubmFtZSZ0eXBlMC0wLTA9ZXF1YWxzJnZhbHVlMC0wLTA9cmV2aWV3JTJCIgot
ICAgICAgICByZXR1cm4gc2VsZi5fZmV0Y2hfYnVnX2lkc19hZHZhbmNlZF9xdWVyeShuZWVkc19j
b21taXRfcXVlcnlfdXJsKQotCi0gICAgZGVmIGZldGNoX3BhdGNoZXNfZnJvbV9wZW5kaW5nX2Nv
bW1pdF9saXN0KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgaGF2ZSB0
byBnbyB0aHJvdWdoIHNlbGYuYnVnemlsbGEKLSAgICAgICAgcmV0dXJuIHN1bShbc2VsZi5idWd6
aWxsYS5mZXRjaF9yZXZpZXdlZF9wYXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkgZm9yIGJ1Z19pZCBp
biBzZWxmLmZldGNoX2J1Z19pZHNfZnJvbV9wZW5kaW5nX2NvbW1pdF9saXN0KCldLCBbXSkKLQot
ICAgIGRlZiBmZXRjaF9idWdfaWRzX2Zyb21fY29tbWl0X3F1ZXVlKHNlbGYpOgotICAgICAgICBj
b21taXRfcXVldWVfdXJsID0gImJ1Z2xpc3QuY2dpP3F1ZXJ5X2Zvcm1hdD1hZHZhbmNlZCZidWdf
c3RhdHVzPVVOQ09ORklSTUVEJmJ1Z19zdGF0dXM9TkVXJmJ1Z19zdGF0dXM9QVNTSUdORUQmYnVn
X3N0YXR1cz1SRU9QRU5FRCZmaWVsZDAtMC0wPWZsYWd0eXBlcy5uYW1lJnR5cGUwLTAtMD1lcXVh
bHMmdmFsdWUwLTAtMD1jb21taXQtcXVldWUlMkIiCi0gICAgICAgIHJldHVybiBzZWxmLl9mZXRj
aF9idWdfaWRzX2FkdmFuY2VkX3F1ZXJ5KGNvbW1pdF9xdWV1ZV91cmwpCi0KLSAgICBkZWYgZmV0
Y2hfcGF0Y2hlc19mcm9tX2NvbW1pdF9xdWV1ZShzZWxmLCByZWplY3RfaW52YWxpZF9wYXRjaGVz
PUZhbHNlKToKLSAgICAgICAgIyBGSVhNRTogT25jZSByZWplY3RfaW52YWxpZF9wYXRjaGVzIGlz
IG1vdmVkIG91dCBvZiB0aGlzIGZ1bmN0aW9uIHRoaXMgYmVjb21lcyBhIHNpbXBsZSBsaXN0IGNv
bXByZWhlbnNpb24gdXNpbmcgZmV0Y2hfYnVnX2lkc19mcm9tX2NvbW1pdF9xdWV1ZS4KLSAgICAg
ICAgcGF0Y2hlc190b19sYW5kID0gW10KLSAgICAgICAgZm9yIGJ1Z19pZCBpbiBzZWxmLmZldGNo
X2J1Z19pZHNfZnJvbV9jb21taXRfcXVldWUoKToKLSAgICAgICAgICAgICMgRklYTUU6IFRoaXMg
c2hvdWxkIG5vdCBoYXZlIHRvIGdvIHRocm91Z2ggc2VsZi5idWd6aWxsYQotICAgICAgICAgICAg
cGF0Y2hlcyA9IHNlbGYuYnVnemlsbGEuZmV0Y2hfY29tbWl0X3F1ZXVlX3BhdGNoZXNfZnJvbV9i
dWcoYnVnX2lkLCByZWplY3RfaW52YWxpZF9wYXRjaGVzKQotICAgICAgICAgICAgcGF0Y2hlc190
b19sYW5kICs9IHBhdGNoZXMKLSAgICAgICAgcmV0dXJuIHBhdGNoZXNfdG9fbGFuZAotCi0gICAg
ZGVmIF9mZXRjaF9idWdfaWRzX2Zyb21fcmV2aWV3X3F1ZXVlKHNlbGYpOgotICAgICAgICByZXZp
ZXdfcXVldWVfdXJsID0gImJ1Z2xpc3QuY2dpP3F1ZXJ5X2Zvcm1hdD1hZHZhbmNlZCZidWdfc3Rh
dHVzPVVOQ09ORklSTUVEJmJ1Z19zdGF0dXM9TkVXJmJ1Z19zdGF0dXM9QVNTSUdORUQmYnVnX3N0
YXR1cz1SRU9QRU5FRCZmaWVsZDAtMC0wPWZsYWd0eXBlcy5uYW1lJnR5cGUwLTAtMD1lcXVhbHMm
dmFsdWUwLTAtMD1yZXZpZXc/IgotICAgICAgICByZXR1cm4gc2VsZi5fZmV0Y2hfYnVnX2lkc19h
ZHZhbmNlZF9xdWVyeShyZXZpZXdfcXVldWVfdXJsKQotCi0gICAgZGVmIGZldGNoX3BhdGNoZXNf
ZnJvbV9yZXZpZXdfcXVldWUoc2VsZiwgbGltaXQ9Tm9uZSk6Ci0gICAgICAgICMgRklYTUU6IFdl
IHNob3VsZCBwcm9iYWJseSBoYXZlIGEgc2VsZi5mZXRjaF9idWcgdG8gbWluaW1pemUgdGhlIG51
bWJlciBvZiBzZWxmLmJ1Z3ppbGxhIGNhbGxzLgotICAgICAgICByZXR1cm4gc3VtKFtzZWxmLmJ1
Z3ppbGxhLmZldGNoX2J1ZyhidWdfaWQpLnVucmV2aWV3ZWRfcGF0Y2hlcygpIGZvciBidWdfaWQg
aW4gc2VsZi5fZmV0Y2hfYnVnX2lkc19mcm9tX3Jldmlld19xdWV1ZSgpWzpsaW1pdF1dLCBbXSkg
IyBbOk5vbmVdIHJldHVybnMgdGhlIHdob2xlIGFycmF5LgotCi0gICAgIyBGSVhNRTogV2h5IGRv
IHdlIGhhdmUgYm90aCBmZXRjaF9wYXRjaGVzX2Zyb21fcmV2aWV3X3F1ZXVlIGFuZCBmZXRjaF9h
dHRhY2htZW50X2lkc19mcm9tX3Jldmlld19xdWV1ZT8/Ci0gICAgIyBOT1RFOiBUaGlzIGlzIGFs
c28gdGhlIG9ubHkgY2xpZW50IG9mIF9mZXRjaF9hdHRhY2htZW50X2lkc19yZXF1ZXN0X3F1ZXJ5
Ci0gICAgZGVmIGZldGNoX2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3X3F1ZXVlKHNlbGYpOgot
ICAgICAgICByZXZpZXdfcXVldWVfdXJsID0gInJlcXVlc3QuY2dpP2FjdGlvbj1xdWV1ZSZ0eXBl
PXJldmlldyZncm91cD10eXBlIgotICAgICAgICByZXR1cm4gc2VsZi5fZmV0Y2hfYXR0YWNobWVu
dF9pZHNfcmVxdWVzdF9xdWVyeShyZXZpZXdfcXVldWVfdXJsKQotCi0KLWNsYXNzIEJ1Z3ppbGxh
KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRyeXJ1bj1GYWxzZSwgY29tbWl0dGVy
cz1Db21taXR0ZXJMaXN0KCkpOgotICAgICAgICBzZWxmLmRyeXJ1biA9IGRyeXJ1bgotICAgICAg
ICBzZWxmLmF1dGhlbnRpY2F0ZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnF1ZXJpZXMgPSBCdWd6
aWxsYVF1ZXJpZXMoc2VsZikKLQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdXNlIHNvbWUg
c29ydCBvZiBCcm93c2VyIG1vY2sgb2JqZWN0IHdoZW4gaW4gZHJ5cnVuIG1vZGUgKHRvIHByZXZl
bnQgYW55IG1pc3Rha2VzKS4KLSAgICAgICAgc2VsZi5icm93c2VyID0gQnJvd3NlcigpCi0gICAg
ICAgICMgSWdub3JlIGJ1Z3Mud2Via2l0Lm9yZy9yb2JvdHMudHh0IHVudGlsIHdlIGZpeCBpdCB0
byBhbGxvdyB0aGlzIHNjcmlwdAotICAgICAgICBzZWxmLmJyb3dzZXIuc2V0X2hhbmRsZV9yb2Jv
dHMoRmFsc2UpCi0gICAgICAgIHNlbGYuY29tbWl0dGVycyA9IGNvbW1pdHRlcnMKLQotICAgICMg
RklYTUU6IE11Y2ggb2YgdGhpcyBzaG91bGQgZ28gaW50byBzb21lIHNvcnQgb2YgY29uZmlnIG1v
ZHVsZToKLSAgICBidWdfc2VydmVyX2hvc3QgPSAiYnVncy53ZWJraXQub3JnIgotICAgIGJ1Z19z
ZXJ2ZXJfcmVnZXggPSAiaHR0cHM/Oi8vJXMvIiAlIHJlLnN1YignXC4nLCAnXFwuJywgYnVnX3Nl
cnZlcl9ob3N0KQotICAgIGJ1Z19zZXJ2ZXJfdXJsID0gImh0dHBzOi8vJXMvIiAlIGJ1Z19zZXJ2
ZXJfaG9zdAotICAgIHVuYXNzaWduZWRfZW1haWwgPSAid2Via2l0LXVuYXNzaWduZWRAbGlzdHMu
d2Via2l0Lm9yZyIKLQotICAgIGRlZiBidWdfdXJsX2Zvcl9idWdfaWQoc2VsZiwgYnVnX2lkLCB4
bWw9RmFsc2UpOgotICAgICAgICBjb250ZW50X3R5cGUgPSAiJmN0eXBlPXhtbCIgaWYgeG1sIGVs
c2UgIiIKLSAgICAgICAgcmV0dXJuICIlc3Nob3dfYnVnLmNnaT9pZD0lcyVzIiAlIChzZWxmLmJ1
Z19zZXJ2ZXJfdXJsLCBidWdfaWQsIGNvbnRlbnRfdHlwZSkKLQotICAgIGRlZiBzaG9ydF9idWdf
dXJsX2Zvcl9idWdfaWQoc2VsZiwgYnVnX2lkKToKLSAgICAgICAgcmV0dXJuICJodHRwOi8vd2Vi
a2l0Lm9yZy9iLyVzIiAlIGJ1Z19pZAotCi0gICAgZGVmIGF0dGFjaG1lbnRfdXJsX2Zvcl9pZChz
ZWxmLCBhdHRhY2htZW50X2lkLCBhY3Rpb249InZpZXciKToKLSAgICAgICAgYWN0aW9uX3BhcmFt
ID0gIiIKLSAgICAgICAgaWYgYWN0aW9uIGFuZCBhY3Rpb24gIT0gInZpZXciOgotICAgICAgICAg
ICAgYWN0aW9uX3BhcmFtID0gIiZhY3Rpb249JXMiICUgYWN0aW9uCi0gICAgICAgIHJldHVybiAi
JXNhdHRhY2htZW50LmNnaT9pZD0lcyVzIiAlIChzZWxmLmJ1Z19zZXJ2ZXJfdXJsLCBhdHRhY2ht
ZW50X2lkLCBhY3Rpb25fcGFyYW0pCi0KLSAgICBkZWYgX3BhcnNlX2F0dGFjaG1lbnRfZmxhZyhz
ZWxmLCBlbGVtZW50LCBmbGFnX25hbWUsIGF0dGFjaG1lbnQsIHJlc3VsdF9rZXkpOgotICAgICAg
ICBmbGFnID0gZWxlbWVudC5maW5kKCdmbGFnJywgYXR0cnM9eyduYW1lJyA6IGZsYWdfbmFtZX0p
Ci0gICAgICAgIGlmIGZsYWc6Ci0gICAgICAgICAgICBhdHRhY2htZW50W2ZsYWdfbmFtZV0gPSBm
bGFnWydzdGF0dXMnXQotICAgICAgICAgICAgaWYgZmxhZ1snc3RhdHVzJ10gPT0gJysnOgotICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRbcmVzdWx0X2tleV0gPSBmbGFnWydzZXR0ZXInXQotCi0g
ICAgZGVmIF9wYXJzZV9hdHRhY2htZW50X2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgYnVnX2lkKToK
LSAgICAgICAgYXR0YWNobWVudCA9IHt9Ci0gICAgICAgIGF0dGFjaG1lbnRbJ2J1Z19pZCddID0g
YnVnX2lkCi0gICAgICAgIGF0dGFjaG1lbnRbJ2lzX29ic29sZXRlJ10gPSAoZWxlbWVudC5oYXNf
a2V5KCdpc29ic29sZXRlJykgYW5kIGVsZW1lbnRbJ2lzb2Jzb2xldGUnXSA9PSAiMSIpCi0gICAg
ICAgIGF0dGFjaG1lbnRbJ2lzX3BhdGNoJ10gPSAoZWxlbWVudC5oYXNfa2V5KCdpc3BhdGNoJykg
YW5kIGVsZW1lbnRbJ2lzcGF0Y2gnXSA9PSAiMSIpCi0gICAgICAgIGF0dGFjaG1lbnRbJ2lkJ10g
PSBpbnQoZWxlbWVudC5maW5kKCdhdHRhY2hpZCcpLnN0cmluZykKLSAgICAgICAgYXR0YWNobWVu
dFsndXJsJ10gPSBzZWxmLmF0dGFjaG1lbnRfdXJsX2Zvcl9pZChhdHRhY2htZW50WydpZCddKQot
ICAgICAgICBhdHRhY2htZW50WyduYW1lJ10gPSB1bmljb2RlKGVsZW1lbnQuZmluZCgnZGVzYycp
LnN0cmluZykKLSAgICAgICAgYXR0YWNobWVudFsnYXR0YWNoZXJfZW1haWwnXSA9IHN0cihlbGVt
ZW50LmZpbmQoJ2F0dGFjaGVyJykuc3RyaW5nKQotICAgICAgICBhdHRhY2htZW50Wyd0eXBlJ10g
PSBzdHIoZWxlbWVudC5maW5kKCd0eXBlJykuc3RyaW5nKQotICAgICAgICBzZWxmLl9wYXJzZV9h
dHRhY2htZW50X2ZsYWcoZWxlbWVudCwgJ3JldmlldycsIGF0dGFjaG1lbnQsICdyZXZpZXdlcl9l
bWFpbCcpCi0gICAgICAgIHNlbGYuX3BhcnNlX2F0dGFjaG1lbnRfZmxhZyhlbGVtZW50LCAnY29t
bWl0LXF1ZXVlJywgYXR0YWNobWVudCwgJ2NvbW1pdHRlcl9lbWFpbCcpCi0gICAgICAgIHJldHVy
biBhdHRhY2htZW50Ci0KLSAgICBkZWYgX3BhcnNlX2J1Z19wYWdlKHNlbGYsIHBhZ2UpOgotICAg
ICAgICBzb3VwID0gQmVhdXRpZnVsU291cChwYWdlKQotICAgICAgICBidWcgPSB7fQotICAgICAg
ICBidWdbImlkIl0gPSBpbnQoc291cC5maW5kKCJidWdfaWQiKS5zdHJpbmcpCi0gICAgICAgIGJ1
Z1sidGl0bGUiXSA9IHVuaWNvZGUoc291cC5maW5kKCJzaG9ydF9kZXNjIikuc3RyaW5nKQotICAg
ICAgICBidWdbInJlcG9ydGVyX2VtYWlsIl0gPSBzdHIoc291cC5maW5kKCJyZXBvcnRlciIpLnN0
cmluZykKLSAgICAgICAgYnVnWyJhc3NpZ25lZF90b19lbWFpbCJdID0gc3RyKHNvdXAuZmluZCgi
YXNzaWduZWRfdG8iKS5zdHJpbmcpCi0gICAgICAgIGJ1Z1siY2NfZW1haWxzIl0gPSBbc3RyKGVs
ZW1lbnQuc3RyaW5nKSBmb3IgZWxlbWVudCBpbiBzb3VwLmZpbmRBbGwoJ2NjJyldCi0gICAgICAg
IGJ1Z1siYXR0YWNobWVudHMiXSA9IFtzZWxmLl9wYXJzZV9hdHRhY2htZW50X2VsZW1lbnQoZWxl
bWVudCwgYnVnWyJpZCJdKSBmb3IgZWxlbWVudCBpbiBzb3VwLmZpbmRBbGwoJ2F0dGFjaG1lbnQn
KV0KLSAgICAgICAgcmV0dXJuIGJ1ZwotCi0gICAgIyBNYWtlcyB0ZXN0aW5nIGZldGNoXypfZnJv
bV9idWcoKSBwb3NzaWJsZSB1bnRpbCB3ZSBoYXZlIGEgYmV0dGVyIEJ1Z3ppbGxhTmV0d29yayBh
YnN0cmF0aW9uLgotICAgIGRlZiBfZmV0Y2hfYnVnX3BhZ2Uoc2VsZiwgYnVnX2lkKToKLSAgICAg
ICAgYnVnX3VybCA9IHNlbGYuYnVnX3VybF9mb3JfYnVnX2lkKGJ1Z19pZCwgeG1sPVRydWUpCi0g
ICAgICAgIGxvZygiRmV0Y2hpbmc6ICVzIiAlIGJ1Z191cmwpCi0gICAgICAgIHJldHVybiBzZWxm
LmJyb3dzZXIub3BlbihidWdfdXJsKQotCi0gICAgZGVmIGZldGNoX2J1Z19kaWN0aW9uYXJ5KHNl
bGYsIGJ1Z19pZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wYXJzZV9idWdfcGFnZShzZWxmLl9m
ZXRjaF9idWdfcGFnZShidWdfaWQpKQotCi0gICAgIyBGSVhNRTogQSBCdWd6aWxsYUNhY2hlIG9i
amVjdCBzaG91bGQgcHJvdmlkZSBhbGwgdGhlc2UgZmV0Y2hfIG1ldGhvZHMuCi0gICAgZGVmIGZl
dGNoX2J1ZyhzZWxmLCBidWdfaWQpOgotICAgICAgICByZXR1cm4gQnVnKHNlbGYuZmV0Y2hfYnVn
X2RpY3Rpb25hcnkoYnVnX2lkKSkKLQotICAgIGRlZiBfcGFyc2VfYnVnX2lkX2Zyb21fYXR0YWNo
bWVudF9wYWdlKHNlbGYsIHBhZ2UpOgotICAgICAgICB1cF9saW5rID0gQmVhdXRpZnVsU291cChw
YWdlKS5maW5kKCdsaW5rJywgcmVsPSdVcCcpICMgVGhlICJVcCIgcmVsYXRpb24gaGFwcGVucyB0
byBwb2ludCB0byB0aGUgYnVnLgotICAgICAgICBpZiBub3QgdXBfbGluazoKLSAgICAgICAgICAg
IHJldHVybiBOb25lICMgVGhpcyBhdHRhY2htZW50IGRvZXMgbm90IGV4aXN0IChvciB5b3UgZG9u
J3QgaGF2ZSBwZXJtaXNzaW9ucyB0byB2aWV3IGl0KS4KLSAgICAgICAgbWF0Y2ggPSByZS5zZWFy
Y2goInNob3dfYnVnLmNnaVw/aWQ9KD9QPGJ1Z19pZD5cZCspIiwgdXBfbGlua1snaHJlZiddKQot
ICAgICAgICByZXR1cm4gaW50KG1hdGNoLmdyb3VwKCdidWdfaWQnKSkKLQotICAgIGRlZiBidWdf
aWRfZm9yX2F0dGFjaG1lbnRfaWQoc2VsZiwgYXR0YWNobWVudF9pZCk6Ci0gICAgICAgIGF0dGFj
aG1lbnRfdXJsID0gc2VsZi5hdHRhY2htZW50X3VybF9mb3JfaWQoYXR0YWNobWVudF9pZCwgJ2Vk
aXQnKQotICAgICAgICBsb2coIkZldGNoaW5nOiAlcyIgJSBhdHRhY2htZW50X3VybCkKLSAgICAg
ICAgcGFnZSA9IHNlbGYuYnJvd3Nlci5vcGVuKGF0dGFjaG1lbnRfdXJsKQotICAgICAgICByZXR1
cm4gc2VsZi5fcGFyc2VfYnVnX2lkX2Zyb21fYXR0YWNobWVudF9wYWdlKHBhZ2UpCi0KLSAgICAj
IFRoaXMgc2hvdWxkIHJlYWxseSByZXR1cm4gYW4gQXR0YWNobWVudCBvYmplY3QKLSAgICAjIHdo
aWNoIGNhbiBsYXppbHkgZmV0Y2ggYW55IG1pc3NpbmcgZGF0YS4KLSAgICBkZWYgZmV0Y2hfYXR0
YWNobWVudChzZWxmLCBhdHRhY2htZW50X2lkKToKLSAgICAgICAgIyBXZSBjb3VsZCBncmFiIGFs
bCB0aGUgYXR0YWNobWVudCBkZXRhaWxzIG9mZiBvZiB0aGUgYXR0YWNobWVudCBlZGl0IHBhZ2UK
LSAgICAgICAgIyBidXQgd2UgYWxyZWFkeSBoYXZlIHdvcmtpbmcgY29kZSB0byBkbyBzbyBvZmYg
b2YgdGhlIGJ1Z3MgcGFnZSwgc28gcmUtdXNlIHRoYXQuCi0gICAgICAgIGJ1Z19pZCA9IHNlbGYu
YnVnX2lkX2Zvcl9hdHRhY2htZW50X2lkKGF0dGFjaG1lbnRfaWQpCi0gICAgICAgIGlmIG5vdCBi
dWdfaWQ6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBmb3IgYXR0YWNobWVudCBp
biBzZWxmLmZldGNoX2J1ZyhidWdfaWQpLmF0dGFjaG1lbnRzKGluY2x1ZGVfb2Jzb2xldGU9VHJ1
ZSk6Ci0gICAgICAgICAgICAjIEZJWE1FOiBPbmNlIHdlIGhhdmUgYSByZWFsIEF0dGFjaG1lbnQg
Y2xhc3Mgd2Ugc2hvdWxkbid0IHBhcGVyIG92ZXIgdGhpcyBwb3NzaWJsZSBjb21wYXJpc29uIGZh
aWx1cmUKLSAgICAgICAgICAgICMgYW5kIHdlIHNob3VsZCByZW1vdmUgdGhlIGludCgpID09IGlu
dCgpIGhhY2tzIGFuZCBsZWF2ZSBpdCBqdXN0ID09LgotICAgICAgICAgICAgaWYgaW50KGF0dGFj
aG1lbnRbJ2lkJ10pID09IGludChhdHRhY2htZW50X2lkKToKLSAgICAgICAgICAgICAgICBzZWxm
Ll92YWxpZGF0ZV9jb21taXR0ZXJfYW5kX3Jldmlld2VyKGF0dGFjaG1lbnQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGF0dGFjaG1lbnQKLSAgICAgICAgcmV0dXJuIE5vbmUgIyBUaGlzIHNob3Vs
ZCBuZXZlciBiZSBoaXQuCi0KLSAgICAjIGZldGNoX3BhdGNoZXNfZnJvbV9idWcgZXhpc3RzIHVu
dGlsIHdlIGV4cG9zZSBhIEJ1ZyBjbGFzcyBvdXRzaWRlIG9mIGJ1Z3ppbGxhLnB5Ci0gICAgZGVm
IGZldGNoX3BhdGNoZXNfZnJvbV9idWcoc2VsZiwgYnVnX2lkKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuZmV0Y2hfYnVnKGJ1Z19pZCkucGF0Y2hlcygpCi0KLSAgICAjIF92aWV3X3NvdXJjZV9saW5r
IGJlbG9uZ3MgaW4gc29tZSBzb3J0IG9mIHdlYmtpdF9jb25maWcucHkgbW9kdWxlLgotICAgIGRl
ZiBfdmlld19zb3VyY2VfbGluayhzZWxmLCBsb2NhbF9wYXRoKToKLSAgICAgICAgcmV0dXJuICJo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvJXMiICUgbG9jYWxfcGF0aAotCi0g
ICAgZGVmIF9mbGFnX3Blcm1pc3Npb25fcmVqZWN0aW9uX21lc3NhZ2Uoc2VsZiwgc2V0dGVyX2Vt
YWlsLCBmbGFnX25hbWUpOgotICAgICAgICBjb21taXR0ZXJfbGlzdCA9ICJXZWJLaXRUb29scy9T
Y3JpcHRzL21vZHVsZXMvY29tbWl0dGVycy5weSIgIyBUaGlzIGNvdWxkIGJlIGNvbXB1dGVkIGZy
b20gQ29tbWl0dGVyTGlzdC5fX2ZpbGVfXwotICAgICAgICBjb250cmlidXRpb25fZ3VpZGxpbmVz
X3VybCA9ICJodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29udHJpYnV0aW5nLmh0bWwiICMgU2hv
dWxkIGNvbWUgZnJvbSBzb21lIHdlYmtpdF9jb25maWcucHkKLSAgICAgICAgcXVldWVfYWRtaW5p
c3RyYXRvciA9ICJlc2VpZGVsQGNocm9taXVtLm9yZyIgIyBUaGlzIGNvdWxkIGJlIHF1ZXJpZWQg
ZnJvbSB0aGUgc3RhdHVzX2JvdC4KLSAgICAgICAgcXVldWVfbmFtZSA9ICJjb21taXQtcXVldWUi
ICMgVGhpcyBjb3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIHRvb2wuCi0gICAgICAgIHJlamVjdGlv
bl9tZXNzYWdlID0gIiVzIGRvZXMgbm90IGhhdmUgJXMgcGVybWlzc2lvbnMgYWNjb3JkaW5nIHRv
ICVzLiIgJSAoc2V0dGVyX2VtYWlsLCBmbGFnX25hbWUsIHNlbGYuX3ZpZXdfc291cmNlX2xpbmso
Y29tbWl0dGVyX2xpc3QpKQotICAgICAgICByZWplY3Rpb25fbWVzc2FnZSArPSAiXG5cbi0gSWYg
eW91IGRvIG5vdCBoYXZlICVzIHJpZ2h0cyBwbGVhc2UgcmVhZCAlcyBmb3IgaW5zdHJ1Y3Rpb25z
IG9uIGhvdyB0byB1c2UgYnVnemlsbGEgZmxhZ3MuIiAlIChmbGFnX25hbWUsIGNvbnRyaWJ1dGlv
bl9ndWlkbGluZXNfdXJsKQotICAgICAgICByZWplY3Rpb25fbWVzc2FnZSArPSAiXG5cbi0gSWYg
eW91IGhhdmUgJXMgcmlnaHRzIHBsZWFzZSBjb3JyZWN0IHRoZSBlcnJvciBpbiAlcyBieSBhZGRp
bmcgeW91cnNlbGYgdG8gdGhlIGZpbGUgKG5vIHJldmlldyBuZWVkZWQpLiIgJSAoZmxhZ19uYW1l
LCBjb21taXR0ZXJfbGlzdCkKLSAgICAgICAgcmVqZWN0aW9uX21lc3NhZ2UgKz0gIiAgRHVlIHRv
IGJ1ZyAzMDA4NCB0aGUgJXMgd2lsbCByZXF1aXJlIGEgcmVzdGFydCBhZnRlciB5b3VyIGNoYW5n
ZS4iICUgcXVldWVfbmFtZQotICAgICAgICByZWplY3Rpb25fbWVzc2FnZSArPSAiICBQbGVhc2Ug
Y29udGFjdCAlcyB0byByZXF1ZXN0IGEgJXMgcmVzdGFydC4iICUgKHF1ZXVlX2FkbWluaXN0cmF0
b3IsIHF1ZXVlX25hbWUpCi0gICAgICAgIHJlamVjdGlvbl9tZXNzYWdlICs9ICIgIEFmdGVyIHJl
c3RhcnQgdGhlICVzIHdpbGwgY29ycmVjdGx5IHJlc3BlY3QgeW91ciAlcyByaWdodHMuIiAlIChx
dWV1ZV9uYW1lLCBmbGFnX25hbWUpCi0gICAgICAgIHJldHVybiByZWplY3Rpb25fbWVzc2FnZQot
Ci0gICAgZGVmIF92YWxpZGF0ZV9zZXR0ZXJfZW1haWwoc2VsZiwgcGF0Y2gsIHJlc3VsdF9rZXks
IGxvb2t1cF9mdW5jdGlvbiwgcmVqZWN0aW9uX2Z1bmN0aW9uLCByZWplY3RfaW52YWxpZF9wYXRj
aGVzKToKLSAgICAgICAgc2V0dGVyX2VtYWlsID0gcGF0Y2guZ2V0KHJlc3VsdF9rZXkgKyAnX2Vt
YWlsJykKLSAgICAgICAgaWYgbm90IHNldHRlcl9lbWFpbDoKLSAgICAgICAgICAgIHJldHVybiBO
b25lCi0KLSAgICAgICAgY29tbWl0dGVyID0gbG9va3VwX2Z1bmN0aW9uKHNldHRlcl9lbWFpbCkK
LSAgICAgICAgaWYgY29tbWl0dGVyOgotICAgICAgICAgICAgcGF0Y2hbcmVzdWx0X2tleV0gPSBj
b21taXR0ZXIuZnVsbF9uYW1lCi0gICAgICAgICAgICByZXR1cm4gcGF0Y2hbcmVzdWx0X2tleV0K
LQotICAgICAgICBpZiByZWplY3RfaW52YWxpZF9wYXRjaGVzOgotICAgICAgICAgICAgcmVqZWN0
aW9uX2Z1bmN0aW9uKHBhdGNoWydpZCddLCBzZWxmLl9mbGFnX3Blcm1pc3Npb25fcmVqZWN0aW9u
X21lc3NhZ2Uoc2V0dGVyX2VtYWlsLCByZXN1bHRfa2V5KSkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIGxvZygiV2FybmluZywgYXR0YWNobWVudCAlcyBvbiBidWcgJXMgaGFzIGludmFsaWQg
JXMgKCVzKSIgJSAocGF0Y2hbJ2lkJ10sIHBhdGNoWydidWdfaWQnXSwgcmVzdWx0X2tleSwgc2V0
dGVyX2VtYWlsKSkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBfdmFsaWRhdGVfcmV2
aWV3ZXIoc2VsZiwgcGF0Y2gsIHJlamVjdF9pbnZhbGlkX3BhdGNoZXMpOgotICAgICAgICByZXR1
cm4gc2VsZi5fdmFsaWRhdGVfc2V0dGVyX2VtYWlsKHBhdGNoLCAncmV2aWV3ZXInLCBzZWxmLmNv
bW1pdHRlcnMucmV2aWV3ZXJfYnlfZW1haWwsIHNlbGYucmVqZWN0X3BhdGNoX2Zyb21fcmV2aWV3
X3F1ZXVlLCByZWplY3RfaW52YWxpZF9wYXRjaGVzKQotCi0gICAgZGVmIF92YWxpZGF0ZV9jb21t
aXR0ZXIoc2VsZiwgcGF0Y2gsIHJlamVjdF9pbnZhbGlkX3BhdGNoZXMpOgotICAgICAgICByZXR1
cm4gc2VsZi5fdmFsaWRhdGVfc2V0dGVyX2VtYWlsKHBhdGNoLCAnY29tbWl0dGVyJywgc2VsZi5j
b21taXR0ZXJzLmNvbW1pdHRlcl9ieV9lbWFpbCwgc2VsZi5yZWplY3RfcGF0Y2hfZnJvbV9jb21t
aXRfcXVldWUsIHJlamVjdF9pbnZhbGlkX3BhdGNoZXMpCi0KLSAgICAjIEZJWE1FOiBUaGlzIGlz
IGEgaGFjayB1bnRpbCB3ZSBoYXZlIGEgcmVhbCBBdHRhY2htZW50IG9iamVjdC4KLSAgICAjIF92
YWxpZGF0ZV9jb21taXR0ZXIgYW5kIF92YWxpZGF0ZV9yZXZpZXdlciBmaWxsIGluIHRoZSAncmV2
aWV3ZXInIGFuZCAnY29tbWl0dGVyJwotICAgICMga2V5cyB3aGljaCBvdGhlciBwYXJ0cyBvZiB0
aGUgY29kZSBleHBlY3QgdG8gYmUgZmlsbGVkIGluLgotICAgIGRlZiBfdmFsaWRhdGVfY29tbWl0
dGVyX2FuZF9yZXZpZXdlcihzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHNlbGYuX3ZhbGlkYXRlX3Jl
dmlld2VyKHBhdGNoLCByZWplY3RfaW52YWxpZF9wYXRjaGVzPUZhbHNlKQotICAgICAgICBzZWxm
Ll92YWxpZGF0ZV9jb21taXR0ZXIocGF0Y2gsIHJlamVjdF9pbnZhbGlkX3BhdGNoZXM9RmFsc2Up
Ci0KLSAgICAjIEZJWE1FOiBmZXRjaF9yZXZpZXdlZF9wYXRjaGVzX2Zyb21fYnVnIGFuZCBmZXRj
aF9jb21taXRfcXVldWVfcGF0Y2hlc19mcm9tX2J1ZwotICAgICMgc2hvdWxkIHNoYXJlIG1vcmUg
Y29kZSBhbmQgdXNlIGxpc3QgY29tcHJlaGVuc2lvbnMuCi0gICAgZGVmIGZldGNoX3Jldmlld2Vk
X3BhdGNoZXNfZnJvbV9idWcoc2VsZiwgYnVnX2lkLCByZWplY3RfaW52YWxpZF9wYXRjaGVzPUZh
bHNlKToKLSAgICAgICAgcmV2aWV3ZWRfcGF0Y2hlcyA9IFtdCi0gICAgICAgIGZvciBhdHRhY2ht
ZW50IGluIHNlbGYuZmV0Y2hfYnVnKGJ1Z19pZCkuYXR0YWNobWVudHMoKToKLSAgICAgICAgICAg
IGlmIHNlbGYuX3ZhbGlkYXRlX3Jldmlld2VyKGF0dGFjaG1lbnQsIHJlamVjdF9pbnZhbGlkX3Bh
dGNoZXMpOgotICAgICAgICAgICAgICAgIHJldmlld2VkX3BhdGNoZXMuYXBwZW5kKGF0dGFjaG1l
bnQpCi0gICAgICAgIHJldHVybiByZXZpZXdlZF9wYXRjaGVzCi0KLSAgICBkZWYgZmV0Y2hfY29t
bWl0X3F1ZXVlX3BhdGNoZXNfZnJvbV9idWcoc2VsZiwgYnVnX2lkLCByZWplY3RfaW52YWxpZF9w
YXRjaGVzPUZhbHNlKToKLSAgICAgICAgY29tbWl0X3F1ZXVlX3BhdGNoZXMgPSBbXQotICAgICAg
ICBmb3IgYXR0YWNobWVudCBpbiBzZWxmLmZldGNoX3Jldmlld2VkX3BhdGNoZXNfZnJvbV9idWco
YnVnX2lkLCByZWplY3RfaW52YWxpZF9wYXRjaGVzKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3Zh
bGlkYXRlX2NvbW1pdHRlcihhdHRhY2htZW50LCByZWplY3RfaW52YWxpZF9wYXRjaGVzKToKLSAg
ICAgICAgICAgICAgICBjb21taXRfcXVldWVfcGF0Y2hlcy5hcHBlbmQoYXR0YWNobWVudCkKLSAg
ICAgICAgcmV0dXJuIGNvbW1pdF9xdWV1ZV9wYXRjaGVzCi0KLSAgICBkZWYgYXV0aGVudGljYXRl
KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmF1dGhlbnRpY2F0ZWQ6Ci0gICAgICAgICAgICByZXR1
cm4KLQotICAgICAgICBpZiBzZWxmLmRyeXJ1bjoKLSAgICAgICAgICAgIGxvZygiU2tpcHBpbmcg
bG9nIGluIGZvciBkcnkgcnVuLi4uIikKLSAgICAgICAgICAgIHNlbGYuYXV0aGVudGljYXRlZCA9
IFRydWUKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICh1c2VybmFtZSwgcGFzc3dvcmQp
ID0gQ3JlZGVudGlhbHMoc2VsZi5idWdfc2VydmVyX2hvc3QsIGdpdF9wcmVmaXg9ImJ1Z3ppbGxh
IikucmVhZF9jcmVkZW50aWFscygpCi0KLSAgICAgICAgbG9nKCJMb2dnaW5nIGluIGFzICVzLi4u
IiAlIHVzZXJuYW1lKQotICAgICAgICBzZWxmLmJyb3dzZXIub3BlbihzZWxmLmJ1Z19zZXJ2ZXJf
dXJsICsgImluZGV4LmNnaT9Hb0FoZWFkQW5kTG9nSW49MSIpCi0gICAgICAgIHNlbGYuYnJvd3Nl
ci5zZWxlY3RfZm9ybShuYW1lPSJsb2dpbiIpCi0gICAgICAgIHNlbGYuYnJvd3NlclsnQnVnemls
bGFfbG9naW4nXSA9IHVzZXJuYW1lCi0gICAgICAgIHNlbGYuYnJvd3NlclsnQnVnemlsbGFfcGFz
c3dvcmQnXSA9IHBhc3N3b3JkCi0gICAgICAgIHJlc3BvbnNlID0gc2VsZi5icm93c2VyLnN1Ym1p
dCgpCi0KLSAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goIjx0aXRsZT4oLis/KTwvdGl0bGU+Iiwg
cmVzcG9uc2UucmVhZCgpKQotICAgICAgICAjIElmIHRoZSByZXN1bHRpbmcgcGFnZSBoYXMgYSB0
aXRsZSwgYW5kIGl0IGNvbnRhaW5zIHRoZSB3b3JkICJpbnZhbGlkIiBhc3N1bWUgaXQncyB0aGUg
bG9naW4gZmFpbHVyZSBwYWdlLgotICAgICAgICBpZiBtYXRjaCBhbmQgcmUuc2VhcmNoKCJJbnZh
bGlkIiwgbWF0Y2guZ3JvdXAoMSksIHJlLklHTk9SRUNBU0UpOgotICAgICAgICAgICAgIyBGSVhN
RTogV2UgY291bGQgYWRkIHRoZSBhYmlsaXR5IHRvIHRyeSBhZ2FpbiBvbiBmYWlsdXJlLgotICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJCdWd6aWxsYSBsb2dpbiBmYWlsZWQ6ICVzIiAlIG1h
dGNoLmdyb3VwKDEpKQotCi0gICAgICAgIHNlbGYuYXV0aGVudGljYXRlZCA9IFRydWUKLQotICAg
IGRlZiBfZmlsbF9hdHRhY2htZW50X2Zvcm0oc2VsZiwgZGVzY3JpcHRpb24sIHBhdGNoX2ZpbGVf
b2JqZWN0LCBjb21tZW50X3RleHQ9Tm9uZSwgbWFya19mb3JfcmV2aWV3PUZhbHNlLCBtYXJrX2Zv
cl9jb21taXRfcXVldWU9RmFsc2UsIGJ1Z19pZD1Ob25lKToKLSAgICAgICAgc2VsZi5icm93c2Vy
WydkZXNjcmlwdGlvbiddID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5icm93c2VyWydpc3Bh
dGNoJ10gPSAoIjEiLCkKLSAgICAgICAgc2VsZi5icm93c2VyWydmbGFnX3R5cGUtMSddID0gKCc/
JywpIGlmIG1hcmtfZm9yX3JldmlldyBlbHNlICgnWCcsKQotICAgICAgICBzZWxmLmJyb3dzZXJb
J2ZsYWdfdHlwZS0zJ10gPSAoJz8nLCkgaWYgbWFya19mb3JfY29tbWl0X3F1ZXVlIGVsc2UgKCdY
JywpCi0gICAgICAgIGlmIGJ1Z19pZDoKLSAgICAgICAgICAgIHBhdGNoX25hbWUgPSAiYnVnLSVz
LSVzLnBhdGNoIiAlIChidWdfaWQsIHRpbWVzdGFtcCgpKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgcGF0Y2hfbmFtZSA9IiVzLnBhdGNoIiAlIHRpbWVzdGFtcCgpCi0gICAgICAgIHNlbGYu
YnJvd3Nlci5hZGRfZmlsZShwYXRjaF9maWxlX29iamVjdCwgInRleHQvcGxhaW4iLCBwYXRjaF9u
YW1lLCAnZGF0YScpCi0KLSAgICBkZWYgYWRkX3BhdGNoX3RvX2J1ZyhzZWxmLCBidWdfaWQsIHBh
dGNoX2ZpbGVfb2JqZWN0LCBkZXNjcmlwdGlvbiwgY29tbWVudF90ZXh0PU5vbmUsIG1hcmtfZm9y
X3Jldmlldz1GYWxzZSwgbWFya19mb3JfY29tbWl0X3F1ZXVlPUZhbHNlKToKLSAgICAgICAgc2Vs
Zi5hdXRoZW50aWNhdGUoKQotICAgICAgICAKLSAgICAgICAgbG9nKCdBZGRpbmcgcGF0Y2ggIiVz
IiB0byBidWcgJXMnICUgKGRlc2NyaXB0aW9uLCBidWdfaWQpKQotICAgICAgICBpZiBzZWxmLmRy
eXJ1bjoKLSAgICAgICAgICAgIGxvZyhjb21tZW50X3RleHQpCi0gICAgICAgICAgICByZXR1cm4K
LQotICAgICAgICBzZWxmLmJyb3dzZXIub3BlbigiJXNhdHRhY2htZW50LmNnaT9hY3Rpb249ZW50
ZXImYnVnaWQ9JXMiICUgKHNlbGYuYnVnX3NlcnZlcl91cmwsIGJ1Z19pZCkpCi0gICAgICAgIHNl
bGYuYnJvd3Nlci5zZWxlY3RfZm9ybShuYW1lPSJlbnRyeWZvcm0iKQotICAgICAgICBzZWxmLl9m
aWxsX2F0dGFjaG1lbnRfZm9ybShkZXNjcmlwdGlvbiwgcGF0Y2hfZmlsZV9vYmplY3QsIG1hcmtf
Zm9yX3Jldmlldz1tYXJrX2Zvcl9yZXZpZXcsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1tYXJrX2Zv
cl9jb21taXRfcXVldWUsIGJ1Z19pZD1idWdfaWQpCi0gICAgICAgIGlmIGNvbW1lbnRfdGV4dDoK
LSAgICAgICAgICAgIGxvZyhjb21tZW50X3RleHQpCi0gICAgICAgICAgICBzZWxmLmJyb3dzZXJb
J2NvbW1lbnQnXSA9IGNvbW1lbnRfdGV4dAotICAgICAgICBzZWxmLmJyb3dzZXIuc3VibWl0KCkK
LQotICAgIGRlZiBwcm9tcHRfZm9yX2NvbXBvbmVudChzZWxmLCBjb21wb25lbnRzKToKLSAgICAg
ICAgbG9nKCJQbGVhc2UgcGljayBhIGNvbXBvbmVudDoiKQotICAgICAgICBpID0gMAotICAgICAg
ICBmb3IgbmFtZSBpbiBjb21wb25lbnRzOgotICAgICAgICAgICAgaSArPSAxCi0gICAgICAgICAg
ICBsb2coIiUyZC4gJXMiICUgKGksIG5hbWUpKQotICAgICAgICByZXN1bHQgPSBpbnQocmF3X2lu
cHV0KCJFbnRlciBhIG51bWJlcjogIikpIC0gMQotICAgICAgICByZXR1cm4gY29tcG9uZW50c1ty
ZXN1bHRdCi0KLSAgICBkZWYgX2NoZWNrX2NyZWF0ZV9idWdfcmVzcG9uc2Uoc2VsZiwgcmVzcG9u
c2VfaHRtbCk6Ci0gICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCI8dGl0bGU+QnVnICg/UDxidWdf
aWQ+XGQrKSBTdWJtaXR0ZWQ8L3RpdGxlPiIsIHJlc3BvbnNlX2h0bWwpCi0gICAgICAgIGlmIG1h
dGNoOgotICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKCdidWdfaWQnKQotCi0gICAgICAg
IG1hdGNoID0gcmUuc2VhcmNoKCc8ZGl2IGlkPSJidWd6aWxsYS1ib2R5Ij4oP1A8ZXJyb3JfbWVz
c2FnZT4uKyk8ZGl2IGlkPSJmb290ZXIiPicsIHJlc3BvbnNlX2h0bWwsIHJlLkRPVEFMTCkKLSAg
ICAgICAgZXJyb3JfbWVzc2FnZSA9ICJGQUlMIgotICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAg
ICAgIHRleHRfbGluZXMgPSBCZWF1dGlmdWxTb3VwKG1hdGNoLmdyb3VwKCdlcnJvcl9tZXNzYWdl
JykpLmZpbmRBbGwodGV4dD1UcnVlKQotICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJcbiIg
KyAnXG4nLmpvaW4oWyIgICIgKyBsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gdGV4dF9saW5lcyBp
ZiBsaW5lLnN0cmlwKCldKQotICAgICAgICByYWlzZSBFeGNlcHRpb24oIkJ1ZyBub3QgY3JlYXRl
ZDogJXMiICUgZXJyb3JfbWVzc2FnZSkKLQotICAgIGRlZiBjcmVhdGVfYnVnKHNlbGYsIGJ1Z190
aXRsZSwgYnVnX2Rlc2NyaXB0aW9uLCBjb21wb25lbnQ9Tm9uZSwgcGF0Y2hfZmlsZV9vYmplY3Q9
Tm9uZSwgcGF0Y2hfZGVzY3JpcHRpb249Tm9uZSwgY2M9Tm9uZSwgbWFya19mb3JfcmV2aWV3PUZh
bHNlLCBtYXJrX2Zvcl9jb21taXRfcXVldWU9RmFsc2UpOgotICAgICAgICBzZWxmLmF1dGhlbnRp
Y2F0ZSgpCi0KLSAgICAgICAgbG9nKCdDcmVhdGluZyBidWcgd2l0aCB0aXRsZSAiJXMiJyAlIGJ1
Z190aXRsZSkKLSAgICAgICAgaWYgc2VsZi5kcnlydW46Ci0gICAgICAgICAgICBsb2coYnVnX2Rl
c2NyaXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgc2VsZi5icm93c2VyLm9w
ZW4oc2VsZi5idWdfc2VydmVyX3VybCArICJlbnRlcl9idWcuY2dpP3Byb2R1Y3Q9V2ViS2l0IikK
LSAgICAgICAgc2VsZi5icm93c2VyLnNlbGVjdF9mb3JtKG5hbWU9IkNyZWF0ZSIpCi0gICAgICAg
IGNvbXBvbmVudF9pdGVtcyA9IHNlbGYuYnJvd3Nlci5maW5kX2NvbnRyb2woJ2NvbXBvbmVudCcp
Lml0ZW1zCi0gICAgICAgIGNvbXBvbmVudF9uYW1lcyA9IG1hcChsYW1iZGEgaXRlbTogaXRlbS5u
YW1lLCBjb21wb25lbnRfaXRlbXMpCi0gICAgICAgIGlmIG5vdCBjb21wb25lbnQgb3IgY29tcG9u
ZW50IG5vdCBpbiBjb21wb25lbnRfbmFtZXM6Ci0gICAgICAgICAgICBjb21wb25lbnQgPSBzZWxm
LnByb21wdF9mb3JfY29tcG9uZW50KGNvbXBvbmVudF9uYW1lcykKLSAgICAgICAgc2VsZi5icm93
c2VyWydjb21wb25lbnQnXSA9IFtjb21wb25lbnRdCi0gICAgICAgIGlmIGNjOgotICAgICAgICAg
ICAgc2VsZi5icm93c2VyWydjYyddID0gY2MKLSAgICAgICAgc2VsZi5icm93c2VyWydzaG9ydF9k
ZXNjJ10gPSBidWdfdGl0bGUKLSAgICAgICAgc2VsZi5icm93c2VyWydjb21tZW50J10gPSBidWdf
ZGVzY3JpcHRpb24KLQotICAgICAgICBpZiBwYXRjaF9maWxlX29iamVjdDoKLSAgICAgICAgICAg
IHNlbGYuX2ZpbGxfYXR0YWNobWVudF9mb3JtKHBhdGNoX2Rlc2NyaXB0aW9uLCBwYXRjaF9maWxl
X29iamVjdCwgbWFya19mb3JfcmV2aWV3PW1hcmtfZm9yX3JldmlldywgbWFya19mb3JfY29tbWl0
X3F1ZXVlPW1hcmtfZm9yX2NvbW1pdF9xdWV1ZSkKLQotICAgICAgICByZXNwb25zZSA9IHNlbGYu
YnJvd3Nlci5zdWJtaXQoKQotCi0gICAgICAgIGJ1Z19pZCA9IHNlbGYuX2NoZWNrX2NyZWF0ZV9i
dWdfcmVzcG9uc2UocmVzcG9uc2UucmVhZCgpKQotICAgICAgICBsb2coIkJ1ZyAlcyBjcmVhdGVk
LiIgJSBidWdfaWQpCi0gICAgICAgIGxvZygiJXNzaG93X2J1Zy5jZ2k/aWQ9JXMiICUgKHNlbGYu
YnVnX3NlcnZlcl91cmwsIGJ1Z19pZCkpCi0gICAgICAgIHJldHVybiBidWdfaWQKLQotICAgIGRl
ZiBfZmluZF9zZWxlY3RfZWxlbWVudF9mb3JfZmxhZyhzZWxmLCBmbGFnX25hbWUpOgotICAgICAg
ICAjIEZJWE1FOiBUaGlzIHdpbGwgYnJlYWsgaWYgd2UgZXZlciByZS1vcmRlciBhdHRhY2htZW50
IGZsYWdzCi0gICAgICAgIGlmIGZsYWdfbmFtZSA9PSAicmV2aWV3IjoKLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLmJyb3dzZXIuZmluZF9jb250cm9sKHR5cGU9J3NlbGVjdCcsIG5yPTApCi0gICAg
ICAgIGlmIGZsYWdfbmFtZSA9PSAiY29tbWl0LXF1ZXVlIjoKLSAgICAgICAgICAgIHJldHVybiBz
ZWxmLmJyb3dzZXIuZmluZF9jb250cm9sKHR5cGU9J3NlbGVjdCcsIG5yPTEpCi0gICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiRG9uJ3Qga25vdyBob3cgdG8gZmluZCBmbGFnIG5hbWVkIFwiJXNcIiIg
JSBmbGFnX25hbWUpCi0KLSAgICBkZWYgY2xlYXJfYXR0YWNobWVudF9mbGFncyhzZWxmLCBhdHRh
Y2htZW50X2lkLCBhZGRpdGlvbmFsX2NvbW1lbnRfdGV4dD1Ob25lKToKLSAgICAgICAgc2VsZi5h
dXRoZW50aWNhdGUoKQotCi0gICAgICAgIGNvbW1lbnRfdGV4dCA9ICJDbGVhcmluZyBmbGFncyBv
biBhdHRhY2htZW50OiAlcyIgJSBhdHRhY2htZW50X2lkCi0gICAgICAgIGlmIGFkZGl0aW9uYWxf
Y29tbWVudF90ZXh0OgotICAgICAgICAgICAgY29tbWVudF90ZXh0ICs9ICJcblxuJXMiICUgYWRk
aXRpb25hbF9jb21tZW50X3RleHQKLSAgICAgICAgbG9nKGNvbW1lbnRfdGV4dCkKLQotICAgICAg
ICBpZiBzZWxmLmRyeXJ1bjoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHNlbGYuYnJv
d3Nlci5vcGVuKHNlbGYuYXR0YWNobWVudF91cmxfZm9yX2lkKGF0dGFjaG1lbnRfaWQsICdlZGl0
JykpCi0gICAgICAgIHNlbGYuYnJvd3Nlci5zZWxlY3RfZm9ybShucj0xKQotICAgICAgICBzZWxm
LmJyb3dzZXIuc2V0X3ZhbHVlKGNvbW1lbnRfdGV4dCwgbmFtZT0nY29tbWVudCcsIG5yPTApCi0g
ICAgICAgIHNlbGYuX2ZpbmRfc2VsZWN0X2VsZW1lbnRfZm9yX2ZsYWcoJ3JldmlldycpLnZhbHVl
ID0gKCJYIiwpCi0gICAgICAgIHNlbGYuX2ZpbmRfc2VsZWN0X2VsZW1lbnRfZm9yX2ZsYWcoJ2Nv
bW1pdC1xdWV1ZScpLnZhbHVlID0gKCJYIiwpCi0gICAgICAgIHNlbGYuYnJvd3Nlci5zdWJtaXQo
KQotCi0gICAgIyBGSVhNRTogV2UgbmVlZCBhIHdheSB0byB0ZXN0IHRoaXMgb24gYSBsaXZlIGJ1
Z3ppbGxhIGluc3RhbmNlLgotICAgIGRlZiBfc2V0X2ZsYWdfb25fYXR0YWNobWVudChzZWxmLCBh
dHRhY2htZW50X2lkLCBmbGFnX25hbWUsIGZsYWdfdmFsdWUsIGNvbW1lbnRfdGV4dCwgYWRkaXRp
b25hbF9jb21tZW50X3RleHQpOgotICAgICAgICBzZWxmLmF1dGhlbnRpY2F0ZSgpCi0KLSAgICAg
ICAgaWYgYWRkaXRpb25hbF9jb21tZW50X3RleHQ6Ci0gICAgICAgICAgICBjb21tZW50X3RleHQg
Kz0gIlxuXG4lcyIgJSBhZGRpdGlvbmFsX2NvbW1lbnRfdGV4dAotICAgICAgICBsb2coY29tbWVu
dF90ZXh0KQotCi0gICAgICAgIGlmIHNlbGYuZHJ5cnVuOgotICAgICAgICAgICAgcmV0dXJuCi0K
LSAgICAgICAgc2VsZi5icm93c2VyLm9wZW4oc2VsZi5hdHRhY2htZW50X3VybF9mb3JfaWQoYXR0
YWNobWVudF9pZCwgJ2VkaXQnKSkKLSAgICAgICAgc2VsZi5icm93c2VyLnNlbGVjdF9mb3JtKG5y
PTEpCi0gICAgICAgIHNlbGYuYnJvd3Nlci5zZXRfdmFsdWUoY29tbWVudF90ZXh0LCBuYW1lPSdj
b21tZW50JywgbnI9MCkKLSAgICAgICAgc2VsZi5fZmluZF9zZWxlY3RfZWxlbWVudF9mb3JfZmxh
ZyhmbGFnX25hbWUpLnZhbHVlID0gKGZsYWdfdmFsdWUsKQotICAgICAgICBzZWxmLmJyb3dzZXIu
c3VibWl0KCkKLQotICAgIGRlZiByZWplY3RfcGF0Y2hfZnJvbV9jb21taXRfcXVldWUoc2VsZiwg
YXR0YWNobWVudF9pZCwgYWRkaXRpb25hbF9jb21tZW50X3RleHQ9Tm9uZSk6Ci0gICAgICAgIGNv
bW1lbnRfdGV4dCA9ICJSZWplY3RpbmcgcGF0Y2ggJXMgZnJvbSBjb21taXQtcXVldWUuIiAlIGF0
dGFjaG1lbnRfaWQKLSAgICAgICAgc2VsZi5fc2V0X2ZsYWdfb25fYXR0YWNobWVudChhdHRhY2ht
ZW50X2lkLCAnY29tbWl0LXF1ZXVlJywgJy0nLCBjb21tZW50X3RleHQsIGFkZGl0aW9uYWxfY29t
bWVudF90ZXh0KQotCi0gICAgZGVmIHJlamVjdF9wYXRjaF9mcm9tX3Jldmlld19xdWV1ZShzZWxm
LCBhdHRhY2htZW50X2lkLCBhZGRpdGlvbmFsX2NvbW1lbnRfdGV4dD1Ob25lKToKLSAgICAgICAg
Y29tbWVudF90ZXh0ID0gIlJlamVjdGluZyBwYXRjaCAlcyBmcm9tIHJldmlldyBxdWV1ZS4iICUg
YXR0YWNobWVudF9pZAotICAgICAgICBzZWxmLl9zZXRfZmxhZ19vbl9hdHRhY2htZW50KGF0dGFj
aG1lbnRfaWQsICdyZXZpZXcnLCAnLScsIGNvbW1lbnRfdGV4dCwgYWRkaXRpb25hbF9jb21tZW50
X3RleHQpCi0KLSAgICAjIEZJWE1FOiBBbGwgb2YgdGhlc2UgYnVnIGVkaXRpbmcgbWV0aG9kcyBo
YXZlIGEgcmlkaWN1bG91cyBhbW91bnQgb2YgY29weS9wYXN0ZSBjb2RlLgotICAgIGRlZiBvYnNv
bGV0ZV9hdHRhY2htZW50KHNlbGYsIGF0dGFjaG1lbnRfaWQsIGNvbW1lbnRfdGV4dCA9IE5vbmUp
OgotICAgICAgICBzZWxmLmF1dGhlbnRpY2F0ZSgpCi0KLSAgICAgICAgbG9nKCJPYnNvbGV0aW5n
IGF0dGFjaG1lbnQ6ICVzIiAlIGF0dGFjaG1lbnRfaWQpCi0gICAgICAgIGlmIHNlbGYuZHJ5cnVu
OgotICAgICAgICAgICAgbG9nKGNvbW1lbnRfdGV4dCkKLSAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgIHNlbGYuYnJvd3Nlci5vcGVuKHNlbGYuYXR0YWNobWVudF91cmxfZm9yX2lkKGF0dGFj
aG1lbnRfaWQsICdlZGl0JykpCi0gICAgICAgIHNlbGYuYnJvd3Nlci5zZWxlY3RfZm9ybShucj0x
KQotICAgICAgICBzZWxmLmJyb3dzZXIuZmluZF9jb250cm9sKCdpc29ic29sZXRlJykuaXRlbXNb
MF0uc2VsZWN0ZWQgPSBUcnVlCi0gICAgICAgICMgQWxzbyBjbGVhciBhbnkgcmV2aWV3IGZsYWcg
KHRvIHJlbW92ZSBpdCBmcm9tIHJldmlldy9jb21taXQgcXVldWVzKQotICAgICAgICBzZWxmLl9m
aW5kX3NlbGVjdF9lbGVtZW50X2Zvcl9mbGFnKCdyZXZpZXcnKS52YWx1ZSA9ICgiWCIsKQotICAg
ICAgICBzZWxmLl9maW5kX3NlbGVjdF9lbGVtZW50X2Zvcl9mbGFnKCdjb21taXQtcXVldWUnKS52
YWx1ZSA9ICgiWCIsKQotICAgICAgICBpZiBjb21tZW50X3RleHQ6Ci0gICAgICAgICAgICBsb2co
Y29tbWVudF90ZXh0KQotICAgICAgICAgICAgIyBCdWd6aWxsYSBoYXMgdHdvIHRleHRhcmVhcyBu
YW1lZCAnY29tbWVudCcsIG9uZSBpcyBzb21laG93IGhpZGRlbi4gIFdlIHdhbnQgdGhlIGZpcnN0
LgotICAgICAgICAgICAgc2VsZi5icm93c2VyLnNldF92YWx1ZShjb21tZW50X3RleHQsIG5hbWU9
J2NvbW1lbnQnLCBucj0wKQotICAgICAgICBzZWxmLmJyb3dzZXIuc3VibWl0KCkKLQotICAgIGRl
ZiBhZGRfY2NfdG9fYnVnKHNlbGYsIGJ1Z19pZCwgZW1haWxfYWRkcmVzc19saXN0KToKLSAgICAg
ICAgc2VsZi5hdXRoZW50aWNhdGUoKQotCi0gICAgICAgIGxvZygiQWRkaW5nICVzIHRvIHRoZSBD
QyBsaXN0IGZvciBidWcgJXMiICUgKGVtYWlsX2FkZHJlc3NfbGlzdCwgYnVnX2lkKSkKLSAgICAg
ICAgaWYgc2VsZi5kcnlydW46Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLmJy
b3dzZXIub3BlbihzZWxmLmJ1Z191cmxfZm9yX2J1Z19pZChidWdfaWQpKQotICAgICAgICBzZWxm
LmJyb3dzZXIuc2VsZWN0X2Zvcm0obmFtZT0iY2hhbmdlZm9ybSIpCi0gICAgICAgIHNlbGYuYnJv
d3NlclsibmV3Y2MiXSA9ICIsICIuam9pbihlbWFpbF9hZGRyZXNzX2xpc3QpCi0gICAgICAgIHNl
bGYuYnJvd3Nlci5zdWJtaXQoKQotCi0gICAgZGVmIHBvc3RfY29tbWVudF90b19idWcoc2VsZiwg
YnVnX2lkLCBjb21tZW50X3RleHQsIGNjPU5vbmUpOgotICAgICAgICBzZWxmLmF1dGhlbnRpY2F0
ZSgpCi0KLSAgICAgICAgbG9nKCJBZGRpbmcgY29tbWVudCB0byBidWcgJXMiICUgYnVnX2lkKQot
ICAgICAgICBpZiBzZWxmLmRyeXJ1bjoKLSAgICAgICAgICAgIGxvZyhjb21tZW50X3RleHQpCi0g
ICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLmJyb3dzZXIub3BlbihzZWxmLmJ1Z191
cmxfZm9yX2J1Z19pZChidWdfaWQpKQotICAgICAgICBzZWxmLmJyb3dzZXIuc2VsZWN0X2Zvcm0o
bmFtZT0iY2hhbmdlZm9ybSIpCi0gICAgICAgIHNlbGYuYnJvd3NlclsiY29tbWVudCJdID0gY29t
bWVudF90ZXh0Ci0gICAgICAgIGlmIGNjOgotICAgICAgICAgICAgc2VsZi5icm93c2VyWyJuZXdj
YyJdID0gIiwgIi5qb2luKGNjKQotICAgICAgICBzZWxmLmJyb3dzZXIuc3VibWl0KCkKLQotICAg
IGRlZiBjbG9zZV9idWdfYXNfZml4ZWQoc2VsZiwgYnVnX2lkLCBjb21tZW50X3RleHQ9Tm9uZSk6
Ci0gICAgICAgIHNlbGYuYXV0aGVudGljYXRlKCkKLQotICAgICAgICBsb2coIkNsb3NpbmcgYnVn
ICVzIGFzIGZpeGVkIiAlIGJ1Z19pZCkKLSAgICAgICAgaWYgc2VsZi5kcnlydW46Ci0gICAgICAg
ICAgICBsb2coY29tbWVudF90ZXh0KQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgc2Vs
Zi5icm93c2VyLm9wZW4oc2VsZi5idWdfdXJsX2Zvcl9idWdfaWQoYnVnX2lkKSkKLSAgICAgICAg
c2VsZi5icm93c2VyLnNlbGVjdF9mb3JtKG5hbWU9ImNoYW5nZWZvcm0iKQotICAgICAgICBpZiBj
b21tZW50X3RleHQ6Ci0gICAgICAgICAgICBsb2coY29tbWVudF90ZXh0KQotICAgICAgICAgICAg
c2VsZi5icm93c2VyWydjb21tZW50J10gPSBjb21tZW50X3RleHQKLSAgICAgICAgc2VsZi5icm93
c2VyWydidWdfc3RhdHVzJ10gPSBbJ1JFU09MVkVEJ10KLSAgICAgICAgc2VsZi5icm93c2VyWydy
ZXNvbHV0aW9uJ10gPSBbJ0ZJWEVEJ10KLSAgICAgICAgc2VsZi5icm93c2VyLnN1Ym1pdCgpCi0K
LSAgICBkZWYgcmVhc3NpZ25fYnVnKHNlbGYsIGJ1Z19pZCwgYXNzaWduZWUsIGNvbW1lbnRfdGV4
dD1Ob25lKToKLSAgICAgICAgc2VsZi5hdXRoZW50aWNhdGUoKQotCi0gICAgICAgIGxvZygiQXNz
aWduaW5nIGJ1ZyAlcyB0byAlcyIgJSAoYnVnX2lkLCBhc3NpZ25lZSkpCi0gICAgICAgIGlmIHNl
bGYuZHJ5cnVuOgotICAgICAgICAgICAgbG9nKGNvbW1lbnRfdGV4dCkKLSAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgIHNlbGYuYnJvd3Nlci5vcGVuKHNlbGYuYnVnX3VybF9mb3JfYnVnX2lk
KGJ1Z19pZCkpCi0gICAgICAgIHNlbGYuYnJvd3Nlci5zZWxlY3RfZm9ybShuYW1lPSJjaGFuZ2Vm
b3JtIikKLSAgICAgICAgaWYgY29tbWVudF90ZXh0OgotICAgICAgICAgICAgbG9nKGNvbW1lbnRf
dGV4dCkKLSAgICAgICAgICAgIHNlbGYuYnJvd3NlclsiY29tbWVudCJdID0gY29tbWVudF90ZXh0
Ci0gICAgICAgIHNlbGYuYnJvd3NlclsiYXNzaWduZWRfdG8iXSA9IGFzc2lnbmVlCi0gICAgICAg
IHNlbGYuYnJvd3Nlci5zdWJtaXQoKQotCi0gICAgZGVmIHJlb3Blbl9idWcoc2VsZiwgYnVnX2lk
LCBjb21tZW50X3RleHQpOgotICAgICAgICBzZWxmLmF1dGhlbnRpY2F0ZSgpCi0KLSAgICAgICAg
bG9nKCJSZS1vcGVuaW5nIGJ1ZyAlcyIgJSBidWdfaWQpCi0gICAgICAgIGxvZyhjb21tZW50X3Rl
eHQpICMgQnVnemlsbGEgcmVxdWlyZXMgYSBjb21tZW50IHdoZW4gcmUtb3BlbmluZyBhIGJ1Zywg
c28gd2Uga25vdyBpdCB3aWxsIG5ldmVyIGJlIE5vbmUuCi0gICAgICAgIGlmIHNlbGYuZHJ5cnVu
OgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgc2VsZi5icm93c2VyLm9wZW4oc2VsZi5i
dWdfdXJsX2Zvcl9idWdfaWQoYnVnX2lkKSkKLSAgICAgICAgc2VsZi5icm93c2VyLnNlbGVjdF9m
b3JtKG5hbWU9ImNoYW5nZWZvcm0iKQotICAgICAgICBzZWxmLmJyb3dzZXJbJ2J1Z19zdGF0dXMn
XSA9IFsnUkVPUEVORUQnXQotICAgICAgICBzZWxmLmJyb3dzZXJbJ2NvbW1lbnQnXSA9IGNvbW1l
bnRfdGV4dAotICAgICAgICBzZWxmLmJyb3dzZXIuc3VibWl0KCkKSW5kZXg6IFdlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy9idWd6aWxsYV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL21vZHVsZXMvYnVnemlsbGFfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUy
NzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2J1Z3ppbGxhX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwMiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0
IHVuaXR0ZXN0Ci0KLWZyb20gbW9kdWxlcy5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0
LCBSZXZpZXdlciwgQ29tbWl0dGVyCi1mcm9tIG1vZHVsZXMuYnVnemlsbGEgaW1wb3J0IEJ1Z3pp
bGxhLCBCdWd6aWxsYVF1ZXJpZXMsIHBhcnNlX2J1Z19pZAotZnJvbSBtb2R1bGVzLm91dHB1dGNh
cHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gbW9kdWxlcy5tb2NrIGltcG9ydCBNb2Nr
Ci0KLWZyb20gbW9kdWxlcy5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCi0KLQot
Y2xhc3MgTW9ja0Jyb3dzZXIob2JqZWN0KToKLSAgICBkZWYgb3BlbihzZWxmLCB1cmwpOgotICAg
ICAgICBwYXNzCi0KLSAgICBkZWYgc2VsZWN0X2Zvcm0oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHBh
c3MKLQotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgcGFz
cwotCi0gICAgZGVmIHN1Ym1pdChzZWxmKToKLSAgICAgICAgcGFzcwotCi0KLWNsYXNzIEJ1Z3pp
bGxhVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgX2V4YW1wbGVfYXR0YWNobWVudCA9ICcn
JwotICAgICAgICA8YXR0YWNobWVudAotICAgICAgICAgIGlzb2Jzb2xldGU9IjEiCi0gICAgICAg
ICAgaXNwYXRjaD0iMSIKLSAgICAgICAgICBpc3ByaXZhdGU9IjAiCi0gICAgICAgID4KLSAgICAg
ICAgPGF0dGFjaGlkPjMzNzIxPC9hdHRhY2hpZD4KLSAgICAgICAgPGRhdGU+MjAwOS0wNy0yOSAx
MDoyMyBQRFQ8L2RhdGU+Ci0gICAgICAgIDxkZXNjPkZpeGVkIHdoaXRlc3BhY2UgaXNzdWU8L2Rl
c2M+Ci0gICAgICAgIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+Ci0gICAgICAgIDx0eXBlPnRl
eHQvcGxhaW48L3R5cGU+Ci0gICAgICAgIDxzaXplPjk3MTk8L3NpemU+Ci0gICAgICAgIDxhdHRh
Y2hlcj5jaHJpc3RpYW4ucGxlc25lci5oYW5zZW5AZ21haWwuY29tPC9hdHRhY2hlcj4KLSAgICAg
ICAgICA8ZmxhZyBuYW1lPSJyZXZpZXciCi0gICAgICAgICAgICAgICAgaWQ9IjE3OTMxIgotICAg
ICAgICAgICAgICAgIHN0YXR1cz0iKyIKLSAgICAgICAgICAgICAgICBzZXR0ZXI9Im9uZUB0ZXN0
LmNvbSIKLSAgICAgICAgICAgLz4KLSAgICAgICAgICA8ZmxhZyBuYW1lPSJjb21taXQtcXVldWUi
Ci0gICAgICAgICAgICAgICAgaWQ9IjE3OTMyIgotICAgICAgICAgICAgICAgIHN0YXR1cz0iKyIK
LSAgICAgICAgICAgICAgICBzZXR0ZXI9InR3b0B0ZXN0LmNvbSIKLSAgICAgICAgICAgLz4KLSAg
ICAgICAgPC9hdHRhY2htZW50PgotJycnCi0gICAgX2V4cGVjdGVkX2V4YW1wbGVfYXR0YWNobWVu
dF9wYXJzaW5nID0gewotICAgICAgICAnYnVnX2lkJyA6IDEwMCwKLSAgICAgICAgJ2lzX29ic29s
ZXRlJyA6IFRydWUsCi0gICAgICAgICdpc19wYXRjaCcgOiBUcnVlLAotICAgICAgICAnaWQnIDog
MzM3MjEsCi0gICAgICAgICd1cmwnIDogImh0dHBzOi8vYnVncy53ZWJraXQub3JnL2F0dGFjaG1l
bnQuY2dpP2lkPTMzNzIxIiwKLSAgICAgICAgJ25hbWUnIDogIkZpeGVkIHdoaXRlc3BhY2UgaXNz
dWUiLAotICAgICAgICAndHlwZScgOiAidGV4dC9wbGFpbiIsCi0gICAgICAgICdyZXZpZXcnIDog
JysnLAotICAgICAgICAncmV2aWV3ZXJfZW1haWwnIDogJ29uZUB0ZXN0LmNvbScsCi0gICAgICAg
ICdjb21taXQtcXVldWUnIDogJysnLAotICAgICAgICAnY29tbWl0dGVyX2VtYWlsJyA6ICd0d29A
dGVzdC5jb20nLAotICAgICAgICAnYXR0YWNoZXJfZW1haWwnIDogJ2NocmlzdGlhbi5wbGVzbmVy
LmhhbnNlbkBnbWFpbC5jb20nLAotICAgIH0KLQotICAgIGRlZiB0ZXN0X3BhcnNlX2J1Z19pZChz
ZWxmKToKLSAgICAgICAgIyBGSVhNRTogVGhlc2Ugd291bGQgYmUgYWxsIGJldHRlciBhcyBkb2N0
ZXN0cwotICAgICAgICBidWdzID0gQnVnemlsbGEoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cygxMjM0NSwgcGFyc2VfYnVnX2lkKCJodHRwOi8vd2Via2l0Lm9yZy9iLzEyMzQ1IikpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEyMzQ1LCBwYXJzZV9idWdfaWQoImh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzQ1IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKDEyMzQ1LCBwYXJzZV9idWdfaWQoYnVncy5zaG9ydF9idWdfdXJsX2Zvcl9idWdfaWQoMTIz
NDUpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTIzNDUsIHBhcnNlX2J1Z19pZChidWdz
LmJ1Z191cmxfZm9yX2J1Z19pZCgxMjM0NSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygx
MjM0NSwgcGFyc2VfYnVnX2lkKGJ1Z3MuYnVnX3VybF9mb3JfYnVnX2lkKDEyMzQ1LCB4bWw9VHJ1
ZSkpKQotCi0gICAgICAgICMgT3VyIGJ1ZyBwYXJzZXIgaXMgc3VwZXItZnJhZ2lsZSwgYnV0IGF0
IGxlYXN0IHdlJ3JlIHRlc3RpbmcgaXQuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUs
IHBhcnNlX2J1Z19pZCgiaHR0cDovL3d3dy53ZWJraXQub3JnL2IvMTIzNDUiKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgcGFyc2VfYnVnX2lkKCJodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9jdHlwZT14bWwmaWQ9MTIzNDUiKSkKLQotICAgIF9leGFtcGxlX2J1
ZyA9ICIiIgotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9
InllcyIgPz4KLTwhRE9DVFlQRSBidWd6aWxsYSBTWVNURU0gImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL2J1Z3ppbGxhLmR0ZCI+Ci08YnVnemlsbGEgdmVyc2lvbj0iMy4yLjMiCi0gICAgICAgICAg
dXJsYmFzZT0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIgotICAgICAgICAgIG1haW50YWluZXI9
ImFkbWluQHdlYmtpdC5vcmciCi0gICAgICAgICAgZXhwb3J0ZXI9ImVyaWNAd2Via2l0Lm9yZyIK
LT4KLSAgICA8YnVnPgotICAgICAgICAgIDxidWdfaWQ+MzI1ODU8L2J1Z19pZD4KLSAgICAgICAg
ICA8Y3JlYXRpb25fdHM+MjAwOS0xMi0xNSAxNToxNyBQU1Q8L2NyZWF0aW9uX3RzPgotICAgICAg
ICAgIDxzaG9ydF9kZXNjPmJ1ZyB0byB0ZXN0IGJ1Z3ppbGxhLXRvb2wgYW5kIGNvbW1pdC1xdWV1
ZSBmYWlsdXJlczwvc2hvcnRfZGVzYz4KLSAgICAgICAgICA8ZGVsdGFfdHM+MjAwOS0xMi0yNyAy
MTowNDo1MCBQU1Q8L2RlbHRhX3RzPgotICAgICAgICAgIDxyZXBvcnRlcl9hY2Nlc3NpYmxlPjE8
L3JlcG9ydGVyX2FjY2Vzc2libGU+Ci0gICAgICAgICAgPGNjbGlzdF9hY2Nlc3NpYmxlPjE8L2Nj
bGlzdF9hY2Nlc3NpYmxlPgotICAgICAgICAgIDxjbGFzc2lmaWNhdGlvbl9pZD4xPC9jbGFzc2lm
aWNhdGlvbl9pZD4KLSAgICAgICAgICA8Y2xhc3NpZmljYXRpb24+VW5jbGFzc2lmaWVkPC9jbGFz
c2lmaWNhdGlvbj4KLSAgICAgICAgICA8cHJvZHVjdD5XZWJLaXQ8L3Byb2R1Y3Q+Ci0gICAgICAg
ICAgPGNvbXBvbmVudD5Ub29scyAvIFRlc3RzPC9jb21wb25lbnQ+Ci0gICAgICAgICAgPHZlcnNp
b24+NTI4KyAoTmlnaHRseSBidWlsZCk8L3ZlcnNpb24+Ci0gICAgICAgICAgPHJlcF9wbGF0Zm9y
bT5QQzwvcmVwX3BsYXRmb3JtPgotICAgICAgICAgIDxvcF9zeXM+TWFjIE9TIFggMTAuNTwvb3Bf
c3lzPgotICAgICAgICAgIDxidWdfc3RhdHVzPk5FVzwvYnVnX3N0YXR1cz4KLSAgICAgICAgICA8
cHJpb3JpdHk+UDI8L3ByaW9yaXR5PgotICAgICAgICAgIDxidWdfc2V2ZXJpdHk+Tm9ybWFsPC9i
dWdfc2V2ZXJpdHk+Ci0gICAgICAgICAgPHRhcmdldF9taWxlc3RvbmU+LS0tPC90YXJnZXRfbWls
ZXN0b25lPgotICAgICAgICAgIDxldmVyY29uZmlybWVkPjE8L2V2ZXJjb25maXJtZWQ+Ci0gICAg
ICAgICAgPHJlcG9ydGVyIG5hbWU9IkVyaWMgU2VpZGVsIj5lcmljQHdlYmtpdC5vcmc8L3JlcG9y
dGVyPgotICAgICAgICAgIDxhc3NpZ25lZF90byBuYW1lPSJOb2JvZHkiPndlYmtpdC11bmFzc2ln
bmVkQGxpc3RzLndlYmtpdC5vcmc8L2Fzc2lnbmVkX3RvPgotICAgICAgICAgIDxjYz5mb29AYmFy
LmNvbTwvY2M+Ci0gICAgPGNjPmV4YW1wbGVAZXhhbXBsZS5jb208L2NjPgotICAgICAgICAgIDxs
b25nX2Rlc2MgaXNwcml2YXRlPSIwIj4KLSAgICAgICAgICAgIDx3aG8gbmFtZT0iRXJpYyBTZWlk
ZWwiPmVyaWNAd2Via2l0Lm9yZzwvd2hvPgotICAgICAgICAgICAgPGJ1Z193aGVuPjIwMDktMTIt
MTUgMTU6MTc6MjggUFNUPC9idWdfd2hlbj4KLSAgICAgICAgICAgIDx0aGV0ZXh0PmJ1ZyB0byB0
ZXN0IGJ1Z3ppbGxhLXRvb2wgYW5kIGNvbW1pdC1xdWV1ZSBmYWlsdXJlcwotCi1JZ25vcmUgdGhp
cyBidWcuICBKdXN0IGZvciB0ZXN0aW5nIGZhaWx1cmUgbW9kZXMgb2YgYnVnemlsbGEtdG9vbCBh
bmQgdGhlIGNvbW1pdC1xdWV1ZS48L3RoZXRleHQ+Ci0gICAgICAgICAgPC9sb25nX2Rlc2M+Ci0g
ICAgICAgICAgPGF0dGFjaG1lbnQgCi0gICAgICAgICAgICAgIGlzb2Jzb2xldGU9IjAiCi0gICAg
ICAgICAgICAgIGlzcGF0Y2g9IjEiCi0gICAgICAgICAgICAgIGlzcHJpdmF0ZT0iMCIKLSAgICAg
ICAgICA+IAotICAgICAgICAgICAgPGF0dGFjaGlkPjQ1NTQ4PC9hdHRhY2hpZD4gCi0gICAgICAg
ICAgICA8ZGF0ZT4yMDA5LTEyLTI3IDIzOjUxIFBTVDwvZGF0ZT4gCi0gICAgICAgICAgICA8ZGVz
Yz5QYXRjaDwvZGVzYz4gCi0gICAgICAgICAgICA8ZmlsZW5hbWU+YnVnLTMyNTg1LTIwMDkxMjI4
MDA1MTEyLnBhdGNoPC9maWxlbmFtZT4gCi0gICAgICAgICAgICA8dHlwZT50ZXh0L3BsYWluPC90
eXBlPiAKLSAgICAgICAgICAgIDxzaXplPjEwODgyPC9zaXplPiAKLSAgICAgICAgICAgIDxhdHRh
Y2hlcj5tanNAYXBwbGUuY29tPC9hdHRhY2hlcj4gCi0gICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgPHRva2VuPjEyNjE5ODgyNDgtZGM1MTQwOWU5YzQyMWE0MzU4ZjM2NWZhOGJlYzgzNTc8L3Rv
a2VuPiAKLSAgICAgICAgICAgICAgPGRhdGEgZW5jb2Rpbmc9ImJhc2U2NCI+U1c1a1pYZzZJRmRs
WWt0cGRDOXRZV012UTJoaGJtZGxURzluQ2owOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQ
VDA5UFQwOQotcmVtb3ZlZC1iZWNhdXNlLWl0LXdhcy1yZWFsbHktbG9uZwotWkVacGJtbHphRXh2
WVdSWGFYUm9VbVZoYzI5dU9uSmxZWE52YmwwN0NpdDlDaXNLSUVCbGJtUUtJQW9nSTJWdVpHbG1D
Zz09Ci08L2RhdGE+ICAgICAgICAKLSAKLSAgICAgICAgICAgICAgPGZsYWcgbmFtZT0icmV2aWV3
IgotICAgICAgICAgICAgICAgICAgICBpZD0iMjc2MDIiCi0gICAgICAgICAgICAgICAgICAgIHN0
YXR1cz0iPyIKLSAgICAgICAgICAgICAgICAgICAgc2V0dGVyPSJtanNAYXBwbGUuY29tIgotICAg
ICAgICAgICAgICAgLz4gCi0gICAgICAgICAgPC9hdHRhY2htZW50PiAKLSAgICA8L2J1Zz4KLTwv
YnVnemlsbGE+Ci0iIiIKLSAgICBfZXhwZWN0ZWRfZXhhbXBsZV9idWdfcGFyc2luZyA9IHsKLSAg
ICAgICAgImlkIiA6IDMyNTg1LAotICAgICAgICAidGl0bGUiIDogdSJidWcgdG8gdGVzdCBidWd6
aWxsYS10b29sIGFuZCBjb21taXQtcXVldWUgZmFpbHVyZXMiLAotICAgICAgICAiY2NfZW1haWxz
IiA6IFsiZm9vQGJhci5jb20iLCAiZXhhbXBsZUBleGFtcGxlLmNvbSJdLAotICAgICAgICAicmVw
b3J0ZXJfZW1haWwiIDogImVyaWNAd2Via2l0Lm9yZyIsCi0gICAgICAgICJhc3NpZ25lZF90b19l
bWFpbCIgOiAid2Via2l0LXVuYXNzaWduZWRAbGlzdHMud2Via2l0Lm9yZyIsCi0gICAgICAgICJh
dHRhY2htZW50cyIgOiBbewotICAgICAgICAgICAgJ25hbWUnOiB1J1BhdGNoJywKLSAgICAgICAg
ICAgICd1cmwnOiAnaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9NDU1
NDgnLAotICAgICAgICAgICAgJ2lzX29ic29sZXRlJzogRmFsc2UsCi0gICAgICAgICAgICAncmV2
aWV3JzogJz8nLAotICAgICAgICAgICAgJ2lzX3BhdGNoJzogVHJ1ZSwKLSAgICAgICAgICAgICdh
dHRhY2hlcl9lbWFpbCc6ICdtanNAYXBwbGUuY29tJywKLSAgICAgICAgICAgICdidWdfaWQnOiAz
MjU4NSwKLSAgICAgICAgICAgICd0eXBlJzogJ3RleHQvcGxhaW4nLAotICAgICAgICAgICAgJ2lk
JzogNDU1NDgKLSAgICAgICAgfV0sCi0gICAgfQotCi0gICAgZGVmIF9hc3NlcnRfZGljdGlvbmFy
aWVzX2VxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0ZWQpOgotICAgICAgICAjIE1ha2Ugc3VyZSB3
ZSBhcmVuJ3QgcGFyc2luZyBtb3JlIG9yIGxlc3MgdGhhbiB3ZSBleHBlY3QKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoc29ydGVkKGFjdHVhbC5rZXlzKCkpLCBzb3J0ZWQoZXhwZWN0ZWQua2V5
cygpKSkKLQotICAgICAgICBmb3Iga2V5LCBleHBlY3RlZF92YWx1ZSBpbiBleHBlY3RlZC5pdGVt
cygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWN0dWFsW2tleV0sIGV4cGVjdGVk
X3ZhbHVlLCAoIkZhaWx1cmUgZm9yIGtleTogJXM6IEFjdHVhbD0nJXMnIEV4cGVjdGVkPSclcyci
ICUgKGtleSwgYWN0dWFsW2tleV0sIGV4cGVjdGVkX3ZhbHVlKSkpCi0KLSAgICBkZWYgdGVzdF9i
dWdfcGFyc2luZyhzZWxmKToKLSAgICAgICAgYnVnID0gQnVnemlsbGEoKS5fcGFyc2VfYnVnX3Bh
Z2Uoc2VsZi5fZXhhbXBsZV9idWcpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9kaWN0aW9uYXJpZXNf
ZXF1YWwoYnVnLCBzZWxmLl9leHBlY3RlZF9leGFtcGxlX2J1Z19wYXJzaW5nKQotCi0gICAgIyBU
aGlzIGNvdWxkIGJlIGNvbWJpbmVkIGludG8gdGVzdF9idWdfcGFyc2luZyBsYXRlciBpZiBkZXNp
cmVkLgotICAgIGRlZiB0ZXN0X2F0dGFjaG1lbnRfcGFyc2luZyhzZWxmKToKLSAgICAgICAgYnVn
emlsbGEgPSBCdWd6aWxsYSgpCi0gICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHNlbGYuX2V4
YW1wbGVfYXR0YWNobWVudCkKLSAgICAgICAgYXR0YWNobWVudF9lbGVtZW50ID0gc291cC5maW5k
KCJhdHRhY2htZW50IikKLSAgICAgICAgYXR0YWNobWVudCA9IGJ1Z3ppbGxhLl9wYXJzZV9hdHRh
Y2htZW50X2VsZW1lbnQoYXR0YWNobWVudF9lbGVtZW50LCBzZWxmLl9leHBlY3RlZF9leGFtcGxl
X2F0dGFjaG1lbnRfcGFyc2luZ1snYnVnX2lkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShh
dHRhY2htZW50KQotICAgICAgICBzZWxmLl9hc3NlcnRfZGljdGlvbmFyaWVzX2VxdWFsKGF0dGFj
aG1lbnQsIHNlbGYuX2V4cGVjdGVkX2V4YW1wbGVfYXR0YWNobWVudF9wYXJzaW5nKQotCi0gICAg
X3NhbXBsZV9hdHRhY2htZW50X2RldGFpbF9wYWdlID0gIiIiCi08IURPQ1RZUEUgaHRtbCBQVUJM
SUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAgICAg
ICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+
Ci0gIDxoZWFkPgotICAgIDx0aXRsZT4KLSAgQXR0YWNobWVudCA0MTA3MyBEZXRhaWxzIGZvciBC
dWcgMjczMTQ8L3RpdGxlPgotPGxpbmsgcmVsPSJUb3AiIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJr
aXQub3JnLyI+Ci0gICAgPGxpbmsgcmVsPSJVcCIgaHJlZj0ic2hvd19idWcuY2dpP2lkPTI3MzE0
Ij4KLSIiIgotCi0gICAgZGVmIHRlc3RfYXR0YWNobWVudF9kZXRhaWxfYnVnX3BhcnNpbmcoc2Vs
Zik6Ci0gICAgICAgIGJ1Z3ppbGxhID0gQnVnemlsbGEoKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygyNzMxNCwgYnVnemlsbGEuX3BhcnNlX2J1Z19pZF9mcm9tX2F0dGFjaG1lbnRfcGFnZShz
ZWxmLl9zYW1wbGVfYXR0YWNobWVudF9kZXRhaWxfcGFnZSkpCi0KLSAgICBkZWYgdGVzdF9hZGRf
Y2NfdG9fYnVnKHNlbGYpOgotICAgICAgICBidWd6aWxsYSA9IEJ1Z3ppbGxhKCkKLSAgICAgICAg
YnVnemlsbGEuYnJvd3NlciA9IE1vY2tCcm93c2VyKCkKLSAgICAgICAgYnVnemlsbGEuYXV0aGVu
dGljYXRlID0gbGFtYmRhOiBOb25lCi0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJBZGRpbmcg
WydhZGFtQGV4YW1wbGUuY29tJ10gdG8gdGhlIENDIGxpc3QgZm9yIGJ1ZyA0MlxuIgotICAgICAg
ICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgYnVnemlsbGEuYWRkX2NjX3Rv
X2J1ZywgWzQyLCBbImFkYW1AZXhhbXBsZS5jb20iXV0sIGV4cGVjdGVkX3N0ZGVycj1leHBlY3Rl
ZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVzdF9mbGFnX3Blcm1pc3Npb25fcmVqZWN0aW9uX21lc3Nh
Z2Uoc2VsZik6Ci0gICAgICAgIGJ1Z3ppbGxhID0gQnVnemlsbGEoKQotICAgICAgICBleHBlY3Rl
ZF9tZXNzc2FnZT0iIiJmb29AZm9vLmNvbSBkb2VzIG5vdCBoYXZlIHJldmlldyBwZXJtaXNzaW9u
cyBhY2NvcmRpbmcgdG8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1dlYktp
dFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jb21taXR0ZXJzLnB5LgotCi0tIElmIHlvdSBkbyBub3Qg
aGF2ZSByZXZpZXcgcmlnaHRzIHBsZWFzZSByZWFkIGh0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9j
b250cmlidXRpbmcuaHRtbCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byB1c2UgYnVnemlsbGEg
ZmxhZ3MuCi0KLS0gSWYgeW91IGhhdmUgcmV2aWV3IHJpZ2h0cyBwbGVhc2UgY29ycmVjdCB0aGUg
ZXJyb3IgaW4gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1pdHRlcnMucHkgYnkgYWRk
aW5nIHlvdXJzZWxmIHRvIHRoZSBmaWxlIChubyByZXZpZXcgbmVlZGVkKS4gIER1ZSB0byBidWcg
MzAwODQgdGhlIGNvbW1pdC1xdWV1ZSB3aWxsIHJlcXVpcmUgYSByZXN0YXJ0IGFmdGVyIHlvdXIg
Y2hhbmdlLiAgUGxlYXNlIGNvbnRhY3QgZXNlaWRlbEBjaHJvbWl1bS5vcmcgdG8gcmVxdWVzdCBh
IGNvbW1pdC1xdWV1ZSByZXN0YXJ0LiAgQWZ0ZXIgcmVzdGFydCB0aGUgY29tbWl0LXF1ZXVlIHdp
bGwgY29ycmVjdGx5IHJlc3BlY3QgeW91ciByZXZpZXcgcmlnaHRzLiIiIgotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGJ1Z3ppbGxhLl9mbGFnX3Blcm1pc3Npb25fcmVqZWN0aW9uX21lc3NhZ2Uo
ImZvb0Bmb28uY29tIiwgInJldmlldyIpLCBleHBlY3RlZF9tZXNzc2FnZSkKLQotCi1jbGFzcyBC
dWd6aWxsYVF1ZXJpZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBfc2FtcGxlX3JlcXVl
c3RfcGFnZSA9ICIiIgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQu
MDEgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53
My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotICA8aGVhZD4KLSAgICA8dGl0bGU+
UmVxdWVzdCBRdWV1ZTwvdGl0bGU+Ci0gIDwvaGVhZD4KLTxib2R5PgotCi08aDM+RmxhZzogcmV2
aWV3PC9oMz4KLSAgPHRhYmxlIGNsYXNzPSJyZXF1ZXN0cyIgY2VsbHNwYWNpbmc9IjAiIGNlbGxw
YWRkaW5nPSI0IiBib3JkZXI9IjEiPgotICAgIDx0cj4KLSAgICAgICAgPHRoPlJlcXVlc3Rlcjwv
dGg+Ci0gICAgICAgIDx0aD5SZXF1ZXN0ZWU8L3RoPgotICAgICAgICA8dGg+QnVnPC90aD4KLSAg
ICAgICAgPHRoPkF0dGFjaG1lbnQ8L3RoPgotICAgICAgICA8dGg+Q3JlYXRlZDwvdGg+Ci0gICAg
PC90cj4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZD5TaGluaWNoaXJvIEhhbWFqaSAmbHQ7aGFtYWpp
JiM2NDtjaHJvbWl1bS5vcmcmZ3Q7PC90ZD4KLSAgICAgICAgPHRkPjwvdGQ+Ci0gICAgICAgIDx0
ZD48YSBocmVmPSJzaG93X2J1Zy5jZ2k/aWQ9MzAwMTUiPjMwMDE1OiB0ZXh0LXRyYW5zZm9ybTpj
YXBpdGFsaXplIGlzIGZhaWxpbmcgaW4gQ1NTMi4xIHRlc3Qgc3VpdGU8L2E+PC90ZD4KLSAgICAg
ICAgPHRkPjxhIGhyZWY9ImF0dGFjaG1lbnQuY2dpP2lkPTQwNTExJmFtcDthY3Rpb249cmV2aWV3
Ij4KLTQwNTExOiBQYXRjaCB2MDwvYT48L3RkPgotICAgICAgICA8dGQ+MjAwOS0xMC0wMiAwNDo1
OCBQU1Q8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgICA8dGQ+WmFuIERvYmVyc2Vr
ICZsdDt6YW5kb2JlcnNlayYjNjQ7Z21haWwuY29tJmd0OzwvdGQ+Ci0gICAgICAgIDx0ZD48L3Rk
PgotICAgICAgICA8dGQ+PGEgaHJlZj0ic2hvd19idWcuY2dpP2lkPTI2MzA0Ij4yNjMwNDogW0dU
S10gQWRkIGNvbnRyb2xzIGZvciBwbGF5aW5nIGh0bWw1IHZpZGVvLjwvYT48L3RkPgotICAgICAg
ICA8dGQ+PGEgaHJlZj0iYXR0YWNobWVudC5jZ2k/aWQ9NDA3MjImYW1wO2FjdGlvbj1yZXZpZXci
PgotNDA3MjI6IE1lZGlhIGNvbnRyb2xzLCB0aGUgc2ltcGxlIGFwcHJvYWNoPC9hPjwvdGQ+Ci0g
ICAgICAgIDx0ZD4yMDA5LTEwLTA2IDA5OjEzIFBTVDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+
Ci0gICAgICAgIDx0ZD5aYW4gRG9iZXJzZWsgJmx0O3phbmRvYmVyc2VrJiM2NDtnbWFpbC5jb20m
Z3Q7PC90ZD4KLSAgICAgICAgPHRkPjwvdGQ+Ci0gICAgICAgIDx0ZD48YSBocmVmPSJzaG93X2J1
Zy5jZ2k/aWQ9MjYzMDQiPjI2MzA0OiBbR1RLXSBBZGQgY29udHJvbHMgZm9yIHBsYXlpbmcgaHRt
bDUgdmlkZW8uPC9hPjwvdGQ+Ci0gICAgICAgIDx0ZD48YSBocmVmPSJhdHRhY2htZW50LmNnaT9p
ZD00MDcyMyZhbXA7YWN0aW9uPXJldmlldyI+Ci00MDcyMzogQWRqdXN0IHRoZSBtZWRpYSBzbGlk
ZXIgdGh1bWIgc2l6ZTwvYT48L3RkPgotICAgICAgICA8dGQ+MjAwOS0xMC0wNiAwOToxNSBQU1Q8
L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+Ci0iIiIKLQotICAg
IGRlZiB0ZXN0X3JlcXVlc3RfcGFnZV9wYXJzaW5nKHNlbGYpOgotICAgICAgICBxdWVyaWVzID0g
QnVnemlsbGFRdWVyaWVzKE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFs0MDUxMSwg
NDA3MjIsIDQwNzIzXSwgcXVlcmllcy5fcGFyc2VfYXR0YWNobWVudF9pZHNfcmVxdWVzdF9xdWVy
eShzZWxmLl9zYW1wbGVfcmVxdWVzdF9wYWdlKSkKLQotICAgIGRlZiB0ZXN0X2xvYWRfcXVlcnko
c2VsZik6Ci0gICAgICAgIHF1ZXJpZXMgPSBCdWd6aWxsYVF1ZXJpZXMoTW9jaygpKQotICAgICAg
ICBxdWVyaWVzLl9sb2FkX3F1ZXJ5KCJyZXF1ZXN0LmNnaT9hY3Rpb249cXVldWUmdHlwZT1yZXZp
ZXcmZ3JvdXA9dHlwZSIpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0
dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9idWlsZGJvdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvYnVpbGRib3QucHkJ
KHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2J1aWxkYm90
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAw
OSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0jCi0jIFdlYktpdCdzIFB5dGhvbiBtb2R1bGUgZm9yIGludGVyYWN0aW5nIHdpdGggV2ViS2l0
J3MgYnVpbGRib3QKLQotaW1wb3J0IHJlCi1pbXBvcnQgdXJsbGliMgotCi0jIEltcG9ydCBXZWJL
aXQtc3BlY2lmaWMgbW9kdWxlcy4KLWZyb20gbW9kdWxlcy53ZWJraXRfbG9nZ2luZyBpbXBvcnQg
bG9nCi0KLSMgV2ViS2l0IGluY2x1ZGVzIGEgYnVpbHQgY29weSBvZiBCZWF1dGlmdWxTb3VwIGlu
IFNjcmlwdHMvbW9kdWxlcwotIyBzbyB0aGlzIGltcG9ydCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQu
Ci1mcm9tIC5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCi0KLWNsYXNzIEJ1aWxk
Qm90OgotICAgIGRlZmF1bHRfaG9zdCA9ICJidWlsZC53ZWJraXQub3JnIgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBob3N0PWRlZmF1bHRfaG9zdCk6Ci0gICAgICAgIHNlbGYuYnVpbGRib3RfaG9z
dCA9IGhvc3QKLSAgICAgICAgc2VsZi5idWlsZGJvdF9zZXJ2ZXJfdXJsID0gImh0dHA6Ly8lcy8i
ICUgc2VsZi5idWlsZGJvdF9ob3N0Ci0gICAgICAgIAotICAgICAgICAjIElmIGFueSBvZiB0aGUg
TGVvcGFyZCBidWlsZC90ZXN0IGJvdHMgb3IgdGhlIFdpbmRvd3MgYnVpbGRlcnMgYXJlIHJlZCB3
ZSBzaG91bGQgbm90IGJlIGxhbmRpbmcgcGF0Y2hlcy4KLSAgICAgICAgIyBPdGhlciBidWlsZGVy
cyBzaG91bGQgYmUgYWRkZWQgdG8gdGhpcyBsaXN0IG9uY2UgdGhleSdyZSBrbm93biB0byBiZSBz
dGFibGUuCi0gICAgICAgIHNlbGYuY29yZV9idWlsZGVyX25hbWVzX3JlZ2V4cHMgPSBbICdMZW9w
YXJkJywgIldpbmRvd3MuKkJ1aWxkIiBdCi0KLSAgICAjIElmIFdlYktpdCdzIGJ1aWxkYm90IGhh
cyBhbiBYTUxSUEMgaW50ZXJmYWNlIHdlIGNvdWxkIHVzZSwgd2UgY291bGQgZG8gc29tZXRoaW5n
IG1vcmUgc29waGlzdGljYXRlZCBoZXJlLgotICAgICMgRm9yIG5vdyB3ZSBqdXN0IHBhcnNlIG91
dCB0aGUgYmFzaWNzLCBlbm91Z2ggdG8gc3VwcG9ydCBiYXNpYyBxdWVzdGlvbnMgbGlrZSAiaXMg
dGhlIHRyZWUgZ3JlZW4/IgotICAgIGRlZiBfcGFyc2VfYnVpbGRlcl9zdGF0dXNfZnJvbV9yb3co
c2VsZiwgc3RhdHVzX3Jvdyk6Ci0gICAgICAgIHN0YXR1c19jZWxscyA9IHN0YXR1c19yb3cuZmlu
ZEFsbCgndGQnKQotICAgICAgICBidWlsZGVyID0ge30KLQotICAgICAgICBuYW1lX2xpbmsgPSBz
dGF0dXNfY2VsbHNbMF0uZmluZCgnYScpCi0gICAgICAgIGJ1aWxkZXJbJ25hbWUnXSA9IG5hbWVf
bGluay5zdHJpbmcKLSAgICAgICAgIyBXZSBjb3VsZCBnZW5lcmF0ZSB0aGUgYnVpbGRlcl91cmwg
ZnJvbSB0aGUgbmFtZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgY29kZS4KLSAgICAgICAg
YnVpbGRlclsnYnVpbGRlcl91cmwnXSA9IHNlbGYuYnVpbGRib3Rfc2VydmVyX3VybCArIG5hbWVf
bGlua1snaHJlZiddCi0KLSAgICAgICAgc3RhdHVzX2xpbmsgPSBzdGF0dXNfY2VsbHNbMV0uZmlu
ZCgnYScpCi0gICAgICAgIGlmIG5vdCBzdGF0dXNfbGluazoKLSAgICAgICAgICAgICMgV2UgZmFp
bGVkIHRvIGZpbmQgYSBsaW5rIGluIHRoZSBmaXJzdCBjZWxsLCBqdXN0IGdpdmUgdXAuCi0gICAg
ICAgICAgICAjIFRoaXMgY2FuIGhhcHBlbiBpZiBhIGJ1aWxkZXIgaXMganVzdC1hZGRlZCwgdGhl
IGZpcnN0IGNlbGwgd2lsbCBqdXN0IGJlICJubyBidWlsZCIKLSAgICAgICAgICAgIGJ1aWxkZXJb
J2lzX2dyZWVuJ10gPSBGYWxzZSAjIE90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGRlcGVuZCBvbiBp
c19ncmVlbiBiZWluZyBwcmVzZW50LgotICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIKLSAgICAg
ICAgcmV2aXNpb25fc3RyaW5nID0gc3RhdHVzX2xpbmsuc3RyaW5nICMgV2lsbCBiZSBlaXRoZXIg
YSByZXZpc2lvbiBudW1iZXIgb3IgYSBidWlsZCBudW1iZXIKLSAgICAgICAgIyBJZiByZXZpc2lv
bl9zdHJpbmcgaGFzIG5vbi1kaWdpdHMgYXNzdW1lIGl0J3Mgbm90IGEgcmV2aXNpb24gbnVtYmVy
LgotICAgICAgICBidWlsZGVyWydidWlsdF9yZXZpc2lvbiddID0gaW50KHJldmlzaW9uX3N0cmlu
ZykgaWYgbm90IHJlLm1hdGNoKCdcRCcsIHJldmlzaW9uX3N0cmluZykgZWxzZSBOb25lCi0gICAg
ICAgIGJ1aWxkZXJbJ2lzX2dyZWVuJ10gPSBub3QgcmUuc2VhcmNoKCdmYWlsJywgc3RhdHVzX2Nl
bGxzWzFdLnJlbmRlckNvbnRlbnRzKCkpCi0gICAgICAgICMgV2UgY291bGQgcGFyc2Ugb3V0IHRo
ZSBidWlsZCBudW1iZXIgaW5zdGVhZCwgYnV0IGZvciBub3cganVzdCBzdG9yZSB0aGUgVVJMLgot
ICAgICAgICBidWlsZGVyWydidWlsZF91cmwnXSA9IHNlbGYuYnVpbGRib3Rfc2VydmVyX3VybCAr
IHN0YXR1c19saW5rWydocmVmJ10KLQotICAgICAgICAjIFdlIGNvdWxkIHBhcnNlIG91dCB0aGUg
Y3VycmVudCBhY3Rpdml0eSB0b28uCi0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIKLQotICAgIGRl
ZiBfYnVpbGRlcl9zdGF0dXNlc193aXRoX25hbWVzX21hdGNoaW5nX3JlZ2V4cHMoc2VsZiwgYnVp
bGRlcl9zdGF0dXNlcywgbmFtZV9yZWdleHBzKToKLSAgICAgICAgYnVpbGRlcnMgPSBbXQotICAg
ICAgICBmb3IgYnVpbGRlciBpbiBidWlsZGVyX3N0YXR1c2VzOgotICAgICAgICAgICAgZm9yIG5h
bWVfcmVnZXhwIGluIG5hbWVfcmVnZXhwczoKLSAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChu
YW1lX3JlZ2V4cCwgYnVpbGRlclsnbmFtZSddKToKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRl
cnMuYXBwZW5kKGJ1aWxkZXIpCi0gICAgICAgIHJldHVybiBidWlsZGVycwotCi0gICAgZGVmIHJl
ZF9jb3JlX2J1aWxkZXJzKHNlbGYpOgotICAgICAgICByZWRfYnVpbGRlcnMgPSBbXQotICAgICAg
ICBmb3IgYnVpbGRlciBpbiBzZWxmLl9idWlsZGVyX3N0YXR1c2VzX3dpdGhfbmFtZXNfbWF0Y2hp
bmdfcmVnZXhwcyhzZWxmLmJ1aWxkZXJfc3RhdHVzZXMoKSwgc2VsZi5jb3JlX2J1aWxkZXJfbmFt
ZXNfcmVnZXhwcyk6Ci0gICAgICAgICAgICBpZiBub3QgYnVpbGRlclsnaXNfZ3JlZW4nXToKLSAg
ICAgICAgICAgICAgICByZWRfYnVpbGRlcnMuYXBwZW5kKGJ1aWxkZXIpCi0gICAgICAgIHJldHVy
biByZWRfYnVpbGRlcnMKLQotICAgIGRlZiByZWRfY29yZV9idWlsZGVyc19uYW1lcyhzZWxmKToK
LSAgICAgICAgcmVkX2J1aWxkZXJzID0gc2VsZi5yZWRfY29yZV9idWlsZGVycygpCi0gICAgICAg
IHJldHVybiBtYXAobGFtYmRhIGJ1aWxkZXI6IGJ1aWxkZXJbJ25hbWUnXSwgcmVkX2J1aWxkZXJz
KQotCi0gICAgZGVmIGNvcmVfYnVpbGRlcnNfYXJlX2dyZWVuKHNlbGYpOgotICAgICAgICByZXR1
cm4gbm90IHNlbGYucmVkX2NvcmVfYnVpbGRlcnMoKQotCi0gICAgZGVmIGJ1aWxkZXJfc3RhdHVz
ZXMoc2VsZik6Ci0gICAgICAgIGJ1aWxkX3N0YXR1c191cmwgPSBzZWxmLmJ1aWxkYm90X3NlcnZl
cl91cmwgKyAnb25lX2JveF9wZXJfYnVpbGRlcicKLSAgICAgICAgcGFnZSA9IHVybGxpYjIudXJs
b3BlbihidWlsZF9zdGF0dXNfdXJsKQotICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChwYWdl
KQotCi0gICAgICAgIGJ1aWxkZXJzID0gW10KLSAgICAgICAgc3RhdHVzX3RhYmxlID0gc291cC5m
aW5kKCd0YWJsZScpCi0gICAgICAgIGZvciBzdGF0dXNfcm93IGluIHN0YXR1c190YWJsZS5maW5k
QWxsKCd0cicpOgotICAgICAgICAgICAgYnVpbGRlciA9IHNlbGYuX3BhcnNlX2J1aWxkZXJfc3Rh
dHVzX2Zyb21fcm93KHN0YXR1c19yb3cpCi0gICAgICAgICAgICBidWlsZGVycy5hcHBlbmQoYnVp
bGRlcikKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXJzCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvYnVpbGRib3RfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL2J1aWxkYm90X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9idWlsZGJvdF91bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMzQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVz
dAotCi1mcm9tIG1vZHVsZXMuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90Ci0KLWZyb20gbW9kdWxl
cy5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCi0KLWNsYXNzIEJ1aWxkQm90VGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBfZXhhbXBsZV9vbmVfYm94X3N0YXR1cyA9ICcn
JwotICAgIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJib3giPjxhIGhyZWY9ImJ1
aWxkZXJzL1dpbmRvd3MlMjBEZWJ1ZyUyMCUyOFRlc3RzJTI5Ij5XaW5kb3dzIERlYnVnIChUZXN0
cyk8L2E+PC90ZD4KLSAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBjbGFzcz0iTGFzdEJ1aWxkIGJv
eCBzdWNjZXNzIj48YSBocmVmPSJidWlsZGVycy9XaW5kb3dzJTIwRGVidWclMjAlMjhUZXN0cyUy
OS9idWlsZHMvMzY5MyI+NDczODA8L2E+PGJyIC8+YnVpbGQ8YnIgLz5zdWNjZXNzZnVsPC90ZD4K
LSAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBjbGFzcz0iQWN0aXZpdHkgYnVpbGRpbmciPmJ1aWxk
aW5nPGJyIC8+RVRBIGluPGJyIC8+fiAxNCBtaW5zPGJyIC8+YXQgMTM6NDA8L3RkPgotICAgIDx0
cj4KLSAgICA8dGQgY2xhc3M9ImJveCI+PGEgaHJlZj0iYnVpbGRlcnMvU25vd0xlb3BhcmQlMjBJ
bnRlbCUyMFJlbGVhc2UiPlNub3dMZW9wYXJkIEludGVsIFJlbGVhc2U8L2E+PC90ZD4KLSAgICAg
IDx0ZCBjbGFzcz0iTGFzdEJ1aWxkIGJveCIgPm5vIGJ1aWxkPC90ZD4KLSAgICAgIDx0ZCBhbGln
bj0iY2VudGVyIiBjbGFzcz0iQWN0aXZpdHkgYnVpbGRpbmciPmJ1aWxkaW5nPGJyIC8+PCAxIG1p
bjwvdGQ+Ci0gICAgPHRyPgotICAgIDx0ZCBjbGFzcz0iYm94Ij48YSBocmVmPSJidWlsZGVycy9R
dCUyMExpbnV4JTIwUmVsZWFzZSI+UXQgTGludXggUmVsZWFzZTwvYT48L3RkPgotICAgICAgPHRk
IGFsaWduPSJjZW50ZXIiIGNsYXNzPSJMYXN0QnVpbGQgYm94IGZhaWx1cmUiPjxhIGhyZWY9ImJ1
aWxkZXJzL1F0JTIwTGludXglMjBSZWxlYXNlL2J1aWxkcy82NTQiPjQ3MzgzPC9hPjxiciAvPmZh
aWxlZDxiciAvPmNvbXBpbGUtd2Via2l0PC90ZD4KLSAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBj
bGFzcz0iQWN0aXZpdHkgaWRsZSI+aWRsZTwvdGQ+Ci0gICAgPC90YWJsZT4KLScnJwotICAgIF9l
eHBlY3RlZF9leGFtcGxlX29uZV9ib3hfcGFyc2luZ3MgPSBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICdidWlsZGVyX3VybCc6IHUnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvYnVpbGRlcnMvV2lu
ZG93cyUyMERlYnVnJTIwJTI4VGVzdHMlMjknLAotICAgICAgICAgICAgJ2J1aWxkX3VybCc6IHUn
aHR0cDovL2J1aWxkLndlYmtpdC5vcmcvYnVpbGRlcnMvV2luZG93cyUyMERlYnVnJTIwJTI4VGVz
dHMlMjkvYnVpbGRzLzM2OTMnLAotICAgICAgICAgICAgJ2lzX2dyZWVuJzogVHJ1ZSwKLSAgICAg
ICAgICAgICduYW1lJzogdSdXaW5kb3dzIERlYnVnIChUZXN0cyknLAotICAgICAgICAgICAgJ2J1
aWx0X3JldmlzaW9uJzogNDczODAKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
J2J1aWxkZXJfdXJsJzogdSdodHRwOi8vYnVpbGQud2Via2l0Lm9yZy9idWlsZGVycy9Tbm93TGVv
cGFyZCUyMEludGVsJTIwUmVsZWFzZScsCi0gICAgICAgICAgICAnaXNfZ3JlZW4nOiBGYWxzZSwK
LSAgICAgICAgICAgICduYW1lJzogdSdTbm93TGVvcGFyZCBJbnRlbCBSZWxlYXNlJywKLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ2J1aWxkZXJfdXJsJzogdSdodHRwOi8vYnVp
bGQud2Via2l0Lm9yZy9idWlsZGVycy9RdCUyMExpbnV4JTIwUmVsZWFzZScsCi0gICAgICAgICAg
ICAnYnVpbGRfdXJsJzogdSdodHRwOi8vYnVpbGQud2Via2l0Lm9yZy9idWlsZGVycy9RdCUyMExp
bnV4JTIwUmVsZWFzZS9idWlsZHMvNjU0JywKLSAgICAgICAgICAgICdpc19ncmVlbic6IEZhbHNl
LAotICAgICAgICAgICAgJ25hbWUnOiB1J1F0IExpbnV4IFJlbGVhc2UnLAotICAgICAgICAgICAg
J2J1aWx0X3JldmlzaW9uJzogNDczODMKLSAgICAgICAgfSwKLSAgICBdCi0KLSAgICBkZWYgdGVz
dF9zdGF0dXNfcGFyc2luZyhzZWxmKToKLSAgICAgICAgYnVpbGRib3QgPSBCdWlsZEJvdCgpCi0K
LSAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoc2VsZi5fZXhhbXBsZV9vbmVfYm94X3N0YXR1
cykKLSAgICAgICAgc3RhdHVzX3RhYmxlID0gc291cC5maW5kKCJ0YWJsZSIpCi0gICAgICAgIGlu
cHV0X3Jvd3MgPSBzdGF0dXNfdGFibGUuZmluZEFsbCgndHInKQotCi0gICAgICAgIGZvciB4IGlu
IHJhbmdlKGxlbihpbnB1dF9yb3dzKSk6Ci0gICAgICAgICAgICBzdGF0dXNfcm93ID0gaW5wdXRf
cm93c1t4XQotICAgICAgICAgICAgZXhwZWN0ZWRfcGFyc2luZyA9IHNlbGYuX2V4cGVjdGVkX2V4
YW1wbGVfb25lX2JveF9wYXJzaW5nc1t4XQotCi0gICAgICAgICAgICBidWlsZGVyID0gYnVpbGRi
b3QuX3BhcnNlX2J1aWxkZXJfc3RhdHVzX2Zyb21fcm93KHN0YXR1c19yb3cpCi0KLSAgICAgICAg
ICAgICMgTWFrZSBzdXJlIHdlIGFyZW4ndCBwYXJzaW5nIG1vcmUgb3IgbGVzcyB0aGFuIHdlIGV4
cGVjdAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVpbGRlci5rZXlzKCksIGV4cGVj
dGVkX3BhcnNpbmcua2V5cygpKQotCi0gICAgICAgICAgICBmb3Iga2V5LCBleHBlY3RlZF92YWx1
ZSBpbiBleHBlY3RlZF9wYXJzaW5nLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoYnVpbGRlcltrZXldLCBleHBlY3RlZF92YWx1ZSwgKCJCdWlsZGVyICVkIHBhcnNl
IGZhaWx1cmUgZm9yIGtleTogJXM6IEFjdHVhbD0nJXMnIEV4cGVjdGVkPSclcyciICUgKHgsIGtl
eSwgYnVpbGRlcltrZXldLCBleHBlY3RlZF92YWx1ZSkpKQotCi0gICAgZGVmIHRlc3RfY29yZV9i
dWlsZGVyX21ldGhvZHMoc2VsZik6Ci0gICAgICAgIGJ1aWxkYm90ID0gQnVpbGRCb3QoKQotCi0g
ICAgICAgICMgT3ZlcnJpZGUgYnVpbGRlcl9zdGF0dXNlcyBmdW5jdGlvbiB0byBub3QgdG91Y2gg
dGhlIG5ldHdvcmsuCi0gICAgICAgIGRlZiBleGFtcGxlX2J1aWxkZXJfc3RhdHVzZXMoKTogIyBX
ZSBjb3VsZCB1c2UgaW5zdGFuY2VtZXRob2QoKSB0byBiaW5kICdzZWxmJyBidXQgd2UgZG9uJ3Qg
bmVlZCB0by4KLSAgICAgICAgICAgIHJldHVybiBCdWlsZEJvdFRlc3QuX2V4cGVjdGVkX2V4YW1w
bGVfb25lX2JveF9wYXJzaW5ncwotICAgICAgICBidWlsZGJvdC5idWlsZGVyX3N0YXR1c2VzID0g
ZXhhbXBsZV9idWlsZGVyX3N0YXR1c2VzCi0KLSAgICAgICAgYnVpbGRib3QuY29yZV9idWlsZGVy
X25hbWVzX3JlZ2V4cHMgPSBbICdMZW9wYXJkJywgIldpbmRvd3MuKkJ1aWxkIiBdCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGJ1aWxkYm90LnJlZF9jb3JlX2J1aWxkZXJzX25hbWVzKCksIFtd
KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYnVpbGRib3QuY29yZV9idWlsZGVyc19hcmVfZ3Jl
ZW4oKSkKLQotICAgICAgICBidWlsZGJvdC5jb3JlX2J1aWxkZXJfbmFtZXNfcmVnZXhwcyA9IFsg
J1Nub3dMZW9wYXJkJywgJ1F0JyBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1aWxkYm90
LnJlZF9jb3JlX2J1aWxkZXJzX25hbWVzKCksIFsgdSdTbm93TGVvcGFyZCBJbnRlbCBSZWxlYXNl
JywgdSdRdCBMaW51eCBSZWxlYXNlJyBdKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ1aWxk
Ym90LmNvcmVfYnVpbGRlcnNfYXJlX2dyZWVuKCkpCi0KLSAgICBkZWYgdGVzdF9idWlsZGVyX25h
bWVfcmVnZXhwcyhzZWxmKToKLSAgICAgICAgYnVpbGRib3QgPSBCdWlsZEJvdCgpCi0KLSAgICAg
ICAgZXhhbXBsZV9idWlsZGVycyA9IFsKLSAgICAgICAgICAgIHsgJ25hbWUnOiB1J0xlb3BhcmQg
RGVidWcgKEJ1aWxkKScsIH0sCi0gICAgICAgICAgICB7ICduYW1lJzogdSdMZW9wYXJkIERlYnVn
IChUZXN0cyknLCB9LAotICAgICAgICAgICAgeyAnbmFtZSc6IHUnV2luZG93cyBSZWxlYXNlIChC
dWlsZCknLCB9LAotICAgICAgICAgICAgeyAnbmFtZSc6IHUnV2luZG93cyBEZWJ1ZyAoVGVzdHMp
JywgfSwKLSAgICAgICAgICAgIHsgJ25hbWUnOiB1J1F0IExpbnV4IFJlbGVhc2UnLCB9LAotICAg
ICAgICBdCi0gICAgICAgIG5hbWVfcmVnZXhwcyA9IFsgJ0xlb3BhcmQnLCAiV2luZG93cy4qQnVp
bGQiIF0KLSAgICAgICAgZXhwZWN0ZWRfYnVpbGRlcnMgPSBbCi0gICAgICAgICAgICB7ICduYW1l
JzogdSdMZW9wYXJkIERlYnVnIChCdWlsZCknLCB9LAotICAgICAgICAgICAgeyAnbmFtZSc6IHUn
TGVvcGFyZCBEZWJ1ZyAoVGVzdHMpJywgfSwKLSAgICAgICAgICAgIHsgJ25hbWUnOiB1J1dpbmRv
d3MgUmVsZWFzZSAoQnVpbGQpJywgfSwKLSAgICAgICAgXQotCi0gICAgICAgICMgVGhpcyB0ZXN0
IHNob3VsZCBwcm9iYWJseSBiZSB1cGRhdGVkIGlmIHRoZSBkZWZhdWx0IHJlZ2V4cCBsaXN0IGNo
YW5nZXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVpbGRib3QuY29yZV9idWlsZGVyX25h
bWVzX3JlZ2V4cHMsIG5hbWVfcmVnZXhwcykKLQotICAgICAgICBidWlsZGVycyA9IGJ1aWxkYm90
Ll9idWlsZGVyX3N0YXR1c2VzX3dpdGhfbmFtZXNfbWF0Y2hpbmdfcmVnZXhwcyhleGFtcGxlX2J1
aWxkZXJzLCBuYW1lX3JlZ2V4cHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1aWxkZXJz
LCBleHBlY3RlZF9idWlsZGVycykKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1
bml0dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9idWlsZHN0
ZXBzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9idWlsZHN0
ZXBzLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9i
dWlsZHN0ZXBzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0MSArMCwwIEBACi0jIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyAKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgU3RyaW5nSU8KLQotZnJvbSBvcHRwYXJzZSBp
bXBvcnQgbWFrZV9vcHRpb24KLQotZnJvbSBtb2R1bGVzLmNvbW1lbnRzIGltcG9ydCBidWdfY29t
bWVudF9mcm9tX2NvbW1pdF90ZXh0Ci1mcm9tIG1vZHVsZXMuZ3JhbW1hciBpbXBvcnQgcGx1cmFs
aXplCi1mcm9tIG1vZHVsZXMud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZywgZXJyb3IKLWZyb20g
bW9kdWxlcy53ZWJraXRwb3J0IGltcG9ydCBXZWJLaXRQb3J0Ci1mcm9tIG1vZHVsZXMuY2hhbmdl
bG9ncyBpbXBvcnQgQ2hhbmdlTG9nCi0KLSMgRklYTUU6IFdoeSBkbyBzb21lIG9mIHRoZXNlIGhh
dmUgIlN0ZXAiIGluIHRoZWlyIG5hbWUgYnV0IG5vdCBhbGw/Ci1fX2FsbF9fID0gWwotICAgICJB
cHBseVBhdGNoU3RlcCIsCi0gICAgIkFwcGx5UGF0Y2hXaXRoTG9jYWxDb21taXRTdGVwIiwKLSAg
ICAiQnVpbGRTdGVwIiwKLSAgICAiQ2hlY2tTdHlsZVN0ZXAiLAotICAgICJDbGVhbldvcmtpbmdE
aXJlY3RvcnlTdGVwIiwKLSAgICAiQ2xlYW5Xb3JraW5nRGlyZWN0b3J5V2l0aExvY2FsQ29tbWl0
c1N0ZXAiLAotICAgICJDbG9zZUJ1Z0ZvckxhbmREaWZmU3RlcCIsCi0gICAgIkNsb3NlQnVnU3Rl
cCIsCi0gICAgIkNsb3NlUGF0Y2hTdGVwIiwKLSAgICAiQ29tbWl0U3RlcCIsCi0gICAgIkNvbXBs
ZXRlUm9sbG91dCIsCi0gICAgIkNyZWF0ZUJ1Z1N0ZXAiLAotICAgICJFbnN1cmVCdWlsZGVyc0Fy
ZUdyZWVuU3RlcCIsCi0gICAgIkVuc3VyZUxvY2FsQ29tbWl0SWZOZWVkZWQiLAotICAgICJPYnNv
bGV0ZVBhdGNoZXNPbkJ1Z1N0ZXAiLAotICAgICJQb3N0RGlmZlRvQnVnU3RlcCIsCi0gICAgIlBy
ZXBhcmVDaGFuZ2VMb2dGb3JSZXZlcnRTdGVwIiwKLSAgICAiUHJlcGFyZUNoYW5nZUxvZ1N0ZXAi
LAotICAgICJQcm9tcHRGb3JCdWdPclRpdGxlU3RlcCIsCi0gICAgIlJldmVydFJldmlzaW9uU3Rl
cCIsCi0gICAgIlJ1blRlc3RzU3RlcCIsCi0gICAgIlVwZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3
ZXJTdGVwIiwKLSAgICAiVXBkYXRlU3RlcCIsCi1dCi0KLWNsYXNzIENvbW1hbmRPcHRpb25zKG9i
amVjdCk6Ci0gICAgZm9yY2VfY2xlYW4gPSBtYWtlX29wdGlvbigiLS1mb3JjZS1jbGVhbiIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImZvcmNlX2NsZWFuIiwgZGVmYXVsdD1GYWxzZSwgaGVs
cD0iQ2xlYW4gd29ya2luZyBkaXJlY3RvcnkgYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXMgKHJlbW92
ZXMgbG9jYWwgY2hhbmdlcyBhbmQgY29tbWl0cykiKQotICAgIGNsZWFuID0gbWFrZV9vcHRpb24o
Ii0tbm8tY2xlYW4iLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2xlYW4iLCBkZWZhdWx0
PVRydWUsIGhlbHA9IkRvbid0IGNoZWNrIGlmIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVh
biBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlcyIpCi0gICAgY2hlY2tfYnVpbGRlcnMgPSBtYWtlX29w
dGlvbigiLS1pZ25vcmUtYnVpbGRlcnMiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2hl
Y2tfYnVpbGRlcnMiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvbid0IGNoZWNrIHRvIHNlZSBpZiB0
aGUgYnVpbGQud2Via2l0Lm9yZyBidWlsZGVycyBhcmUgZ3JlZW4gYmVmb3JlIGxhbmRpbmcuIikK
LSAgICBxdWlldCA9IG1ha2Vfb3B0aW9uKCItLXF1aWV0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwg
ZGVzdD0icXVpZXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJQcm9kdWNlIGxlc3MgY29uc29sZSBv
dXRwdXQuIikKLSAgICBub25faW50ZXJhY3RpdmUgPSBtYWtlX29wdGlvbigiLS1ub24taW50ZXJh
Y3RpdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJub25faW50ZXJhY3RpdmUiLCBkZWZh
dWx0PUZhbHNlLCBoZWxwPSJOZXZlciBwcm9tcHQgdGhlIHVzZXIsIGZhaWwgYXMgZmFzdCBhcyBw
b3NzaWJsZS4iKQotICAgIHBhcmVudF9jb21tYW5kID0gbWFrZV9vcHRpb24oIi0tcGFyZW50LWNv
bW1hbmQiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0icGFyZW50X2NvbW1hbmQiLCBkZWZhdWx0PU5v
bmUsIGhlbHA9IihJbnRlcm5hbCkgVGhlIGNvbW1hbmQgdGhhdCBzcGF3bmVkIHRoaXMgaW5zdGFu
Y2UuIikKLSAgICB1cGRhdGUgPSBtYWtlX29wdGlvbigiLS1uby11cGRhdGUiLCBhY3Rpb249InN0
b3JlX2ZhbHNlIiwgZGVzdD0idXBkYXRlIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJEb24ndCB1cGRh
dGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIpCi0gICAgbG9jYWxfY29tbWl0ID0gbWFrZV9vcHRp
b24oIi0tbG9jYWwtY29tbWl0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibG9jYWxfY29t
bWl0IiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iTWFrZSBhIGxvY2FsIGNvbW1pdCBmb3IgZWFjaCBh
cHBsaWVkIHBhdGNoIikKLSAgICBidWlsZCA9IG1ha2Vfb3B0aW9uKCItLW5vLWJ1aWxkIiwgYWN0
aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9ImJ1aWxkIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJDb21t
aXQgd2l0aG91dCBidWlsZGluZyBmaXJzdCwgaW1wbGllcyAtLW5vLXRlc3QuIikKLSAgICBidWls
ZF9zdHlsZSA9IG1ha2Vfb3B0aW9uKCItLWJ1aWxkLXN0eWxlIiwgYWN0aW9uPSJzdG9yZSIsIGRl
c3Q9ImJ1aWxkX3N0eWxlIiwgZGVmYXVsdD1Ob25lLCBoZWxwPSJXaGV0aGVyIHRvIGJ1aWxkIGRl
YnVnLCByZWxlYXNlLCBvciBib3RoLiIpCi0gICAgdGVzdCA9IG1ha2Vfb3B0aW9uKCItLW5vLXRl
c3QiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0idGVzdCIsIGRlZmF1bHQ9VHJ1ZSwgaGVs
cD0iQ29tbWl0IHdpdGhvdXQgcnVubmluZyBydW4td2Via2l0LXRlc3RzLiIpCi0gICAgY2xvc2Vf
YnVnID0gbWFrZV9vcHRpb24oIi0tbm8tY2xvc2UiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVz
dD0iY2xvc2VfYnVnIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJMZWF2ZSBidWcgb3BlbiBhZnRlciBs
YW5kaW5nLiIpCi0gICAgcG9ydCA9IG1ha2Vfb3B0aW9uKCItLXBvcnQiLCBhY3Rpb249InN0b3Jl
IiwgZGVzdD0icG9ydCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0iU3BlY2lmeSBhIHBvcnQgKGUuZy4s
IG1hYywgcXQsIGd0aywgLi4uKS4iKQotICAgIHJldmlld2VyID0gbWFrZV9vcHRpb24oIi1yIiwg
Ii0tcmV2aWV3ZXIiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0icmV2aWV3
ZXIiLCBoZWxwPSJVcGRhdGUgQ2hhbmdlTG9ncyB0byBzYXkgUmV2aWV3ZWQgYnkgUkVWSUVXRVIu
IikKLSAgICBjb21wbGV0ZV9yb2xsb3V0ID0gbWFrZV9vcHRpb24oIi0tY29tcGxldGUtcm9sbG91
dCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImNvbXBsZXRlX3JvbGxvdXQiLCBoZWxwPSJD
b21taXQgdGhlIHJldmVydCBhbmQgcmUtb3BlbiB0aGUgb3JpZ2luYWwgYnVnLiIpCi0gICAgb2Jz
b2xldGVfcGF0Y2hlcyA9IG1ha2Vfb3B0aW9uKCItLW5vLW9ic29sZXRlIiwgYWN0aW9uPSJzdG9y
ZV9mYWxzZSIsIGRlc3Q9Im9ic29sZXRlX3BhdGNoZXMiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRv
IG5vdCBvYnNvbGV0ZSBvbGQgcGF0Y2hlcyBiZWZvcmUgcG9zdGluZyB0aGlzIG9uZS4iKQotICAg
IHJldmlldyA9IG1ha2Vfb3B0aW9uKCItLW5vLXJldmlldyIsIGFjdGlvbj0ic3RvcmVfZmFsc2Ui
LCBkZXN0PSJyZXZpZXciLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBtYXJrIHRoZSBwYXRj
aCBmb3IgcmV2aWV3LiIpCi0gICAgcmVxdWVzdF9jb21taXQgPSBtYWtlX29wdGlvbigiLS1yZXF1
ZXN0LWNvbW1pdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcXVlc3RfY29tbWl0Iiwg
ZGVmYXVsdD1GYWxzZSwgaGVscD0iTWFyayB0aGUgcGF0Y2ggYXMgbmVlZGluZyBhdXRvLWNvbW1p
dCBhZnRlciByZXZpZXcuIikKLSAgICBkZXNjcmlwdGlvbiA9IG1ha2Vfb3B0aW9uKCItbSIsICIt
LWRlc2NyaXB0aW9uIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImRlc2Ny
aXB0aW9uIiwgaGVscD0iRGVzY3JpcHRpb24gc3RyaW5nIGZvciB0aGUgYXR0YWNobWVudCAoZGVm
YXVsdDogXCJwYXRjaFwiKSIpCi0gICAgY2MgPSBtYWtlX29wdGlvbigiLS1jYyIsIGFjdGlvbj0i
c3RvcmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0PSJjYyIsIGhlbHA9IkNvbW1hLXNlcGFyYXRlZCBs
aXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byBjYXJib24tY29weS4iKQotICAgIGNvbXBvbmVudCA9
IG1ha2Vfb3B0aW9uKCItLWNvbXBvbmVudCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJzdHJpbmci
LCBkZXN0PSJjb21wb25lbnQiLCBoZWxwPSJDb21wb25lbnQgZm9yIHRoZSBuZXcgYnVnLiIpCi0g
ICAgY29uZmlybSA9IG1ha2Vfb3B0aW9uKCItLW5vLWNvbmZpcm0iLCBhY3Rpb249InN0b3JlX2Zh
bHNlIiwgZGVzdD0iY29uZmlybSIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iU2tpcCBjb25maXJtYXRp
b24gc3RlcHMuIikKLQotCi1jbGFzcyBBYnN0cmFjdFN0ZXAob2JqZWN0KToKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgdG9vbCwgb3B0aW9ucyk6Ci0gICAgICAgIHNlbGYuX3Rvb2wgPSB0b29sCi0g
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX3BvcnQgPSBOb25l
Ci0KLSAgICBkZWYgX3J1bl9zY3JpcHQoc2VsZiwgc2NyaXB0X25hbWUsIHF1aWV0PUZhbHNlLCBw
b3J0PVdlYktpdFBvcnQpOgotICAgICAgICBsb2coIlJ1bm5pbmcgJXMiICUgc2NyaXB0X25hbWUp
Ci0gICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzZWxmLnBvcnQoKQotICAgICAgICBz
ZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwocG9ydC5zY3JpcHRfcGF0
aChzY3JpcHRfbmFtZSksIHF1aWV0KQotCi0gICAgIyBGSVhNRTogVGhlIHBvcnQgc2hvdWxkIGxp
dmUgb24gdGhlIHRvb2wuCi0gICAgZGVmIHBvcnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Bv
cnQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9ydAotICAgICAgICBzZWxmLl9wb3J0ID0g
V2ViS2l0UG9ydC5wb3J0KHNlbGYuX29wdGlvbnMucG9ydCkKLSAgICAgICAgcmV0dXJuIHNlbGYu
X3BvcnQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAg
IHJldHVybiBbXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IgotCi0KLSMgRklY
TUU6IFVuaWZ5IHdpdGggU3RlcFNlcXVlbmNlPyAgSSdtIG5vdCBzdXJlIHlldCB3aGljaCBpcyB0
aGUgYmV0dGVyIGRlc2lnbi4KLWNsYXNzIE1ldGFTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgc3Vi
c3RlcHMgPSBbXSAjIE92ZXJyaWRlIGluIHN1YmNsYXNzZXMKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdG9vbCwgb3B0aW9ucyk6Ci0gICAgICAgIEFic3RyYWN0U3RlcC5fX2luaXRfXyhzZWxmLCB0
b29sLCBvcHRpb25zKQotICAgICAgICBzZWxmLl9zdGVwX2luc3RhbmNlcyA9IFtdCi0gICAgICAg
IGZvciBzdGVwX2NsYXNzIGluIHNlbGYuc3Vic3RlcHM6Ci0gICAgICAgICAgICBzZWxmLl9zdGVw
X2luc3RhbmNlcy5hcHBlbmQoc3RlcF9jbGFzcyh0b29sLCBvcHRpb25zKSkKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgX2NvbGxlY3Rfb3B0aW9uc19mcm9tX3N0ZXBzKHN0ZXBzKToKLSAg
ICAgICAgY29sbGVjdGVkX29wdGlvbnMgPSBbXQotICAgICAgICBmb3Igc3RlcCBpbiBzdGVwczoK
LSAgICAgICAgICAgIGNvbGxlY3RlZF9vcHRpb25zID0gY29sbGVjdGVkX29wdGlvbnMgKyBzdGVw
Lm9wdGlvbnMoKQotICAgICAgICByZXR1cm4gY29sbGVjdGVkX29wdGlvbnMKLQotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBjbHMuX2NvbGxl
Y3Rfb3B0aW9uc19mcm9tX3N0ZXBzKGNscy5zdWJzdGVwcykKLQotICAgIGRlZiBydW4oc2VsZiwg
c3RhdGUpOgotICAgICAgICBmb3Igc3RlcCBpbiBzZWxmLl9zdGVwX2luc3RhbmNlczoKLSAgICAg
ICAgICAgICBzdGVwLnJ1bihzdGF0ZSkKLQotCi1jbGFzcyBQcm9tcHRGb3JCdWdPclRpdGxlU3Rl
cChBYnN0cmFjdFN0ZXApOgotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICAjIE5v
IG5lZWQgdG8gcHJvbXB0IGlmIHdlIGFscmFkeSBoYXZlIHRoZSBidWdfaWQuCi0gICAgICAgIGlm
IHN0YXRlLmdldCgiYnVnX2lkIik6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgdXNlcl9y
ZXNwb25zZSA9IHNlbGYuX3Rvb2wudXNlci5wcm9tcHQoIlBsZWFzZSBlbnRlciBhIGJ1ZyBudW1i
ZXIgb3IgYSB0aXRsZSBmb3IgYSBuZXcgYnVnOlxuIikKLSAgICAgICAgIyBJZiB0aGUgdXNlciBy
ZXNwb25kcyB3aXRoIGEgbnVtYmVyLCB3ZSBhc3N1bWUgaXQncyBidWcgbnVtYmVyLgotICAgICAg
ICAjIE90aGVyd2lzZSB3ZSBhc3N1bWUgaXQncyBhIGJ1ZyBzdWJqZWN0LgotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBzdGF0ZVsiYnVnX2lkIl0gPSBpbnQodXNlcl9yZXNwb25zZSkKLSAgICAg
ICAgZXhjZXB0IFZhbHVlRXJyb3IsIFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHN0YXRlWyJidWdf
dGl0bGUiXSA9IHVzZXJfcmVzcG9uc2UKLSAgICAgICAgICAgICMgRklYTUU6IFRoaXMgaXMga2lu
ZCBvZiBhIGxhbWUgZGVzY3JpcHRpb24uCi0gICAgICAgICAgICBzdGF0ZVsiYnVnX2Rlc2NyaXB0
aW9uIl0gPSB1c2VyX3Jlc3BvbnNlCi0KLQotY2xhc3MgQ3JlYXRlQnVnU3RlcChBYnN0cmFjdFN0
ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAgIHJl
dHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5jYywKLSAgICAgICAgICAgIENvbW1h
bmRPcHRpb25zLmNvbXBvbmVudCwKLSAgICAgICAgXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0
ZSk6Ci0gICAgICAgICMgTm8gbmVlZCB0byBjcmVhdGUgYSBidWcgaWYgd2UgYWxyZWFkeSBoYXZl
IG9uZS4KLSAgICAgICAgaWYgc3RhdGUuZ2V0KCJidWdfaWQiKToKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBzdGF0ZVsiYnVnX2lkIl0gPSBzZWxmLl90b29sLmJ1Z3MuY3JlYXRlX2J1Zyhz
dGF0ZVsiYnVnX3RpdGxlIl0sIHN0YXRlWyJidWdfZGVzY3JpcHRpb24iXSwgY29tcG9uZW50PXNl
bGYuX29wdGlvbnMuY29tcG9uZW50LCBjYz1zZWxmLl9vcHRpb25zLmNjKQotCi0KLWNsYXNzIFBy
ZXBhcmVDaGFuZ2VMb2dTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAg
ZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIENvbW1hbmRP
cHRpb25zLnBvcnQsCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5xdWlldCwKLSAgICAgICAg
XQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rv
b2wuc2NtKCkuY2hlY2tvdXRfcm9vdCkKLSAgICAgICAgYXJncyA9IFtzZWxmLnBvcnQoKS5zY3Jp
cHRfcGF0aCgicHJlcGFyZS1DaGFuZ2VMb2ciKV0KLSAgICAgICAgaWYgc3RhdGVbImJ1Z19pZCJd
OgotICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tYnVnPSVzIiAlIHN0YXRlWyJidWdfaWQiXSkK
LSAgICAgICAgc2VsZi5fdG9vbC5leGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9mYWlsKGFyZ3Ms
IHNlbGYuX29wdGlvbnMucXVpZXQpCi0KLQotY2xhc3MgRWRpdENoYW5nZUxvZ1N0ZXAoQWJzdHJh
Y3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgc2VsZi5fdG9vbC51
c2VyLmVkaXQoc2VsZi5fdG9vbC5zY20oKS5tb2RpZmllZF9jaGFuZ2Vsb2dzKCkpCi0KLQotY2xh
c3MgT2Jzb2xldGVQYXRjaGVzT25CdWdTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgQGNsYXNzbWV0
aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAg
IENvbW1hbmRPcHRpb25zLm9ic29sZXRlX3BhdGNoZXMsCi0gICAgICAgIF0KLQotICAgIGRlZiBy
dW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5vYnNvbGV0ZV9w
YXRjaGVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGJ1Z19pZCA9IHN0YXRlWyJidWdf
aWQiXQotICAgICAgICBwYXRjaGVzID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX3BhdGNoZXNfZnJv
bV9idWcoYnVnX2lkKQotICAgICAgICBpZiBub3QgcGF0Y2hlczoKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBsb2coIk9ic29sZXRpbmcgJXMgb24gYnVnICVzIiAlIChwbHVyYWxpemUoIm9s
ZCBwYXRjaCIsIGxlbihwYXRjaGVzKSksIGJ1Z19pZCkpCi0gICAgICAgIGZvciBwYXRjaCBpbiBw
YXRjaGVzOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdzLm9ic29sZXRlX2F0dGFjaG1lbnQo
cGF0Y2hbImlkIl0pCi0KLQotY2xhc3MgQWJzdHJhY3REaWZmU3RlcChBYnN0cmFjdFN0ZXApOgot
ICAgIGRlZiBkaWZmKHNlbGYsIHN0YXRlKToKLSAgICAgICAgZGlmZiA9IHN0YXRlLmdldCgiZGlm
ZiIpCi0gICAgICAgIGlmIG5vdCBkaWZmOgotICAgICAgICAgICAgZGlmZiA9IHNlbGYuX3Rvb2wu
c2NtKCkuY3JlYXRlX3BhdGNoKCkKLSAgICAgICAgICAgIHN0YXRlWyJkaWZmIl0gPSBkaWZmCi0g
ICAgICAgIHJldHVybiBkaWZmCi0KLQotY2xhc3MgQ29uZmlybURpZmZTdGVwKEFic3RyYWN0RGlm
ZlN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAg
IHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5jb25maXJtLAotICAgICAgICBd
Ci0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlv
bnMuY29uZmlybToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkaWZmID0gc2VsZi5kaWZm
KHN0YXRlKQotICAgICAgICBzZWxmLl90b29sLnVzZXIucGFnZShkaWZmKQotICAgICAgICBpZiBu
b3Qgc2VsZi5fdG9vbC51c2VyLmNvbmZpcm0oKToKLSAgICAgICAgICAgIGVycm9yKCJVc2VyIGRl
Y2xpbmVkIHRvIGNvbnRpbnVlLiIpCi0KLQotY2xhc3MgUG9zdERpZmZUb0J1Z1N0ZXAoQWJzdHJh
Y3REaWZmU3RlcCk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAg
ICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLmRlc2NyaXB0aW9uLAot
ICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMucmV2aWV3LAotICAgICAgICAgICAgQ29tbWFuZE9w
dGlvbnMucmVxdWVzdF9jb21taXQsCi0gICAgICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3Rh
dGUpOgotICAgICAgICBkaWZmID0gc2VsZi5kaWZmKHN0YXRlKQotICAgICAgICBkaWZmX2ZpbGUg
PSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGFkZF9wYXRjaF90b19idWcgZXhwZWN0cyBhIGZp
bGUtbGlrZSBvYmplY3QKLSAgICAgICAgZGVzY3JpcHRpb24gPSBzZWxmLl9vcHRpb25zLmRlc2Ny
aXB0aW9uIG9yICJQYXRjaCIKLSAgICAgICAgc2VsZi5fdG9vbC5idWdzLmFkZF9wYXRjaF90b19i
dWcoc3RhdGVbImJ1Z19pZCJdLCBkaWZmX2ZpbGUsIGRlc2NyaXB0aW9uLCBtYXJrX2Zvcl9yZXZp
ZXc9c2VsZi5fb3B0aW9ucy5yZXZpZXcsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1zZWxmLl9vcHRp
b25zLnJlcXVlc3RfY29tbWl0KQotCi0KLWNsYXNzIFByZXBhcmVDaGFuZ2VMb2dGb3JSZXZlcnRT
dGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgICMg
Rmlyc3QsIGRpc2NhcmQgdGhlIENoYW5nZUxvZyBjaGFuZ2VzIGZyb20gdGhlIHJvbGxvdXQuCi0g
ICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9vdCkKLSAgICAgICAg
Y2hhbmdlbG9nX3BhdGhzID0gc2VsZi5fdG9vbC5zY20oKS5tb2RpZmllZF9jaGFuZ2Vsb2dzKCkK
LSAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5yZXZlcnRfZmlsZXMoY2hhbmdlbG9nX3BhdGhzKQot
Ci0gICAgICAgICMgU2Vjb25kLCBtYWtlIG5ldyBDaGFuZ2VMb2cgZW50cmllcyBmb3IgdGhpcyBy
b2xsb3V0LgotICAgICAgICAjIFRoaXMgY291bGQgbW92ZSB0byBwcmVwYXJlLUNoYW5nZUxvZyBi
eSBhZGRpbmcgYSAtLXJldmVydD0gb3B0aW9uLgotICAgICAgICBzZWxmLl9ydW5fc2NyaXB0KCJw
cmVwYXJlLUNoYW5nZUxvZyIpCi0gICAgICAgIGZvciBjaGFuZ2Vsb2dfcGF0aCBpbiBjaGFuZ2Vs
b2dfcGF0aHM6Ci0gICAgICAgICAgICBDaGFuZ2VMb2coY2hhbmdlbG9nX3BhdGgpLnVwZGF0ZV9m
b3JfcmV2ZXJ0KHN0YXRlWyJyZXZpc2lvbiJdKQotCi0KLWNsYXNzIENsZWFuV29ya2luZ0RpcmVj
dG9yeVN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdG9vbCwgb3B0
aW9ucywgYWxsb3dfbG9jYWxfY29tbWl0cz1GYWxzZSk6Ci0gICAgICAgIEFic3RyYWN0U3RlcC5f
X2luaXRfXyhzZWxmLCB0b29sLCBvcHRpb25zKQotICAgICAgICBzZWxmLl9hbGxvd19sb2NhbF9j
b21taXRzID0gYWxsb3dfbG9jYWxfY29tbWl0cwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVm
IG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIENvbW1hbmRPcHRp
b25zLmZvcmNlX2NsZWFuLAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2xlYW4sCi0gICAg
ICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBvcy5jaGRpcihzZWxm
Ll90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9hbGxvd19s
b2NhbF9jb21taXRzOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5lbnN1cmVfbm9fbG9j
YWxfY29tbWl0cyhzZWxmLl9vcHRpb25zLmZvcmNlX2NsZWFuKQotICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLmNsZWFuOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5lbnN1cmVfY2xlYW5f
d29ya2luZ19kaXJlY3RvcnkoZm9yY2VfY2xlYW49c2VsZi5fb3B0aW9ucy5mb3JjZV9jbGVhbikK
LQotCi1jbGFzcyBDbGVhbldvcmtpbmdEaXJlY3RvcnlXaXRoTG9jYWxDb21taXRzU3RlcChDbGVh
bldvcmtpbmdEaXJlY3RvcnlTdGVwKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdG9vbCwgb3B0
aW9ucyk6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgYSBiaXQgb2YgYSBoYWNrLiAgQ29uc2lkZXIg
ZG9pbmcgdGhpcyBtb3JlIGNsZWFubHkuCi0gICAgICAgIENsZWFuV29ya2luZ0RpcmVjdG9yeVN0
ZXAuX19pbml0X18oc2VsZiwgdG9vbCwgb3B0aW9ucywgYWxsb3dfbG9jYWxfY29tbWl0cz1UcnVl
KQotCi0KLWNsYXNzIFVwZGF0ZVN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QK
LSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29t
bWFuZE9wdGlvbnMudXBkYXRlLAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMucG9ydCwKLSAg
ICAgICAgXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxm
Ll9vcHRpb25zLnVwZGF0ZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBsb2coIlVwZGF0
aW5nIHdvcmtpbmcgZGlyZWN0b3J5IikKLSAgICAgICAgc2VsZi5fdG9vbC5leGVjdXRpdmUucnVu
X2FuZF90aHJvd19pZl9mYWlsKHNlbGYucG9ydCgpLnVwZGF0ZV93ZWJraXRfY29tbWFuZCgpLCBx
dWlldD1UcnVlKQotCi0KLWNsYXNzIEFwcGx5UGF0Y2hTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAg
QGNsYXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAg
ICAgICAgICAgIENvbW1hbmRPcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSwKLSAgICAgICAgXQotCi0g
ICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGxvZygiUHJvY2Vzc2luZyBwYXRjaCAl
cyBmcm9tIGJ1ZyAlcy4iICUgKHN0YXRlWyJwYXRjaCJdWyJpZCJdLCBzdGF0ZVsicGF0Y2giXVsi
YnVnX2lkIl0pKQotICAgICAgICBzZWxmLl90b29sLnNjbSgpLmFwcGx5X3BhdGNoKHN0YXRlWyJw
YXRjaCJdLCBmb3JjZT1zZWxmLl9vcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSkKLQotCi1jbGFzcyBS
ZXZlcnRSZXZpc2lvblN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRl
KToKLSAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5hcHBseV9yZXZlcnNlX2RpZmYoc3RhdGVbInJl
dmlzaW9uIl0pCi0KLQotY2xhc3MgQXBwbHlQYXRjaFdpdGhMb2NhbENvbW1pdFN0ZXAoQXBwbHlQ
YXRjaFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAg
ICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5sb2NhbF9jb21taXQsCi0g
ICAgICAgIF0gKyBBcHBseVBhdGNoU3RlcC5vcHRpb25zKCkKLSAgICAKLSAgICBkZWYgcnVuKHNl
bGYsIHN0YXRlKToKLSAgICAgICAgQXBwbHlQYXRjaFN0ZXAucnVuKHNlbGYsIHN0YXRlKQotICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLmxvY2FsX2NvbW1pdDoKLSAgICAgICAgICAgIGNvbW1pdF9t
ZXNzYWdlID0gc2VsZi5fdG9vbC5zY20oKS5jb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQo
KQotICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5jb21taXRfbG9jYWxseV93aXRoX21lc3Nh
Z2UoY29tbWl0X21lc3NhZ2UubWVzc2FnZSgpIG9yIHN0YXRlWyJwYXRjaCJdWyJuYW1lIl0pCi0K
LQotY2xhc3MgRW5zdXJlQnVpbGRlcnNBcmVHcmVlblN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBA
Y2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4gWwotICAg
ICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2hlY2tfYnVpbGRlcnMsCi0gICAgICAgIF0KLQotICAg
IGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5jaGVj
a19idWlsZGVyczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICByZWRfYnVpbGRlcnNfbmFt
ZXMgPSBzZWxmLl90b29sLmJ1aWxkYm90LnJlZF9jb3JlX2J1aWxkZXJzX25hbWVzKCkKLSAgICAg
ICAgaWYgbm90IHJlZF9idWlsZGVyc19uYW1lczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAg
ICByZWRfYnVpbGRlcnNfbmFtZXMgPSBtYXAobGFtYmRhIG5hbWU6ICJcIiVzXCIiICUgbmFtZSwg
cmVkX2J1aWxkZXJzX25hbWVzKSAjIEFkZCBxdW90ZXMgYXJvdW5kIHRoZSBuYW1lcy4KLSAgICAg
ICAgZXJyb3IoIkJ1aWxkZXJzIFslc10gYXJlIHJlZCwgcGxlYXNlIGRvIG5vdCBjb21taXQuXG5T
ZWUgaHR0cDovLyVzLlxuUGFzcyAtLWlnbm9yZS1idWlsZGVycyB0byBieXBhc3MgdGhpcyBjaGVj
ay4iICUgKCIsICIuam9pbihyZWRfYnVpbGRlcnNfbmFtZXMpLCBzZWxmLl90b29sLmJ1aWxkYm90
LmJ1aWxkYm90X2hvc3QpKQotCi0KLWNsYXNzIEVuc3VyZUxvY2FsQ29tbWl0SWZOZWVkZWQoQWJz
dHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAg
ICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMubG9jYWxfY29tbWl0LAot
ICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5sb2NhbF9jb21taXQgYW5kIG5vdCBzZWxmLl90b29sLnNjbSgpLnN1cHBvcnRzX2xv
Y2FsX2NvbW1pdHMoKToKLSAgICAgICAgICAgIGVycm9yKCItLWxvY2FsLWNvbW1pdCBwYXNzZWQs
IGJ1dCAlcyBkb2VzIG5vdCBzdXBwb3J0IGxvY2FsIGNvbW1pdHMiICUgc2VsZi5fdG9vbC5zY20u
ZGlzcGxheV9uYW1lKCkpCi0KLQotY2xhc3MgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlclN0
ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMp
OgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMucmV2aWV3ZXIs
Ci0gICAgICAgIF0KLQotICAgIGRlZiBfZ3Vlc3NfcmV2aWV3ZXJfZnJvbV9idWcoc2VsZiwgYnVn
X2lkKToKLSAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9yZXZpZXdlZF9w
YXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkKLSAgICAgICAgaWYgbGVuKHBhdGNoZXMpICE9IDE6Ci0g
ICAgICAgICAgICBsb2coIiVzIG9uIGJ1ZyAlcywgY2Fubm90IGluZmVyIHJldmlld2VyLiIgJSAo
cGx1cmFsaXplKCJyZXZpZXdlZCBwYXRjaCIsIGxlbihwYXRjaGVzKSksIGJ1Z19pZCkpCi0gICAg
ICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBwYXRjaCA9IHBhdGNoZXNbMF0KLSAgICAgICAg
cmV2aWV3ZXIgPSBwYXRjaFsicmV2aWV3ZXIiXQotICAgICAgICBsb2coIkd1ZXNzaW5nIFwiJXNc
IiBhcyByZXZpZXdlciBmcm9tIGF0dGFjaG1lbnQgJXMgb24gYnVnICVzLiIgJSAocmV2aWV3ZXIs
IHBhdGNoWyJpZCJdLCBidWdfaWQpKQotICAgICAgICByZXR1cm4gcmV2aWV3ZXIKLQotICAgIGRl
ZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBidWdfaWQgPSBzdGF0ZVsicGF0Y2giXVsiYnVn
X2lkIl0KLSAgICAgICAgcmV2aWV3ZXIgPSBzZWxmLl9vcHRpb25zLnJldmlld2VyCi0gICAgICAg
IGlmIG5vdCByZXZpZXdlcjoKLSAgICAgICAgICAgIGlmIG5vdCBidWdfaWQ6Ci0gICAgICAgICAg
ICAgICAgbG9nKCJObyBidWcgaWQgcHJvdmlkZWQgYW5kIC0tcmV2aWV3ZXI9IG5vdCBwcm92aWRl
ZC4gIE5vdCB1cGRhdGluZyBDaGFuZ2VMb2dzIHdpdGggcmV2aWV3ZXIuIikKLSAgICAgICAgICAg
ICAgICByZXR1cm4KLSAgICAgICAgICAgIHJldmlld2VyID0gc2VsZi5fZ3Vlc3NfcmV2aWV3ZXJf
ZnJvbV9idWcoYnVnX2lkKQotCi0gICAgICAgIGlmIG5vdCByZXZpZXdlcjoKLSAgICAgICAgICAg
IGxvZygiRmFpbGVkIHRvIGd1ZXNzIHJldmlld2VyIGZyb20gYnVnICVzIGFuZCAtLXJldmlld2Vy
PSBub3QgcHJvdmlkZWQuICBOb3QgdXBkYXRpbmcgQ2hhbmdlTG9ncyB3aXRoIHJldmlld2VyLiIg
JSBidWdfaWQpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBvcy5jaGRpcihzZWxmLl90
b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGZvciBjaGFuZ2Vsb2dfcGF0aCBpbiBz
ZWxmLl90b29sLnNjbSgpLm1vZGlmaWVkX2NoYW5nZWxvZ3MoKToKLSAgICAgICAgICAgIENoYW5n
ZUxvZyhjaGFuZ2Vsb2dfcGF0aCkuc2V0X3Jldmlld2VyKHJldmlld2VyKQotCi0KLWNsYXNzIEJ1
aWxkU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25z
KGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5idWls
ZCwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLnF1aWV0LAotICAgICAgICAgICAgQ29tbWFu
ZE9wdGlvbnMuYnVpbGRfc3R5bGUsCi0gICAgICAgIF0KLQotICAgIGRlZiBidWlsZChzZWxmLCBi
dWlsZF9zdHlsZSk6Ci0gICAgICAgIHNlbGYuX3Rvb2wuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3df
aWZfZmFpbChzZWxmLnBvcnQoKS5idWlsZF93ZWJraXRfY29tbWFuZChidWlsZF9zdHlsZT1idWls
ZF9zdHlsZSksIHNlbGYuX29wdGlvbnMucXVpZXQpCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRl
KToKLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuYnVpbGQ6Ci0gICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgbG9nKCJCdWlsZGluZyBXZWJLaXQiKQotICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLmJ1aWxkX3N0eWxlID09ICJib3RoIjoKLSAgICAgICAgICAgIHNlbGYuYnVpbGQoImRlYnVn
IikKLSAgICAgICAgICAgIHNlbGYuYnVpbGQoInJlbGVhc2UiKQotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgc2VsZi5idWlsZChzZWxmLl9vcHRpb25zLmJ1aWxkX3N0eWxlKQotCi0KLWNsYXNz
IENoZWNrU3R5bGVTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6
Ci0gICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImNoZWNrLXdlYmtpdC1zdHlsZSIpCi0KLQotY2xh
c3MgUnVuVGVzdHNTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVm
IG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIENvbW1hbmRPcHRp
b25zLmJ1aWxkLAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMudGVzdCwKLSAgICAgICAgICAg
IENvbW1hbmRPcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSwKLSAgICAgICAgICAgIENvbW1hbmRPcHRp
b25zLnF1aWV0LAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMucG9ydCwKLSAgICAgICAgXQot
Ci0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25z
LmJ1aWxkOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25z
LnRlc3Q6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgYXJncyA9IHNlbGYucG9ydCgpLnJ1
bl93ZWJraXRfdGVzdHNfY29tbWFuZCgpCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMubm9uX2lu
dGVyYWN0aXZlOgotICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tbm8tbGF1bmNoLXNhZmFyaSIp
Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1leGl0LWFmdGVyLW4tZmFpbHVyZXM9MSIpCi0g
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCgi
LS1xdWlldCIpCi0gICAgICAgIHNlbGYuX3Rvb2wuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZf
ZmFpbChhcmdzKQotCi0KLWNsYXNzIENvbW1pdFN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYg
cnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgY29tbWl0X21lc3NhZ2UgPSBzZWxmLl90b29sLnNj
bSgpLmNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdCgpCi0gICAgICAgIHN0YXRlWyJjb21t
aXRfdGV4dCJdID0gIHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X3dpdGhfbWVzc2FnZShjb21taXRf
bWVzc2FnZS5tZXNzYWdlKCkpCi0KLQotY2xhc3MgQ2xvc2VQYXRjaFN0ZXAoQWJzdHJhY3RTdGVw
KToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgY29tbWVudF90ZXh0ID0gYnVn
X2NvbW1lbnRfZnJvbV9jb21taXRfdGV4dChzZWxmLl90b29sLnNjbSgpLCBzdGF0ZVsiY29tbWl0
X3RleHQiXSkKLSAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsZWFyX2F0dGFjaG1lbnRfZmxhZ3Mo
c3RhdGVbInBhdGNoIl1bImlkIl0sIGNvbW1lbnRfdGV4dCkKLQotCi1jbGFzcyBDbG9zZUJ1Z1N0
ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMp
OgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2xvc2VfYnVn
LAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgaWYgbm90
IHNlbGYuX29wdGlvbnMuY2xvc2VfYnVnOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMg
Q2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyByPyBvciByKyBwYXRjaGVzIG9uIHRoZSBi
dWcgYmVmb3JlIGNsb3NpbmcuCi0gICAgICAgICMgQXNzdW1lIHRoYXQgci0gcGF0Y2hlcyBhcmUg
anVzdCBwcmV2aW91cyBwYXRjaGVzIHNvbWVvbmUgZm9yZ290IHRvIG9ic29sZXRlLgotICAgICAg
ICBwYXRjaGVzID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX3BhdGNoZXNfZnJvbV9idWcoc3RhdGVb
InBhdGNoIl1bImJ1Z19pZCJdKQotICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKLSAgICAg
ICAgICAgIHJldmlld19mbGFnID0gcGF0Y2guZ2V0KCJyZXZpZXciKQotICAgICAgICAgICAgaWYg
cmV2aWV3X2ZsYWcgPT0gIj8iIG9yIHJldmlld19mbGFnID09ICIrIjoKLSAgICAgICAgICAgICAg
ICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRhY2htZW50ICVzIGhhcyByZXZpZXc9JXMu
ICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVzIHRvIGxhbmQgZnJvbSB0aGlzIGJ1Zy4i
ICUgKHBhdGNoWyJidWdfaWQiXSwgcGF0Y2hbImlkIl0sIHJldmlld19mbGFnKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3NlX2J1Z19hc19maXhl
ZChzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0sICJBbGwgcmV2aWV3ZWQgcGF0Y2hlcyBoYXZlIGJl
ZW4gbGFuZGVkLiAgQ2xvc2luZyBidWcuIikKLQotCi1jbGFzcyBDbG9zZUJ1Z0ZvckxhbmREaWZm
U3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNs
cyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5jbG9zZV9i
dWcsCi0gICAgICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBjb21t
ZW50X3RleHQgPSBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0KHNlbGYuX3Rvb2wuc2NtKCks
IHN0YXRlWyJjb21taXRfdGV4dCJdKQotICAgICAgICBidWdfaWQgPSBzdGF0ZVsicGF0Y2giXVsi
YnVnX2lkIl0KLSAgICAgICAgaWYgYnVnX2lkOgotICAgICAgICAgICAgbG9nKCJVcGRhdGluZyBi
dWcgJXMiICUgYnVnX2lkKQotICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jbG9zZV9idWc6
Ci0gICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3NlX2J1Z19hc19maXhlZChidWdf
aWQsIGNvbW1lbnRfdGV4dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBG
SVhNRTogV2Ugc2hvdWxkIGEgc21hcnQgd2F5IHRvIGZpZ3VyZSBvdXQgaWYgdGhlIHBhdGNoIGlz
IGF0dGFjaGVkCi0gICAgICAgICAgICAgICAgIyB0byB0aGUgYnVnLCBhbmQgaWYgc28gb2Jzb2xl
dGUgaXQuCi0gICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdzLnBvc3RfY29tbWVudF90b19i
dWcoYnVnX2lkLCBjb21tZW50X3RleHQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2co
Y29tbWVudF90ZXh0KQotICAgICAgICAgICAgbG9nKCJObyBidWcgaWQgcHJvdmlkZWQuIikKLQot
Ci1jbGFzcyBDb21wbGV0ZVJvbGxvdXQoTWV0YVN0ZXApOgotICAgIHN1YnN0ZXBzID0gWwotICAg
ICAgICBCdWlsZFN0ZXAsCi0gICAgICAgIENvbW1pdFN0ZXAsCi0gICAgXQotCi0gICAgQGNsYXNz
bWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAgY29sbGVjdGVkX29wdGlvbnMg
PSBjbHMuX2NvbGxlY3Rfb3B0aW9uc19mcm9tX3N0ZXBzKGNscy5zdWJzdGVwcykKLSAgICAgICAg
Y29sbGVjdGVkX29wdGlvbnMuYXBwZW5kKENvbW1hbmRPcHRpb25zLmNvbXBsZXRlX3JvbGxvdXQp
Ci0gICAgICAgIHJldHVybiBjb2xsZWN0ZWRfb3B0aW9ucwotCi0gICAgZGVmIHJ1bihzZWxmLCBz
dGF0ZSk6Ci0gICAgICAgIGJ1Z19pZCA9IHN0YXRlWyJidWdfaWQiXQotICAgICAgICAjIEZJWE1F
OiBGdWxseSBhdXRvbWF0ZWQgcm9sbG91dCBpcyBub3QgMTAwJSBpZGlvdC1wcm9vZiB5ZXQsIHNv
IGZvciBub3cganVzdCBsb2cgd2l0aCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGNvbXBsZXRlIHRo
ZSByb2xsb3V0LgotICAgICAgICAjIE9uY2Ugd2UgdHJ1c3Qgcm9sbG91dCB3ZSB3aWxsIHJlbW92
ZSB0aGlzIG9wdGlvbi4KLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuY29tcGxldGVfcm9s
bG91dDoKLSAgICAgICAgICAgIGxvZygiXG5OT1RFOiBSb2xsb3V0IHN1cHBvcnQgaXMgZXhwZXJp
bWVudGFsLlxuUGxlYXNlIHZlcmlmeSB0aGUgcm9sbG91dCBkaWZmIGFuZCB1c2UgXCJidWd6aWxs
YS10b29sIGxhbmQtZGlmZiAlc1wiIHRvIGNvbW1pdCB0aGUgcm9sbG91dC4iICUgYnVnX2lkKQot
ICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgTWV0YVN0ZXAucnVuKHNlbGYsIHN0YXRlKQot
Ci0gICAgICAgIGlmIG5vdCBidWdfaWQ6Ci0gICAgICAgICAgICBsb2coc3RhdGVbImNvbW1pdF90
ZXh0Il0pCi0gICAgICAgICAgICBsb2coIk5vIGJ1Z3Mgd2VyZSB1cGRhdGVkIG9yIHJlLW9wZW5l
ZCB0byByZWZsZWN0IHRoaXMgcm9sbG91dC4iKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
ICMgRklYTUU6IEknbSBub3Qgc3VyZSBzdGF0ZVsiY29tbWl0X3RleHQiXSBpcyBxdWl0ZSByaWdo
dCBoZXJlLgotICAgICAgICBzZWxmLl90b29sLmJ1Z3MucmVvcGVuX2J1ZyhidWdfaWQsIHN0YXRl
WyJjb21taXRfdGV4dCJdKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2J1aWxk
c3RlcHNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1
bGVzL2J1aWxkc3RlcHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy9tb2R1bGVzL2J1aWxkc3RlcHNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
IyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9t
IG1vZHVsZXMuYnVpbGRzdGVwcyBpbXBvcnQgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlclN0
ZXAsIFVwZGF0ZVN0ZXAsIFByb21wdEZvckJ1Z09yVGl0bGVTdGVwCi1mcm9tIG1vZHVsZXMubW9j
a19idWd6aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wKLWZyb20gbW9kdWxlcy5vdXRw
dXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCi1mcm9tIG1vZHVsZXMubW9jayBpbXBvcnQg
TW9jawotCi0KLWNsYXNzIFVwZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3ZXJTdGVwVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfZ3Vlc3NfcmV2aWV3ZXJfZnJvbV9idWcoc2Vs
Zik6Ci0gICAgICAgIGNhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgc3RlcCA9IFVw
ZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3ZXJTdGVwKE1vY2tCdWd6aWxsYVRvb2woKSwgW10pCi0g
ICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICIwIHJldmlld2VkIHBhdGNoZXMgb24gYnVnIDc1LCBj
YW5ub3QgaW5mZXIgcmV2aWV3ZXIuXG4iCi0gICAgICAgIGNhcHR1cmUuYXNzZXJ0X291dHB1dHMo
c2VsZiwgc3RlcC5fZ3Vlc3NfcmV2aWV3ZXJfZnJvbV9idWcsIFs3NV0sIGV4cGVjdGVkX3N0ZGVy
cj1leHBlY3RlZF9zdGRlcnIpCi0KLQotY2xhc3MgU3RlcHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLSAgICBkZWYgX3J1bl9zdGVwKHNlbGYsIHN0ZXAsIHRvb2w9Tm9uZSwgb3B0aW9ucz1Ob25l
LCBzdGF0ZT1Ob25lKToKLSAgICAgICAgaWYgbm90IHRvb2w6Ci0gICAgICAgICAgICB0b29sID0g
TW9ja0J1Z3ppbGxhVG9vbCgpCi0gICAgICAgIGlmIG5vdCBvcHRpb25zOgotICAgICAgICAgICAg
b3B0aW9ucyA9IE1vY2soKQotICAgICAgICBpZiBub3Qgc3RhdGU6Ci0gICAgICAgICAgICBzdGF0
ZSA9IHt9Ci0gICAgICAgIHN0ZXAodG9vbCwgb3B0aW9ucykucnVuKHN0YXRlKQotCi0gICAgZGVm
IHRlc3RfdXBkYXRlX3N0ZXAoc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBNb2NrKCkKLSAgICAg
ICAgb3B0aW9ucy51cGRhdGUgPSBUcnVlCi0gICAgICAgIHNlbGYuX3J1bl9zdGVwKFVwZGF0ZVN0
ZXAsIG9wdGlvbnMpCi0KLSAgICBkZWYgdGVzdF9wcm9tcHRfZm9yX2J1Z19vcl90aXRsZV9zdGVw
KHNlbGYpOgotICAgICAgICB0b29sID0gTW9ja0J1Z3ppbGxhVG9vbCgpCi0gICAgICAgIHRvb2wu
dXNlci5wcm9tcHQgPSBsYW1iZGEgbWVzc2FnZTogNDIKLSAgICAgICAgc2VsZi5fcnVuX3N0ZXAo
UHJvbXB0Rm9yQnVnT3JUaXRsZVN0ZXAsIHRvb2w9dG9vbCkKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy9jaGFuZ2Vsb2dzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy9jaGFuZ2Vsb2dzLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvbW9kdWxlcy9jaGFuZ2Vsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDky
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyAKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSMKLSMgV2ViS2l0J3MgUHl0aG9uIG1vZHVs
ZSBmb3IgcGFyc2luZyBhbmQgbW9kaWZ5aW5nIENoYW5nZUxvZyBmaWxlcwotCi1pbXBvcnQgZmls
ZWlucHV0ICMgaW5wbGFjZSBmaWxlIGVkaXRpbmcgZm9yIHNldF9yZXZpZXdlcl9pbl9jaGFuZ2Vs
b2cKLWltcG9ydCByZQotCi0jIEZJTVhFOiBUaGlzIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBpbiB0
aGlzIGZpbGUsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0dGVyIGhvbWUgZm9yIGl0IHlldC4KLSMg
TWF5YmUgZXZlbnR1YWxseSBhIHdlYmtpdF9jb25maWcucHk/Ci1kZWYgdmlld19zb3VyY2VfdXJs
KHJldmlzaW9uX251bWJlcik6Ci0gICAgcmV0dXJuICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8lcyIgJSByZXZpc2lvbl9udW1iZXIKLQotCi1jbGFzcyBDaGFuZ2VMb2c6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAg
ICAjIGUuZy4gMjAwOS0wNi0wMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+Ci0gICAg
ZGF0ZV9saW5lX3JlZ2V4cCA9IHJlLmNvbXBpbGUoJ14oXGR7NH0tXGR7Mn0tXGR7Mn0pJyAjIENv
bnN1bWUgdGhlIGRhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJ1xzKygu
KylccysnICMgQ29uc3VtZSB0aGUgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyAnPChbXjw+XSspPiQnKSAjIEFuZCBmaW5hbGx5IHRoZSBlbWFpbCBhZGRyZXNzLgotCi0g
ICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfcGFyc2VfbGF0ZXN0X2VudHJ5X2Zyb21fZmlsZShj
aGFuZ2Vsb2dfZmlsZSk6Ci0gICAgICAgIGVudHJ5X2xpbmVzID0gW10KLSAgICAgICAgIyBUaGUg
Zmlyc3QgbGluZSBzaG91bGQgYmUgYSBkYXRlIGxpbmUuCi0gICAgICAgIGZpcnN0X2xpbmUgPSBj
aGFuZ2Vsb2dfZmlsZS5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBDaGFuZ2VMb2cuZGF0ZV9s
aW5lX3JlZ2V4cC5tYXRjaChmaXJzdF9saW5lKToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0g
ICAgICAgIGVudHJ5X2xpbmVzLmFwcGVuZChmaXJzdF9saW5lKQotCi0gICAgICAgIGZvciBsaW5l
IGluIGNoYW5nZWxvZ19maWxlOgotICAgICAgICAgICAgIyBJZiB3ZSd2ZSBoaXQgdGhlIG5leHQg
ZW50cnksIHJldHVybi4KLSAgICAgICAgICAgIGlmIENoYW5nZUxvZy5kYXRlX2xpbmVfcmVnZXhw
Lm1hdGNoKGxpbmUpOgotICAgICAgICAgICAgICAgIHJldHVybiAnJy5qb2luKGVudHJ5X2xpbmVz
WzotMV0pICMgUmVtb3ZlIHRoZSBleHRyYSBuZXdsaW5lIGF0IHRoZSBlbmQKLSAgICAgICAgICAg
IGVudHJ5X2xpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICByZXR1cm4gTm9uZSAjIFdlIG5ldmVy
IGZvdW5kIGEgZGF0ZSBsaW5lIQotCi0gICAgZGVmIGxhdGVzdF9lbnRyeShzZWxmKToKLSAgICAg
ICAgY2hhbmdlbG9nX2ZpbGUgPSBvcGVuKHNlbGYucGF0aCkKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlX2xhdGVzdF9lbnRyeV9mcm9tX2ZpbGUoY2hhbmdlbG9n
X2ZpbGUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBjaGFuZ2Vsb2dfZmlsZS5jbG9z
ZSgpCi0KLSAgICBkZWYgdXBkYXRlX2Zvcl9yZXZlcnQoc2VsZiwgcmV2aXNpb24pOgotICAgICAg
ICByZXZpZXdlZF9ieV9yZWdleHAgPSByZS5jb21waWxlKCdSZXZpZXdlZCBieSBOT0JPRFkgXChP
T1BTIVwpXC4nKQotICAgICAgICByZW1vdmluZ19ib2lsZXJwbGF0ZSA9IEZhbHNlCi0gICAgICAg
ICMgaW5wbGFjZT0xIGNyZWF0ZXMgYSBiYWNrdXAgZmlsZSBhbmQgcmUtZGlyZWN0cyBzdGRvdXQg
dG8gdGhlIGZpbGUKLSAgICAgICAgZm9yIGxpbmUgaW4gZmlsZWlucHV0LkZpbGVJbnB1dChzZWxm
LnBhdGgsIGlucGxhY2U9MSk6Ci0gICAgICAgICAgICBpZiByZXZpZXdlZF9ieV9yZWdleHAuc2Vh
cmNoKGxpbmUpOgotICAgICAgICAgICAgICAgIHByaW50IHJldmlld2VkX2J5X3JlZ2V4cC5zdWIo
Ik5vIHJldmlldywgcm9sbGluZyBvdXQgciVzLiIgJSByZXZpc2lvbiwgbGluZSksCi0gICAgICAg
ICAgICAgICAgcHJpbnQgIiAgICAgICAgJXNcbiIgJSB2aWV3X3NvdXJjZV91cmwocmV2aXNpb24p
Ci0gICAgICAgICAgICAgICAgIyBSZW1vdmUgYWxsIHRoZSBDaGFuZ2VMb2cgYm9pbGVycGxhdGUg
YmV0d2VlbiB0aGUgUmV2aWV3ZWQgYnkgbGluZSBhbmQgdGhlIGZpcnN0IGNoYW5nZWQgZmlsZS4K
LSAgICAgICAgICAgICAgICByZW1vdmluZ19ib2lsZXJwbGF0ZSA9IFRydWUKLSAgICAgICAgICAg
IGVsaWYgcmVtb3ZpbmdfYm9pbGVycGxhdGU6Ci0gICAgICAgICAgICAgICAgaWYgbGluZS5maW5k
KCcqJykgPj0gMCA6ICMgZWFjaCBjaGFuZ2VkIGZpbGUgaXMgcHJlY2VkZWQgYnkgYSAqCi0gICAg
ICAgICAgICAgICAgICAgIHJlbW92aW5nX2JvaWxlcnBsYXRlID0gRmFsc2UKLQotICAgICAgICAg
ICAgaWYgbm90IHJlbW92aW5nX2JvaWxlcnBsYXRlOgotICAgICAgICAgICAgICAgIHByaW50IGxp
bmUsCi0KLSAgICBkZWYgc2V0X3Jldmlld2VyKHNlbGYsIHJldmlld2VyKToKLSAgICAgICAgIyBp
bnBsYWNlPTEgY3JlYXRlcyBhIGJhY2t1cCBmaWxlIGFuZCByZS1kaXJlY3RzIHN0ZG91dCB0byB0
aGUgZmlsZQotICAgICAgICBmb3IgbGluZSBpbiBmaWxlaW5wdXQuRmlsZUlucHV0KHNlbGYucGF0
aCwgaW5wbGFjZT0xKToKLSAgICAgICAgICAgIHByaW50IGxpbmUucmVwbGFjZSgiTk9CT0RZIChP
T1BTISkiLCByZXZpZXdlci5lbmNvZGUoInV0Zi04IikpLCAjIFRyYWlsaW5nIGNvbW1hIHN1cHBy
ZXNzZXMgcHJpbnRpbmcgbmV3bGluZQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVz
L2NoYW5nZWxvZ3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy9tb2R1bGVzL2NoYW5nZWxvZ3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NoYW5nZWxvZ3NfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTQ1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0j
IG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgdW5pdHRlc3QK
LWZyb20gY2hhbmdlbG9ncyBpbXBvcnQgKgotCi1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQot
ZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KLQotY2xhc3MgQ2hhbmdlTG9nc1Rlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgotCi0gICAgX2V4YW1wbGVfZW50cnkgPSAnJycyMDA5LTA4LTE3ICBQ
ZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBTdGV2ZSBGYWxrZW5idXJnLgotCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNzMyMwotICAgICAgICBPbmx5IGFkZCBDeWd3aW4gdG8gdGhlIHBhdGgg
d2hlbiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlLiAgVGhpcyBhdm9pZHMKLSAgICAgICAgY2F1c2lu
ZyBwcm9ibGVtcyBmb3IgcGVvcGxlIHdobyBwdXJwb3NlZnVsbHkgaGF2ZSBub24tQ3lnd2luIHZl
cnNpb25zIG9mCi0gICAgICAgIGV4ZWN1dGFibGVzIGxpa2Ugc3ZuIGluIGZyb250IG9mIHRoZSBD
eWd3aW4gb25lcyBpbiB0aGVpciBwYXRocy4KLQotICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9EdW1wUmVuZGVyVHJlZS52Y3Byb2o6Ci0gICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0lt
YWdlRGlmZi52Y3Byb2o6Ci0gICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Rlc3ROZXRzY2Fw
ZVBsdWdpbi9UZXN0TmV0c2NhcGVQbHVnaW4udmNwcm9qOgotJycnCi0KLSAgICAjIE1vcmUgZXhh
bXBsZSB0ZXh0IHRoYW4gd2UgbmVlZC4gIEV2ZW50dWFsbHkgd2UgbmVlZCB0byBzdXBwb3J0IHBh
cnNpbmcgdGhpcyBhbGwgYW5kIHdyaXRlIHRlc3RzIGZvciB0aGUgcGFyc2luZy4KLSAgICBfZXhh
bXBsZV9jaGFuZ2Vsb2cgPSAnJycyMDA5LTA4LTE3ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBh
cHBsZS5jb20+Ci0KLSAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMjgzOTM+IGNoZWNrLXdl
YmtpdC1zdHlsZTogYWRkIGNoZWNrIGZvciB1c2Ugb2Ygc3RkOjptYXgoKS9zdGQ6Om1pbigpIGlu
c3RlYWQgb2YgTUFYKCkvTUlOKCkKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4K
LQotICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGUucHk6Ci0gICAgICAgIChfRVJS
T1JfQ0FURUdPUklFUyk6IEFkZGVkICdydW50aW1lL21heF9taW5fbWFjcm9zJy4KLSAgICAgICAg
KGNoZWNrX21heF9taW5fbWFjcm9zKTogQWRkZWQuICBSZXR1cm5zIGxldmVsIDQgZXJyb3Igd2hl
biBNQVgoKQotICAgICAgICBhbmQgTUlOKCkgbWFjcm9zIGFyZSB1c2VkIGluIGhlYWRlciBmaWxl
cyBhbmQgQysrIHNvdXJjZSBmaWxlcy4KLSAgICAgICAgKGNoZWNrX3N0eWxlKTogQWRkZWQgY2Fs
bCB0byBjaGVja19tYXhfbWluX21hY3JvcygpLgotICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9j
cHBfc3R5bGVfdW5pdHRlc3QucHk6IEFkZGVkIHVuaXQgdGVzdHMuCi0gICAgICAgICh0ZXN0X21h
eF9tYWNybyk6IEFkZGVkLgotICAgICAgICAodGVzdF9taW5fbWFjcm8pOiBBZGRlZC4KLQotMjAw
OS0wOC0xNiAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgotCi0gICAgICAgIEJh
Y2tlZCBvdXQgcjQ3MzQzIHdoaWNoIHdhcyBtaXN0YWtlbmx5IGNvbW1pdHRlZAotCi0gICAgICAg
ICogU2NyaXB0cy9idWd6aWxsYS10b29sOgotICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9zY20u
cHk6Ci0KLTIwMDktMDYtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgotCi0gICAg
ICAgIFJ1YmJlciBzdGFtcGVkIGJ5IE1hcmsgUm93ZS4KLQotICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZVdpbmRvdy5tbToKLSAgICAgICAgKC1bRHVtcFJlbmRlclRy
ZWVXaW5kb3cgY2xvc2VdKTogUmVzb2x2ZWQgY3Jhc2hlcyBzZWVuIGR1cmluZyByZWdyZXNzaW9u
Ci0gICAgICAgIHRlc3RzLiBUaGUgY2xvc2UgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb24gYSB3aW5k
b3cgdGhhdCdzIGFscmVhZHkgY2xvc2VkCi0gICAgICAgIHNvIHdlIGNhbid0IGFzc2VydCBoZXJl
LgotCi09PSBSb2xsZWQgb3ZlciB0byBDaGFuZ2VMb2ctMjAwOS0wNi0xNiA9PQotJycnCi0KLSAg
ICBkZWYgdGVzdF9sYXRlc3RfZW50cnlfcGFyc2Uoc2VsZik6Ci0gICAgICAgIGNoYW5nZWxvZ19j
b250ZW50cyA9ICIlc1xuJXMiICUgKHNlbGYuX2V4YW1wbGVfZW50cnksIHNlbGYuX2V4YW1wbGVf
Y2hhbmdlbG9nKQotICAgICAgICBjaGFuZ2Vsb2dfZmlsZSA9IFN0cmluZ0lPKGNoYW5nZWxvZ19j
b250ZW50cykKLSAgICAgICAgbGF0ZXN0X2VudHJ5ID0gQ2hhbmdlTG9nLl9wYXJzZV9sYXRlc3Rf
ZW50cnlfZnJvbV9maWxlKGNoYW5nZWxvZ19maWxlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLl9leGFtcGxlX2VudHJ5LCBsYXRlc3RfZW50cnkpCi0KLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIF93cml0ZV90bXBfZmlsZV93aXRoX2NvbnRlbnRzKGNvbnRlbnRzKToKLSAgICAg
ICAgKGZpbGVfZGVzY3JpcHRvciwgZmlsZV9wYXRoKSA9IHRlbXBmaWxlLm1rc3RlbXAoKSAjIE5h
bWVkVGVtcG9yYXJ5RmlsZSBhbHdheXMgZGVsZXRlcyB0aGUgZmlsZSBvbiBjbG9zZSBpbiBweXRo
b24gPCAyLjYKLSAgICAgICAgZmlsZSA9IG9zLmZkb3BlbihmaWxlX2Rlc2NyaXB0b3IsICd3JykK
LSAgICAgICAgZmlsZS53cml0ZShjb250ZW50cykKLSAgICAgICAgZmlsZS5jbG9zZSgpCi0gICAg
ICAgIHJldHVybiBmaWxlX3BhdGgKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX3JlYWRf
ZmlsZV9jb250ZW50cyhmaWxlX3BhdGgpOgotICAgICAgICBmaWxlID0gb3BlbihmaWxlX3BhdGgp
Ci0gICAgICAgIGNvbnRlbnRzID0gZmlsZS5yZWFkKCkKLSAgICAgICAgZmlsZS5jbG9zZSgpCi0g
ICAgICAgIHJldHVybiBjb250ZW50cwotCi0gICAgX25ld19lbnRyeV9ib2lsZXJwbGF0ZSA9ICcn
JzIwMDktMDgtMTkgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgotCi0gICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlw
dGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCi0KLSAgICAgICAgKiBTY3JpcHRzL2J1Z3ppbGxhLXRv
b2w6Ci0nJycKLQotICAgIGRlZiB0ZXN0X3NldF9yZXZpZXdlcihzZWxmKToKLSAgICAgICAgY2hh
bmdlbG9nX2NvbnRlbnRzID0gIiVzXG4lcyIgJSAoc2VsZi5fbmV3X2VudHJ5X2JvaWxlcnBsYXRl
LCBzZWxmLl9leGFtcGxlX2NoYW5nZWxvZykKLSAgICAgICAgY2hhbmdlbG9nX3BhdGggPSBzZWxm
Ll93cml0ZV90bXBfZmlsZV93aXRoX2NvbnRlbnRzKGNoYW5nZWxvZ19jb250ZW50cykKLSAgICAg
ICAgcmV2aWV3ZXJfbmFtZSA9ICdUZXN0IFJldmlld2VyJwotICAgICAgICBDaGFuZ2VMb2coY2hh
bmdlbG9nX3BhdGgpLnNldF9yZXZpZXdlcihyZXZpZXdlcl9uYW1lKQotICAgICAgICBhY3R1YWxf
Y29udGVudHMgPSBzZWxmLl9yZWFkX2ZpbGVfY29udGVudHMoY2hhbmdlbG9nX3BhdGgpCi0gICAg
ICAgIGV4cGVjdGVkX2NvbnRlbnRzID0gY2hhbmdlbG9nX2NvbnRlbnRzLnJlcGxhY2UoJ05PQk9E
WSAoT09QUyEpJywgcmV2aWV3ZXJfbmFtZSkKLSAgICAgICAgb3MucmVtb3ZlKGNoYW5nZWxvZ19w
YXRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1YWxfY29udGVudHMsIGV4cGVjdGVk
X2NvbnRlbnRzKQotCi0gICAgX2V4cGVjdGVkX3JldmVydF9lbnRyeSA9ICcnJzIwMDktMDgtMTkg
IEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgotCi0gICAgICAgIE5vIHJldmlldywgcm9s
bGluZyBvdXQgcjEyMzQ1LgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8xMjM0NQotCi0gICAgICAgICogU2NyaXB0cy9idWd6aWxsYS10b29sOgotJycnCi0KLSAgICBk
ZWYgdGVzdF91cGRhdGVfZm9yX3JldmVydChzZWxmKToKLSAgICAgICAgY2hhbmdlbG9nX2NvbnRl
bnRzID0gIiVzXG4lcyIgJSAoc2VsZi5fbmV3X2VudHJ5X2JvaWxlcnBsYXRlLCBzZWxmLl9leGFt
cGxlX2NoYW5nZWxvZykKLSAgICAgICAgY2hhbmdlbG9nX3BhdGggPSBzZWxmLl93cml0ZV90bXBf
ZmlsZV93aXRoX2NvbnRlbnRzKGNoYW5nZWxvZ19jb250ZW50cykKLSAgICAgICAgY2hhbmdlbG9n
ID0gQ2hhbmdlTG9nKGNoYW5nZWxvZ19wYXRoKQotICAgICAgICBjaGFuZ2Vsb2cudXBkYXRlX2Zv
cl9yZXZlcnQoMTIzNDUpCi0gICAgICAgIGFjdHVhbF9lbnRyeSA9IGNoYW5nZWxvZy5sYXRlc3Rf
ZW50cnkoKQotICAgICAgICBvcy5yZW1vdmUoY2hhbmdlbG9nX3BhdGgpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGFjdHVhbF9lbnRyeSwgc2VsZi5fZXhwZWN0ZWRfcmV2ZXJ0X2VudHJ5KQot
Ci1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1lbnRzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jb21tZW50cy5weQkocmV2aXNpb24gNTI3MDIpCisr
KyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWVudHMucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEsMzkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMg
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jCi0jIEEgdG9vbCBmb3IgYXV0b21h
dGluZyBkZWFsaW5nIHdpdGggYnVnemlsbGEsIHBvc3RpbmcgcGF0Y2hlcywgY29tbWl0dGluZyBw
YXRjaGVzLCBldGMuCi0KLWZyb20gbW9kdWxlcy5jaGFuZ2Vsb2dzIGltcG9ydCB2aWV3X3NvdXJj
ZV91cmwKLQotZGVmIGJ1Z19jb21tZW50X2Zyb21fc3ZuX3JldmlzaW9uKHN2bl9yZXZpc2lvbik6
Ci0gICAgcmV0dXJuICJDb21taXR0ZWQgciVzOiA8JXM+IiAlIChzdm5fcmV2aXNpb24sIHZpZXdf
c291cmNlX3VybChzdm5fcmV2aXNpb24pKQotCi1kZWYgYnVnX2NvbW1lbnRfZnJvbV9jb21taXRf
dGV4dChzY20sIGNvbW1pdF90ZXh0KToKLSAgICBzdm5fcmV2aXNpb24gPSBzY20uc3ZuX3Jldmlz
aW9uX2Zyb21fY29tbWl0X3RleHQoY29tbWl0X3RleHQpCi0gICAgcmV0dXJuIGJ1Z19jb21tZW50
X2Zyb21fc3ZuX3JldmlzaW9uKHN2bl9yZXZpc2lvbikKSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvbW9kdWxlcy9jb21taXR0ZXJzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Njcmlw
dHMvbW9kdWxlcy9jb21taXR0ZXJzLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy9jb21taXR0ZXJzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzOSAr
MCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlz
dHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jCi0jIFdlYktpdCdzIFB5dGhvbiBtb2R1bGUg
Zm9yIGNvbW1pdHRlciBhbmQgcmV2aWV3ZXIgdmFsaWRhdGlvbgotCi1jbGFzcyBDb21taXR0ZXI6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGVtYWlsX29yX2VtYWlscyk6Ci0gICAgICAg
IHNlbGYuZnVsbF9uYW1lID0gbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKGVtYWlsX29yX2Vt
YWlscywgc3RyKToKLSAgICAgICAgICAgIHNlbGYuZW1haWxzID0gW2VtYWlsX29yX2VtYWlsc10K
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZW1haWxzID0gZW1haWxfb3JfZW1haWxz
Ci0gICAgICAgIHNlbGYuY2FuX3JldmlldyA9IEZhbHNlCi0KLSAgICAjIEZJWE1FOiBXZSdyZSBh
c3N1bWluZyB0aGUgZmlyc3QgZW1haWwgaXMgYSB2YWxpZCBidWd6aWxsYSBlbWFpbCwgd2hpY2gg
bWlnaHQgbm90IGJlIHJpZ2h0LgotICAgIGRlZiBidWd6aWxsYV9lbWFpbChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuZW1haWxzWzBdCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAg
ICAgcmV0dXJuICciJXMiIDwlcz4nICUgKHNlbGYuZnVsbF9uYW1lLCBzZWxmLmVtYWlsc1swXSkK
LQotY2xhc3MgUmV2aWV3ZXIoQ29tbWl0dGVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFt
ZSwgZW1haWxfb3JfZW1haWxzKToKLSAgICAgICAgQ29tbWl0dGVyLl9faW5pdF9fKHNlbGYsIG5h
bWUsIGVtYWlsX29yX2VtYWlscykKLSAgICAgICAgc2VsZi5jYW5fcmV2aWV3ID0gVHJ1ZQotCi0j
IFRoaXMgaXMgaW50ZW5kZWQgYXMgYSBjYW5vbmljYWwsIG1hY2hpbmUtcmVhZGFibGUgbGlzdCBv
ZiBhbGwgbm9uLXJldmlld2VyIGNvbW1pdHRlcnMgZm9yIFdlYktpdC4KLSMgSWYgeW91ciBuYW1l
IGlzIG1pc3NpbmcgaGVyZSBhbmQgeW91IGFyZSBhIGNvbW1pdHRlciwgcGxlYXNlIGFkZCBpdC4g
IE5vIHJldmlldyBuZWVkZWQuCi0jIEFsbCByZXZpZXdlcnMgYXJlIGNvbW1pdHRlcnMsIHNvIHRo
aXMgbGlzdCBpcyBvbmx5IG9mIGNvbW1pdHRlcnMgd2hvIGFyZSBub3QgcmV2aWV3ZXJzLgotY29t
bWl0dGVyc191bmFibGVfdG9fcmV2aWV3ID0gWwotICAgIENvbW1pdHRlcigiQWFyb24gQm9vZG1h
biIsICJhYUBjaHJvbWl1bS5vcmciKSwKLSAgICBDb21taXR0ZXIoIkFkYW0gTGFuZ2xleSIsICJh
Z2xAY2hyb21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJBbGJlcnQgSi4gV29uZyIsICJhandv
bmdAY2hyb21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJBbGV4YW5kZXIgS2VsbGV0dCIsIFsi
bHlwYW5vdkBtYWMuY29tIiwgImEtbGlzdHMwMDFAbHlwYW5vdi5uZXQiLCAibHlwYW5vdkBrZGUu
b3JnIl0pLAotICAgIENvbW1pdHRlcigiQW5kcmUgQm91bGUiLCAiYWJvdWxlQGFwcGxlLmNvbSIp
LAotICAgIENvbW1pdHRlcigiQW5kcmV3IFdlbGxpbmd0b24iLCBbImFuZHJld0B3ZWJraXQub3Jn
IiwgInByb3RvbkB3aXJldGFwcGVkLm5ldCJdKSwKLSAgICBDb21taXR0ZXIoIkFudGhvbnkgUmlj
YXVkIiwgInJpa0B3ZWJraXQub3JnIiksCi0gICAgQ29tbWl0dGVyKCJBbnRvbiBNdWhpbiIsICJh
bnRvbm1AY2hyb21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJBbnRvbmlvIEdvbWVzIiwgInRv
bmlraXRvb0B3ZWJraXQub3JnIiksCi0gICAgQ29tbWl0dGVyKCJCZW4gTXVyZG9jaCIsICJiZW5t
QGdvb2dsZS5jb20iKSwKLSAgICBDb21taXR0ZXIoIkJlbmphbWluIEMgTWV5ZXIiLCBbImJlbkBt
ZXllcmhvbWUubmV0IiwgImJlbkB3ZWJraXQub3JnIl0pLAotICAgIENvbW1pdHRlcigiQmVuamFt
aW4gT3R0ZSIsIFsib3R0ZUBnbm9tZS5vcmciLCAib3R0ZUB3ZWJraXQub3JnIl0pLAotICAgIENv
bW1pdHRlcigiQnJlbnQgRnVsZ2hhbSIsICJiZnVsZ2hhbUB3ZWJraXQub3JnIiksCi0gICAgQ29t
bWl0dGVyKCJCcmV0dCBXaWxzb24iLCAiYnJldHR3QGNocm9taXVtLm9yZyIpLAotICAgIENvbW1p
dHRlcigiQnJpYW4gV2VpbnN0ZWluIiwgImJ3ZWluc3RlaW5AYXBwbGUuY29tIiksCi0gICAgQ29t
bWl0dGVyKCJDYW1lcm9uIE1jQ29ybWFjayIsICJjYW1Ad2Via2l0Lm9yZyIpLAotICAgIENvbW1p
dHRlcigiQ2hyaXMgRmxlaXphY2giLCAiY2ZsZWl6YWNoQGFwcGxlLmNvbSIpLAotICAgIENvbW1p
dHRlcigiQ2hyaXMgTWFycmluIiwgImNtYXJyaW5AYXBwbGUuY29tIiksCi0gICAgQ29tbWl0dGVy
KCJDaHJpcyBQZXRlcnNlbiIsICJjcGV0ZXJzZW5AYXBwbGUuY29tIiksCi0gICAgQ29tbWl0dGVy
KCJDaHJpc3RpYW4gRHl3YW4iLCBbImNocmlzdGlhbkB0d290b2FzdHMuZGUiLCAiY2hyaXN0aWFu
QHdlYmtpdC5vcmciXSksCi0gICAgQ29tbWl0dGVyKCJDb2xsaW4gSmFja3NvbiIsICJjb2xsaW5q
QHdlYmtpdC5vcmciKSwKLSAgICBDb21taXR0ZXIoIkNzYWJhIE9zenRyb2dvbmFjIiwgIm9zc3lA
d2Via2l0Lm9yZyIpLAotICAgIENvbW1pdHRlcigiRGFuaWVsIEJhdGVzIiwgImRiYXRlc0B3ZWJr
aXQub3JnIiksCi0gICAgQ29tbWl0dGVyKCJEYXZpZCBTbWl0aCIsIFsiY2F0ZmlzaC5tYW5AZ21h
aWwuY29tIiwgImRzbWl0aEB3ZWJraXQub3JnIl0pLAotICAgIENvbW1pdHRlcigiRGVhbiBKYWNr
c29uIiwgImRpbm9AYXBwbGUuY29tIiksCi0gICAgQ29tbWl0dGVyKCJEcmV3IFdpbHNvbiIsICJh
dHdpbHNvbkBjaHJvbWl1bS5vcmciKSwKLSAgICBDb21taXR0ZXIoIkR1bWl0cnUgRGFuaWxpdWMi
LCAiZHVtaUBjaHJvbWl1bS5vcmciKSwKLSAgICBDb21taXR0ZXIoIkVsaSBGaWRsZXIiLCAiZWxp
QHN0YWlrb3MubmV0IiksCi0gICAgQ29tbWl0dGVyKCJFbnJpY2EgQ2FzdWNjaSIsICJlbnJpY2FA
YXBwbGUuY29tIiksCi0gICAgQ29tbWl0dGVyKCJFcmlrIEFydmlkc3NvbiIsICJhcnZAY2hyb21p
dW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJFcmljIFJvbWFuIiwgImVyb21hbkBjaHJvbWl1bS5v
cmciKSwKLSAgICBDb21taXR0ZXIoIkZlbmcgUWlhbiIsICJmZW5nQGNocm9taXVtLm9yZyIpLAot
ICAgIENvbW1pdHRlcigiRnVtaXRvc2hpIFVrYWkiLCAidWthaUBjaHJvbWl1bS5vcmciKSwKLSAg
ICBDb21taXR0ZXIoIkdhYm9yIExva2kiLCAibG9raUB3ZWJraXQub3JnIiksCi0gICAgQ29tbWl0
dGVyKCJHaXJpc2ggUmFtYWtyaXNobmFuIiwgWyJnaXJpc2hAZm9yd2FyZGJpYXMuaW4iLCAicmFt
YWtyaXNobmFuLmdpcmlzaEBnbWFpbC5jb20iXSksCi0gICAgQ29tbWl0dGVyKCJHcmFoYW0gRGVu
bmlzIiwgWyJHcmFoYW0uRGVubmlzQGdtYWlsLmNvbSIsICJnZGVubmlzQHdlYmtpdC5vcmciXSks
Ci0gICAgQ29tbWl0dGVyKCJHcmVnIEJvbHNpbmdhIiwgImJvbHNpbmdhQGFwcGxlLmNvbSIpLAot
ICAgIENvbW1pdHRlcigiSGluLUNodW5nIExhbSIsIFsiaGNsYW1AZ29vZ2xlLmNvbSIsICJoY2xh
bUBjaHJvbWl1bS5vcmciXSksCi0gICAgQ29tbWl0dGVyKCJKZW5zIEFsZmtlIiwgWyJzbmVqQGNo
cm9taXVtLm9yZyIsICJqZW5zQGFwcGxlLmNvbSJdKSwKLSAgICBDb21taXR0ZXIoIkplcmVteSBN
b3Nrb3ZpY2giLCBbInBsYXltb2JpbEBnb29nbGUuY29tIiwgImplcmVteUBjaHJvbWl1bS5vcmci
XSksCi0gICAgQ29tbWl0dGVyKCJKZXJlbXkgT3Jsb3ciLCAiam9ybG93QGNocm9taXVtLm9yZyIp
LAotICAgIENvbW1pdHRlcigiSmVzc2llIEJlcmxpbiIsIFsiamJlcmxpbkB3ZWJraXQub3JnIiwg
ImpiZXJsaW5AYXBwbGUuY29tIl0pLAotICAgIENvbW1pdHRlcigiSmlhbiBMaSIsICJqaWFubGlA
Y2hyb21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJKb2huIEFiZC1FbC1NYWxlayIsICJqYW1A
Y2hyb21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJKb29zdCBkZSBWYWxrIiwgWyJqb29zdEB3
ZWJraXQub3JnIiwgIndlYmtpdC1kZXZAam9vc3RkZXZhbGsubmwiXSksCi0gICAgQ29tbWl0dGVy
KCJKb3NlcGggUGVjb3Jhcm8iLCAiam9lcGVja0B3ZWJraXQub3JnIiksCi0gICAgQ29tbWl0dGVy
KCJKdWxpZSBQYXJlbnQiLCBbImpwYXJlbnRAZ29vZ2xlLmNvbSIsICJqcGFyZW50QGNocm9taXVt
Lm9yZyJdKSwKLSAgICBDb21taXR0ZXIoIkp1bGllbiBDaGFmZnJhaXgiLCBbImpjaGFmZnJhaXhA
d2Via2l0Lm9yZyIsICJqdWxpZW4uY2hhZmZyYWl4QGdtYWlsLmNvbSJdKSwKLSAgICBDb21taXR0
ZXIoIkp1bmdzaGlrIFNoaW4iLCAianNoaW5AY2hyb21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVy
KCJLZWlzaGkgSGF0dG9yaSIsICJrZWlzaGlAd2Via2l0Lm9yZyIpLAotICAgIENvbW1pdHRlcigi
S2VsbHkgTm9ydG9uIiwgImtub3J0b25AZ29vZ2xlLmNvbSIpLAotICAgIENvbW1pdHRlcigiS2Vu
dCBUYW11cmEiLCAidGtlbnRAY2hyb21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJLcnp5c3p0
b2YgS293YWxjenlrIiwgImtrb3dhbGN6eWtAZ21haWwuY29tIiksCi0gICAgQ29tbWl0dGVyKCJM
ZXZpIFdlaW50cmF1YiIsICJsd2VpbnRyYXViQGFwcGxlLmNvbSIpLAotICAgIENvbW1pdHRlcigi
TWFkcyBBZ2VyIiwgImFnZXJAY2hyb21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJNYXR0IExp
bGVrIiwgWyJ3ZWJraXRAbWF0dGxpbGVrLmNvbSIsICJwZXd0ZXJtb29zZUB3ZWJraXQub3JnIl0p
LAotICAgIENvbW1pdHRlcigiTWF0dCBQZXJyeSIsICJtcGNvbXBsZXRlQGNocm9taXVtLm9yZyIp
LAotICAgIENvbW1pdHRlcigiTWF4aW1lIEJyaXR0byIsIFsibWF4aW1lLmJyaXR0b0BnbWFpbC5j
b20iLCAiYnJpdHRvQGFwcGxlLmNvbSJdKSwKLSAgICBDb21taXR0ZXIoIk1heGltZSBTaW1vbiIs
IFsic2ltb24ubWF4aW1lQGdtYWlsLmNvbSIsICJtYXhpbWUuc2ltb25Ad2Via2l0Lm9yZyJdKSwK
LSAgICBDb21taXR0ZXIoIk1pY2hlbGFuZ2VsbyBEZSBTaW1vbmUiLCAibWljaGVsYW5nZWxvQHdl
YmtpdC5vcmciKSwKLSAgICBDb21taXR0ZXIoIk1pa2UgQmVsc2hlIiwgIm1pa2VAYmVsc2hlLmNv
bSIpLAotICAgIENvbW1pdHRlcigiTWlrZSBGZW50b24iLCBbIm1pa2UuZmVudG9uQHRvcmNobW9i
aWxlLmNvbSIsICJtaWZlbnRvbkByaW0uY29tIl0pLAotICAgIENvbW1pdHRlcigiTWlrZSBUaG9s
ZSIsIFsibXRob2xlQG1pa2V0aG9sZS5jb20iLCAibXRob2xlQGFwcGxlLmNvbSJdKSwKLSAgICBD
b21taXR0ZXIoIk5hdGUgQ2hhcGluIiwgImphcGhldEBjaHJvbWl1bS5vcmciKSwKLSAgICBDb21t
aXR0ZXIoIk9qYW4gVmFmYWkiLCAib2phbkBjaHJvbWl1bS5vcmciKSwKLSAgICBDb21taXR0ZXIo
IlBhbSBHcmVlbmUiLCAicGFtQGNocm9taXVtLm9yZyIpLAotICAgIENvbW1pdHRlcigiUGV0ZXIg
S2FzdGluZyIsIFsicGthc3RpbmdAZ29vZ2xlLmNvbSIsICJwa2FzdGluZ0BjaHJvbWl1bS5vcmci
XSksCi0gICAgQ29tbWl0dGVyKCJQaGlsaXBwZSBOb3JtYW5kIiwgWyJwbm9ybWFuZEBpZ2FsaWEu
Y29tIiwgInBoaWxuQHdlYmtpdC5vcmciXSksCi0gICAgQ29tbWl0dGVyKCJQaWVycmUgZCdIZXJi
ZW1vbnQiLCBbInBkaGVyYmVtb250QGZyZWUuZnIiLCAicGRoZXJiZW1vbnRAYXBwbGUuY29tIl0p
LAotICAgIENvbW1pdHRlcigiUGllcnJlLU9saXZpZXIgTGF0b3VyIiwgInBvbEBhcHBsZS5jb20i
KSwKLSAgICBDb21taXR0ZXIoIlJvbGFuZCBTdGVpbmVyIiwgInJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJSeW9zdWtlIE5pd2EiLCAicm5pd2FAd2Via2l0Lm9y
ZyIpLAotICAgIENvbW1pdHRlcigiU2NvdHQgVmlvbGV0IiwgInNreUBjaHJvbWl1bS5vcmciKSwK
LSAgICBDb21taXR0ZXIoIlNoaW5pY2hpcm8gSGFtYWppIiwgImhhbWFqaUBjaHJvbWl1bS5vcmci
KSwKLSAgICBDb21taXR0ZXIoIlN0ZXBoZW4gV2hpdGUiLCAic2Vub3JibGFuY29AY2hyb21pdW0u
b3JnIiksCi0gICAgQ29tbWl0dGVyKCJTdGV2ZSBCbG9jayIsICJzdGV2ZWJsb2NrQGdvb2dsZS5j
b20iKSwKLSAgICBDb21taXR0ZXIoIlRvbnkgQ2hhbmciLCAidG9ueUBjaHJvbWl1bS5vcmciKSwK
LSAgICBDb21taXR0ZXIoIlRyZXkgTWF0dGVzb24iLCAidHJleUB1c2EubmV0IiksCi0gICAgQ29t
bWl0dGVyKCJUcmlzdGFuIE8nVGllcm5leSIsIFsidHJpc3RhbkBvdGllcm5leS5uZXQiLCAidHJp
c3RhbkBhcHBsZS5jb20iXSksCi0gICAgQ29tbWl0dGVyKCJXaWxsaWFtIFNpZWdyaXN0IiwgIndz
aWVncmlzdEBhcHBsZS5jb20iKSwKLSAgICBDb21taXR0ZXIoIllhZWwgQWhhcm9uIiwgInlhZWwu
YWhhcm9uQG5va2lhLmNvbSIpLAotICAgIENvbW1pdHRlcigiWWFhciBTY2huaXRtYW4iLCBbInlh
YXJAY2hyb21pdW0ub3JnIiwgInlhYXJAZ29vZ2xlLmNvbSJdKSwKLSAgICBDb21taXR0ZXIoIllv
bmcgTGkiLCBbInlvbmcubGlAdG9yY2htb2JpbGUuY29tIiwgInlvbmcubGkud2Via2l0QGdtYWls
LmNvbSJdKSwKLSAgICBDb21taXR0ZXIoIllvbmdqdW4gWmhhbmciLCAieW9uZ2p1bi56aGFuZ0Bu
b2tpYS5jb20iKSwKLSAgICBDb21taXR0ZXIoIll1cnkgU2VtaWtoYXRza3kiLCAieXVyeXNAY2hy
b21pdW0ub3JnIiksCi0gICAgQ29tbWl0dGVyKCJab2x0YW4gSG9ydmF0aCIsICJ6b2x0YW5Ad2Vi
a2l0Lm9yZyIpLAotXQotCi0jIFRoaXMgaXMgaW50ZW5kZWQgYXMgYSBjYW5vbmljYWwsIG1hY2hp
bmUtcmVhZGFibGUgbGlzdCBvZiBhbGwgcmV2aWV3ZXJzIGZvciBXZWJLaXQuCi0jIElmIHlvdXIg
bmFtZSBpcyBtaXNzaW5nIGhlcmUgYW5kIHlvdSBhcmUgYSByZXZpZXdlciwgcGxlYXNlIGFkZCBp
dC4gIE5vIHJldmlldyBuZWVkZWQuCi1yZXZpZXdlcnNfbGlzdCA9IFsKLSAgICBSZXZpZXdlcigi
QWRhIENoYW4iLCAiYWRhY2hhbkBhcHBsZS5jb20iKSwKLSAgICBSZXZpZXdlcigiQWRhbSBCYXJ0
aCIsICJhYmFydGhAd2Via2l0Lm9yZyIpLAotICAgIFJldmlld2VyKCJBZGFtIFJvYmVuIiwgImFy
b2JlbkBhcHBsZS5jb20iKSwKLSAgICBSZXZpZXdlcigiQWRhbSBUcmVhdCIsIFsidHJlYXRAa2Rl
Lm9yZyIsICJ0cmVhdEB3ZWJraXQub3JnIl0pLAotICAgIFJldmlld2VyKCJBZGVsZSBQZXRlcnNv
biIsICJhZGVsZUBhcHBsZS5jb20iKSwKLSAgICBSZXZpZXdlcigiQWxleGV5IFByb3NrdXJ5YWtv
diIsIFsiYXBAd2Via2l0Lm9yZyIsICJhcEBhcHBsZS5jb20iXSksCi0gICAgUmV2aWV3ZXIoIkFs
aWNlIExpdSIsICJhbGljZS5saXVAYXBwbGUuY29tIiksCi0gICAgUmV2aWV3ZXIoIkFscCBUb2tl
ciIsIFsiYWxwQG51YW50aS5jb20iLCAiYWxwQGF0b2tlci5jb20iLCAiYWxwQHdlYmtpdC5vcmci
XSksCi0gICAgUmV2aWV3ZXIoIkFuZGVycyBDYXJsc3NvbiIsIFsiYW5kZXJzY2FAYXBwbGUuY29t
IiwgImFjYXJsc3NvbkBhcHBsZS5jb20iXSksCi0gICAgUmV2aWV3ZXIoIkFudHRpIEtvaXZpc3Rv
IiwgWyJrb2l2aXN0b0Bpa2kuZmkiLCAiYW50dGlAYXBwbGUuY29tIl0pLAotICAgIFJldmlld2Vy
KCJBcml5YSBIaWRheWF0IiwgWyJhcml5YS5oaWRheWF0QGdtYWlsLmNvbSIsICJhcml5YUB3ZWJr
aXQub3JnIl0pLAotICAgIFJldmlld2VyKCJCZXRoIERha2luIiwgImJkYWtpbkBhcHBsZS5jb20i
KSwKLSAgICBSZXZpZXdlcigiQnJhZHkgRWlkc29uIiwgImJlaWRzb25AYXBwbGUuY29tIiksCi0g
ICAgUmV2aWV3ZXIoIkNhbWVyb24gWndhcmljaCIsIFsiendhcmljaEBhcHBsZS5jb20iLCAiY3d6
d2FyaWNoQGFwcGxlLmNvbSIsICJjd3p3YXJpY2hAd2Via2l0Lm9yZyJdKSwKLSAgICBSZXZpZXdl
cigiQ2hyaXMgQmx1bWVuYmVyZyIsICJjYmx1QGFwcGxlLmNvbSIpLAotICAgIFJldmlld2VyKCJE
YW4gQmVybnN0ZWluIiwgWyJtaXR6QHdlYmtpdC5vcmciLCAibWl0ekBhcHBsZS5jb20iXSksCi0g
ICAgUmV2aWV3ZXIoIkRhcmluIEFkbGVyIiwgImRhcmluQGFwcGxlLmNvbSIpLAotICAgIFJldmll
d2VyKCJEYXJpbiBGaXNoZXIiLCBbImZpc2hkQGNocm9taXVtLm9yZyIsICJkYXJpbkBjaHJvbWl1
bS5vcmciXSksCi0gICAgUmV2aWV3ZXIoIkRhdmlkIEhhcnJpc29uIiwgImhhcnJpc29uQGFwcGxl
LmNvbSIpLAotICAgIFJldmlld2VyKCJEYXZpZCBIeWF0dCIsICJoeWF0dEBhcHBsZS5jb20iKSwK
LSAgICBSZXZpZXdlcigiRGF2aWQgS2lsemVyIiwgWyJkZGtpbHplckB3ZWJraXQub3JnIiwgImRk
a2lsemVyQGFwcGxlLmNvbSJdKSwKLSAgICBSZXZpZXdlcigiRGF2aWQgTGV2aW4iLCAibGV2aW5A
Y2hyb21pdW0ub3JnIiksCi0gICAgUmV2aWV3ZXIoIkRpbWl0cmkgR2xhemtvdiIsICJkZ2xhemtv
dkBjaHJvbWl1bS5vcmciKSwKLSAgICBSZXZpZXdlcigiRGlyayBTY2h1bHplIiwgImtyaXRAd2Vi
a2l0Lm9yZyIpLAotICAgIFJldmlld2VyKCJEbWl0cnkgVGl0b3YiLCAiZGltaWNoQGNocm9taXVt
Lm9yZyIpLAotICAgIFJldmlld2VyKCJEb24gTWVsdG9uIiwgImdyYW1wc0BhcHBsZS5jb20iKSwK
LSAgICBSZXZpZXdlcigiRXJpYyBDYXJsc29uIiwgImVyaWMuY2FybHNvbkBhcHBsZS5jb20iKSwK
LSAgICBSZXZpZXdlcigiRXJpYyBTZWlkZWwiLCAiZXJpY0B3ZWJraXQub3JnIiksCi0gICAgUmV2
aWV3ZXIoIkdhdmluIEJhcnJhY2xvdWdoIiwgImJhcnJhY2xvdWdoQGFwcGxlLmNvbSIpLAotICAg
IFJldmlld2VyKCJHZW9mZnJleSBHYXJlbiIsICJnZ2FyZW5AYXBwbGUuY29tIiksCi0gICAgUmV2
aWV3ZXIoIkdlb3JnZSBTdGFpa29zIiwgWyJzdGFpa29zQGtkZS5vcmciLCAic3RhaWtvc0B3ZWJr
aXQub3JnIl0pLAotICAgIFJldmlld2VyKCJHdXN0YXZvIE5vcm9uaGEgU2lsdmEiLCBbImduc0Bn
bm9tZS5vcmciLCAia292QHdlYmtpdC5vcmciXSksCi0gICAgUmV2aWV3ZXIoIkhvbGdlciBGcmV5
dGhlciIsIFsiemVja2VAc2VsZmlzaC5vcmciLCAiemVja2VAd2Via2l0Lm9yZyJdKSwKLSAgICBS
ZXZpZXdlcigiSmFuIEFsb256byIsIFsiam1hbG9uem9AZ21haWwuY29tIiwgImptYWxvbnpvQHdl
YmtpdC5vcmciXSksCi0gICAgUmV2aWV3ZXIoIkpvaG4gU3VsbGl2YW4iLCAic3VsbGl2YW5AYXBw
bGUuY29tIiksCi0gICAgUmV2aWV3ZXIoIkpvbiBIb25leWN1dHQiLCAiamhvbmV5Y3V0dEBhcHBs
ZS5jb20iKSwKLSAgICBSZXZpZXdlcigiSnVzdGluIEdhcmNpYSIsICJqdXN0aW4uZ2FyY2lhQGFw
cGxlLmNvbSIpLAotICAgIFJldmlld2VyKCJLZW4gS29jaWVuZGEiLCAia29jaWVuZGFAYXBwbGUu
Y29tIiksCi0gICAgUmV2aWV3ZXIoIktlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuIiwgWyJrZW5u
ZXRoQHdlYmtpdC5vcmciLCAia2VubmV0aC5jaHJpc3RpYW5zZW5Ab3BlbmJvc3NhLm9yZyJdKSwK
LSAgICBSZXZpZXdlcigiS2V2aW4gRGVja2VyIiwgImtkZWNrZXJAYXBwbGUuY29tIiksCi0gICAg
UmV2aWV3ZXIoIktldmluIE1jQ3VsbG91Z2giLCAia21jY3VsbG91Z2hAYXBwbGUuY29tIiksCi0g
ICAgUmV2aWV3ZXIoIktldmluIE9sbGl2aWVyIiwgWyJrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbSIs
ICJrZXZpbm9Ad2Via2l0Lm9yZyJdKSwKLSAgICBSZXZpZXdlcigiTGFycyBLbm9sbCIsIFsibGFy
c0B0cm9sbHRlY2guY29tIiwgImxhcnNAa2RlLm9yZyJdKSwKLSAgICBSZXZpZXdlcigiTGFzemxv
IEdvbWJvcyIsICJsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tIiksCi0gICAgUmV2aWV3ZXIoIk1h
Y2llaiBTdGFjaG93aWFrIiwgIm1qc0BhcHBsZS5jb20iKSwKLSAgICBSZXZpZXdlcigiTWFyayBS
b3dlIiwgIm1yb3dlQGFwcGxlLmNvbSIpLAotICAgIFJldmlld2VyKCJOaWtvbGFzIFppbW1lcm1h
bm4iLCBbInppbW1lcm1hbm5Aa2RlLm9yZyIsICJ6aW1tZXJtYW5uQHBoeXNpay5yd3RoLWFhY2hl
bi5kZSIsICJ6aW1tZXJtYW5uQHdlYmtpdC5vcmciXSksCi0gICAgUmV2aWV3ZXIoIk9saXZlciBI
dW50IiwgIm9saXZlckBhcHBsZS5jb20iKSwKLSAgICBSZXZpZXdlcigiUGF2ZWwgRmVsZG1hbiIs
ICJwZmVsZG1hbkBjaHJvbWl1bS5vcmciKSwKLSAgICBSZXZpZXdlcigiUmljaGFyZCBXaWxsaWFt
c29uIiwgInJqd0BhcHBsZS5jb20iKSwKLSAgICBSZXZpZXdlcigiUm9iIEJ1aXMiLCBbInJ3bGJ1
aXNAZ21haWwuY29tIiwgInJ3bGJ1aXNAd2Via2l0Lm9yZyJdKSwKLSAgICBSZXZpZXdlcigiU2Ft
IFdlaW5pZyIsIFsic2FtQHdlYmtpdC5vcmciLCAid2VpbmlnQGFwcGxlLmNvbSJdKSwKLSAgICBS
ZXZpZXdlcigiU2ltb24gRnJhc2VyIiwgInNpbW9uLmZyYXNlckBhcHBsZS5jb20iKSwKLSAgICBS
ZXZpZXdlcigiU2ltb24gSGF1c21hbm4iLCBbImhhdXNtYW5uQHdlYmtpdC5vcmciLCAiaGF1c21h
bm5Aa2RlLm9yZyJdKSwKLSAgICBSZXZpZXdlcigiU3RlcGhhbmllIExld2lzIiwgInNsZXdpc0Bh
cHBsZS5jb20iKSwKLSAgICBSZXZpZXdlcigiU3RldmUgRmFsa2VuYnVyZyIsICJzZmFsa2VuQGFw
cGxlLmNvbSIpLAotICAgIFJldmlld2VyKCJUaW0gT21lcm5pY2siLCAidGltb0BhcHBsZS5jb20i
KSwKLSAgICBSZXZpZXdlcigiVGltb3RoeSBIYXRjaGVyIiwgWyJ0aW1vdGh5QGhhdGNoZXIubmFt
ZSIsICJ0aW1vdGh5QGFwcGxlLmNvbSJdKSwKLSAgICBSZXZpZXdlcih1J1RvciBBcm5lIFZlc3Ri
XHhmOCcsICJ2ZXN0Ym9Ad2Via2l0Lm9yZyIpLAotICAgIFJldmlld2VyKCJWaWNraSBNdXJsZXki
LCAidmlja2lAYXBwbGUuY29tIiksCi0gICAgUmV2aWV3ZXIoIlhhbiBMb3BleiIsIFsieGFuLmxv
cGV6QGdtYWlsLmNvbSIsICJ4YW5AZ25vbWUub3JnIiwgInhhbkB3ZWJraXQub3JnIl0pLAotICAg
IFJldmlld2VyKCJaYWNrIFJ1c2luIiwgInphY2tAa2RlLm9yZyIpLAotXQotCi0KLWNsYXNzIENv
bW1pdHRlckxpc3Q6Ci0gICAgIyBDb21taXR0ZXJzIGFuZCByZXZpZXdlcnMgYXJlIHBhc3NlZCBp
biB0byBhbGxvdyBlYXN5IHRlc3RpbmcKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWl0dGVy
cz1jb21taXR0ZXJzX3VuYWJsZV90b19yZXZpZXcsIHJldmlld2Vycz1yZXZpZXdlcnNfbGlzdCk6
Ci0gICAgICAgIHNlbGYuX2NvbW1pdHRlcnMgPSBjb21taXR0ZXJzICsgcmV2aWV3ZXJzCi0gICAg
ICAgIHNlbGYuX3Jldmlld2VycyA9IHJldmlld2VycwotICAgICAgICBzZWxmLl9jb21taXR0ZXJz
X2J5X2VtYWlsID0ge30KLQotICAgIGRlZiBjb21taXR0ZXJzKHNlbGYpOgotICAgICAgICByZXR1
cm4gc2VsZi5fY29tbWl0dGVycwotCi0gICAgZGVmIHJldmlld2VycyhzZWxmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYuX3Jldmlld2VycwotCi0gICAgZGVmIF9lbWFpbF90b19jb21taXR0ZXJfbWFw
KHNlbGYpOgotICAgICAgICBpZiBub3QgbGVuKHNlbGYuX2NvbW1pdHRlcnNfYnlfZW1haWwpOgot
ICAgICAgICAgICAgZm9yIGNvbW1pdHRlciBpbiBzZWxmLl9jb21taXR0ZXJzOgotICAgICAgICAg
ICAgICAgIGZvciBlbWFpbCBpbiBjb21taXR0ZXIuZW1haWxzOgotICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9jb21taXR0ZXJzX2J5X2VtYWlsW2VtYWlsXSA9IGNvbW1pdHRlcgotICAgICAgICBy
ZXR1cm4gc2VsZi5fY29tbWl0dGVyc19ieV9lbWFpbAotCi0gICAgZGVmIGNvbW1pdHRlcl9ieV9l
bWFpbChzZWxmLCBlbWFpbCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9lbWFpbF90b19jb21taXR0
ZXJfbWFwKCkuZ2V0KGVtYWlsKQotCi0gICAgZGVmIHJldmlld2VyX2J5X2VtYWlsKHNlbGYsIGVt
YWlsKToKLSAgICAgICAgY29tbWl0dGVyID0gc2VsZi5jb21taXR0ZXJfYnlfZW1haWwoZW1haWwp
Ci0gICAgICAgIGlmIGNvbW1pdHRlciBhbmQgbm90IGNvbW1pdHRlci5jYW5fcmV2aWV3OgotICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIGNvbW1pdHRlcgpJbmRleDogV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1pdHRlcnNfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1pdHRlcnNfdW5pdHRlc3QucHkJ
KHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1pdHRl
cnNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLWltcG9ydCB1bml0dGVzdAotZnJvbSBjb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJM
aXN0LCBDb21taXR0ZXIsIFJldmlld2VyCi0KLWNsYXNzIENvbW1pdHRlcnNUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X2NvbW1pdHRlcl9sb29rdXAoc2VsZik6Ci0gICAg
ICAgIGNvbW1pdHRlciA9IENvbW1pdHRlcignVGVzdCBPbmUnLCAnb25lQHRlc3QuY29tJykKLSAg
ICAgICAgcmV2aWV3ZXIgPSBSZXZpZXdlcignVGVzdCBUd28nLCBbJ3R3b0B0ZXN0LmNvbScsICd0
d29AcmFkLmNvbScsICdzb190d29AZ21haWwuY29tJ10pCi0gICAgICAgIGNvbW1pdHRlcl9saXN0
ID0gQ29tbWl0dGVyTGlzdChjb21taXR0ZXJzPVtjb21taXR0ZXJdLCByZXZpZXdlcnM9W3Jldmll
d2VyXSkKLQotICAgICAgICAjIFRlc3QgdmFsaWQgY29tbWl0dGVyIGFuZCByZXZpZXdlciBsb29r
dXAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJfbGlzdC5jb21taXR0ZXJfYnlf
ZW1haWwoJ29uZUB0ZXN0LmNvbScpLCBjb21taXR0ZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY29tbWl0dGVyX2xpc3QucmV2aWV3ZXJfYnlfZW1haWwoJ3R3b0B0ZXN0LmNvbScpLCByZXZp
ZXdlcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJfbGlzdC5jb21taXR0ZXJf
YnlfZW1haWwoJ3R3b0B0ZXN0LmNvbScpLCByZXZpZXdlcikKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjb21taXR0ZXJfbGlzdC5jb21taXR0ZXJfYnlfZW1haWwoJ3R3b0ByYWQuY29tJyksIHJl
dmlld2VyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9saXN0LnJldmlld2Vy
X2J5X2VtYWlsKCdzb190d29AZ21haWwuY29tJyksIHJldmlld2VyKQotCi0gICAgICAgICMgVGVz
dCB0aGF0IHRoZSBmaXJzdCBlbWFpbCBpcyBhc3N1bWVkIHRvIGJlIHRoZSBCdWd6aWxsYSBlbWFp
bCBhZGRyZXNzIChmb3Igbm93KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9s
aXN0LmNvbW1pdHRlcl9ieV9lbWFpbCgndHdvQHJhZC5jb20nKS5idWd6aWxsYV9lbWFpbCgpLCAn
dHdvQHRlc3QuY29tJykKLQotICAgICAgICAjIFRlc3QgdGhhdCBhIGtub3duIGNvbW1pdHRlciBp
cyBub3QgcmV0dXJuZWQgZHVyaW5nIHJldmlld2VyIGxvb2t1cAotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNvbW1pdHRlcl9saXN0LnJldmlld2VyX2J5X2VtYWlsKCdvbmVAdGVzdC5jb20nKSwg
Tm9uZSkKLQotICAgICAgICAjIFRlc3QgdGhhdCB1bmtub3duIGVtYWlsIGFkZHJlc3MgZmFpbCBi
b3RoIGNvbW1pdHRlciBhbmQgcmV2aWV3ZXIgbG9va3VwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY29tbWl0dGVyX2xpc3QuY29tbWl0dGVyX2J5X2VtYWlsKCdiYXJAYmFyLmNvbScpLCBOb25l
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9saXN0LnJldmlld2VyX2J5X2Vt
YWlsKCdiYXJAYmFyLmNvbScpLCBOb25lKQotCi0gICAgICAgICMgVGVzdCB0aGF0IGVtYWlscyBy
ZXR1cm5zIGEgbGlzdC4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXIuZW1haWxz
LCBbJ29uZUB0ZXN0LmNvbSddKQotCi0gICAgICAgICMgVGVzdCB0aGF0IGNvbW1pdHRlcnMgcmV0
dXJucyBjb21taXR0ZXJzIGFuZCByZXZpZXdlcnMgYW5kIHJldmlld2VycygpIGp1c3QgcmV2aWV3
ZXJzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9saXN0LmNvbW1pdHRlcnMo
KSwgW2NvbW1pdHRlciwgcmV2aWV3ZXJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1p
dHRlcl9saXN0LnJldmlld2VycygpLCBbcmV2aWV3ZXJdKQotCi0KLWlmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvY3BwX3N0eWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
bW9kdWxlcy9jcHBfc3R5bGUucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy9tb2R1bGVzL2NwcF9zdHlsZS5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzMDc0ICswLDAg
QEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotIwotIyBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJp
Z2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuCi0jIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIFRoaXMgaXMg
dGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgR29vZ2xlJ3MgY3BwbGludC4gVGhlIG9yaWdpbmFsIGNv
ZGUgaXMKLSMgaHR0cDovL2dvb2dsZS1zdHlsZWd1aWRlLmdvb2dsZWNvZGUuY29tL3N2bi90cnVu
ay9jcHBsaW50L2NwcGxpbnQucHkKLQotIiIiU3VwcG9ydCBmb3IgY2hlY2std2Via2l0LXN0eWxl
LiIiIgotCi1pbXBvcnQgY29kZWNzCi1pbXBvcnQgbWF0aCAgIyBmb3IgbG9nCi1pbXBvcnQgb3MK
LWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgcmUKLWltcG9ydCBzcmVfY29tcGlsZQotaW1wb3J0IHN0
cmluZwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaWNvZGVkYXRhCi0KLQotX1VTQUdFID0gJycKLQot
Ci0jIFRoZSBkZWZhdWx0IHN0YXRlIG9mIHRoZSBjYXRlZ29yeSBmaWx0ZXIuIFRoaXMgaXMgb3Zl
cnJpZGVkIGJ5IHRoZSAtLWZpbHRlcj0KLSMgZmxhZy4gQnkgZGVmYXVsdCBhbGwgZXJyb3JzIGFy
ZSBvbiwgc28gb25seSBhZGQgaGVyZSBjYXRlZ29yaWVzIHRoYXQgc2hvdWxkIGJlCi0jIG9mZiBi
eSBkZWZhdWx0IChpLmUuLCBjYXRlZ29yaWVzIHRoYXQgbXVzdCBiZSBlbmFibGVkIGJ5IHRoZSAt
LWZpbHRlcj0gZmxhZ3MpLgotIyBBbGwgZW50cmllcyBoZXJlIHNob3VsZCBzdGFydCB3aXRoIGEg
Jy0nIG9yICcrJywgYXMgaW4gdGhlIC0tZmlsdGVyPSBmbGFnLgotX0RFRkFVTFRfRklMVEVSX1JV
TEVTID0gW10KLQotIyBIZWFkZXJzIHRoYXQgd2UgY29uc2lkZXIgU1RMIGhlYWRlcnMuCi1fU1RM
X0hFQURFUlMgPSBmcm96ZW5zZXQoWwotICAgICdhbGdvYmFzZS5oJywgJ2FsZ29yaXRobScsICdh
bGxvYy5oJywgJ2JpdHNldCcsICdkZXF1ZScsICdleGNlcHRpb24nLAotICAgICdmdW5jdGlvbi5o
JywgJ2Z1bmN0aW9uYWwnLCAnaGFzaF9tYXAnLCAnaGFzaF9tYXAuaCcsICdoYXNoX3NldCcsCi0g
ICAgJ2hhc2hfc2V0LmgnLCAnaXRlcmF0b3InLCAnbGlzdCcsICdsaXN0LmgnLCAnbWFwJywgJ21l
bW9yeScsICdwYWlyLmgnLAotICAgICdwdGhyZWFkX2FsbG9jJywgJ3F1ZXVlJywgJ3NldCcsICdz
ZXQuaCcsICdzc3RyZWFtJywgJ3N0YWNrJywKLSAgICAnc3RsX2FsbG9jLmgnLCAnc3RsX3JlbG9w
cy5oJywgJ3R5cGVfdHJhaXRzLmgnLAotICAgICd1dGlsaXR5JywgJ3ZlY3RvcicsICd2ZWN0b3Iu
aCcsCi0gICAgXSkKLQotCi0jIE5vbi1TVEwgQysrIHN5c3RlbSBoZWFkZXJzLgotX0NQUF9IRUFE
RVJTID0gZnJvemVuc2V0KFsKLSAgICAnYWxnby5oJywgJ2J1aWx0aW5idWYuaCcsICdidmVjdG9y
LmgnLCAnY2Fzc2VydCcsICdjY3R5cGUnLAotICAgICdjZXJybm8nLCAnY2Zsb2F0JywgJ2Npc282
NDYnLCAnY2xpbWl0cycsICdjbG9jYWxlJywgJ2NtYXRoJywKLSAgICAnY29tcGxleCcsICdjb21w
bGV4LmgnLCAnY3NldGptcCcsICdjc2lnbmFsJywgJ2NzdGRhcmcnLCAnY3N0ZGRlZicsCi0gICAg
J2NzdGRpbycsICdjc3RkbGliJywgJ2NzdHJpbmcnLCAnY3RpbWUnLCAnY3djaGFyJywgJ2N3Y3R5
cGUnLAotICAgICdkZWZhbGxvYy5oJywgJ2RlcXVlLmgnLCAnZWRpdGJ1Zi5oJywgJ2V4Y2VwdGlv
bicsICdmc3RyZWFtJywKLSAgICAnZnN0cmVhbS5oJywgJ2hhc2h0YWJsZS5oJywgJ2hlYXAuaCcs
ICdpbmRzdHJlYW0uaCcsICdpb21hbmlwJywKLSAgICAnaW9tYW5pcC5oJywgJ2lvcycsICdpb3Nm
d2QnLCAnaW9zdHJlYW0nLCAnaW9zdHJlYW0uaCcsICdpc3RyZWFtLmgnLAotICAgICdpdGVyYXRv
ci5oJywgJ2xpbWl0cycsICdtYXAuaCcsICdtdWx0aW1hcC5oJywgJ211bHRpc2V0LmgnLAotICAg
ICdudW1lcmljJywgJ29zdHJlYW0uaCcsICdwYXJzZXN0cmVhbS5oJywgJ3Bmc3RyZWFtLmgnLCAn
UGxvdEZpbGUuaCcsCi0gICAgJ3Byb2NidWYuaCcsICdwdGhyZWFkX2FsbG9jLmgnLCAncm9wZScs
ICdyb3BlLmgnLCAncm9wZWltcGwuaCcsCi0gICAgJ1NGaWxlLmgnLCAnc2xpc3QnLCAnc2xpc3Qu
aCcsICdzdGFjay5oJywgJ3N0ZGV4Y2VwdCcsCi0gICAgJ3N0ZGlvc3RyZWFtLmgnLCAnc3RyZWFt
YnVmLmgnLCAnc3RyZWFtLmgnLCAnc3RyZmlsZS5oJywgJ3N0cmluZycsCi0gICAgJ3N0cnN0cmVh
bScsICdzdHJzdHJlYW0uaCcsICd0ZW1wYnVmLmgnLCAndHJlZS5oJywgJ3R5cGVpbmZvJywgJ3Zh
bGFycmF5JywKLSAgICBdKQotCi0KLSMgQXNzZXJ0aW9uIG1hY3Jvcy4gIFRoZXNlIGFyZSBkZWZp
bmVkIGluIGJhc2UvbG9nZ2luZy5oIGFuZAotIyB0ZXN0aW5nL2Jhc2UvZ3VuaXQuaC4gIE5vdGUg
dGhhdCB0aGUgX00gdmVyc2lvbnMgbmVlZCB0byBjb21lIGZpcnN0Ci0jIGZvciBzdWJzdHJpbmcg
bWF0Y2hpbmcgdG8gd29yay4KLV9DSEVDS19NQUNST1MgPSBbCi0gICAgJ0RDSEVDSycsICdDSEVD
SycsCi0gICAgJ0VYUEVDVF9UUlVFX00nLCAnRVhQRUNUX1RSVUUnLAotICAgICdBU1NFUlRfVFJV
RV9NJywgJ0FTU0VSVF9UUlVFJywKLSAgICAnRVhQRUNUX0ZBTFNFX00nLCAnRVhQRUNUX0ZBTFNF
JywKLSAgICAnQVNTRVJUX0ZBTFNFX00nLCAnQVNTRVJUX0ZBTFNFJywKLSAgICBdCi0KLSMgUmVw
bGFjZW1lbnQgbWFjcm9zIGZvciBDSEVDSy9EQ0hFQ0svRVhQRUNUX1RSVUUvRVhQRUNUX0ZBTFNF
Ci1fQ0hFQ0tfUkVQTEFDRU1FTlQgPSBkaWN0KFsobSwge30pIGZvciBtIGluIF9DSEVDS19NQUNS
T1NdKQotCi1mb3Igb3AsIHJlcGxhY2VtZW50IGluIFsoJz09JywgJ0VRJyksICgnIT0nLCAnTkUn
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICgnPj0nLCAnR0UnKSwgKCc+JywgJ0dUJyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAoJzw9JywgJ0xFJyksICgnPCcsICdMVCcpXToKLSAgICBf
Q0hFQ0tfUkVQTEFDRU1FTlRbJ0RDSEVDSyddW29wXSA9ICdEQ0hFQ0tfJXMnICUgcmVwbGFjZW1l
bnQKLSAgICBfQ0hFQ0tfUkVQTEFDRU1FTlRbJ0NIRUNLJ11bb3BdID0gJ0NIRUNLXyVzJyAlIHJl
cGxhY2VtZW50Ci0gICAgX0NIRUNLX1JFUExBQ0VNRU5UWydFWFBFQ1RfVFJVRSddW29wXSA9ICdF
WFBFQ1RfJXMnICUgcmVwbGFjZW1lbnQKLSAgICBfQ0hFQ0tfUkVQTEFDRU1FTlRbJ0FTU0VSVF9U
UlVFJ11bb3BdID0gJ0FTU0VSVF8lcycgJSByZXBsYWNlbWVudAotICAgIF9DSEVDS19SRVBMQUNF
TUVOVFsnRVhQRUNUX1RSVUVfTSddW29wXSA9ICdFWFBFQ1RfJXNfTScgJSByZXBsYWNlbWVudAot
ICAgIF9DSEVDS19SRVBMQUNFTUVOVFsnQVNTRVJUX1RSVUVfTSddW29wXSA9ICdBU1NFUlRfJXNf
TScgJSByZXBsYWNlbWVudAotCi1mb3Igb3AsIGludl9yZXBsYWNlbWVudCBpbiBbKCc9PScsICdO
RScpLCAoJyE9JywgJ0VRJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc+PScsICdM
VCcpLCAoJz4nLCAnTEUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzw9JywgJ0dU
JyksICgnPCcsICdHRScpXToKLSAgICBfQ0hFQ0tfUkVQTEFDRU1FTlRbJ0VYUEVDVF9GQUxTRSdd
W29wXSA9ICdFWFBFQ1RfJXMnICUgaW52X3JlcGxhY2VtZW50Ci0gICAgX0NIRUNLX1JFUExBQ0VN
RU5UWydBU1NFUlRfRkFMU0UnXVtvcF0gPSAnQVNTRVJUXyVzJyAlIGludl9yZXBsYWNlbWVudAot
ICAgIF9DSEVDS19SRVBMQUNFTUVOVFsnRVhQRUNUX0ZBTFNFX00nXVtvcF0gPSAnRVhQRUNUXyVz
X00nICUgaW52X3JlcGxhY2VtZW50Ci0gICAgX0NIRUNLX1JFUExBQ0VNRU5UWydBU1NFUlRfRkFM
U0VfTSddW29wXSA9ICdBU1NFUlRfJXNfTScgJSBpbnZfcmVwbGFjZW1lbnQKLQotCi0jIFRoZXNl
IGNvbnN0YW50cyBkZWZpbmUgdHlwZXMgb2YgaGVhZGVycyBmb3IgdXNlIHdpdGgKLSMgX0luY2x1
ZGVTdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoKS4KLV9DT05GSUdfSEVBREVSID0gMAot
X1BSSU1BUllfSEVBREVSID0gMQotX09USEVSX0hFQURFUiA9IDIKLV9NT0NfSEVBREVSID0gMwot
Ci0KLSMgVGhlIHJlZ2V4cCBjb21waWxhdGlvbiBjYWNoaW5nIGlzIGlubGluZWQgaW4gYWxsIHJl
Z2V4cCBmdW5jdGlvbnMgZm9yCi0jIHBlcmZvcm1hbmNlIHJlYXNvbnM7IGZhY3RvcmluZyBpdCBv
dXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHR1cm5zIG91dAotIyB0byBiZSBub3RpY2VhYmx5
IGV4cGVuc2l2ZS4KLV9yZWdleHBfY29tcGlsZV9jYWNoZSA9IHt9Ci0KLQotZGVmIG1hdGNoKHBh
dHRlcm4sIHMpOgotICAgICIiIk1hdGNoZXMgdGhlIHN0cmluZyB3aXRoIHRoZSBwYXR0ZXJuLCBj
YWNoaW5nIHRoZSBjb21waWxlZCByZWdleHAuIiIiCi0gICAgaWYgbm90IHBhdHRlcm4gaW4gX3Jl
Z2V4cF9jb21waWxlX2NhY2hlOgotICAgICAgICBfcmVnZXhwX2NvbXBpbGVfY2FjaGVbcGF0dGVy
bl0gPSBzcmVfY29tcGlsZS5jb21waWxlKHBhdHRlcm4pCi0gICAgcmV0dXJuIF9yZWdleHBfY29t
cGlsZV9jYWNoZVtwYXR0ZXJuXS5tYXRjaChzKQotCi0KLWRlZiBzZWFyY2gocGF0dGVybiwgcyk6
Ci0gICAgIiIiU2VhcmNoZXMgdGhlIHN0cmluZyBmb3IgdGhlIHBhdHRlcm4sIGNhY2hpbmcgdGhl
IGNvbXBpbGVkIHJlZ2V4cC4iIiIKLSAgICBpZiBub3QgcGF0dGVybiBpbiBfcmVnZXhwX2NvbXBp
bGVfY2FjaGU6Ci0gICAgICAgIF9yZWdleHBfY29tcGlsZV9jYWNoZVtwYXR0ZXJuXSA9IHNyZV9j
b21waWxlLmNvbXBpbGUocGF0dGVybikKLSAgICByZXR1cm4gX3JlZ2V4cF9jb21waWxlX2NhY2hl
W3BhdHRlcm5dLnNlYXJjaChzKQotCi0KLWRlZiBzdWIocGF0dGVybiwgcmVwbGFjZW1lbnQsIHMp
OgotICAgICIiIlN1YnN0aXR1dGVzIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiwgY2FjaGluZyB0
aGUgY29tcGlsZWQgcmVnZXhwLiIiIgotICAgIGlmIG5vdCBwYXR0ZXJuIGluIF9yZWdleHBfY29t
cGlsZV9jYWNoZToKLSAgICAgICAgX3JlZ2V4cF9jb21waWxlX2NhY2hlW3BhdHRlcm5dID0gc3Jl
X2NvbXBpbGUuY29tcGlsZShwYXR0ZXJuKQotICAgIHJldHVybiBfcmVnZXhwX2NvbXBpbGVfY2Fj
aGVbcGF0dGVybl0uc3ViKHJlcGxhY2VtZW50LCBzKQotCi0KLWRlZiBzdWJuKHBhdHRlcm4sIHJl
cGxhY2VtZW50LCBzKToKLSAgICAiIiJTdWJzdGl0dXRlcyBvY2N1cnJlbmNlcyBvZiBhIHBhdHRl
cm4sIGNhY2hpbmcgdGhlIGNvbXBpbGVkIHJlZ2V4cC4iIiIKLSAgICBpZiBub3QgcGF0dGVybiBp
biBfcmVnZXhwX2NvbXBpbGVfY2FjaGU6Ci0gICAgICAgIF9yZWdleHBfY29tcGlsZV9jYWNoZVtw
YXR0ZXJuXSA9IHNyZV9jb21waWxlLmNvbXBpbGUocGF0dGVybikKLSAgICByZXR1cm4gX3JlZ2V4
cF9jb21waWxlX2NhY2hlW3BhdHRlcm5dLnN1Ym4ocmVwbGFjZW1lbnQsIHMpCi0KLQotY2xhc3Mg
X0luY2x1ZGVTdGF0ZShkaWN0KToKLSAgICAiIiJUcmFja3MgbGluZSBudW1iZXJzIGZvciBpbmNs
dWRlcywgYW5kIHRoZSBvcmRlciBpbiB3aGljaCBpbmNsdWRlcyBhcHBlYXIuCi0KLSAgICBBcyBh
IGRpY3QsIGFuIF9JbmNsdWRlU3RhdGUgb2JqZWN0IHNlcnZlcyBhcyBhIG1hcHBpbmcgYmV0d2Vl
biBpbmNsdWRlCi0gICAgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyIG9uIHdoaWNoIHRoYXQgZmls
ZSB3YXMgaW5jbHVkZWQuCi0KLSAgICBDYWxsIGNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigpIG9u
Y2UgZm9yIGVhY2ggaGVhZGVyIGluIHRoZSBmaWxlLCBwYXNzaW5nCi0gICAgaW4gdGhlIHR5cGUg
Y29uc3RhbnRzIGRlZmluZWQgYWJvdmUuIENhbGxzIGluIGFuIGlsbGVnYWwgb3JkZXIgd2lsbAot
ICAgIHJhaXNlIGFuIF9JbmNsdWRlRXJyb3Igd2l0aCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNz
YWdlLgotCi0gICAgIiIiCi0gICAgIyBzZWxmLl9zZWN0aW9uIHdpbGwgbW92ZSBtb25vdG9uaWNh
bGx5IHRocm91Z2ggdGhpcyBzZXQuIElmIGl0IGV2ZXIKLSAgICAjIG5lZWRzIHRvIG1vdmUgYmFj
a3dhcmRzLCBjaGVja19uZXh0X2luY2x1ZGVfb3JkZXIgd2lsbCByYWlzZSBhbiBlcnJvci4KLSAg
ICBfSU5JVElBTF9TRUNUSU9OID0gMAotICAgIF9DT05GSUdfU0VDVElPTiA9IDEKLSAgICBfUFJJ
TUFSWV9TRUNUSU9OID0gMgotICAgIF9PVEhFUl9TRUNUSU9OID0gMwotCi0gICAgX1RZUEVfTkFN
RVMgPSB7Ci0gICAgICAgIF9DT05GSUdfSEVBREVSOiAnV2ViQ29yZSBjb25maWcuaCcsCi0gICAg
ICAgIF9QUklNQVJZX0hFQURFUjogJ2hlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50cycsCi0gICAg
ICAgIF9PVEhFUl9IRUFERVI6ICdvdGhlciBoZWFkZXInLAotICAgICAgICBfTU9DX0hFQURFUjog
J21vYyBmaWxlJywKLSAgICAgICAgfQotICAgIF9TRUNUSU9OX05BTUVTID0gewotICAgICAgICBf
SU5JVElBTF9TRUNUSU9OOiAiLi4uIG5vdGhpbmcuIiwKLSAgICAgICAgX0NPTkZJR19TRUNUSU9O
OiAiV2ViQ29yZSBjb25maWcuaC4iLAotICAgICAgICBfUFJJTUFSWV9TRUNUSU9OOiAnYSBoZWFk
ZXIgdGhpcyBmaWxlIGltcGxlbWVudHMuJywKLSAgICAgICAgX09USEVSX1NFQ1RJT046ICdvdGhl
ciBoZWFkZXIuJywKLSAgICAgICAgfQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAg
ICBkaWN0Ll9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9JTklU
SUFMX1NFQ1RJT04KLSAgICAgICAgc2VsZi5fdmlzaXRlZF9wcmltYXJ5X3NlY3Rpb24gPSBGYWxz
ZQotICAgICAgICBzZWxmLmhlYWRlcl90eXBlcyA9IGRpY3QoKTsKLQotICAgIGRlZiB2aXNpdGVk
X3ByaW1hcnlfc2VjdGlvbihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Zpc2l0ZWRfcHJp
bWFyeV9zZWN0aW9uCi0KLSAgICBkZWYgY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKHNlbGYsIGhl
YWRlcl90eXBlLCBmaWxlX2lzX2hlYWRlcik6Ci0gICAgICAgICIiIlJldHVybnMgYSBub24tZW1w
dHkgZXJyb3IgbWVzc2FnZSBpZiB0aGUgbmV4dCBoZWFkZXIgaXMgb3V0IG9mIG9yZGVyLgotCi0g
ICAgICAgIFRoaXMgZnVuY3Rpb24gYWxzbyB1cGRhdGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSB0byBi
ZSByZWFkeSB0byBjaGVjawotICAgICAgICB0aGUgbmV4dCBpbmNsdWRlLgotCi0gICAgICAgIEFy
Z3M6Ci0gICAgICAgICAgaGVhZGVyX3R5cGU6IE9uZSBvZiB0aGUgX1hYWF9IRUFERVIgY29uc3Rh
bnRzIGRlZmluZWQgYWJvdmUuCi0gICAgICAgICAgZmlsZV9pc19oZWFkZXI6IFdoZXRoZXIgdGhl
IGZpbGUgdGhhdCBvd25zIHRoaXMgX0luY2x1ZGVTdGF0ZSBpcyBpdHNlbGYgYSBoZWFkZXIKLQot
ICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIFRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlIGhlYWRl
ciBpcyBpbiB0aGUgcmlnaHQgb3JkZXIsIG9yIGFuCi0gICAgICAgICAgZXJyb3IgbWVzc2FnZSBk
ZXNjcmliaW5nIHdoYXQncyB3cm9uZy4KLQotICAgICAgICAiIiIKLSAgICAgICAgaWYgaGVhZGVy
X3R5cGUgPT0gX0NPTkZJR19IRUFERVIgYW5kIGZpbGVfaXNfaGVhZGVyOgotICAgICAgICAgICAg
cmV0dXJuICdIZWFkZXIgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gV2ViQ29yZSBjb25maWcuaC4n
Ci0gICAgICAgIGlmIGhlYWRlcl90eXBlID09IF9QUklNQVJZX0hFQURFUiBhbmQgZmlsZV9pc19o
ZWFkZXI6Ci0gICAgICAgICAgICByZXR1cm4gJ0hlYWRlciBmaWxlIHNob3VsZCBub3QgY29udGFp
biBpdHNlbGYuJwotICAgICAgICBpZiBoZWFkZXJfdHlwZSA9PSBfTU9DX0hFQURFUjoKLSAgICAg
ICAgICAgIHJldHVybiAnJwotCi0gICAgICAgIGVycm9yX21lc3NhZ2UgPSAnJwotICAgICAgICBp
ZiBzZWxmLl9zZWN0aW9uICE9IHNlbGYuX09USEVSX1NFQ1RJT046Ci0gICAgICAgICAgICBiZWZv
cmVfZXJyb3JfbWVzc2FnZSA9ICgnRm91bmQgJXMgYmVmb3JlICVzJyAlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fU0VDVElPTl9OQU1FU1tz
ZWxmLl9zZWN0aW9uICsgMV0pKQotICAgICAgICBhZnRlcl9lcnJvcl9tZXNzYWdlID0gKCdGb3Vu
ZCAlcyBhZnRlciAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5f
VFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9TRUNUSU9OX05BTUVTW3NlbGYuX3NlY3Rpb25dKSkKLQotICAgICAgICBpZiBoZWFk
ZXJfdHlwZSA9PSBfQ09ORklHX0hFQURFUjoKLSAgICAgICAgICAgIGlmIHNlbGYuX3NlY3Rpb24g
Pj0gc2VsZi5fQ09ORklHX1NFQ1RJT046Ci0gICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9
IGFmdGVyX2Vycm9yX21lc3NhZ2UKLSAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9D
T05GSUdfU0VDVElPTgotICAgICAgICBlbGlmIGhlYWRlcl90eXBlID09IF9QUklNQVJZX0hFQURF
UjoKLSAgICAgICAgICAgIGlmIHNlbGYuX3NlY3Rpb24gPj0gc2VsZi5fUFJJTUFSWV9TRUNUSU9O
OgotICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSBhZnRlcl9lcnJvcl9tZXNzYWdlCi0g
ICAgICAgICAgICBlbGlmIHNlbGYuX3NlY3Rpb24gPCBzZWxmLl9DT05GSUdfU0VDVElPTjoKLSAg
ICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gYmVmb3JlX2Vycm9yX21lc3NhZ2UKLSAgICAg
ICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9QUklNQVJZX1NFQ1RJT04KLSAgICAgICAgICAg
IHNlbGYuX3Zpc2l0ZWRfcHJpbWFyeV9zZWN0aW9uID0gVHJ1ZQotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgYXNzZXJ0IGhlYWRlcl90eXBlID09IF9PVEhFUl9IRUFERVIKLSAgICAgICAgICAg
IGlmIG5vdCBmaWxlX2lzX2hlYWRlciBhbmQgc2VsZi5fc2VjdGlvbiA8IHNlbGYuX1BSSU1BUllf
U0VDVElPTjoKLSAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gYmVmb3JlX2Vycm9yX21l
c3NhZ2UKLSAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9PVEhFUl9TRUNUSU9OCi0K
LSAgICAgICAgcmV0dXJuIGVycm9yX21lc3NhZ2UKLQotCi1jbGFzcyBfQ3BwU3R5bGVTdGF0ZShv
YmplY3QpOgotICAgICIiIk1haW50YWlucyBtb2R1bGUtd2lkZSBzdGF0ZS4uIiIiCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYudmVyYm9zZV9sZXZlbCA9IDEgICMgZ2xv
YmFsIHNldHRpbmcuCi0gICAgICAgIHNlbGYuZXJyb3JfY291bnQgPSAwICAgICMgZ2xvYmFsIGNv
dW50IG9mIHJlcG9ydGVkIGVycm9ycwotICAgICAgICAjIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBl
bWl0dGluZyBlcnJvciBtZXNzYWdlcwotICAgICAgICBzZWxmLmZpbHRlcnMgPSBfREVGQVVMVF9G
SUxURVJfUlVMRVNbOl0KLQotICAgICAgICAjIG91dHB1dCBmb3JtYXQ6Ci0gICAgICAgICMgImVt
YWNzIiAtIGZvcm1hdCB0aGF0IGVtYWNzIGNhbiBwYXJzZSAoZGVmYXVsdCkKLSAgICAgICAgIyAi
dnM3IiAtIGZvcm1hdCB0aGF0IE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDcgY2FuIHBhcnNlCi0g
ICAgICAgIHNlbGYub3V0cHV0X2Zvcm1hdCA9ICdlbWFjcycKLQotICAgIGRlZiBzZXRfb3V0cHV0
X2Zvcm1hdChzZWxmLCBvdXRwdXRfZm9ybWF0KToKLSAgICAgICAgIiIiU2V0cyB0aGUgb3V0cHV0
IGZvcm1hdCBmb3IgZXJyb3JzLiIiIgotICAgICAgICBzZWxmLm91dHB1dF9mb3JtYXQgPSBvdXRw
dXRfZm9ybWF0Ci0KLSAgICBkZWYgc2V0X3ZlcmJvc2VfbGV2ZWwoc2VsZiwgbGV2ZWwpOgotICAg
ICAgICAiIiJTZXRzIHRoZSBtb2R1bGUncyB2ZXJib3NpdHksIGFuZCByZXR1cm5zIHRoZSBwcmV2
aW91cyBzZXR0aW5nLiIiIgotICAgICAgICBsYXN0X3ZlcmJvc2VfbGV2ZWwgPSBzZWxmLnZlcmJv
c2VfbGV2ZWwKLSAgICAgICAgc2VsZi52ZXJib3NlX2xldmVsID0gbGV2ZWwKLSAgICAgICAgcmV0
dXJuIGxhc3RfdmVyYm9zZV9sZXZlbAotCi0gICAgZGVmIHNldF9maWx0ZXJzKHNlbGYsIGZpbHRl
cnMpOgotICAgICAgICAiIiJTZXRzIHRoZSBlcnJvci1tZXNzYWdlIGZpbHRlcnMuCi0KLSAgICAg
ICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gZW1p
dCBhIGdpdmVuCi0gICAgICAgIGVycm9yIG1lc3NhZ2UuCi0KLSAgICAgICAgQXJnczoKLSAgICAg
ICAgICBmaWx0ZXJzOiBBIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgZmlsdGVycyAoZWcgIit3
aGl0ZXNwYWNlL2luZGVudCIpLgotICAgICAgICAgICAgICAgICAgIEVhY2ggZmlsdGVyIHNob3Vs
ZCBzdGFydCB3aXRoICsgb3IgLTsgZWxzZSB3ZSBkaWUuCi0KLSAgICAgICAgUmFpc2VzOgotICAg
ICAgICAgIFZhbHVlRXJyb3I6IFRoZSBjb21tYS1zZXBhcmF0ZWQgZmlsdGVycyBkaWQgbm90IGFs
bCBzdGFydCB3aXRoICcrJyBvciAnLScuCi0gICAgICAgICAgICAgICAgICAgICAgRS5nLiAiLSwr
d2hpdGVzcGFjZSwtd2hpdGVzcGFjZS9pbmRlbnQsd2hpdGVzcGFjZS9iYWRmaWx0ZXIiCi0gICAg
ICAgICIiIgotICAgICAgICAjIERlZmF1bHQgZmlsdGVycyBhbHdheXMgaGF2ZSBsZXNzIHByaW9y
aXR5IHRoYW4gdGhlIGZsYWcgb25lcy4KLSAgICAgICAgc2VsZi5maWx0ZXJzID0gX0RFRkFVTFRf
RklMVEVSX1JVTEVTWzpdCi0gICAgICAgIGZvciBmaWx0ZXIgaW4gZmlsdGVycy5zcGxpdCgnLCcp
OgotICAgICAgICAgICAgY2xlYW5fZmlsdGVyID0gZmlsdGVyLnN0cmlwKCkKLSAgICAgICAgICAg
IGlmIGNsZWFuX2ZpbHRlcjoKLSAgICAgICAgICAgICAgICBzZWxmLmZpbHRlcnMuYXBwZW5kKGNs
ZWFuX2ZpbHRlcikKLSAgICAgICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6Ci0gICAgICAg
ICAgICBpZiBub3QgKGZpbHRlci5zdGFydHN3aXRoKCcrJykgb3IgZmlsdGVyLnN0YXJ0c3dpdGgo
Jy0nKSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXZlcnkgZmlsdGVyIGlu
IC0tZmlsdGVyIG11c3Qgc3RhcnQgd2l0aCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnKyBvciAtICglcyBkb2VzIG5vdCknICUgZmlsdGVyKQotCi0gICAgZGVmIHJlc2V0X2Vy
cm9yX2NvdW50KHNlbGYpOgotICAgICAgICAiIiJTZXRzIHRoZSBtb2R1bGUncyBlcnJvciBzdGF0
aXN0aWMgYmFjayB0byB6ZXJvLiIiIgotICAgICAgICBzZWxmLmVycm9yX2NvdW50ID0gMAotCi0g
ICAgZGVmIGluY3JlbWVudF9lcnJvcl9jb3VudChzZWxmKToKLSAgICAgICAgIiIiQnVtcHMgdGhl
IG1vZHVsZSdzIGVycm9yIHN0YXRpc3RpYy4iIiIKLSAgICAgICAgc2VsZi5lcnJvcl9jb3VudCAr
PSAxCi0KLQotX2NwcF9zdHlsZV9zdGF0ZSA9IF9DcHBTdHlsZVN0YXRlKCkKLQotCi1kZWYgX291
dHB1dF9mb3JtYXQoKToKLSAgICAiIiJHZXRzIHRoZSBtb2R1bGUncyBvdXRwdXQgZm9ybWF0LiIi
IgotICAgIHJldHVybiBfY3BwX3N0eWxlX3N0YXRlLm91dHB1dF9mb3JtYXQKLQotCi1kZWYgX3Nl
dF9vdXRwdXRfZm9ybWF0KG91dHB1dF9mb3JtYXQpOgotICAgICIiIlNldHMgdGhlIG1vZHVsZSdz
IG91dHB1dCBmb3JtYXQuIiIiCi0gICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfb3V0cHV0X2Zvcm1h
dChvdXRwdXRfZm9ybWF0KQotCi0KLWRlZiBfdmVyYm9zZV9sZXZlbCgpOgotICAgICIiIlJldHVy
bnMgdGhlIG1vZHVsZSdzIHZlcmJvc2l0eSBzZXR0aW5nLiIiIgotICAgIHJldHVybiBfY3BwX3N0
eWxlX3N0YXRlLnZlcmJvc2VfbGV2ZWwKLQotCi1kZWYgX3NldF92ZXJib3NlX2xldmVsKGxldmVs
KToKLSAgICAiIiJTZXRzIHRoZSBtb2R1bGUncyB2ZXJib3NpdHksIGFuZCByZXR1cm5zIHRoZSBw
cmV2aW91cyBzZXR0aW5nLiIiIgotICAgIHJldHVybiBfY3BwX3N0eWxlX3N0YXRlLnNldF92ZXJi
b3NlX2xldmVsKGxldmVsKQotCi0KLWRlZiBfZmlsdGVycygpOgotICAgICIiIlJldHVybnMgdGhl
IG1vZHVsZSdzIGxpc3Qgb2Ygb3V0cHV0IGZpbHRlcnMsIGFzIGEgbGlzdC4iIiIKLSAgICByZXR1
cm4gX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXJzCi0KLQotZGVmIF9zZXRfZmlsdGVycyhmaWx0ZXJz
KToKLSAgICAiIiJTZXRzIHRoZSBtb2R1bGUncyBlcnJvci1tZXNzYWdlIGZpbHRlcnMuCi0KLSAg
ICBUaGVzZSBmaWx0ZXJzIGFyZSBhcHBsaWVkIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBlbWl0
IGEgZ2l2ZW4KLSAgICBlcnJvciBtZXNzYWdlLgotCi0gICAgQXJnczoKLSAgICAgIGZpbHRlcnM6
IEEgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBmaWx0ZXJzIChlZyAid2hpdGVzcGFjZS9pbmRl
bnQiKS4KLSAgICAgICAgICAgICAgIEVhY2ggZmlsdGVyIHNob3VsZCBzdGFydCB3aXRoICsgb3Ig
LTsgZWxzZSB3ZSBkaWUuCi0gICAgIiIiCi0gICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVy
cyhmaWx0ZXJzKQotCi0KLWRlZiBlcnJvcl9jb3VudCgpOgotICAgICIiIlJldHVybnMgdGhlIGds
b2JhbCBjb3VudCBvZiByZXBvcnRlZCBlcnJvcnMuIiIiCi0gICAgcmV0dXJuIF9jcHBfc3R5bGVf
c3RhdGUuZXJyb3JfY291bnQKLQotCi1jbGFzcyBfRnVuY3Rpb25TdGF0ZShvYmplY3QpOgotICAg
ICIiIlRyYWNrcyBjdXJyZW50IGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBudW1iZXIgb2YgbGluZXMg
aW4gaXRzIGJvZHkuIiIiCi0KLSAgICBfTk9STUFMX1RSSUdHRVIgPSAyNTAgICMgZm9yIC0tdj0w
LCA1MDAgZm9yIC0tdj0xLCBldGMuCi0gICAgX1RFU1RfVFJJR0dFUiA9IDQwMCAgICAjIGFib3V0
IDUwJSBtb3JlIHRoYW4gX05PUk1BTF9UUklHR0VSLgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYp
OgotICAgICAgICBzZWxmLmluX2FfZnVuY3Rpb24gPSBGYWxzZQotICAgICAgICBzZWxmLmxpbmVz
X2luX2Z1bmN0aW9uID0gMAotICAgICAgICBzZWxmLmN1cnJlbnRfZnVuY3Rpb24gPSAnJwotCi0g
ICAgZGVmIGJlZ2luKHNlbGYsIGZ1bmN0aW9uX25hbWUpOgotICAgICAgICAiIiJTdGFydCBhbmFs
eXppbmcgZnVuY3Rpb24gYm9keS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgZnVuY3Rp
b25fbmFtZTogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIHRyYWNrZWQuCi0gICAgICAg
ICIiIgotICAgICAgICBzZWxmLmluX2FfZnVuY3Rpb24gPSBUcnVlCi0gICAgICAgIHNlbGYubGlu
ZXNfaW5fZnVuY3Rpb24gPSAwCi0gICAgICAgIHNlbGYuY3VycmVudF9mdW5jdGlvbiA9IGZ1bmN0
aW9uX25hbWUKLQotICAgIGRlZiBjb3VudChzZWxmKToKLSAgICAgICAgIiIiQ291bnQgbGluZSBp
biBjdXJyZW50IGZ1bmN0aW9uIGJvZHkuIiIiCi0gICAgICAgIGlmIHNlbGYuaW5fYV9mdW5jdGlv
bjoKLSAgICAgICAgICAgIHNlbGYubGluZXNfaW5fZnVuY3Rpb24gKz0gMQotCi0gICAgZGVmIGNo
ZWNrKHNlbGYsIGVycm9yLCBmaWxlbmFtZSwgbGluZV9udW1iZXIpOgotICAgICAgICAiIiJSZXBv
cnQgaWYgdG9vIG1hbnkgbGluZXMgaW4gZnVuY3Rpb24gYm9keS4KLQotICAgICAgICBBcmdzOgot
ICAgICAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91
bmQuCi0gICAgICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0g
ICAgICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0g
ICAgICAgICIiIgotICAgICAgICBpZiBtYXRjaChyJ1QoRVNUfGVzdCknLCBzZWxmLmN1cnJlbnRf
ZnVuY3Rpb24pOgotICAgICAgICAgICAgYmFzZV90cmlnZ2VyID0gc2VsZi5fVEVTVF9UUklHR0VS
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBiYXNlX3RyaWdnZXIgPSBzZWxmLl9OT1JNQUxf
VFJJR0dFUgotICAgICAgICB0cmlnZ2VyID0gYmFzZV90cmlnZ2VyICogMiAqKiBfdmVyYm9zZV9s
ZXZlbCgpCi0KLSAgICAgICAgaWYgc2VsZi5saW5lc19pbl9mdW5jdGlvbiA+IHRyaWdnZXI6Ci0g
ICAgICAgICAgICBlcnJvcl9sZXZlbCA9IGludChtYXRoLmxvZyhzZWxmLmxpbmVzX2luX2Z1bmN0
aW9uIC8gYmFzZV90cmlnZ2VyLCAyKSkKLSAgICAgICAgICAgICMgNTAgPT4gMCwgMTAwID0+IDEs
IDIwMCA9PiAyLCA0MDAgPT4gMywgODAwID0+IDQsIDE2MDAgPT4gNSwgLi4uCi0gICAgICAgICAg
ICBpZiBlcnJvcl9sZXZlbCA+IDU6Ci0gICAgICAgICAgICAgICAgZXJyb3JfbGV2ZWwgPSA1Ci0g
ICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9mbl9z
aXplJywgZXJyb3JfbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAnU21hbGwgYW5kIGZvY3VzZWQg
ZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6JwotICAgICAgICAgICAgICAgICAgJyAlcyBoYXMgJWQg
bm9uLWNvbW1lbnQgbGluZXMnCi0gICAgICAgICAgICAgICAgICAnIChlcnJvciB0cmlnZ2VyZWQg
YnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nICAlICgKLSAgICAgICAgICAgICAgICAgICAgICBzZWxm
LmN1cnJlbnRfZnVuY3Rpb24sIHNlbGYubGluZXNfaW5fZnVuY3Rpb24sIHRyaWdnZXIpKQotCi0g
ICAgZGVmIGVuZChzZWxmKToKLSAgICAgICAgIiIiU3RvcCBhbmFsaXppbmcgZnVuY3Rpb24gYm9k
eS4iIiIKLSAgICAgICAgc2VsZi5pbl9hX2Z1bmN0aW9uID0gRmFsc2UKLQotCi1jbGFzcyBfSW5j
bHVkZUVycm9yKEV4Y2VwdGlvbik6Ci0gICAgIiIiSW5kaWNhdGVzIGEgcHJvYmxlbSB3aXRoIHRo
ZSBpbmNsdWRlIG9yZGVyIGluIGEgZmlsZS4iIiIKLSAgICBwYXNzCi0KLQotY2xhc3MgRmlsZUlu
Zm86Ci0gICAgIiIiUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGZpbGVuYW1lcy4KLQot
ICAgIEZpbGVJbmZvIHByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIHRoZSBjb21wb25lbnRzIG9mIGEg
ZmlsZSdzIHBhdGgKLSAgICByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LgotICAgICIiIgot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgc2VsZi5fZmlsZW5h
bWUgPSBmaWxlbmFtZQotCi0gICAgZGVmIGZ1bGxfbmFtZShzZWxmKToKLSAgICAgICAgIiIiTWFr
ZSBXaW5kb3dzIHBhdGhzIGxpa2UgVW5peC4iIiIKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJz
cGF0aChzZWxmLl9maWxlbmFtZSkucmVwbGFjZSgnXFwnLCAnLycpCi0KLSAgICBkZWYgcmVwb3Np
dG9yeV9uYW1lKHNlbGYpOgotICAgICAgICAiIiJGdWxsIG5hbWUgYWZ0ZXIgcmVtb3ZpbmcgdGhl
IGxvY2FsIHBhdGggdG8gdGhlIHJlcG9zaXRvcnkuCi0KLSAgICAgICAgSWYgd2UgaGF2ZSBhIHJl
YWwgYWJzb2x1dGUgcGF0aCBuYW1lIGhlcmUgd2UgY2FuIHRyeSB0byBkbyBzb21ldGhpbmcgc21h
cnQ6Ci0gICAgICAgIGRldGVjdGluZyB0aGUgcm9vdCBvZiB0aGUgY2hlY2tvdXQgYW5kIHRydW5j
YXRpbmcgL3BhdGgvdG8vY2hlY2tvdXQgZnJvbQotICAgICAgICB0aGUgbmFtZSBzbyB0aGF0IHdl
IGdldCBoZWFkZXIgZ3VhcmRzIHRoYXQgZG9uJ3QgaW5jbHVkZSB0aGluZ3MgbGlrZQotICAgICAg
ICAiQzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1wuLi4iIG9yICIvaG9tZS91c2VybmFtZS8uLi4i
IGluIHRoZW0gYW5kIHRodXMKLSAgICAgICAgcGVvcGxlIG9uIGRpZmZlcmVudCBjb21wdXRlcnMg
d2hvIGhhdmUgY2hlY2tlZCB0aGUgc291cmNlIG91dCB0byBkaWZmZXJlbnQKLSAgICAgICAgbG9j
YXRpb25zIHdvbid0IHNlZSBib2d1cyBlcnJvcnMuCi0gICAgICAgICIiIgotICAgICAgICBmdWxs
bmFtZSA9IHNlbGYuZnVsbF9uYW1lKCkKLQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmdWxs
bmFtZSk6Ci0gICAgICAgICAgICBwcm9qZWN0X2RpciA9IG9zLnBhdGguZGlybmFtZShmdWxsbmFt
ZSkKLQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHByb2plY3Rf
ZGlyLCAiLnN2biIpKToKLSAgICAgICAgICAgICAgICAjIElmIHRoZXJlJ3MgYSAuc3ZuIGZpbGUg
aW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3ZQotICAgICAgICAgICAgICAgICMgcmVjdXJzaXZl
bHkgbG9vayB1cCB0aGUgZGlyZWN0b3J5IHRyZWUgZm9yIHRoZSB0b3AKLSAgICAgICAgICAgICAg
ICAjIG9mIHRoZSBTVk4gY2hlY2tvdXQKLSAgICAgICAgICAgICAgICByb290X2RpciA9IHByb2pl
Y3RfZGlyCi0gICAgICAgICAgICAgICAgb25lX3VwX2RpciA9IG9zLnBhdGguZGlybmFtZShyb290
X2RpcikKLSAgICAgICAgICAgICAgICB3aGlsZSBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4o
b25lX3VwX2RpciwgIi5zdm4iKSk6Ci0gICAgICAgICAgICAgICAgICAgIHJvb3RfZGlyID0gb3Mu
cGF0aC5kaXJuYW1lKHJvb3RfZGlyKQotICAgICAgICAgICAgICAgICAgICBvbmVfdXBfZGlyID0g
b3MucGF0aC5kaXJuYW1lKG9uZV91cF9kaXIpCi0KLSAgICAgICAgICAgICAgICBwcmVmaXggPSBv
cy5wYXRoLmNvbW1vbnByZWZpeChbcm9vdF9kaXIsIHByb2plY3RfZGlyXSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZnVsbG5hbWVbbGVuKHByZWZpeCkgKyAxOl0KLQotICAgICAgICAgICAgIyBO
b3QgU1ZOPyBUcnkgdG8gZmluZCBhIGdpdCB0b3AgbGV2ZWwgZGlyZWN0b3J5IGJ5Ci0gICAgICAg
ICAgICAjIHNlYXJjaGluZyB1cCBmcm9tIHRoZSBjdXJyZW50IHBhdGguCi0gICAgICAgICAgICBy
b290X2RpciA9IG9zLnBhdGguZGlybmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgIHdoaWxlIChy
b290X2RpciAhPSBvcy5wYXRoLmRpcm5hbWUocm9vdF9kaXIpCi0gICAgICAgICAgICAgICAgICAg
YW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICIuZ2l0IikpKToK
LSAgICAgICAgICAgICAgICByb290X2RpciA9IG9zLnBhdGguZGlybmFtZShyb290X2RpcikKLSAg
ICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICIu
Z2l0IikpOgotICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmNvbW1vbnByZWZp
eChbcm9vdF9kaXIsIHByb2plY3RfZGlyXSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bGxuYW1lW2xlbihwcmVmaXgpICsgMTpdCi0KLSAgICAgICAgIyBEb24ndCBrbm93IHdoYXQgdG8g
ZG87IGhlYWRlciBndWFyZCB3YXJuaW5ncyBtYXkgYmUgd3JvbmcuLi4KLSAgICAgICAgcmV0dXJu
IGZ1bGxuYW1lCi0KLSAgICBkZWYgc3BsaXQoc2VsZik6Ci0gICAgICAgICIiIlNwbGl0cyB0aGUg
ZmlsZSBpbnRvIHRoZSBkaXJlY3RvcnksIGJhc2VuYW1lLCBhbmQgZXh0ZW5zaW9uLgotCi0gICAg
ICAgIEZvciAnY2hyb21lL2Jyb3dzZXIvYnJvd3Nlci5jcHAnLCBTcGxpdCgpIHdvdWxkCi0gICAg
ICAgIHJldHVybiAoJ2Nocm9tZS9icm93c2VyJywgJ2Jyb3dzZXInLCAnLmNwcCcpCi0KLSAgICAg
ICAgUmV0dXJuczoKLSAgICAgICAgICBBIHR1cGxlIG9mIChkaXJlY3RvcnksIGJhc2VuYW1lLCBl
eHRlbnNpb24pLgotICAgICAgICAiIiIKLQotICAgICAgICBnb29nbGVuYW1lID0gc2VsZi5yZXBv
c2l0b3J5X25hbWUoKQotICAgICAgICBwcm9qZWN0LCByZXN0ID0gb3MucGF0aC5zcGxpdChnb29n
bGVuYW1lKQotICAgICAgICByZXR1cm4gKHByb2plY3QsKSArIG9zLnBhdGguc3BsaXRleHQocmVz
dCkKLQotICAgIGRlZiBiYXNlX25hbWUoc2VsZik6Ci0gICAgICAgICIiIkZpbGUgYmFzZSBuYW1l
IC0gdGV4dCBhZnRlciB0aGUgZmluYWwgc2xhc2gsIGJlZm9yZSB0aGUgZmluYWwgcGVyaW9kLiIi
IgotICAgICAgICByZXR1cm4gc2VsZi5zcGxpdCgpWzFdCi0KLSAgICBkZWYgZXh0ZW5zaW9uKHNl
bGYpOgotICAgICAgICAiIiJGaWxlIGV4dGVuc2lvbiAtIHRleHQgZm9sbG93aW5nIHRoZSBmaW5h
bCBwZXJpb2QuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnNwbGl0KClbMl0KLQotICAgIGRlZiBu
b19leHRlbnNpb24oc2VsZik6Ci0gICAgICAgICIiIkZpbGUgaGFzIG5vIHNvdXJjZSBmaWxlIGV4
dGVuc2lvbi4iIiIKLSAgICAgICAgcmV0dXJuICcvJy5qb2luKHNlbGYuc3BsaXQoKVswOjJdKQot
Ci0gICAgZGVmIGlzX3NvdXJjZShzZWxmKToKLSAgICAgICAgIiIiRmlsZSBoYXMgYSBzb3VyY2Ug
ZmlsZSBleHRlbnNpb24uIiIiCi0gICAgICAgIHJldHVybiBzZWxmLmV4dGVuc2lvbigpWzE6XSBp
biAoJ2MnLCAnY2MnLCAnY3BwJywgJ2N4eCcpCi0KLQotZGVmIF9zaG91bGRfcHJpbnRfZXJyb3Io
Y2F0ZWdvcnksIGNvbmZpZGVuY2UpOgotICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgY29uZmlkZW5j
ZSA+PSB2ZXJib3NlLCBhbmQgY2F0ZWdvcnkgcGFzc2VzIGZpbHRlci4iIiIKLSAgICAjIFRoZXJl
IGFyZSB0d28gd2F5cyB3ZSBtaWdodCBkZWNpZGUgbm90IHRvIHByaW50IGFuIGVycm9yIG1lc3Nh
Z2U6Ci0gICAgIyB0aGUgdmVyYm9zaXR5IGxldmVsIGlzbid0IGhpZ2ggZW5vdWdoLCBvciB0aGUg
ZmlsdGVycyBmaWx0ZXIgaXQgb3V0LgotICAgIGlmIGNvbmZpZGVuY2UgPCBfY3BwX3N0eWxlX3N0
YXRlLnZlcmJvc2VfbGV2ZWw6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgaXNfZmlsdGVy
ZWQgPSBGYWxzZQotICAgIGZvciBvbmVfZmlsdGVyIGluIF9maWx0ZXJzKCk6Ci0gICAgICAgIGlm
IG9uZV9maWx0ZXIuc3RhcnRzd2l0aCgnLScpOgotICAgICAgICAgICAgaWYgY2F0ZWdvcnkuc3Rh
cnRzd2l0aChvbmVfZmlsdGVyWzE6XSk6Ci0gICAgICAgICAgICAgICAgaXNfZmlsdGVyZWQgPSBU
cnVlCi0gICAgICAgIGVsaWYgb25lX2ZpbHRlci5zdGFydHN3aXRoKCcrJyk6Ci0gICAgICAgICAg
ICBpZiBjYXRlZ29yeS5zdGFydHN3aXRoKG9uZV9maWx0ZXJbMTpdKToKLSAgICAgICAgICAgICAg
ICBpc19maWx0ZXJlZCA9IEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhc3NlcnQg
RmFsc2UgICMgc2hvdWxkIGhhdmUgYmVlbiBjaGVja2VkIGZvciBpbiBzZXRfZmlsdGVyLgotICAg
IGlmIGlzX2ZpbHRlcmVkOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIHJldHVybiBUcnVl
Ci0KLQotZGVmIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZpZGVu
Y2UsIG1lc3NhZ2UpOgotICAgICIiIkxvZ3MgdGhlIGZhY3Qgd2UndmUgZm91bmQgYSBsaW50IGVy
cm9yLgotCi0gICAgV2UgbG9nIHdoZXJlIHRoZSBlcnJvciB3YXMgZm91bmQsIGFuZCBhbHNvIG91
ciBjb25maWRlbmNlIGluIHRoZSBlcnJvciwKLSAgICB0aGF0IGlzLCBob3cgY2VydGFpbiB3ZSBh
cmUgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgc3R5bGUgcmVncmVzc2lvbiwgYW5kCi0gICAgbm90IGEg
bWlzaWRlbnRpZmljYXRpb24gb3IgYSB1c2UgdGhhdCdzIHNvbWV0aW1lcyBqdXN0aWZpZWQuCi0K
LSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5p
bmcgdGhlIGVycm9yLgotICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUg
Y29udGFpbmluZyB0aGUgZXJyb3IuCi0gICAgICBjYXRlZ29yeTogQSBzdHJpbmcgdXNlZCB0byBk
ZXNjcmliZSB0aGUgImNhdGVnb3J5IiB0aGlzIGJ1ZwotICAgICAgICAgICAgICAgIGZhbGxzIHVu
ZGVyOiAid2hpdGVzcGFjZSIsIHNheSwgb3IgInJ1bnRpbWUiLiAgQ2F0ZWdvcmllcwotICAgICAg
ICAgICAgICAgIG1heSBoYXZlIGEgaGllcmFyY2h5IHNlcGFyYXRlZCBieSBzbGFzaGVzOiAid2hp
dGVzcGFjZS9pbmRlbnQiLgotICAgICAgY29uZmlkZW5jZTogQSBudW1iZXIgZnJvbSAxLTUgcmVw
cmVzZW50aW5nIGEgY29uZmlkZW5jZSBzY29yZSBmb3IKLSAgICAgICAgICAgICAgICAgIHRoZSBl
cnJvciwgd2l0aCA1IG1lYW5pbmcgdGhhdCB3ZSBhcmUgY2VydGFpbiBvZiB0aGUgcHJvYmxlbSwK
LSAgICAgICAgICAgICAgICAgIGFuZCAxIG1lYW5pbmcgdGhhdCBpdCBjb3VsZCBiZSBhIGxlZ2l0
aW1hdGUgY29uc3RydWN0LgotICAgICAgbWVzc2FnZTogVGhlIGVycm9yIG1lc3NhZ2UuCi0gICAg
IiIiCi0gICAgIyBUaGVyZSBhcmUgdHdvIHdheXMgd2UgbWlnaHQgZGVjaWRlIG5vdCB0byBwcmlu
dCBhbiBlcnJvciBtZXNzYWdlOgotICAgICMgdGhlIHZlcmJvc2l0eSBsZXZlbCBpc24ndCBoaWdo
IGVub3VnaCwgb3IgdGhlIGZpbHRlcnMgZmlsdGVyIGl0IG91dC4KLSAgICBpZiBfc2hvdWxkX3By
aW50X2Vycm9yKGNhdGVnb3J5LCBjb25maWRlbmNlKToKLSAgICAgICAgX2NwcF9zdHlsZV9zdGF0
ZS5pbmNyZW1lbnRfZXJyb3JfY291bnQoKQotICAgICAgICBpZiBfY3BwX3N0eWxlX3N0YXRlLm91
dHB1dF9mb3JtYXQgPT0gJ3ZzNyc6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCclcygl
cyk6ICAlcyAgWyVzXSBbJWRdXG4nICUgKAotICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5l
X251bWJlciwgbWVzc2FnZSwgY2F0ZWdvcnksIGNvbmZpZGVuY2UpKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6JXM6ICAlcyAgWyVzXSBbJWRdXG4nICUg
KAotICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lX251bWJlciwgbWVzc2FnZSwgY2F0ZWdv
cnksIGNvbmZpZGVuY2UpKQotCi0KLSMgTWF0Y2hlcyBzdGFuZGFyZCBDKysgZXNjYXBlIGVzZXF1
ZW5jZXMgcGVyIDIuMTMuMi4zIG9mIHRoZSBDKysgc3RhbmRhcmQuCi1fUkVfUEFUVEVSTl9DTEVB
TlNFX0xJTkVfRVNDQVBFUyA9IHJlLmNvbXBpbGUoCi0gICAgcidcXChbYWJmbnJ0dj8iXFxcJ118
XGQrfHhbMC05YS1mQS1GXSspJykKLSMgTWF0Y2hlcyBzdHJpbmdzLiAgRXNjYXBlIGNvZGVzIHNo
b3VsZCBhbHJlYWR5IGJlIHJlbW92ZWQgYnkgRVNDQVBFUy4KLV9SRV9QQVRURVJOX0NMRUFOU0Vf
TElORV9ET1VCTEVfUVVPVEVTID0gcmUuY29tcGlsZShyJyJbXiJdKiInKQotIyBNYXRjaGVzIGNo
YXJhY3RlcnMuICBFc2NhcGUgY29kZXMgc2hvdWxkIGFscmVhZHkgYmUgcmVtb3ZlZCBieSBFU0NB
UEVTLgotX1JFX1BBVFRFUk5fQ0xFQU5TRV9MSU5FX1NJTkdMRV9RVU9URVMgPSByZS5jb21waWxl
KHIiJy4nIikKLSMgTWF0Y2hlcyBtdWx0aS1saW5lIEMrKyBjb21tZW50cy4KLSMgVGhpcyBSRSBp
cyBhIGxpdHRsZSBiaXQgbW9yZSBjb21wbGljYXRlZCB0aGFuIG9uZSBtaWdodCBleHBlY3QsIGJl
Y2F1c2Ugd2UKLSMgaGF2ZSB0byB0YWtlIGNhcmUgb2Ygc3BhY2UgcmVtb3ZhbHMgdG9vbHMgc28g
d2UgY2FuIGhhbmRsZSBjb21tZW50cyBpbnNpZGUKLSMgc3RhdGVtZW50cyBiZXR0ZXIuCi0jIFRo
ZSBjdXJyZW50IHJ1bGUgaXM6IFdlIG9ubHkgY2xlYXIgc3BhY2VzIGZyb20gYm90aCBzaWRlcyB3
aGVuIHdlJ3JlIGF0IHRoZQotIyBlbmQgb2YgdGhlIGxpbmUuIE90aGVyd2lzZSwgd2UgdHJ5IHRv
IHJlbW92ZSBzcGFjZXMgZnJvbSB0aGUgcmlnaHQgc2lkZSwKLSMgaWYgdGhpcyBkb2Vzbid0IHdv
cmsgd2UgdHJ5IG9uIGxlZnQgc2lkZSBidXQgb25seSBpZiB0aGVyZSdzIGEgbm9uLWNoYXJhY3Rl
cgotIyBvbiB0aGUgcmlnaHQuCi1fUkVfUEFUVEVSTl9DTEVBTlNFX0xJTkVfQ19DT01NRU5UUyA9
IHJlLmNvbXBpbGUoCi0gICAgciIiIihccyovXCouKlwqL1xzKiR8Ci0gICAgICAgICAgICAvXCou
KlwqL1xzK3wKLSAgICAgICAgIFxzKy9cKi4qXCovKD89XFcpfAotICAgICAgICAgICAgL1wqLipc
Ki8pIiIiLCByZS5WRVJCT1NFKQotCi0KLWRlZiBpc19jcHBfc3RyaW5nKGxpbmUpOgotICAgICIi
IkRvZXMgbGluZSB0ZXJtaW5hdGUgc28sIHRoYXQgdGhlIG5leHQgc3ltYm9sIGlzIGluIHN0cmlu
ZyBjb25zdGFudC4KLQotICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY29uc2lkZXIgc2luZ2xl
LWxpbmUgbm9yIG11bHRpLWxpbmUgY29tbWVudHMuCi0KLSAgICBBcmdzOgotICAgICAgbGluZTog
aXMgYSBwYXJ0aWFsIGxpbmUgb2YgY29kZSBzdGFydGluZyBmcm9tIHRoZSAwLi5uLgotCi0gICAg
UmV0dXJuczoKLSAgICAgIFRydWUsIGlmIG5leHQgY2hhcmFjdGVyIGFwcGVuZGVkIHRvICdsaW5l
JyBpcyBpbnNpZGUgYQotICAgICAgc3RyaW5nIGNvbnN0YW50LgotICAgICIiIgotCi0gICAgbGlu
ZSA9IGxpbmUucmVwbGFjZShyJ1xcJywgJ1hYJykgICMgYWZ0ZXIgdGhpcywgXFwiIGRvZXMgbm90
IG1hdGNoIHRvIFwiCi0gICAgcmV0dXJuICgobGluZS5jb3VudCgnIicpIC0gbGluZS5jb3VudChy
J1wiJykgLSBsaW5lLmNvdW50KCInXCInIikpICYgMSkgPT0gMQotCi0KLWRlZiBmaW5kX25leHRf
bXVsdGlfbGluZV9jb21tZW50X3N0YXJ0KGxpbmVzLCBsaW5lX2luZGV4KToKLSAgICAiIiJGaW5k
IHRoZSBiZWdpbm5pbmcgbWFya2VyIGZvciBhIG11bHRpbGluZSBjb21tZW50LiIiIgotICAgIHdo
aWxlIGxpbmVfaW5kZXggPCBsZW4obGluZXMpOgotICAgICAgICBpZiBsaW5lc1tsaW5lX2luZGV4
XS5zdHJpcCgpLnN0YXJ0c3dpdGgoJy8qJyk6Ci0gICAgICAgICAgICAjIE9ubHkgcmV0dXJuIHRo
aXMgbWFya2VyIGlmIHRoZSBjb21tZW50IGdvZXMgYmV5b25kIHRoaXMgbGluZQotICAgICAgICAg
ICAgaWYgbGluZXNbbGluZV9pbmRleF0uc3RyaXAoKS5maW5kKCcqLycsIDIpIDwgMDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbGluZV9pbmRleAotICAgICAgICBsaW5lX2luZGV4ICs9IDEKLSAg
ICByZXR1cm4gbGVuKGxpbmVzKQotCi0KLWRlZiBmaW5kX25leHRfbXVsdGlfbGluZV9jb21tZW50
X2VuZChsaW5lcywgbGluZV9pbmRleCk6Ci0gICAgIiIiV2UgYXJlIGluc2lkZSBhIGNvbW1lbnQs
IGZpbmQgdGhlIGVuZCBtYXJrZXIuIiIiCi0gICAgd2hpbGUgbGluZV9pbmRleCA8IGxlbihsaW5l
cyk6Ci0gICAgICAgIGlmIGxpbmVzW2xpbmVfaW5kZXhdLnN0cmlwKCkuZW5kc3dpdGgoJyovJyk6
Ci0gICAgICAgICAgICByZXR1cm4gbGluZV9pbmRleAotICAgICAgICBsaW5lX2luZGV4ICs9IDEK
LSAgICByZXR1cm4gbGVuKGxpbmVzKQotCi0KLWRlZiByZW1vdmVfbXVsdGlfbGluZV9jb21tZW50
c19mcm9tX3JhbmdlKGxpbmVzLCBiZWdpbiwgZW5kKToKLSAgICAiIiJDbGVhcnMgYSByYW5nZSBv
ZiBsaW5lcyBmb3IgbXVsdGktbGluZSBjb21tZW50cy4iIiIKLSAgICAjIEhhdmluZyAvLyBkdW1t
eSBjb21tZW50cyBtYWtlcyB0aGUgbGluZXMgbm9uLWVtcHR5LCBzbyB3ZSB3aWxsIG5vdCBnZXQK
LSAgICAjIHVubmVjZXNzYXJ5IGJsYW5rIGxpbmUgd2FybmluZ3MgbGF0ZXIgaW4gdGhlIGNvZGUu
Ci0gICAgZm9yIGkgaW4gcmFuZ2UoYmVnaW4sIGVuZCk6Ci0gICAgICAgIGxpbmVzW2ldID0gJy8v
IGR1bW15JwotCi0KLWRlZiByZW1vdmVfbXVsdGlfbGluZV9jb21tZW50cyhmaWxlbmFtZSwgbGlu
ZXMsIGVycm9yKToKLSAgICAiIiJSZW1vdmVzIG11bHRpbGluZSAoYy1zdHlsZSkgY29tbWVudHMg
ZnJvbSBsaW5lcy4iIiIKLSAgICBsaW5lX2luZGV4ID0gMAotICAgIHdoaWxlIGxpbmVfaW5kZXgg
PCBsZW4obGluZXMpOgotICAgICAgICBsaW5lX2luZGV4X2JlZ2luID0gZmluZF9uZXh0X211bHRp
X2xpbmVfY29tbWVudF9zdGFydChsaW5lcywgbGluZV9pbmRleCkKLSAgICAgICAgaWYgbGluZV9p
bmRleF9iZWdpbiA+PSBsZW4obGluZXMpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGxp
bmVfaW5kZXhfZW5kID0gZmluZF9uZXh0X211bHRpX2xpbmVfY29tbWVudF9lbmQobGluZXMsIGxp
bmVfaW5kZXhfYmVnaW4pCi0gICAgICAgIGlmIGxpbmVfaW5kZXhfZW5kID49IGxlbihsaW5lcyk6
Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9pbmRleF9iZWdpbiArIDEsICdyZWFk
YWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudCcsIDUsCi0gICAgICAgICAgICAgICAgICAnQ291bGQg
bm90IGZpbmQgZW5kIG9mIG11bHRpLWxpbmUgY29tbWVudCcpCi0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgcmVtb3ZlX211bHRpX2xpbmVfY29tbWVudHNfZnJvbV9yYW5nZShsaW5lcywgbGlu
ZV9pbmRleF9iZWdpbiwgbGluZV9pbmRleF9lbmQgKyAxKQotICAgICAgICBsaW5lX2luZGV4ID0g
bGluZV9pbmRleF9lbmQgKyAxCi0KLQotZGVmIGNsZWFuc2VfY29tbWVudHMobGluZSk6Ci0gICAg
IiIiUmVtb3ZlcyAvLy1jb21tZW50cyBhbmQgc2luZ2xlLWxpbmUgQy1zdHlsZSAvKiAqLyBjb21t
ZW50cy4KLQotICAgIEFyZ3M6Ci0gICAgICBsaW5lOiBBIGxpbmUgb2YgQysrIHNvdXJjZS4KLQot
ICAgIFJldHVybnM6Ci0gICAgICBUaGUgbGluZSB3aXRoIHNpbmdsZS1saW5lIGNvbW1lbnRzIHJl
bW92ZWQuCi0gICAgIiIiCi0gICAgY29tbWVudF9wb3NpdGlvbiA9IGxpbmUuZmluZCgnLy8nKQot
ICAgIGlmIGNvbW1lbnRfcG9zaXRpb24gIT0gLTEgYW5kIG5vdCBpc19jcHBfc3RyaW5nKGxpbmVb
OmNvbW1lbnRfcG9zaXRpb25dKToKLSAgICAgICAgbGluZSA9IGxpbmVbOmNvbW1lbnRfcG9zaXRp
b25dCi0gICAgIyBnZXQgcmlkIG9mIC8qIC4uLiAqLwotICAgIHJldHVybiBfUkVfUEFUVEVSTl9D
TEVBTlNFX0xJTkVfQ19DT01NRU5UUy5zdWIoJycsIGxpbmUpCi0KLQotY2xhc3MgQ2xlYW5zZWRM
aW5lcyhvYmplY3QpOgotICAgICIiIkhvbGRzIDMgY29waWVzIG9mIGFsbCBsaW5lcyB3aXRoIGRp
ZmZlcmVudCBwcmVwcm9jZXNzaW5nIGFwcGxpZWQgdG8gdGhlbS4KLQotICAgIDEpIGVsaWRlZCBt
ZW1iZXIgY29udGFpbnMgbGluZXMgd2l0aG91dCBzdHJpbmdzIGFuZCBjb21tZW50cywKLSAgICAy
KSBsaW5lcyBtZW1iZXIgY29udGFpbnMgbGluZXMgd2l0aG91dCBjb21tZW50cywgYW5kCi0gICAg
MykgcmF3IG1lbWJlciBjb250YWlucyBhbGwgdGhlIGxpbmVzIHdpdGhvdXQgcHJvY2Vzc2luZy4K
LSAgICBBbGwgdGhlc2UgdGhyZWUgbWVtYmVycyBhcmUgb2YgPHR5cGUgJ2xpc3QnPiwgYW5kIG9m
IHRoZSBzYW1lIGxlbmd0aC4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5l
cyk6Ci0gICAgICAgIHNlbGYuZWxpZGVkID0gW10KLSAgICAgICAgc2VsZi5saW5lcyA9IFtdCi0g
ICAgICAgIHNlbGYucmF3X2xpbmVzID0gbGluZXMKLSAgICAgICAgc2VsZi5fbnVtX2xpbmVzID0g
bGVuKGxpbmVzKQotICAgICAgICBmb3IgbGluZV9udW1iZXIgaW4gcmFuZ2UobGVuKGxpbmVzKSk6
Ci0gICAgICAgICAgICBzZWxmLmxpbmVzLmFwcGVuZChjbGVhbnNlX2NvbW1lbnRzKGxpbmVzW2xp
bmVfbnVtYmVyXSkpCi0gICAgICAgICAgICBlbGlkZWQgPSBzZWxmLmNvbGxhcHNlX3N0cmluZ3Mo
bGluZXNbbGluZV9udW1iZXJdKQotICAgICAgICAgICAgc2VsZi5lbGlkZWQuYXBwZW5kKGNsZWFu
c2VfY29tbWVudHMoZWxpZGVkKSkKLQotICAgIGRlZiBudW1fbGluZXMoc2VsZik6Ci0gICAgICAg
ICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBsaW5lcyByZXByZXNlbnRlZC4iIiIKLSAgICAgICAg
cmV0dXJuIHNlbGYuX251bV9saW5lcwotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjb2xs
YXBzZV9zdHJpbmdzKGVsaWRlZCk6Ci0gICAgICAgICIiIkNvbGxhcHNlcyBzdHJpbmdzIGFuZCBj
aGFycyBvbiBhIGxpbmUgdG8gc2ltcGxlICIiIG9yICcnIGJsb2Nrcy4KLQotICAgICAgICBXZSBu
aXggc3RyaW5ncyBmaXJzdCBzbyB3ZSdyZSBub3QgZm9vbGVkIGJ5IHRleHQgbGlrZSAnImh0dHA6
Ly8iJwotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZWxpZGVkOiBUaGUgbGluZSBiZWluZyBw
cm9jZXNzZWQuCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBUaGUgbGluZSB3aXRoIGNv
bGxhcHNlZCBzdHJpbmdzLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IF9SRV9QQVRURVJO
X0lOQ0xVREUubWF0Y2goZWxpZGVkKToKLSAgICAgICAgICAgICMgUmVtb3ZlIGVzY2FwZWQgY2hh
cmFjdGVycyBmaXJzdCB0byBtYWtlIHF1b3RlL3NpbmdsZSBxdW90ZSBjb2xsYXBzaW5nCi0gICAg
ICAgICAgICAjIGJhc2ljLiAgVGhpbmdzIHRoYXQgbG9vayBsaWtlIGVzY2FwZWQgY2hhcmFjdGVy
cyBzaG91bGRuJ3Qgb2NjdXIKLSAgICAgICAgICAgICMgb3V0c2lkZSBvZiBzdHJpbmdzIGFuZCBj
aGFycy4KLSAgICAgICAgICAgIGVsaWRlZCA9IF9SRV9QQVRURVJOX0NMRUFOU0VfTElORV9FU0NB
UEVTLnN1YignJywgZWxpZGVkKQotICAgICAgICAgICAgZWxpZGVkID0gX1JFX1BBVFRFUk5fQ0xF
QU5TRV9MSU5FX1NJTkdMRV9RVU9URVMuc3ViKCInJyIsIGVsaWRlZCkKLSAgICAgICAgICAgIGVs
aWRlZCA9IF9SRV9QQVRURVJOX0NMRUFOU0VfTElORV9ET1VCTEVfUVVPVEVTLnN1YignIiInLCBl
bGlkZWQpCi0gICAgICAgIHJldHVybiBlbGlkZWQKLQotCi1kZWYgY2xvc2VfZXhwcmVzc2lvbihj
bGVhbl9saW5lcywgbGluZV9udW1iZXIsIHBvcyk6Ci0gICAgIiIiSWYgaW5wdXQgcG9pbnRzIHRv
ICggb3IgeyBvciBbLCBmaW5kcyB0aGUgcG9zaXRpb24gdGhhdCBjbG9zZXMgaXQuCi0KLSAgICBJ
ZiBsaW5lc1tsaW5lX251bWJlcl1bcG9zXSBwb2ludHMgdG8gYSAnKCcgb3IgJ3snIG9yICdbJywg
ZmluZHMgdGhlIHRoZQotICAgIGxpbmVfbnVtYmVyL3BvcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhl
IGNsb3Npbmcgb2YgdGhlIGV4cHJlc3Npb24uCi0KLSAgICBBcmdzOgotICAgICAgY2xlYW5fbGlu
ZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAgICAg
bGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBwb3M6
IEEgcG9zaXRpb24gb24gdGhlIGxpbmUuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSB0dXBsZSAo
bGluZSwgbGluZV9udW1iZXIsIHBvcykgcG9pbnRlciAqcGFzdCogdGhlIGNsb3NpbmcgYnJhY2Us
IG9yCi0gICAgICAobGluZSwgbGVuKGxpbmVzKSwgLTEpIGlmIHdlIG5ldmVyIGZpbmQgYSBjbG9z
ZS4gIE5vdGUgd2UgaWdub3JlCi0gICAgICBzdHJpbmdzIGFuZCBjb21tZW50cyB3aGVuIG1hdGNo
aW5nOyBhbmQgdGhlIGxpbmUgd2UgcmV0dXJuIGlzIHRoZQotICAgICAgJ2NsZWFuc2VkJyBsaW5l
IGF0IGxpbmVfbnVtYmVyLgotICAgICIiIgotCi0gICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRl
ZFtsaW5lX251bWJlcl0KLSAgICBzdGFydF9jaGFyYWN0ZXIgPSBsaW5lW3Bvc10KLSAgICBpZiBz
dGFydF9jaGFyYWN0ZXIgbm90IGluICcoe1snOgotICAgICAgICByZXR1cm4gKGxpbmUsIGNsZWFu
X2xpbmVzLm51bV9saW5lcygpLCAtMSkKLSAgICBpZiBzdGFydF9jaGFyYWN0ZXIgPT0gJygnOgot
ICAgICAgICBlbmRfY2hhcmFjdGVyID0gJyknCi0gICAgaWYgc3RhcnRfY2hhcmFjdGVyID09ICdb
JzoKLSAgICAgICAgZW5kX2NoYXJhY3RlciA9ICddJwotICAgIGlmIHN0YXJ0X2NoYXJhY3RlciA9
PSAneyc6Ci0gICAgICAgIGVuZF9jaGFyYWN0ZXIgPSAnfScKLQotICAgIG51bV9vcGVuID0gbGlu
ZS5jb3VudChzdGFydF9jaGFyYWN0ZXIpIC0gbGluZS5jb3VudChlbmRfY2hhcmFjdGVyKQotICAg
IHdoaWxlIGxpbmVfbnVtYmVyIDwgY2xlYW5fbGluZXMubnVtX2xpbmVzKCkgYW5kIG51bV9vcGVu
ID4gMDoKLSAgICAgICAgbGluZV9udW1iZXIgKz0gMQotICAgICAgICBsaW5lID0gY2xlYW5fbGlu
ZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQotICAgICAgICBudW1fb3BlbiArPSBsaW5lLmNvdW50KHN0
YXJ0X2NoYXJhY3RlcikgLSBsaW5lLmNvdW50KGVuZF9jaGFyYWN0ZXIpCi0gICAgIyBPSywgbm93
IGZpbmQgdGhlIGVuZF9jaGFyYWN0ZXIgdGhhdCBhY3R1YWxseSBnb3QgdXMgYmFjayB0byBldmVu
Ci0gICAgZW5kcG9zID0gbGVuKGxpbmUpCi0gICAgd2hpbGUgbnVtX29wZW4gPj0gMDoKLSAgICAg
ICAgZW5kcG9zID0gbGluZS5yZmluZCgnKScsIDAsIGVuZHBvcykKLSAgICAgICAgbnVtX29wZW4g
LT0gMSAgICAgICAgICAgICAgICAgIyBjaG9wcGVkIG9mZiBhbm90aGVyICkKLSAgICByZXR1cm4g
KGxpbmUsIGxpbmVfbnVtYmVyLCBlbmRwb3MgKyAxKQotCi0KLWRlZiBjaGVja19mb3JfY29weXJp
Z2h0KGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpOgotICAgICIiIkxvZ3MgYW4gZXJyb3IgaWYgbm8g
Q29weXJpZ2h0IG1lc3NhZ2UgYXBwZWFycyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiIiIgotCi0g
ICAgIyBXZSdsbCBzYXkgaXQgc2hvdWxkIG9jY3VyIGJ5IGxpbmUgMTAuIERvbid0IGZvcmdldCB0
aGVyZSdzIGEKLSAgICAjIGR1bW15IGxpbmUgYXQgdGhlIGZyb250LgotICAgIGZvciBsaW5lIGlu
IHhyYW5nZSgxLCBtaW4obGVuKGxpbmVzKSwgMTEpKToKLSAgICAgICAgaWYgcmUuc2VhcmNoKHIn
Q29weXJpZ2h0JywgbGluZXNbbGluZV0sIHJlLkkpOgotICAgICAgICAgICAgYnJlYWsKLSAgICBl
bHNlOiAgICAgICAgICAgICAgICAgICAgICAgIyBtZWFucyBubyBjb3B5cmlnaHQgbGluZSB3YXMg
Zm91bmQKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIDAsICdsZWdhbC9jb3B5cmlnaHQnLCA1LAot
ICAgICAgICAgICAgICAnTm8gY29weXJpZ2h0IG1lc3NhZ2UgZm91bmQuICAnCi0gICAgICAgICAg
ICAgICdZb3Ugc2hvdWxkIGhhdmUgYSBsaW5lOiAiQ29weXJpZ2h0IFt5ZWFyXSA8Q29weXJpZ2h0
IE93bmVyPiInKQotCi0KLWRlZiBnZXRfaGVhZGVyX2d1YXJkX2NwcF92YXJpYWJsZShmaWxlbmFt
ZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgQ1BQIHZhcmlhYmxlIHRoYXQgc2hvdWxkIGJlIHVzZWQg
YXMgYSBoZWFkZXIgZ3VhcmQuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1l
IG9mIGEgQysrIGhlYWRlciBmaWxlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBDUFAgdmFy
aWFibGUgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBhIGhlYWRlciBndWFyZCBpbiB0aGUKLSAgICAg
IG5hbWVkIGZpbGUuCi0KLSAgICAiIiIKLQotICAgIHJldHVybiBzdWIocidbLS5cc10nLCAnXycs
IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKQotCi0KLWRlZiBjaGVja19mb3JfaGVhZGVyX2d1
YXJkKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpOgotICAgICIiIkNoZWNrcyB0aGF0IHRoZSBmaWxl
IGNvbnRhaW5zIGEgaGVhZGVyIGd1YXJkLgotCi0gICAgTG9ncyBhbiBlcnJvciBpZiBubyAjaWZu
ZGVmIGhlYWRlciBndWFyZCBpcyBwcmVzZW50LiAgRm9yIG90aGVyCi0gICAgaGVhZGVycywgY2hl
Y2tzIHRoYXQgdGhlIGZ1bGwgcGF0aG5hbWUgaXMgdXNlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBm
aWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIEMrKyBoZWFkZXIgZmlsZS4KLSAgICAgIGxpbmVzOiBB
biBhcnJheSBvZiBzdHJpbmdzLCBlYWNoIHJlcHJlc2VudGluZyBhIGxpbmUgb2YgdGhlIGZpbGUu
Ci0gICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5k
LgotICAgICIiIgotCi0gICAgY3BwdmFyID0gZ2V0X2hlYWRlcl9ndWFyZF9jcHBfdmFyaWFibGUo
ZmlsZW5hbWUpCi0KLSAgICBpZm5kZWYgPSBOb25lCi0gICAgaWZuZGVmX2xpbmVfbnVtYmVyID0g
MAotICAgIGRlZmluZSA9IE5vbmUKLSAgICBlbmRpZiA9IE5vbmUKLSAgICBlbmRpZl9saW5lX251
bWJlciA9IDAKLSAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToK
LSAgICAgICAgbGluZV9zcGxpdCA9IGxpbmUuc3BsaXQoKQotICAgICAgICBpZiBsZW4obGluZV9z
cGxpdCkgPj0gMjoKLSAgICAgICAgICAgICMgZmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAj
aWZuZGVmIGFuZCAjZGVmaW5lLCBzYXZlIGFyZwotICAgICAgICAgICAgaWYgbm90IGlmbmRlZiBh
bmQgbGluZV9zcGxpdFswXSA9PSAnI2lmbmRlZic6Ci0gICAgICAgICAgICAgICAgIyBzZXQgaWZu
ZGVmIHRvIHRoZSBoZWFkZXIgZ3VhcmQgcHJlc2VudGVkIG9uIHRoZSAjaWZuZGVmIGxpbmUuCi0g
ICAgICAgICAgICAgICAgaWZuZGVmID0gbGluZV9zcGxpdFsxXQotICAgICAgICAgICAgICAgIGlm
bmRlZl9saW5lX251bWJlciA9IGxpbmVfbnVtYmVyCi0gICAgICAgICAgICBpZiBub3QgZGVmaW5l
IGFuZCBsaW5lX3NwbGl0WzBdID09ICcjZGVmaW5lJzoKLSAgICAgICAgICAgICAgICBkZWZpbmUg
PSBsaW5lX3NwbGl0WzFdCi0gICAgICAgICMgZmluZCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICNl
bmRpZiwgc2F2ZSBlbnRpcmUgbGluZQotICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyNlbmRp
ZicpOgotICAgICAgICAgICAgZW5kaWYgPSBsaW5lCi0gICAgICAgICAgICBlbmRpZl9saW5lX251
bWJlciA9IGxpbmVfbnVtYmVyCi0KLSAgICBpZiBub3QgaWZuZGVmIG9yIG5vdCBkZWZpbmUgb3Ig
aWZuZGVmICE9IGRlZmluZToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIDAsICdidWlsZC9oZWFk
ZXJfZ3VhcmQnLCA1LAotICAgICAgICAgICAgICAnTm8gI2lmbmRlZiBoZWFkZXIgZ3VhcmQgZm91
bmQsIHN1Z2dlc3RlZCBDUFAgdmFyaWFibGUgaXM6ICVzJyAlCi0gICAgICAgICAgICAgIGNwcHZh
cikKLSAgICAgICAgcmV0dXJuCi0KLSAgICAjIFRoZSBndWFyZCBzaG91bGQgYmUgRmlsZV9oLgot
ICAgIGlmIGlmbmRlZiAhPSBjcHB2YXI6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBpZm5kZWZf
bGluZV9udW1iZXIsICdidWlsZC9oZWFkZXJfZ3VhcmQnLCA1LAotICAgICAgICAgICAgICAnI2lm
bmRlZiBoZWFkZXIgZ3VhcmQgaGFzIHdyb25nIHN0eWxlLCBwbGVhc2UgdXNlOiAlcycgJSBjcHB2
YXIpCi0KLSAgICBpZiBlbmRpZiAhPSAoJyNlbmRpZiAvLyAlcycgJSBjcHB2YXIpOgotICAgICAg
ICBlcnJvcihmaWxlbmFtZSwgZW5kaWZfbGluZV9udW1iZXIsICdidWlsZC9oZWFkZXJfZ3VhcmQn
LCA1LAotICAgICAgICAgICAgICAnI2VuZGlmIGxpbmUgc2hvdWxkIGJlICIjZW5kaWYgLy8gJXMi
JyAlIGNwcHZhcikKLQotCi1kZWYgY2hlY2tfZm9yX3VuaWNvZGVfcmVwbGFjZW1lbnRfY2hhcmFj
dGVycyhmaWxlbmFtZSwgbGluZXMsIGVycm9yKToKLSAgICAiIiJMb2dzIGFuIGVycm9yIGZvciBl
YWNoIGxpbmUgY29udGFpbmluZyBVbmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMuCi0KLSAg
ICBUaGVzZSBpbmRpY2F0ZSB0aGF0IGVpdGhlciB0aGUgZmlsZSBjb250YWluZWQgaW52YWxpZCBV
VEYtOCAobGlrZWx5KQotICAgIG9yIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVycyAod2hp
Y2ggaXQgc2hvdWxkbid0KS4gIE5vdGUgdGhhdAotICAgIGl0J3MgcG9zc2libGUgZm9yIHRoaXMg
dG8gdGhyb3cgb2ZmIGxpbmUgbnVtYmVyaW5nIGlmIHRoZSBpbnZhbGlkCi0gICAgVVRGLTggb2Nj
dXJyZWQgYWRqYWNlbnQgdG8gYSBuZXdsaW5lLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1l
OiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgbGluZXM6IEFuIGFycmF5IG9m
IHN0cmluZ3MsIGVhY2ggcmVwcmVzZW50aW5nIGEgbGluZSBvZiB0aGUgZmlsZS4KLSAgICAgIGVy
cm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIi
Ci0gICAgZm9yIGxpbmVfbnVtYmVyLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcyk6Ci0gICAgICAg
IGlmIHUnXHVmZmZkJyBpbiBsaW5lOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVf
bnVtYmVyLCAncmVhZGFiaWxpdHkvdXRmOCcsIDUsCi0gICAgICAgICAgICAgICAgICAnTGluZSBj
b250YWlucyBpbnZhbGlkIFVURi04IChvciBVbmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3Rlciku
JykKLQotCi1kZWYgY2hlY2tfZm9yX25ld19saW5lX2F0X2VvZihmaWxlbmFtZSwgbGluZXMsIGVy
cm9yKToKLSAgICAiIiJMb2dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIG5ld2xpbmUgY2hhciBh
dCB0aGUgZW5kIG9mIHRoZSBmaWxlLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1lOiBUaGUg
bmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgbGluZXM6IEFuIGFycmF5IG9mIHN0cmlu
Z3MsIGVhY2ggcmVwcmVzZW50aW5nIGEgbGluZSBvZiB0aGUgZmlsZS4KLSAgICAgIGVycm9yOiBU
aGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIiCi0KLSAg
ICAjIFRoZSBhcnJheSBsaW5lcygpIHdhcyBjcmVhdGVkIGJ5IGFkZGluZyB0d28gbmV3bGluZXMg
dG8gdGhlCi0gICAgIyBvcmlnaW5hbCBmaWxlIChnbyBmaWd1cmUpLCB0aGVuIHNwbGl0dGluZyBv
biBcbi4KLSAgICAjIFRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlIGVuZHMgaW4gXG4sIHdlIGp1c3Qg
aGF2ZSB0byBtYWtlIHN1cmUgdGhlCi0gICAgIyBsYXN0LWJ1dC10d28gZWxlbWVudCBvZiBsaW5l
cygpIGV4aXN0cyBhbmQgaXMgZW1wdHkuCi0gICAgaWYgbGVuKGxpbmVzKSA8IDMgb3IgbGluZXNb
LTJdOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGVuKGxpbmVzKSAtIDIsICd3aGl0ZXNwYWNl
L2VuZGluZ19uZXdsaW5lJywgNSwKLSAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGEgbmV3
bGluZSBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4nKQotCi0KLWRlZiBjaGVja19m
b3JfbXVsdGlsaW5lX2NvbW1lbnRzX2FuZF9zdHJpbmdzKGZpbGVuYW1lLCBjbGVhbl9saW5lcywg
bGluZV9udW1iZXIsIGVycm9yKToKLSAgICAiIiJMb2dzIGFuIGVycm9yIGlmIHdlIHNlZSAvKiAu
Li4gKi8gb3IgIi4uLiIgdGhhdCBleHRlbmQgcGFzdCBvbmUgbGluZS4KLQotICAgIC8qIC4uLiAq
LyBjb21tZW50cyBhcmUgbGVnaXQgaW5zaWRlIG1hY3JvcywgZm9yIG9uZSBsaW5lLgotICAgIE90
aGVyd2lzZSwgd2UgcHJlZmVyIC8vIGNvbW1lbnRzLCBzbyBpdCdzIG9rIHRvIHdhcm4gYWJvdXQg
dGhlCi0gICAgb3RoZXIuICBMaWtld2lzZSwgaXQncyBvayBmb3Igc3RyaW5ncyB0byBleHRlbmQg
YWNyb3NzIG11bHRpcGxlCi0gICAgbGluZXMsIGFzIGxvbmcgYXMgYSBsaW5lIGNvbnRpbnVhdGlv
biBjaGFyYWN0ZXIgKGJhY2tzbGFzaCkKLSAgICB0ZXJtaW5hdGVzIGVhY2ggbGluZS4gQWx0aG91
Z2ggbm90IGN1cnJlbnRseSBwcm9oaWJpdGVkIGJ5IHRoZSBDKysKLSAgICBzdHlsZSBndWlkZSwg
aXQncyB1Z2x5IGFuZCB1bm5lY2Vzc2FyeS4gV2UgZG9uJ3QgZG8gd2VsbCB3aXRoIGVpdGhlcgot
ICAgIGluIHRoaXMgbGludCBwcm9ncmFtLCBzbyB3ZSB3YXJuIGFib3V0IGJvdGguCi0KLSAgICBB
cmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAg
ICBjbGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZp
bGUuCi0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4K
LSAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQu
Ci0gICAgIiIiCi0gICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0KLQot
ICAgICMgUmVtb3ZlIGFsbCBcXCAoZXNjYXBlZCBiYWNrc2xhc2hlcykgZnJvbSB0aGUgbGluZS4g
VGhleSBhcmUgT0ssIGFuZCB0aGUKLSAgICAjIHNlY29uZCAoZXNjYXBlZCkgc2xhc2ggbWF5IHRy
aWdnZXIgbGF0ZXIgXCIgZGV0ZWN0aW9uIGVycm9uZW91c2x5LgotICAgIGxpbmUgPSBsaW5lLnJl
cGxhY2UoJ1xcXFwnLCAnJykKLQotICAgIGlmIGxpbmUuY291bnQoJy8qJykgPiBsaW5lLmNvdW50
KCcqLycpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0
eS9tdWx0aWxpbmVfY29tbWVudCcsIDUsCi0gICAgICAgICAgICAgICdDb21wbGV4IG11bHRpLWxp
bmUgLyouLi4qLy1zdHlsZSBjb21tZW50IGZvdW5kLiAnCi0gICAgICAgICAgICAgICdMaW50IG1h
eSBnaXZlIGJvZ3VzIHdhcm5pbmdzLiAgJwotICAgICAgICAgICAgICAnQ29uc2lkZXIgcmVwbGFj
aW5nIHRoZXNlIHdpdGggLy8tc3R5bGUgY29tbWVudHMsICcKLSAgICAgICAgICAgICAgJ3dpdGgg
I2lmIDAuLi4jZW5kaWYsICcKLSAgICAgICAgICAgICAgJ29yIHdpdGggbW9yZSBjbGVhcmx5IHN0
cnVjdHVyZWQgbXVsdGktbGluZSBjb21tZW50cy4nKQotCi0gICAgaWYgKGxpbmUuY291bnQoJyIn
KSAtIGxpbmUuY291bnQoJ1xcIicpKSAlIDI6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5l
X251bWJlciwgJ3JlYWRhYmlsaXR5L211bHRpbGluZV9zdHJpbmcnLCA1LAotICAgICAgICAgICAg
ICAnTXVsdGktbGluZSBzdHJpbmcgKCIuLi4iKSBmb3VuZC4gIFRoaXMgbGludCBzY3JpcHQgZG9l
c25cJ3QgJwotICAgICAgICAgICAgICAnZG8gd2VsbCB3aXRoIHN1Y2ggc3RyaW5ncywgYW5kIG1h
eSBnaXZlIGJvZ3VzIHdhcm5pbmdzLiAgVGhleVwncmUgJwotICAgICAgICAgICAgICAndWdseSBh
bmQgdW5uZWNlc3NhcnksIGFuZCB5b3Ugc2hvdWxkIHVzZSBjb25jYXRlbmF0aW9uIGluc3RlYWQi
LicpCi0KLQotX1RIUkVBRElOR19MSVNUID0gKAotICAgICgnYXNjdGltZSgnLCAnYXNjdGltZV9y
KCcpLAotICAgICgnY3RpbWUoJywgJ2N0aW1lX3IoJyksCi0gICAgKCdnZXRncmdpZCgnLCAnZ2V0
Z3JnaWRfcignKSwKLSAgICAoJ2dldGdybmFtKCcsICdnZXRncm5hbV9yKCcpLAotICAgICgnZ2V0
bG9naW4oJywgJ2dldGxvZ2luX3IoJyksCi0gICAgKCdnZXRwd25hbSgnLCAnZ2V0cHduYW1fcign
KSwKLSAgICAoJ2dldHB3dWlkKCcsICdnZXRwd3VpZF9yKCcpLAotICAgICgnZ210aW1lKCcsICdn
bXRpbWVfcignKSwKLSAgICAoJ2xvY2FsdGltZSgnLCAnbG9jYWx0aW1lX3IoJyksCi0gICAgKCdy
YW5kKCcsICdyYW5kX3IoJyksCi0gICAgKCdyZWFkZGlyKCcsICdyZWFkZGlyX3IoJyksCi0gICAg
KCdzdHJ0b2soJywgJ3N0cnRva19yKCcpLAotICAgICgndHR5bmFtZSgnLCAndHR5bmFtZV9yKCcp
LAotICAgICkKLQotCi1kZWYgY2hlY2tfcG9zaXhfdGhyZWFkaW5nKGZpbGVuYW1lLCBjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKLSAgICAiIiJDaGVja3MgZm9yIGNhbGxzIHRvIHRo
cmVhZC11bnNhZmUgZnVuY3Rpb25zLgotCi0gICAgTXVjaCBjb2RlIGhhcyBiZWVuIG9yaWdpbmFs
bHkgd3JpdHRlbiB3aXRob3V0IGNvbnNpZGVyYXRpb24gb2YKLSAgICBtdWx0aS10aHJlYWRpbmcu
IEFsc28sIGVuZ2luZWVycyBhcmUgcmVseWluZyBvbiB0aGVpciBvbGQgZXhwZXJpZW5jZTsKLSAg
ICB0aGV5IGhhdmUgbGVhcm5lZCBwb3NpeCBiZWZvcmUgdGhyZWFkaW5nIGV4dGVuc2lvbnMgd2Vy
ZSBhZGRlZC4gVGhlc2UKLSAgICB0ZXN0cyBndWlkZSB0aGUgZW5naW5lZXJzIHRvIHVzZSB0aHJl
YWQtc2FmZSBmdW5jdGlvbnMgKHdoZW4gdXNpbmcKLSAgICBwb3NpeCBkaXJlY3RseSkuCi0KLSAg
ICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0g
ICAgICBjbGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhl
IGZpbGUuCi0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVj
ay4KLSAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91
bmQuCi0gICAgIiIiCi0gICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0K
LSAgICBmb3Igc2luZ2xlX3RocmVhZF9mdW5jdGlvbiwgbXVsdGl0aHJlYWRfc2FmZV9mdW5jdGlv
biBpbiBfVEhSRUFESU5HX0xJU1Q6Ci0gICAgICAgIGluZGV4ID0gbGluZS5maW5kKHNpbmdsZV90
aHJlYWRfZnVuY3Rpb24pCi0gICAgICAgICMgQ29tcGFyaXNvbnMgbWFkZSBleHBsaWNpdCBmb3Ig
Y2xhcml0eSAtLSBweWxpbnQ6IGRpc2FibGUtbXNnPUM2NDAzCi0gICAgICAgIGlmIGluZGV4ID49
IDAgYW5kIChpbmRleCA9PSAwIG9yIChub3QgbGluZVtpbmRleCAtIDFdLmlzYWxudW0oKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxpbmVbaW5kZXggLSAx
XSBub3QgaW4gKCdfJywgJy4nLCAnPicpKSk6Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICdydW50aW1lL3RocmVhZHNhZmVfZm4nLCAyLAotICAgICAgICAgICAgICAg
ICAgJ0NvbnNpZGVyIHVzaW5nICcgKyBtdWx0aXRocmVhZF9zYWZlX2Z1bmN0aW9uICsKLSAgICAg
ICAgICAgICAgICAgICcuLi4pIGluc3RlYWQgb2YgJyArIHNpbmdsZV90aHJlYWRfZnVuY3Rpb24g
KwotICAgICAgICAgICAgICAgICAgJy4uLikgZm9yIGltcHJvdmVkIHRocmVhZCBzYWZldHkuJykK
LQotCi0jIE1hdGNoZXMgaW52YWxpZCBpbmNyZW1lbnQ6ICpjb3VudCsrLCB3aGljaCBtb3ZlcyBw
b2ludGVyIGluc3RlYWQgb2YKLSMgaW5jcmVtZW50aW5nIGEgdmFsdWUuCi1fUkVfUEFUVEVSTl9J
TlZBTElEX0lOQ1JFTUVOVCA9IHJlLmNvbXBpbGUoCi0gICAgcideXHMqXCpcdysoXCtcK3wtLSk7
JykKLQotCi1kZWYgY2hlY2tfaW52YWxpZF9pbmNyZW1lbnQoZmlsZW5hbWUsIGNsZWFuX2xpbmVz
LCBsaW5lX251bWJlciwgZXJyb3IpOgotICAgICIiIkNoZWNrcyBmb3IgaW52YWxpZCBpbmNyZW1l
bnQgKmNvdW50KysuCi0KLSAgICBGb3IgZXhhbXBsZSBmb2xsb3dpbmcgZnVuY3Rpb246Ci0gICAg
dm9pZCBpbmNyZW1lbnRfY291bnRlcihpbnQqIGNvdW50KSB7Ci0gICAgICAgICpjb3VudCsrOwot
ICAgIH0KLSAgICBpcyBpbnZhbGlkLCBiZWNhdXNlIGl0IGVmZmVjdGl2ZWx5IGRvZXMgY291bnQr
KywgbW92aW5nIHBvaW50ZXIsIGFuZCBzaG91bGQKLSAgICBiZSByZXBsYWNlZCB3aXRoICsrKmNv
dW50LCAoKmNvdW50KSsrIG9yICpjb3VudCArPSAxLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVu
YW1lOiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgY2xlYW5fbGluZXM6IEEg
Q2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAgICAgbGluZV9u
dW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBlcnJvcjogVGhl
IGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgotICAgICIiIgotICAgIGxp
bmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdCi0gICAgaWYgX1JFX1BBVFRFUk5f
SU5WQUxJRF9JTkNSRU1FTlQubWF0Y2gobGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBs
aW5lX251bWJlciwgJ3J1bnRpbWUvaW52YWxpZF9pbmNyZW1lbnQnLCA1LAotICAgICAgICAgICAg
ICAnQ2hhbmdpbmcgcG9pbnRlciBpbnN0ZWFkIG9mIHZhbHVlIChvciB1bnVzZWQgdmFsdWUgb2Yg
b3BlcmF0b3IqKS4nKQotCi0KLWNsYXNzIF9DbGFzc0luZm8ob2JqZWN0KToKLSAgICAiIiJTdG9y
ZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBjbGFzcy4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBuYW1lLCBsaW5lX251bWJlcik6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAg
c2VsZi5saW5lX251bWJlciA9IGxpbmVfbnVtYmVyCi0gICAgICAgIHNlbGYuc2Vlbl9vcGVuX2Jy
YWNlID0gRmFsc2UKLSAgICAgICAgc2VsZi5pc19kZXJpdmVkID0gRmFsc2UKLSAgICAgICAgc2Vs
Zi52aXJ0dWFsX21ldGhvZF9saW5lX251bWJlciA9IE5vbmUKLSAgICAgICAgc2VsZi5oYXNfdmly
dHVhbF9kZXN0cnVjdG9yID0gRmFsc2UKLSAgICAgICAgc2VsZi5icmFjZV9kZXB0aCA9IDAKLQot
Ci1jbGFzcyBfQ2xhc3NTdGF0ZShvYmplY3QpOgotICAgICIiIkhvbGRzIHRoZSBjdXJyZW50IHN0
YXRlIG9mIHRoZSBwYXJzZSByZWxhdGluZyB0byBjbGFzcyBkZWNsYXJhdGlvbnMuCi0KLSAgICBJ
dCBtYWludGFpbnMgYSBzdGFjayBvZiBfQ2xhc3NJbmZvcyByZXByZXNlbnRpbmcgdGhlIHBhcnNl
cidzIGd1ZXNzCi0gICAgYXMgdG8gdGhlIGN1cnJlbnQgbmVzdGluZyBvZiBjbGFzcyBkZWNsYXJh
dGlvbnMuIFRoZSBpbm5lcm1vc3QgY2xhc3MKLSAgICBpcyBhdCB0aGUgdG9wIChiYWNrKSBvZiB0
aGUgc3RhY2suIFR5cGljYWxseSwgdGhlIHN0YWNrIHdpbGwgZWl0aGVyCi0gICAgYmUgZW1wdHkg
b3IgaGF2ZSBleGFjdGx5IG9uZSBlbnRyeS4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgc2VsZi5jbGFzc2luZm9fc3RhY2sgPSBbXQotCi0gICAgZGVmIGNoZWNr
X2ZpbmlzaGVkKHNlbGYsIGZpbGVuYW1lLCBlcnJvcik6Ci0gICAgICAgICIiIkNoZWNrcyB0aGF0
IGFsbCBjbGFzc2VzIGhhdmUgYmVlbiBjb21wbGV0ZWx5IHBhcnNlZC4KLQotICAgICAgICBDYWxs
IHRoaXMgd2hlbiBhbGwgbGluZXMgaW4gYSBmaWxlIGhhdmUgYmVlbiBwcm9jZXNzZWQuCi0gICAg
ICAgIEFyZ3M6Ci0gICAgICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZp
bGUuCi0gICAgICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9y
cyBmb3VuZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuY2xhc3NpbmZvX3N0YWNrOgot
ICAgICAgICAgICAgIyBOb3RlOiBUaGlzIHRlc3QgY2FuIHJlc3VsdCBpbiBmYWxzZSBwb3NpdGl2
ZXMgaWYgI2lmZGVmIGNvbnN0cnVjdHMKLSAgICAgICAgICAgICMgZ2V0IGluIHRoZSB3YXkgb2Yg
YnJhY2UgbWF0Y2hpbmcuIFNlZSB0aGUgdGVzdEJ1aWxkQ2xhc3MgdGVzdCBpbgotICAgICAgICAg
ICAgIyBjcHBfc3R5bGVfdW5pdHRlc3QucHkgZm9yIGFuIGV4YW1wbGUgb2YgdGhpcy4KLSAgICAg
ICAgICAgIGVycm9yKGZpbGVuYW1lLCBzZWxmLmNsYXNzaW5mb19zdGFja1swXS5saW5lX251bWJl
ciwgJ2J1aWxkL2NsYXNzJywgNSwKLSAgICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gZmluZCBj
b21wbGV0ZSBkZWNsYXJhdGlvbiBvZiBjbGFzcyAlcycgJQotICAgICAgICAgICAgICAgICAgc2Vs
Zi5jbGFzc2luZm9fc3RhY2tbMF0ubmFtZSkKLQotCi1jbGFzcyBfRmlsZVN0YXRlKG9iamVjdCk6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9kaWRfaW5zaWRlX25hbWVz
cGFjZV9pbmRlbnRfd2FybmluZyA9IEZhbHNlCi0KLSAgICBkZWYgc2V0X2RpZF9pbnNpZGVfbmFt
ZXNwYWNlX2luZGVudF93YXJuaW5nKHNlbGYpOgotICAgICAgICBzZWxmLl9kaWRfaW5zaWRlX25h
bWVzcGFjZV9pbmRlbnRfd2FybmluZyA9IFRydWUKLQotICAgIGRlZiBkaWRfaW5zaWRlX25hbWVz
cGFjZV9pbmRlbnRfd2FybmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RpZF9pbnNp
ZGVfbmFtZXNwYWNlX2luZGVudF93YXJuaW5nCi0KLWRlZiBjaGVja19mb3Jfbm9uX3N0YW5kYXJk
X2NvbnN0cnVjdHMoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nfc3RhdGUsIGVycm9yKToKLSAgICAi
IiJMb2dzIGFuIGVycm9yIGlmIHdlIHNlZSBjZXJ0YWluIG5vbi1BTlNJIGNvbnN0cnVjdHMgaWdu
b3JlZCBieSBnY2MtMi4KLQotICAgIENvbXBsYWluIGFib3V0IHNldmVyYWwgY29uc3RydWN0cyB3
aGljaCBnY2MtMiBhY2NlcHRzLCBidXQgd2hpY2ggYXJlCi0gICAgbm90IHN0YW5kYXJkIEMrKy4g
IFdhcm5pbmcgYWJvdXQgdGhlc2UgaW4gbGludCBpcyBvbmUgd2F5IHRvIGVhc2UgdGhlCi0gICAg
dHJhbnNpdGlvbiB0byBuZXcgY29tcGlsZXJzLgotICAgIC0gcHV0IHN0b3JhZ2UgY2xhc3MgZmly
c3QgKGUuZy4gInN0YXRpYyBjb25zdCIgaW5zdGVhZCBvZiAiY29uc3Qgc3RhdGljIikuCi0gICAg
LSAiJWxsZCIgaW5zdGVhZCBvZiAlcWQiIGluIHByaW50Zi10eXBlIGZ1bmN0aW9ucy4KLSAgICAt
ICIlMSRkIiBpcyBub24tc3RhbmRhcmQgaW4gcHJpbnRmLXR5cGUgZnVuY3Rpb25zLgotICAgIC0g
IlwlIiBpcyBhbiB1bmRlZmluZWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZS4KLSAgICAtIHRl
eHQgYWZ0ZXIgI2VuZGlmIGlzIG5vdCBhbGxvd2VkLgotICAgIC0gaW52YWxpZCBpbm5lci1zdHls
ZSBmb3J3YXJkIGRlY2xhcmF0aW9uLgotICAgIC0gPj8gYW5kIDw/IG9wZXJhdG9ycywgYW5kIHRo
ZWlyID4/PSBhbmQgPD89IGNvdXNpbnMuCi0gICAgLSBjbGFzc2VzIHdpdGggdmlydHVhbCBtZXRo
b2RzIG5lZWQgdmlydHVhbCBkZXN0cnVjdG9ycyAoY29tcGlsZXIgd2FybmluZwotICAgICAgICBh
dmFpbGFibGUsIGJ1dCBub3QgdHVybmVkIG9uIHlldC4pCi0KLSAgICBBZGRpdGlvbmFsbHksIGNo
ZWNrIGZvciBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIHN0eWxlIHZpb2xhdGlvbnMgYXMgaXQKLSAg
ICBpcyB2ZXJ5IGNvbnZlbmllbnQgdG8gZG8gc28gd2hpbGUgY2hlY2tpbmcgZm9yIGdjYy0yIGNv
bXBsaWFuY2UuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBj
dXJyZW50IGZpbGUuCi0gICAgICBjbGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNl
IGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0
aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGNsYXNzX3N0YXRlOiBBIF9DbGFzc1N0YXRlIGluc3Rh
bmNlIHdoaWNoIG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dAotICAgICAgICAgICAgICAgICAg
IHRoZSBjdXJyZW50IHN0YWNrIG9mIG5lc3RlZCBjbGFzcyBkZWNsYXJhdGlvbnMgYmVpbmcgcGFy
c2VkLgotICAgICAgZXJyb3I6IEEgY2FsbGFibGUgdG8gd2hpY2ggZXJyb3JzIGFyZSByZXBvcnRl
ZCwgd2hpY2ggdGFrZXMgNCBhcmd1bWVudHM6Ci0gICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmUg
bnVtYmVyLCBlcnJvciBsZXZlbCwgYW5kIG1lc3NhZ2UKLSAgICAiIiIKLQotICAgICMgUmVtb3Zl
IGNvbW1lbnRzIGZyb20gdGhlIGxpbmUsIGJ1dCBsZWF2ZSBpbiBzdHJpbmdzIGZvciBub3cuCi0g
ICAgbGluZSA9IGNsZWFuX2xpbmVzLmxpbmVzW2xpbmVfbnVtYmVyXQotCi0gICAgaWYgc2VhcmNo
KHIncHJpbnRmXHMqXCguKiIuKiVbLSsgXT9cZCpxJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZp
bGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcHJpbnRmX2Zvcm1hdCcsIDMsCi0gICAgICAg
ICAgICAgICclcSBpbiBmb3JtYXQgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiAgVXNlICVsbCBpbnN0
ZWFkLicpCi0KLSAgICBpZiBzZWFyY2gocidwcmludGZccypcKC4qIi4qJVxkK1wkJywgbGluZSk6
Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcHJpbnRmX2Zv
cm1hdCcsIDIsCi0gICAgICAgICAgICAgICclTiQgZm9ybWF0cyBhcmUgdW5jb252ZW50aW9uYWwu
ICBUcnkgcmV3cml0aW5nIHRvIGF2b2lkIHRoZW0uJykKLQotICAgICMgUmVtb3ZlIGVzY2FwZWQg
YmFja3NsYXNoZXMgYmVmb3JlIGxvb2tpbmcgZm9yIHVuZGVmaW5lZCBlc2NhcGVzLgotICAgIGxp
bmUgPSBsaW5lLnJlcGxhY2UoJ1xcXFwnLCAnJykKLQotICAgIGlmIHNlYXJjaChyJygifFwnKS4q
XFwoJXxcW3xcKHx7KScsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1i
ZXIsICdidWlsZC9wcmludGZfZm9ybWF0JywgMywKLSAgICAgICAgICAgICAgJyUsIFssICgsIGFu
ZCB7IGFyZSB1bmRlZmluZWQgY2hhcmFjdGVyIGVzY2FwZXMuICBVbmVzY2FwZSB0aGVtLicpCi0K
LSAgICAjIEZvciB0aGUgcmVzdCwgd29yayB3aXRoIGJvdGggY29tbWVudHMgYW5kIHN0cmluZ3Mg
cmVtb3ZlZC4KLSAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQotCi0g
ICAgaWYgc2VhcmNoKHInXGIoY29uc3R8dm9sYXRpbGV8dm9pZHxjaGFyfHNob3J0fGludHxsb25n
JwotICAgICAgICAgICAgICByJ3xmbG9hdHxkb3VibGV8c2lnbmVkfHVuc2lnbmVkJwotICAgICAg
ICAgICAgICByJ3xzY2hhcnx1P2ludDh8dT9pbnQxNnx1P2ludDMyfHU/aW50NjQpJwotICAgICAg
ICAgICAgICByJ1xzKyhhdXRvfHJlZ2lzdGVyfHN0YXRpY3xleHRlcm58dHlwZWRlZilcYicsCi0g
ICAgICAgICAgICAgIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICdidWlsZC9zdG9yYWdlX2NsYXNzJywgNSwKLSAgICAgICAgICAgICAgJ1N0b3JhZ2UgY2xhc3Mg
KHN0YXRpYywgZXh0ZXJuLCB0eXBlZGVmLCBldGMpIHNob3VsZCBiZSBmaXJzdC4nKQotCi0gICAg
aWYgbWF0Y2gocidccyojXHMqZW5kaWZccypbXi9cc10rJywgbGluZSk6Ci0gICAgICAgIGVycm9y
KGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL2VuZGlmX2NvbW1lbnQnLCA1LAotICAgICAg
ICAgICAgICAnVW5jb21tZW50ZWQgdGV4dCBhZnRlciAjZW5kaWYgaXMgbm9uLXN0YW5kYXJkLiAg
VXNlIGEgY29tbWVudC4nKQotCi0gICAgaWYgbWF0Y2gocidccypjbGFzc1xzKyhcdytccyo6Olxz
KikrXHcrXHMqOycsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICdidWlsZC9mb3J3YXJkX2RlY2wnLCA1LAotICAgICAgICAgICAgICAnSW5uZXItc3R5bGUgZm9y
d2FyZCBkZWNsYXJhdGlvbnMgYXJlIGludmFsaWQuICBSZW1vdmUgdGhpcyBsaW5lLicpCi0KLSAg
ICBpZiBzZWFyY2gocicoXHcrfFsrLV0/XGQrKFwuXGQqKT8pXHMqKDx8PilcPz0/XHMqKFx3K3xb
Ky1dP1xkKykoXC5cZCopPycsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9u
dW1iZXIsICdidWlsZC9kZXByZWNhdGVkJywgMywKLSAgICAgICAgICAgICAgJz4/IGFuZCA8PyAo
bWF4IGFuZCBtaW4pIG9wZXJhdG9ycyBhcmUgbm9uLXN0YW5kYXJkIGFuZCBkZXByZWNhdGVkLicp
Ci0KLSAgICAjIFRyYWNrIGNsYXNzIGVudHJ5IGFuZCBleGl0LCBhbmQgYXR0ZW1wdCB0byBmaW5k
IGNhc2VzIHdpdGhpbiB0aGUKLSAgICAjIGNsYXNzIGRlY2xhcmF0aW9uIHRoYXQgZG9uJ3QgbWVl
dCB0aGUgQysrIHN0eWxlCi0gICAgIyBndWlkZWxpbmVzLiBUcmFja2luZyBpcyB2ZXJ5IGRlcGVu
ZGVudCBvbiB0aGUgY29kZSBtYXRjaGluZyBHb29nbGUKLSAgICAjIHN0eWxlIGd1aWRlbGluZXMs
IGJ1dCBpdCBzZWVtcyB0byBwZXJmb3JtIHdlbGwgZW5vdWdoIGluIHRlc3RpbmcKLSAgICAjIHRv
IGJlIGEgd29ydGh3aGlsZSBhZGRpdGlvbiB0byB0aGUgY2hlY2tzLgotICAgIGNsYXNzaW5mb19z
dGFjayA9IGNsYXNzX3N0YXRlLmNsYXNzaW5mb19zdGFjawotICAgICMgTG9vayBmb3IgYSBjbGFz
cyBkZWNsYXJhdGlvbgotICAgIGNsYXNzX2RlY2xfbWF0Y2ggPSBtYXRjaCgKLSAgICAgICAgcidc
cyoodGVtcGxhdGVccyo8W1x3XHM8Piw6XSo+XHMqKT8oY2xhc3N8c3RydWN0KVxzKyhcdysoOjpc
dyspKiknLCBsaW5lKQotICAgIGlmIGNsYXNzX2RlY2xfbWF0Y2g6Ci0gICAgICAgIGNsYXNzaW5m
b19zdGFjay5hcHBlbmQoX0NsYXNzSW5mbyhjbGFzc19kZWNsX21hdGNoLmdyb3VwKDMpLCBsaW5l
X251bWJlcikpCi0KLSAgICAjIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGlzIGZ1bmN0aW9uIHVzZXMg
dGhlIHRvcCBvZiB0aGUgc3RhY2sgaWYgaXQncwotICAgICMgbm90IGVtcHR5LgotICAgIGlmIG5v
dCBjbGFzc2luZm9fc3RhY2s6Ci0gICAgICAgIHJldHVybgotCi0gICAgY2xhc3NpbmZvID0gY2xh
c3NpbmZvX3N0YWNrWy0xXQotCi0gICAgIyBJZiB0aGUgb3BlbmluZyBicmFjZSBoYXNuJ3QgYmVl
biBzZWVuIGxvb2sgZm9yIGl0IGFuZCBhbHNvCi0gICAgIyBwYXJlbnQgY2xhc3MgZGVjbGFyYXRp
b25zLgotICAgIGlmIG5vdCBjbGFzc2luZm8uc2Vlbl9vcGVuX2JyYWNlOgotICAgICAgICAjIElm
IHRoZSBsaW5lIGhhcyBhICc7JyBpbiBpdCwgYXNzdW1lIGl0J3MgYSBmb3J3YXJkIGRlY2xhcmF0
aW9uIG9yCi0gICAgICAgICMgYSBzaW5nbGUtbGluZSBjbGFzcyBkZWNsYXJhdGlvbiwgd2hpY2gg
d2Ugd29uJ3QgcHJvY2Vzcy4KLSAgICAgICAgaWYgbGluZS5maW5kKCc7JykgIT0gLTE6Ci0gICAg
ICAgICAgICBjbGFzc2luZm9fc3RhY2sucG9wKCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAg
ICBjbGFzc2luZm8uc2Vlbl9vcGVuX2JyYWNlID0gKGxpbmUuZmluZCgneycpICE9IC0xKQotICAg
ICAgICAjIExvb2sgZm9yIGEgYmFyZSAnOicKLSAgICAgICAgaWYgc2VhcmNoKCcoXnxbXjpdKToo
JHxbXjpdKScsIGxpbmUpOgotICAgICAgICAgICAgY2xhc3NpbmZvLmlzX2Rlcml2ZWQgPSBUcnVl
Ci0gICAgICAgIGlmIG5vdCBjbGFzc2luZm8uc2Vlbl9vcGVuX2JyYWNlOgotICAgICAgICAgICAg
cmV0dXJuICAjIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGlzIGZ1bmN0aW9uIGlzIGZvciBhZnRlciBv
cGVuIGJyYWNlCi0KLSAgICAjIFRoZSBjbGFzcyBtYXkgaGF2ZSBiZWVuIGRlY2xhcmVkIHdpdGgg
bmFtZXNwYWNlIG9yIGNsYXNzbmFtZSBxdWFsaWZpZXJzLgotICAgICMgVGhlIGNvbnN0cnVjdG9y
IGFuZCBkZXN0cnVjdG9yIHdpbGwgbm90IGhhdmUgdGhvc2UgcXVhbGlmaWVycy4KLSAgICBiYXNl
X2NsYXNzbmFtZSA9IGNsYXNzaW5mby5uYW1lLnNwbGl0KCc6OicpWy0xXQotCi0gICAgIyBMb29r
IGZvciBzaW5nbGUtYXJndW1lbnQgY29uc3RydWN0b3JzIHRoYXQgYXJlbid0IG1hcmtlZCBleHBs
aWNpdC4KLSAgICAjIFRlY2huaWNhbGx5IGEgdmFsaWQgY29uc3RydWN0LCBidXQgYWdhaW5zdCBz
dHlsZS4KLSAgICBhcmdzID0gbWF0Y2gocicoPzwhZXhwbGljaXQpXHMrJXNccypcKChbXiwoKV0r
KVwpJwotICAgICAgICAgICAgICAgICAlIHJlLmVzY2FwZShiYXNlX2NsYXNzbmFtZSksCi0gICAg
ICAgICAgICAgICAgIGxpbmUpCi0gICAgaWYgKGFyZ3MKLSAgICAgICAgYW5kIGFyZ3MuZ3JvdXAo
MSkgIT0gJ3ZvaWQnCi0gICAgICAgIGFuZCBub3QgbWF0Y2gocicoY29uc3RccyspPyVzXHMqJicg
JSByZS5lc2NhcGUoYmFzZV9jbGFzc25hbWUpLAotICAgICAgICAgICAgICAgICAgICAgIGFyZ3Mu
Z3JvdXAoMSkuc3RyaXAoKSkpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICdydW50aW1lL2V4cGxpY2l0JywgNSwKLSAgICAgICAgICAgICAgJ1NpbmdsZS1hcmd1bWVudCBj
b25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hcmtlZCBleHBsaWNpdC4nKQotCi0gICAgIyBMb29rIGZv
ciBtZXRob2RzIGRlY2xhcmVkIHZpcnR1YWwuCi0gICAgaWYgc2VhcmNoKHInXGJ2aXJ0dWFsXGIn
LCBsaW5lKToKLSAgICAgICAgY2xhc3NpbmZvLnZpcnR1YWxfbWV0aG9kX2xpbmVfbnVtYmVyID0g
bGluZV9udW1iZXIKLSAgICAgICAgIyBPbmx5IGxvb2sgZm9yIGEgZGVzdHJ1Y3RvciBkZWNsYXJh
dGlvbiBvbiB0aGUgc2FtZSBsaW5lLiBJdCB3b3VsZAotICAgICAgICAjIGJlIGV4dHJlbWVseSB1
bmxpa2VseSBmb3IgdGhlIGRlc3RydWN0b3IgZGVjbGFyYXRpb24gdG8gb2NjdXB5Ci0gICAgICAg
ICMgbW9yZSB0aGFuIG9uZSBsaW5lLgotICAgICAgICBpZiBzZWFyY2gocid+JXNccypcKCcgJSBi
YXNlX2NsYXNzbmFtZSwgbGluZSk6Ci0gICAgICAgICAgICBjbGFzc2luZm8uaGFzX3ZpcnR1YWxf
ZGVzdHJ1Y3RvciA9IFRydWUKLQotICAgICMgTG9vayBmb3IgY2xhc3MgZW5kLgotICAgIGJyYWNl
X2RlcHRoID0gY2xhc3NpbmZvLmJyYWNlX2RlcHRoCi0gICAgYnJhY2VfZGVwdGggPSBicmFjZV9k
ZXB0aCArIGxpbmUuY291bnQoJ3snKSAtIGxpbmUuY291bnQoJ30nKQotICAgIGlmIGJyYWNlX2Rl
cHRoIDw9IDA6Ci0gICAgICAgIGNsYXNzaW5mbyA9IGNsYXNzaW5mb19zdGFjay5wb3AoKQotICAg
ICAgICAjIFRyeSB0byBkZXRlY3QgbWlzc2luZyB2aXJ0dWFsIGRlc3RydWN0b3IgZGVjbGFyYXRp
b25zLgotICAgICAgICAjIEZvciBub3csIG9ubHkgd2FybiBpZiBhIG5vbi1kZXJpdmVkIGNsYXNz
IHdpdGggdmlydHVhbCBtZXRob2RzIGxhY2tzCi0gICAgICAgICMgYSB2aXJ0dWFsIGRlc3RydWN0
b3IuIFRoaXMgaXMgdG8gbWFrZSBpdCBsZXNzIGxpa2VseSB0aGF0IHBlb3BsZSB3aWxsCi0gICAg
ICAgICMgZGVjbGFyZSBkZXJpdmVkIHZpcnR1YWwgZGVzdHJ1Y3RvcnMgd2l0aG91dCBkZWNsYXJp
bmcgdGhlIGJhc2UKLSAgICAgICAgIyBkZXN0cnVjdG9yIHZpcnR1YWwuCi0gICAgICAgIGlmICgo
Y2xhc3NpbmZvLnZpcnR1YWxfbWV0aG9kX2xpbmVfbnVtYmVyIGlzIG5vdCBOb25lKQotICAgICAg
ICAgICAgYW5kIChub3QgY2xhc3NpbmZvLmhhc192aXJ0dWFsX2Rlc3RydWN0b3IpCi0gICAgICAg
ICAgICBhbmQgKG5vdCBjbGFzc2luZm8uaXNfZGVyaXZlZCkpOiAgIyBPbmx5IHdhcm4gZm9yIGJh
c2UgY2xhc3NlcwotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGNsYXNzaW5mby5saW5lX251
bWJlciwgJ3J1bnRpbWUvdmlydHVhbCcsIDQsCi0gICAgICAgICAgICAgICAgICAnVGhlIGNsYXNz
ICVzIHByb2JhYmx5IG5lZWRzIGEgdmlydHVhbCBkZXN0cnVjdG9yIGR1ZSB0byAnCi0gICAgICAg
ICAgICAgICAgICAnaGF2aW5nIHZpcnR1YWwgbWV0aG9kKHMpLCBvbmUgZGVjbGFyZWQgYXQgbGlu
ZSAlZC4nCi0gICAgICAgICAgICAgICAgICAlIChjbGFzc2luZm8ubmFtZSwgY2xhc3NpbmZvLnZp
cnR1YWxfbWV0aG9kX2xpbmVfbnVtYmVyKSkKLSAgICBlbHNlOgotICAgICAgICBjbGFzc2luZm8u
YnJhY2VfZGVwdGggPSBicmFjZV9kZXB0aAotCi0KLWRlZiBjaGVja19zcGFjaW5nX2Zvcl9mdW5j
dGlvbl9jYWxsKGZpbGVuYW1lLCBsaW5lLCBsaW5lX251bWJlciwgZXJyb3IpOgotICAgICIiIkNo
ZWNrcyBmb3IgdGhlIGNvcnJlY3RuZXNzIG9mIHZhcmlvdXMgc3BhY2luZyBhcm91bmQgZnVuY3Rp
b24gY2FsbHMuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBj
dXJyZW50IGZpbGUuCi0gICAgICBsaW5lOiBUaGUgdGV4dCBvZiB0aGUgbGluZSB0byBjaGVjay4K
LSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgotICAg
ICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAg
ICAiIiIKLQotICAgICMgU2luY2UgZnVuY3Rpb24gY2FsbHMgb2Z0ZW4gb2NjdXIgaW5zaWRlIGlm
L2Zvci9mb3JlYWNoL3doaWxlL3N3aXRjaAotICAgICMgZXhwcmVzc2lvbnMgLSB3aGljaCBoYXZl
IHRoZWlyIG93biwgbW9yZSBsaWJlcmFsIGNvbnZlbnRpb25zIC0gd2UKLSAgICAjIGZpcnN0IHNl
ZSBpZiB3ZSBzaG91bGQgYmUgbG9va2luZyBpbnNpZGUgc3VjaCBhbiBleHByZXNzaW9uIGZvciBh
Ci0gICAgIyBmdW5jdGlvbiBjYWxsLCB0byB3aGljaCB3ZSBjYW4gYXBwbHkgbW9yZSBzdHJpY3Qg
c3RhbmRhcmRzLgotICAgIGZ1bmN0aW9uX2NhbGwgPSBsaW5lICAgICMgaWYgdGhlcmUncyBubyBj
b250cm9sIGZsb3cgY29uc3RydWN0LCBsb29rIGF0IHdob2xlIGxpbmUKLSAgICBmb3IgcGF0dGVy
biBpbiAocidcYmlmXHMqXCgoLiopXClccyp7JywKLSAgICAgICAgICAgICAgICAgICAgcidcYmZv
clxzKlwoKC4qKVwpXHMqeycsCi0gICAgICAgICAgICAgICAgICAgIHInXGJmb3JlYWNoXHMqXCgo
LiopXClccyp7JywKLSAgICAgICAgICAgICAgICAgICAgcidcYndoaWxlXHMqXCgoLiopXClccypb
eztdJywKLSAgICAgICAgICAgICAgICAgICAgcidcYnN3aXRjaFxzKlwoKC4qKVwpXHMqeycpOgot
ICAgICAgICBtYXRjaGVkID0gc2VhcmNoKHBhdHRlcm4sIGxpbmUpCi0gICAgICAgIGlmIG1hdGNo
ZWQ6Ci0gICAgICAgICAgICBmdW5jdGlvbl9jYWxsID0gbWF0Y2hlZC5ncm91cCgxKSAgICAjIGxv
b2sgaW5zaWRlIHRoZSBwYXJlbnMgZm9yIGZ1bmN0aW9uIGNhbGxzCi0gICAgICAgICAgICBicmVh
awotCi0gICAgIyBFeGNlcHQgaW4gaWYvZm9yL2ZvcmVhY2gvd2hpbGUvc3dpdGNoLCB0aGVyZSBz
aG91bGQgbmV2ZXIgYmUgc3BhY2UKLSAgICAjIGltbWVkaWF0ZWx5IGluc2lkZSBwYXJlbnMgKGVn
ICJmKCAzLCA0ICkiKS4gIFdlIG1ha2UgYW4gZXhjZXB0aW9uCi0gICAgIyBmb3IgbmVzdGVkIHBh
cmVucyAoIChhK2IpICsgYyApLiAgTGlrZXdpc2UsIHRoZXJlIHNob3VsZCBuZXZlciBiZQotICAg
ICMgYSBzcGFjZSBiZWZvcmUgYSAoIHdoZW4gaXQncyBhIGZ1bmN0aW9uIGFyZ3VtZW50LiAgSSBh
c3N1bWUgaXQncyBhCi0gICAgIyBmdW5jdGlvbiBhcmd1bWVudCB3aGVuIHRoZSBjaGFyIGJlZm9y
ZSB0aGUgd2hpdGVzcGFjZSBpcyBsZWdhbCBpbgotICAgICMgYSBmdW5jdGlvbiBuYW1lIChhbG51
bSArIF8pIGFuZCB3ZSdyZSBub3Qgc3RhcnRpbmcgYSBtYWNyby4gQWxzbyBpZ25vcmUKLSAgICAj
IHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzIHRvIGFycmF5cyBhbmQgZnVuY3Rpb25zIGNveiB0aGV5
J3JlIHRvbyB0cmlja3k6Ci0gICAgIyB3ZSB1c2UgYSB2ZXJ5IHNpbXBsZSB3YXkgdG8gcmVjb2du
aXplIHRoZXNlOgotICAgICMgIiAoc29tZXRoaW5nKShtYXliZS1zb21ldGhpbmcpIiBvcgotICAg
ICMgIiAoc29tZXRoaW5nKShtYXliZS1zb21ldGhpbmcsIiBvcgotICAgICMgIiAoc29tZXRoaW5n
KVtzb21ldGhpbmddIgotICAgICMgTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGUgY29udGVudHMgb2Yg
W10gdG8gYmUgc2hvcnQgZW5vdWdoIHRoYXQKLSAgICAjIHRoZXknbGwgbmV2ZXIgbmVlZCB0byB3
cmFwLgotICAgIGlmICggICMgSWdub3JlIGNvbnRyb2wgc3RydWN0dXJlcy4KLSAgICAgICAgbm90
IHNlYXJjaChyJ1xiKGlmfGZvcnxmb3JlYWNofHdoaWxlfHN3aXRjaHxyZXR1cm58bmV3fGRlbGV0
ZSlcYicsIGZ1bmN0aW9uX2NhbGwpCi0gICAgICAgICMgSWdub3JlIHBvaW50ZXJzL3JlZmVyZW5j
ZXMgdG8gZnVuY3Rpb25zLgotICAgICAgICBhbmQgbm90IHNlYXJjaChyJyBcKFteKV0rXClcKFte
KV0qKFwpfCwkKScsIGZ1bmN0aW9uX2NhbGwpCi0gICAgICAgICMgSWdub3JlIHBvaW50ZXJzL3Jl
ZmVyZW5jZXMgdG8gYXJyYXlzLgotICAgICAgICBhbmQgbm90IHNlYXJjaChyJyBcKFteKV0rXClc
W1teXF1dK1xdJywgZnVuY3Rpb25fY2FsbCkpOgotICAgICAgICBpZiBzZWFyY2gocidcd1xzKlwo
WyBcdF0oPyFccypcXCQpJywgZnVuY3Rpb25fY2FsbCk6ICAgICAgIyBhICggdXNlZCBmb3IgYSBm
biBjYWxsCi0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNw
YWNlL3BhcmVucycsIDQsCi0gICAgICAgICAgICAgICAgICAnRXh0cmEgc3BhY2UgYWZ0ZXIgKCBp
biBmdW5jdGlvbiBjYWxsJykKLSAgICAgICAgZWxpZiBzZWFyY2gocidcKFsgXHRdKyg/IShccypc
XCl8XCgpJywgZnVuY3Rpb25fY2FsbCk6Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsICd3aGl0ZXNwYWNlL3BhcmVucycsIDIsCi0gICAgICAgICAgICAgICAgICAnRXh0
cmEgc3BhY2UgYWZ0ZXIgKCcpCi0gICAgICAgIGlmIChzZWFyY2gocidcd1xzK1woJywgZnVuY3Rp
b25fY2FsbCkKLSAgICAgICAgICAgIGFuZCBub3Qgc2VhcmNoKHInI1xzKmRlZmluZXx0eXBlZGVm
JywgZnVuY3Rpb25fY2FsbCkpOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVt
YmVyLCAnd2hpdGVzcGFjZS9wYXJlbnMnLCA0LAotICAgICAgICAgICAgICAgICAgJ0V4dHJhIHNw
YWNlIGJlZm9yZSAoIGluIGZ1bmN0aW9uIGNhbGwnKQotICAgICAgICAjIElmIHRoZSApIGlzIGZv
bGxvd2VkIG9ubHkgYnkgYSBuZXdsaW5lIG9yIGEgeyArIG5ld2xpbmUsIGFzc3VtZSBpdCdzCi0g
ICAgICAgICMgcGFydCBvZiBhIGNvbnRyb2wgc3RhdGVtZW50IChpZi93aGlsZS9ldGMpLCBhbmQg
ZG9uJ3QgY29tcGxhaW4KLSAgICAgICAgaWYgc2VhcmNoKHInW14pXHNdXHMrXCkoPyFccyokfHtc
cyokKScsIGZ1bmN0aW9uX2NhbGwpOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVf
bnVtYmVyLCAnd2hpdGVzcGFjZS9wYXJlbnMnLCAyLAotICAgICAgICAgICAgICAgICAgJ0V4dHJh
IHNwYWNlIGJlZm9yZSApJykKLQotCi1kZWYgaXNfYmxhbmtfbGluZShsaW5lKToKLSAgICAiIiJS
ZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGxpbmUgaXMgYmxhbmsuCi0KLSAgICBXZSBjb25zaWRl
ciBhIGxpbmUgdG8gYmUgYmxhbmsgaWYgdGhlIGxpbmUgaXMgZW1wdHkgb3IgY29uc2lzdHMgb2YK
LSAgICBvbmx5IHdoaXRlIHNwYWNlcy4KLQotICAgIEFyZ3M6Ci0gICAgICBsaW5lOiBBIGxpbmUg
b2YgYSBzdHJpbmcuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSwgaWYgdGhlIGdpdmVuIGxp
bmUgaXMgYmxhbmsuCi0gICAgIiIiCi0gICAgcmV0dXJuIG5vdCBsaW5lIG9yIGxpbmUuaXNzcGFj
ZSgpCi0KLQotZGVmIGNoZWNrX2Zvcl9mdW5jdGlvbl9sZW5ndGhzKGZpbGVuYW1lLCBjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b25fc3RhdGUsIGVycm9yKToKLSAgICAiIiJSZXBvcnRzIGZvciBsb25nIGZ1bmN0aW9uIGJvZGll
cy4KLQotICAgIEZvciBhbiBvdmVydmlldyB3aHkgdGhpcyBpcyBkb25lLCBzZWU6Ci0gICAgaHR0
cDovL2dvb2dsZS1zdHlsZWd1aWRlLmdvb2dsZWNvZGUuY29tL3N2bi90cnVuay9jcHBndWlkZS54
bWwjV3JpdGVfU2hvcnRfRnVuY3Rpb25zCi0KLSAgICBVc2VzIGEgc2ltcGxpc3RpYyBhbGdvcml0
aG0gYXNzdW1pbmcgb3RoZXIgc3R5bGUgZ3VpZGVsaW5lcwotICAgIChlc3BlY2lhbGx5IHNwYWNp
bmcpIGFyZSBmb2xsb3dlZC4KLSAgICBPbmx5IGNoZWNrcyB1bmluZGVudGVkIGZ1bmN0aW9ucywg
c28gY2xhc3MgbWVtYmVycyBhcmUgdW5jaGVja2VkLgotICAgIFRyaXZpYWwgYm9kaWVzIGFyZSB1
bmNoZWNrZWQsIHNvIGNvbnN0cnVjdG9ycyB3aXRoIGh1Z2UgaW5pdGlhbGl6ZXIgbGlzdHMKLSAg
ICBtYXkgYmUgbWlzc2VkLgotICAgIEJsYW5rL2NvbW1lbnQgbGluZXMgYXJlIG5vdCBjb3VudGVk
IHNvIGFzIHRvIGF2b2lkIGVuY291cmFnaW5nIHRoZSByZW1vdmFsCi0gICAgb2YgdmVydGljYWwg
c3BhY2UgYW5kIGNvbW1tZW50cyBqdXN0IHRvIGdldCB0aHJvdWdoIGEgbGludCBjaGVjay4KLSAg
ICBOT0xJTlQgKm9uIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbiogZGlzYWJsZXMgdGhpcyBj
aGVjay4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJl
bnQgZmlsZS4KLSAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29u
dGFpbmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBs
aW5lIHRvIGNoZWNrLgotICAgICAgZnVuY3Rpb25fc3RhdGU6IEN1cnJlbnQgZnVuY3Rpb24gbmFt
ZSBhbmQgbGluZXMgaW4gYm9keSBzbyBmYXIuCi0gICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRv
IGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgotICAgICIiIgotICAgIGxpbmVzID0gY2xlYW5f
bGluZXMubGluZXMKLSAgICBsaW5lID0gbGluZXNbbGluZV9udW1iZXJdCi0gICAgcmF3ID0gY2xl
YW5fbGluZXMucmF3X2xpbmVzCi0gICAgcmF3X2xpbmUgPSByYXdbbGluZV9udW1iZXJdCi0gICAg
am9pbmVkX2xpbmUgPSAnJwotCi0gICAgc3RhcnRpbmdfZnVuYyA9IEZhbHNlCi0gICAgcmVnZXhw
ID0gcicoXHcoXHd8Ojp8XCp8XCZ8XHMpKilcKCcgICMgZGVjbHMgKiAmIHNwYWNlOjpuYW1lKCAu
Li4KLSAgICBtYXRjaF9yZXN1bHQgPSBtYXRjaChyZWdleHAsIGxpbmUpCi0gICAgaWYgbWF0Y2hf
cmVzdWx0OgotICAgICAgICAjIElmIHRoZSBuYW1lIGlzIGFsbCBjYXBzIGFuZCB1bmRlcnNjb3Jl
cywgZmlndXJlIGl0J3MgYSBtYWNybyBhbmQKLSAgICAgICAgIyBpZ25vcmUgaXQsIHVubGVzcyBp
dCdzIFRFU1Qgb3IgVEVTVF9GLgotICAgICAgICBmdW5jdGlvbl9uYW1lID0gbWF0Y2hfcmVzdWx0
Lmdyb3VwKDEpLnNwbGl0KClbLTFdCi0gICAgICAgIGlmIGZ1bmN0aW9uX25hbWUgPT0gJ1RFU1Qn
IG9yIGZ1bmN0aW9uX25hbWUgPT0gJ1RFU1RfRicgb3IgKG5vdCBtYXRjaChyJ1tBLVpfXSskJywg
ZnVuY3Rpb25fbmFtZSkpOgotICAgICAgICAgICAgc3RhcnRpbmdfZnVuYyA9IFRydWUKLQotICAg
IGlmIHN0YXJ0aW5nX2Z1bmM6Ci0gICAgICAgIGJvZHlfZm91bmQgPSBGYWxzZQotICAgICAgICBm
b3Igc3RhcnRfbGluZV9udW1iZXIgaW4geHJhbmdlKGxpbmVfbnVtYmVyLCBjbGVhbl9saW5lcy5u
dW1fbGluZXMoKSk6Ci0gICAgICAgICAgICBzdGFydF9saW5lID0gbGluZXNbc3RhcnRfbGluZV9u
dW1iZXJdCi0gICAgICAgICAgICBqb2luZWRfbGluZSArPSAnICcgKyBzdGFydF9saW5lLmxzdHJp
cCgpCi0gICAgICAgICAgICBpZiBzZWFyY2gocicoO3x9KScsIHN0YXJ0X2xpbmUpOiAgIyBEZWNs
YXJhdGlvbnMgYW5kIHRyaXZpYWwgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgYm9keV9mb3Vu
ZCA9IFRydWUKLSAgICAgICAgICAgICAgICBicmVhayAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMgLi4uIGlnbm9yZQotICAgICAgICAgICAgaWYgc2VhcmNoKHIneycsIHN0YXJ0X2xpbmUp
OgotICAgICAgICAgICAgICAgIGJvZHlfZm91bmQgPSBUcnVlCi0gICAgICAgICAgICAgICAgZnVu
Y3Rpb24gPSBzZWFyY2gocicoKFx3fDopKilcKCcsIGxpbmUpLmdyb3VwKDEpCi0gICAgICAgICAg
ICAgICAgaWYgbWF0Y2gocidURVNUJywgZnVuY3Rpb24pOiAgICAjIEhhbmRsZSBURVNULi4uIG1h
Y3JvcwotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfcmVnZXhwID0gc2VhcmNoKHInKFwo
LipcKSknLCBqb2luZWRfbGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyX3Jl
Z2V4cDogICAgICAgICAgICAgIyBJZ25vcmUgYmFkIHN5bnRheAotICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKz0gcGFyYW1ldGVyX3JlZ2V4cC5ncm91cCgxKQotICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICs9ICcoKScKLSAgICAgICAg
ICAgICAgICBmdW5jdGlvbl9zdGF0ZS5iZWdpbihmdW5jdGlvbikKLSAgICAgICAgICAgICAgICBi
cmVhawotICAgICAgICBpZiBub3QgYm9keV9mb3VuZDoKLSAgICAgICAgICAgICMgTm8gYm9keSBm
b3IgdGhlIGZ1bmN0aW9uIChvciBldmlkZW5jZSBvZiBhIG5vbi1mdW5jdGlvbikgd2FzIGZvdW5k
LgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkv
Zm5fc2l6ZScsIDUsCi0gICAgICAgICAgICAgICAgICAnTGludCBmYWlsZWQgdG8gZmluZCBzdGFy
dCBvZiBmdW5jdGlvbiBib2R5LicpCi0gICAgZWxpZiBtYXRjaChyJ15cfVxzKiQnLCBsaW5lKTog
ICMgZnVuY3Rpb24gZW5kCi0gICAgICAgIGlmIG5vdCBzZWFyY2gocidcYk5PTElOVFxiJywgcmF3
X2xpbmUpOgotICAgICAgICAgICAgZnVuY3Rpb25fc3RhdGUuY2hlY2soZXJyb3IsIGZpbGVuYW1l
LCBsaW5lX251bWJlcikKLSAgICAgICAgZnVuY3Rpb25fc3RhdGUuZW5kKCkKLSAgICBlbGlmIG5v
dCBtYXRjaChyJ15ccyokJywgbGluZSk6Ci0gICAgICAgIGZ1bmN0aW9uX3N0YXRlLmNvdW50KCkg
ICMgQ291bnQgbm9uLWJsYW5rL25vbi1jb21tZW50IGxpbmVzLgotCi0KLWRlZiBjaGVja19zcGFj
aW5nKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKLSAgICAiIiJD
aGVja3MgZm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB2YXJpb3VzIHNwYWNpbmcgaXNzdWVzIGluIHRo
ZSBjb2RlLgotCi0gICAgVGhpbmdzIHdlIGNoZWNrIGZvcjogc3BhY2VzIGFyb3VuZCBvcGVyYXRv
cnMsIHNwYWNlcyBhZnRlcgotICAgIGlmL2Zvci93aGlsZS9zd2l0Y2gsIG5vIHNwYWNlcyBhcm91
bmQgcGFyZW5zIGluIGZ1bmN0aW9uIGNhbGxzLCB0d28KLSAgICBzcGFjZXMgYmV0d2VlbiBjb2Rl
IGFuZCBjb21tZW50LCBkb24ndCBzdGFydCBhIGJsb2NrIHdpdGggYSBibGFuawotICAgIGxpbmUs
IGRvbid0IGVuZCBhIGZ1bmN0aW9uIHdpdGggYSBibGFuayBsaW5lLCBkb24ndCBoYXZlIHRvbyBt
YW55Ci0gICAgYmxhbmsgbGluZXMgaW4gYSByb3cuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5h
bWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBjbGVhbl9saW5lczogQSBD
bGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAgICBsaW5lX251
bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGVycm9yOiBUaGUg
ZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIiCi0KLSAgICBy
YXcgPSBjbGVhbl9saW5lcy5yYXdfbGluZXMKLSAgICBsaW5lID0gcmF3W2xpbmVfbnVtYmVyXQot
Ci0gICAgIyBCZWZvcmUgbml4aW5nIGNvbW1lbnRzLCBjaGVjayBpZiB0aGUgbGluZSBpcyBibGFu
ayBmb3Igbm8gZ29vZAotICAgICMgcmVhc29uLiAgVGhpcyBpbmNsdWRlcyB0aGUgZmlyc3QgbGlu
ZSBhZnRlciBhIGJsb2NrIGlzIG9wZW5lZCwgYW5kCi0gICAgIyBibGFuayBsaW5lcyBhdCB0aGUg
ZW5kIG9mIGEgZnVuY3Rpb24gKGllLCByaWdodCBiZWZvcmUgYSBsaW5lIGxpa2UgJ30nKS4KLSAg
ICBpZiBpc19ibGFua19saW5lKGxpbmUpOgotICAgICAgICBlbGlkZWQgPSBjbGVhbl9saW5lcy5l
bGlkZWQKLSAgICAgICAgcHJldmlvdXNfbGluZSA9IGVsaWRlZFtsaW5lX251bWJlciAtIDFdCi0g
ICAgICAgIHByZXZpb3VzX2JyYWNlID0gcHJldmlvdXNfbGluZS5yZmluZCgneycpCi0gICAgICAg
ICMgRklYTUU6IERvbid0IGNvbXBsYWluIGlmIGxpbmUgYmVmb3JlIGJsYW5rIGxpbmUsIGFuZCBs
aW5lIGFmdGVyLAotICAgICAgICAjICAgICAgICBib3RoIHN0YXJ0IHdpdGggYWxudW1zIGFuZCBh
cmUgaW5kZW50ZWQgdGhlIHNhbWUgYW1vdW50LgotICAgICAgICAjICAgICAgICBUaGlzIGlnbm9y
ZXMgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb2YgYSBuYW1lc3BhY2UgYmxvY2sKLSAgICAgICAg
IyAgICAgICAgYmVjYXVzZSB0aG9zZSBhcmUgbm90IHVzdWFsbHkgaW5kZW50ZWQuCi0gICAgICAg
IGlmIChwcmV2aW91c19icmFjZSAhPSAtMSBhbmQgcHJldmlvdXNfbGluZVtwcmV2aW91c19icmFj
ZTpdLmZpbmQoJ30nKSA9PSAtMQotICAgICAgICAgICAgYW5kIHByZXZpb3VzX2xpbmVbOnByZXZp
b3VzX2JyYWNlXS5maW5kKCduYW1lc3BhY2UnKSA9PSAtMSk6Ci0gICAgICAgICAgICAjIE9LLCB3
ZSBoYXZlIGEgYmxhbmsgbGluZSBhdCB0aGUgc3RhcnQgb2YgYSBjb2RlIGJsb2NrLiAgQmVmb3Jl
IHdlCi0gICAgICAgICAgICAjIGNvbXBsYWluLCB3ZSBjaGVjayBpZiBpdCBpcyBhbiBleGNlcHRp
b24gdG8gdGhlIHJ1bGU6IFRoZSBwcmV2aW91cwotICAgICAgICAgICAgIyBub24tZW1wdHkgbGlu
ZSBoYXMgdGhlIHBhcmFtZXRlcnMgb2YgYSBmdW5jdGlvbiBoZWFkZXIgdGhhdCBhcmUgaW5kZW50
ZWQKLSAgICAgICAgICAgICMgNCBzcGFjZXMgKGJlY2F1c2UgdGhleSBkaWQgbm90IGZpdCBpbiBh
IDgwIGNvbHVtbiBsaW5lIHdoZW4gcGxhY2VkIG9uCi0gICAgICAgICAgICAjIHRoZSBzYW1lIGxp
bmUgYXMgdGhlIGZ1bmN0aW9uIG5hbWUpLiAgV2UgYWxzbyBjaGVjayBmb3IgdGhlIGNhc2Ugd2hl
cmUKLSAgICAgICAgICAgICMgdGhlIHByZXZpb3VzIGxpbmUgaXMgaW5kZW50ZWQgNiBzcGFjZXMs
IHdoaWNoIG1heSBoYXBwZW4gd2hlbiB0aGUKLSAgICAgICAgICAgICMgaW5pdGlhbGl6ZXJzIG9m
IGEgY29uc3RydWN0b3IgZG8gbm90IGZpdCBpbnRvIGEgODAgY29sdW1uIGxpbmUuCi0gICAgICAg
ICAgICBleGNlcHRpb24gPSBGYWxzZQotICAgICAgICAgICAgaWYgbWF0Y2gocicgezZ9XHcnLCBw
cmV2aW91c19saW5lKTogICMgSW5pdGlhbGl6ZXIgbGlzdD8KLSAgICAgICAgICAgICAgICAjIFdl
IGFyZSBsb29raW5nIGZvciB0aGUgb3BlbmluZyBjb2x1bW4gb2YgaW5pdGlhbGl6ZXIgbGlzdCwg
d2hpY2gKLSAgICAgICAgICAgICAgICAjIHNob3VsZCBiZSBpbmRlbnRlZCA0IHNwYWNlcyB0byBj
YXVzZSA2IHNwYWNlIGluZGVudGF0aW9uIGFmdGVyd2FyZHMuCi0gICAgICAgICAgICAgICAgc2Vh
cmNoX3Bvc2l0aW9uID0gbGluZV9udW1iZXIgLSAyCi0gICAgICAgICAgICAgICAgd2hpbGUgKHNl
YXJjaF9wb3NpdGlvbiA+PSAwCi0gICAgICAgICAgICAgICAgICAgICAgIGFuZCBtYXRjaChyJyB7
Nn1cdycsIGVsaWRlZFtzZWFyY2hfcG9zaXRpb25dKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNl
YXJjaF9wb3NpdGlvbiAtPSAxCi0gICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gKHNlYXJjaF9w
b3NpdGlvbiA+PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbGlkZWRbc2Vh
cmNoX3Bvc2l0aW9uXVs6NV0gPT0gJyAgICA6JykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgIyBTZWFyY2ggZm9yIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgb3IgYW4gaW5pdGlh
bGl6ZXIgbGlzdC4gIFdlIHVzZSBhCi0gICAgICAgICAgICAgICAgIyBzaW1wbGUgaGV1cmlzdGlj
IGhlcmU6IElmIHRoZSBsaW5lIGlzIGluZGVudGVkIDQgc3BhY2VzOyBhbmQgd2UgaGF2ZSBhCi0g
ICAgICAgICAgICAgICAgIyBjbG9zaW5nIHBhcmVuLCB3aXRob3V0IHRoZSBvcGVuaW5nIHBhcmVu
LCBmb2xsb3dlZCBieSBhbiBvcGVuaW5nIGJyYWNlCi0gICAgICAgICAgICAgICAgIyBvciBjb2xv
biAoZm9yIGluaXRpYWxpemVyIGxpc3RzKSB3ZSBhc3N1bWUgdGhhdCBpdCBpcyB0aGUgbGFzdCBs
aW5lIG9mCi0gICAgICAgICAgICAgICAgIyBhIGZ1bmN0aW9uIGhlYWRlci4gIElmIHdlIGhhdmUg
YSBjb2xvbiBpbmRlbnRlZCA0IHNwYWNlcywgaXQgaXMgYW4KLSAgICAgICAgICAgICAgICAjIGlu
aXRpYWxpemVyIGxpc3QuCi0gICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gKG1hdGNoKHInIHs0
fVx3W15cKF0qXClccyooY29uc3RccyopPyhce1xzKiR8OiknLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2aW91c19saW5lKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvciBtYXRjaChyJyB7NH06JywgcHJldmlvdXNfbGluZSkpCi0KLSAgICAgICAgICAgIGlm
IG5vdCBleGNlcHRpb246Ci0gICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVt
YmVyLCAnd2hpdGVzcGFjZS9ibGFua19saW5lJywgMiwKLSAgICAgICAgICAgICAgICAgICAgICAn
QmxhbmsgbGluZSBhdCB0aGUgc3RhcnQgb2YgYSBjb2RlIGJsb2NrLiAgSXMgdGhpcyBuZWVkZWQ/
JykKLSAgICAgICAgIyBUaGlzIGRvZXNuJ3QgaWdub3JlIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBv
ZiBhIG5hbWVzcGFjZSBibG9jawotICAgICAgICAjIGJlY2F1c2UgdGhhdCBpcyB0b28gaGFyZCB3
aXRob3V0IHBhaXJpbmcgb3Blbi9jbG9zZSBicmFjZXM7Ci0gICAgICAgICMgaG93ZXZlciwgYSBz
cGVjaWFsIGV4Y2VwdGlvbiBpcyBtYWRlIGZvciBuYW1lc3BhY2UgY2xvc2luZwotICAgICAgICAj
IGJyYWNrZXRzIHdoaWNoIGhhdmUgYSBjb21tZW50IGNvbnRhaW5pbmcgIm5hbWVzcGFjZSIuCi0g
ICAgICAgICMKLSAgICAgICAgIyBBbHNvLCBpZ25vcmUgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBv
ZiBhIGJsb2NrIGluIGEgbG9uZyBpZi1lbHNlCi0gICAgICAgICMgY2hhaW4sIGxpa2UgdGhpczoK
LSAgICAgICAgIyAgIGlmIChjb25kaXRpb24xKSB7Ci0gICAgICAgICMgICAgIC8vIFNvbWV0aGlu
ZyBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUKLSAgICAgICAgIwotICAgICAgICAjICAgfSBlbHNl
IGlmIChjb25kaXRpb24yKSB7Ci0gICAgICAgICMgICAgIC8vIFNvbWV0aGluZyBlbHNlCi0gICAg
ICAgICMgICB9Ci0gICAgICAgIGlmIGxpbmVfbnVtYmVyICsgMSA8IGNsZWFuX2xpbmVzLm51bV9s
aW5lcygpOgotICAgICAgICAgICAgbmV4dF9saW5lID0gcmF3W2xpbmVfbnVtYmVyICsgMV0KLSAg
ICAgICAgICAgIGlmIChuZXh0X2xpbmUKLSAgICAgICAgICAgICAgICBhbmQgbWF0Y2gocidccyp9
JywgbmV4dF9saW5lKQotICAgICAgICAgICAgICAgIGFuZCBuZXh0X2xpbmUuZmluZCgnbmFtZXNw
YWNlJykgPT0gLTEKLSAgICAgICAgICAgICAgICBhbmQgbmV4dF9saW5lLmZpbmQoJ30gZWxzZSAn
KSA9PSAtMSk6Ci0gICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAn
d2hpdGVzcGFjZS9ibGFua19saW5lJywgMywKLSAgICAgICAgICAgICAgICAgICAgICAnQmxhbmsg
bGluZSBhdCB0aGUgZW5kIG9mIGEgY29kZSBibG9jay4gIElzIHRoaXMgbmVlZGVkPycpCi0KLSAg
ICAjIE5leHQsIHdlIGNvbXBsYWluIGlmIHRoZXJlJ3MgYSBjb21tZW50IHRvbyBuZWFyIHRoZSB0
ZXh0Ci0gICAgY29tbWVudF9wb3NpdGlvbiA9IGxpbmUuZmluZCgnLy8nKQotICAgIGlmIGNvbW1l
bnRfcG9zaXRpb24gIT0gLTE6Ci0gICAgICAgICMgQ2hlY2sgaWYgdGhlIC8vIG1heSBiZSBpbiBx
dW90ZXMuICBJZiBzbywgaWdub3JlIGl0Ci0gICAgICAgICMgQ29tcGFyaXNvbnMgbWFkZSBleHBs
aWNpdCBmb3IgY2xhcml0eSAtLSBweWxpbnQ6IGRpc2FibGUtbXNnPUM2NDAzCi0gICAgICAgIGlm
IChsaW5lLmNvdW50KCciJywgMCwgY29tbWVudF9wb3NpdGlvbikgLSBsaW5lLmNvdW50KCdcXCIn
LCAwLCBjb21tZW50X3Bvc2l0aW9uKSkgJSAyID09IDA6ICAgIyBub3QgaW4gcXVvdGVzCi0gICAg
ICAgICAgICAjIEFsbG93IG9uZSBzcGFjZSBiZWZvcmUgZW5kIG9mIGxpbmUgY29tbWVudC4KLSAg
ICAgICAgICAgIGlmIChub3QgbWF0Y2gocideXHMqJCcsIGxpbmVbOmNvbW1lbnRfcG9zaXRpb25d
KQotICAgICAgICAgICAgICAgIGFuZCAoY29tbWVudF9wb3NpdGlvbiA+PSAxCi0gICAgICAgICAg
ICAgICAgYW5kICgobGluZVtjb21tZW50X3Bvc2l0aW9uIC0gMV0gbm90IGluIHN0cmluZy53aGl0
ZXNwYWNlKQotICAgICAgICAgICAgICAgICAgICAgb3IgKGNvbW1lbnRfcG9zaXRpb24gPj0gMgot
ICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaW5lW2NvbW1lbnRfcG9zaXRpb24gLSAyXSBp
biBzdHJpbmcud2hpdGVzcGFjZSkpKSk6Ci0gICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9jb21tZW50cycsIDUsCi0gICAgICAgICAgICAgICAg
ICAgICAgJ09uZSBzcGFjZSBiZWZvcmUgZW5kIG9mIGxpbmUgY29tbWVudHMnKQotICAgICAgICAg
ICAgIyBUaGVyZSBzaG91bGQgYWx3YXlzIGJlIGEgc3BhY2UgYmV0d2VlbiB0aGUgLy8gYW5kIHRo
ZSBjb21tZW50Ci0gICAgICAgICAgICBjb21tZW50ZW5kID0gY29tbWVudF9wb3NpdGlvbiArIDIK
LSAgICAgICAgICAgIGlmIGNvbW1lbnRlbmQgPCBsZW4obGluZSkgYW5kIG5vdCBsaW5lW2NvbW1l
bnRlbmRdID09ICcgJzoKLSAgICAgICAgICAgICAgICAjIGJ1dCBzb21lIGxpbmVzIGFyZSBleGNl
cHRpb25zIC0tIGUuZy4gaWYgdGhleSdyZSBiaWcKLSAgICAgICAgICAgICAgICAjIGNvbW1lbnQg
ZGVsaW1pdGVycyBsaWtlOgotICAgICAgICAgICAgICAgICMgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAg
IyBvciB0aGV5IGJlZ2luIHdpdGggbXVsdGlwbGUgc2xhc2hlcyBmb2xsb3dlZCBieSBhIHNwYWNl
OgotICAgICAgICAgICAgICAgICMgLy8vLy8vLy8gSGVhZGVyIGNvbW1lbnQKLSAgICAgICAgICAg
ICAgICBtYXRjaGVkID0gKHNlYXJjaChyJ1s9Ly1dezQsfVxzKiQnLCBsaW5lW2NvbW1lbnRlbmQ6
XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHNlYXJjaChyJ14vKyAnLCBsaW5lW2Nv
bW1lbnRlbmQ6XSkpCi0gICAgICAgICAgICAgICAgaWYgbm90IG1hdGNoZWQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvY29tbWVu
dHMnLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAnU2hvdWxkIGhhdmUgYSBzcGFjZSBi
ZXR3ZWVuIC8vIGFuZCBjb21tZW50JykKLQotICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRb
bGluZV9udW1iZXJdICAjIGdldCByaWQgb2YgY29tbWVudHMgYW5kIHN0cmluZ3MKLQotICAgICMg
RG9uJ3QgdHJ5IHRvIGRvIHNwYWNpbmcgY2hlY2tzIGZvciBvcGVyYXRvciBtZXRob2RzCi0gICAg
bGluZSA9IHN1YihyJ29wZXJhdG9yKD09fCE9fDx8PDx8PD18Pj18Pj58PilcKCcsICdvcGVyYXRv
clwoJywgbGluZSkKLSAgICAjIERvbid0IHRyeSB0byBkbyBzcGFjaW5nIGNoZWNrcyBmb3IgI2lu
Y2x1ZGUgb3IgI2ltcG9ydCBzdGF0ZW1lbnRzIGF0Ci0gICAgIyBtaW5pbXVtIGJlY2F1c2UgaXQg
bWVzc2VzIHVwIGNoZWNrcyBmb3Igc3BhY2luZyBhcm91bmQgLwotICAgIGlmIG1hdGNoKHInXHMq
I1xzKig/OmluY2x1ZGV8aW1wb3J0KScsIGxpbmUpOgotICAgICAgICByZXR1cm4KLSAgICBpZiBz
ZWFyY2gocidbXHcuXT1bXHcuXScsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsICd3aGl0ZXNwYWNlL29wZXJhdG9ycycsIDQsCi0gICAgICAgICAgICAgICdNaXNz
aW5nIHNwYWNlcyBhcm91bmQgPScpCi0KLSAgICAjIEZJWE1FOiBJdCdzIG5vdCBvayB0byBoYXZl
IHNwYWNlcyBhcm91bmQgYmluYXJ5IG9wZXJhdG9ycyBsaWtlIC4KLQotICAgICMgWW91IHNob3Vs
ZCBhbHdheXMgaGF2ZSB3aGl0ZXNwYWNlIGFyb3VuZCBiaW5hcnkgb3BlcmF0b3JzLgotICAgICMg
QWxhcywgd2UgY2FuJ3QgdGVzdCA8IG9yID4gYmVjYXVzZSB0aGV5J3JlIGxlZ2l0aW1hdGVseSB1
c2VkIHNhbnMgc3BhY2VzCi0gICAgIyAoYS0+YiwgdmVjdG9yPGludD4gYSkuICBUaGUgb25seSB0
aW1lIHdlIGNhbiB0ZWxsIGlzIGEgPCB3aXRoIG5vID4sIGFuZAotICAgICMgb25seSBpZiBpdCdz
IG5vdCB0ZW1wbGF0ZSBwYXJhbXMgbGlzdCBzcGlsbGluZyBpbnRvIHRoZSBuZXh0IGxpbmUuCi0g
ICAgbWF0Y2hlZCA9IHNlYXJjaChyJ1tePD49IVxzXSg9PXwhPXxcKz18LT18XCo9fC89fC98XHw9
fCY9fDw8PXw+Pj18PD18Pj18XHxcfHxcfHwmJnw+Pnw8PClbXjw+PSFcc10nLCBsaW5lKQotICAg
IGlmIG5vdCBtYXRjaGVkOgotICAgICAgICAjIE5vdGUgdGhhdCB3aGlsZSBpdCBzZWVtcyB0aGF0
IHRoZSAnPFtePF0qJyB0ZXJtIGluIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgIyByZWdleHAgY291
bGQgYmUgc2ltcGxpZmllZCB0byAnPC4qJywgd2hpY2ggd291bGQgaW5kZWVkIG1hdGNoCi0gICAg
ICAgICMgdGhlIHNhbWUgY2xhc3Mgb2Ygc3RyaW5ncywgdGhlIFtePF0gbWVhbnMgdGhhdCBzZWFy
Y2hpbmcgZm9yIHRoZQotICAgICAgICAjIHJlZ2V4cCB0YWtlcyBsaW5lYXIgcmF0aGVyIHRoYW4g
cXVhZHJhdGljIHRpbWUuCi0gICAgICAgIGlmIG5vdCBzZWFyY2gocic8W148XSosXHMqJCcsIGxp
bmUpOiAgIyB0ZW1wbGF0ZSBwYXJhbXMgc3BpbGwKLSAgICAgICAgICAgIG1hdGNoZWQgPSBzZWFy
Y2gocidbXjw+PSFcc10oPClbXjw+PSFcc10oW14+XXwtPikqJCcsIGxpbmUpCi0gICAgaWYgbWF0
Y2hlZDoKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9v
cGVyYXRvcnMnLCAzLAotICAgICAgICAgICAgICAnTWlzc2luZyBzcGFjZXMgYXJvdW5kICVzJyAl
IG1hdGNoZWQuZ3JvdXAoMSkpCi0KLSAgICAjIFRoZXJlIHNob3VsZG4ndCBiZSBzcGFjZSBhcm91
bmQgdW5hcnkgb3BlcmF0b3JzCi0gICAgbWF0Y2hlZCA9IHNlYXJjaChyJyghXHN8flxzfFtcc10t
LVtccztdfFtcc11cK1wrW1xzO10pJywgbGluZSkKLSAgICBpZiBtYXRjaGVkOgotICAgICAgICBl
cnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL29wZXJhdG9ycycsIDQsCi0g
ICAgICAgICAgICAgICdFeHRyYSBzcGFjZSBmb3Igb3BlcmF0b3IgJXMnICUgbWF0Y2hlZC5ncm91
cCgxKSkKLQotICAgICMgQSBwZXQgcGVldmUgb2YgbWluZTogbm8gc3BhY2VzIGFmdGVyIGFuIGlm
LCB3aGlsZSwgc3dpdGNoLCBvciBmb3IKLSAgICBtYXRjaGVkID0gc2VhcmNoKHInIChpZlwofGZv
clwofGZvcmVhY2hcKHx3aGlsZVwofHN3aXRjaFwoKScsIGxpbmUpCi0gICAgaWYgbWF0Y2hlZDoK
LSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9wYXJlbnMn
LCA1LAotICAgICAgICAgICAgICAnTWlzc2luZyBzcGFjZSBiZWZvcmUgKCBpbiAlcycgJSBtYXRj
aGVkLmdyb3VwKDEpKQotCi0gICAgIyBGb3IgaWYvZm9yL2ZvcmVhY2gvd2hpbGUvc3dpdGNoLCB0
aGUgbGVmdCBhbmQgcmlnaHQgcGFyZW5zIHNob3VsZCBiZQotICAgICMgY29uc2lzdGVudCBhYm91
dCBob3cgbWFueSBzcGFjZXMgYXJlIGluc2lkZSB0aGUgcGFyZW5zLCBhbmQKLSAgICAjIHRoZXJl
IHNob3VsZCBlaXRoZXIgYmUgemVybyBvciBvbmUgc3BhY2VzIGluc2lkZSB0aGUgcGFyZW5zLgot
ICAgICMgV2UgZG9uJ3Qgd2FudDogImlmICggZm9vKSIgb3IgImlmICggZm9vICAgKSIuCi0gICAg
IyBFeGNlcHRpb246ICJmb3IgKCA7IGZvbzsgYmFyKSIgYW5kICJmb3IgKGZvbzsgYmFyOyApIiBh
cmUgYWxsb3dlZC4KLSAgICBtYXRjaGVkID0gc2VhcmNoKHInXGIoaWZ8Zm9yfGZvcmVhY2h8d2hp
bGV8c3dpdGNoKVxzKlwoKFsgXSopKC4pLipbXiBdKyhbIF0qKVwpXHMqe1xzKiQnLAotICAgICAg
ICAgICAgICAgICAgICAgbGluZSkKLSAgICBpZiBtYXRjaGVkOgotICAgICAgICBpZiBsZW4obWF0
Y2hlZC5ncm91cCgyKSkgIT0gbGVuKG1hdGNoZWQuZ3JvdXAoNCkpOgotICAgICAgICAgICAgaWYg
bm90IChtYXRjaGVkLmdyb3VwKDMpID09ICc7JwotICAgICAgICAgICAgICAgICAgICBhbmQgbGVu
KG1hdGNoZWQuZ3JvdXAoMikpID09IDEgKyBsZW4obWF0Y2hlZC5ncm91cCg0KSkKLSAgICAgICAg
ICAgICAgICAgICAgb3Igbm90IG1hdGNoZWQuZ3JvdXAoMikgYW5kIHNlYXJjaChyJ1xiZm9yXHMq
XCguKjsgXCknLCBsaW5lKSk6Ci0gICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVf
bnVtYmVyLCAnd2hpdGVzcGFjZS9wYXJlbnMnLCA1LAotICAgICAgICAgICAgICAgICAgICAgICdN
aXNtYXRjaGluZyBzcGFjZXMgaW5zaWRlICgpIGluICVzJyAlIG1hdGNoZWQuZ3JvdXAoMSkpCi0g
ICAgICAgIGlmIG5vdCBsZW4obWF0Y2hlZC5ncm91cCgyKSkgaW4gWzAsIDFdOgotICAgICAgICAg
ICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9wYXJlbnMnLCA1LAot
ICAgICAgICAgICAgICAgICAgJ1Nob3VsZCBoYXZlIHplcm8gb3Igb25lIHNwYWNlcyBpbnNpZGUg
KCBhbmQgKSBpbiAlcycgJQotICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5ncm91cCgxKSkKLQot
ICAgICMgWW91IHNob3VsZCBhbHdheXMgaGF2ZSBhIHNwYWNlIGFmdGVyIGEgY29tbWEgKGVpdGhl
ciBhcyBmbiBhcmcgb3Igb3BlcmF0b3IpCi0gICAgaWYgc2VhcmNoKHInLFteXHNdJywgbGluZSk6
Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvY29tbWEn
LCAzLAotICAgICAgICAgICAgICAnTWlzc2luZyBzcGFjZSBhZnRlciAsJykKLQotICAgIGlmIGZp
bGVuYW1lLmVuZHN3aXRoKCcuY3BwJyk6Ci0gICAgICAgICMgQysrIHNob3VsZCBoYXZlIHRoZSAm
IG9yICogYmVzaWRlIHRoZSB0eXBlIG5vdCB0aGUgdmFyaWFibGUgbmFtZS4KLSAgICAgICAgbWF0
Y2hlZCA9IG1hdGNoKHInXHMqXHcrKD88IVxicmV0dXJuKVxzKyg/UDxwb2ludGVyX29wZXJhdG9y
PlwqfFwmKVx3KycsIGxpbmUpCi0gICAgICAgIGlmIG1hdGNoZWQ6Ci0gICAgICAgICAgICBlcnJv
cihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL2RlY2xhcmF0aW9uJywgMywKLSAg
ICAgICAgICAgICAgICAgICdEZWNsYXJhdGlvbiBoYXMgc3BhY2UgYmV0d2VlbiB0eXBlIG5hbWUg
YW5kICVzIGluICVzJyAlIChtYXRjaGVkLmdyb3VwKCdwb2ludGVyX29wZXJhdG9yJyksIG1hdGNo
ZWQuZ3JvdXAoMCkuc3RyaXAoKSkpCi0KLSAgICBlbGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuYycp
OgotICAgICAgICAjIEMgUG9pbnRlciBkZWNsYXJhdGlvbiBzaG91bGQgaGF2ZSB0aGUgKiBiZXNp
ZGUgdGhlIHZhcmlhYmxlIG5vdCB0aGUgdHlwZSBuYW1lLgotICAgICAgICBtYXRjaGVkID0gc2Vh
cmNoKHInXlxzKlx3K1wqXHMrXHcrJywgbGluZSkKLSAgICAgICAgaWYgbWF0Y2hlZDoKLSAgICAg
ICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvZGVjbGFyYXRp
b24nLCAzLAotICAgICAgICAgICAgICAgICAgJ0RlY2xhcmF0aW9uIGhhcyBzcGFjZSBiZXR3ZWVu
ICogYW5kIHZhcmlhYmxlIG5hbWUgaW4gJXMnICUgbWF0Y2hlZC5ncm91cCgwKS5zdHJpcCgpKQot
Ci0gICAgIyBOZXh0IHdlIHdpbGwgbG9vayBmb3IgaXNzdWVzIHdpdGggZnVuY3Rpb24gY2FsbHMu
Ci0gICAgY2hlY2tfc3BhY2luZ19mb3JfZnVuY3Rpb25fY2FsbChmaWxlbmFtZSwgbGluZSwgbGlu
ZV9udW1iZXIsIGVycm9yKQotCi0gICAgIyBFeGNlcHQgYWZ0ZXIgYW4gb3BlbmluZyBwYXJlbiwg
eW91IHNob3VsZCBoYXZlIHNwYWNlcyBiZWZvcmUgeW91ciBicmFjZXMuCi0gICAgIyBBbmQgc2lu
Y2UgeW91IHNob3VsZCBuZXZlciBoYXZlIGJyYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGlu
ZSwgdGhpcyBpcwotICAgICMgYW4gZWFzeSB0ZXN0LgotICAgIGlmIHNlYXJjaChyJ1teICh7XXsn
LCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFj
ZS9icmFjZXMnLCA1LAotICAgICAgICAgICAgICAnTWlzc2luZyBzcGFjZSBiZWZvcmUgeycpCi0K
LSAgICAjIE1ha2Ugc3VyZSAnfSBlbHNlIHsnIGhhcyBzcGFjZXMuCi0gICAgaWYgc2VhcmNoKHIn
fWVsc2UnLCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hp
dGVzcGFjZS9icmFjZXMnLCA1LAotICAgICAgICAgICAgICAnTWlzc2luZyBzcGFjZSBiZWZvcmUg
ZWxzZScpCi0KLSAgICAjIFlvdSBzaG91bGRuJ3QgaGF2ZSBzcGFjZXMgYmVmb3JlIHlvdXIgYnJh
Y2tldHMsIGV4Y2VwdCBtYXliZSBhZnRlcgotICAgICMgJ2RlbGV0ZSBbXScgb3IgJ25ldyBjaGFy
ICogW10nLgotICAgIGlmIHNlYXJjaChyJ1x3XHMrXFsnLCBsaW5lKSBhbmQgbm90IHNlYXJjaChy
J2RlbGV0ZVxzK1xbJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ3doaXRlc3BhY2UvYnJhY2VzJywgNSwKLSAgICAgICAgICAgICAgJ0V4dHJhIHNwYWNlIGJl
Zm9yZSBbJykKLQotICAgICMgWW91IHNob3VsZG4ndCBoYXZlIGEgc3BhY2UgYmVmb3JlIGEgc2Vt
aWNvbG9uIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCi0gICAgIyBUaGVyZSdzIGEgc3BlY2lhbCBj
YXNlIGZvciAiZm9yIiBzaW5jZSB0aGUgc3R5bGUgZ3VpZGUgYWxsb3dzIHNwYWNlIGJlZm9yZQot
ICAgICMgdGhlIHNlbWljb2xvbiB0aGVyZS4KLSAgICBpZiBzZWFyY2gocic6XHMqO1xzKiQnLCBs
aW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9z
ZW1pY29sb24nLCA1LAotICAgICAgICAgICAgICAnU2VtaWNvbG9uIGRlZmluaW5nIGVtcHR5IHN0
YXRlbWVudC4gVXNlIHsgfSBpbnN0ZWFkLicpCi0gICAgZWxpZiBzZWFyY2gocideXHMqO1xzKiQn
LCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFj
ZS9zZW1pY29sb24nLCA1LAotICAgICAgICAgICAgICAnTGluZSBjb250YWlucyBvbmx5IHNlbWlj
b2xvbi4gSWYgdGhpcyBzaG91bGQgYmUgYW4gZW1wdHkgc3RhdGVtZW50LCAnCi0gICAgICAgICAg
ICAgICd1c2UgeyB9IGluc3RlYWQuJykKLSAgICBlbGlmIChzZWFyY2gocidccys7XHMqJCcsIGxp
bmUpIGFuZCBub3Qgc2VhcmNoKHInXGJmb3JcYicsIGxpbmUpKToKLSAgICAgICAgZXJyb3IoZmls
ZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9zZW1pY29sb24nLCA1LAotICAgICAgICAg
ICAgICAnRXh0cmEgc3BhY2UgYmVmb3JlIGxhc3Qgc2VtaWNvbG9uLiBJZiB0aGlzIHNob3VsZCBi
ZSBhbiBlbXB0eSAnCi0gICAgICAgICAgICAgICdzdGF0ZW1lbnQsIHVzZSB7IH0gaW5zdGVhZC4n
KQotICAgIGVsaWYgKHNlYXJjaChyJ1xiKGZvcnx3aGlsZSlccypcKC4qXClccyo7XHMqJCcsIGxp
bmUpCi0gICAgICAgICAgYW5kIGxpbmUuY291bnQoJygnKSA9PSBsaW5lLmNvdW50KCcpJykKLSAg
ICAgICAgICAjIEFsbG93IGRvIHt9IHdoaWxlKCk7Ci0gICAgICAgICAgYW5kIG5vdCBzZWFyY2go
cid9XHMqd2hpbGUnLCBsaW5lKSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ3doaXRlc3BhY2Uvc2VtaWNvbG9uJywgNSwKLSAgICAgICAgICAgICAgJ1NlbWljb2xvbiBk
ZWZpbmluZyBlbXB0eSBzdGF0ZW1lbnQgZm9yIHRoaXMgbG9vcC4gVXNlIHsgfSBpbnN0ZWFkLicp
Ci0KLQotZGVmIGdldF9wcmV2aW91c19ub25fYmxhbmtfbGluZShjbGVhbl9saW5lcywgbGluZV9u
dW1iZXIpOgotICAgICIiIlJldHVybiB0aGUgbW9zdCByZWNlbnQgbm9uLWJsYW5rIGxpbmUgYW5k
IGl0cyBsaW5lIG51bWJlci4KLQotICAgIEFyZ3M6Ci0gICAgICBjbGVhbl9saW5lczogQSBDbGVh
bnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUgY29udGVudHMuCi0gICAgICBs
aW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLQotICAgIFJldHVy
bnM6Ci0gICAgICBBIHR1cGxlIHdpdGggdHdvIGVsZW1lbnRzLiAgVGhlIGZpcnN0IGVsZW1lbnQg
aXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXN0Ci0gICAgICBub24tYmxhbmsgbGluZSBiZWZvcmUg
dGhlIGN1cnJlbnQgbGluZSwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGlzIGlzIHRoZQotICAg
ICAgZmlyc3Qgbm9uLWJsYW5rIGxpbmUuICBUaGUgc2Vjb25kIGlzIHRoZSBsaW5lIG51bWJlciBv
ZiB0aGF0IGxpbmUsIG9yIC0xCi0gICAgICBpZiB0aGlzIGlzIHRoZSBmaXJzdCBub24tYmxhbmsg
bGluZS4KLSAgICAiIiIKLQotICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyID0gbGluZV9udW1iZXIg
LSAxCi0gICAgd2hpbGUgcHJldmlvdXNfbGluZV9udW1iZXIgPj0gMDoKLSAgICAgICAgcHJldmlv
dXNfbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtwcmV2aW91c19saW5lX251bWJlcl0KLSAgICAg
ICAgaWYgbm90IGlzX2JsYW5rX2xpbmUocHJldmlvdXNfbGluZSk6ICAgICAjIGlmIG5vdCBhIGJs
YW5rIGxpbmUuLi4KLSAgICAgICAgICAgIHJldHVybiAocHJldmlvdXNfbGluZSwgcHJldmlvdXNf
bGluZV9udW1iZXIpCi0gICAgICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyIC09IDEKLSAgICByZXR1
cm4gKCcnLCAtMSkKLQotCi1kZWYgY2hlY2tfbmFtZXNwYWNlX2luZGVudGF0aW9uKGZpbGVuYW1l
LCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfZXh0ZW5zaW9uLCBmaWxlX3N0YXRlLCBl
cnJvcik6Ci0gICAgIiIiTG9va3MgZm9yIGluZGVudGF0aW9uIGVycm9ycyBpbnNpZGUgb2YgbmFt
ZXNwYWNlcy4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1
cnJlbnQgZmlsZS4KLSAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2Ug
Y29udGFpbmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRo
ZSBsaW5lIHRvIGNoZWNrLgotICAgICAgZmlsZV9leHRlbnNpb246IFRoZSBleHRlbnNpb24gKGRv
dCBub3QgaW5jbHVkZWQpIG9mIHRoZSBmaWxlLgotICAgICAgZmlsZV9zdGF0ZTogQSBfRmlsZVN0
YXRlIGluc3RhbmNlIHdoaWNoIG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dAotICAgICAgICAg
ICAgICAgICAgdGhlIHN0YXRlIG9mIHRoaW5ncyBpbiB0aGUgZmlsZS4KLSAgICAgIGVycm9yOiBU
aGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIiCi0KLSAg
ICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXSAjIEdldCByaWQgb2YgY29t
bWVudHMgYW5kIHN0cmluZ3MuCi0KLSAgICBuYW1lc3BhY2VfbWF0Y2ggPSBtYXRjaChyJyg/UDxu
YW1lc3BhY2VfaW5kZW50YXRpb24+XHMqKW5hbWVzcGFjZVxzK1xTK1xzKntccyokJywgbGluZSkK
LSAgICBpZiBub3QgbmFtZXNwYWNlX21hdGNoOgotICAgICAgICByZXR1cm4KLQotICAgIGN1cnJl
bnRfaW5kZW50YXRpb25fbGV2ZWwgPSBsZW4obmFtZXNwYWNlX21hdGNoLmdyb3VwKCduYW1lc3Bh
Y2VfaW5kZW50YXRpb24nKSkKLSAgICBpZiBjdXJyZW50X2luZGVudGF0aW9uX2xldmVsID4gMDoK
LSAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IGFuIGluZGVudGVkIG5hbWVzcGFjZSBpZiB3ZSBh
bHJlYWR5IHdhcm5lZCBhYm91dCBpbmRlbnRlZCBjb2RlLgotICAgICAgICBpZiBub3QgZmlsZV9z
dGF0ZS5kaWRfaW5zaWRlX25hbWVzcGFjZV9pbmRlbnRfd2FybmluZygpOgotICAgICAgICAgICAg
ZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9pbmRlbnQnLCA0LAotICAg
ICAgICAgICAgICAgICAgJ25hbWVzcGFjZSBzaG91bGQgbmV2ZXIgYmUgaW5kZW50ZWQuJykKLSAg
ICAgICAgcmV0dXJuCi0gICAgbG9va2luZ19mb3Jfc2VtaWNvbG9uID0gRmFsc2U7Ci0gICAgbGlu
ZV9vZmZzZXQgPSAwCi0gICAgaW5fcHJlcHJvY2Vzc29yX2RpcmVjdGl2ZSA9IEZhbHNlOwotICAg
IGZvciBjdXJyZW50X2xpbmUgaW4gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyICsgMTpd
OgotICAgICAgICBsaW5lX29mZnNldCArPSAxCi0gICAgICAgIGlmIG5vdCBjdXJyZW50X2xpbmUu
c3RyaXAoKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIG5vdCBjdXJyZW50X2lu
ZGVudGF0aW9uX2xldmVsOgotICAgICAgICAgICAgaWYgbm90IChpbl9wcmVwcm9jZXNzb3JfZGly
ZWN0aXZlIG9yIGxvb2tpbmdfZm9yX3NlbWljb2xvbik6Ci0gICAgICAgICAgICAgICAgaWYgbm90
IG1hdGNoKHInXFMnLCBjdXJyZW50X2xpbmUpIGFuZCBub3QgZmlsZV9zdGF0ZS5kaWRfaW5zaWRl
X25hbWVzcGFjZV9pbmRlbnRfd2FybmluZygpOgotICAgICAgICAgICAgICAgICAgICBmaWxlX3N0
YXRlLnNldF9kaWRfaW5zaWRlX25hbWVzcGFjZV9pbmRlbnRfd2FybmluZygpCi0gICAgICAgICAg
ICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciArIGxpbmVfb2Zmc2V0LCAnd2hp
dGVzcGFjZS9pbmRlbnQnLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29kZSBpbnNp
ZGUgYSBuYW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4nKQotICAgICAgICAgICAgaWYg
aW5fcHJlcHJvY2Vzc29yX2RpcmVjdGl2ZSBvciAoY3VycmVudF9saW5lLnN0cmlwKClbMF0gPT0g
JyMnKTogIyBUaGlzIHRha2VzIGNhcmUgb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzeW50YXgu
Ci0gICAgICAgICAgICAgICAgaW5fcHJlcHJvY2Vzc29yX2RpcmVjdGl2ZSA9IGN1cnJlbnRfbGlu
ZVstMV0gPT0gJ1xcJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsb29raW5n
X2Zvcl9zZW1pY29sb24gPSAoKGN1cnJlbnRfbGluZS5maW5kKCc7JykgPT0gLTEpIGFuZCAoY3Vy
cmVudF9saW5lLnN0cmlwKClbLTFdICE9ICd9JykpIG9yIChjdXJyZW50X2xpbmVbLTFdID09ICdc
XCcpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb29raW5nX2Zvcl9zZW1pY29sb24gPSBG
YWxzZTsgIyBJZiB3ZSBoYXZlIGEgYnJhY2Ugd2UgbWF5IG5vdCBuZWVkIGEgc2VtaWNvbG9uLgot
ICAgICAgICBjdXJyZW50X2luZGVudGF0aW9uX2xldmVsICs9IGN1cnJlbnRfbGluZS5jb3VudCgn
eycpIC0gY3VycmVudF9saW5lLmNvdW50KCd9JykKLSAgICAgICAgaWYgY3VycmVudF9pbmRlbnRh
dGlvbl9sZXZlbCA8IDA6Ci0gICAgICAgICAgICBicmVhazsKLQotZGVmIGNoZWNrX3VzaW5nX3N0
ZChmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0gICAgIiIiTG9v
a3MgZm9yICd1c2luZyBzdGQ6OmZvbzsnIHN0YXRlbWVudHMgd2hpY2ggc2hvdWxkIGJlIHJlcGxh
Y2VkIHdpdGggJ3VzaW5nIG5hbWVzcGFjZSBzdGQ7Jy4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxl
bmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAgIGNsZWFuX2xpbmVzOiBB
IENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVf
bnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgotICAgICAgZXJyb3I6IFRo
ZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAiIiIKLQotICAg
ICMgVGhpcyBjaGVjayBkb2Vzbid0IGFwcGx5IHRvIEMgb3IgT2JqZWN0aXZlLUMgaW1wbGVtZW50
YXRpb24gZmlsZXMuCi0gICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5jJykgb3IgZmlsZW5hbWUu
ZW5kc3dpdGgoJy5tJyk6Ci0gICAgICAgIHJldHVybgotCi0gICAgbGluZSA9IGNsZWFuX2xpbmVz
LmVsaWRlZFtsaW5lX251bWJlcl0gIyBHZXQgcmlkIG9mIGNvbW1lbnRzIGFuZCBzdHJpbmdzLgot
Ci0gICAgdXNpbmdfc3RkX21hdGNoID0gbWF0Y2gocidccyp1c2luZ1xzK3N0ZDo6KD9QPG1ldGhv
ZF9uYW1lPlxTKylccyo7XHMqJCcsIGxpbmUpCi0gICAgaWYgbm90IHVzaW5nX3N0ZF9tYXRjaDoK
LSAgICAgICAgcmV0dXJuCi0KLSAgICBtZXRob2RfbmFtZSA9IHVzaW5nX3N0ZF9tYXRjaC5ncm91
cCgnbWV0aG9kX25hbWUnKQotICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxk
L3VzaW5nX3N0ZCcsIDQsCi0gICAgICAgICAgIlVzZSAndXNpbmcgbmFtZXNwYWNlIHN0ZDsnIGlu
c3RlYWQgb2YgJ3VzaW5nIHN0ZDo6JXM7Jy4iICUgbWV0aG9kX25hbWUpCi0KLQotZGVmIGNoZWNr
X21heF9taW5fbWFjcm9zKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9y
KToKLSAgICAiIiJMb29rcyB1c2Ugb2YgTUFYKCkgYW5kIE1JTigpIG1hY3JvcyB0aGF0IHNob3Vs
ZCBiZSByZXBsYWNlZCB3aXRoIHN0ZDo6bWF4KCkgYW5kIHN0ZDo6bWluKCkuCi0KLSAgICBBcmdz
OgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBj
bGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUu
Ci0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAg
ICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0g
ICAgIiIiCi0KLSAgICAjIFRoaXMgY2hlY2sgZG9lc24ndCBhcHBseSB0byBDIG9yIE9iamVjdGl2
ZS1DIGltcGxlbWVudGF0aW9uIGZpbGVzLgotICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuYycp
IG9yIGZpbGVuYW1lLmVuZHN3aXRoKCcubScpOgotICAgICAgICByZXR1cm4KLQotICAgIGxpbmUg
PSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdICMgR2V0IHJpZCBvZiBjb21tZW50cyBh
bmQgc3RyaW5ncy4KLQotICAgIG1heF9taW5fbWFjcm9zX3NlYXJjaCA9IHNlYXJjaChyJ1xiKD9Q
PG1heF9taW5fbWFjcm8+KE1BWHxNSU4pKVxzKlwoJywgbGluZSkKLSAgICBpZiBub3QgbWF4X21p
bl9tYWNyb3Nfc2VhcmNoOgotICAgICAgICByZXR1cm4KLQotICAgIG1heF9taW5fbWFjcm8gPSBt
YXhfbWluX21hY3Jvc19zZWFyY2guZ3JvdXAoJ21heF9taW5fbWFjcm8nKQotICAgIG1heF9taW5f
bWFjcm9fbG93ZXIgPSBtYXhfbWluX21hY3JvLmxvd2VyKCkKLSAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICdydW50aW1lL21heF9taW5fbWFjcm9zJywgNCwKLSAgICAgICAgICAnVXNl
IHN0ZDo6JXMoKSBvciBzdGQ6OiVzPHR5cGU+KCkgaW5zdGVhZCBvZiB0aGUgJXMoKSBtYWNyby4n
Ci0gICAgICAgICAgJSAobWF4X21pbl9tYWNyb19sb3dlciwgbWF4X21pbl9tYWNyb19sb3dlciwg
bWF4X21pbl9tYWNybykpCi0KLQotZGVmIGNoZWNrX3N3aXRjaF9pbmRlbnRhdGlvbihmaWxlbmFt
ZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0gICAgIiIiTG9va3MgZm9yIGlu
ZGVudGF0aW9uIGVycm9ycyBpbnNpZGUgb2Ygc3dpdGNoIHN0YXRlbWVudHMuCi0KLSAgICBBcmdz
OgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBj
bGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUu
Ci0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAg
ICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0g
ICAgIiIiCi0KLSAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXSAjIEdl
dCByaWQgb2YgY29tbWVudHMgYW5kIHN0cmluZ3MuCi0KLSAgICBzd2l0Y2hfbWF0Y2ggPSBtYXRj
aChyJyg/UDxzd2l0Y2hfaW5kZW50YXRpb24+XHMqKXN3aXRjaFxzKlwoLitcKVxzKntccyokJywg
bGluZSkKLSAgICBpZiBub3Qgc3dpdGNoX21hdGNoOgotICAgICAgICByZXR1cm4KLQotICAgIHN3
aXRjaF9pbmRlbnRhdGlvbiA9IHN3aXRjaF9tYXRjaC5ncm91cCgnc3dpdGNoX2luZGVudGF0aW9u
JykKLSAgICBpbm5lcl9pbmRlbnRhdGlvbiA9IHN3aXRjaF9pbmRlbnRhdGlvbiArICcgJyAqIDQK
LSAgICBsaW5lX29mZnNldCA9IDAKLSAgICBlbmNvdW50ZXJlZF9uZXN0ZWRfc3dpdGNoID0gRmFs
c2UKLQotICAgIGZvciBjdXJyZW50X2xpbmUgaW4gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVt
YmVyICsgMTpdOgotICAgICAgICBsaW5lX29mZnNldCArPSAxCi0KLSAgICAgICAgIyBTa2lwIG5v
dCBvbmx5IGVtcHR5IGxpbmVzIGJ1dCBhbHNvIHRob3NlIHdpdGggcHJlcHJvY2Vzc29yIGRpcmVj
dGl2ZXMuCi0gICAgICAgIGlmIGN1cnJlbnRfbGluZS5zdHJpcCgpID09ICcnIG9yIGN1cnJlbnRf
bGluZS5zdGFydHN3aXRoKCcjJyk6Ci0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGlm
IG1hdGNoKHInXHMqc3dpdGNoXHMqXCguK1wpXHMqe1xzKiQnLCBjdXJyZW50X2xpbmUpOgotICAg
ICAgICAgICAgIyBDb21wbGV4aXR5IGFsYXJtIC0gYW5vdGhlciBzd2l0Y2ggc3RhdGVtZW50IG5l
c3RlZCBpbnNpZGUgdGhlIG9uZQotICAgICAgICAgICAgIyB0aGF0IHdlJ3JlIGN1cnJlbnRseSB0
ZXN0aW5nLiBXZSdsbCBuZWVkIHRvIHRyYWNrIHRoZSBleHRlbnQgb2YKLSAgICAgICAgICAgICMg
dGhhdCBpbm5lciBzd2l0Y2ggaWYgdGhlIHVwY29taW5nIGxhYmVsIHRlc3RzIGFyZSBzdGlsbCBz
dXBwb3NlZAotICAgICAgICAgICAgIyB0byB3b3JrIGNvcnJlY3RseS4gTGV0J3Mgbm90IGRvIHRo
YXQ7IGluc3RlYWQsIHdlJ2xsIGZpbmlzaAotICAgICAgICAgICAgIyBjaGVja2luZyB0aGlzIGxp
bmUsIGFuZCB0aGVuIGxlYXZlIGl0IGxpa2UgdGhhdC4gQXNzdW1pbmcgdGhlCi0gICAgICAgICAg
ICAjIGluZGVudGF0aW9uIGlzIGRvbmUgY29uc2lzdGVudGx5IChldmVuIGlmIGluY29ycmVjdGx5
KSwgdGhpcyB3aWxsCi0gICAgICAgICAgICAjIHN0aWxsIGNhdGNoIGFsbCBpbmRlbnRhdGlvbiBp
c3N1ZXMgaW4gcHJhY3RpY2UuCi0gICAgICAgICAgICBlbmNvdW50ZXJlZF9uZXN0ZWRfc3dpdGNo
ID0gVHJ1ZQotCi0gICAgICAgIGN1cnJlbnRfaW5kZW50YXRpb25fbWF0Y2ggPSBtYXRjaChyJyg/
UDxpbmRlbnRhdGlvbj5ccyopKD9QPHJlbWFpbmluZ19saW5lPi4qKSQnLCBjdXJyZW50X2xpbmUp
OwotICAgICAgICBjdXJyZW50X2luZGVudGF0aW9uID0gY3VycmVudF9pbmRlbnRhdGlvbl9tYXRj
aC5ncm91cCgnaW5kZW50YXRpb24nKQotICAgICAgICByZW1haW5pbmdfbGluZSA9IGN1cnJlbnRf
aW5kZW50YXRpb25fbWF0Y2guZ3JvdXAoJ3JlbWFpbmluZ19saW5lJykKLQotICAgICAgICAjIEVu
ZCB0aGUgY2hlY2sgYXQgdGhlIGVuZCBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudC4KLSAgICAgICAg
aWYgcmVtYWluaW5nX2xpbmUuc3RhcnRzd2l0aCgnfScpIGFuZCBjdXJyZW50X2luZGVudGF0aW9u
ID09IHN3aXRjaF9pbmRlbnRhdGlvbjoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICMgQ2Fz
ZSBhbmQgZGVmYXVsdCBicmFuY2hlcyBzaG91bGQgbm90IGJlIGluZGVudGVkLiBUaGUgcmVnZXhw
IGFsc28KLSAgICAgICAgIyBjYXRjaGVzIHNpbmdsZS1saW5lIGNhc2VzIGxpa2UgImRlZmF1bHQ6
IGJyZWFrOyIgYnV0IGRvZXMgbm90IHRyaWdnZXIKLSAgICAgICAgIyBvbiBzdHVmZiBsaWtlICJE
b2N1bWVudDo6Rm9vKCk7Ii4KLSAgICAgICAgZWxpZiBtYXRjaChyJyhkZWZhdWx0fGNhc2Vccysu
Kilccyo6KFteOl0uKik/JCcsIHJlbWFpbmluZ19saW5lKToKLSAgICAgICAgICAgIGlmIGN1cnJl
bnRfaW5kZW50YXRpb24gIT0gc3dpdGNoX2luZGVudGF0aW9uOgotICAgICAgICAgICAgICAgIGVy
cm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciArIGxpbmVfb2Zmc2V0LCAnd2hpdGVzcGFjZS9pbmRl
bnQnLCA0LAotICAgICAgICAgICAgICAgICAgICAgICdBIGNhc2UgbGFiZWwgc2hvdWxkIG5vdCBi
ZSBpbmRlbnRlZCwgYnV0IGxpbmUgdXAgd2l0aCBpdHMgc3dpdGNoIHN0YXRlbWVudC4nKQotICAg
ICAgICAgICAgICAgICMgRG9uJ3QgdGhyb3cgYW4gZXJyb3IgZm9yIG11bHRpcGxlIGJhZGx5IGlu
ZGVudGVkIGxhYmVscywKLSAgICAgICAgICAgICAgICAjIG9uZSBzaG91bGQgYmUgZW5vdWdoIHRv
IGZpZ3VyZSBvdXQgdGhlIHByb2JsZW0uCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAg
IyBXZSBpZ25vcmUgZ290byBsYWJlbHMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIGEgbGluZS4K
LSAgICAgICAgZWxpZiBtYXRjaChyJ1x3K1xzKjpccyokJywgcmVtYWluaW5nX2xpbmUpOgotICAg
ICAgICAgICAgY29udGludWUKLSAgICAgICAgIyBJdCdzIG5vdCBhIGdvdG8gbGFiZWwsIHNvIGNo
ZWNrIGlmIGl0J3MgaW5kZW50ZWQgYXQgbGVhc3QgYXMgZmFyIGFzCi0gICAgICAgICMgdGhlIHN3
aXRjaCBzdGF0ZW1lbnQgcGx1cyBvbmUgbW9yZSBsZXZlbCBvZiBpbmRlbnRhdGlvbi4KLSAgICAg
ICAgZWxpZiBub3QgY3VycmVudF9pbmRlbnRhdGlvbi5zdGFydHN3aXRoKGlubmVyX2luZGVudGF0
aW9uKToKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciArIGxpbmVfb2Zm
c2V0LCAnd2hpdGVzcGFjZS9pbmRlbnQnLCA0LAotICAgICAgICAgICAgICAgICAgJ05vbi1sYWJl
bCBjb2RlIGluc2lkZSBzd2l0Y2ggc3RhdGVtZW50cyBzaG91bGQgYmUgaW5kZW50ZWQuJykKLSAg
ICAgICAgICAgICMgRG9uJ3QgdGhyb3cgYW4gZXJyb3IgZm9yIG11bHRpcGxlIGJhZGx5IGluZGVu
dGVkIHN0YXRlbWVudHMsCi0gICAgICAgICAgICAjIG9uZSBzaG91bGQgYmUgZW5vdWdoIHRvIGZp
Z3VyZSBvdXQgdGhlIHByb2JsZW0uCi0gICAgICAgICAgICBicmVhawotCi0gICAgICAgIGlmIGVu
Y291bnRlcmVkX25lc3RlZF9zd2l0Y2g6Ci0gICAgICAgICAgICBicmVhawotCi0KLWRlZiBjaGVj
a19icmFjZXMoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpOgotICAg
ICIiIkxvb2tzIGZvciBtaXNwbGFjZWQgYnJhY2VzIChlLmcuIGF0IHRoZSBlbmQgb2YgbGluZSku
Ci0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZp
bGUuCi0gICAgICBjbGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5p
bmcgdGhlIGZpbGUuCi0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0
byBjaGVjay4KLSAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJv
cnMgZm91bmQuCi0gICAgIiIiCi0KLSAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVf
bnVtYmVyXSAjIEdldCByaWQgb2YgY29tbWVudHMgYW5kIHN0cmluZ3MuCi0KLSAgICBpZiBtYXRj
aChyJ1xzKntccyokJywgbGluZSk6Ci0gICAgICAgICMgV2UgYWxsb3cgYW4gb3BlbiBicmFjZSB0
byBzdGFydCBhIGxpbmUgaW4gdGhlIGNhc2Ugd2hlcmUgc29tZW9uZQotICAgICAgICAjIGlzIHVz
aW5nIGJyYWNlcyBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBpbiBhIGJsb2NrIHRvCi0gICAg
ICAgICMgZXhwbGljaXRseSBjcmVhdGUgYSBuZXcgc2NvcGUsIHdoaWNoIGlzIGNvbW1vbmx5IHVz
ZWQgdG8gY29udHJvbAotICAgICAgICAjIHRoZSBsaWZldGltZSBvZiBzdGFjay1hbGxvY2F0ZWQg
dmFyaWFibGVzLiAgV2UgZG9uJ3QgZGV0ZWN0IHRoaXMKLSAgICAgICAgIyBwZXJmZWN0bHk6IHdl
IGp1c3QgZG9uJ3QgY29tcGxhaW4gaWYgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UKLSAgICAgICAg
IyBjaGFyYWN0ZXIgb24gdGhlIHByZXZpb3VzIG5vbi1ibGFuayBsaW5lIGlzICc7JywgJzonLCAn
eycsICd9JywKLSAgICAgICAgIyAnKScsIG9yICcpIGNvbnN0JyBhbmQgZG9lc24ndCBiZWdpbiB3
aXRoICdpZnxmb3J8d2hpbGV8c3dpdGNofGVsc2UnLgotICAgICAgICAjIFdlIGFsc28gYWxsb3cg
JyMnIGZvciAjZW5kaWYgYW5kICc9JyBmb3IgYXJyYXkgaW5pdGlhbGl6YXRpb24uCi0gICAgICAg
IHByZXZpb3VzX2xpbmUgPSBnZXRfcHJldmlvdXNfbm9uX2JsYW5rX2xpbmUoY2xlYW5fbGluZXMs
IGxpbmVfbnVtYmVyKVswXQotICAgICAgICBpZiAoKG5vdCBzZWFyY2gocidbOzp9eyk9XVxzKiR8
XClccypjb25zdFxzKiQnLCBwcmV2aW91c19saW5lKQotICAgICAgICAgICAgIG9yIHNlYXJjaChy
J1xiKGlmfGZvcnxmb3JlYWNofHdoaWxlfHN3aXRjaHxlbHNlKVxiJywgcHJldmlvdXNfbGluZSkp
Ci0gICAgICAgICAgICBhbmQgcHJldmlvdXNfbGluZS5maW5kKCcjJykgPCAwKToKLSAgICAgICAg
ICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvYnJhY2VzJywgNCwK
LSAgICAgICAgICAgICAgICAgICdUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBy
ZXZpb3VzIGxpbmUnKQotICAgIGVsaWYgKHNlYXJjaChyJ1wpXHMqKGNvbnN0XHMqKT97XHMqJCcs
IGxpbmUpCi0gICAgICAgICAgYW5kIGxpbmUuY291bnQoJygnKSA9PSBsaW5lLmNvdW50KCcpJykK
LSAgICAgICAgICBhbmQgbm90IHNlYXJjaChyJ1xiKGlmfGZvcnxmb3JlYWNofHdoaWxlfHN3aXRj
aClcYicsIGxpbmUpCi0gICAgICAgICAgYW5kIG5vdCBtYXRjaChyJ1xzK1tBLVpfXVtBLVpfMC05
XStcYicsIGxpbmUpKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hp
dGVzcGFjZS9icmFjZXMnLCA0LAotICAgICAgICAgICAgICAnUGxhY2UgYnJhY2Ugb24gaXRzIG93
biBsaW5lIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4nKQotCi0gICAgaWYgKG1hdGNoKHInXHMq
fVxzKihlbHNlXHMqKHtccyopPyk/JCcsIGxpbmUpIGFuZCBsaW5lX251bWJlciA+IDEpOgotICAg
ICAgICAjIFdlIGNoZWNrIGlmIGEgY2xvc2VkIGJyYWNlIGhhcyBzdGFydGVkIGEgbGluZSB0byBz
ZWUgaWYgYQotICAgICAgICAjIG9uZSBsaW5lIGNvbnRyb2wgc3RhdGVtZW50IHdhcyBwcmV2aW91
cy4KLSAgICAgICAgcHJldmlvdXNfbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJl
ciAtIDJdCi0gICAgICAgIGlmIChwcmV2aW91c19saW5lLmZpbmQoJ3snKSA+IDAKLSAgICAgICAg
ICAgIGFuZCBzZWFyY2gocidcYihpZnxmb3J8Zm9yZWFjaHx3aGlsZXxlbHNlKVxiJywgcHJldmlv
dXNfbGluZSkpOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hp
dGVzcGFjZS9icmFjZXMnLCA0LAotICAgICAgICAgICAgICAgICAgJ09uZSBsaW5lIGNvbnRyb2wg
Y2xhdXNlcyBzaG91bGQgbm90IHVzZSBicmFjZXMuJykKLQotICAgICMgQW4gZWxzZSBjbGF1c2Ug
c2hvdWxkIGJlIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIHByZWNlZGluZyBjbG9zaW5nIGJyYWNl
LgotICAgIGlmIG1hdGNoKHInXHMqZWxzZVxzKicsIGxpbmUpOgotICAgICAgICBwcmV2aW91c19s
aW5lID0gZ2V0X3ByZXZpb3VzX25vbl9ibGFua19saW5lKGNsZWFuX2xpbmVzLCBsaW5lX251bWJl
cilbMF0KLSAgICAgICAgaWYgbWF0Y2gocidccyp9XHMqJCcsIHByZXZpb3VzX2xpbmUpOgotICAg
ICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9uZXdsaW5l
JywgNCwKLSAgICAgICAgICAgICAgICAgICdBbiBlbHNlIHNob3VsZCBhcHBlYXIgb24gdGhlIHNh
bWUgbGluZSBhcyB0aGUgcHJlY2VkaW5nIH0nKQotCi0gICAgIyBMaWtld2lzZSwgYW4gZWxzZSBz
aG91bGQgbmV2ZXIgaGF2ZSB0aGUgZWxzZSBjbGF1c2Ugb24gdGhlIHNhbWUgbGluZQotICAgIGlm
IHNlYXJjaChyJ1xiZWxzZSBbXlxze10nLCBsaW5lKSBhbmQgbm90IHNlYXJjaChyJ1xiZWxzZSBp
ZlxiJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRl
c3BhY2UvbmV3bGluZScsIDQsCi0gICAgICAgICAgICAgICdFbHNlIGNsYXVzZSBzaG91bGQgbmV2
ZXIgYmUgb24gc2FtZSBsaW5lIGFzIGVsc2UgKHVzZSAyIGxpbmVzKScpCi0KLSAgICAjIEluIHRo
ZSBzYW1lIHdheSwgYSBkby93aGlsZSBzaG91bGQgbmV2ZXIgYmUgb24gb25lIGxpbmUKLSAgICBp
ZiBtYXRjaChyJ1xzKmRvIFteXHN7XScsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL25ld2xpbmUnLCA0LAotICAgICAgICAgICAgICAnZG8v
d2hpbGUgY2xhdXNlcyBzaG91bGQgbm90IGJlIG9uIGEgc2luZ2xlIGxpbmUnKQotCi0gICAgIyBC
cmFjZXMgc2hvdWxkbid0IGJlIGZvbGxvd2VkIGJ5IGEgOyB1bmxlc3MgdGhleSdyZSBkZWZpbmlu
ZyBhIHN0cnVjdAotICAgICMgb3IgaW5pdGlhbGl6aW5nIGFuIGFycmF5LgotICAgICMgV2UgY2Fu
J3QgdGVsbCBpbiBnZW5lcmFsLCBidXQgd2UgY2FuIGZvciBzb21lIGNvbW1vbiBjYXNlcy4KLSAg
ICBwcmV2aW91c19saW5lX251bWJlciA9IGxpbmVfbnVtYmVyCi0gICAgd2hpbGUgVHJ1ZToKLSAg
ICAgICAgKHByZXZpb3VzX2xpbmUsIHByZXZpb3VzX2xpbmVfbnVtYmVyKSA9IGdldF9wcmV2aW91
c19ub25fYmxhbmtfbGluZShjbGVhbl9saW5lcywgcHJldmlvdXNfbGluZV9udW1iZXIpCi0gICAg
ICAgIGlmIG1hdGNoKHInXHMrey4qfVxzKjsnLCBsaW5lKSBhbmQgbm90IHByZXZpb3VzX2xpbmUu
Y291bnQoJzsnKToKLSAgICAgICAgICAgIGxpbmUgPSBwcmV2aW91c19saW5lICsgbGluZQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiAoc2VhcmNoKHIney4qfVxzKjsn
LCBsaW5lKQotICAgICAgICBhbmQgbGluZS5jb3VudCgneycpID09IGxpbmUuY291bnQoJ30nKQot
ICAgICAgICBhbmQgbm90IHNlYXJjaChyJ3N0cnVjdHxjbGFzc3xlbnVtfFxzKj1ccyp7JywgbGlu
ZSkpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9i
cmFjZXMnLCA0LAotICAgICAgICAgICAgICAiWW91IGRvbid0IG5lZWQgYSA7IGFmdGVyIGEgfSIp
Ci0KLQotZGVmIGNoZWNrX2V4aXRfc3RhdGVtZW50X3NpbXBsaWZpY2F0aW9ucyhmaWxlbmFtZSwg
Y2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0gICAgIiIiTG9va3MgZm9yIGVsc2Ug
b3IgZWxzZS1pZiBzdGF0ZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYW4KLSAgICBp
ZiBzdGF0ZW1lbnQgd2hlbiB0aGUgcHJpb3IgaWYgY29uY2x1ZGVzIHdpdGggYSByZXR1cm4sIGJy
ZWFrLCBjb250aW51ZSBvcgotICAgIGdvdG8gc3RhdGVtZW50LgotCi0gICAgQXJnczoKLSAgICAg
IGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgY2xlYW5fbGlu
ZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAgICAg
bGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBlcnJv
cjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgotICAgICIiIgot
Ci0gICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0gIyBHZXQgcmlkIG9m
IGNvbW1lbnRzIGFuZCBzdHJpbmdzLgotCi0gICAgZWxzZV9tYXRjaCA9IG1hdGNoKHInKD9QPGVs
c2VfaW5kZW50YXRpb24+XHMqKShcfVxzKik/ZWxzZShccytpZlxzKlwofCg/UDxlbHNlPlxzKihc
e1xzKik/XFopKScsIGxpbmUpCi0gICAgaWYgbm90IGVsc2VfbWF0Y2g6Ci0gICAgICAgIHJldHVy
bgotCi0gICAgZWxzZV9pbmRlbnRhdGlvbiA9IGVsc2VfbWF0Y2guZ3JvdXAoJ2Vsc2VfaW5kZW50
YXRpb24nKQotICAgIGlubmVyX2luZGVudGF0aW9uID0gZWxzZV9pbmRlbnRhdGlvbiArICcgJyAq
IDQKLQotICAgIHByZXZpb3VzX2xpbmVzID0gY2xlYW5fbGluZXMuZWxpZGVkWzpsaW5lX251bWJl
cl0KLSAgICBwcmV2aW91c19saW5lcy5yZXZlcnNlKCkKLSAgICBsaW5lX29mZnNldCA9IDAKLSAg
ICBlbmNvdW50ZXJlZF9leGl0X3N0YXRlbWVudCA9IEZhbHNlCi0KLSAgICBmb3IgY3VycmVudF9s
aW5lIGluIHByZXZpb3VzX2xpbmVzOgotICAgICAgICBsaW5lX29mZnNldCAtPSAxCi0KLSAgICAg
ICAgIyBTa2lwIG5vdCBvbmx5IGVtcHR5IGxpbmVzIGJ1dCBhbHNvIHRob3NlIHdpdGggcHJlcHJv
Y2Vzc29yIGRpcmVjdGl2ZXMKLSAgICAgICAgIyBhbmQgZ290byBsYWJlbHMuCi0gICAgICAgIGlm
IGN1cnJlbnRfbGluZS5zdHJpcCgpID09ICcnIG9yIGN1cnJlbnRfbGluZS5zdGFydHN3aXRoKCcj
Jykgb3IgbWF0Y2gocidcdytccyo6XHMqJCcsIGN1cnJlbnRfbGluZSk6Ci0gICAgICAgICAgICBj
b250aW51ZQotCi0gICAgICAgICMgU2tpcCBsaW5lcyB3aXRoIGNsb3NpbmcgYnJhY2VzIG9uIHRo
ZSBvcmlnaW5hbCBpbmRlbnRhdGlvbiBsZXZlbC4KLSAgICAgICAgIyBFdmVuIHRob3VnaCB0aGUg
c3R5bGVndWlkZSBzYXlzIHRoZXkgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGxpbmUgYXMKLSAgICAg
ICAgIyB0aGUgImVsc2UgaWYiIHN0YXRlbWVudCwgd2UgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBp
bnN0YW5jZXMgd2hlcmUKLSAgICAgICAgIyB0aGUgY3VycmVudCBjb2RlIGRvZXMgbm90IGNvbXBs
eSB3aXRoIHRoZSBjb2Rpbmcgc3R5bGUuIFRodXMsIGlnbm9yZQotICAgICAgICAjIHRoZXNlIGxp
bmVzIGFuZCBwcm9jZWVkIHRvIHRoZSBsaW5lIGJlZm9yZSB0aGF0LgotICAgICAgICBpZiBjdXJy
ZW50X2xpbmUgPT0gZWxzZV9pbmRlbnRhdGlvbiArICd9JzoKLSAgICAgICAgICAgIGNvbnRpbnVl
Ci0KLSAgICAgICAgY3VycmVudF9pbmRlbnRhdGlvbl9tYXRjaCA9IG1hdGNoKHInKD9QPGluZGVu
dGF0aW9uPlxzKikoP1A8cmVtYWluaW5nX2xpbmU+LiopJCcsIGN1cnJlbnRfbGluZSk7Ci0gICAg
ICAgIGN1cnJlbnRfaW5kZW50YXRpb24gPSBjdXJyZW50X2luZGVudGF0aW9uX21hdGNoLmdyb3Vw
KCdpbmRlbnRhdGlvbicpCi0gICAgICAgIHJlbWFpbmluZ19saW5lID0gY3VycmVudF9pbmRlbnRh
dGlvbl9tYXRjaC5ncm91cCgncmVtYWluaW5nX2xpbmUnKQotCi0gICAgICAgICMgQXMgd2UncmUg
Z29pbmcgdXAgdGhlIGxpbmVzLCB0aGUgZmlyc3QgcmVhbCBzdGF0ZW1lbnQgdG8gZW5jb3VudGVy
Ci0gICAgICAgICMgaGFzIHRvIGJlIGFuIGV4aXQgc3RhdGVtZW50IChyZXR1cm4sIGJyZWFrLCBj
b250aW51ZSBvciBnb3RvKSAtCi0gICAgICAgICMgb3RoZXJ3aXNlLCB0aGlzIGNoZWNrIGRvZXNu
J3QgYXBwbHkuCi0gICAgICAgIGlmIG5vdCBlbmNvdW50ZXJlZF9leGl0X3N0YXRlbWVudDoKLSAg
ICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGZpbmQgZXhpdCBzdGF0ZW1lbnRzIGlmIHRoZXkg
YXJlIG9uIGV4YWN0bHkKLSAgICAgICAgICAgICMgdGhlIHNhbWUgbGV2ZWwgb2YgaW5kZW50YXRp
b24gYXMgZXhwZWN0ZWQgZnJvbSB0aGUgY29kZSBpbnNpZGUKLSAgICAgICAgICAgICMgdGhlIGJs
b2NrLiBJZiB0aGUgaW5kZW50YXRpb24gZG9lc24ndCBzdHJpY3RseSBtYXRjaCB0aGVuIHdlCi0g
ICAgICAgICAgICAjIG1pZ2h0IGhhdmUgYSBuZXN0ZWQgaWYgb3Igc29tZXRoaW5nLCB3aGljaCBt
dXN0IGJlIGlnbm9yZWQuCi0gICAgICAgICAgICBpZiBjdXJyZW50X2luZGVudGF0aW9uICE9IGlu
bmVyX2luZGVudGF0aW9uOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBt
YXRjaChyJyhyZXR1cm4oXFcrLiopfChicmVha3xjb250aW51ZSlccyo7fGdvdG9ccypcdys7KSQn
LCByZW1haW5pbmdfbGluZSk6Ci0gICAgICAgICAgICAgICAgZW5jb3VudGVyZWRfZXhpdF9zdGF0
ZW1lbnQgPSBUcnVlCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGJyZWFr
Ci0KLSAgICAgICAgIyBXaGVuIGNvZGUgZXhlY3V0aW9uIHJlYWNoZXMgdGhpcyBwb2ludCwgd2Un
dmUgZm91bmQgYW4gZXhpdCBzdGF0ZW1lbnQKLSAgICAgICAgIyBhcyBsYXN0IHN0YXRlbWVudCBv
ZiB0aGUgcHJldmlvdXMgYmxvY2suIE5vdyB3ZSBvbmx5IG5lZWQgdG8gbWFrZQotICAgICAgICAj
IHN1cmUgdGhhdCB0aGUgYmxvY2sgYmVsb25ncyB0byBhbiAiaWYiLCB0aGVuIHdlIGNhbiB0aHJv
dyBhbiBlcnJvci4KLQotICAgICAgICAjIFNraXAgbGluZXMgd2l0aCBvcGVuaW5nIGJyYWNlcyBv
biB0aGUgb3JpZ2luYWwgaW5kZW50YXRpb24gbGV2ZWwsCi0gICAgICAgICMgc2ltaWxhciB0byB0
aGUgY2xvc2luZyBicmFjZXMgY2hlY2sgYWJvdmUuICgiaWYgKGNvbmRpdGlvbilcbnsiKQotICAg
ICAgICBpZiBjdXJyZW50X2xpbmUgPT0gZWxzZV9pbmRlbnRhdGlvbiArICd7JzoKLSAgICAgICAg
ICAgIGNvbnRpbnVlCi0KLSAgICAgICAgIyBTa2lwIGV2ZXJ5dGhpbmcgdGhhdCdzIGZ1cnRoZXIg
aW5kZW50ZWQgdGhhbiBvdXIgImVsc2UiIG9yICJlbHNlIGlmIi4KLSAgICAgICAgaWYgY3VycmVu
dF9pbmRlbnRhdGlvbi5zdGFydHN3aXRoKGVsc2VfaW5kZW50YXRpb24pIGFuZCBjdXJyZW50X2lu
ZGVudGF0aW9uICE9IGVsc2VfaW5kZW50YXRpb246Ci0gICAgICAgICAgICBjb250aW51ZQotCi0g
ICAgICAgICMgU28gd2UndmUgZ290IGEgbGluZSB3aXRoIHNhbWUgKG9yIGxlc3MpIGluZGVudGF0
aW9uLiBJcyBpdCBhbiAiaWYiPwotICAgICAgICAjIElmIHllczogdGhyb3cgYW4gZXJyb3IuIElm
IG5vOiBkb24ndCB0aHJvdyBhbiBlcnJvci4KLSAgICAgICAgIyBXaGF0ZXZlciB0aGUgb3V0Y29t
ZSwgdGhpcyBpcyB0aGUgZW5kIG9mIG91ciBsb29wLgotICAgICAgICBpZiBtYXRjaChyJ2lmXHMq
XCgnLCByZW1haW5pbmdfbGluZSk6Ci0gICAgICAgICAgICBpZiBlbHNlX21hdGNoLnN0YXJ0KCdl
bHNlJykgIT0gLTE6Ci0gICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVy
ICsgbGluZV9vZmZzZXQsICdyZWFkYWJpbGl0eS9jb250cm9sX2Zsb3cnLCA0LAotICAgICAgICAg
ICAgICAgICAgICAgICdBbiBlbHNlIHN0YXRlbWVudCBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBw
cmlvciAiaWYiICcKLSAgICAgICAgICAgICAgICAgICAgICAnY29uY2x1ZGVzIHdpdGggYSByZXR1
cm4sIGJyZWFrLCBjb250aW51ZSBvciBnb3RvIHN0YXRlbWVudC4nKQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIgKyBsaW5lX29m
ZnNldCwgJ3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxvdycsIDQsCi0gICAgICAgICAgICAgICAgICAg
ICAgJ0FuIGVsc2UgaWYgc3RhdGVtZW50IHNob3VsZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0YXRl
bWVudCAnCi0gICAgICAgICAgICAgICAgICAgICAgJ3doZW4gdGhlIHByaW9yICJpZiIgY29uY2x1
ZGVzIHdpdGggYSByZXR1cm4sIGJyZWFrLCAnCi0gICAgICAgICAgICAgICAgICAgICAgJ2NvbnRp
bnVlIG9yIGdvdG8gc3RhdGVtZW50LicpCi0gICAgICAgIGJyZWFrCi0KLQotZGVmIHJlcGxhY2Vh
YmxlX2NoZWNrKG9wZXJhdG9yLCBtYWNybywgbGluZSk6Ci0gICAgIiIiRGV0ZXJtaW5lIHdoZXRo
ZXIgYSBiYXNpYyBDSEVDSyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIG1vcmUgc3BlY2lmaWMgb25l
LgotCi0gICAgRm9yIGV4YW1wbGUgc3VnZ2VzdCB1c2luZyBDSEVDS19FUSBpbnN0ZWFkIG9mIENI
RUNLKGEgPT0gYikgYW5kCi0gICAgc2ltaWxhcmx5IGZvciBDSEVDS19HRSwgQ0hFQ0tfR1QsIENI
RUNLX0xFLCBDSEVDS19MVCwgQ0hFQ0tfTkUuCi0KLSAgICBBcmdzOgotICAgICAgb3BlcmF0b3I6
IFRoZSBDKysgb3BlcmF0b3IgdXNlZCBpbiB0aGUgQ0hFQ0suCi0gICAgICBtYWNybzogVGhlIENI
RUNLIG9yIEVYUEVDVCBtYWNybyBiZWluZyBjYWxsZWQuCi0gICAgICBsaW5lOiBUaGUgY3VycmVu
dCBzb3VyY2UgbGluZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHRoZSBDSEVDSyBj
YW4gYmUgcmVwbGFjZWQgd2l0aCBhIG1vcmUgc3BlY2lmaWMgb25lLgotICAgICIiIgotCi0gICAg
IyBUaGlzIG1hdGNoZXMgZGVjaW1hbCBhbmQgaGV4IGludGVnZXJzLCBzdHJpbmdzLCBhbmQgY2hh
cnMgKGluIHRoYXQgb3JkZXIpLgotICAgIG1hdGNoX2NvbnN0YW50ID0gcicoWy0rXT8oXGQrfDBb
eFhdWzAtOWEtZkEtRl0rKVtsTHVVXXswLDN9fCIuKiJ8XCcuKlwnKScKLQotICAgICMgRXhwcmVz
c2lvbiB0byBtYXRjaCB0d28gc2lkZXMgb2YgdGhlIG9wZXJhdG9yIHdpdGggc29tZXRoaW5nIHRo
YXQKLSAgICAjIGxvb2tzIGxpa2UgYSBsaXRlcmFsLCBzaW5jZSBDSEVDSyh4ID09IGl0ZXJhdG9y
KSB3b24ndCBjb21waWxlLgotICAgICMgVGhpcyBtZWFucyB3ZSBjYW4ndCBjYXRjaCBhbGwgdGhl
IGNhc2VzIHdoZXJlIGEgbW9yZSBzcGVjaWZpYwotICAgICMgQ0hFQ0sgaXMgcG9zc2libGUsIGJ1
dCBpdCdzIGxlc3MgYW5ub3lpbmcgdGhhbiBkZWFsaW5nIHdpdGgKLSAgICAjIGV4dHJhbmVvdXMg
d2FybmluZ3MuCi0gICAgbWF0Y2hfdGhpcyA9IChyJ1xzKicgKyBtYWNybyArIHInXCgoXHMqJyAr
Ci0gICAgICAgICAgICAgICAgICBtYXRjaF9jb25zdGFudCArIHInXHMqJyArIG9wZXJhdG9yICsg
cidbXjw+XS4qfCcKLSAgICAgICAgICAgICAgICAgIHInLipbXjw+XScgKyBvcGVyYXRvciArIHIn
XHMqJyArIG1hdGNoX2NvbnN0YW50ICsKLSAgICAgICAgICAgICAgICAgIHInXHMqXCkpJykKLQot
ICAgICMgRG9uJ3QgY29tcGxhaW4gYWJvdXQgQ0hFQ0soeCA9PSBOVUxMKSBvciBzaW1pbGFyIGJl
Y2F1c2UKLSAgICAjIENIRUNLX0VRKHgsIE5VTEwpIHdvbid0IGNvbXBpbGUgKHJlcXVpcmVzIGEg
Y2FzdCkuCi0gICAgIyBBbHNvLCBkb24ndCBjb21wbGFpbiBhYm91dCBtb3JlIGNvbXBsZXggYm9v
bGVhbiBleHByZXNzaW9ucwotICAgICMgaW52b2x2aW5nICYmIG9yIHx8IHN1Y2ggYXMgQ0hFQ0so
YSA9PSBiIHx8IGMgPT0gZCkuCi0gICAgcmV0dXJuIG1hdGNoKG1hdGNoX3RoaXMsIGxpbmUpIGFu
ZCBub3Qgc2VhcmNoKHInTlVMTHwmJnxcfFx8JywgbGluZSkKLQotCi1kZWYgY2hlY2tfY2hlY2so
ZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpOgotICAgICIiIkNoZWNr
cyB0aGUgdXNlIG9mIENIRUNLIGFuZCBFWFBFQ1QgbWFjcm9zLgotCi0gICAgQXJnczoKLSAgICAg
IGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgY2xlYW5fbGlu
ZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAgICAg
bGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBlcnJv
cjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgotICAgICIiIgot
Ci0gICAgIyBEZWNpZGUgdGhlIHNldCBvZiByZXBsYWNlbWVudCBtYWNyb3MgdGhhdCBzaG91bGQg
YmUgc3VnZ2VzdGVkCi0gICAgcmF3X2xpbmVzID0gY2xlYW5fbGluZXMucmF3X2xpbmVzCi0gICAg
Y3VycmVudF9tYWNybyA9ICcnCi0gICAgZm9yIG1hY3JvIGluIF9DSEVDS19NQUNST1M6Ci0gICAg
ICAgIGlmIHJhd19saW5lc1tsaW5lX251bWJlcl0uZmluZChtYWNybykgPj0gMDoKLSAgICAgICAg
ICAgIGN1cnJlbnRfbWFjcm8gPSBtYWNybwotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBub3Qg
Y3VycmVudF9tYWNybzoKLSAgICAgICAgIyBEb24ndCB3YXN0ZSB0aW1lIGhlcmUgaWYgbGluZSBk
b2Vzbid0IGNvbnRhaW4gJ0NIRUNLJyBvciAnRVhQRUNUJwotICAgICAgICByZXR1cm4KLQotICAg
IGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdICAgICAgICAjIGdldCByaWQg
b2YgY29tbWVudHMgYW5kIHN0cmluZ3MKLQotICAgICMgRW5jb3VyYWdlIHJlcGxhY2luZyBwbGFp
biBDSEVDS3Mgd2l0aCBDSEVDS19FUS9DSEVDS19ORS9ldGMuCi0gICAgZm9yIG9wZXJhdG9yIGlu
IFsnPT0nLCAnIT0nLCAnPj0nLCAnPicsICc8PScsICc8J106Ci0gICAgICAgIGlmIHJlcGxhY2Vh
YmxlX2NoZWNrKG9wZXJhdG9yLCBjdXJyZW50X21hY3JvLCBsaW5lKToKLSAgICAgICAgICAgIGVy
cm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L2NoZWNrJywgMiwKLSAgICAg
ICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyAlcyBpbnN0ZWFkIG9mICVzKGEgJXMgYiknICUg
KAotICAgICAgICAgICAgICAgICAgICAgIF9DSEVDS19SRVBMQUNFTUVOVFtjdXJyZW50X21hY3Jv
XVtvcGVyYXRvcl0sCi0gICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9tYWNybywgb3BlcmF0
b3IpKQotICAgICAgICAgICAgYnJlYWsKLQotCi1kZWYgY2hlY2tfZm9yX2NvbXBhcmlzb25zX3Rv
X3plcm8oZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpOgotICAgICMg
R2V0IHRoZSBsaW5lIHdpdGhvdXQgY29tbWVudHMgYW5kIHN0cmluZ3MuCi0gICAgbGluZSA9IGNs
ZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0KLQotICAgICMgSW5jbHVkZSBOVUxMIGhlcmUg
c28gdGhhdCB1c2VycyBkb24ndCBoYXZlIHRvIGNvbnZlcnQgTlVMTCB0byAwIGZpcnN0IGFuZCB0
aGVuIGdldCB0aGlzIGVycm9yLgotICAgIGlmIHNlYXJjaChyJ1s9IV09XHMqKE5VTEx8MHx0cnVl
fGZhbHNlKVxXJywgbGluZSkgb3Igc2VhcmNoKHInXFcoTlVMTHwwfHRydWV8ZmFsc2UpXHMqWz0h
XT0nLCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncmVhZGFi
aWxpdHkvY29tcGFyaXNvbl90b196ZXJvJywgNSwKLSAgICAgICAgICAgICAgJ1Rlc3RzIGZvciB0
cnVlL2ZhbHNlLCBudWxsL25vbi1udWxsLCBhbmQgemVyby9ub24temVybyBzaG91bGQgYWxsIGJl
IGRvbmUgd2l0aG91dCBlcXVhbGl0eSBjb21wYXJpc29ucy4nKQotCi0KLWRlZiBjaGVja19mb3Jf
bnVsbChmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0gICAgIyBU
aGlzIGNoZWNrIGRvZXNuJ3QgYXBwbHkgdG8gQyBvciBPYmplY3RpdmUtQyBpbXBsZW1lbnRhdGlv
biBmaWxlcy4KLSAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnLmMnKSBvciBmaWxlbmFtZS5lbmRz
d2l0aCgnLm0nKToKLSAgICAgICAgcmV0dXJuCi0KLSAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxp
ZGVkW2xpbmVfbnVtYmVyXQotCi0gICAgIyBEb24ndCB3YXJuIGFib3V0IE5VTEwgdXNhZ2UgaW4g
Z19vYmplY3Rfe2dldCxzZXR9KCkuIFNlZSBCdWcgMzI4NTgKLSAgICBpZiBzZWFyY2gocidcYmdf
b2JqZWN0X1tzZ11ldFxiJywgbGluZSk6Ci0gICAgICAgIHJldHVybgotCi0gICAgaWYgc2VhcmNo
KHInXGJOVUxMXGInLCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVy
LCAncmVhZGFiaWxpdHkvbnVsbCcsIDUsICdVc2UgMCBpbnN0ZWFkIG9mIE5VTEwuJykKLSAgICAg
ICAgcmV0dXJuCi0KLSAgICBsaW5lID0gY2xlYW5fbGluZXMucmF3X2xpbmVzW2xpbmVfbnVtYmVy
XQotICAgICMgU2VlIGlmIE5VTEwgb2NjdXJzIGluIGFueSBjb21tZW50cyBpbiB0aGUgbGluZS4g
SWYgdGhlIHNlYXJjaCBmb3IgTlVMTCB1c2luZyB0aGUgcmF3IGxpbmUKLSAgICAjIG1hdGNoZXMs
IHRoZW4gZG8gdGhlIGNoZWNrIHdpdGggc3RyaW5ncyBjb2xsYXBzZWQgdG8gYXZvaWQgZ2l2aW5n
IGVycm9ycyBmb3IKLSAgICAjIE5VTExzIG9jY3VycmluZyBpbiBzdHJpbmdzLgotICAgIGlmIHNl
YXJjaChyJ1xiTlVMTFxiJywgbGluZSkgYW5kIHNlYXJjaChyJ1xiTlVMTFxiJywgQ2xlYW5zZWRM
aW5lcy5jb2xsYXBzZV9zdHJpbmdzKGxpbmUpKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxp
bmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvbnVsbCcsIDQsICdVc2UgMCBpbnN0ZWFkIG9mIE5VTEwu
JykKLQotZGVmIGdldF9saW5lX3dpZHRoKGxpbmUpOgotICAgICIiIkRldGVybWluZXMgdGhlIHdp
ZHRoIG9mIHRoZSBsaW5lIGluIGNvbHVtbiBwb3NpdGlvbnMuCi0KLSAgICBBcmdzOgotICAgICAg
bGluZTogQSBzdHJpbmcsIHdoaWNoIG1heSBiZSBhIFVuaWNvZGUgc3RyaW5nLgotCi0gICAgUmV0
dXJuczoKLSAgICAgIFRoZSB3aWR0aCBvZiB0aGUgbGluZSBpbiBjb2x1bW4gcG9zaXRpb25zLCBh
Y2NvdW50aW5nIGZvciBVbmljb2RlCi0gICAgICBjb21iaW5pbmcgY2hhcmFjdGVycyBhbmQgd2lk
ZSBjaGFyYWN0ZXJzLgotICAgICIiIgotICAgIGlmIGlzaW5zdGFuY2UobGluZSwgdW5pY29kZSk6
Ci0gICAgICAgIHdpZHRoID0gMAotICAgICAgICBmb3IgYyBpbiB1bmljb2RlZGF0YS5ub3JtYWxp
emUoJ05GQycsIGxpbmUpOgotICAgICAgICAgICAgaWYgdW5pY29kZWRhdGEuZWFzdF9hc2lhbl93
aWR0aChjKSBpbiAoJ1cnLCAnRicpOgotICAgICAgICAgICAgICAgIHdpZHRoICs9IDIKLSAgICAg
ICAgICAgIGVsaWYgbm90IHVuaWNvZGVkYXRhLmNvbWJpbmluZyhjKToKLSAgICAgICAgICAgICAg
ICB3aWR0aCArPSAxCi0gICAgICAgIHJldHVybiB3aWR0aAotICAgIHJldHVybiBsZW4obGluZSkK
LQotCi1kZWYgY2hlY2tfc3R5bGUoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwg
ZmlsZV9leHRlbnNpb24sIGZpbGVfc3RhdGUsIGVycm9yKToKLSAgICAiIiJDaGVja3MgcnVsZXMg
ZnJvbSB0aGUgJ0MrKyBzdHlsZSBydWxlcycgc2VjdGlvbiBvZiBjcHBndWlkZS5odG1sLgotCi0g
ICAgTW9zdCBvZiB0aGVzZSBydWxlcyBhcmUgaGFyZCB0byB0ZXN0IChuYW1pbmcsIGNvbW1lbnQg
c3R5bGUpLCBidXQgd2UKLSAgICBkbyB3aGF0IHdlIGNhbi4gIEluIHBhcnRpY3VsYXIgd2UgY2hl
Y2sgZm9yIDQtc3BhY2UgaW5kZW50cywgbGluZSBsZW5ndGhzLAotICAgIHRhYiB1c2FnZSwgc3Bh
Y2VzIGluc2lkZSBjb2RlLCBldGMuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBu
YW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBjbGVhbl9saW5lczogQSBDbGVhbnNlZExp
bmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAgICBsaW5lX251bWJlcjogVGhl
IG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGZpbGVfZXh0ZW5zaW9uOiBUaGUg
ZXh0ZW5zaW9uICh3aXRob3V0IHRoZSBkb3QpIG9mIHRoZSBmaWxlbmFtZS4KLSAgICAgIGZpbGVf
c3RhdGU6IEEgX0ZpbGVTdGF0ZSBpbnN0YW5jZSB3aGljaCBtYWludGFpbnMgaW5mb3JtYXRpb24g
YWJvdXQKLSAgICAgICAgICAgICAgICAgIHRoZSBzdGF0ZSBvZiB0aGluZ3MgaW4gdGhlIGZpbGUu
Ci0gICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5k
LgotICAgICIiIgotCi0gICAgcmF3X2xpbmVzID0gY2xlYW5fbGluZXMucmF3X2xpbmVzCi0gICAg
bGluZSA9IHJhd19saW5lc1tsaW5lX251bWJlcl0KLQotICAgIGlmIGxpbmUuZmluZCgnXHQnKSAh
PSAtMToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS90
YWInLCAxLAotICAgICAgICAgICAgICAnVGFiIGZvdW5kOyBiZXR0ZXIgdG8gdXNlIHNwYWNlcycp
Ci0KLSAgICAjIE9uZSBvciB0aHJlZSBibGFuayBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0
aGUgbGluZSBpcyB3ZWlyZDsgaXQncwotICAgICMgaGFyZCB0byByZWNvbmNpbGUgdGhhdCB3aXRo
IDQtc3BhY2UgaW5kZW50cy4KLSAgICAjIE5PVEU6IGhlcmUgYXJlIHRoZSBjb25kaXRpb25zIHJv
YiBwaWtlIHVzZWQgZm9yIGhpcyB0ZXN0cy4gIE1pbmUgYXJlbid0Ci0gICAgIyBhcyBzb3BoaXN0
aWNhdGVkLCBidXQgaXQgbWF5IGJlIHdvcnRoIGJlY29taW5nIHNvOiAgUkxFTkdUSD09aW5pdGlh
bF9zcGFjZXMKLSAgICAjIGlmKFJMRU5HVEggPiAyMCkgY29tcGxhaW4gPSAwOwotICAgICMgaWYo
bWF0Y2goJDAsICIgKyhlcnJvcnxwcml2YXRlfHB1YmxpY3xwcm90ZWN0ZWQpOiIpKSBjb21wbGFp
biA9IDA7Ci0gICAgIyBpZihtYXRjaChwcmV2LCAiJiYgKiQiKSkgY29tcGxhaW4gPSAwOwotICAg
ICMgaWYobWF0Y2gocHJldiwgIlxcfFxcfCAqJCIpKSBjb21wbGFpbiA9IDA7Ci0gICAgIyBpZiht
YXRjaChwcmV2LCAiW1wiLD0+PF0gKiQiKSkgY29tcGxhaW4gPSAwOwotICAgICMgaWYobWF0Y2go
JDAsICIgPDwiKSkgY29tcGxhaW4gPSAwOwotICAgICMgaWYobWF0Y2gocHJldiwgIiArZm9yIFxc
KCIpKSBjb21wbGFpbiA9IDA7Ci0gICAgIyBpZihwcmV2b2RkICYmIG1hdGNoKHByZXZwcmV2LCAi
ICtmb3IgXFwoIikpIGNvbXBsYWluID0gMDsKLSAgICBpbml0aWFsX3NwYWNlcyA9IDAKLSAgICBj
bGVhbnNlZF9saW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQotICAgIHdoaWxl
IGluaXRpYWxfc3BhY2VzIDwgbGVuKGxpbmUpIGFuZCBsaW5lW2luaXRpYWxfc3BhY2VzXSA9PSAn
ICc6Ci0gICAgICAgIGluaXRpYWxfc3BhY2VzICs9IDEKLSAgICBpZiBsaW5lIGFuZCBsaW5lWy0x
XS5pc3NwYWNlKCk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRl
c3BhY2UvZW5kX29mX2xpbmUnLCA0LAotICAgICAgICAgICAgICAnTGluZSBlbmRzIGluIHdoaXRl
c3BhY2UuICBDb25zaWRlciBkZWxldGluZyB0aGVzZSBleHRyYSBzcGFjZXMuJykKLSAgICAjIFRo
ZXJlIGFyZSBjZXJ0YWluIHNpdHVhdGlvbnMgd2UgYWxsb3cgb25lIHNwYWNlLCBub3RhYmx5IGZv
ciBsYWJlbHMKLSAgICBlbGlmICgoaW5pdGlhbF9zcGFjZXMgPj0gMSBhbmQgaW5pdGlhbF9zcGFj
ZXMgPD0gMykKLSAgICAgICAgICBhbmQgbm90IG1hdGNoKHInXHMqXHcrXHMqOlxzKiQnLCBjbGVh
bnNlZF9saW5lKSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRl
c3BhY2UvaW5kZW50JywgMywKLSAgICAgICAgICAgICAgJ1dlaXJkIG51bWJlciBvZiBzcGFjZXMg
YXQgbGluZS1zdGFydC4gICcKLSAgICAgICAgICAgICAgJ0FyZSB5b3UgdXNpbmcgYSA0LXNwYWNl
IGluZGVudD8nKQotICAgICMgTGFiZWxzIHNob3VsZCBhbHdheXMgYmUgaW5kZW50ZWQgYXQgbGVh
c3Qgb25lIHNwYWNlLgotICAgIGVsaWYgbm90IGluaXRpYWxfc3BhY2VzIGFuZCBsaW5lWzoyXSAh
PSAnLy8nOgotICAgICAgICBsYWJlbF9tYXRjaCA9IG1hdGNoKHInKD9QPGxhYmVsPlteOl0rKTpc
cyokJywgbGluZSkKLQotICAgICAgICBpZiBsYWJlbF9tYXRjaDoKLSAgICAgICAgICAgIGxhYmVs
ID0gbGFiZWxfbWF0Y2guZ3JvdXAoJ2xhYmVsJykKLSAgICAgICAgICAgICMgT25seSB0aHJvdyBl
cnJvcnMgZm9yIHN0dWZmIHRoYXQgaXMgZGVmaW5pdGVseSBub3QgYSBnb3RvIGxhYmVsLAotICAg
ICAgICAgICAgIyBiZWNhdXNlIGdvdG8gbGFiZWxzIGNhbiBpbiBmYWN0IG9jY3VyIGF0IHRoZSBz
dGFydCBvZiB0aGUgbGluZS4KLSAgICAgICAgICAgIGlmIGxhYmVsIGluIFsncHVibGljJywgJ3By
aXZhdGUnLCAncHJvdGVjdGVkJ10gb3IgbGFiZWwuZmluZCgnICcpICE9IC0xOgotICAgICAgICAg
ICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvbGFiZWxzJywg
NCwKLSAgICAgICAgICAgICAgICAgICAgICAnTGFiZWxzIHNob3VsZCBhbHdheXMgYmUgaW5kZW50
ZWQgYXQgbGVhc3Qgb25lIHNwYWNlLiAgJwotICAgICAgICAgICAgICAgICAgICAgICdJZiB0aGlz
IGlzIGEgbWVtYmVyLWluaXRpYWxpemVyIGxpc3QgaW4gYSBjb25zdHJ1Y3RvciwgJwotICAgICAg
ICAgICAgICAgICAgICAgICd0aGUgY29sb24gc2hvdWxkIGJlIG9uIHRoZSBsaW5lIGFmdGVyIHRo
ZSBkZWZpbml0aW9uIGhlYWRlci4nKQotCi0gICAgaWYgKGNsZWFuc2VkX2xpbmUuY291bnQoJzsn
KSA+IDEKLSAgICAgICAgIyBmb3IgbG9vcHMgYXJlIGFsbG93ZWQgdHdvIDsncyAoYW5kIG1heSBy
dW4gb3ZlciB0d28gbGluZXMpLgotICAgICAgICBhbmQgY2xlYW5zZWRfbGluZS5maW5kKCdmb3In
KSA9PSAtMQotICAgICAgICBhbmQgKGdldF9wcmV2aW91c19ub25fYmxhbmtfbGluZShjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIpWzBdLmZpbmQoJ2ZvcicpID09IC0xCi0gICAgICAgICAgICAgb3Ig
Z2V0X3ByZXZpb3VzX25vbl9ibGFua19saW5lKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlcilbMF0u
ZmluZCgnOycpICE9IC0xKQotICAgICAgICAjIEl0J3Mgb2sgdG8gaGF2ZSBtYW55IGNvbW1hbmRz
IGluIGEgc3dpdGNoIGNhc2UgdGhhdCBmaXRzIGluIDEgbGluZQotICAgICAgICBhbmQgbm90ICgo
Y2xlYW5zZWRfbGluZS5maW5kKCdjYXNlICcpICE9IC0xCi0gICAgICAgICAgICAgICAgICBvciBj
bGVhbnNlZF9saW5lLmZpbmQoJ2RlZmF1bHQ6JykgIT0gLTEpCi0gICAgICAgICAgICAgICAgIGFu
ZCBjbGVhbnNlZF9saW5lLmZpbmQoJ2JyZWFrOycpICE9IC0xKSk6Ci0gICAgICAgIGVycm9yKGZp
bGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvbmV3bGluZScsIDQsCi0gICAgICAgICAg
ICAgICdNb3JlIHRoYW4gb25lIGNvbW1hbmQgb24gdGhlIHNhbWUgbGluZScpCi0KLSAgICBpZiBj
bGVhbnNlZF9saW5lLnN0cmlwKCkuZW5kc3dpdGgoJ3x8Jykgb3IgY2xlYW5zZWRfbGluZS5zdHJp
cCgpLmVuZHN3aXRoKCcmJicpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICd3aGl0ZXNwYWNlL29wZXJhdG9ycycsIDQsCi0gICAgICAgICAgICAgICdCb29sZWFuIGV4cHJl
c3Npb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBsaW5lcyBzaG91bGQgaGF2ZSB0aGVpciAnCi0gICAg
ICAgICAgICAgICdvcGVyYXRvcnMgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgbGluZSBpbnN0ZWFk
IG9mIHRoZSByaWdodCBzaWRlLicpCi0KLSAgICAjIFNvbWUgbW9yZSBzdHlsZSBjaGVja3MKLSAg
ICBjaGVja19uYW1lc3BhY2VfaW5kZW50YXRpb24oZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5l
X251bWJlciwgZmlsZV9leHRlbnNpb24sIGZpbGVfc3RhdGUsIGVycm9yKQotICAgIGNoZWNrX3Vz
aW5nX3N0ZChmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcikKLSAgICBj
aGVja19tYXhfbWluX21hY3JvcyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBl
cnJvcikKLSAgICBjaGVja19zd2l0Y2hfaW5kZW50YXRpb24oZmlsZW5hbWUsIGNsZWFuX2xpbmVz
LCBsaW5lX251bWJlciwgZXJyb3IpCi0gICAgY2hlY2tfYnJhY2VzKGZpbGVuYW1lLCBjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGVycm9yKQotICAgIGNoZWNrX2V4aXRfc3RhdGVtZW50X3NpbXBs
aWZpY2F0aW9ucyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcikKLSAg
ICBjaGVja19zcGFjaW5nKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9y
KQotICAgIGNoZWNrX2NoZWNrKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVy
cm9yKQotICAgIGNoZWNrX2Zvcl9jb21wYXJpc29uc190b196ZXJvKGZpbGVuYW1lLCBjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGVycm9yKQotICAgIGNoZWNrX2Zvcl9udWxsKGZpbGVuYW1lLCBj
bGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKQotCi0KLV9SRV9QQVRURVJOX0lOQ0xVREVf
TkVXX1NUWUxFID0gcmUuY29tcGlsZShyJyNpbmNsdWRlICsiW14vXStcLmgiJykKLV9SRV9QQVRU
RVJOX0lOQ0xVREUgPSByZS5jb21waWxlKHInXlxzKiNccyppbmNsdWRlXHMqKFs8Il0pKFtePiJd
KilbPiJdLiokJykKLSMgTWF0Y2hlcyB0aGUgZmlyc3QgY29tcG9uZW50IG9mIGEgZmlsZW5hbWUg
ZGVsaW1pdGVkIGJ5IC1zIGFuZCBfcy4gVGhhdCBpczoKLSMgIF9SRV9GSVJTVF9DT01QT05FTlQu
bWF0Y2goJ2ZvbycpLmdyb3VwKDApID09ICdmb28nCi0jICBfUkVfRklSU1RfQ09NUE9ORU5ULm1h
dGNoKCdmb28uY3BwJykuZ3JvdXAoMCkgPT0gJ2ZvbycKLSMgIF9SRV9GSVJTVF9DT01QT05FTlQu
bWF0Y2goJ2Zvby1iYXJfYmF6LmNwcCcpLmdyb3VwKDApID09ICdmb28nCi0jICBfUkVfRklSU1Rf
Q09NUE9ORU5ULm1hdGNoKCdmb29fYmFyLWJhei5jcHAnKS5ncm91cCgwKSA9PSAnZm9vJwotX1JF
X0ZJUlNUX0NPTVBPTkVOVCA9IHJlLmNvbXBpbGUocideW14tXy5dKycpCi0KLQotZGVmIF9kcm9w
X2NvbW1vbl9zdWZmaXhlcyhmaWxlbmFtZSk6Ci0gICAgIiIiRHJvcHMgY29tbW9uIHN1ZmZpeGVz
IGxpa2UgX3Rlc3QuY3BwIG9yIC1pbmwuaCBmcm9tIGZpbGVuYW1lLgotCi0gICAgRm9yIGV4YW1w
bGU6Ci0gICAgICA+Pj4gX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCdmb28vZm9vLWlubC5oJykKLSAg
ICAgICdmb28vZm9vJwotICAgICAgPj4+IF9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Jhci9m
b28uY3BwJykKLSAgICAgICdmb28vYmFyL2ZvbycKLSAgICAgID4+PiBfZHJvcF9jb21tb25fc3Vm
Zml4ZXMoJ2Zvby9mb29faW50ZXJuYWwuaCcpCi0gICAgICAnZm9vL2ZvbycKLSAgICAgID4+PiBf
ZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9mb29fdW51c3VhbGludGVybmFsLmgnKQotICAgICAg
J2Zvby9mb29fdW51c3VhbGludGVybmFsJwotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1lOiBU
aGUgaW5wdXQgZmlsZW5hbWUuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGZpbGVuYW1lIHdp
dGggdGhlIGNvbW1vbiBzdWZmaXggcmVtb3ZlZC4KLSAgICAiIiIKLSAgICBmb3Igc3VmZml4IGlu
ICgndGVzdC5jcHAnLCAncmVndGVzdC5jcHAnLCAndW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAg
ICAgICAgICAnaW5sLmgnLCAnaW1wbC5oJywgJ2ludGVybmFsLmgnKToKLSAgICAgICAgaWYgKGZp
bGVuYW1lLmVuZHN3aXRoKHN1ZmZpeCkgYW5kIGxlbihmaWxlbmFtZSkgPiBsZW4oc3VmZml4KQot
ICAgICAgICAgICAgYW5kIGZpbGVuYW1lWy1sZW4oc3VmZml4KSAtIDFdIGluICgnLScsICdfJykp
OgotICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lWzotbGVuKHN1ZmZpeCkgLSAxXQotICAgIHJl
dHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXQotCi0KLWRlZiBfaXNfdGVzdF9maWxl
bmFtZShmaWxlbmFtZSk6Ci0gICAgIiIiRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZmlsZW5hbWUg
aGFzIGEgc3VmZml4IHRoYXQgaWRlbnRpZmllcyBpdCBhcyBhIHRlc3QuCi0KLSAgICBBcmdzOgot
ICAgICAgZmlsZW5hbWU6IFRoZSBpbnB1dCBmaWxlbmFtZS4KLQotICAgIFJldHVybnM6Ci0gICAg
ICBUcnVlIGlmICdmaWxlbmFtZScgbG9va3MgbGlrZSBhIHRlc3QsIEZhbHNlIG90aGVyd2lzZS4K
LSAgICAiIiIKLSAgICBpZiAoZmlsZW5hbWUuZW5kc3dpdGgoJ190ZXN0LmNwcCcpCi0gICAgICAg
IG9yIGZpbGVuYW1lLmVuZHN3aXRoKCdfdW5pdHRlc3QuY3BwJykKLSAgICAgICAgb3IgZmlsZW5h
bWUuZW5kc3dpdGgoJ19yZWd0ZXN0LmNwcCcpKToKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICBy
ZXR1cm4gRmFsc2UKLQotCi1kZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIGluY2x1ZGUs
IGlzX3N5c3RlbSwgaW5jbHVkZV9zdGF0ZSk6Ci0gICAgIiIiRmlndXJlcyBvdXQgd2hhdCBraW5k
IG9mIGhlYWRlciAnaW5jbHVkZScgaXMuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRo
ZSBjdXJyZW50IGZpbGUgY3BwX3N0eWxlIGlzIHJ1bm5pbmcgb3Zlci4KLSAgICAgIGluY2x1ZGU6
IFRoZSBwYXRoIHRvIGEgI2luY2x1ZGVkIGZpbGUuCi0gICAgICBpc19zeXN0ZW06IFRydWUgaWYg
dGhlICNpbmNsdWRlIHVzZWQgPD4gcmF0aGVyIHRoYW4gIiIuCi0gICAgICBpbmNsdWRlX3N0YXRl
OiBBbiBfSW5jbHVkZVN0YXRlIGluc3RhbmNlIGluIHdoaWNoIHRoZSBoZWFkZXJzIGFyZSBpbnNl
cnRlZC4KLQotICAgIFJldHVybnM6Ci0gICAgICBPbmUgb2YgdGhlIF9YWFhfSEVBREVSIGNvbnN0
YW50cy4KLQotICAgIEZvciBleGFtcGxlOgotICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKCdm
b28uY3BwJywgJ2NvbmZpZy5oJywgRmFsc2UpCi0gICAgICBfQ09ORklHX0hFQURFUgotICAgICAg
Pj4+IF9jbGFzc2lmeV9pbmNsdWRlKCdmb28uY3BwJywgJ2Zvby5oJywgRmFsc2UpCi0gICAgICBf
UFJJTUFSWV9IRUFERVIKLSAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVkZSgnZm9vLmNwcCcsICdi
YXIuaCcsIEZhbHNlKQotICAgICAgX09USEVSX0hFQURFUgotICAgICIiIgotCi0gICAgIyBJZiBp
dCBpcyBhIHN5c3RlbSBoZWFkZXIgd2Uga25vdyBpdCBpcyBjbGFzc2lmaWVkIGFzIF9PVEhFUl9I
RUFERVIuCi0gICAgaWYgaXNfc3lzdGVtOgotICAgICAgICByZXR1cm4gX09USEVSX0hFQURFUgot
Ci0gICAgIyBJZiB0aGUgaW5jbHVkZSBpcyBuYW1lZCBjb25maWcuaCB0aGVuIHRoaXMgaXMgV2Vi
Q29yZS9jb25maWcuaC4KLSAgICBpZiBpbmNsdWRlID09ICJjb25maWcuaCI6Ci0gICAgICAgIHJl
dHVybiBfQ09ORklHX0hFQURFUgotCi0gICAgIyBUaGVyZSBjYW5ub3QgYmUgcHJpbWFyeSBpbmNs
dWRlcyBpbiBoZWFkZXIgZmlsZXMgdGhlbXNlbHZlcy4gT25seSBhbgotICAgICMgaW5jbHVkZSBl
eGFjdGx5IG1hdGNoZXMgdGhlIGhlYWRlciBmaWxlbmFtZSB3aWxsIGJlIGlzIGZsYWdnZWQgYXMK
LSAgICAjIHByaW1hcnksIHNvIHRoYXQgaXQgdHJpZ2dlcnMgdGhlICJkb24ndCBpbmNsdWRlIHlv
dXJzZWxmIiBjaGVjay4KLSAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnLmgnKSBhbmQgZmlsZW5h
bWUgIT0gaW5jbHVkZToKLSAgICAgICAgcmV0dXJuIF9PVEhFUl9IRUFERVI7Ci0KLSAgICAjIFF0
J3MgbW9jIGZpbGVzIGRvIG5vdCBmb2xsb3cgdGhlIG5hbWluZyBhbmQgb3JkZXJpbmcgcnVsZXMs
IHNvIHRoZXkgc2hvdWxkIGJlIHNraXBwZWQKLSAgICBpZiBpbmNsdWRlLnN0YXJ0c3dpdGgoJ21v
Y18nKSBhbmQgaW5jbHVkZS5lbmRzd2l0aCgnLmNwcCcpOgotICAgICAgICByZXR1cm4gX01PQ19I
RUFERVIKLQotICAgIGlmIGluY2x1ZGUuZW5kc3dpdGgoJy5tb2MnKToKLSAgICAgICAgcmV0dXJu
IF9NT0NfSEVBREVSCi0KLSAgICAjIElmIHRoZSB0YXJnZXQgZmlsZSBiYXNlbmFtZSBzdGFydHMg
d2l0aCB0aGUgaW5jbHVkZSB3ZSdyZSBjaGVja2luZwotICAgICMgdGhlbiB3ZSBjb25zaWRlciBp
dCB0aGUgcHJpbWFyeSBoZWFkZXIuCi0gICAgdGFyZ2V0X2Jhc2UgPSBGaWxlSW5mbyhmaWxlbmFt
ZSkuYmFzZV9uYW1lKCkKLSAgICBpbmNsdWRlX2Jhc2UgPSBGaWxlSW5mbyhpbmNsdWRlKS5iYXNl
X25hbWUoKQotCi0gICAgIyBJZiB3ZSBoYXZlbid0IGVuY291bnRlcmVkIGEgcHJpbWFyeSBoZWFk
ZXIsIHRoZW4gYmUgbGVuaWVudCBpbiBjaGVja2luZy4KLSAgICBpZiBub3QgaW5jbHVkZV9zdGF0
ZS52aXNpdGVkX3ByaW1hcnlfc2VjdGlvbigpIGFuZCB0YXJnZXRfYmFzZS5maW5kKGluY2x1ZGVf
YmFzZSkgIT0gLTE6Ci0gICAgICAgIHJldHVybiBfUFJJTUFSWV9IRUFERVIKLSAgICAjIElmIHdl
IGFscmVhZHkgZW5jb3VudGVyZWQgYSBwcmltYXJ5IGhlYWRlciwgcGVyZm9ybSBhIHN0cmljdCBj
b21wYXJpc29uLgotICAgICMgSW4gY2FzZSB0aGUgdHdvIGZpbGVuYW1lIGJhc2VzIGFyZSB0aGUg
c2FtZSB0aGVuIHRoZSBhYm92ZSBsZW5pZW50IGNoZWNrCi0gICAgIyBwcm9iYWJseSB3YXMgYSBm
YWxzZSBwb3NpdGl2ZS4KLSAgICBlbGlmIGluY2x1ZGVfc3RhdGUudmlzaXRlZF9wcmltYXJ5X3Nl
Y3Rpb24oKSBhbmQgdGFyZ2V0X2Jhc2UgPT0gaW5jbHVkZV9iYXNlOgotICAgICAgICByZXR1cm4g
X1BSSU1BUllfSEVBREVSCi0KLSAgICByZXR1cm4gX09USEVSX0hFQURFUgotCi0KLQotZGVmIGNo
ZWNrX2luY2x1ZGVfbGluZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBpbmNs
dWRlX3N0YXRlLCBlcnJvcik6Ci0gICAgIiIiQ2hlY2sgcnVsZXMgdGhhdCBhcmUgYXBwbGljYWJs
ZSB0byAjaW5jbHVkZSBsaW5lcy4KLQotICAgIFN0cmluZ3Mgb24gI2luY2x1ZGUgbGluZXMgYXJl
IE5PVCByZW1vdmVkIGZyb20gZWxpZGVkIGxpbmUsIHRvIG1ha2UKLSAgICBjZXJ0YWluIHRhc2tz
IGVhc2llci4gSG93ZXZlciwgdG8gcHJldmVudCBmYWxzZSBwb3NpdGl2ZXMsIGNoZWNrcwotICAg
IGFwcGxpY2FibGUgdG8gI2luY2x1ZGUgbGluZXMgaW4gQ2hlY2tMYW5ndWFnZSBtdXN0IGJlIHB1
dCBoZXJlLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3Vy
cmVudCBmaWxlLgotICAgICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBj
b250YWluaW5nIHRoZSBmaWxlLgotICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhl
IGxpbmUgdG8gY2hlY2suCi0gICAgICBpbmNsdWRlX3N0YXRlOiBBbiBfSW5jbHVkZVN0YXRlIGlu
c3RhbmNlIGluIHdoaWNoIHRoZSBoZWFkZXJzIGFyZSBpbnNlcnRlZC4KLSAgICAgIGVycm9yOiBU
aGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIiCi0KLSAg
ICBsaW5lID0gY2xlYW5fbGluZXMubGluZXNbbGluZV9udW1iZXJdCi0KLSAgICBtYXRjaGVkID0g
X1JFX1BBVFRFUk5fSU5DTFVERS5zZWFyY2gobGluZSkKLSAgICBpZiBub3QgbWF0Y2hlZDoKLSAg
ICAgICAgcmV0dXJuCi0KLSAgICBpbmNsdWRlID0gbWF0Y2hlZC5ncm91cCgyKQotICAgIGlzX3N5
c3RlbSA9IChtYXRjaGVkLmdyb3VwKDEpID09ICc8JykKLQotICAgICMgTG9vayBmb3IgYW55IG9m
IHRoZSBzdHJlYW0gY2xhc3NlcyB0aGF0IGFyZSBwYXJ0IG9mIHN0YW5kYXJkIEMrKy4KLSAgICBp
ZiBtYXRjaChyJyhmfGluZHxpb3xpfG98cGFyc2V8cGZ8c3RkaW98c3RyfCk/c3RyZWFtJCcsIGlu
Y2x1ZGUpOgotICAgICAgICAjIE1hbnkgdW5pdCB0ZXN0cyB1c2UgY291dCwgc28gd2UgZXhlbXB0
IHRoZW0uCi0gICAgICAgIGlmIG5vdCBfaXNfdGVzdF9maWxlbmFtZShmaWxlbmFtZSk6Ci0gICAg
ICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9zdHJlYW1z
JywgMywKLSAgICAgICAgICAgICAgICAgICdTdHJlYW1zIGFyZSBoaWdobHkgZGlzY291cmFnZWQu
JykKLQotICAgICMgTG9vayBmb3Igc3BlY2lmaWMgaW5jbHVkZXMgdG8gZml4LgotICAgIGlmIGlu
Y2x1ZGUuc3RhcnRzd2l0aCgnd3RmLycpIGFuZCBub3QgaXNfc3lzdGVtOgotICAgICAgICBlcnJv
cihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdidWlsZC9pbmNsdWRlJywgNCwKLSAgICAgICAgICAg
ICAgJ3d0ZiBpbmNsdWRlcyBzaG91bGQgYmUgPHd0Zi9maWxlLmg+IGluc3RlYWQgb2YgInd0Zi9m
aWxlLmgiLicpCi0KLSAgICBkdXBsaWNhdGVfaGVhZGVyID0gaW5jbHVkZSBpbiBpbmNsdWRlX3N0
YXRlCi0gICAgaWYgZHVwbGljYXRlX2hlYWRlcjoKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxp
bmVfbnVtYmVyLCAnYnVpbGQvaW5jbHVkZScsIDQsCi0gICAgICAgICAgICAgICciJXMiIGFscmVh
ZHkgaW5jbHVkZWQgYXQgJXM6JXMnICUKLSAgICAgICAgICAgICAgKGluY2x1ZGUsIGZpbGVuYW1l
LCBpbmNsdWRlX3N0YXRlW2luY2x1ZGVdKSkKLSAgICBlbHNlOgotICAgICAgICBpbmNsdWRlX3N0
YXRlW2luY2x1ZGVdID0gbGluZV9udW1iZXIKLQotICAgIGhlYWRlcl90eXBlID0gX2NsYXNzaWZ5
X2luY2x1ZGUoZmlsZW5hbWUsIGluY2x1ZGUsIGlzX3N5c3RlbSwgaW5jbHVkZV9zdGF0ZSkKLSAg
ICBpbmNsdWRlX3N0YXRlLmhlYWRlcl90eXBlc1tsaW5lX251bWJlcl0gPSBoZWFkZXJfdHlwZQot
Ci0gICAgIyBPbmx5IHByb2NlZWQgaWYgdGhpcyBpc24ndCBhIGR1cGxpY2F0ZSBoZWFkZXIuCi0g
ICAgaWYgZHVwbGljYXRlX2hlYWRlcjoKLSAgICAgICAgcmV0dXJuCi0KLSAgICAjIFdlIHdhbnQg
dG8gZW5zdXJlIHRoYXQgaGVhZGVycyBhcHBlYXIgaW4gdGhlIHJpZ2h0IG9yZGVyOgotICAgICMg
MSkgZm9yIGltcGxlbWVudGF0aW9uIGZpbGVzOiBjb25maWcuaCwgcHJpbWFyeSBoZWFkZXIsIGJs
YW5rIGxpbmUsIGFscGhhYmV0aWNhbGx5IHNvcnRlZAotICAgICMgMikgZm9yIGhlYWRlciBmaWxl
czogYWxwaGFiZXRpY2FsbHkgc29ydGVkCi0gICAgIyBUaGUgaW5jbHVkZV9zdGF0ZSBvYmplY3Qg
a2VlcHMgdHJhY2sgb2YgdGhlIGxhc3QgdHlwZSBzZWVuCi0gICAgIyBhbmQgY29tcGxhaW5zIGlm
IHRoZSBoZWFkZXIgdHlwZXMgYXJlIG91dCBvZiBvcmRlciBvciBtaXNzaW5nLgotICAgIGVycm9y
X21lc3NhZ2UgPSBpbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihoZWFkZXJf
dHlwZSwgZmlsZW5hbWUuZW5kc3dpdGgoJy5oJykpCi0KLSAgICAjIENoZWNrIHRvIG1ha2Ugc3Vy
ZSB3ZSBoYXZlIGEgYmxhbmsgbGluZSBhZnRlciBwcmltYXJ5IGhlYWRlci4KLSAgICBpZiBub3Qg
ZXJyb3JfbWVzc2FnZSBhbmQgaGVhZGVyX3R5cGUgPT0gX1BSSU1BUllfSEVBREVSOgotICAgICAg
ICAgbmV4dF9saW5lID0gY2xlYW5fbGluZXMucmF3X2xpbmVzW2xpbmVfbnVtYmVyICsgMV0KLSAg
ICAgICAgIGlmIG5vdCBpc19ibGFua19saW5lKG5leHRfbGluZSk6Ci0gICAgICAgICAgICBlcnJv
cihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdidWlsZC9pbmNsdWRlX29yZGVyJywgNCwKLSAgICAg
ICAgICAgICAgICAgICdZb3Ugc2hvdWxkIGFkZCBhIGJsYW5rIGxpbmUgYWZ0ZXIgaW1wbGVtZW50
YXRpb24gZmlsZVwncyBvd24gaGVhZGVyLicpCi0KLSAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSBh
bGwgaGVhZGVycyBiZXNpZGVzIGNvbmZpZy5oIGFuZCB0aGUgcHJpbWFyeSBoZWFkZXIgYXJlCi0g
ICAgIyBhbHBoYWJldGljYWxseSBzb3J0ZWQuIFNraXAgUXQncyBtb2MgZmlsZXMuCi0gICAgaWYg
bm90IGVycm9yX21lc3NhZ2UgYW5kIGhlYWRlcl90eXBlID09IF9PVEhFUl9IRUFERVI6Ci0gICAg
ICAgICBwcmV2aW91c19saW5lX251bWJlciA9IGxpbmVfbnVtYmVyIC0gMTsKLSAgICAgICAgIHBy
ZXZpb3VzX2xpbmUgPSBjbGVhbl9saW5lcy5saW5lc1twcmV2aW91c19saW5lX251bWJlcl0KLSAg
ICAgICAgIHByZXZpb3VzX21hdGNoID0gX1JFX1BBVFRFUk5fSU5DTFVERS5zZWFyY2gocHJldmlv
dXNfbGluZSkKLSAgICAgICAgIHdoaWxlIChub3QgcHJldmlvdXNfbWF0Y2ggYW5kIHByZXZpb3Vz
X2xpbmVfbnVtYmVyID4gMAotICAgICAgICAgICAgICAgIGFuZCBub3Qgc2VhcmNoKHInXEEoI2lm
fCNpZmRlZnwjaWZuZGVmfCNlbHNlfCNlbGlmfCNlbmRpZiknLCBwcmV2aW91c19saW5lKSk6Ci0g
ICAgICAgICAgICBwcmV2aW91c19saW5lX251bWJlciAtPSAxOwotICAgICAgICAgICAgcHJldmlv
dXNfbGluZSA9IGNsZWFuX2xpbmVzLmxpbmVzW3ByZXZpb3VzX2xpbmVfbnVtYmVyXQotICAgICAg
ICAgICAgcHJldmlvdXNfbWF0Y2ggPSBfUkVfUEFUVEVSTl9JTkNMVURFLnNlYXJjaChwcmV2aW91
c19saW5lKQotICAgICAgICAgaWYgcHJldmlvdXNfbWF0Y2g6Ci0gICAgICAgICAgICBwcmV2aW91
c19oZWFkZXJfdHlwZSA9IGluY2x1ZGVfc3RhdGUuaGVhZGVyX3R5cGVzW3ByZXZpb3VzX2xpbmVf
bnVtYmVyXQotICAgICAgICAgICAgaWYgcHJldmlvdXNfaGVhZGVyX3R5cGUgPT0gX09USEVSX0hF
QURFUiBhbmQgcHJldmlvdXNfbGluZS5zdHJpcCgpID4gbGluZS5zdHJpcCgpOgotICAgICAgICAg
ICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL2luY2x1ZGVfb3JkZXIn
LCA0LAotICAgICAgICAgICAgICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBwcm9ibGVt
LicpCi0KLSAgICBpZiBlcnJvcl9tZXNzYWdlOgotICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0
aCgnLmgnKToKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxk
L2luY2x1ZGVfb3JkZXInLCA0LAotICAgICAgICAgICAgICAgICAgJyVzIFNob3VsZCBiZTogYWxw
aGFiZXRpY2FsbHkgc29ydGVkLicgJQotICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSkK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwg
J2J1aWxkL2luY2x1ZGVfb3JkZXInLCA0LAotICAgICAgICAgICAgICAgICAgJyVzIFNob3VsZCBi
ZTogY29uZmlnLmgsIHByaW1hcnkgaGVhZGVyLCBibGFuayBsaW5lLCBhbmQgdGhlbiBhbHBoYWJl
dGljYWxseSBzb3J0ZWQuJyAlCi0gICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKQotCi0K
LWRlZiBjaGVja19sYW5ndWFnZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBm
aWxlX2V4dGVuc2lvbiwgaW5jbHVkZV9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICBlcnJvcik6
Ci0gICAgIiIiQ2hlY2tzIHJ1bGVzIGZyb20gdGhlICdDKysgbGFuZ3VhZ2UgcnVsZXMnIHNlY3Rp
b24gb2YgY3BwZ3VpZGUuaHRtbC4KLQotICAgIFNvbWUgb2YgdGhlc2UgcnVsZXMgYXJlIGhhcmQg
dG8gdGVzdCAoZnVuY3Rpb24gb3ZlcmxvYWRpbmcsIHVzaW5nCi0gICAgdWludDMyIGluYXBwcm9w
cmlhdGVseSksIGJ1dCB3ZSBkbyB0aGUgYmVzdCB3ZSBjYW4uCi0KLSAgICBBcmdzOgotICAgICAg
ZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBjbGVhbl9saW5l
czogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAgICBs
aW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGZpbGVf
ZXh0ZW5zaW9uOiBUaGUgZXh0ZW5zaW9uICh3aXRob3V0IHRoZSBkb3QpIG9mIHRoZSBmaWxlbmFt
ZS4KLSAgICAgIGluY2x1ZGVfc3RhdGU6IEFuIF9JbmNsdWRlU3RhdGUgaW5zdGFuY2UgaW4gd2hp
Y2ggdGhlIGhlYWRlcnMgYXJlIGluc2VydGVkLgotICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0
byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAiIiIKLSAgICAjIElmIHRoZSBsaW5l
IGlzIGVtcHR5IG9yIGNvbnNpc3RzIG9mIGVudGlyZWx5IGEgY29tbWVudCwgbm8gbmVlZCB0bwot
ICAgICMgY2hlY2sgaXQuCi0gICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJl
cl0KLSAgICBpZiBub3QgbGluZToKLSAgICAgICAgcmV0dXJuCi0KLSAgICBtYXRjaGVkID0gX1JF
X1BBVFRFUk5fSU5DTFVERS5zZWFyY2gobGluZSkKLSAgICBpZiBtYXRjaGVkOgotICAgICAgICBj
aGVja19pbmNsdWRlX2xpbmUoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgaW5j
bHVkZV9zdGF0ZSwgZXJyb3IpCi0gICAgICAgIHJldHVybgotCi0gICAgIyBGSVhNRTogZmlndXJl
IG91dCBpZiB0aGV5J3JlIHVzaW5nIGRlZmF1bHQgYXJndW1lbnRzIGluIGZuIHByb3RvLgotCi0g
ICAgIyBDaGVjayB0byBzZWUgaWYgdGhleSdyZSB1c2luZyBhbiBjb252ZXJzaW9uIGZ1bmN0aW9u
IGNhc3QuCi0gICAgIyBJIGp1c3QgdHJ5IHRvIGNhcHR1cmUgdGhlIG1vc3QgY29tbW9uIGJhc2lj
IHR5cGVzLCB0aG91Z2ggdGhlcmUgYXJlIG1vcmUuCi0gICAgIyBQYXJhbWV0ZXJsZXNzIGNvbnZl
cnNpb24gZnVuY3Rpb25zLCBzdWNoIGFzIGJvb2woKSwgYXJlIGFsbG93ZWQgYXMgdGhleSBhcmUK
LSAgICAjIHByb2JhYmx5IGEgbWVtYmVyIG9wZXJhdG9yIGRlY2xhcmF0aW9uIG9yIGRlZmF1bHQg
Y29uc3RydWN0b3IuCi0gICAgbWF0Y2hlZCA9IHNlYXJjaCgKLSAgICAgICAgcidcYihpbnR8Zmxv
YXR8ZG91YmxlfGJvb2x8Y2hhcnxpbnQzMnx1aW50MzJ8aW50NjR8dWludDY0KVwoW14pXScsIGxp
bmUpCi0gICAgaWYgbWF0Y2hlZDoKLSAgICAgICAgIyBnTW9jayBtZXRob2RzIGFyZSBkZWZpbmVk
IHVzaW5nIHNvbWUgdmFyaWFudCBvZiBNT0NLX01FVEhPRHgobmFtZSwgdHlwZSkKLSAgICAgICAg
IyB3aGVyZSB0eXBlIG1heSBiZSBmbG9hdCgpLCBpbnQoc3RyaW5nKSwgZXRjLiAgV2l0aG91dCBj
b250ZXh0IHRoZXkgYXJlCi0gICAgICAgICMgdmlydHVhbGx5IGluZGlzdGluZ3Vpc2hhYmxlIGZy
b20gaW50KHgpIGNhc3RzLgotICAgICAgICBpZiBub3QgbWF0Y2gocideXHMqTU9DS18oQ09OU1Rf
KT9NRVRIT0RcZCsoX1QpP1woJywgbGluZSk6Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9jYXN0aW5nJywgNCwKLSAgICAgICAgICAgICAgICAg
ICdVc2luZyBkZXByZWNhdGVkIGNhc3Rpbmcgc3R5bGUuICAnCi0gICAgICAgICAgICAgICAgICAn
VXNlIHN0YXRpY19jYXN0PCVzPiguLi4pIGluc3RlYWQnICUKLSAgICAgICAgICAgICAgICAgIG1h
dGNoZWQuZ3JvdXAoMSkpCi0KLSAgICBjaGVja19jX3N0eWxlX2Nhc3QoZmlsZW5hbWUsIGxpbmVf
bnVtYmVyLCBsaW5lLCBjbGVhbl9saW5lcy5yYXdfbGluZXNbbGluZV9udW1iZXJdLAotICAgICAg
ICAgICAgICAgICAgICAgICAnc3RhdGljX2Nhc3QnLAotICAgICAgICAgICAgICAgICAgICAgICBy
J1woKGludHxmbG9hdHxkb3VibGV8Ym9vbHxjaGFyfHU/aW50KDE2fDMyfDY0KSlcKScsCi0gICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yKQotICAgICMgVGhpcyBkb2Vzbid0IGNhdGNoIGFsbCBj
YXNlcy4gIENvbnNpZGVyIChjb25zdCBjaGFyICogY29uc3QpImhlbGxvIi4KLSAgICBjaGVja19j
X3N0eWxlX2Nhc3QoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBsaW5lLCBjbGVhbl9saW5lcy5yYXdf
bGluZXNbbGluZV9udW1iZXJdLAotICAgICAgICAgICAgICAgICAgICAgICAncmVpbnRlcnByZXRf
Y2FzdCcsIHInXCgoXHcrXHM/XCorXHM/KVwpJywgZXJyb3IpCi0KLSAgICAjIEluIGFkZGl0aW9u
LCB3ZSBsb29rIGZvciBwZW9wbGUgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgY2FzdC4gIFRoaXMK
LSAgICAjIGlzIGRhbmdlcm91cyAtLSBjYXN0cyBjYW4gYXNzaWduIHRvIHRlbXBvcmFyaWVzLCBz
byB0aGUgcG9pbnRlciBkb2Vzbid0Ci0gICAgIyBwb2ludCB3aGVyZSB5b3UgdGhpbmsuCi0gICAg
aWYgc2VhcmNoKAotICAgICAgICByJygmXChbXildK1wpW1x3KF0pfCgmKHN0YXRpY3xkeW5hbWlj
fHJlaW50ZXJwcmV0KV9jYXN0XGIpJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBs
aW5lX251bWJlciwgJ3J1bnRpbWUvY2FzdGluZycsIDQsCi0gICAgICAgICAgICAgICgnQXJlIHlv
dSB0YWtpbmcgYW4gYWRkcmVzcyBvZiBhIGNhc3Q/ICAnCi0gICAgICAgICAgICAgICAnVGhpcyBp
cyBkYW5nZXJvdXM6IGNvdWxkIGJlIGEgdGVtcCB2YXIuICAnCi0gICAgICAgICAgICAgICAnVGFr
ZSB0aGUgYWRkcmVzcyBiZWZvcmUgZG9pbmcgdGhlIGNhc3QsIHJhdGhlciB0aGFuIGFmdGVyJykp
Ci0KLSAgICAjIENoZWNrIGZvciBwZW9wbGUgZGVjbGFyaW5nIHN0YXRpYy9nbG9iYWwgU1RMIHN0
cmluZ3MgYXQgdGhlIHRvcCBsZXZlbC4KLSAgICAjIFRoaXMgaXMgZGFuZ2Vyb3VzIGJlY2F1c2Ug
dGhlIEMrKyBsYW5ndWFnZSBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdAotICAgICMgZ2xvYmFscyB3
aXRoIGNvbnN0cnVjdG9ycyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBmaXJzdCBhY2Nlc3Mu
Ci0gICAgbWF0Y2hlZCA9IG1hdGNoKAotICAgICAgICByJygoPzp8c3RhdGljICspKD86fGNvbnN0
ICspKXN0cmluZyArKFthLXpBLVowLTlfOl0rKVxiKC4qKScsCi0gICAgICAgIGxpbmUpCi0gICAg
IyBNYWtlIHN1cmUgaXQncyBub3QgYSBmdW5jdGlvbi4KLSAgICAjIEZ1bmN0aW9uIHRlbXBsYXRl
IHNwZWNpYWxpemF0aW9uIGxvb2tzIGxpa2U6ICJzdHJpbmcgZm9vPFR5cGU+KC4uLiIuCi0gICAg
IyBDbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9ucyBsb29rIGxpa2U6ICJzdHJpbmcgRm9vPFR5cGU+
OjpNZXRob2QoLi4uIi4KLSAgICBpZiBtYXRjaGVkIGFuZCBub3QgbWF0Y2gocidccyooPC4qPik/
KDo6W2EtekEtWjAtOV9dKyk/XHMqXCgoW14iXXwkKScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZWQuZ3JvdXAoMykpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9u
dW1iZXIsICdydW50aW1lL3N0cmluZycsIDQsCi0gICAgICAgICAgICAgICdGb3IgYSBzdGF0aWMv
Z2xvYmFsIHN0cmluZyBjb25zdGFudCwgdXNlIGEgQyBzdHlsZSBzdHJpbmcgaW5zdGVhZDogJwot
ICAgICAgICAgICAgICAnIiVzY2hhciAlc1tdIi4nICUKLSAgICAgICAgICAgICAgKG1hdGNoZWQu
Z3JvdXAoMSksIG1hdGNoZWQuZ3JvdXAoMikpKQotCi0gICAgIyBDaGVjayB0aGF0IHdlJ3JlIG5v
dCB1c2luZyBSVFRJIG91dHNpZGUgb2YgdGVzdGluZyBjb2RlLgotICAgIGlmIHNlYXJjaChyJ1xi
ZHluYW1pY19jYXN0PCcsIGxpbmUpIGFuZCBub3QgX2lzX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUp
OgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdydW50aW1lL3J0dGknLCA1
LAotICAgICAgICAgICAgICAnRG8gbm90IHVzZSBkeW5hbWljX2Nhc3Q8Pi4gIElmIHlvdSBuZWVk
IHRvIGNhc3Qgd2l0aGluIGEgY2xhc3MgJwotICAgICAgICAgICAgICAiaGllcmFyY2h5LCB1c2Ug
c3RhdGljX2Nhc3Q8PiB0byB1cGNhc3QuICBHb29nbGUgZG9lc24ndCBzdXBwb3J0ICIKLSAgICAg
ICAgICAgICAgJ1JUVEkuJykKLQotICAgIGlmIHNlYXJjaChyJ1xiKFtBLVphLXowLTlfXSpfKVwo
XDFcKScsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdydW50
aW1lL2luaXQnLCA0LAotICAgICAgICAgICAgICAnWW91IHNlZW0gdG8gYmUgaW5pdGlhbGl6aW5n
IGEgbWVtYmVyIHZhcmlhYmxlIHdpdGggaXRzZWxmLicpCi0KLSAgICBpZiBmaWxlX2V4dGVuc2lv
biA9PSAnaCc6Ci0gICAgICAgICMgRklYTUU6IGNoZWNrIHRoYXQgMS1hcmcgY29uc3RydWN0b3Jz
IGFyZSBleHBsaWNpdC4KLSAgICAgICAgIyAgICAgICAgSG93IHRvIHRlbGwgaXQncyBhIGNvbnN0
cnVjdG9yPwotICAgICAgICAjICAgICAgICAoaGFuZGxlZCBpbiBjaGVja19mb3Jfbm9uX3N0YW5k
YXJkX2NvbnN0cnVjdHMgZm9yIG5vdykKLSAgICAgICAgcGFzcwotCi0gICAgIyBDaGVjayBpZiBw
ZW9wbGUgYXJlIHVzaW5nIHRoZSB2ZXJib3RlbiBDIGJhc2ljIHR5cGVzLiAgVGhlIG9ubHkgZXhj
ZXB0aW9uCi0gICAgIyB3ZSByZWd1bGFybHkgYWxsb3cgaXMgInVuc2lnbmVkIHNob3J0IHBvcnQi
IGZvciBwb3J0LgotICAgIGlmIHNlYXJjaChyJ1xic2hvcnQgcG9ydFxiJywgbGluZSk6Ci0gICAg
ICAgIGlmIG5vdCBzZWFyY2gocidcYnVuc2lnbmVkIHNob3J0IHBvcnRcYicsIGxpbmUpOgotICAg
ICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncnVudGltZS9pbnQnLCA0LAot
ICAgICAgICAgICAgICAgICAgJ1VzZSAidW5zaWduZWQgc2hvcnQiIGZvciBwb3J0cywgbm90ICJz
aG9ydCInKQotCi0gICAgIyBXaGVuIHNucHJpbnRmIGlzIHVzZWQsIHRoZSBzZWNvbmQgYXJndW1l
bnQgc2hvdWxkbid0IGJlIGEgbGl0ZXJhbC4KLSAgICBtYXRjaGVkID0gc2VhcmNoKHInc25wcmlu
dGZccypcKChbXixdKiksXHMqKFswLTldKilccyosJywgbGluZSkKLSAgICBpZiBtYXRjaGVkOgot
ICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdydW50aW1lL3ByaW50ZicsIDMs
Ci0gICAgICAgICAgICAgICdJZiB5b3UgY2FuLCB1c2Ugc2l6ZW9mKCVzKSBpbnN0ZWFkIG9mICVz
IGFzIHRoZSAybmQgYXJnICcKLSAgICAgICAgICAgICAgJ3RvIHNucHJpbnRmLicgJSAobWF0Y2hl
ZC5ncm91cCgxKSwgbWF0Y2hlZC5ncm91cCgyKSkpCi0KLSAgICAjIENoZWNrIGlmIHNvbWUgdmVy
Ym90ZW4gQyBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuCi0gICAgaWYgc2VhcmNoKHInXGJzcHJp
bnRmXGInLCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncnVu
dGltZS9wcmludGYnLCA1LAotICAgICAgICAgICAgICAnTmV2ZXIgdXNlIHNwcmludGYuICBVc2Ug
c25wcmludGYgaW5zdGVhZC4nKQotICAgIG1hdGNoZWQgPSBzZWFyY2gocidcYihzdHJjcHl8c3Ry
Y2F0KVxiJywgbGluZSkKLSAgICBpZiBtYXRjaGVkOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICdydW50aW1lL3ByaW50ZicsIDQsCi0gICAgICAgICAgICAgICdBbG1vc3Qg
YWx3YXlzLCBzbnByaW50ZiBpcyBiZXR0ZXIgdGhhbiAlcycgJSBtYXRjaGVkLmdyb3VwKDEpKQot
Ci0gICAgaWYgc2VhcmNoKHInXGJzc2NhbmZcYicsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxl
bmFtZSwgbGluZV9udW1iZXIsICdydW50aW1lL3ByaW50ZicsIDEsCi0gICAgICAgICAgICAgICdz
c2NhbmYgY2FuIGJlIG9rLCBidXQgaXMgc2xvdyBhbmQgY2FuIG92ZXJmbG93IGJ1ZmZlcnMuJykK
LQotICAgICMgQ2hlY2sgZm9yIHN1c3BpY2lvdXMgdXNhZ2Ugb2YgImlmIiBsaWtlCi0gICAgIyB9
IGlmIChhID09IGIpIHsKLSAgICBpZiBzZWFyY2gocidcfVxzKmlmXHMqXCgnLCBsaW5lKToKLSAg
ICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvYnJhY2VzJywg
NCwKLSAgICAgICAgICAgICAgJ0RpZCB5b3UgbWVhbiAiZWxzZSBpZiI/IElmIG5vdCwgc3RhcnQg
YSBuZXcgbGluZSBmb3IgImlmIi4nKQotCi0gICAgIyBDaGVjayBmb3IgcG90ZW50aWFsIGZvcm1h
dCBzdHJpbmcgYnVncyBsaWtlIHByaW50Zihmb28pLgotICAgICMgV2UgY29uc3RyYWluIHRoZSBw
YXR0ZXJuIG5vdCB0byBwaWNrIHRoaW5ncyBsaWtlIERvY2lkRm9yUHJpbnRmKGZvbykuCi0gICAg
IyBOb3QgcGVyZmVjdCBidXQgaXQgY2FuIGNhdGNoIHByaW50Zihmb28uY19zdHIoKSkgYW5kIHBy
aW50Zihmb28tPmNfc3RyKCkpCi0gICAgbWF0Y2hlZCA9IHJlLnNlYXJjaChyJ1xiKCg/OnN0cmlu
Zyk/cHJpbnRmKVxzKlwoKFtcdy5cLT4oKV0rKVwpJywgbGluZSwgcmUuSSkKLSAgICBpZiBtYXRj
aGVkOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdydW50aW1lL3ByaW50
ZicsIDQsCi0gICAgICAgICAgICAgICdQb3RlbnRpYWwgZm9ybWF0IHN0cmluZyBidWcuIERvICVz
KCIlJXMiLCAlcykgaW5zdGVhZC4nCi0gICAgICAgICAgICAgICUgKG1hdGNoZWQuZ3JvdXAoMSks
IG1hdGNoZWQuZ3JvdXAoMikpKQotCi0gICAgIyBDaGVjayBmb3IgcG90ZW50aWFsIG1lbXNldCBi
dWdzIGxpa2UgbWVtc2V0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLgotICAgIG1hdGNoZWQgPSBzZWFy
Y2gocidtZW1zZXRccypcKChbXixdKiksXHMqKFteLF0qKSxccyowXHMqXCknLCBsaW5lKQotICAg
IGlmIG1hdGNoZWQgYW5kIG5vdCBtYXRjaChyIl4nJ3wtP1swLTldK3wweFswLTlBLUZhLWZdJCIs
IG1hdGNoZWQuZ3JvdXAoMikpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICdydW50aW1lL21lbXNldCcsIDQsCi0gICAgICAgICAgICAgICdEaWQgeW91IG1lYW4gIm1lbXNl
dCglcywgMCwgJXMpIj8nCi0gICAgICAgICAgICAgICUgKG1hdGNoZWQuZ3JvdXAoMSksIG1hdGNo
ZWQuZ3JvdXAoMikpKQotCi0gICAgIyBEZXRlY3QgdmFyaWFibGUtbGVuZ3RoIGFycmF5cy4KLSAg
ICBtYXRjaGVkID0gbWF0Y2gocidccyooLis6Oik/KFx3KykgW2Etel1cdypcWyguKyldOycsIGxp
bmUpCi0gICAgaWYgKG1hdGNoZWQgYW5kIG1hdGNoZWQuZ3JvdXAoMikgIT0gJ3JldHVybicgYW5k
IG1hdGNoZWQuZ3JvdXAoMikgIT0gJ2RlbGV0ZScgYW5kCi0gICAgICAgIG1hdGNoZWQuZ3JvdXAo
MykuZmluZCgnXScpID09IC0xKToKLSAgICAgICAgIyBTcGxpdCB0aGUgc2l6ZSB1c2luZyBzcGFj
ZSBhbmQgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYXMgZGVsaW1pdGVycy4KLSAgICAgICAgIyBJZiBh
bnkgb2YgdGhlIHJlc3VsdGluZyB0b2tlbnMgYXJlIG5vdCBjb21waWxlIHRpbWUgY29uc3RhbnRz
IHRoZW4KLSAgICAgICAgIyByZXBvcnQgdGhlIGVycm9yLgotICAgICAgICB0b2tlbnMgPSByZS5z
cGxpdChyJ1xzfFwrfFwtfFwqfFwvfDw8fD4+XScsIG1hdGNoZWQuZ3JvdXAoMykpCi0gICAgICAg
IGlzX2NvbnN0ID0gVHJ1ZQotICAgICAgICBza2lwX25leHQgPSBGYWxzZQotICAgICAgICBmb3Ig
dG9rIGluIHRva2VuczoKLSAgICAgICAgICAgIGlmIHNraXBfbmV4dDoKLSAgICAgICAgICAgICAg
ICBza2lwX25leHQgPSBGYWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAg
ICAgIGlmIHNlYXJjaChyJ3NpemVvZlwoLitcKScsIHRvayk6Ci0gICAgICAgICAgICAgICAgY29u
dGludWUKLSAgICAgICAgICAgIGlmIHNlYXJjaChyJ2FycmF5c2l6ZVwoXHcrXCknLCB0b2spOgot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIHRvayA9IHRvay5sc3RyaXAo
JygnKQotICAgICAgICAgICAgdG9rID0gdG9rLnJzdHJpcCgnKScpCi0gICAgICAgICAgICBpZiBu
b3QgdG9rOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBtYXRjaChy
J1xkKycsIHRvayk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG1h
dGNoKHInMFt4WF1bMC05YS1mQS1GXSsnLCB0b2spOgotICAgICAgICAgICAgICAgIGNvbnRpbnVl
Ci0gICAgICAgICAgICBpZiBtYXRjaChyJ2tbQS1aMC05XVx3KicsIHRvayk6Ci0gICAgICAgICAg
ICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG1hdGNoKHInKC4rOjopP2tbQS1aMC05XVx3
KicsIHRvayk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG1hdGNo
KHInKC4rOjopP1tBLVpdW0EtWjAtOV9dKicsIHRvayk6Ci0gICAgICAgICAgICAgICAgY29udGlu
dWUKLSAgICAgICAgICAgICMgQSBjYXRjaCBhbGwgZm9yIHRyaWNreSBzaXplb2YgY2FzZXMsIGlu
Y2x1ZGluZyAnc2l6ZW9mIGV4cHJlc3Npb24nLAotICAgICAgICAgICAgIyAnc2l6ZW9mKCp0eXBl
KScsICdzaXplb2YoY29uc3QgdHlwZSknLCAnc2l6ZW9mKHN0cnVjdCBTdHJ1Y3ROYW1lKScKLSAg
ICAgICAgICAgICMgcmVxdWlyZXMgc2tpcHBpbmcgdGhlIG5leHQgdG9rZW4gYmVjYXN1ZSB3ZSBz
cGxpdCBvbiAnICcgYW5kICcqJy4KLSAgICAgICAgICAgIGlmIHRvay5zdGFydHN3aXRoKCdzaXpl
b2YnKToKLSAgICAgICAgICAgICAgICBza2lwX25leHQgPSBUcnVlCi0gICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgIGlzX2NvbnN0ID0gRmFsc2UKLSAgICAgICAgICAgIGJyZWFr
Ci0gICAgICAgIGlmIG5vdCBpc19jb25zdDoKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBs
aW5lX251bWJlciwgJ3J1bnRpbWUvYXJyYXlzJywgMSwKLSAgICAgICAgICAgICAgICAgICdEbyBu
b3QgdXNlIHZhcmlhYmxlLWxlbmd0aCBhcnJheXMuICBVc2UgYW4gYXBwcm9wcmlhdGVseSBuYW1l
ZCAnCi0gICAgICAgICAgICAgICAgICAiKCdrJyBmb2xsb3dlZCBieSBDYW1lbENhc2UpIGNvbXBp
bGUtdGltZSBjb25zdGFudCBmb3IgdGhlIHNpemUuIikKLQotICAgICMgQ2hlY2sgZm9yIHVzZSBv
ZiB1bm5hbWVkIG5hbWVzcGFjZXMgaW4gaGVhZGVyIGZpbGVzLiAgUmVnaXN0cmF0aW9uCi0gICAg
IyBtYWNyb3MgYXJlIHR5cGljYWxseSBPSywgc28gd2UgYWxsb3cgdXNlIG9mICJuYW1lc3BhY2Ug
eyIgb24gbGluZXMKLSAgICAjIHRoYXQgZW5kIHdpdGggYmFja3NsYXNoZXMuCi0gICAgaWYgKGZp
bGVfZXh0ZW5zaW9uID09ICdoJwotICAgICAgICBhbmQgc2VhcmNoKHInXGJuYW1lc3BhY2Vccyp7
JywgbGluZSkKLSAgICAgICAgYW5kIGxpbmVbLTFdICE9ICdcXCcpOgotICAgICAgICBlcnJvcihm
aWxlbmFtZSwgbGluZV9udW1iZXIsICdidWlsZC9uYW1lc3BhY2VzJywgNCwKLSAgICAgICAgICAg
ICAgJ0RvIG5vdCB1c2UgdW5uYW1lZCBuYW1lc3BhY2VzIGluIGhlYWRlciBmaWxlcy4gIFNlZSAn
Ci0gICAgICAgICAgICAgICdodHRwOi8vZ29vZ2xlLXN0eWxlZ3VpZGUuZ29vZ2xlY29kZS5jb20v
c3ZuL3RydW5rL2NwcGd1aWRlLnhtbCNOYW1lc3BhY2VzJwotICAgICAgICAgICAgICAnIGZvciBt
b3JlIGluZm9ybWF0aW9uLicpCi0KLSAgICBjaGVja19pZGVudGlmaWVyX25hbWVfaW5fZGVjbGFy
YXRpb24oZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBsaW5lLCBlcnJvcikKLQotCi1kZWYgY2hlY2tf
aWRlbnRpZmllcl9uYW1lX2luX2RlY2xhcmF0aW9uKGZpbGVuYW1lLCBsaW5lX251bWJlciwgbGlu
ZSwgZXJyb3IpOgotICAgICIiIkNoZWNrcyBpZiBpZGVudGlmaWVyIG5hbWVzIGNvbnRhaW4gYW55
IHVuZGVyc2NvcmVzLgotCi0gICAgQXMgaWRlbnRpZmllcnMgaW4gbGlicmFyaWVzIHdlIGFyZSB1
c2luZyBoYXZlIGEgYnVuY2ggb2YKLSAgICB1bmRlcnNjb3Jlcywgd2Ugb25seSB3YXJuIGFib3V0
IHRoZSBkZWNsYXJhdGlvbnMgb2YgaWRlbnRpZmllcnMKLSAgICBhbmQgZG9uJ3QgY2hlY2sgdXNl
IG9mIGlkZW50aWZpZXJzLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBv
ZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhl
IGxpbmUgdG8gY2hlY2suCi0gICAgICBsaW5lOiBUaGUgbGluZSBvZiBjb2RlIHRvIGNoZWNrLgot
ICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4K
LSAgICAiIiIKLSAgICAjIFdlIGRvbid0IGNoZWNrIGEgcmV0dXJuIHN0YXRlbWVudC4KLSAgICBp
ZiBtYXRjaChyJ1xzKihyZXR1cm58ZGVsZXRlKVxiJywgbGluZSk6Ci0gICAgICAgIHJldHVybgot
Ci0gICAgIyBCYXNpY2FsbHksIGEgZGVjbGFyYXRpb24gaXMgYSB0eXBlIG5hbWUgZm9sbG93ZWQg
Ynkgd2hpdGVzcGFjZXMKLSAgICAjIGZvbGxvd2VkIGJ5IGFuIGlkZW50aWZpZXIuIFRoZSB0eXBl
IG5hbWUgY2FuIGJlIGNvbXBsaWNhdGVkCi0gICAgIyBkdWUgdG8gdHlwZSBhZGplY3RpdmVzIGFu
ZCB0ZW1wbGF0ZXMuIFdlIHJlbW92ZSB0aGVtIGZpcnN0IHRvCi0gICAgIyBzaW1wbGlmeSB0aGUg
cHJvY2VzcyB0byBmaW5kIGRlY2xhcmF0aW9ucyBvZiBpZGVudGlmaWVycy4KLQotICAgICMgQ29u
dmVydCAibG9uZyBsb25nIiwgImxvbmcgZG91YmxlIiwgYW5kICJsb25nIGxvbmcgaW50IiB0bwot
ICAgICMgc2ltcGxlIHR5cGVzLCBidXQgZG9uJ3QgcmVtb3ZlIHNpbXBsZSAibG9uZyIuCi0gICAg
bGluZSA9IHN1YihyJ2xvbmcgKGxvbmcgKT8oPz1sb25nfGRvdWJsZXxpbnQpJywgJycsIGxpbmUp
Ci0gICAgbGluZSA9IHN1YihyJ1xiKHVuc2lnbmVkfHNpZ25lZHxpbmxpbmV8dXNpbmd8c3RhdGlj
fGNvbnN0fHZvbGF0aWxlfGF1dG98cmVnaXN0ZXJ8ZXh0ZXJufHR5cGVkZWZ8cmVzdHJpY3R8c3Ry
dWN0fGNsYXNzfHZpcnR1YWwpKD89XFcpJywgJycsIGxpbmUpCi0KLSAgICAjIFJlbW92ZSBhbGwg
dGVtcGxhdGUgcGFyYW1ldGVycyBieSByZW1vdmluZyBtYXRjaGluZyA8IGFuZCA+LgotICAgICMg
TG9vcCB1bnRpbCBubyB0ZW1wbGF0ZXMgYXJlIHJlbW92ZWQgdG8gcmVtb3ZlIG5lc3RlZCB0ZW1w
bGF0ZXMuCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgbGluZSwgbnVtYmVyX29mX3JlcGxhY2Vt
ZW50cyA9IHN1Ym4ocic8KFtcd1xzOl18OjopK1xzKlsqJl0qXHMqPicsICcnLCBsaW5lKQotICAg
ICAgICBpZiBub3QgbnVtYmVyX29mX3JlcGxhY2VtZW50czoKLSAgICAgICAgICAgIGJyZWFrCi0K
LSAgICAjIERlY2xhcmF0aW9ucyBvZiBsb2NhbCB2YXJpYWJsZXMgY2FuIGJlIGluIGNvbmRpdGlv
biBleHByZXNzaW9ucwotICAgICMgb2YgY29udHJvbCBmbG93IHN0YXRlbWVudHMgKGUuZy4sICJp
ZiAoUmVuZGVyT2JqZWN0KiBwID0gby0+cGFyZW50KCkpIikuCi0gICAgIyBXZSByZW1vdmUgdGhl
IGtleXdvcmRzIGFuZCB0aGUgZmlyc3QgcGFyZW50aGVzaXMuCi0gICAgIwotICAgICMgRGVjbGFy
YXRpb25zIGluICJ3aGlsZSIsICJpZiIsIGFuZCAic3dpdGNoIiBhcmUgZGlmZmVyZW50IGZyb20K
LSAgICAjIG90aGVyIGRlY2xhcmF0aW9ucyBpbiB0d28gYXNwZWN0czoKLSAgICAjCi0gICAgIyAt
IFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBkZWNsYXJhdGlvbiBiZXR3ZWVuIHRoZSBwYXJlbnRoZXNl
cy4KLSAgICAjICAgKGkuZS4sIHlvdSBjYW5ub3Qgd3JpdGUgImlmIChpbnQgaSA9IDAsIGogPSAx
KSB7fSIpCi0gICAgIyAtIFRoZSB2YXJpYWJsZSBtdXN0IGJlIGluaXRpYWxpemVkLgotICAgICMg
ICAoaS5lLiwgeW91IGNhbm5vdCB3cml0ZSAiaWYgKGludCBpKSB7fSIpCi0gICAgIwotICAgICMg
YW5kIHdlIHdpbGwgbmVlZCBkaWZmZXJlbnQgdHJlYXRtZW50cyBmb3IgdGhlbS4KLSAgICBsaW5l
ID0gc3ViKHInXlxzKmZvclxzKlwoJywgJycsIGxpbmUpCi0gICAgbGluZSwgY29udHJvbF9zdGF0
ZW1lbnQgPSBzdWJuKHInXlxzKih3aGlsZXxlbHNlIGlmfGlmfHN3aXRjaClccypcKCcsICcnLCBs
aW5lKQotCi0gICAgIyBEZXRlY3QgdmFyaWFibGUgYW5kIGZ1bmN0aW9ucy4KLSAgICB0eXBlX3Jl
Z2V4cCA9IHInXHcoW1x3XXxccypbKiZdXHMqfDo6KSsnCi0gICAgaWRlbnRpZmllcl9yZWdleHAg
PSByJyg/UDxpZGVudGlmaWVyPltcdzpdKyknCi0gICAgY2hhcmFjdGVyX2FmdGVyX2lkZW50aWZp
ZXJfcmVnZXhwID0gcicoP1A8Y2hhcmFjdGVyX2FmdGVyX2lkZW50aWZpZXI+W1s7KCk9LF0pKD8h
PSknCi0gICAgZGVjbGFyYXRpb25fd2l0aG91dF90eXBlX3JlZ2V4cCA9IHInXHMqJyArIGlkZW50
aWZpZXJfcmVnZXhwICsgcidccyonICsgY2hhcmFjdGVyX2FmdGVyX2lkZW50aWZpZXJfcmVnZXhw
Ci0gICAgZGVjbGFyYXRpb25fd2l0aF90eXBlX3JlZ2V4cCA9IHInXHMqJyArIHR5cGVfcmVnZXhw
ICsgcidccycgKyBkZWNsYXJhdGlvbl93aXRob3V0X3R5cGVfcmVnZXhwCi0gICAgaXNfZnVuY3Rp
b25fYXJndW1lbnRzID0gRmFsc2UKLSAgICBudW1iZXJfb2ZfaWRlbnRpZmllcnMgPSAwCi0gICAg
d2hpbGUgVHJ1ZToKLSAgICAgICAgIyBJZiB3ZSBhcmUgc2VlaW5nIHRoZSBmaXJzdCBpZGVudGlm
aWVyIG9yIGFyZ3VtZW50cyBvZiBhCi0gICAgICAgICMgZnVuY3Rpb24sIHRoZXJlIHNob3VsZCBi
ZSBhIHR5cGUgbmFtZSBiZWZvcmUgYW4gaWRlbnRpZmllci4KLSAgICAgICAgaWYgbm90IG51bWJl
cl9vZl9pZGVudGlmaWVycyBvciBpc19mdW5jdGlvbl9hcmd1bWVudHM6Ci0gICAgICAgICAgICBk
ZWNsYXJhdGlvbl9yZWdleHAgPSBkZWNsYXJhdGlvbl93aXRoX3R5cGVfcmVnZXhwCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBkZWNsYXJhdGlvbl9yZWdleHAgPSBkZWNsYXJhdGlvbl93aXRo
b3V0X3R5cGVfcmVnZXhwCi0KLSAgICAgICAgbWF0Y2hlZCA9IG1hdGNoKGRlY2xhcmF0aW9uX3Jl
Z2V4cCwgbGluZSkKLSAgICAgICAgaWYgbm90IG1hdGNoZWQ6Ci0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgaWRlbnRpZmllciA9IG1hdGNoZWQuZ3JvdXAoJ2lkZW50aWZpZXInKQotICAgICAg
ICBjaGFyYWN0ZXJfYWZ0ZXJfaWRlbnRpZmllciA9IG1hdGNoZWQuZ3JvdXAoJ2NoYXJhY3Rlcl9h
ZnRlcl9pZGVudGlmaWVyJykKLQotICAgICAgICAjIElmIHdlIHJlbW92ZWQgYSBub24tZm9yLWNv
bnRyb2wgc3RhdGVtZW50LCB0aGUgY2hhcmFjdGVyIGFmdGVyCi0gICAgICAgICMgdGhlIGlkZW50
aWZpZXIgc2hvdWxkIGJlICc9Jy4gV2l0aCB0aGlzIHJ1bGUsIHdlIGNhbiBhdm9pZAotICAgICAg
ICAjIHdhcm5pbmcgZm9yIGNhc2VzIGxpa2UgImlmICh2YWwgJiBJTlRfTUFYKSB7Ii4KLSAgICAg
ICAgaWYgY29udHJvbF9zdGF0ZW1lbnQgYW5kIGNoYXJhY3Rlcl9hZnRlcl9pZGVudGlmaWVyICE9
ICc9JzoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlzX2Z1bmN0aW9uX2FyZ3VtZW50
cyA9IGlzX2Z1bmN0aW9uX2FyZ3VtZW50cyBvciBjaGFyYWN0ZXJfYWZ0ZXJfaWRlbnRpZmllciA9
PSAnKCcKLQotICAgICAgICAjIFJlbW92ZSAibV8iIGFuZCAic18iIHRvIGFsbG93IHRoZW0uCi0g
ICAgICAgIG1vZGlmaWVkX2lkZW50aWZpZXIgPSBzdWIocicoXnwoPzw9OjopKVttc11fJywgJycs
IGlkZW50aWZpZXIpCi0gICAgICAgIGlmIG1vZGlmaWVkX2lkZW50aWZpZXIuZmluZCgnXycpID49
IDA6Ci0gICAgICAgICAgICAjIFZhcmlvdXMgZXhjZXB0aW9ucyB0byB0aGUgcnVsZTogSmF2YVNj
cmlwdCBvcCBjb2RlcyBmdW5jdGlvbnMsIGNvbnN0X2l0ZXJhdG9yLgotICAgICAgICAgICAgaWYg
KG5vdCAoZmlsZW5hbWUuZmluZCgnSmF2YVNjcmlwdENvcmUnKSA+PSAwIGFuZCBtb2RpZmllZF9p
ZGVudGlmaWVyLmZpbmQoJ19vcF8nKSA+PSAwKQotICAgICAgICAgICAgICAgIGFuZCBub3QgbW9k
aWZpZWRfaWRlbnRpZmllci5zdGFydHN3aXRoKCd0c3RfJykKLSAgICAgICAgICAgICAgICBhbmQg
bm90IG1vZGlmaWVkX2lkZW50aWZpZXIgPT0gImNvbnN0X2l0ZXJhdG9yIik6Ci0gICAgICAgICAg
ICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvbmFtaW5nJywg
NCwgaWRlbnRpZmllciArICIgaXMgaW5jb3JyZWN0bHkgbmFtZWQuIERvbid0IHVzZSB1bmRlcnNj
b3JlcyBpbiB5b3VyIGlkZW50aWZpZXIgbmFtZXMuIikKLQotICAgICAgICAjIFRoZXJlIGNhbiBi
ZSBvbmx5IG9uZSBkZWNsYXJhdGlvbiBpbiBub24tZm9yLWNvbnRyb2wgc3RhdGVtZW50cy4KLSAg
ICAgICAgaWYgY29udHJvbF9zdGF0ZW1lbnQ6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAg
IyBXZSBzaG91bGQgY29udGludWUgY2hlY2tpbmcgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uCi0gICAg
ICAgICMgZGVjbGFyYXRpb24gYmVjYXVzZSB3ZSBuZWVkIHRvIGNoZWNrIGl0cyBhcmd1bWVudHMu
Ci0gICAgICAgICMgQWxzbywgd2UgbmVlZCB0byBjaGVjayBtdWx0aXBsZSBkZWNsYXJhdGlvbnMu
Ci0gICAgICAgIGlmIGNoYXJhY3Rlcl9hZnRlcl9pZGVudGlmaWVyICE9ICcoJyBhbmQgY2hhcmFj
dGVyX2FmdGVyX2lkZW50aWZpZXIgIT0gJywnOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAg
ICAgbnVtYmVyX29mX2lkZW50aWZpZXJzICs9IDEKLSAgICAgICAgbGluZSA9IGxpbmVbbWF0Y2hl
ZC5lbmQoKTpdCi0KLQotZGVmIGNoZWNrX2Nfc3R5bGVfY2FzdChmaWxlbmFtZSwgbGluZV9udW1i
ZXIsIGxpbmUsIHJhd19saW5lLCBjYXN0X3R5cGUsIHBhdHRlcm4sCi0gICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yKToKLSAgICAiIiJDaGVja3MgZm9yIGEgQy1zdHlsZSBjYXN0IGJ5IGxvb2tp
bmcgZm9yIHRoZSBwYXR0ZXJuLgotCi0gICAgVGhpcyBhbHNvIGhhbmRsZXMgc2l6ZW9mKHR5cGUp
IHdhcm5pbmdzLCBkdWUgdG8gc2ltaWxhcml0eSBvZiBjb250ZW50LgotCi0gICAgQXJnczoKLSAg
ICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgbGluZV9u
dW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBsaW5lOiBUaGUg
bGluZSBvZiBjb2RlIHRvIGNoZWNrLgotICAgICAgcmF3X2xpbmU6IFRoZSByYXcgbGluZSBvZiBj
b2RlIHRvIGNoZWNrLCB3aXRoIGNvbW1lbnRzLgotICAgICAgY2FzdF90eXBlOiBUaGUgc3RyaW5n
IGZvciB0aGUgQysrIGNhc3QgdG8gcmVjb21tZW5kLiAgVGhpcyBpcyBlaXRoZXIKLSAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdCBvciBzdGF0aWNfY2FzdCwgZGVwZW5kaW5nLgotICAg
ICAgcGF0dGVybjogVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIGZpbmQgQy1zdHlsZSBj
YXN0cy4KLSAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMg
Zm91bmQuCi0gICAgIiIiCi0gICAgbWF0Y2hlZCA9IHNlYXJjaChwYXR0ZXJuLCBsaW5lKQotICAg
IGlmIG5vdCBtYXRjaGVkOgotICAgICAgICByZXR1cm4KLQotICAgICMgZS5nLiwgc2l6ZW9mKGlu
dCkKLSAgICBzaXplb2ZfbWF0Y2ggPSBtYXRjaChyJy4qc2l6ZW9mXHMqJCcsIGxpbmVbMDptYXRj
aGVkLnN0YXJ0KDEpIC0gMV0pCi0gICAgaWYgc2l6ZW9mX21hdGNoOgotICAgICAgICBlcnJvcihm
aWxlbmFtZSwgbGluZV9udW1iZXIsICdydW50aW1lL3NpemVvZicsIDEsCi0gICAgICAgICAgICAg
ICdVc2luZyBzaXplb2YodHlwZSkuICBVc2Ugc2l6ZW9mKHZhcm5hbWUpIGluc3RlYWQgaWYgcG9z
c2libGUnKQotICAgICAgICByZXR1cm4KLQotICAgIHJlbWFpbmRlciA9IGxpbmVbbWF0Y2hlZC5l
bmQoMCk6XQotCi0gICAgIyBUaGUgY2xvc2UgcGFyZW4gaXMgZm9yIGZ1bmN0aW9uIHBvaW50ZXJz
IGFzIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uLgotICAgICMgZWcsIHZvaWQgZm9vKHZvaWQgKCpi
YXIpKGludCkpOwotICAgICMgVGhlIHNlbWljb2xvbiBjaGVjayBpcyBhIG1vcmUgYmFzaWMgZnVu
Y3Rpb24gY2hlY2s7IGFsc28gcG9zc2libHkgYQotICAgICMgZnVuY3Rpb24gcG9pbnRlciB0eXBl
ZGVmLgotICAgICMgZWcsIHZvaWQgZm9vKGludCk7IG9yIHZvaWQgZm9vKGludCkgY29uc3Q7Ci0g
ICAgIyBUaGUgZXF1YWxzIGNoZWNrIGlzIGZvciBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnQu
Ci0gICAgIyBlZywgdm9pZCAqKCpmb28pKGludCkgPSAuLi4KLSAgICAjCi0gICAgIyBSaWdodCBu
b3csIHRoaXMgd2lsbCBvbmx5IGNhdGNoIGNhc2VzIHdoZXJlIHRoZXJlJ3MgYSBzaW5nbGUgYXJn
dW1lbnQsIGFuZAotICAgICMgaXQncyB1bm5hbWVkLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIGV4
cGFuZGVkIHRvIGNoZWNrIGZvciBtdWx0aXBsZQotICAgICMgYXJndW1lbnRzIHdpdGggc29tZSB1
bm5hbWVkLgotICAgIGZ1bmN0aW9uX21hdGNoID0gbWF0Y2gocidccyooXCl8PXwoY29uc3QpP1xz
Kig7fFx7fHRocm93XChcKSkpJywgcmVtYWluZGVyKQotICAgIGlmIGZ1bmN0aW9uX21hdGNoOgot
ICAgICAgICBpZiAobm90IGZ1bmN0aW9uX21hdGNoLmdyb3VwKDMpCi0gICAgICAgICAgICBvciBm
dW5jdGlvbl9tYXRjaC5ncm91cCgzKSA9PSAnOycKLSAgICAgICAgICAgIG9yIHJhd19saW5lLmZp
bmQoJy8qJykgPCAwKToKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwg
J3JlYWRhYmlsaXR5L2Z1bmN0aW9uJywgMywKLSAgICAgICAgICAgICAgICAgICdBbGwgcGFyYW1l
dGVycyBzaG91bGQgYmUgbmFtZWQgaW4gYSBmdW5jdGlvbicpCi0gICAgICAgIHJldHVybgotCi0g
ICAgIyBBdCB0aGlzIHBvaW50LCBhbGwgdGhhdCBzaG91bGQgYmUgbGVmdCBpcyBhY3R1YWwgY2Fz
dHMuCi0gICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvY2FzdGlu
ZycsIDQsCi0gICAgICAgICAgJ1VzaW5nIEMtc3R5bGUgY2FzdC4gIFVzZSAlczwlcz4oLi4uKSBp
bnN0ZWFkJyAlCi0gICAgICAgICAgKGNhc3RfdHlwZSwgbWF0Y2hlZC5ncm91cCgxKSkpCi0KLQot
X0hFQURFUlNfQ09OVEFJTklOR19URU1QTEFURVMgPSAoCi0gICAgKCc8ZGVxdWU+JywgKCdkZXF1
ZScsKSksCi0gICAgKCc8ZnVuY3Rpb25hbD4nLCAoJ3VuYXJ5X2Z1bmN0aW9uJywgJ2JpbmFyeV9m
dW5jdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsdXMnLCAnbWludXMnLCAnbXVsdGlw
bGllcycsICdkaXZpZGVzJywgJ21vZHVsdXMnLAotICAgICAgICAgICAgICAgICAgICAgICduZWdh
dGUnLAotICAgICAgICAgICAgICAgICAgICAgICdlcXVhbF90bycsICdub3RfZXF1YWxfdG8nLCAn
Z3JlYXRlcicsICdsZXNzJywKLSAgICAgICAgICAgICAgICAgICAgICAnZ3JlYXRlcl9lcXVhbCcs
ICdsZXNzX2VxdWFsJywKLSAgICAgICAgICAgICAgICAgICAgICAnbG9naWNhbF9hbmQnLCAnbG9n
aWNhbF9vcicsICdsb2dpY2FsX25vdCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ3VuYXJ5X25l
Z2F0ZScsICdub3QxJywgJ2JpbmFyeV9uZWdhdGUnLCAnbm90MicsCi0gICAgICAgICAgICAgICAg
ICAgICAgJ2JpbmQxc3QnLCAnYmluZDJuZCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BvaW50
ZXJfdG9fdW5hcnlfZnVuY3Rpb24nLAotICAgICAgICAgICAgICAgICAgICAgICdwb2ludGVyX3Rv
X2JpbmFyeV9mdW5jdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3B0cl9mdW4nLAotICAg
ICAgICAgICAgICAgICAgICAgICdtZW1fZnVuX3QnLCAnbWVtX2Z1bicsICdtZW1fZnVuMV90Jywg
J21lbV9mdW4xX3JlZl90JywKLSAgICAgICAgICAgICAgICAgICAgICAnbWVtX2Z1bl9yZWZfdCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgJ2NvbnN0X21lbV9mdW5fdCcsICdjb25zdF9tZW1fZnVu
MV90JywKLSAgICAgICAgICAgICAgICAgICAgICAnY29uc3RfbWVtX2Z1bl9yZWZfdCcsICdjb25z
dF9tZW1fZnVuMV9yZWZfdCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ21lbV9mdW5fcmVmJywK
LSAgICAgICAgICAgICAgICAgICAgICkpLAotICAgICgnPGxpbWl0cz4nLCAoJ251bWVyaWNfbGlt
aXRzJywpKSwKLSAgICAoJzxsaXN0PicsICgnbGlzdCcsKSksCi0gICAgKCc8bWFwPicsICgnbWFw
JywgJ211bHRpbWFwJywpKSwKLSAgICAoJzxtZW1vcnk+JywgKCdhbGxvY2F0b3InLCkpLAotICAg
ICgnPHF1ZXVlPicsICgncXVldWUnLCAncHJpb3JpdHlfcXVldWUnLCkpLAotICAgICgnPHNldD4n
LCAoJ3NldCcsICdtdWx0aXNldCcsKSksCi0gICAgKCc8c3RhY2s+JywgKCdzdGFjaycsKSksCi0g
ICAgKCc8c3RyaW5nPicsICgnY2hhcl90cmFpdHMnLCAnYmFzaWNfc3RyaW5nJywpKSwKLSAgICAo
Jzx1dGlsaXR5PicsICgncGFpcicsKSksCi0gICAgKCc8dmVjdG9yPicsICgndmVjdG9yJywpKSwK
LQotICAgICMgZ2NjIGV4dGVuc2lvbnMuCi0gICAgIyBOb3RlOiBzdGQ6Omhhc2ggaXMgdGhlaXIg
aGFzaCwgOjpoYXNoIGlzIG91ciBoYXNoCi0gICAgKCc8aGFzaF9tYXA+JywgKCdoYXNoX21hcCcs
ICdoYXNoX211bHRpbWFwJywpKSwKLSAgICAoJzxoYXNoX3NldD4nLCAoJ2hhc2hfc2V0JywgJ2hh
c2hfbXVsdGlzZXQnLCkpLAotICAgICgnPHNsaXN0PicsICgnc2xpc3QnLCkpLAotICAgICkKLQot
X0hFQURFUlNfQUNDRVBURURfQlVUX05PVF9QUk9NT1RFRCA9IHsKLSAgICAjIFdlIGNhbiB0cnVz
dCB3aXRoIHJlYXNvbmFibGUgY29uZmlkZW5jZSB0aGF0IG1hcCBnaXZlcyB1cyBwYWlyPD4sIHRv
by4KLSAgICAncGFpcjw+JzogKCdtYXAnLCAnbXVsdGltYXAnLCAnaGFzaF9tYXAnLCAnaGFzaF9t
dWx0aW1hcCcpCi19Ci0KLV9SRV9QQVRURVJOX1NUUklORyA9IHJlLmNvbXBpbGUocidcYnN0cmlu
Z1xiJykKLQotX3JlX3BhdHRlcm5fYWxnb3JpdGhtX2hlYWRlciA9IFtdCi1mb3IgX3RlbXBsYXRl
IGluICgnY29weScsICdtYXgnLCAnbWluJywgJ21pbl9lbGVtZW50JywgJ3NvcnQnLCAnc3dhcCcs
Ci0gICAgICAgICAgICAgICAgICAndHJhbnNmb3JtJyk6Ci0gICAgIyBNYXRjaCBtYXg8dHlwZT4o
Li4uLCAuLi4pLCBtYXgoLi4uLCAuLi4pLCBidXQgbm90IGZvby0+bWF4LCBmb28ubWF4IG9yCi0g
ICAgIyB0eXBlOjptYXgoKS4KLSAgICBfcmVfcGF0dGVybl9hbGdvcml0aG1faGVhZGVyLmFwcGVu
ZCgKLSAgICAgICAgKHJlLmNvbXBpbGUocidbXj4uXVxiJyArIF90ZW1wbGF0ZSArIHInKDwuKj8+
KT9cKFteXCldJyksCi0gICAgICAgICBfdGVtcGxhdGUsCi0gICAgICAgICAnPGFsZ29yaXRobT4n
KSkKLQotX3JlX3BhdHRlcm5fdGVtcGxhdGVzID0gW10KLWZvciBfaGVhZGVyLCBfdGVtcGxhdGVz
IGluIF9IRUFERVJTX0NPTlRBSU5JTkdfVEVNUExBVEVTOgotICAgIGZvciBfdGVtcGxhdGUgaW4g
X3RlbXBsYXRlczoKLSAgICAgICAgX3JlX3BhdHRlcm5fdGVtcGxhdGVzLmFwcGVuZCgKLSAgICAg
ICAgICAgIChyZS5jb21waWxlKHInKFw8fFxiKScgKyBfdGVtcGxhdGUgKyByJ1xzKlw8JyksCi0g
ICAgICAgICAgICAgX3RlbXBsYXRlICsgJzw+JywKLSAgICAgICAgICAgICBfaGVhZGVyKSkKLQot
Ci1kZWYgZmlsZXNfYmVsb25nX3RvX3NhbWVfbW9kdWxlKGZpbGVuYW1lX2NwcCwgZmlsZW5hbWVf
aCk6Ci0gICAgIiIiQ2hlY2sgaWYgdGhlc2UgdHdvIGZpbGVuYW1lcyBiZWxvbmcgdG8gdGhlIHNh
bWUgbW9kdWxlLgotCi0gICAgVGhlIGNvbmNlcHQgb2YgYSAnbW9kdWxlJyBoZXJlIGlzIGEgYXMg
Zm9sbG93czoKLSAgICBmb28uaCwgZm9vLWlubC5oLCBmb28uY3BwLCBmb29fdGVzdC5jcHAgYW5k
IGZvb191bml0dGVzdC5jcHAgYmVsb25nIHRvIHRoZQotICAgIHNhbWUgJ21vZHVsZScgaWYgdGhl
eSBhcmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgotICAgIHNvbWUvcGF0aC9wdWJsaWMveHl6enkg
YW5kIHNvbWUvcGF0aC9pbnRlcm5hbC94eXp6eSBhcmUgYWxzbyBjb25zaWRlcmVkCi0gICAgdG8g
YmVsb25nIHRvIHRoZSBzYW1lIG1vZHVsZSBoZXJlLgotCi0gICAgSWYgdGhlIGZpbGVuYW1lX2Nw
cCBjb250YWlucyBhIGxvbmdlciBwYXRoIHRoYW4gdGhlIGZpbGVuYW1lX2gsIGZvciBleGFtcGxl
LAotICAgICcvYWJzb2x1dGUvcGF0aC90by9iYXNlL3N5c2luZm8uY3BwJywgYW5kIHRoaXMgZmls
ZSB3b3VsZCBpbmNsdWRlCi0gICAgJ2Jhc2Uvc3lzaW5mby5oJywgdGhpcyBmdW5jdGlvbiBhbHNv
IHByb2R1Y2VzIHRoZSBwcmVmaXggbmVlZGVkIHRvIG9wZW4gdGhlCi0gICAgaGVhZGVyLiBUaGlz
IGlzIHVzZWQgYnkgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHRvIG1vcmUgcm9idXN0bHkg
b3BlbiB0aGUKLSAgICBoZWFkZXIgZmlsZS4gV2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHJl
YWwgaW5jbHVkZSBwYXRocyBpbiB0aGlzIGNvbnRleHQsCi0gICAgc28gd2UgbmVlZCB0aGlzIGd1
ZXNzd29yayBoZXJlLgotCi0gICAgS25vd24gYnVnczogdG9vbHMvYmFzZS9iYXIuY3BwIGFuZCBi
YXNlL2Jhci5oIGJlbG9uZyB0byB0aGUgc2FtZSBtb2R1bGUKLSAgICBhY2NvcmRpbmcgdG8gdGhp
cyBpbXBsZW1lbnRhdGlvbi4gQmVjYXVzZSBvZiB0aGlzLCB0aGlzIGZ1bmN0aW9uIGdpdmVzCi0g
ICAgc29tZSBmYWxzZSBwb3NpdGl2ZXMuIFRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnRseSByYXJl
IGluIHByYWN0aWNlLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1lX2NwcDogaXMgdGhlIHBh
dGggZm9yIHRoZSAuY3BwIGZpbGUKLSAgICAgIGZpbGVuYW1lX2g6IGlzIHRoZSBwYXRoIGZvciB0
aGUgaGVhZGVyIHBhdGgKLQotICAgIFJldHVybnM6Ci0gICAgICBUdXBsZSB3aXRoIGEgYm9vbCBh
bmQgYSBzdHJpbmc6Ci0gICAgICBib29sOiBUcnVlIGlmIGZpbGVuYW1lX2NwcCBhbmQgZmlsZW5h
bWVfaCBiZWxvbmcgdG8gdGhlIHNhbWUgbW9kdWxlLgotICAgICAgc3RyaW5nOiB0aGUgYWRkaXRp
b25hbCBwcmVmaXggbmVlZGVkIHRvIG9wZW4gdGhlIGhlYWRlciBmaWxlLgotICAgICIiIgotCi0g
ICAgaWYgbm90IGZpbGVuYW1lX2NwcC5lbmRzd2l0aCgnLmNwcCcpOgotICAgICAgICByZXR1cm4g
KEZhbHNlLCAnJykKLSAgICBmaWxlbmFtZV9jcHAgPSBmaWxlbmFtZV9jcHBbOi1sZW4oJy5jcHAn
KV0KLSAgICBpZiBmaWxlbmFtZV9jcHAuZW5kc3dpdGgoJ191bml0dGVzdCcpOgotICAgICAgICBm
aWxlbmFtZV9jcHAgPSBmaWxlbmFtZV9jcHBbOi1sZW4oJ191bml0dGVzdCcpXQotICAgIGVsaWYg
ZmlsZW5hbWVfY3BwLmVuZHN3aXRoKCdfdGVzdCcpOgotICAgICAgICBmaWxlbmFtZV9jcHAgPSBm
aWxlbmFtZV9jcHBbOi1sZW4oJ190ZXN0JyldCi0gICAgZmlsZW5hbWVfY3BwID0gZmlsZW5hbWVf
Y3BwLnJlcGxhY2UoJy9wdWJsaWMvJywgJy8nKQotICAgIGZpbGVuYW1lX2NwcCA9IGZpbGVuYW1l
X2NwcC5yZXBsYWNlKCcvaW50ZXJuYWwvJywgJy8nKQotCi0gICAgaWYgbm90IGZpbGVuYW1lX2gu
ZW5kc3dpdGgoJy5oJyk6Ci0gICAgICAgIHJldHVybiAoRmFsc2UsICcnKQotICAgIGZpbGVuYW1l
X2ggPSBmaWxlbmFtZV9oWzotbGVuKCcuaCcpXQotICAgIGlmIGZpbGVuYW1lX2guZW5kc3dpdGgo
Jy1pbmwnKToKLSAgICAgICAgZmlsZW5hbWVfaCA9IGZpbGVuYW1lX2hbOi1sZW4oJy1pbmwnKV0K
LSAgICBmaWxlbmFtZV9oID0gZmlsZW5hbWVfaC5yZXBsYWNlKCcvcHVibGljLycsICcvJykKLSAg
ICBmaWxlbmFtZV9oID0gZmlsZW5hbWVfaC5yZXBsYWNlKCcvaW50ZXJuYWwvJywgJy8nKQotCi0g
ICAgZmlsZXNfYmVsb25nX3RvX3NhbWVfbW9kdWxlID0gZmlsZW5hbWVfY3BwLmVuZHN3aXRoKGZp
bGVuYW1lX2gpCi0gICAgY29tbW9uX3BhdGggPSAnJwotICAgIGlmIGZpbGVzX2JlbG9uZ190b19z
YW1lX21vZHVsZToKLSAgICAgICAgY29tbW9uX3BhdGggPSBmaWxlbmFtZV9jcHBbOi1sZW4oZmls
ZW5hbWVfaCldCi0gICAgcmV0dXJuIGZpbGVzX2JlbG9uZ190b19zYW1lX21vZHVsZSwgY29tbW9u
X3BhdGgKLQotCi1kZWYgdXBkYXRlX2luY2x1ZGVfc3RhdGUoZmlsZW5hbWUsIGluY2x1ZGVfc3Rh
dGUsIGlvPWNvZGVjcyk6Ci0gICAgIiIiRmlsbCB1cCB0aGUgaW5jbHVkZV9zdGF0ZSB3aXRoIG5l
dyBpbmNsdWRlcyBmb3VuZCBmcm9tIHRoZSBmaWxlLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVu
YW1lOiB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHJlYWQuCi0gICAgICBpbmNsdWRlX3N0YXRl
OiBhbiBfSW5jbHVkZVN0YXRlIGluc3RhbmNlIGluIHdoaWNoIHRoZSBoZWFkZXJzIGFyZSBpbnNl
cnRlZC4KLSAgICAgIGlvOiBUaGUgaW8gZmFjdG9yeSB0byB1c2UgdG8gcmVhZCB0aGUgZmlsZS4g
UHJvdmlkZWQgZm9yIHRlc3RhYmlsaXR5LgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYg
YSBoZWFkZXIgd2FzIHN1Y2Nlc2Z1bGx5IGFkZGVkLiBGYWxzZSBvdGhlcndpc2UuCi0gICAgIiIi
Ci0gICAgaGVhZGVyX2ZpbGUgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICBoZWFkZXJfZmlsZSA9
IGlvLm9wZW4oZmlsZW5hbWUsICdyJywgJ3V0ZjgnLCAncmVwbGFjZScpCi0gICAgZXhjZXB0IElP
RXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIGxpbmVfbnVtYmVyID0gMAotICAgIGZv
ciBsaW5lIGluIGhlYWRlcl9maWxlOgotICAgICAgICBsaW5lX251bWJlciArPSAxCi0gICAgICAg
IGNsZWFuX2xpbmUgPSBjbGVhbnNlX2NvbW1lbnRzKGxpbmUpCi0gICAgICAgIG1hdGNoZWQgPSBf
UkVfUEFUVEVSTl9JTkNMVURFLnNlYXJjaChjbGVhbl9saW5lKQotICAgICAgICBpZiBtYXRjaGVk
OgotICAgICAgICAgICAgaW5jbHVkZSA9IG1hdGNoZWQuZ3JvdXAoMikKLSAgICAgICAgICAgICMg
VGhlIHZhbHVlIGZvcm1hdHRpbmcgaXMgY3V0ZSwgYnV0IG5vdCByZWFsbHkgdXNlZCByaWdodCBu
b3cuCi0gICAgICAgICAgICAjIFdoYXQgbWF0dGVycyBoZXJlIGlzIHRoYXQgdGhlIGtleSBpcyBp
biBpbmNsdWRlX3N0YXRlLgotICAgICAgICAgICAgaW5jbHVkZV9zdGF0ZS5zZXRkZWZhdWx0KGlu
Y2x1ZGUsICclczolZCcgJSAoZmlsZW5hbWUsIGxpbmVfbnVtYmVyKSkKLSAgICByZXR1cm4gVHJ1
ZQotCi0KLWRlZiBjaGVja19mb3JfaW5jbHVkZV93aGF0X3lvdV91c2UoZmlsZW5hbWUsIGNsZWFu
X2xpbmVzLCBpbmNsdWRlX3N0YXRlLCBlcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW89Y29kZWNzKToKLSAgICAiIiJSZXBvcnRzIGZvciBtaXNzaW5nIHN0bCBpbmNs
dWRlcy4KLQotICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBvdXRwdXQgd2FybmluZ3MgdG8gbWFrZSBz
dXJlIHlvdSBhcmUgaW5jbHVkaW5nIHRoZSBoZWFkZXJzCi0gICAgbmVjZXNzYXJ5IGZvciB0aGUg
c3RsIGNvbnRhaW5lcnMgYW5kIGZ1bmN0aW9ucyB0aGF0IHlvdSB1c2UuIFdlIG9ubHkgZ2l2ZSBv
bmUKLSAgICByZWFzb24gdG8gaW5jbHVkZSBhIGhlYWRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSB1
c2UgYm90aCBlcXVhbF90bzw+IGFuZAotICAgIGxlc3M8PiBpbiBhIC5oIGZpbGUsIG9ubHkgb25l
ICh0aGUgbGF0dGVyIGluIHRoZSBmaWxlKSBvZiB0aGVzZSB3aWxsIGJlCi0gICAgcmVwb3J0ZWQg
YXMgYSByZWFzb24gdG8gaW5jbHVkZSB0aGUgPGZ1bmN0aW9uYWw+LgotCi0gICAgQXJnczoKLSAg
ICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgY2xlYW5f
bGluZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAg
ICAgaW5jbHVkZV9zdGF0ZTogQW4gX0luY2x1ZGVTdGF0ZSBpbnN0YW5jZS4KLSAgICAgIGVycm9y
OiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgICBpbzog
VGhlIElPIGZhY3RvcnkgdG8gdXNlIHRvIHJlYWQgdGhlIGhlYWRlciBmaWxlLiBQcm92aWRlZCBm
b3IgdW5pdHRlc3QKLSAgICAgICAgICBpbmplY3Rpb24uCi0gICAgIiIiCi0gICAgcmVxdWlyZWQg
PSB7fSAgIyBBIG1hcCBvZiBoZWFkZXIgbmFtZSB0byBsaW5lX251bWJlciBhbmQgdGhlIHRlbXBs
YXRlIGVudGl0eS4KLSAgICAgICAgIyBFeGFtcGxlIG9mIHJlcXVpcmVkOiB7ICc8ZnVuY3Rpb25h
bD4nOiAoMTIxOSwgJ2xlc3M8PicpIH0KLQotICAgIGZvciBsaW5lX251bWJlciBpbiB4cmFuZ2Uo
Y2xlYW5fbGluZXMubnVtX2xpbmVzKCkpOgotICAgICAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxp
ZGVkW2xpbmVfbnVtYmVyXQotICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lWzBdID09ICcjJzoK
LSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgIyBTdHJpbmcgaXMgc3BlY2lhbCAtLSBp
dCBpcyBhIG5vbi10ZW1wbGF0aXplZCB0eXBlIGluIFNUTC4KLSAgICAgICAgaWYgX1JFX1BBVFRF
Uk5fU1RSSU5HLnNlYXJjaChsaW5lKToKLSAgICAgICAgICAgIHJlcXVpcmVkWyc8c3RyaW5nPidd
ID0gKGxpbmVfbnVtYmVyLCAnc3RyaW5nJykKLQotICAgICAgICBmb3IgcGF0dGVybiwgdGVtcGxh
dGUsIGhlYWRlciBpbiBfcmVfcGF0dGVybl9hbGdvcml0aG1faGVhZGVyOgotICAgICAgICAgICAg
aWYgcGF0dGVybi5zZWFyY2gobGluZSk6Ci0gICAgICAgICAgICAgICAgcmVxdWlyZWRbaGVhZGVy
XSA9IChsaW5lX251bWJlciwgdGVtcGxhdGUpCi0KLSAgICAgICAgIyBUaGUgZm9sbG93aW5nIGZ1
bmN0aW9uIGlzIGp1c3QgYSBzcGVlZCB1cCwgbm8gc2VtYW50aWNzIGFyZSBjaGFuZ2VkLgotICAg
ICAgICBpZiBub3QgJzwnIGluIGxpbmU6ICAjIFJlZHVjZXMgdGhlIGNwdSB0aW1lIHVzYWdlIGJ5
IHNraXBwaW5nIGxpbmVzLgotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICBmb3IgcGF0
dGVybiwgdGVtcGxhdGUsIGhlYWRlciBpbiBfcmVfcGF0dGVybl90ZW1wbGF0ZXM6Ci0gICAgICAg
ICAgICBpZiBwYXR0ZXJuLnNlYXJjaChsaW5lKToKLSAgICAgICAgICAgICAgICByZXF1aXJlZFto
ZWFkZXJdID0gKGxpbmVfbnVtYmVyLCB0ZW1wbGF0ZSkKLQotICAgICMgVGhlIHBvbGljeSBpcyB0
aGF0IGlmIHlvdSAjaW5jbHVkZSBzb21ldGhpbmcgaW4gZm9vLmggeW91IGRvbid0IG5lZWQgdG8K
LSAgICAjIGluY2x1ZGUgaXQgYWdhaW4gaW4gZm9vLmNwcC4gSGVyZSwgd2Ugd2lsbCBsb29rIGF0
IHBvc3NpYmxlIGluY2x1ZGVzLgotICAgICMgTGV0J3MgY29weSB0aGUgaW5jbHVkZV9zdGF0ZSBz
byBpdCBpcyBvbmx5IG1lc3NlZCB1cCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4KLSAgICBpbmNsdWRl
X3N0YXRlID0gaW5jbHVkZV9zdGF0ZS5jb3B5KCkKLQotICAgICMgRGlkIHdlIGZpbmQgdGhlIGhl
YWRlciBmb3IgdGhpcyBmaWxlIChpZiBhbnkpIGFuZCBzdWNjZXNmdWxseSBsb2FkIGl0PwotICAg
IGhlYWRlcl9mb3VuZCA9IEZhbHNlCi0KLSAgICAjIFVzZSB0aGUgYWJzb2x1dGUgcGF0aCBzbyB0
aGF0IG1hdGNoaW5nIHdvcmtzIHByb3Blcmx5LgotICAgIGFic19maWxlbmFtZSA9IG9zLnBhdGgu
YWJzcGF0aChmaWxlbmFtZSkKLQotICAgICMgRm9yIEVtYWNzJ3MgZmx5bWFrZS4KLSAgICAjIElm
IGNwcF9zdHlsZSBpcyBpbnZva2VkIGZyb20gRW1hY3MncyBmbHltYWtlLCBhIHRlbXBvcmFyeSBm
aWxlIGlzIGdlbmVyYXRlZAotICAgICMgYnkgZmx5bWFrZSBhbmQgdGhhdCBmaWxlIG5hbWUgbWln
aHQgZW5kIHdpdGggJ19mbHltYWtlLmNwcCcuIEluIHRoYXQgY2FzZSwKLSAgICAjIHJlc3RvcmUg
b3JpZ2luYWwgZmlsZSBuYW1lIGhlcmUgc28gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBoZWFkZXIg
ZmlsZSBjYW4gYmUKLSAgICAjIGZvdW5kLgotICAgICMgZS5nLiBJZiB0aGUgZmlsZSBuYW1lIGlz
ICdmb29fZmx5bWFrZS5jcHAnLCB3ZSBzaG91bGQgc2VhcmNoIGZvciAnZm9vLmgnCi0gICAgIyBp
bnN0ZWFkIG9mICdmb29fZmx5bWFrZS5oJwotICAgIGVtYWNzX2ZseW1ha2Vfc3VmZml4ID0gJ19m
bHltYWtlLmNwcCcKLSAgICBpZiBhYnNfZmlsZW5hbWUuZW5kc3dpdGgoZW1hY3NfZmx5bWFrZV9z
dWZmaXgpOgotICAgICAgICBhYnNfZmlsZW5hbWUgPSBhYnNfZmlsZW5hbWVbOi1sZW4oZW1hY3Nf
Zmx5bWFrZV9zdWZmaXgpXSArICcuY3BwJwotCi0gICAgIyBpbmNsdWRlX3N0YXRlIGlzIG1vZGlm
aWVkIGR1cmluZyBpdGVyYXRpb24sIHNvIHdlIGl0ZXJhdGUgb3ZlciBhIGNvcHkgb2YKLSAgICAj
IHRoZSBrZXlzLgotICAgIGZvciBoZWFkZXIgaW4gaW5jbHVkZV9zdGF0ZS5rZXlzKCk6ICAjTk9M
SU5UCi0gICAgICAgIChzYW1lX21vZHVsZSwgY29tbW9uX3BhdGgpID0gZmlsZXNfYmVsb25nX3Rv
X3NhbWVfbW9kdWxlKGFic19maWxlbmFtZSwgaGVhZGVyKQotICAgICAgICBmdWxscGF0aCA9IGNv
bW1vbl9wYXRoICsgaGVhZGVyCi0gICAgICAgIGlmIHNhbWVfbW9kdWxlIGFuZCB1cGRhdGVfaW5j
bHVkZV9zdGF0ZShmdWxscGF0aCwgaW5jbHVkZV9zdGF0ZSwgaW8pOgotICAgICAgICAgICAgaGVh
ZGVyX2ZvdW5kID0gVHJ1ZQotCi0gICAgIyBJZiB3ZSBjYW4ndCBmaW5kIHRoZSBoZWFkZXIgZmls
ZSBmb3IgYSAuY3BwLCBhc3N1bWUgaXQncyBiZWNhdXNlIHdlIGRvbid0Ci0gICAgIyBrbm93IHdo
ZXJlIHRvIGxvb2suIEluIHRoYXQgY2FzZSB3ZSdsbCBnaXZlIHVwIGFzIHdlJ3JlIG5vdCBzdXJl
IHRoZXkKLSAgICAjIGRpZG4ndCBpbmNsdWRlIGl0IGluIHRoZSAuaCBmaWxlLgotICAgICMgRklY
TUU6IERvIGEgYmV0dGVyIGpvYiBvZiBmaW5kaW5nIC5oIGZpbGVzIHNvIHdlIGFyZSBjb25maWRl
bnQgdGhhdAotICAgICMgICAgICAgIG5vdCBoYXZpbmcgdGhlIC5oIGZpbGUgbWVhbnMgdGhlcmUg
aXNuJ3Qgb25lLgotICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuY3BwJykgYW5kIG5vdCBoZWFk
ZXJfZm91bmQ6Ci0gICAgICAgIHJldHVybgotCi0gICAgIyBBbGwgdGhlIGxpbmVzIGhhdmUgYmVl
biBwcm9jZXNzZWQsIHJlcG9ydCB0aGUgZXJyb3JzIGZvdW5kLgotICAgIGZvciByZXF1aXJlZF9o
ZWFkZXJfdW5zdHJpcHBlZCBpbiByZXF1aXJlZDoKLSAgICAgICAgdGVtcGxhdGUgPSByZXF1aXJl
ZFtyZXF1aXJlZF9oZWFkZXJfdW5zdHJpcHBlZF1bMV0KLSAgICAgICAgaWYgdGVtcGxhdGUgaW4g
X0hFQURFUlNfQUNDRVBURURfQlVUX05PVF9QUk9NT1RFRDoKLSAgICAgICAgICAgIGhlYWRlcnMg
PSBfSEVBREVSU19BQ0NFUFRFRF9CVVRfTk9UX1BST01PVEVEW3RlbXBsYXRlXQotICAgICAgICAg
ICAgaWYgW1RydWUgZm9yIGhlYWRlciBpbiBoZWFkZXJzIGlmIGhlYWRlciBpbiBpbmNsdWRlX3N0
YXRlXToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiByZXF1aXJlZF9oZWFk
ZXJfdW5zdHJpcHBlZC5zdHJpcCgnPD4iJykgbm90IGluIGluY2x1ZGVfc3RhdGU6Ci0gICAgICAg
ICAgICBlcnJvcihmaWxlbmFtZSwgcmVxdWlyZWRbcmVxdWlyZWRfaGVhZGVyX3Vuc3RyaXBwZWRd
WzBdLAotICAgICAgICAgICAgICAgICAgJ2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlJywgNCwK
LSAgICAgICAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgJyArIHJlcXVpcmVkX2hlYWRlcl91bnN0
cmlwcGVkICsgJyBmb3IgJyArIHRlbXBsYXRlKQotCi0KLWRlZiBwcm9jZXNzX2xpbmUoZmlsZW5h
bWUsIGZpbGVfZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICBjbGVhbl9saW5lcywgbGluZSwg
aW5jbHVkZV9zdGF0ZSwgZnVuY3Rpb25fc3RhdGUsCi0gICAgICAgICAgICAgICAgIGNsYXNzX3N0
YXRlLCBmaWxlX3N0YXRlLCBlcnJvcik6Ci0gICAgIiIiUHJvY2Vzc2VzIGEgc2luZ2xlIGxpbmUg
aW4gdGhlIGZpbGUuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IEZpbGVuYW1lIG9mIHRo
ZSBmaWxlIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkLgotICAgICAgZmlsZV9leHRlbnNpb246IFRo
ZSBleHRlbnNpb24gKGRvdCBub3QgaW5jbHVkZWQpIG9mIHRoZSBmaWxlLgotICAgICAgY2xlYW5f
bGluZXM6IEFuIGFycmF5IG9mIHN0cmluZ3MsIGVhY2ggcmVwcmVzZW50aW5nIGEgbGluZSBvZiB0
aGUgZmlsZSwKLSAgICAgICAgICAgICAgICAgICB3aXRoIGNvbW1lbnRzIHN0cmlwcGVkLgotICAg
ICAgbGluZTogTnVtYmVyIG9mIGxpbmUgYmVpbmcgcHJvY2Vzc2VkLgotICAgICAgaW5jbHVkZV9z
dGF0ZTogQW4gX0luY2x1ZGVTdGF0ZSBpbnN0YW5jZSBpbiB3aGljaCB0aGUgaGVhZGVycyBhcmUg
aW5zZXJ0ZWQuCi0gICAgICBmdW5jdGlvbl9zdGF0ZTogQSBfRnVuY3Rpb25TdGF0ZSBpbnN0YW5j
ZSB3aGljaCBjb3VudHMgZnVuY3Rpb24gbGluZXMsIGV0Yy4KLSAgICAgIGNsYXNzX3N0YXRlOiBB
IF9DbGFzc1N0YXRlIGluc3RhbmNlIHdoaWNoIG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dAot
ICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHN0YWNrIG9mIG5lc3RlZCBjbGFzcyBkZWNs
YXJhdGlvbnMgYmVpbmcgcGFyc2VkLgotICAgICAgZmlsZV9zdGF0ZTogQSBfRmlsZVN0YXRlIGlu
c3RhbmNlIHdoaWNoIG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dAotICAgICAgICAgICAgICAg
ICAgdGhlIHN0YXRlIG9mIHRoaW5ncyBpbiB0aGUgZmlsZS4KLSAgICAgIGVycm9yOiBBIGNhbGxh
YmxlIHRvIHdoaWNoIGVycm9ycyBhcmUgcmVwb3J0ZWQsIHdoaWNoIHRha2VzIDQgYXJndW1lbnRz
OgotICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgZXJyb3IgbGV2ZWwsIGFuZCBt
ZXNzYWdlCi0KLSAgICAiIiIKLSAgICByYXdfbGluZXMgPSBjbGVhbl9saW5lcy5yYXdfbGluZXMK
LSAgICBjaGVja19mb3JfZnVuY3Rpb25fbGVuZ3RocyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxp
bmUsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcikKLSAgICBpZiBzZWFyY2gocidcYk5PTElOVFxiJywg
cmF3X2xpbmVzW2xpbmVdKTogICMgaWdub3JlIG5vbGludCBsaW5lcwotICAgICAgICByZXR1cm4K
LSAgICBjaGVja19mb3JfbXVsdGlsaW5lX2NvbW1lbnRzX2FuZF9zdHJpbmdzKGZpbGVuYW1lLCBj
bGVhbl9saW5lcywgbGluZSwgZXJyb3IpCi0gICAgY2hlY2tfc3R5bGUoZmlsZW5hbWUsIGNsZWFu
X2xpbmVzLCBsaW5lLCBmaWxlX2V4dGVuc2lvbiwgZmlsZV9zdGF0ZSwgZXJyb3IpCi0gICAgY2hl
Y2tfbGFuZ3VhZ2UoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lLCBmaWxlX2V4dGVuc2lvbiwg
aW5jbHVkZV9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICBlcnJvcikKLSAgICBjaGVja19mb3Jf
bm9uX3N0YW5kYXJkX2NvbnN0cnVjdHMoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19zdGF0ZSwgZXJyb3IpCi0g
ICAgY2hlY2tfcG9zaXhfdGhyZWFkaW5nKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZSwgZXJy
b3IpCi0gICAgY2hlY2tfaW52YWxpZF9pbmNyZW1lbnQoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBs
aW5lLCBlcnJvcikKLQotCi1kZWYgcHJvY2Vzc19maWxlX2RhdGEoZmlsZW5hbWUsIGZpbGVfZXh0
ZW5zaW9uLCBsaW5lcywgZXJyb3IpOgotICAgICIiIlBlcmZvcm1zIGxpbnQgY2hlY2tzIGFuZCBy
ZXBvcnRzIGFueSBlcnJvcnMgdG8gdGhlIGdpdmVuIGVycm9yIGZ1bmN0aW9uLgotCi0gICAgQXJn
czoKLSAgICAgIGZpbGVuYW1lOiBGaWxlbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGlzIGJlaW5nIHBy
b2Nlc3NlZC4KLSAgICAgIGZpbGVfZXh0ZW5zaW9uOiBUaGUgZXh0ZW5zaW9uIChkb3Qgbm90IGlu
Y2x1ZGVkKSBvZiB0aGUgZmlsZS4KLSAgICAgIGxpbmVzOiBBbiBhcnJheSBvZiBzdHJpbmdzLCBl
YWNoIHJlcHJlc2VudGluZyBhIGxpbmUgb2YgdGhlIGZpbGUsIHdpdGggdGhlCi0gICAgICAgICAg
ICAgbGFzdCBlbGVtZW50IGJlaW5nIGVtcHR5IGlmIHRoZSBmaWxlIGlzIHRlcm1pbmVkIHdpdGgg
YSBuZXdsaW5lLgotICAgICAgZXJyb3I6IEEgY2FsbGFibGUgdG8gd2hpY2ggZXJyb3JzIGFyZSBy
ZXBvcnRlZCwgd2hpY2ggdGFrZXMgNCBhcmd1bWVudHM6Ci0gICAgIiIiCi0gICAgbGluZXMgPSAo
WycvLyBtYXJrZXIgc28gbGluZSBudW1iZXJzIGFuZCBpbmRpY2VzIGJvdGggc3RhcnQgYXQgMSdd
ICsgbGluZXMgKwotICAgICAgICAgICAgIFsnLy8gbWFya2VyIHNvIGxpbmUgbnVtYmVycyBlbmQg
aW4gYSBrbm93biB3YXknXSkKLQotICAgIGluY2x1ZGVfc3RhdGUgPSBfSW5jbHVkZVN0YXRlKCkK
LSAgICBmdW5jdGlvbl9zdGF0ZSA9IF9GdW5jdGlvblN0YXRlKCkKLSAgICBjbGFzc19zdGF0ZSA9
IF9DbGFzc1N0YXRlKCkKLSAgICBmaWxlX3N0YXRlID0gX0ZpbGVTdGF0ZSgpCi0KLSAgICBjaGVj
a19mb3JfY29weXJpZ2h0KGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpCi0KLSAgICBpZiBmaWxlX2V4
dGVuc2lvbiA9PSAnaCc6Ci0gICAgICAgIGNoZWNrX2Zvcl9oZWFkZXJfZ3VhcmQoZmlsZW5hbWUs
IGxpbmVzLCBlcnJvcikKLQotICAgIHJlbW92ZV9tdWx0aV9saW5lX2NvbW1lbnRzKGZpbGVuYW1l
LCBsaW5lcywgZXJyb3IpCi0gICAgY2xlYW5fbGluZXMgPSBDbGVhbnNlZExpbmVzKGxpbmVzKQot
ICAgIGZvciBsaW5lIGluIHhyYW5nZShjbGVhbl9saW5lcy5udW1fbGluZXMoKSk6Ci0gICAgICAg
IHByb2Nlc3NfbGluZShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24sIGNsZWFuX2xpbmVzLCBsaW5l
LAotICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9zdGF0ZSwgZnVuY3Rpb25fc3RhdGUsIGNs
YXNzX3N0YXRlLCBmaWxlX3N0YXRlLCBlcnJvcikKLSAgICBjbGFzc19zdGF0ZS5jaGVja19maW5p
c2hlZChmaWxlbmFtZSwgZXJyb3IpCi0KLSAgICBjaGVja19mb3JfaW5jbHVkZV93aGF0X3lvdV91
c2UoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBpbmNsdWRlX3N0YXRlLCBlcnJvcikKLQotICAgICMg
V2UgY2hlY2sgaGVyZSByYXRoZXIgdGhhbiBpbnNpZGUgcHJvY2Vzc19saW5lIHNvIHRoYXQgd2Ug
c2VlIHJhdwotICAgICMgbGluZXMgcmF0aGVyIHRoYW4gImNsZWFuZWQiIGxpbmVzLgotICAgIGNo
ZWNrX2Zvcl91bmljb2RlX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMoZmlsZW5hbWUsIGxpbmVzLCBl
cnJvcikKLQotICAgIGNoZWNrX2Zvcl9uZXdfbGluZV9hdF9lb2YoZmlsZW5hbWUsIGxpbmVzLCBl
cnJvcikKLQotCi1kZWYgcHJvY2Vzc19maWxlKGZpbGVuYW1lLCBlcnJvcj1lcnJvcik6Ci0gICAg
IiIiUGVyZm9ybXMgY3BwX3N0eWxlIG9uIGEgc2luZ2xlIGZpbGUuCi0KLSAgICBBcmdzOgotICAg
ICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHBhcnNlLgotICAgICAgZXJyb3I6
IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAiIiIKLSAg
ICB0cnk6Ci0gICAgICAgICMgU3VwcG9ydCB0aGUgVU5JWCBjb252ZW50aW9uIG9mIHVzaW5nICIt
IiBmb3Igc3RkaW4uICBOb3RlIHRoYXQKLSAgICAgICAgIyB3ZSBhcmUgbm90IG9wZW5pbmcgdGhl
IGZpbGUgd2l0aCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0Ci0gICAgICAgICMgKHdoaWNoIGNv
ZGVjcyBkb2Vzbid0IHN1cHBvcnQgYW55d2F5KSwgc28gdGhlIHJlc3VsdGluZyBsaW5lcyBkbwot
ICAgICAgICAjIGNvbnRhaW4gdHJhaWxpbmcgJ1xyJyBjaGFyYWN0ZXJzIGlmIHdlIGFyZSByZWFk
aW5nIGEgZmlsZSB0aGF0Ci0gICAgICAgICMgaGFzIENSTEYgZW5kaW5ncy4KLSAgICAgICAgIyBJ
ZiBhZnRlciB0aGUgc3BsaXQgYSB0cmFpbGluZyAnXHInIGlzIHByZXNlbnQsIGl0IGlzIHJlbW92
ZWQKLSAgICAgICAgIyBiZWxvdy4gSWYgaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIHByZXNlbnQg
KGkuZS4gb3MubGluZXNlcCAhPQotICAgICAgICAjICdcclxuJyBhcyBpbiBXaW5kb3dzKSwgYSB3
YXJuaW5nIGlzIGlzc3VlZCBiZWxvdyBpZiB0aGlzIGZpbGUKLSAgICAgICAgIyBpcyBwcm9jZXNz
ZWQuCi0KLSAgICAgICAgaWYgZmlsZW5hbWUgPT0gJy0nOgotICAgICAgICAgICAgbGluZXMgPSBj
b2RlY3MuU3RyZWFtUmVhZGVyV3JpdGVyKHN5cy5zdGRpbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MuZ2V0cmVhZGVyKCd1dGY4JyksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzLmdldHdyaXRl
cigndXRmOCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdyZXBsYWNlJykucmVhZCgpLnNwbGl0KCdcbicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBsaW5lcyA9IGNvZGVjcy5vcGVuKGZpbGVuYW1lLCAncicsICd1dGY4JywgJ3JlcGxhY2UnKS5y
ZWFkKCkuc3BsaXQoJ1xuJykKLQotICAgICAgICBjYXJyaWFnZV9yZXR1cm5fZm91bmQgPSBGYWxz
ZQotICAgICAgICAjIFJlbW92ZSB0cmFpbGluZyAnXHInLgotICAgICAgICBmb3IgbGluZV9udW1i
ZXIgaW4gcmFuZ2UobGVuKGxpbmVzKSk6Ci0gICAgICAgICAgICBpZiBsaW5lc1tsaW5lX251bWJl
cl0uZW5kc3dpdGgoJ1xyJyk6Ci0gICAgICAgICAgICAgICAgbGluZXNbbGluZV9udW1iZXJdID0g
bGluZXNbbGluZV9udW1iZXJdLnJzdHJpcCgnXHInKQotICAgICAgICAgICAgICAgIGNhcnJpYWdl
X3JldHVybl9mb3VuZCA9IFRydWUKLQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICBzeXMu
c3RkZXJyLndyaXRlKAotICAgICAgICAgICAgIlNraXBwaW5nIGlucHV0ICclcyc6IENhbid0IG9w
ZW4gZm9yIHJlYWRpbmdcbiIgJSBmaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuCi0KLSAgICAjIE5v
dGUsIGlmIG5vIGRvdCBpcyBmb3VuZCwgdGhpcyB3aWxsIGdpdmUgdGhlIGVudGlyZSBmaWxlbmFt
ZSBhcyB0aGUgZXh0LgotICAgIGZpbGVfZXh0ZW5zaW9uID0gZmlsZW5hbWVbZmlsZW5hbWUucmZp
bmQoJy4nKSArIDE6XQotCi0gICAgIyBXaGVuIHJlYWRpbmcgZnJvbSBzdGRpbiwgdGhlIGV4dGVu
c2lvbiBpcyB1bmtub3duLCBzbyBubyBjcHBfc3R5bGUgdGVzdHMKLSAgICAjIHNob3VsZCByZWx5
IG9uIHRoZSBleHRlbnNpb24uCi0gICAgaWYgKGZpbGVuYW1lICE9ICctJyBhbmQgbm90IGNhbl9o
YW5kbGUoZmlsZW5hbWUpKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSWdub3JpbmcgJXM7
IG5vdCBhIC5jcHAsIC5jIG9yIC5oIGZpbGVcbicgJSBmaWxlbmFtZSkKLSAgICBlbHNlOgotICAg
ICAgICBwcm9jZXNzX2ZpbGVfZGF0YShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24sIGxpbmVzLCBl
cnJvcikKLSAgICAgICAgaWYgY2FycmlhZ2VfcmV0dXJuX2ZvdW5kIGFuZCBvcy5saW5lc2VwICE9
ICdcclxuJzoKLSAgICAgICAgICAgICMgVXNlIDAgZm9yIGxpbmVfbnVtYmVyIHNpbmNlIG91dHB1
dGluZyBvbmx5IG9uZSBlcnJvciBmb3IgcG90ZW50aWFsbHkKLSAgICAgICAgICAgICMgc2V2ZXJh
bCBsaW5lcy4KLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCAwLCAnd2hpdGVzcGFjZS9uZXds
aW5lJywgMSwKLSAgICAgICAgICAgICAgICAgICdPbmUgb3IgbW9yZSB1bmV4cGVjdGVkIFxcciAo
Xk0pIGZvdW5kOycKLSAgICAgICAgICAgICAgICAgICdiZXR0ZXIgdG8gdXNlIG9ubHkgYSBcXG4n
KQotCi0KLWRlZiBjYW5faGFuZGxlKGZpbGVuYW1lKToKLSAgICAiIiJDaGVja3MgaWYgdGhpcyBt
b2R1bGUgc3VwcG9ydHMgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZSB0eXBlLgotCi0gICAgQXJnczoK
LSAgICAgIGZpbGVuYW1lOiBBIGZpbGVuYW1lLiBJdCBtYXkgY29udGFpbiBkaXJlY3RvcnkgbmFt
ZXMuCi0gICAgICIiIgotICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXSBp
biAoJy5oJywgJy5jcHAnLCAnLmMnKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVz
L2NwcF9zdHlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMzY4MyArMCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotIyAtKi0gY29kaW5nOiB1
dGYtODsgLSotCi0jCi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4KLSMgQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSIiIlVuaXQgdGVzdCBmb3IgY3BwX3N0eWxlLnB5LiIiIgotCi0jIEZJWE1FOiBB
ZGQgYSBnb29kIHRlc3QgdGhhdCB0ZXN0cyBVcGRhdGVJbmNsdWRlU3RhdGUuCi0KLWltcG9ydCBj
b2RlY3MKLWltcG9ydCBvcwotaW1wb3J0IHJhbmRvbQotaW1wb3J0IHJlCi1pbXBvcnQgdW5pdHRl
c3QKLWltcG9ydCBjcHBfc3R5bGUKLSMgRklYTUU6IFJlbW92ZSB0aGUgbmVlZCB0byBpbXBvcnQg
c29tZXRoaW5nIGZyb20gc3R5bGUuCi1mcm9tIHN0eWxlIGltcG9ydCBfU1RZTEVfQ0FURUdPUklF
UwotCi0jIFRoaXMgY2xhc3Mgd29ya3MgYXMgYW4gZXJyb3IgY29sbGVjdG9yIGFuZCByZXBsYWNl
cyBjcHBfc3R5bGUuRXJyb3IKLSMgZnVuY3Rpb24gZm9yIHRoZSB1bml0IHRlc3RzLiAgV2UgYWxz
byB2ZXJpZnkgZWFjaCBjYXRlZ29yeSB3ZSBzZWUKLSMgaXMgaW4gY3BwX3N0eWxlLl9TVFlMRV9D
QVRFR09SSUVTLCB0byBoZWxwIGtlZXAgdGhhdCBsaXN0IHVwIHRvIGRhdGUuCi1jbGFzcyBFcnJv
ckNvbGxlY3RvcjoKLSAgICBfYWxsX3N0eWxlX2NhdGVnb3JpZXMgPSBfU1RZTEVfQ0FURUdPUklF
UwotICAgICMgVGhpcyBhIGxpc3QgaW5jbHVkaW5nIGFsbCBjYXRlZ29yaWVzIHNlZW4gaW4gYW55
IHVuaXQgdGVzdC4KLSAgICBfc2Vlbl9zdHlsZV9jYXRlZ29yaWVzID0ge30KLQotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBhc3NlcnRfZm4pOgotICAgICAgICAiIiJhc3NlcnRfZm46IGEgZnVuY3Rp
b24gdG8gY2FsbCB3aGVuIHdlIG5vdGljZSBhIHByb2JsZW0uIiIiCi0gICAgICAgIHNlbGYuX2Fz
c2VydF9mbiA9IGFzc2VydF9mbgotICAgICAgICBzZWxmLl9lcnJvcnMgPSBbXQotCi0gICAgZGVm
IF9fY2FsbF9fKHNlbGYsIHVudXNlZF9maWxlbmFtZSwgdW51c2VkX2xpbmVudW0sCi0gICAgICAg
ICAgICAgICAgIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKLSAgICAgICAgc2VsZi5f
YXNzZXJ0X2ZuKGNhdGVnb3J5IGluIHNlbGYuX2FsbF9zdHlsZV9jYXRlZ29yaWVzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgJ01lc3NhZ2UgIiVzIiBoYXMgY2F0ZWdvcnkgIiVzIiwnCi0gICAg
ICAgICAgICAgICAgICAgICAgICAnIHdoaWNoIGlzIG5vdCBpbiBfU1RZTEVfQ0FURUdPUklFUycg
JSAobWVzc2FnZSwgY2F0ZWdvcnkpKQotICAgICAgICBzZWxmLl9zZWVuX3N0eWxlX2NhdGVnb3Jp
ZXNbY2F0ZWdvcnldID0gMQotICAgICAgICBpZiBjcHBfc3R5bGUuX3Nob3VsZF9wcmludF9lcnJv
cihjYXRlZ29yeSwgY29uZmlkZW5jZSk6Ci0gICAgICAgICAgICBzZWxmLl9lcnJvcnMuYXBwZW5k
KCclcyAgWyVzXSBbJWRdJyAlIChtZXNzYWdlLCBjYXRlZ29yeSwgY29uZmlkZW5jZSkpCi0KLSAg
ICBkZWYgcmVzdWx0cyhzZWxmKToKLSAgICAgICAgaWYgbGVuKHNlbGYuX2Vycm9ycykgPCAyOgot
ICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oc2VsZi5fZXJyb3JzKSAgIyBNb3N0IHRlc3RzIGV4
cGVjdCB0byBoYXZlIGEgc3RyaW5nLgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2Vycm9ycyAgIyBMZXQncyBnaXZlIGEgbGlzdCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4g
b25lLgotCi0gICAgZGVmIHJlc3VsdF9saXN0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5f
ZXJyb3JzCi0KLSAgICBkZWYgdmVyaWZ5X2FsbF9jYXRlZ29yaWVzX2FyZV9zZWVuKHNlbGYpOgot
ICAgICAgICAiIiJGYWlscyBpZiB0aGVyZSdzIGEgY2F0ZWdvcnkgaW4gX2FsbF9zdHlsZV9jYXRl
Z29yaWVzIC0gX3NlZW5fc3R5bGVfY2F0ZWdvcmllcy4KLQotICAgICAgICBUaGlzIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBhZnRlciBhbGwgdGVzdHMgYXJlIHJ1biwgc28KLSAgICAgICAgX3NlZW5f
c3R5bGVfY2F0ZWdvcmllcyBoYXMgaGFkIGEgY2hhbmNlIHRvIGZ1bGx5IHBvcHVsYXRlLiAgU2lu
Y2UKLSAgICAgICAgdGhpcyBpc24ndCBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG5vcm1hbCB1bml0
dGVzdCBmcmFtZXdvcmssIHdlCi0gICAgICAgIGNhbid0IHVzZSB0aGUgbm9ybWFsIHVuaXR0ZXN0
IGFzc2VydCBtYWNyb3MuICBJbnN0ZWFkIHdlIGp1c3QgZXhpdAotICAgICAgICB3aGVuIHdlIHNl
ZSBhbiBlcnJvci4gIEdvb2QgdGhpbmcgdGhpcyB0ZXN0IGlzIGFsd2F5cyBydW4gbGFzdCEKLSAg
ICAgICAgIiIiCi0gICAgICAgIGZvciBjYXRlZ29yeSBpbiBzZWxmLl9hbGxfc3R5bGVfY2F0ZWdv
cmllczoKLSAgICAgICAgICAgIGlmIGNhdGVnb3J5IG5vdCBpbiBzZWxmLl9zZWVuX3N0eWxlX2Nh
dGVnb3JpZXM6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICAgICAgICAgIHN5
cy5leGl0KCdGQVRBTCBFUlJPUjogVGhlcmUgYXJlIG5vIHRlc3RzIGZvciBjYXRlZ29yeSAiJXMi
JyAlIGNhdGVnb3J5KQotCi0gICAgZGVmIHJlbW92ZV9pZl9wcmVzZW50KHNlbGYsIHN1YnN0cik6
Ci0gICAgICAgIGZvciAoaW5kZXgsIGVycm9yKSBpbiBlbnVtZXJhdGUoc2VsZi5fZXJyb3JzKToK
LSAgICAgICAgICAgIGlmIGVycm9yLmZpbmQoc3Vic3RyKSAhPSAtMToKLSAgICAgICAgICAgICAg
ICBzZWxmLl9lcnJvcnMgPSBzZWxmLl9lcnJvcnNbMDppbmRleF0gKyBzZWxmLl9lcnJvcnNbKGlu
ZGV4ICsgMSk6XQotICAgICAgICAgICAgICAgIGJyZWFrCi0KLQotIyBUaGlzIGNsYXNzIGlzIGEg
bGFtZSBtb2NrIG9mIGNvZGVjcy4gV2UgZG8gbm90IHZlcmlmeSBmaWxlbmFtZSwgbW9kZSwgb3IK
LSMgZW5jb2RpbmcsIGJ1dCBmb3IgdGhlIGN1cnJlbnQgdXNlIGNhc2UgaXQgaXMgbm90IG5lZWRl
ZC4KLWNsYXNzIE1vY2tJbzoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9ja19maWxlKToKLSAg
ICAgICAgc2VsZi5tb2NrX2ZpbGUgPSBtb2NrX2ZpbGUKLQotICAgIGRlZiBvcGVuKHNlbGYsIHVu
dXNlZF9maWxlbmFtZSwgdW51c2VkX21vZGUsIHVudXNlZF9lbmNvZGluZywgXyk6ICAjIE5PTElO
VAotICAgICAgICAjIChsaW50IGRvZXNuJ3QgbGlrZSBvcGVuIGFzIGEgbWV0aG9kIG5hbWUpCi0g
ICAgICAgIHJldHVybiBzZWxmLm1vY2tfZmlsZQotCi0KLWNsYXNzIENwcFN0eWxlVGVzdEJhc2Uo
dW5pdHRlc3QuVGVzdENhc2UpOgotICAgICIiIlByb3ZpZGVzIHNvbWUgdXNlZnVsIGhlbHBlciBm
dW5jdGlvbnMgZm9yIGNwcF9zdHlsZSB0ZXN0cy4iIiIKLQotICAgICMgUGVyZm9ybSBsaW50IG9u
IHNpbmdsZSBsaW5lIG9mIGlucHV0IGFuZCByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAg
ZGVmIHBlcmZvcm1fc2luZ2xlX2xpbmVfbGludChzZWxmLCBjb2RlLCBmaWxlX25hbWUpOgotICAg
ICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAg
ICAgIGxpbmVzID0gY29kZS5zcGxpdCgnXG4nKQotICAgICAgICBjcHBfc3R5bGUucmVtb3ZlX211
bHRpX2xpbmVfY29tbWVudHMoZmlsZV9uYW1lLCBsaW5lcywgZXJyb3JfY29sbGVjdG9yKQotICAg
ICAgICBjbGVhbl9saW5lcyA9IGNwcF9zdHlsZS5DbGVhbnNlZExpbmVzKGxpbmVzKQotICAgICAg
ICBpbmNsdWRlX3N0YXRlID0gY3BwX3N0eWxlLl9JbmNsdWRlU3RhdGUoKQotICAgICAgICBmdW5j
dGlvbl9zdGF0ZSA9IGNwcF9zdHlsZS5fRnVuY3Rpb25TdGF0ZSgpCi0gICAgICAgIGV4dCA9IGZp
bGVfbmFtZVtmaWxlX25hbWUucmZpbmQoJy4nKSArIDE6XQotICAgICAgICBjbGFzc19zdGF0ZSA9
IGNwcF9zdHlsZS5fQ2xhc3NTdGF0ZSgpCi0gICAgICAgIGZpbGVfc3RhdGUgPSBjcHBfc3R5bGUu
X0ZpbGVTdGF0ZSgpCi0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2xpbmUoZmlsZV9uYW1lLCBl
eHQsIGNsZWFuX2xpbmVzLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1
ZGVfc3RhdGUsIGZ1bmN0aW9uX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzX3N0YXRlLCBmaWxlX3N0YXRlLCBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgICMgU2lu
Z2xlLWxpbmUgbGludCB0ZXN0cyBhcmUgYWxsb3dlZCB0byBmYWlsIHRoZSAndW5saW50YWJsZSBm
dW5jdGlvbicKLSAgICAgICAgIyBjaGVjay4KLSAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlbW92
ZV9pZl9wcmVzZW50KAotICAgICAgICAgICAgJ0xpbnQgZmFpbGVkIHRvIGZpbmQgc3RhcnQgb2Yg
ZnVuY3Rpb24gYm9keS4nKQotICAgICAgICByZXR1cm4gZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMo
KQotCi0gICAgIyBQZXJmb3JtIGxpbnQgb3ZlciBtdWx0aXBsZSBsaW5lcyBhbmQgcmV0dXJuIHRo
ZSBlcnJvciBtZXNzYWdlLgotICAgIGRlZiBwZXJmb3JtX211bHRpX2xpbmVfbGludChzZWxmLCBj
b2RlLCBmaWxlX25hbWUpOgotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3Rv
cihzZWxmLmFzc2VydF8pCi0gICAgICAgIGxpbmVzID0gY29kZS5zcGxpdCgnXG4nKQotICAgICAg
ICBjcHBfc3R5bGUucmVtb3ZlX211bHRpX2xpbmVfY29tbWVudHMoZmlsZV9uYW1lLCBsaW5lcywg
ZXJyb3JfY29sbGVjdG9yKQotICAgICAgICBsaW5lcyA9IGNwcF9zdHlsZS5DbGVhbnNlZExpbmVz
KGxpbmVzKQotICAgICAgICBleHQgPSBmaWxlX25hbWVbZmlsZV9uYW1lLnJmaW5kKCcuJykgKyAx
Ol0KLSAgICAgICAgY2xhc3Nfc3RhdGUgPSBjcHBfc3R5bGUuX0NsYXNzU3RhdGUoKQotICAgICAg
ICBmaWxlX3N0YXRlID0gY3BwX3N0eWxlLl9GaWxlU3RhdGUoKQotICAgICAgICBmb3IgaSBpbiB4
cmFuZ2UobGluZXMubnVtX2xpbmVzKCkpOgotICAgICAgICAgICAgY3BwX3N0eWxlLmNoZWNrX3N0
eWxlKGZpbGVfbmFtZSwgbGluZXMsIGksIGV4dCwgZmlsZV9zdGF0ZSwgZXJyb3JfY29sbGVjdG9y
KQotICAgICAgICAgICAgY3BwX3N0eWxlLmNoZWNrX2Zvcl9ub25fc3RhbmRhcmRfY29uc3RydWN0
cyhmaWxlX25hbWUsIGxpbmVzLCBpLCBjbGFzc19zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQotICAg
ICAgICBjbGFzc19zdGF0ZS5jaGVja19maW5pc2hlZChmaWxlX25hbWUsIGVycm9yX2NvbGxlY3Rv
cikKLSAgICAgICAgcmV0dXJuIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRzKCkKLQotICAgICMgU2lt
aWxhciB0byBwZXJmb3JtX211bHRpX2xpbmVfbGludCwgYnV0IGNhbGxzIGNoZWNrX2xhbmd1YWdl
IGluc3RlYWQgb2YKLSAgICAjIGNoZWNrX2Zvcl9ub25fc3RhbmRhcmRfY29uc3RydWN0cwotICAg
IGRlZiBwZXJmb3JtX2xhbmd1YWdlX3J1bGVzX2NoZWNrKHNlbGYsIGZpbGVfbmFtZSwgY29kZSk6
Ci0gICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykK
LSAgICAgICAgaW5jbHVkZV9zdGF0ZSA9IGNwcF9zdHlsZS5fSW5jbHVkZVN0YXRlKCkKLSAgICAg
ICAgbGluZXMgPSBjb2RlLnNwbGl0KCdcbicpCi0gICAgICAgIGNwcF9zdHlsZS5yZW1vdmVfbXVs
dGlfbGluZV9jb21tZW50cyhmaWxlX25hbWUsIGxpbmVzLCBlcnJvcl9jb2xsZWN0b3IpCi0gICAg
ICAgIGxpbmVzID0gY3BwX3N0eWxlLkNsZWFuc2VkTGluZXMobGluZXMpCi0gICAgICAgIGV4dCA9
IGZpbGVfbmFtZVtmaWxlX25hbWUucmZpbmQoJy4nKSArIDE6XQotICAgICAgICBmb3IgaSBpbiB4
cmFuZ2UobGluZXMubnVtX2xpbmVzKCkpOgotICAgICAgICAgICAgY3BwX3N0eWxlLmNoZWNrX2xh
bmd1YWdlKGZpbGVfbmFtZSwgbGluZXMsIGksIGV4dCwgaW5jbHVkZV9zdGF0ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHJl
dHVybiBlcnJvcl9jb2xsZWN0b3IucmVzdWx0cygpCi0KLSAgICBkZWYgcGVyZm9ybV9mdW5jdGlv
bl9sZW5ndGhzX2NoZWNrKHNlbGYsIGNvZGUpOgotICAgICAgICAiIiJQZXJmb3JtIExpbnQgZnVu
Y3Rpb24gbGVuZ3RoIGNoZWNrIG9uIGJsb2NrIG9mIGNvZGUgYW5kIHJldHVybiB3YXJuaW5ncy4K
LQotICAgICAgICBCdWlsZHMgdXAgYW4gYXJyYXkgb2YgbGluZXMgY29ycmVzcG9uZGluZyB0byB0
aGUgY29kZSBhbmQgc3RyaXBzIGNvbW1lbnRzCi0gICAgICAgIHVzaW5nIGNwcF9zdHlsZSBmdW5j
dGlvbnMuCi0KLSAgICAgICAgRXN0YWJsaXNoZXMgYW4gZXJyb3IgY29sbGVjdG9yIGFuZCBpbnZv
a2VzIHRoZSBmdW5jdGlvbiBsZW5ndGggY2hlY2tpbmcKLSAgICAgICAgZnVuY3Rpb24gZm9sbG93
aW5nIGNwcF9zdHlsZSdzIHBhdHRlcm4uCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBjb2Rl
OiBDKysgc291cmNlIGNvZGUgZXhwZWN0ZWQgdG8gZ2VuZXJhdGUgYSB3YXJuaW5nIG1lc3NhZ2Uu
Ci0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBUaGUgYWNjdW11bGF0ZWQgZXJyb3JzLgot
ICAgICAgICAiIiIKLSAgICAgICAgZmlsZV9uYW1lID0gJ2Zvby5jcHAnCi0gICAgICAgIGVycm9y
X2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgZnVuY3Rp
b25fc3RhdGUgPSBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUoKQotICAgICAgICBsaW5lcyA9IGNv
ZGUuc3BsaXQoJ1xuJykKLSAgICAgICAgY3BwX3N0eWxlLnJlbW92ZV9tdWx0aV9saW5lX2NvbW1l
bnRzKGZpbGVfbmFtZSwgbGluZXMsIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAgbGluZXMgPSBj
cHBfc3R5bGUuQ2xlYW5zZWRMaW5lcyhsaW5lcykKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxp
bmVzLm51bV9saW5lcygpKToKLSAgICAgICAgICAgIGNwcF9zdHlsZS5jaGVja19mb3JfZnVuY3Rp
b25fbGVuZ3RocyhmaWxlX25hbWUsIGxpbmVzLCBpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcl9jb2xsZWN0b3Ip
Ci0gICAgICAgIHJldHVybiBlcnJvcl9jb2xsZWN0b3IucmVzdWx0cygpCi0KLSAgICBkZWYgcGVy
Zm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZShzZWxmLCBjb2RlLCBmaWxlbmFtZT0nZm9vLmgnLCBp
bz1jb2RlY3MpOgotICAgICAgICAjIEZpcnN0LCBidWlsZCB1cCB0aGUgaW5jbHVkZSBzdGF0ZS4K
LSAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQot
ICAgICAgICBpbmNsdWRlX3N0YXRlID0gY3BwX3N0eWxlLl9JbmNsdWRlU3RhdGUoKQotICAgICAg
ICBsaW5lcyA9IGNvZGUuc3BsaXQoJ1xuJykKLSAgICAgICAgY3BwX3N0eWxlLnJlbW92ZV9tdWx0
aV9saW5lX2NvbW1lbnRzKGZpbGVuYW1lLCBsaW5lcywgZXJyb3JfY29sbGVjdG9yKQotICAgICAg
ICBsaW5lcyA9IGNwcF9zdHlsZS5DbGVhbnNlZExpbmVzKGxpbmVzKQotICAgICAgICBmb3IgaSBp
biB4cmFuZ2UobGluZXMubnVtX2xpbmVzKCkpOgotICAgICAgICAgICAgY3BwX3N0eWxlLmNoZWNr
X2xhbmd1YWdlKGZpbGVuYW1lLCBsaW5lcywgaSwgJy5oJywgaW5jbHVkZV9zdGF0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAg
ICMgV2UgY291bGQgY2xlYXIgdGhlIGVycm9yX2NvbGxlY3RvciBoZXJlLCBidXQgdGhpcyBzaG91
bGQKLSAgICAgICAgIyBhbHNvIGJlIGZpbmUsIHNpbmNlIG91ciBJbmNsdWRlV2hhdFlvdVVzZSB1
bml0dGVzdHMgZG8gbm90Ci0gICAgICAgICMgaGF2ZSBsYW5ndWFnZSBwcm9ibGVtcy4KLQotICAg
ICAgICAjIFNlY29uZCwgbG9vayBmb3IgbWlzc2luZyBpbmNsdWRlcy4KLSAgICAgICAgY3BwX3N0
eWxlLmNoZWNrX2Zvcl9pbmNsdWRlX3doYXRfeW91X3VzZShmaWxlbmFtZSwgbGluZXMsIGluY2x1
ZGVfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29sbGVjdG9yLCBpbykKLSAgICAgICAgcmV0dXJuIGVycm9yX2NvbGxlY3Rvci5y
ZXN1bHRzKCkKLQotICAgICMgUGVyZm9ybSBsaW50IGFuZCBjb21wYXJlIHRoZSBlcnJvciBtZXNz
YWdlIHdpdGggImV4cGVjdGVkX21lc3NhZ2UiLgotICAgIGRlZiBhc3NlcnRfbGludChzZWxmLCBj
b2RlLCBleHBlY3RlZF9tZXNzYWdlLCBmaWxlX25hbWU9J2Zvby5jcHAnKToKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbWVzc2FnZSwgc2VsZi5wZXJmb3JtX3NpbmdsZV9saW5l
X2xpbnQoY29kZSwgZmlsZV9uYW1lKSkKLQotICAgIGRlZiBhc3NlcnRfbGludF9vbmVfb2ZfbWFu
eV9lcnJvcnNfcmUoc2VsZiwgY29kZSwgZXhwZWN0ZWRfbWVzc2FnZV9yZSwgZmlsZV9uYW1lPSdm
b28uY3BwJyk6Ci0gICAgICAgIG1lc3NhZ2VzID0gc2VsZi5wZXJmb3JtX3NpbmdsZV9saW5lX2xp
bnQoY29kZSwgZmlsZV9uYW1lKQotICAgICAgICBmb3IgbWVzc2FnZSBpbiBtZXNzYWdlczoKLSAg
ICAgICAgICAgIGlmIHJlLnNlYXJjaChleHBlY3RlZF9tZXNzYWdlX3JlLCBtZXNzYWdlKToKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3Rl
ZF9tZXNzYWdlLCBtZXNzYWdlcykKLQotICAgIGRlZiBhc3NlcnRfbXVsdGlfbGluZV9saW50KHNl
bGYsIGNvZGUsIGV4cGVjdGVkX21lc3NhZ2UsIGZpbGVfbmFtZT0nZm9vLmgnKToKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbWVzc2FnZSwgc2VsZi5wZXJmb3JtX211bHRpX2xp
bmVfbGludChjb2RlLCBmaWxlX25hbWUpKQotCi0gICAgZGVmIGFzc2VydF9tdWx0aV9saW5lX2xp
bnRfcmUoc2VsZiwgY29kZSwgZXhwZWN0ZWRfbWVzc2FnZV9yZSwgZmlsZV9uYW1lPSdmb28uaCcp
OgotICAgICAgICBtZXNzYWdlID0gc2VsZi5wZXJmb3JtX211bHRpX2xpbmVfbGludChjb2RlLCBm
aWxlX25hbWUpCi0gICAgICAgIGlmIG5vdCByZS5zZWFyY2goZXhwZWN0ZWRfbWVzc2FnZV9yZSwg
bWVzc2FnZSk6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ01lc3NhZ2Ugd2FzOlxuJyArIG1lc3Nh
Z2UgKyAnRXhwZWN0ZWQgbWF0Y2ggdG8gIicgKyBleHBlY3RlZF9tZXNzYWdlX3JlICsgJyInKQot
Ci0gICAgZGVmIGFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjayhzZWxmLCBmaWxlX25hbWUsIGNv
ZGUsIGV4cGVjdGVkX21lc3NhZ2UpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3Rl
ZF9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGFuZ3Vh
Z2VfcnVsZXNfY2hlY2soZmlsZV9uYW1lLCBjb2RlKSkKLQotICAgIGRlZiBhc3NlcnRfaW5jbHVk
ZV93aGF0X3lvdV91c2Uoc2VsZiwgY29kZSwgZXhwZWN0ZWRfbWVzc2FnZSk6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZShjb2RlKSkKLQotICAgIGRlZiBh
c3NlcnRfYmxhbmtfbGluZXNfY2hlY2soc2VsZiwgbGluZXMsIHN0YXJ0X2Vycm9ycywgZW5kX2Vy
cm9ycyk6Ci0gICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNz
ZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKCdmb28uY3BwJywgJ2Nw
cCcsIGxpbmVzLCBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAot
ICAgICAgICAgICAgc3RhcnRfZXJyb3JzLAotICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJl
c3VsdHMoKS5jb3VudCgKLSAgICAgICAgICAgICAgICAnQmxhbmsgbGluZSBhdCB0aGUgc3RhcnQg
b2YgYSBjb2RlIGJsb2NrLiAgSXMgdGhpcyBuZWVkZWQ/JwotICAgICAgICAgICAgICAgICcgIFt3
aGl0ZXNwYWNlL2JsYW5rX2xpbmVdIFsyXScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygK
LSAgICAgICAgICAgIGVuZF9lcnJvcnMsCi0gICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IucmVz
dWx0cygpLmNvdW50KAotICAgICAgICAgICAgICAgICdCbGFuayBsaW5lIGF0IHRoZSBlbmQgb2Yg
YSBjb2RlIGJsb2NrLiAgSXMgdGhpcyBuZWVkZWQ/JwotICAgICAgICAgICAgICAgICcgIFt3aGl0
ZXNwYWNlL2JsYW5rX2xpbmVdIFszXScpKQotCi0KLWNsYXNzIENwcFN0eWxlVGVzdChDcHBTdHls
ZVRlc3RCYXNlKToKLQotICAgICMgVGVzdCBnZXQgbGluZSB3aWR0aC4KLSAgICBkZWYgdGVzdF9n
ZXRfbGluZV93aWR0aChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMCwgY3BwX3N0
eWxlLmdldF9saW5lX3dpZHRoKCcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAsIGNw
cF9zdHlsZS5nZXRfbGluZV93aWR0aCh1J3gnICogMTApKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygxNiwgY3BwX3N0eWxlLmdldF9saW5lX3dpZHRoKHUn6YO9fOmBk3zlupx855yMfOaUr+W6
gScpKQotCi0gICAgZGVmIHRlc3RfZmluZF9uZXh0X211bHRpX2xpbmVfY29tbWVudF9zdGFydChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgY3BwX3N0eWxlLmZpbmRfbmV4dF9t
dWx0aV9saW5lX2NvbW1lbnRfc3RhcnQoWycnXSwgMCkpCi0KLSAgICAgICAgbGluZXMgPSBbJ2En
LCAnYicsICcvKiBjJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMiwgY3BwX3N0eWxlLmZp
bmRfbmV4dF9tdWx0aV9saW5lX2NvbW1lbnRfc3RhcnQobGluZXMsIDApKQotCi0gICAgICAgIGxp
bmVzID0gWydjaGFyIGFbXSA9ICIvKiI7J10gICMgbm90IHJlY29nbml6ZWQgYXMgY29tbWVudC4K
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgY3BwX3N0eWxlLmZpbmRfbmV4dF9tdWx0aV9s
aW5lX2NvbW1lbnRfc3RhcnQobGluZXMsIDApKQotCi0gICAgZGVmIHRlc3RfZmluZF9uZXh0X211
bHRpX2xpbmVfY29tbWVudF9lbmQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEs
IGNwcF9zdHlsZS5maW5kX25leHRfbXVsdGlfbGluZV9jb21tZW50X2VuZChbJyddLCAwKSkKLSAg
ICAgICAgbGluZXMgPSBbJ2EnLCAnYicsICcgYyAqLyddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKDIsIGNwcF9zdHlsZS5maW5kX25leHRfbXVsdGlfbGluZV9jb21tZW50X2VuZChsaW5lcywg
MCkpCi0KLSAgICBkZWYgdGVzdF9yZW1vdmVfbXVsdGlfbGluZV9jb21tZW50c19mcm9tX3Jhbmdl
KHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsnYScsICcgIC8qIGNvbW1lbnQgJywgJyAqIHN0aWxs
IGNvbW1lbnQnLCAnIGNvbW1lbnQgKi8gICAnLCAnYiddCi0gICAgICAgIGNwcF9zdHlsZS5yZW1v
dmVfbXVsdGlfbGluZV9jb21tZW50c19mcm9tX3JhbmdlKGxpbmVzLCAxLCA0KQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhbJ2EnLCAnLy8gZHVtbXknLCAnLy8gZHVtbXknLCAnLy8gZHVtbXkn
LCAnYiddLCBsaW5lcykKLQotICAgIGRlZiB0ZXN0X3NwYWNlc19hdF9lbmRfb2ZfbGluZShzZWxm
KToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICcvLyBIZWxsbyB0aGVy
ZSAnLAotICAgICAgICAgICAgJ0xpbmUgZW5kcyBpbiB3aGl0ZXNwYWNlLiAgQ29uc2lkZXIgZGVs
ZXRpbmcgdGhlc2UgZXh0cmEgc3BhY2VzLicKLSAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2Vu
ZF9vZl9saW5lXSBbNF0nKQotCi0gICAgIyBUZXN0IEMtc3R5bGUgY2FzdCBjYXNlcy4KLSAgICBk
ZWYgdGVzdF9jc3R5bGVfY2FzdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAg
ICAgICAgICAgICdpbnQgYSA9IChpbnQpMS4wOycsCi0gICAgICAgICAgICAnVXNpbmcgQy1zdHls
ZSBjYXN0LiAgVXNlIHN0YXRpY19jYXN0PGludD4oLi4uKSBpbnN0ZWFkJwotICAgICAgICAgICAg
JyAgW3JlYWRhYmlsaXR5L2Nhc3RpbmddIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
Ci0gICAgICAgICAgICAnaW50ICphID0gKGludCAqKURFRklORURfVkFMVUU7JywKLSAgICAgICAg
ICAgICdVc2luZyBDLXN0eWxlIGNhc3QuICBVc2UgcmVpbnRlcnByZXRfY2FzdDxpbnQgKj4oLi4u
KSBpbnN0ZWFkJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2Nhc3RpbmddIFs0XScsICdm
b28uYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAndWludDE2IGEg
PSAodWludDE2KTEuMDsnLAotICAgICAgICAgICAgJ1VzaW5nIEMtc3R5bGUgY2FzdC4gIFVzZSBz
dGF0aWNfY2FzdDx1aW50MTY+KC4uLikgaW5zdGVhZCcKLSAgICAgICAgICAgICcgIFtyZWFkYWJp
bGl0eS9jYXN0aW5nXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAg
ICAgJ2ludDMyIGEgPSAoaW50MzIpMS4wOycsCi0gICAgICAgICAgICAnVXNpbmcgQy1zdHlsZSBj
YXN0LiAgVXNlIHN0YXRpY19jYXN0PGludDMyPiguLi4pIGluc3RlYWQnCi0gICAgICAgICAgICAn
ICBbcmVhZGFiaWxpdHkvY2FzdGluZ10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgK
LSAgICAgICAgICAgICd1aW50NjQgYSA9ICh1aW50NjQpMS4wOycsCi0gICAgICAgICAgICAnVXNp
bmcgQy1zdHlsZSBjYXN0LiAgVXNlIHN0YXRpY19jYXN0PHVpbnQ2ND4oLi4uKSBpbnN0ZWFkJwot
ICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2Nhc3RpbmddIFs0XScpCi0KLSAgICAjIFRlc3Qg
dGFraW5nIGFkZHJlc3Mgb2YgY2FzdHMgKHJ1bnRpbWUvY2FzdGluZykKLSAgICBkZWYgdGVzdF9y
dW50aW1lX2Nhc3Rpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAg
ICAgICAnaW50KiB4ID0gJnN0YXRpY19jYXN0PGludCo+KGZvbyk7JywKLSAgICAgICAgICAgICdB
cmUgeW91IHRha2luZyBhbiBhZGRyZXNzIG9mIGEgY2FzdD8gICcKLSAgICAgICAgICAgICdUaGlz
IGlzIGRhbmdlcm91czogY291bGQgYmUgYSB0ZW1wIHZhci4gICcKLSAgICAgICAgICAgICdUYWtl
IHRoZSBhZGRyZXNzIGJlZm9yZSBkb2luZyB0aGUgY2FzdCwgcmF0aGVyIHRoYW4gYWZ0ZXInCi0g
ICAgICAgICAgICAnICBbcnVudGltZS9jYXN0aW5nXSBbNF0nKQotCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaW50KiB4ID0gJmR5bmFtaWNfY2FzdDxpbnQgKj4oZm9v
KTsnLAotICAgICAgICAgICAgWydBcmUgeW91IHRha2luZyBhbiBhZGRyZXNzIG9mIGEgY2FzdD8g
ICcKLSAgICAgICAgICAgICAnVGhpcyBpcyBkYW5nZXJvdXM6IGNvdWxkIGJlIGEgdGVtcCB2YXIu
ICAnCi0gICAgICAgICAgICAgJ1Rha2UgdGhlIGFkZHJlc3MgYmVmb3JlIGRvaW5nIHRoZSBjYXN0
LCByYXRoZXIgdGhhbiBhZnRlcicKLSAgICAgICAgICAgICAnICBbcnVudGltZS9jYXN0aW5nXSBb
NF0nLAotICAgICAgICAgICAgICdEbyBub3QgdXNlIGR5bmFtaWNfY2FzdDw+LiAgSWYgeW91IG5l
ZWQgdG8gY2FzdCB3aXRoaW4gYSBjbGFzcyAnCi0gICAgICAgICAgICAgJ2hpZXJhcmNoeSwgdXNl
IHN0YXRpY19jYXN0PD4gdG8gdXBjYXN0LiAgR29vZ2xlIGRvZXNuXCd0IHN1cHBvcnQgJwotICAg
ICAgICAgICAgICdSVFRJLiAgW3J1bnRpbWUvcnR0aV0gWzVdJ10pCi0KLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgKLSAgICAgICAgICAgICdpbnQqIHggPSAmcmVpbnRlcnByZXRfY2FzdDxpbnQg
Kj4oZm9vKTsnLAotICAgICAgICAgICAgJ0FyZSB5b3UgdGFraW5nIGFuIGFkZHJlc3Mgb2YgYSBj
YXN0PyAgJwotICAgICAgICAgICAgJ1RoaXMgaXMgZGFuZ2Vyb3VzOiBjb3VsZCBiZSBhIHRlbXAg
dmFyLiAgJwotICAgICAgICAgICAgJ1Rha2UgdGhlIGFkZHJlc3MgYmVmb3JlIGRvaW5nIHRoZSBj
YXN0LCByYXRoZXIgdGhhbiBhZnRlcicKLSAgICAgICAgICAgICcgIFtydW50aW1lL2Nhc3Rpbmdd
IFs0XScpCi0KLSAgICAgICAgIyBJdCdzIE9LIHRvIGNhc3QgYW4gYWRkcmVzcy4KLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdpbnQqIHggPSByZWludGVycHJldF9jYXN0
PGludCAqPigmZm9vKTsnLAotICAgICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVzdF9ydW50aW1l
X3NlbGZpbml0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAg
J0Zvbzo6Rm9vKEJhciByLCBCZWwgbCkgOiByXyhyXyksIGxfKGxfKSB7IH0nLAotICAgICAgICAg
ICAgJ1lvdSBzZWVtIHRvIGJlIGluaXRpYWxpemluZyBhIG1lbWJlciB2YXJpYWJsZSB3aXRoIGl0
c2VsZi4nCi0gICAgICAgICAgICAnICBbcnVudGltZS9pbml0XSBbNF0nKQotICAgICAgICBzZWxm
LmFzc2VydF9saW50KAotICAgICAgICAgICAgJ0Zvbzo6Rm9vKEJhciByLCBCZWwgbCkgOiByXyhy
KSwgbF8obCkgeyB9JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KAotICAgICAgICAgICAgJ0Zvbzo6Rm9vKEJhciByKSA6IHJfKHIpLCBsXyhyXyksIGxsXyhsXykg
eyB9JywKLSAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfcnVudGltZV9ydHRpKHNlbGYp
OgotICAgICAgICBzdGF0ZW1lbnQgPSAnaW50KiB4ID0gZHluYW1pY19jYXN0PGludCo+KCZmb28p
OycKLSAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICgKLSAgICAgICAgICAgICdEbyBub3QgdXNlIGR5
bmFtaWNfY2FzdDw+LiAgSWYgeW91IG5lZWQgdG8gY2FzdCB3aXRoaW4gYSBjbGFzcyAnCi0gICAg
ICAgICAgICAnaGllcmFyY2h5LCB1c2Ugc3RhdGljX2Nhc3Q8PiB0byB1cGNhc3QuICBHb29nbGUg
ZG9lc25cJ3Qgc3VwcG9ydCAnCi0gICAgICAgICAgICAnUlRUSS4gIFtydW50aW1lL3J0dGldIFs1
XScpCi0gICAgICAgICMgZHluYW1pY19jYXN0IGlzIGRpc2FsbG93ZWQgaW4gbW9zdCBmaWxlcy4K
LSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAnLCBzdGF0
ZW1lbnQsIGVycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVz
X2NoZWNrKCdmb28uaCcsIHN0YXRlbWVudCwgZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgIyBJdCBp
cyBleHBsaWNpdGx5IGFsbG93ZWQgaW4gdGVzdHMsIGhvd2V2ZXIuCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb29fdGVzdC5jcHAnLCBzdGF0ZW1lbnQsICcnKQot
ICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vX3VuaXR0ZXN0LmNw
cCcsIHN0YXRlbWVudCwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2No
ZWNrKCdmb29fcmVndGVzdC5jcHAnLCBzdGF0ZW1lbnQsICcnKQotCi0gICAgIyBXZSBjYW5ub3Qg
dGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmVjYXVzZSBvZiBkaWZmZXJlbmNlIG9mCi0gICAgIyBm
dW5jdGlvbiBkZWZpbml0aW9ucy4gIEFueXdheSwgd2UgbWF5IG5ldmVyIGVuYWJsZSB0aGlzLgot
ICAgICMKLSAgICAjICMgVGVzdCBmb3IgdW5uYW1lZCBhcmd1bWVudHMgaW4gYSBtZXRob2QuCi0g
ICAgIyBkZWYgdGVzdF9jaGVja19mb3JfdW5uYW1lZF9wYXJhbXMoc2VsZik6Ci0gICAgIyAgIG1l
c3NhZ2UgPSAoJ0FsbCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBuYW1lZCBpbiBhIGZ1bmN0aW9uJwot
ICAgICMgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9mdW5jdGlvbl0gWzNdJykKLSAgICAj
ICAgc2VsZi5hc3NlcnRfbGludCgndmlydHVhbCB2b2lkIEEoaW50KikgY29uc3Q7JywgbWVzc2Fn
ZSkKLSAgICAjICAgc2VsZi5hc3NlcnRfbGludCgndmlydHVhbCB2b2lkIEIodm9pZCAoKmZuKShp
bnQqKSk7JywgbWVzc2FnZSkKLSAgICAjICAgc2VsZi5hc3NlcnRfbGludCgndmlydHVhbCB2b2lk
IEMoaW50Kik7JywgbWVzc2FnZSkKLSAgICAjICAgc2VsZi5hc3NlcnRfbGludCgndm9pZCAqKCpm
KSh2b2lkICopID0geDsnLCBtZXNzYWdlKQotICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2b2lk
IE1ldGhvZChjaGFyKikgeycsIG1lc3NhZ2UpCi0gICAgIyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3Zv
aWQgTWV0aG9kKGNoYXIqKTsnLCBtZXNzYWdlKQotICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2
b2lkIE1ldGhvZChjaGFyKiAvKngqLyk7JywgbWVzc2FnZSkKLSAgICAjICAgc2VsZi5hc3NlcnRf
bGludCgndHlwZWRlZiB2b2lkICgqTWV0aG9kKShpbnQzMik7JywgbWVzc2FnZSkKLSAgICAjICAg
c2VsZi5hc3NlcnRfbGludCgnc3RhdGljIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRo
cm93KCk7JywgbWVzc2FnZSkKLSAgICAjIAotICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2aXJ0
dWFsIHZvaWQgRChpbnQqIHApOycsICcnKQotICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2b2lk
IG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiB4KSB0aHJvdygpOycsICcnKQotICAgICMgICBzZWxmLmFz
c2VydF9saW50KCd2b2lkIE1ldGhvZChjaGFyKiB4KVxueycsICcnKQotICAgICMgICBzZWxmLmFz
c2VydF9saW50KCd2b2lkIE1ldGhvZChjaGFyKiAvKngqLylcbnsnLCAnJykKLSAgICAjICAgc2Vs
Zi5hc3NlcnRfbGludCgndm9pZCBNZXRob2QoY2hhciogeCk7JywgJycpCi0gICAgIyAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ3R5cGVkZWYgdm9pZCAoKk1ldGhvZCkoaW50MzIgeCk7JywgJycpCi0gICAg
IyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq
IHgpIHRocm93KCk7JywgJycpCi0gICAgIyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0YXRpYyB2b2lk
IG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIC8qeCovKSB0aHJvdygpOycsICcnKQotICAgICMgCi0g
ICAgIyAgICMgVGhpcyBvbmUgc2hvdWxkIHRlY2huaWNhbGx5IHdhcm4sIGJ1dCBkb2Vzbid0IGJl
Y2F1c2UgdGhlIGZ1bmN0aW9uCi0gICAgIyAgICMgcG9pbnRlciBpcyBjb25mdXNpbmcuCi0gICAg
IyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZpcnR1YWwgdm9pZCBFKHZvaWQgKCpmbikoaW50KiBwKSk7
JywgJycpCi0KLSAgICAjIFRlc3QgZGVwcmVjYXRlZCBjYXN0cyBzdWNoIGFzIGludChkKQotICAg
IGRlZiB0ZXN0X2RlcHJlY2F0ZWRfY2FzdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgKLSAgICAgICAgICAgICdpbnQgYSA9IGludCgyLjIpOycsCi0gICAgICAgICAgICAnVXNpbmcg
ZGVwcmVjYXRlZCBjYXN0aW5nIHN0eWxlLiAgJwotICAgICAgICAgICAgJ1VzZSBzdGF0aWNfY2Fz
dDxpbnQ+KC4uLikgaW5zdGVhZCcKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jYXN0aW5n
XSBbNF0nKQotICAgICAgICAjIENoZWNrcyBmb3IgZmFsc2UgcG9zaXRpdmVzLi4uCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaW50IGEgPSBpbnQoKTsgLy8gQ29uc3Ry
dWN0b3IsIG8uay4nLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
Ci0gICAgICAgICAgICAnWDo6WCgpIDogYShpbnQoKSkge30gLy8gZGVmYXVsdCBDb25zdHJ1Y3Rv
ciwgby5rLicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAg
ICAgICAgICAgICdvcGVyYXRvciBib29sKCk7IC8vIENvbnZlcnNpb24gb3BlcmF0b3IsIG8uay4n
LAotICAgICAgICAgICAgJycpCi0KLSAgICAjIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGEgZ01v
Y2sgbWV0aG9kIGRlZmluaXRpb24gaXMgYSBmdW5jdGlvbiBzaWduYXR1cmUKLSAgICAjIHRoYXQg
b2Z0ZW4gbG9va3MgbGlrZSBhIGJhZCBjYXN0IGJ1dCBzaG91bGQgbm90IHBpY2tlZCB1cCBieSBs
aW50LgotICAgIGRlZiB0ZXN0X21vY2tfbWV0aG9kKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAotICAgICAgICAgICAgJ01PQ0tfTUVUSE9EMChtZXRob2QsIGludCgpKTsnLAotICAg
ICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnTU9D
S19DT05TVF9NRVRIT0QxKG1ldGhvZCwgZmxvYXQoc3RyaW5nKSk7JywKLSAgICAgICAgICAgICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ01PQ0tfQ09OU1RfTUVU
SE9EMl9UKG1ldGhvZCwgZG91YmxlKGZsb2F0LCBmbG9hdCkpOycsCi0gICAgICAgICAgICAnJykK
LQotICAgICMgVGVzdCBzaXplb2YodHlwZSkgY2FzZXMuCi0gICAgZGVmIHRlc3Rfc2l6ZW9mX3R5
cGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnc2l6ZW9m
KGludCk7JywKLSAgICAgICAgICAgICdVc2luZyBzaXplb2YodHlwZSkuICBVc2Ugc2l6ZW9mKHZh
cm5hbWUpIGluc3RlYWQgaWYgcG9zc2libGUnCi0gICAgICAgICAgICAnICBbcnVudGltZS9zaXpl
b2ZdIFsxXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnc2l6ZW9m
KGludCAqKTsnLAotICAgICAgICAgICAgJ1VzaW5nIHNpemVvZih0eXBlKS4gIFVzZSBzaXplb2Yo
dmFybmFtZSkgaW5zdGVhZCBpZiBwb3NzaWJsZScKLSAgICAgICAgICAgICcgIFtydW50aW1lL3Np
emVvZl0gWzFdJykKLQotICAgICMgVGVzdCB0eXBlZGVmIGNhc2VzLiAgVGhlcmUgd2FzIGEgYnVn
IHRoYXQgY3BwX3N0eWxlIG1pc2lkZW50aWZpZWQKLSAgICAjIHR5cGVkZWYgZm9yIHBvaW50ZXIg
dG8gZnVuY3Rpb24gYXMgQy1zdHlsZSBjYXN0IGFuZCBwcm9kdWNlZAotICAgICMgZmFsc2UtcG9z
aXRpdmUgZXJyb3IgbWVzc2FnZXMuCi0gICAgZGVmIHRlc3RfdHlwZWRlZl9mb3JfcG9pbnRlcl90
b19mdW5jdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAg
ICd0eXBlZGVmIHZvaWQgKCpGdW5jKShpbnQgeCk7JywKLSAgICAgICAgICAgICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ3R5cGVkZWYgdm9pZCAoKkZ1bmMpKGlu
dCAqeCk7JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAg
ICAgICAgICAgJ3R5cGVkZWYgdm9pZCBGdW5jKGludCB4KTsnLAotICAgICAgICAgICAgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAndHlwZWRlZiB2b2lkIEZ1bmMo
aW50ICp4KTsnLAotICAgICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVzdF9pbmNsdWRlX3doYXRf
eW91X3VzZV9ub19pbXBsZW1lbnRhdGlvbl9maWxlcyhzZWxmKToKLSAgICAgICAgY29kZSA9ICdz
dGQ6OnZlY3RvcjxpbnQ+IGZvbzsnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdBZGQgI2lu
Y2x1ZGUgPHZlY3Rvcj4gZm9yIHZlY3Rvcjw+JwotICAgICAgICAgICAgICAgICAgICAgICAgICAn
ICBbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZShjb2RlLCAnZm9vLmgnKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZShjb2RlLCAnZm9vLmNwcCcpKQotCi0g
ICAgZGVmIHRlc3RfaW5jbHVkZV93aGF0X3lvdV91c2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgPHZlY3Rv
cj4KLSAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4gZm9vOwotICAgICAgICAgICAgJycn
LAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3Vf
dXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgPG1hcD4KLSAgICAgICAgICAgICAgIHN0ZDo6
cGFpcjxpbnQsaW50PiBmb287Ci0gICAgICAgICAgICAnJycsCi0gICAgICAgICAgICAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycj
aW5jbHVkZSA8bXVsdGltYXA+Ci0gICAgICAgICAgICAgICBzdGQ6OnBhaXI8aW50LGludD4gZm9v
OwotICAgICAgICAgICAgJycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgPGhhc2hfbWFw
PgotICAgICAgICAgICAgICAgc3RkOjpwYWlyPGludCxpbnQ+IGZvbzsKLSAgICAgICAgICAgICcn
JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91
X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlIDx1dGlsaXR5PgotICAgICAgICAgICAgICAg
c3RkOjpwYWlyPGludCxpbnQ+IGZvbzsKLSAgICAgICAgICAgICcnJywKLSAgICAgICAgICAgICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAg
ICcnJyNpbmNsdWRlIDx2ZWN0b3I+Ci0gICAgICAgICAgICAgICBERUNMQVJFX3N0cmluZyhmb29i
YXIpOwotICAgICAgICAgICAgJycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgPHZlY3Rv
cj4KLSAgICAgICAgICAgICAgIERFRklORV9zdHJpbmcoZm9vYmFyLCAiIiwgIiIpOwotICAgICAg
ICAgICAgJycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVf
d2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgPHZlY3Rvcj4KLSAgICAgICAg
ICAgICAgIHN0ZDo6cGFpcjxpbnQsaW50PiBmb287Ci0gICAgICAgICAgICAnJycsCi0gICAgICAg
ICAgICAnQWRkICNpbmNsdWRlIDx1dGlsaXR5PiBmb3IgcGFpcjw+JwotICAgICAgICAgICAgJyAg
W2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9p
bmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlICJiYXNlL2Zvb2Jh
ci5oIgotICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBmb287Ci0gICAgICAgICAgICAn
JycsCi0gICAgICAgICAgICAnQWRkICNpbmNsdWRlIDx2ZWN0b3I+IGZvciB2ZWN0b3I8PicKLSAg
ICAgICAgICAgICcgIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVk
ZSA8dmVjdG9yPgotICAgICAgICAgICAgICAgc3RkOjpzZXQ8aW50PiBmb287Ci0gICAgICAgICAg
ICAnJycsCi0gICAgICAgICAgICAnQWRkICNpbmNsdWRlIDxzZXQ+IGZvciBzZXQ8PicKLSAgICAg
ICAgICAgICcgIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSAi
YmFzZS9mb29iYXIuaCIKLSAgICAgICAgICAgICAgaGFzaF9tYXA8aW50LCBpbnQ+IGZvb2JhcjsK
LSAgICAgICAgICAgICcnJywKLSAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPGhhc2hfbWFwPiBm
b3IgaGFzaF9tYXA8PicKLSAgICAgICAgICAgICcgIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3Vz
ZV0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAg
ICAgICAgICAnJycjaW5jbHVkZSAiYmFzZS9mb29iYXIuaCIKLSAgICAgICAgICAgICAgIGJvb2wg
Zm9vYmFyID0gc3RkOjpsZXNzPGludD4oMCwxKTsKLSAgICAgICAgICAgICcnJywKLSAgICAgICAg
ICAgICdBZGQgI2luY2x1ZGUgPGZ1bmN0aW9uYWw+IGZvciBsZXNzPD4nCi0gICAgICAgICAgICAn
ICBbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImJhc2UvZm9v
YmFyLmgiCi0gICAgICAgICAgICAgICBib29sIGZvb2JhciA9IG1pbjxpbnQ+KDAsMSk7Ci0gICAg
ICAgICAgICAnJycsCi0gICAgICAgICAgICAnQWRkICNpbmNsdWRlIDxhbGdvcml0aG0+IGZvciBt
aW4gIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAndm9pZCBhKGNvbnN0IHN0cmlu
ZyAmZm9vYmFyKTsnLAotICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSA8c3RyaW5nPiBmb3Igc3Ry
aW5nICBbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImJhc2Uv
Zm9vYmFyLmgiCi0gICAgICAgICAgICAgICBib29sIGZvb2JhciA9IHN3YXAoMCwxKTsKLSAgICAg
ICAgICAgICcnJywKLSAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPGFsZ29yaXRobT4gZm9yIHN3
YXAgIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSAiYmFzZS9m
b29iYXIuaCIKLSAgICAgICAgICAgICAgIGJvb2wgZm9vYmFyID0gdHJhbnNmb3JtKGEuYmVnaW4o
KSwgYS5lbmQoKSwgYi5zdGFydCgpLCBGb28pOwotICAgICAgICAgICAgJycnLAotICAgICAgICAg
ICAgJ0FkZCAjaW5jbHVkZSA8YWxnb3JpdGhtPiBmb3IgdHJhbnNmb3JtICAnCi0gICAgICAgICAg
ICAnW2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2Vy
dF9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlICJiYXNlL2Zv
b2Jhci5oIgotICAgICAgICAgICAgICAgYm9vbCBmb29iYXIgPSBtaW5fZWxlbWVudChhLmJlZ2lu
KCksIGEuZW5kKCkpOwotICAgICAgICAgICAgJycnLAotICAgICAgICAgICAgJ0FkZCAjaW5jbHVk
ZSA8YWxnb3JpdGhtPiBmb3IgbWluX2VsZW1lbnQgICcKLSAgICAgICAgICAgICdbYnVpbGQvaW5j
bHVkZV93aGF0X3lvdV91c2VdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hh
dF95b3VfdXNlKAotICAgICAgICAgICAgJycnZm9vLT5zd2FwKDAsMSk7Ci0gICAgICAgICAgICAg
ICBmb28uc3dhcCgwLDEpOwotICAgICAgICAgICAgJycnLAotICAgICAgICAgICAgJycpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2lu
Y2x1ZGUgPHN0cmluZz4KLSAgICAgICAgICAgICAgIHZvaWQgYShjb25zdCBzdGQ6Om11bHRpbWFw
PGludCxzdHJpbmc+ICZmb29iYXIpOwotICAgICAgICAgICAgJycnLAotICAgICAgICAgICAgJ0Fk
ZCAjaW5jbHVkZSA8bWFwPiBmb3IgbXVsdGltYXA8PicKLSAgICAgICAgICAgICcgIFtidWlsZC9p
bmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93
aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSA8cXVldWU+Ci0gICAgICAgICAg
ICAgICB2b2lkIGEoY29uc3Qgc3RkOjpwcmlvcml0eV9xdWV1ZTxpbnQ+ICZmb29iYXIpOwotICAg
ICAgICAgICAgJycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1
ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgICcnJyNpbmNsdWRlICJiYXNlL2Jhc2ljdHlw
ZXMuaCIKLSAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYmFzZS9wb3J0LmgiCi0gICAgICAgICAg
ICAgICAgI2luY2x1ZGUgPGFzc2VydC5oPgotICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJp
bmc+Ci0gICAgICAgICAgICAgICAgI2luY2x1ZGUgPHZlY3Rvcj4KLSAgICAgICAgICAgICAgICB2
ZWN0b3I8c3RyaW5nPiBoYWpvYTsnJycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRl
X3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlIDxzdHJpbmc+Ci0gICAgICAg
ICAgICAgICBpbnQgaSA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpCi0gICAgICAgICAgICAn
JycsCi0gICAgICAgICAgICAnQWRkICNpbmNsdWRlIDxsaW1pdHM+IGZvciBudW1lcmljX2xpbWl0
czw+JwotICAgICAgICAgICAgJyAgW2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQot
ICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcn
JyNpbmNsdWRlIDxsaW1pdHM+Ci0gICAgICAgICAgICAgICBpbnQgaSA9IG51bWVyaWNfbGltaXRz
PGludD46Om1heCgpCi0gICAgICAgICAgICAnJycsCi0gICAgICAgICAgICAnJykKLQotICAgICAg
ICAjIFRlc3QgdGhlIFVwZGF0ZUluY2x1ZGVTdGF0ZSBjb2RlIHBhdGguCi0gICAgICAgIG1vY2tf
aGVhZGVyX2NvbnRlbnRzID0gWycjaW5jbHVkZSAiYmxhaC9mb28uaCInLCAnI2luY2x1ZGUgImJs
YWgvYmFyLmgiJ10KLSAgICAgICAgbWVzc2FnZSA9IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRf
eW91X3VzZSgKLSAgICAgICAgICAgICcjaW5jbHVkZSAiY29uZmlnLmgiXG4nCi0gICAgICAgICAg
ICAnI2luY2x1ZGUgImJsYWgvYS5oIlxuJywKLSAgICAgICAgICAgIGZpbGVuYW1lPSdibGFoL2Eu
Y3BwJywKLSAgICAgICAgICAgIGlvPU1vY2tJbyhtb2NrX2hlYWRlcl9jb250ZW50cykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lc3NhZ2UsICcnKQotCi0gICAgICAgIG1vY2tfaGVhZGVy
X2NvbnRlbnRzID0gWycjaW5jbHVkZSA8c2V0PiddCi0gICAgICAgIG1lc3NhZ2UgPSBzZWxmLnBl
cmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSAiY29u
ZmlnLmgiCi0gICAgICAgICAgICAgICAjaW5jbHVkZSAiYmxhaC9hLmgiCi0KLSAgICAgICAgICAg
ICAgIHN0ZDo6c2V0PGludD4gZm9vOycnJywKLSAgICAgICAgICAgIGZpbGVuYW1lPSdibGFoL2Eu
Y3BwJywKLSAgICAgICAgICAgIGlvPU1vY2tJbyhtb2NrX2hlYWRlcl9jb250ZW50cykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lc3NhZ2UsICcnKQotCi0gICAgICAgICMgSWYgdGhlcmUn
cyBqdXN0IGEgLmNwcCBhbmQgdGhlIGhlYWRlciBjYW4ndCBiZSBmb3VuZCB0aGVuIGl0J3Mgb2su
Ci0gICAgICAgIG1lc3NhZ2UgPSBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoCi0g
ICAgICAgICAgICAnJycjaW5jbHVkZSAiY29uZmlnLmgiCi0gICAgICAgICAgICAgICAjaW5jbHVk
ZSAiYmxhaC9hLmgiCi0KLSAgICAgICAgICAgICAgIHN0ZDo6c2V0PGludD4gZm9vOycnJywKLSAg
ICAgICAgICAgIGZpbGVuYW1lPSdibGFoL2EuY3BwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMobWVzc2FnZSwgJycpCi0KLSAgICAgICAgIyBNYWtlIHN1cmUgd2UgZmluZCB0aGUgaGVhZGVy
cyB3aXRoIHJlbGF0aXZlIHBhdGhzLgotICAgICAgICBtb2NrX2hlYWRlcl9jb250ZW50cyA9IFsn
J10KLSAgICAgICAgbWVzc2FnZSA9IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZSgK
LSAgICAgICAgICAgICcnJyNpbmNsdWRlICJjb25maWcuaCIKLSAgICAgICAgICAgICAgICNpbmNs
dWRlICIlcy9hLmgiCi0KLSAgICAgICAgICAgICAgIHN0ZDo6c2V0PGludD4gZm9vOycnJyAlIG9z
LnBhdGguYmFzZW5hbWUob3MuZ2V0Y3dkKCkpLAotICAgICAgICAgICAgZmlsZW5hbWU9J2EuY3Bw
JywKLSAgICAgICAgICAgIGlvPU1vY2tJbyhtb2NrX2hlYWRlcl9jb250ZW50cykpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKG1lc3NhZ2UsICdBZGQgI2luY2x1ZGUgPHNldD4gZm9yIHNldDw+
ICAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbYnVpbGQvaW5jbHVkZV93
aGF0X3lvdV91c2VdIFs0XScpCi0KLSAgICBkZWYgdGVzdF9maWxlc19iZWxvbmdfdG9fc2FtZV9t
b2R1bGUoc2VsZik6Ci0gICAgICAgIGYgPSBjcHBfc3R5bGUuZmlsZXNfYmVsb25nX3RvX3NhbWVf
bW9kdWxlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChUcnVlLCAnJyksIGYoJ2EuY3BwJywg
J2EuaCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoVHJ1ZSwgJycpLCBmKCdiYXNlL2dv
b2dsZS5jcHAnLCAnYmFzZS9nb29nbGUuaCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygo
VHJ1ZSwgJycpLCBmKCdiYXNlL2dvb2dsZV90ZXN0LmNwcCcsICdiYXNlL2dvb2dsZS5oJykpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChUcnVlLCAnJyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGYoJ2Jhc2UvZ29vZ2xlX3VuaXR0ZXN0LmNwcCcsICdiYXNlL2dvb2dsZS5oJykpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChUcnVlLCAnJyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGYoJ2Jhc2UvaW50ZXJuYWwvZ29vZ2xlX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2Jhc2UvcHVibGljL2dvb2dsZS5oJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKChUcnVlLCAneHh4L3l5eS8nKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgZigneHh4L3l5eS9iYXNlL2ludGVybmFsL2dvb2dsZV91bml0dGVzdC5jcHAnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdiYXNlL3B1YmxpYy9nb29nbGUuaCcpKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscygoVHJ1ZSwgJ3h4eC95eXkvJyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGYoJ3h4eC95eXkvYmFzZS9nb29nbGVfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnYmFzZS9wdWJsaWMvZ29vZ2xlLmgnKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoKFRydWUsICcnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZignYmFz
ZS9nb29nbGVfdW5pdHRlc3QuY3BwJywgJ2Jhc2UvZ29vZ2xlLWlubC5oJykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKChUcnVlLCAnL2hvbWUvYnVpbGQvZ29vZ2xlMy8nKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgZignL2hvbWUvYnVpbGQvZ29vZ2xlMy9iYXNlL2dvb2dsZS5jcHAn
LCAnYmFzZS9nb29nbGUuaCcpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChGYWxzZSwg
JycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmKCcvaG9tZS9idWlsZC9nb29nbGUzL2Jh
c2UvZ29vZ2xlLmNwcCcsICdiYXN1L2dvb2dsZS5oJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKChGYWxzZSwgJycpLCBmKCdhLmNwcCcsICdiLmgnKSkKLQotICAgIGRlZiB0ZXN0X2NsZWFu
c2VfbGluZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2ludCBmb28gPSAwOyAg
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3N0eWxlLmNsZWFuc2VfY29tbWVudHMo
J2ludCBmb28gPSAwOyAgLy8gZGFuZ2VyIScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygn
aW50IG8gPSAwOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5jbGVhbnNl
X2NvbW1lbnRzKCdpbnQgLyogZm9vICovIG8gPSAwOycpKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygnZm9vKGludCBhLCBpbnQgYik7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3Bw
X3N0eWxlLmNsZWFuc2VfY29tbWVudHMoJ2ZvbyhpbnQgYSAvKiBhYmMgKi8sIGludCBiKTsnKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZihhLCBiKTsnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNwcF9zdHlsZS5jbGVhbnNlX2NvbW1lbnRzKCdmKGEsIC8qIG5hbWUgKi8gYik7Jykp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2YoYSwgYik7JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjcHBfc3R5bGUuY2xlYW5zZV9jb21tZW50cygnZihhIC8qIG5hbWUgKi8sIGIpOycp
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmKGEsIGIpOycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgY3BwX3N0eWxlLmNsZWFuc2VfY29tbWVudHMoJ2YoYSwgLyogbmFtZSAqL2IpOycp
KQotCi0gICAgZGVmIHRlc3RfbXVsdGlfbGluZV9jb21tZW50cyhzZWxmKToKLSAgICAgICAgIyBt
aXNzaW5nIGV4cGxpY2l0IGlzIGJhZAotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICByJycnaW50IGEgPSAwOwotICAgICAgICAgICAgICAgIC8qIG11bHRp
LWxpbmVyCi0gICAgICAgICAgICAgICAgY2xhc3MgRm9vIHsKLSAgICAgICAgICAgICAgICBGb28o
aW50IGYpOyAgLy8gc2hvdWxkIGNhdXNlIGEgbGludCB3YXJuaW5nIGluIGNvZGUKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAqLyAnJycsCi0gICAgICAgICcnKQotICAgICAgICBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICByJycnLyogaW50IGEgPSAwOyBt
dWx0aS1saW5lcgotICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBiID0gMDsnJycsCi0gICAg
ICAnQ291bGQgbm90IGZpbmQgZW5kIG9mIG11bHRpLWxpbmUgY29tbWVudCcKLSAgICAgICcgIFty
ZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudF0gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KHInJycgICAgLyogbXVsdGktbGluZSBjb21tZW50JycnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGVuZCBvZiBtdWx0
aS1saW5lIGNvbW1lbnQnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBb
cmVhZGFiaWxpdHkvbXVsdGlsaW5lX2NvbW1lbnRdIFs1XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X211bHRpX2xpbmVfbGludChyJycnICAgIC8vIC8qIGNvbW1lbnQsIGJ1dCBub3QgbXVsdGktbGlu
ZScnJywgJycpCi0KLSAgICBkZWYgdGVzdF9tdWx0aWxpbmVfc3RyaW5ncyhzZWxmKToKLSAgICAg
ICAgbXVsdGlsaW5lX3N0cmluZ19lcnJvcl9tZXNzYWdlID0gKAotICAgICAgICAgICAgJ011bHRp
LWxpbmUgc3RyaW5nICgiLi4uIikgZm91bmQuICBUaGlzIGxpbnQgc2NyaXB0IGRvZXNuXCd0ICcK
LSAgICAgICAgICAgICdkbyB3ZWxsIHdpdGggc3VjaCBzdHJpbmdzLCBhbmQgbWF5IGdpdmUgYm9n
dXMgd2FybmluZ3MuICBUaGV5XCdyZSAnCi0gICAgICAgICAgICAndWdseSBhbmQgdW5uZWNlc3Nh
cnksIGFuZCB5b3Ugc2hvdWxkIHVzZSBjb25jYXRlbmF0aW9uIGluc3RlYWQiLicKLSAgICAgICAg
ICAgICcgIFtyZWFkYWJpbGl0eS9tdWx0aWxpbmVfc3RyaW5nXSBbNV0nKQotCi0gICAgICAgIGZp
bGVfcGF0aCA9ICdteWRpci9mb28uY3BwJwotCi0gICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVy
cm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmls
ZV9kYXRhKGZpbGVfcGF0aCwgJ2NwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbJ2NvbnN0IGNoYXIqIHN0ciA9ICJUaGlzIGlzIGFcXCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJyBtdWx0aWxpbmUgc3RyaW5nLiI7J10sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAgMiwgICMgT25lIHBlciBsaW5lLgotICAgICAgICAg
ICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCkuY291bnQobXVsdGlsaW5lX3N0cmluZ19l
cnJvcl9tZXNzYWdlKSkKLQotICAgICMgVGVzdCBub24tZXhwbGljaXQgc2luZ2xlLWFyZ3VtZW50
IGNvbnN0cnVjdG9ycwotICAgIGRlZiB0ZXN0X2V4cGxpY2l0X3NpbmdsZV9hcmd1bWVudF9jb25z
dHJ1Y3RvcnMoc2VsZik6Ci0gICAgICAgICMgbWlzc2luZyBleHBsaWNpdCBpcyBiYWQKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9v
IHsKLSAgICAgICAgICAgICAgICAgRm9vKGludCBmKTsKLSAgICAgICAgICAgICAgIH07JycnLAot
ICAgICAgICAgICAgJ1NpbmdsZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hcmtl
ZCBleHBsaWNpdC4nCi0gICAgICAgICAgICAnICBbcnVudGltZS9leHBsaWNpdF0gWzVdJykKLSAg
ICAgICAgIyBtaXNzaW5nIGV4cGxpY2l0IGlzIGJhZCwgZXZlbiB3aXRoIHdoaXRlc3BhY2UKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3Mg
Rm9vIHsKLSAgICAgICAgICAgICAgICAgRm9vIChpbnQgZik7Ci0gICAgICAgICAgICAgICB9Oycn
JywKLSAgICAgICAgICAgIFsnRXh0cmEgc3BhY2UgYmVmb3JlICggaW4gZnVuY3Rpb24gY2FsbCAg
W3doaXRlc3BhY2UvcGFyZW5zXSBbNF0nLAotICAgICAgICAgICAgICdTaW5nbGUtYXJndW1lbnQg
Y29uc3RydWN0b3JzIHNob3VsZCBiZSBtYXJrZWQgZXhwbGljaXQuJwotICAgICAgICAgICAgICcg
IFtydW50aW1lL2V4cGxpY2l0XSBbNV0nXSkKLSAgICAgICAgIyBtaXNzaW5nIGV4cGxpY2l0LCB3
aXRoIGRpc3RyYWN0aW5nIGNvbW1lbnQsIGlzIHN0aWxsIGJhZAotICAgICAgICBzZWxmLmFzc2Vy
dF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAg
ICAgICAgICBGb28oaW50IGYpOyAvLyBzaW1wbGVyIHRoYW4gRm9vKGJsYXJnaCwgYmxhcmcpCi0g
ICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICdTaW5nbGUtYXJndW1lbnQgY29uc3Ry
dWN0b3JzIHNob3VsZCBiZSBtYXJrZWQgZXhwbGljaXQuJwotICAgICAgICAgICAgJyAgW3J1bnRp
bWUvZXhwbGljaXRdIFs1XScpCi0gICAgICAgICMgbWlzc2luZyBleHBsaWNpdCwgd2l0aCBxdWFs
aWZpZWQgY2xhc3NuYW1lCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAg
ICAgICAgICAgICcnJ2NsYXNzIFF1YWxpZmllcjo6QW5vdGhlck9uZTo6Rm9vIHsKLSAgICAgICAg
ICAgICAgICAgRm9vKGludCBmKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAg
J1NpbmdsZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hcmtlZCBleHBsaWNpdC4n
Ci0gICAgICAgICAgICAnICBbcnVudGltZS9leHBsaWNpdF0gWzVdJykKLSAgICAgICAgIyBzdHJ1
Y3RzIGFyZSBjYXVnaHQgYXMgd2VsbC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAotICAgICAgICAgICAgJycnc3RydWN0IEZvbyB7Ci0gICAgICAgICAgICAgICAgIEZvbyhp
bnQgZik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICdTaW5nbGUtYXJndW1l
bnQgY29uc3RydWN0b3JzIHNob3VsZCBiZSBtYXJrZWQgZXhwbGljaXQuJwotICAgICAgICAgICAg
JyAgW3J1bnRpbWUvZXhwbGljaXRdIFs1XScpCi0gICAgICAgICMgVGVtcGxhdGl6ZWQgY2xhc3Nl
cyBhcmUgY2F1Z2h0IGFzIHdlbGwuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKLSAgICAgICAgICAgICcnJ3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEZvbyB7Ci0gICAg
ICAgICAgICAgICAgIEZvbyhpbnQgZik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAg
ICAgICdTaW5nbGUtYXJndW1lbnQgY29uc3RydWN0b3JzIHNob3VsZCBiZSBtYXJrZWQgZXhwbGlj
aXQuJwotICAgICAgICAgICAgJyAgW3J1bnRpbWUvZXhwbGljaXRdIFs1XScpCi0gICAgICAgICMg
cHJvcGVyIHN0eWxlIGlzIG9rYXkKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAgICAgICAgICAgZXhwbGljaXQg
Rm9vKGludCBmKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJycpCi0gICAg
ICAgICMgdHdvIGFyZ3VtZW50IGNvbnN0cnVjdG9yIGlzIG9rYXkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAg
ICAgICAgICAgRm9vKGludCBmLCBpbnQgYik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAg
ICAgICAgICcnKQotICAgICAgICAjIHR3byBhcmd1bWVudCBjb25zdHJ1Y3RvciwgYWNyb3NzIHR3
byBsaW5lcywgaXMgb2theQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0g
ICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgICBGb28oaW50IGYsCi0g
ICAgICAgICAgICAgICAgICAgICBpbnQgYik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAg
ICAgICAgICcnKQotICAgICAgICAjIG5vbi1jb25zdHJ1Y3RvciAoYnV0IHNpbWlsYXIgbmFtZSks
IGlzIG9rYXkKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAg
ICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAgICAgICAgICAgYUZvbyhpbnQgZik7Ci0gICAgICAg
ICAgICAgICB9OycnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICAjIGNvbnN0cnVjdG9yIHdp
dGggdm9pZCBhcmd1bWVudCBpcyBva2F5Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVf
bGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAgIEZvbyh2
b2lkKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgICMg
c2luZ2xlIGFyZ3VtZW50IG1ldGhvZCBpcyBva2F5Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAg
IEJhcihpbnQgYik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICcnKQotICAg
ICAgICAjIGNvbW1lbnRzIHNob3VsZCBiZSBpZ25vcmVkCi0gICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAg
ICAvLyBGb28oaW50IGYpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnJykK
LSAgICAgICAgIyBzaW5nbGUgYXJndW1lbnQgZnVuY3Rpb24gZm9sbG93aW5nIGNsYXNzIGRlZmlu
aXRpb24gaXMgb2theQotICAgICAgICAjIChva2F5LCBpdCdzIG5vdCBhY3R1YWxseSB2YWxpZCwg
YnV0IHdlIGRvbid0IHdhbnQgYSBmYWxzZSBwb3NpdGl2ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAgICAg
ICAgICAgRm9vKGludCBmLCBpbnQgYik7Ci0gICAgICAgICAgICAgICB9OwotICAgICAgICAgICAg
ICAgRm9vKGludCBmKTsnJycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgIyBzaW5nbGUgYXJn
dW1lbnQgZnVuY3Rpb24gaXMgb2theQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICAnJydzdGF0aWMgRm9vKGludCBmKTsnJycsCi0gICAgICAgICAgICAn
JykKLSAgICAgICAgIyBzaW5nbGUgYXJndW1lbnQgY29weSBjb25zdHJ1Y3RvciBpcyBva2F5Lgot
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnJydjbGFz
cyBGb28gewotICAgICAgICAgICAgICAgICBGb28oY29uc3QgRm9vJik7Ci0gICAgICAgICAgICAg
ICB9OycnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5l
X2xpbnQoCi0gICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgICBGb28o
Rm9vJik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICcnKQotCi0gICAgZGVm
IHRlc3Rfc2xhc2hfc3Rhcl9jb21tZW50X29uX3NpbmdsZV9saW5lKHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnJycvKiBzdGF0aWMgKi8g
Rm9vKGludCBmKTsnJycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVs
dGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnLyovIHN0YXRpYyAqLyAgRm9vKGludCBmKTsn
JycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAotICAgICAgICAgICAgJycnLyovIHN0YXRpYyBGb28oaW50IGYpOycnJywKLSAgICAgICAgICAg
ICdDb3VsZCBub3QgZmluZCBlbmQgb2YgbXVsdGktbGluZSBjb21tZW50JwotICAgICAgICAgICAg
JyAgW3JlYWRhYmlsaXR5L211bHRpbGluZV9jb21tZW50XSBbNV0nKQotICAgICAgICBzZWxmLmFz
c2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnJycgICAgLyovIHN0YXRpYyBGb28o
aW50IGYpOycnJywKLSAgICAgICAgICAgICdDb3VsZCBub3QgZmluZCBlbmQgb2YgbXVsdGktbGlu
ZSBjb21tZW50JwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L211bHRpbGluZV9jb21tZW50
XSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAg
ICAnJycgICAgLyoqLyBzdGF0aWMgRm9vKGludCBmKTsnJycsCi0gICAgICAgICAgICAnJykKLQot
ICAgICMgVGVzdCBzdXNwaWNpb3VzIHVzYWdlIG9mICJpZiIgbGlrZSB0aGlzOgotICAgICMgaWYg
KGEgPT0gYikgewotICAgICMgICBEb1NvbWV0aGluZygpOwotICAgICMgfSBpZiAoYSA9PSBjKSB7
ICAgLy8gU2hvdWxkIGJlICJlbHNlIGlmIi4KLSAgICAjICAgRG9Tb21ldGhpbmcoKTsgIC8vIFRo
aXMgZ2V0cyBjYWxsZWQgdHdpY2UgaWYgYSA9PSBiICYmIGEgPT0gYy4KLSAgICAjIH0KLSAgICBk
ZWYgdGVzdF9zdXNwaWNpb3VzX3VzYWdlX29mX2lmKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAotICAgICAgICAgICAgJyAgICBpZiAoYSA9PSBiKSB7JywKLSAgICAgICAgICAgICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJyAgICB9IGlmIChhID09
IGIpIHsnLAotICAgICAgICAgICAgJ0RpZCB5b3UgbWVhbiAiZWxzZSBpZiI/IElmIG5vdCwgc3Rh
cnQgYSBuZXcgbGluZSBmb3IgImlmIi4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvYnJh
Y2VzXSBbNF0nKQotCi0gICAgIyBUZXN0IHN1c3BpY2lvdXMgdXNhZ2Ugb2YgbWVtc2V0LiBTcGVj
aWZpY2FsbHksIGEgMAotICAgICMgYXMgdGhlIGZpbmFsIGFyZ3VtZW50IGlzIGFsbW9zdCBjZXJ0
YWlubHkgYW4gZXJyb3IuCi0gICAgZGVmIHRlc3Rfc3VzcGljaW91c191c2FnZV9vZl9tZW1zZXQo
c2VsZik6Ci0gICAgICAgICMgTm9ybWFsIHVzZSBpcyBva2F5LgotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAotICAgICAgICAgICAgJyAgICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSknLAot
ICAgICAgICAgICAgJycpCi0KLSAgICAgICAgIyBBIDAgYXMgdGhlIGZpbmFsIGFyZ3VtZW50IGlz
IGFsbW9zdCBjZXJ0YWlubHkgYW4gZXJyb3IuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0g
ICAgICAgICAgICAnICAgIG1lbXNldChidWYsIHNpemVvZihidWYpLCAwKScsCi0gICAgICAgICAg
ICAnRGlkIHlvdSBtZWFuICJtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSkiPycKLSAgICAgICAg
ICAgICcgIFtydW50aW1lL21lbXNldF0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgK
LSAgICAgICAgICAgICcgICAgbWVtc2V0KGJ1ZiwgeHNpemUgKiB5c2l6ZSwgMCknLAotICAgICAg
ICAgICAgJ0RpZCB5b3UgbWVhbiAibWVtc2V0KGJ1ZiwgMCwgeHNpemUgKiB5c2l6ZSkiPycKLSAg
ICAgICAgICAgICcgIFtydW50aW1lL21lbXNldF0gWzRdJykKLQotICAgICAgICAjIFRoZXJlIGlz
IGxlZ2l0aW1hdGUgdGVzdCBjb2RlIHRoYXQgdXNlcyB0aGlzIGZvcm0uCi0gICAgICAgICMgVGhp
cyBpcyBva2F5IHNpbmNlIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXRlcmFsLgotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgIiAgICBtZW1zZXQoYnVmLCAneScsIDAp
IiwKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAg
ICAgJyAgICBtZW1zZXQoYnVmLCA0LCAwKScsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICcgICAgbWVtc2V0KGJ1ZiwgLTEsIDApJywKLSAg
ICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJyAg
ICBtZW1zZXQoYnVmLCAweEYxLCAwKScsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgKLSAgICAgICAgICAgICcgICAgbWVtc2V0KGJ1ZiwgMHhjZCwgMCknLAotICAg
ICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVzdF9jaGVja19wb3NpeF90aHJlYWRpbmcoc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3NjdGltZV9yKCknLCAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnc3RydG9rX3IoKScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCcgICAgc3RydG9rX3IoZm9vLCBiYSwgciknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnYnJhbmQoKScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdfcmFuZCgpJywgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy5yYW5kKCknLCAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnPnJhbmQoKScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdyYW5k
KCknLAotICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyByYW5kX3IoLi4u
KSBpbnN0ZWFkIG9mIHJhbmQoLi4uKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnIGZvciBp
bXByb3ZlZCB0aHJlYWQgc2FmZXR5LicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcnVu
dGltZS90aHJlYWRzYWZlX2ZuXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJ0
b2soKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIHN0cnRva19y
KC4uLikgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdpbnN0ZWFkIG9mIHN0cnRvayguLi4p
JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgZm9yIGltcHJvdmVkIHRocmVhZCBzYWZldHku
JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtydW50aW1lL3RocmVhZHNhZmVfZm5dIFsy
XScpCi0KLSAgICAjIFRlc3QgcG90ZW50aWFsIGZvcm1hdCBzdHJpbmcgYnVncyBsaWtlIHByaW50
Zihmb28pLgotICAgIGRlZiB0ZXN0X2Zvcm1hdF9zdHJpbmdzKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydF9saW50KCdwcmludGYoImZvbyIpJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ3ByaW50ZigiZm9vOiAlcyIsIGZvbyknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnRG9jaWRGb3JQcmludGYoZG9jaWQpJywgJycpICAjIFNob3VsZCBub3QgdHJpZ2dlci4KLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdwcmludGYoZm9vKScsCi0gICAg
ICAgICAgICAnUG90ZW50aWFsIGZvcm1hdCBzdHJpbmcgYnVnLiBEbyBwcmludGYoIiVzIiwgZm9v
KSBpbnN0ZWFkLicKLSAgICAgICAgICAgICcgIFtydW50aW1lL3ByaW50Zl0gWzRdJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdwcmludGYoZm9vLmNfc3RyKCkpJywK
LSAgICAgICAgICAgICdQb3RlbnRpYWwgZm9ybWF0IHN0cmluZyBidWcuICcKLSAgICAgICAgICAg
ICdEbyBwcmludGYoIiVzIiwgZm9vLmNfc3RyKCkpIGluc3RlYWQuJwotICAgICAgICAgICAgJyAg
W3J1bnRpbWUvcHJpbnRmXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAg
ICAgICAgJ3ByaW50Zihmb28tPmNfc3RyKCkpJywKLSAgICAgICAgICAgICdQb3RlbnRpYWwgZm9y
bWF0IHN0cmluZyBidWcuICcKLSAgICAgICAgICAgICdEbyBwcmludGYoIiVzIiwgZm9vLT5jX3N0
cigpKSBpbnN0ZWFkLicKLSAgICAgICAgICAgICcgIFtydW50aW1lL3ByaW50Zl0gWzRdJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdTdHJpbmdQcmludGYoZm9vKScs
Ci0gICAgICAgICAgICAnUG90ZW50aWFsIGZvcm1hdCBzdHJpbmcgYnVnLiBEbyBTdHJpbmdQcmlu
dGYoIiVzIiwgZm9vKSBpbnN0ZWFkLicKLSAgICAgICAgICAgICcnCi0gICAgICAgICAgICAnICBb
cnVudGltZS9wcmludGZdIFs0XScpCi0KLSAgICAjIFZhcmlhYmxlLWxlbmd0aCBhcnJheXMgYXJl
IG5vdCBwZXJtaXR0ZWQuCi0gICAgZGVmIHRlc3RfdmFyaWFibGVfbGVuZ3RoX2FycmF5X2RldGVj
dGlvbihzZWxmKToKLSAgICAgICAgZXJybXNnID0gKCdEbyBub3QgdXNlIHZhcmlhYmxlLWxlbmd0
aCBhcnJheXMuICBVc2UgYW4gYXBwcm9wcmlhdGVseSBuYW1lZCAnCi0gICAgICAgICAgICAgICAg
ICAiKCdrJyBmb2xsb3dlZCBieSBDYW1lbENhc2UpIGNvbXBpbGUtdGltZSBjb25zdGFudCBmb3Ig
dGhlIHNpemUuIgotICAgICAgICAgICAgICAgICAgJyAgW3J1bnRpbWUvYXJyYXlzXSBbMV0nKQot
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhW2FueV9vbGRfdmFyaWFibGVdOycsIGVy
cm1zZykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGRvdWJsZXNpemVbc29tZV92YXIg
KiAyXTsnLCBlcnJtc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhW2FmdW5jdGlv
bigpXTsnLCBlcnJtc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhW2Z1bmN0aW9u
KGtNYXhGb29CYXJzKV07JywgZXJybXNnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdib29s
IGFMaXN0W2l0ZW1zXy0+c2l6ZSgpXTsnLCBlcnJtc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ25hbWVzcGFjZTo6VHlwZSBidWZmZXJbbGVuKzFdOycsIGVycm1zZykKLQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCdpbnQgYVs2NF07JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2ludCBhWzB4RkZdOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgZmly
c3RbMjU2XSwgc2Vjb25kWzI1Nl07JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lu
dCBhcnJheU5hbWVba0NvbXBpbGVUaW1lQ29uc3RhbnRdOycsICcnKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdjaGFyIGJ1Zltzb21lbmFtZXNwYWNlOjprQnVmU2l6ZV07JywgJycpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhcnJheU5hbWVbQUxMX0NBUFNdOycsICcnKQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdBQ2xhc3MgYXJyYXkxW2Zvbzo6YmFyOjpBTExfQ0FQU107
JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhW2tNYXhTdHJMZW4gKyAxXTsn
LCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbc2l6ZW9mKGZvbyldOycsICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVtzaXplb2YoKmZvbyldOycsICcnKQot
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVtzaXplb2YgZm9vXTsnLCAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbc2l6ZW9mKHN0cnVjdCBGb28pXTsnLCAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbMTI4IC0gc2l6ZW9mKGNvbnN0IGJhcildOycs
ICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVsoc2l6ZW9mKGZvbykgKiA0KV07
JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhWyhhcnJheXNpemUoZml4ZWRf
c2l6ZV9hcnJheSkvMikgPDwgMV07JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCAvICBbd2hpdGVz
cGFjZS9vcGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2RlbGV0ZSBh
W3NvbWVfdmFyXTsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncmV0dXJuIGFbc29t
ZV92YXJdOycsICcnKQotCi0gICAgIyBCcmFjZSB1c2FnZQotICAgIGRlZiB0ZXN0X2JyYWNlcyhz
ZWxmKToKLSAgICAgICAgIyBCcmFjZXMgc2hvdWxkbid0IGJlIGZvbGxvd2VkIGJ5IGEgOyB1bmxl
c3MgdGhleSdyZSBkZWZpbmluZyBhIHN0cnVjdAotICAgICAgICAjIG9yIGluaXRpYWxpemluZyBh
biBhcnJheQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVszXSA9IHsgMSwgMiwgMyB9
OycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJycnY29uc3Qg
aW50IGZvb1tdID0KLSAgICAgICAgICAgICAgICAgICB7MSwgMiwgMyB9OycnJywKLSAgICAgICAg
ICAgICcnKQotICAgICAgICAjIEZvciBzaW5nbGUgbGluZSwgdW5tYXRjaGVkICd9JyB3aXRoIGEg
JzsnIGlzIGlnbm9yZWQgKG5vdCBlbm91Z2ggY29udGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnaW50IGFbM10gPSB7IDEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIH07
JycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKLSAgICAgICAgICAgICcnJ2ludCBhWzJdWzNdID0geyB7IDEsIDIgfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyAzLCA0IH0gfTsnJycsCi0gICAgICAgICAgICAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnaW50IGFbMl1b
M10gPQotICAgICAgICAgICAgICAgICAgIHsgeyAxLCAyIH0sCi0gICAgICAgICAgICAgICAgICAg
ICB7IDMsIDQgfSB9OycnJywKLSAgICAgICAgICAgICcnKQotCi0gICAgIyBDSEVDSy9FWFBFQ1Rf
VFJVRS9FWFBFQ1RfRkFMU0UgcmVwbGFjZW1lbnRzCi0gICAgZGVmIHRlc3RfY2hlY2tfY2hlY2so
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNLKHggPT0gNDIpJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgQ0hFQ0tfRVEgaW5zdGVhZCBvZiBD
SEVDSyhhID09IGIpJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9j
aGVja10gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnQ0hFQ0soeCAhPSA0MiknLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBDSEVDS19ORSBpbnN0ZWFk
IG9mIENIRUNLKGEgIT0gYiknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmls
aXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyh4ID49IDQy
KScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIENIRUNLX0dFIGlu
c3RlYWQgb2YgQ0hFQ0soYSA+PSBiKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcmVh
ZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNLKHgg
PiA0MiknLAotICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBDSEVDS19H
VCBpbnN0ZWFkIG9mIENIRUNLKGEgPiBiKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBb
cmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNL
KHggPD0gNDIpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgQ0hF
Q0tfTEUgaW5zdGVhZCBvZiBDSEVDSyhhIDw9IGIpJwotICAgICAgICAgICAgICAgICAgICAgICAg
ICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
Q0hFQ0soeCA8IDQyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5n
IENIRUNLX0xUIGluc3RlYWQgb2YgQ0hFQ0soYSA8IGIpJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdEQ0hFQ0soeCA9PSA0MiknLAotICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRl
ciB1c2luZyBEQ0hFQ0tfRVEgaW5zdGVhZCBvZiBEQ0hFQ0soYSA9PSBiKScKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ0RDSEVDSyh4ICE9IDQyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
J0NvbnNpZGVyIHVzaW5nIERDSEVDS19ORSBpbnN0ZWFkIG9mIERDSEVDSyhhICE9IGIpJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnRENIRUNLKHggPj0gNDIpJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRENIRUNLX0dFIGluc3RlYWQgb2YgRENIRUNLKGEgPj0g
YiknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0n
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdEQ0hFQ0soeCA+IDQyKScsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIERDSEVDS19HVCBpbnN0ZWFkIG9mIERDSEVD
SyhhID4gYiknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNr
XSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdEQ0hFQ0soeCA8PSA0MiknLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBEQ0hFQ0tfTEUgaW5zdGVhZCBv
ZiBEQ0hFQ0soYSA8PSBiKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcmVhZGFiaWxp
dHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0RDSEVDSyh4IDwgNDIp
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRENIRUNLX0xUIGlu
c3RlYWQgb2YgRENIRUNLKGEgPCBiKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcmVh
ZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAg
ICAgICAgICdFWFBFQ1RfVFJVRSgiNDIiID09IHgpJywKLSAgICAgICAgICAgICdDb25zaWRlciB1
c2luZyBFWFBFQ1RfRVEgaW5zdGVhZCBvZiBFWFBFQ1RfVFJVRShhID09IGIpJwotICAgICAgICAg
ICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KAotICAgICAgICAgICAgJ0VYUEVDVF9UUlVFKCI0MiIgIT0geCknLAotICAgICAgICAgICAgJ0Nv
bnNpZGVyIHVzaW5nIEVYUEVDVF9ORSBpbnN0ZWFkIG9mIEVYUEVDVF9UUlVFKGEgIT0gYiknCi0g
ICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoCi0gICAgICAgICAgICAnRVhQRUNUX1RSVUUoKzQyID49IHgpJywKLSAgICAgICAg
ICAgICdDb25zaWRlciB1c2luZyBFWFBFQ1RfR0UgaW5zdGVhZCBvZiBFWFBFQ1RfVFJVRShhID49
IGIpJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ0VYUEVDVF9UUlVFX00oLTQyID4geCknLAot
ICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEVYUEVDVF9HVF9NIGluc3RlYWQgb2YgRVhQRUNU
X1RSVUVfTShhID4gYiknCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnRVhQRUNUX1RSVUVfTSg0
MlUgPD0geCknLAotICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEVYUEVDVF9MRV9NIGluc3Rl
YWQgb2YgRVhQRUNUX1RSVUVfTShhIDw9IGIpJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5
L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ0VY
UEVDVF9UUlVFX00oNDJMIDwgeCknLAotICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEVYUEVD
VF9MVF9NIGluc3RlYWQgb2YgRVhQRUNUX1RSVUVfTShhIDwgYiknCi0gICAgICAgICAgICAnICBb
cmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAg
ICAgICAgICAgICdFWFBFQ1RfRkFMU0UoeCA9PSA0MiknLAotICAgICAgICAgICAgJ0NvbnNpZGVy
IHVzaW5nIEVYUEVDVF9ORSBpbnN0ZWFkIG9mIEVYUEVDVF9GQUxTRShhID09IGIpJwotICAgICAg
ICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KAotICAgICAgICAgICAgJ0VYUEVDVF9GQUxTRSh4ICE9IDQyKScsCi0gICAgICAgICAgICAn
Q29uc2lkZXIgdXNpbmcgRVhQRUNUX0VRIGluc3RlYWQgb2YgRVhQRUNUX0ZBTFNFKGEgIT0gYikn
Ci0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnRVhQRUNUX0ZBTFNFKHggPj0gNDIpJywKLSAgICAg
ICAgICAgICdDb25zaWRlciB1c2luZyBFWFBFQ1RfTFQgaW5zdGVhZCBvZiBFWFBFQ1RfRkFMU0Uo
YSA+PSBiKScKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdBU1NFUlRfRkFMU0UoeCA+IDQyKScs
Ci0gICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgQVNTRVJUX0xFIGluc3RlYWQgb2YgQVNTRVJU
X0ZBTFNFKGEgPiBiKScKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdBU1NFUlRfRkFMU0UoeCA8
PSA0MiknLAotICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEFTU0VSVF9HVCBpbnN0ZWFkIG9m
IEFTU0VSVF9GQUxTRShhIDw9IGIpJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNr
XSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ0FTU0VSVF9G
QUxTRV9NKHggPCA0MiknLAotICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEFTU0VSVF9HRV9N
IGluc3RlYWQgb2YgQVNTRVJUX0ZBTFNFX00oYSA8IGIpJwotICAgICAgICAgICAgJyAgW3JlYWRh
YmlsaXR5L2NoZWNrXSBbMl0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNLKHNv
bWVfaXRlcmF0b3IgPT0gb2JqLmVuZCgpKScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCdFWFBFQ1RfVFJVRShzb21lX2l0ZXJhdG9yID09IG9iai5lbmQoKSknLCAnJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnRVhQRUNUX0ZBTFNFKHNvbWVfaXRlcmF0b3IgPT0gb2JqLmVuZCgp
KScsICcnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNLKENyZWF0ZVRlc3RGaWxl
KGRpciwgKDEgPDwgMjApKSk7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNL
KENyZWF0ZVRlc3RGaWxlKGRpciwgKDEgPj4gMjApKSk7JywgJycpCi0KLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnQ0hFQ0soeDw0MiknLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnTWlz
c2luZyBzcGFjZXMgYXJvdW5kIDwnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0
ZXNwYWNlL29wZXJhdG9yc10gWzNdJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNp
ZGVyIHVzaW5nIENIRUNLX0xUIGluc3RlYWQgb2YgQ0hFQ0soYSA8IGIpJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXSddKQotICAgICAgICBzZWxm
LmFzc2VydF9saW50KCdDSEVDSyh4PjQyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0Nv
bnNpZGVyIHVzaW5nIENIRUNLX0dUIGluc3RlYWQgb2YgQ0hFQ0soYSA+IGIpJwotICAgICAgICAg
ICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJyAgICBFWFBFQ1RfVFJVRSg0MiA8IHgpIC8v
IFJhbmRvbSBjb21tZW50LicsCi0gICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRVhQRUNUX0xU
IGluc3RlYWQgb2YgRVhQRUNUX1RSVUUoYSA8IGIpJwotICAgICAgICAgICAgJyAgW3JlYWRhYmls
aXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAg
J0VYUEVDVF9UUlVFKCA0MiA8IHggKScsCi0gICAgICAgICAgICBbJ0V4dHJhIHNwYWNlIGFmdGVy
ICggaW4gZnVuY3Rpb24gY2FsbCcKLSAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9wYXJlbnNd
IFs0XScsCi0gICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEVYUEVDVF9MVCBpbnN0ZWFkIG9m
IEVYUEVDVF9UUlVFKGEgPCBiKScKLSAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2td
IFsyXSddKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ0NIRUNLKCJm
b28iID09ICJmb28iKScsCi0gICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgQ0hFQ0tfRVEgaW5z
dGVhZCBvZiBDSEVDSyhhID09IGIpJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNr
XSBbMl0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNLX0VRKCJmb28iLCAiZm9v
IiknLCAnJykKLQotICAgIGRlZiB0ZXN0X2JyYWNlX2F0X2JlZ2luX29mX2xpbmUoc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3snLAotICAgICAgICAgICAgICAgICAgICAgICAgICdU
aGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0nKQotICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnI2VuZGlmXG4nCi0gICAg
ICAgICAgICAne1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmIChjb25kaXRp
b24pIHsnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVf
bGludCgKLSAgICAgICAgICAgICcgICAgTUFDUk8xKG1hY3JvQXJnKSB7JywKLSAgICAgICAgICAg
ICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAn
QUNDRVNTT1JfR0VUVEVSKE1lc3NhZ2VFdmVudFBvcnRzKSB7JywKLSAgICAgICAgICAgICdQbGFj
ZSBicmFjZSBvbiBpdHMgb3duIGxpbmUgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zLiAgW3doaXRl
c3BhY2UvYnJhY2VzXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQo
Ci0gICAgICAgICAgICAnaW50IGZvbygpIHsnLAotICAgICAgICAgICAgJ1BsYWNlIGJyYWNlIG9u
IGl0cyBvd24gbGluZSBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBbd2hpdGVzcGFjZS9icmFj
ZXNdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAg
ICAgICdpbnQgZm9vKCkgY29uc3QgeycsCi0gICAgICAgICAgICAnUGxhY2UgYnJhY2Ugb24gaXRz
IG93biBsaW5lIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFt3aGl0ZXNwYWNlL2JyYWNlc10g
WzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAg
J2ludCBmb28oKSBjb25zdFxuJwotICAgICAgICAgICAgJ3tcbicKLSAgICAgICAgICAgICd9XG4n
LAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgK
LSAgICAgICAgICAgICdpZiAoY29uZGl0aW9uXG4nCi0gICAgICAgICAgICAnICAgICYmIGNvbmRp
dGlvbjJcbicKLSAgICAgICAgICAgICcgICAgJiYgY29uZGl0aW9uMykge1xuJwotICAgICAgICAg
ICAgJ31cbicsCi0gICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X21pc21hdGNoaW5nX3Nw
YWNlc19pbl9wYXJlbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChmb28g
KSB7JywgJ01pc21hdGNoaW5nIHNwYWNlcyBpbnNpZGUgKCkgaW4gaWYnCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvcGFyZW5zXSBbNV0nKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdzd2l0Y2ggKCBmb28pIHsnLCAnTWlzbWF0Y2hpbmcgc3BhY2VzIGluc2lkZSAo
KSBpbiBzd2l0Y2gnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvcGFy
ZW5zXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb3IgKGZvbzsgYmE7IGJhciAp
IHsnLCAnTWlzbWF0Y2hpbmcgc3BhY2VzIGluc2lkZSAoKSBpbiBmb3InCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvcGFyZW5zXSBbNV0nKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdmb3IgKDsgZm9vOyBiYXIpIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnZm9yICggOyBmb287IGJhcikgeycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCdmb3IgKCA7IGZvbzsgYmFyICkgeycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdm
b3IgKGZvbzsgYmFyOyApIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9yZWFj
aCAoZm9vLCBmb29zICkgeycsICdNaXNtYXRjaGluZyBzcGFjZXMgaW5zaWRlICgpIGluIGZvcmVh
Y2gnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvcGFyZW5zXSBbNV0n
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb3JlYWNoICggZm9vLCBmb29zKSB7JywgJ01p
c21hdGNoaW5nIHNwYWNlcyBpbnNpZGUgKCkgaW4gZm9yZWFjaCcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAnICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs1XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ3doaWxlICggIGZvbyAgKSB7JywgJ1Nob3VsZCBoYXZlIHplcm8gb3Igb25lIHNwYWNl
cyBpbnNpZGUnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAoIGFuZCApIGluIHdoaWxlICBb
d2hpdGVzcGFjZS9wYXJlbnNdIFs1XScpCi0KLSAgICBkZWYgdGVzdF9zcGFjaW5nX2Zvcl9mbmNh
bGwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChmb28pIHsnLCAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9yIChmb287YmFyO2JheikgeycsICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdmb3JlYWNoIChmb28sIGZvb3MpIHsnLCAnJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnd2hpbGUgKGZvbykgeycsICcnKQotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdzd2l0Y2ggKGZvbykgeycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdu
ZXcgKFJlbmRlckFyZW5hKCkpIFJlbmRlcklubGluZShkb2N1bWVudCgpKScsICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdmb28oIGJhciknLCAnRXh0cmEgc3BhY2UgYWZ0ZXIgKCBpbiBm
dW5jdGlvbiBjYWxsJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL3Bh
cmVuc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9vYmFyKCBcXCcsICcnKQot
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb29iYXIoICAgICBcXCcsICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCcoIGEgKyBiKScsICdFeHRyYSBzcGFjZSBhZnRlciAoJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzJdJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnKChhK2IpKScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCdmb28gKGZvbyknLCAnRXh0cmEgc3BhY2UgYmVmb3JlICggaW4gZnVuY3Rpb24gY2FsbCcKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs0XScpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3R5cGVkZWYgZm9vICgqZm9vKShmb28pJywgJycpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3R5cGVkZWYgZm9vICgqZm9vMTJiYXJfKShmb28pJywgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3R5cGVkZWYgZm9vIChGb286OipiYXIpKGZvbykn
LCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9vIChGb286OipiYXIpKCcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJ0V4dHJhIHNwYWNlIGJlZm9yZSAoIGluIGZ1bmN0aW9uIGNh
bGwnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvcGFyZW5zXSBbNF0n
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd0eXBlZGVmIGZvbyAoRm9vOjoqYmFyKSgnLCAn
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnKGZvbykoYmFyKScsICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCdGb28gKCpmb28pKGJhciknLCAnJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnRm9vICgqZm9vKShCYXIgYmFyLCcsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdjaGFyICgqcClbc2l6ZW9mKGZvbyldID0gJmZvbycsICcnKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdjaGFyICgmcmVmKVtzaXplb2YoZm9vKV0gPSAmZm9vJywgJycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2NvbnN0IGNoYXIzMiAoKnRhYmxlW10pWzZdOycsICcnKQotCi0g
ICAgZGVmIHRlc3Rfc3BhY2luZ19iZWZvcmVfYnJhY2VzKHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdpZiAoZm9vKXsnLCAnTWlzc2luZyBzcGFjZSBiZWZvcmUgeycKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9icmFjZXNdIFs1XScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ2ZvcnsnLCAnTWlzc2luZyBzcGFjZSBiZWZvcmUgeycKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9icmFjZXNdIFs1XScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ2ZvciB7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0VY
UEVDVF9ERUJVR19ERUFUSCh7JywgJycpCi0KLSAgICBkZWYgdGVzdF9zcGFjaW5nX2Fyb3VuZF9l
bHNlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd9ZWxzZSB7JywgJ01pc3Npbmcg
c3BhY2UgYmVmb3JlIGVsc2UnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3Bh
Y2UvYnJhY2VzXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd9IGVsc2V7JywgJ01p
c3Npbmcgc3BhY2UgYmVmb3JlIHsnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRl
c3BhY2UvYnJhY2VzXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd9IGVsc2Ugeycs
ICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd9IGVsc2UgaWYnLCAnJykKLQotICAgIGRl
ZiB0ZXN0X3NwYWNpbmdfZm9yX2JpbmFyeV9vcHMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ2lmIChmb288PWJhcikgeycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgPD0nCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdpZiAoZm9vPGJhcikgeycsICdNaXNzaW5nIHNwYWNlcyBh
cm91bmQgPCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRv
cnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChmb288YmFyLT5iYXopIHsn
LCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIDwnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAg
W3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdp
ZiAoZm9vPGJhci0+YmFyKSB7JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCA8JwotICAgICAgICAg
ICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgndHlwZWRlZiBoYXNoX21hcDxGb28sIEJhcicsICdNaXNzaW5nIHNw
YWNlcyBhcm91bmQgPCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9v
cGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3R5cGVkZWYgaGFzaF9t
YXA8Rm9vb29vVHlwZSwgQmFhYWFhclR5cGUsJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2E8Rm9vPiB0Kz1iOycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgKz0nCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCdhPEZvbz4gdC09YjsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIC09
JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNd
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0Kj1iOycsICdNaXNzaW5nIHNw
YWNlcyBhcm91bmQgKj0nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uv
b3BlcmF0b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQvPWI7
JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCAvPScKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
ICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
J2E8Rm9vKj4gdHw9YjsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIHw9JwotICAgICAgICAgICAg
ICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnYTxGb28qPiB0Jj1iOycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgJj0n
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10n
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQ8PD1iOycsICdNaXNzaW5nIHNw
YWNlcyBhcm91bmQgPDw9JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNl
L29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0Pj49
YjsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kID4+PScKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2E8Rm9vKj4gdD4+PSZifGM7JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCA+Pj0nCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQ8PD0qYi9jOycsICdNaXNzaW5nIHNwYWNl
cyBhcm91bmQgPDw9JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29w
ZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28+IHQgLT0gYjsn
LCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28+IHQgKz0gYjsnLCAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0ICo9IGI7JywgJycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCAvPSBiOycsICcnKQotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdhPEZvbyo+IHQgfD0gYjsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
YTxGb28qPiB0ICY9IGI7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4g
dCA8PD0gYjsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0ID4+PSBi
OycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQgPj49ICZifGM7Jywg
J01pc3Npbmcgc3BhY2VzIGFyb3VuZCB8JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3
aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxG
b28qPiB0IDw8PSAqYi9jOycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgLycKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA8PD0gYi9jOyAvL1Rlc3QnLCBbCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJ1Nob3VsZCBoYXZlIGEgc3BhY2UgYmV0d2VlbiAvLyBhbmQgY29tbWVu
dCAgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdbd2hpdGVzcGFjZS9jb21tZW50c10gWzRd
JywgJ01pc3NpbmcnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyBzcGFjZXMgYXJvdW5kIC8g
IFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
J2E8Rm9vKj4gdCA8PD0gYnx8YzsgIC8vVGVzdCcsIFsnT25lIHNwYWNlIGJlZm9yZSBlbmQnCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgJyBvZiBsaW5lIGNvbW1lbnRzICBbd2hpdGVzcGFjZS9j
b21tZW50c10gWzVdJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnU2hvdWxkIGhhdmUgYSBz
cGFjZSBiZXR3ZWVuIC8vIGFuZCBjb21tZW50ICAnCi0gICAgICAgICAgICAgICAgICAgICAgICAg
J1t3aGl0ZXNwYWNlL2NvbW1lbnRzXSBbNF0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdN
aXNzaW5nIHNwYWNlcyBhcm91bmQgfHwgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJ10pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA8PD0gYiYmYzsgLy8gVGVzdCcsICdN
aXNzaW5nIHNwYWNlcyBhcm91bmQnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAmJiAgW3do
aXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZv
byo+IHQgPDw9IGImJiZjOyAvLyBUZXN0JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCcKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnICYmICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA8PD0gYiYmKmM7IC8vIFRlc3QnLCAn
TWlzc2luZyBzcGFjZXMgYXJvdW5kJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgJiYgIFt3
aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxG
b28qPiB0IDw8PSBiICYmICpjOyAvLyBUZXN0JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2E8Rm9vKj4gdCA8PD0gYiAmJiAmYzsgLy8gVGVzdCcsICcnKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdhPEZvbyo+IHQgPDw9IGIgfHwgJmM7ICAvKlRlc3QnLCAnQ29tcGxleCBtdWx0
aS1saW5lICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnLyouLi4qLy1zdHlsZSBjb21tZW50
IGZvdW5kLiBMaW50IG1heSBnaXZlIGJvZ3VzICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
d2FybmluZ3MuICBDb25zaWRlciByZXBsYWNpbmcgdGhlc2Ugd2l0aCAvLy1zdHlsZScKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnIGNvbW1lbnRzLCB3aXRoICNpZiAwLi4uI2VuZGlmLCBvciB3
aXRoIG1vcmUgY2xlYXJseScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnIHN0cnVjdHVyZWQg
bXVsdGktbGluZSBjb21tZW50cy4gIFtyZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudF0gWzVd
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28mPiB0IDw8PSAmYiB8ICZjOycsICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQgPDw9ICZiICYgJmM7IC8vIFRl
c3QnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0IDw8PSAqYiAvICZj
OyAvLyBUZXN0JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChhPWIgPT0gMSkn
LCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kID0gIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzRdJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYSA9IDE8PDIwJywgJ01pc3Npbmcgc3BhY2VzIGFy
b3VuZCA8PCAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdpZiAoYSA9IGIgPT0gMSknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
YSA9IDEgPDwgMjAnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KCcj
aW5jbHVkZSAiY29uZmlnLmgiXG4jaW5jbHVkZSA8c3lzL2lvLmg+XG4nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xp
bmVfbGludCgnI2luY2x1ZGUgImNvbmZpZy5oIlxuI2ltcG9ydCA8Zm9vL2Jhci5oPlxuJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3Rfc3Bh
Y2luZ19iZWZvcmVfbGFzdF9zZW1pY29sb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2NhbGxfZnVuY3Rpb24oKSA7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRXh0cmEg
c3BhY2UgYmVmb3JlIGxhc3Qgc2VtaWNvbG9uLiBJZiB0aGlzIHNob3VsZCBiZSBhbiAnCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJ2VtcHR5IHN0YXRlbWVudCwgdXNlIHsgfSBpbnN0ZWFkLicK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9zZW1pY29sb25dIFs1XScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3doaWxlICh0cnVlKSA7JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAnRXh0cmEgc3BhY2UgYmVmb3JlIGxhc3Qgc2VtaWNvbG9uLiBJZiB0aGlz
IHNob3VsZCBiZSBhbiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2VtcHR5IHN0YXRlbWVu
dCwgdXNlIHsgfSBpbnN0ZWFkLicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVz
cGFjZS9zZW1pY29sb25dIFs1XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2RlZmF1bHQ6
OycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1NlbWljb2xvbiBkZWZpbmluZyBlbXB0eSBz
dGF0ZW1lbnQuIFVzZSB7IH0gaW5zdGVhZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAg
W3doaXRlc3BhY2Uvc2VtaWNvbG9uXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcg
ICAgICA7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnTGluZSBjb250YWlucyBvbmx5IHNl
bWljb2xvbi4gSWYgdGhpcyBzaG91bGQgYmUgYW4gZW1wdHkgJwotICAgICAgICAgICAgICAgICAg
ICAgICAgICdzdGF0ZW1lbnQsIHVzZSB7IH0gaW5zdGVhZC4nCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgJyAgW3doaXRlc3BhY2Uvc2VtaWNvbG9uXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdmb3IgKGludCBpID0gMDsgOycsICcnKQotCi0gICAgIyBTdGF0aWMgb3IgZ2xvYmFs
IFNUTCBzdHJpbmdzLgotICAgIGRlZiB0ZXN0X3N0YXRpY19vcl9nbG9iYWxfc3Rsc3RyaW5ncyhz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RyaW5nIGZvbzsnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICdGb3IgYSBzdGF0aWMvZ2xvYmFsIHN0cmluZyBjb25zdGFudCwgdXNl
IGEgQyBzdHlsZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZyBpbnN0ZWFkOiAi
Y2hhciBmb29bXSIuJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtydW50aW1lL3N0cmlu
Z10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RyaW5nIGtGb28gPSAiaGVsbG8i
OyAvLyBFbmdsaXNoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRm9yIGEgc3RhdGljL2ds
b2JhbCBzdHJpbmcgY29uc3RhbnQsIHVzZSBhIEMgc3R5bGUgJwotICAgICAgICAgICAgICAgICAg
ICAgICAgICdzdHJpbmcgaW5zdGVhZDogImNoYXIga0Zvb1tdIi4nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJyAgW3J1bnRpbWUvc3RyaW5nXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdzdGF0aWMgc3RyaW5nIGZvbzsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdGb3Ig
YSBzdGF0aWMvZ2xvYmFsIHN0cmluZyBjb25zdGFudCwgdXNlIGEgQyBzdHlsZSAnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJ3N0cmluZyBpbnN0ZWFkOiAic3RhdGljIGNoYXIgZm9vW10iLicK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcnVudGltZS9zdHJpbmddIFs0XScpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0YXRpYyBjb25zdCBzdHJpbmcgZm9vOycsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJ0ZvciBhIHN0YXRpYy9nbG9iYWwgc3RyaW5nIGNvbnN0YW50LCB1
c2UgYSBDIHN0eWxlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nIGluc3RlYWQ6
ICJzdGF0aWMgY29uc3QgY2hhciBmb29bXSIuJwotICAgICAgICAgICAgICAgICAgICAgICAgICcg
IFtydW50aW1lL3N0cmluZ10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RyaW5n
IEZvbzo6YmFyOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvciBhIHN0YXRpYy9nbG9i
YWwgc3RyaW5nIGNvbnN0YW50LCB1c2UgYSBDIHN0eWxlICcKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAnc3RyaW5nIGluc3RlYWQ6ICJjaGFyIEZvbzo6YmFyW10iLicKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnICBbcnVudGltZS9zdHJpbmddIFs0XScpCi0gICAgICAgICMgUmFyZSBjYXNl
LgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJpbmcgZm9vKCJmb29iYXIiKTsnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICdGb3IgYSBzdGF0aWMvZ2xvYmFsIHN0cmluZyBjb25zdGFu
dCwgdXNlIGEgQyBzdHlsZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZyBpbnN0
ZWFkOiAiY2hhciBmb29bXSIuJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtydW50aW1l
L3N0cmluZ10gWzRdJykKLSAgICAgICAgIyBTaG91bGQgbm90IGNhdGNoIGxvY2FsIG9yIG1lbWJl
ciB2YXJpYWJsZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgICBzdHJpbmcgZm9vJywg
JycpCi0gICAgICAgICMgU2hvdWxkIG5vdCBjYXRjaCBmdW5jdGlvbnMuCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ3N0cmluZyBFbXB0eVN0cmluZygpIHsgcmV0dXJuICIiOyB9JywgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0cmluZyBFbXB0eVN0cmluZyAoKSB7IHJldHVybiAi
IjsgfScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJpbmcgVmVyeUxvbmdOYW1l
RnVuY3Rpb25Tb21ldGltZXNFbmRzV2l0aChcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
ICAgIFZlcnlMb25nTmFtZVR5cGUgdmVyeV9sb25nX25hbWVfdmFyaWFibGUpIHt9JywgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3RlbXBsYXRlPD5cbicKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAnc3RyaW5nIEZ1bmN0aW9uVGVtcGxhdGVTcGVjaWFsaXphdGlvbjxTb21lVHlwZT4o
XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIGludCB4KSB7IHJldHVybiAiIjsg
fScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd0ZW1wbGF0ZTw+XG4nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJ3N0cmluZyBGdW5jdGlvblRlbXBsYXRlU3BlY2lhbGl6YXRpb248
dmVjdG9yPEE6OkI+KiA+KFxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICBpbnQg
eCkgeyByZXR1cm4gIiI7IH0nLCAnJykKLQotICAgICAgICAjIHNob3VsZCBub3QgY2F0Y2ggbWV0
aG9kcyBvZiB0ZW1wbGF0ZSBjbGFzc2VzLgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJp
bmcgQ2xhc3M8VHlwZT46Ok1ldGhvZCgpIGNvbnN0XG4nCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJ3tcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICByZXR1cm4gIiI7XG4nCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJ31cbicsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCdzdHJpbmcgQ2xhc3M8VHlwZT46Ok1ldGhvZChcbicKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAnICAgaW50IGFyZykgY29uc3RcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAne1xuJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIHJldHVybiAiIjtcbicKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnfVxuJywgJycpCi0KLSAgICBkZWYgdGVzdF9ub19zcGFjZXNfaW5fZnVuY3Rp
b25fY2FsbHMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ1RlbGxTdG9yeSgxLCAz
KTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdUZWxsU3RvcnkoMSwgMyApOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0V4dHJh
IHNwYWNlIGJlZm9yZSApJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNl
L3BhcmVuc10gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnVGVsbFN0b3J5KDEgLyog
d29sZiAqLywgMyAvKiBwaWdzICovKTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICcnKQot
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoJyNlbmRpZlxuICAgICk7JywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfdHdv
X3NwYWNlc19iZXR3ZWVuX2NvZGVfYW5kX2NvbW1lbnRzKHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCd9IC8vIG5hbWVzcGFjZSBmb28nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd9Ly8gbmFtZXNwYWNlIGZvbycsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJ09uZSBzcGFjZSBiZWZvcmUgZW5kIG9mIGxpbmUgY29tbWVu
dHMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvY29tbWVudHNdIFs1
XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ByaW50ZigiZm9vIik7IC8vIE91dHNpZGUg
cXVvdGVzLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ2ludCBpID0gMDsgLy8gSGF2aW5nIG9uZSBzcGFjZSBpcyBmaW5lLicsJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBpID0gMDsgIC8vIEhhdmluZyB0d28gc3BhY2Vz
IGlzIGJhZC4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdPbmUgc3BhY2UgYmVmb3JlIGVu
ZCBvZiBsaW5lIGNvbW1lbnRzJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNw
YWNlL2NvbW1lbnRzXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgaSA9IDA7
ICAgLy8gSGF2aW5nIHRocmVlIHNwYWNlcyBpcyBiYWQuJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAnT25lIHNwYWNlIGJlZm9yZSBlbmQgb2YgbGluZSBjb21tZW50cycKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9jb21tZW50c10gWzVdJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnLy8gVG9wIGxldmVsIGNvbW1lbnQnLCAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnICAgIC8vIExpbmUgc3RhcnRzIHdpdGggZm91ciBzcGFjZXMuJywgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvbygpO1xuJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICd7IC8vIEEgc2NvcGUgaXMgb3BlbmluZy4nLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnICAgIGZvbygpO1xuJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgeyAvLyBB
biBpbmRlbnRlZCBzY29wZSBpcyBvcGVuaW5nLicsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdpZiAoZm9vKSB7IC8vIG5vdCBhIHB1cmUgc2NvcGUnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdwcmludGYoIi8vIEluIHF1b3Rl
cy4iKScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdwcmludGYoIlxcIiVzIC8vIElu
IHF1b3Rlcy4iKScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdwcmludGYoIiVzIiwg
Ii8vIEluIHF1b3Rlcy4iKScsICcnKQotCi0gICAgZGVmIHRlc3Rfc3BhY2VfYWZ0ZXJfY29tbWVu
dF9tYXJrZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy8vJywgJycpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy8veCcsICdTaG91bGQgaGF2ZSBhIHNwYWNlIGJldHdlZW4g
Ly8gYW5kIGNvbW1lbnQnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uv
Y29tbWVudHNdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy8vIHgnLCAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnLy8tLS0tJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJy8vPT09PScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLy8vLy8nLCAn
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnLy8vLy8vIHgnLCAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnLy8vIHgnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnLy8v
L3gnLCAnU2hvdWxkIGhhdmUgYSBzcGFjZSBiZXR3ZWVuIC8vIGFuZCBjb21tZW50JwotICAgICAg
ICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2NvbW1lbnRzXSBbNF0nKQotCi0gICAg
ZGVmIHRlc3RfbmV3bGluZV9hdF9lb2Yoc2VsZik6Ci0gICAgICAgIGRlZiBkb190ZXN0KHNlbGYs
IGRhdGEsIGlzX21pc3NpbmdfZW9mKToKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVy
cm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgICAgIGNwcF9zdHlsZS5wcm9jZXNz
X2ZpbGVfZGF0YSgnZm9vLmNwcCcsICdjcHAnLCBkYXRhLnNwbGl0KCdcbicpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAg
ICAgICMgVGhlIHdhcm5pbmcgYXBwZWFycyBvbmx5IG9uY2UuCi0gICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFscygKLSAgICAgICAgICAgICAgICBpbnQoaXNfbWlzc2luZ19lb2YpLAotICAgICAg
ICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRzKCkuY291bnQoCi0gICAgICAgICAgICAg
ICAgICAgICdDb3VsZCBub3QgZmluZCBhIG5ld2xpbmUgY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2Yg
dGhlIGZpbGUuJwotICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9lbmRpbmdfbmV3
bGluZV0gWzVdJykpCi0KLSAgICAgICAgZG9fdGVzdChzZWxmLCAnLy8gTmV3bGluZVxuLy8gYXQg
RU9GXG4nLCBGYWxzZSkKLSAgICAgICAgZG9fdGVzdChzZWxmLCAnLy8gTm8gbmV3bGluZVxuLy8g
YXQgRU9GJywgVHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2ludmFsaWRfdXRmOChzZWxmKToKLSAgICAg
ICAgZGVmIGRvX3Rlc3Qoc2VsZiwgcmF3X2J5dGVzLCBoYXNfaW52YWxpZF91dGY4KToKLSAgICAg
ICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAg
ICAgICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgKLSAgICAgICAgICAgICAgICAn
Zm9vLmNwcCcsICdjcHAnLAotICAgICAgICAgICAgICAgIHVuaWNvZGUocmF3X2J5dGVzLCAndXRm
OCcsICdyZXBsYWNlJykuc3BsaXQoJ1xuJyksCi0gICAgICAgICAgICAgICAgZXJyb3JfY29sbGVj
dG9yKQotICAgICAgICAgICAgIyBUaGUgd2FybmluZyBhcHBlYXJzIG9ubHkgb25jZS4KLSAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAgICAgIGludChoYXNfaW52YWxp
ZF91dGY4KSwKLSAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IucmVzdWx0cygpLmNvdW50
KAotICAgICAgICAgICAgICAgICAgICAnTGluZSBjb250YWlucyBpbnZhbGlkIFVURi04JwotICAg
ICAgICAgICAgICAgICAgICAnIChvciBVbmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3RlcikuJwot
ICAgICAgICAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvdXRmOF0gWzVdJykpCi0KLSAgICAg
ICAgZG9fdGVzdChzZWxmLCAnSGVsbG8gd29ybGRcbicsIEZhbHNlKQotICAgICAgICBkb190ZXN0
KHNlbGYsICdceGU5XHg4ZVx4YmRcbicsIEZhbHNlKQotICAgICAgICBkb190ZXN0KHNlbGYsICdc
eGU5eFx4OGVceGJkXG4nLCBUcnVlKQotICAgICAgICAjIFRoaXMgaXMgdGhlIGVuY29kaW5nIG9m
IHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXRzZWxmICh3aGljaAotICAgICAgICAjIHlvdSBj
YW4gc2VlIGJ5IGV2YWx1YXRpbmcgY29kZWNzLmdldGVuY29kZXIoJ3V0ZjgnKSh1J1x1ZmZmZCcp
KS4KLSAgICAgICAgZG9fdGVzdChzZWxmLCAnXHhlZlx4YmZceGJkXG4nLCBUcnVlKQotCi0gICAg
ZGVmIHRlc3RfaXNfYmxhbmtfbGluZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNwcF9z
dHlsZS5pc19ibGFua19saW5lKCcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNwcF9zdHlsZS5p
c19ibGFua19saW5lKCcgJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjcHBfc3R5bGUuaXNfYmxh
bmtfbGluZSgnIFx0XHJcbicpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5p
c19ibGFua19saW5lKCdpbnQgYTsnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5
bGUuaXNfYmxhbmtfbGluZSgneycpKQotCi0gICAgZGVmIHRlc3RfYmxhbmtfbGluZXNfY2hlY2so
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2JsYW5rX2xpbmVzX2NoZWNrKFsne1xuJywgJ1xu
JywgJ1xuJywgJ31cbiddLCAxLCAxKQotICAgICAgICBzZWxmLmFzc2VydF9ibGFua19saW5lc19j
aGVjayhbJyAgaWYgKGZvbykge1xuJywgJ1xuJywgJyAgfVxuJ10sIDEsIDEpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2JsYW5rX2xpbmVzX2NoZWNrKAotICAgICAgICAgICAgWydcbicsICcvLyB7XG4n
LCAnXG4nLCAnXG4nLCAnLy8gQ29tbWVudFxuJywgJ3tcbicsICd9XG4nXSwgMCwgMCkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfYmxhbmtfbGluZXNfY2hlY2soWydcbicsICdydW4oInsiKTtcbicsICdc
biddLCAwLCAwKQotICAgICAgICBzZWxmLmFzc2VydF9ibGFua19saW5lc19jaGVjayhbJ1xuJywg
JyAgaWYgKGZvbykgeyByZXR1cm4gMDsgfVxuJywgJ1xuJ10sIDAsIDApCi0KLSAgICBkZWYgdGVz
dF9hbGxvd19ibGFua19saW5lX2JlZm9yZV9jbG9zaW5nX25hbWVzcGFjZShzZWxmKToKLSAgICAg
ICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQotICAgICAg
ICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoJ2Zvby5jcHAnLCAnY3BwJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbmFtZXNwYWNlIHsnLCAnJywgJ30gIC8vIG5h
bWVzcGFjZSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29s
bGVjdG9yKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwLCBlcnJvcl9jb2xsZWN0b3IucmVz
dWx0cygpLmNvdW50KAotICAgICAgICAgICAgJ0JsYW5rIGxpbmUgYXQgdGhlIGVuZCBvZiBhIGNv
ZGUgYmxvY2suICBJcyB0aGlzIG5lZWRlZD8nCi0gICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9i
bGFua19saW5lXSBbM10nKSkKLQotICAgIGRlZiB0ZXN0X2FsbG93X2JsYW5rX2xpbmVfYmVmb3Jl
X2lmX2Vsc2VfY2hhaW4oc2VsZik6Ci0gICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29s
bGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRh
KCdmb28uY3BwJywgJ2NwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
J2lmIChob2dlKSB7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywg
ICMgTm8gd2FybmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IGVs
c2UgaWYgKHBpeW8pIHsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcn
LCAgIyBObyB3YXJuaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30g
ZWxzZSBpZiAocGl5b3BpeW8pIHsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcgIGhvZ2UgPSB0cnVlOycsICAjIE5vIHdhcm5pbmcKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnfSBlbHNlIHsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcnLCAgIyBXYXJuaW5nIG9uIHRoaXMgbGluZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICd9J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGVycm9y
X2NvbGxlY3Rvci5yZXN1bHRzKCkuY291bnQoCi0gICAgICAgICAgICAnQmxhbmsgbGluZSBhdCB0
aGUgZW5kIG9mIGEgY29kZSBibG9jay4gIElzIHRoaXMgbmVlZGVkPycKLSAgICAgICAgICAgICcg
IFt3aGl0ZXNwYWNlL2JsYW5rX2xpbmVdIFszXScpKQotCi0gICAgZGVmIHRlc3RfZWxzZV9vbl9z
YW1lX2xpbmVfYXNfY2xvc2luZ19icmFjZXMoc2VsZik6Ci0gICAgICAgIGVycm9yX2NvbGxlY3Rv
ciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nl
c3NfZmlsZV9kYXRhKCdmb28uY3BwJywgJ2NwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJ2lmIChob2dlKSB7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfScsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBlbHNlIHsnICAjIFdhcm5pbmcg
b24gdGhpcyBsaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30nXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoMSwgZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKS5jb3VudCgKLSAgICAgICAgICAg
ICdBbiBlbHNlIHNob3VsZCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgcHJlY2VkaW5n
IH0nCi0gICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBbNF0nKSkKLQotICAgIGRl
ZiB0ZXN0X2Vsc2VfY2xhdXNlX25vdF9vbl9zYW1lX2xpbmVfYXNfZWxzZShzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnICAgIGVsc2UgRG9Tb21ldGhpbmdFbHNlKCk7JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnRWxzZSBjbGF1c2Ugc2hvdWxkIG5ldmVyIGJlIG9uIHNhbWUg
bGluZSBhcyBlbHNlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnKHVzZSAyIGxpbmVzKSAg
W3doaXRlc3BhY2UvbmV3bGluZV0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAg
IGVsc2UgaWZEb1NvbWV0aGluZ0Vsc2UoKTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdF
bHNlIGNsYXVzZSBzaG91bGQgbmV2ZXIgYmUgb24gc2FtZSBsaW5lIGFzIGVsc2UgJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICcodXNlIDIgbGluZXMpICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBb
NF0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICAgZWxzZSBpZiAoYmxhaCkgeycsICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICAgdmFyaWFibGVfZW5kc19pbl9lbHNlID0g
dHJ1ZTsnLCAnJykKLQotICAgIGRlZiB0ZXN0X2NvbW1hKHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdhID0gZigxLDIpOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ01pc3Np
bmcgc3BhY2UgYWZ0ZXIgLCAgW3doaXRlc3BhY2UvY29tbWFdIFszXScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ2ludCB0bXA9YSxhPWIsYj10bXA7JywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBbJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCA9ICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFs0
XScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGFmdGVyICwgIFt3
aGl0ZXNwYWNlL2NvbW1hXSBbM10nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZihhLCAv
KiBuYW1lICovIGIpOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmKGEsIC8qIG5h
bWUgKi9iKTsnLCAnJykKLQotICAgIGRlZiB0ZXN0X3BvaW50ZXJfcmVmZXJlbmNlX21hcmtlcl9s
b2NhdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50KiBiOycsICcnLCAn
Zm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCAqYjsnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICdEZWNsYXJhdGlvbiBoYXMgc3BhY2UgYmV0d2VlbiB0eXBlIG5hbWUg
YW5kICogaW4gaW50ICpiICBbd2hpdGVzcGFjZS9kZWNsYXJhdGlvbl0gWzNdJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3Jl
dHVybiAqYjsnLCAnJywgJ2Zvby5jcHAnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQg
KmI7JywgJycsICdmb28uYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCogYjsnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICdEZWNsYXJhdGlvbiBoYXMgc3BhY2UgYmV0d2VlbiAq
IGFuZCB2YXJpYWJsZSBuYW1lIGluIGludCogYiAgW3doaXRlc3BhY2UvZGVjbGFyYXRpb25dIFsz
XScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby5jJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnaW50JiBiOycsICcnLCAnZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2ludCAmYjsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdEZWNsYXJhdGlvbiBoYXMg
c3BhY2UgYmV0d2VlbiB0eXBlIG5hbWUgYW5kICYgaW4gaW50ICZiICBbd2hpdGVzcGFjZS9kZWNs
YXJhdGlvbl0gWzNdJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3JldHVybiAmYjsnLCAnJywgJ2Zvby5jcHAnKQotCi0gICAg
ZGVmIHRlc3RfaW5kZW50KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdGF0aWMg
aW50IG5vaW5kZW50OycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICAgaW50IGZv
dXJTcGFjZUluZGVudDsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnIGludCBvbmVT
cGFjZUluZGVudDsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdXZWlyZCBudW1iZXIgb2Yg
c3BhY2VzIGF0IGxpbmUtc3RhcnQuICAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0FyZSB5
b3UgdXNpbmcgYSA0LXNwYWNlIGluZGVudD8gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzNdJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgaW50IHRocmVlU3BhY2VJbmRlbnQ7JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnV2VpcmQgbnVtYmVyIG9mIHNwYWNlcyBhdCBsaW5lLXN0YXJ0
LiAgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdBcmUgeW91IHVzaW5nIGEgNC1zcGFjZSBp
bmRlbnQ/ICBbd2hpdGVzcGFjZS9pbmRlbnRdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJyBjaGFyKiBvbmVTcGFjZUluZGVudCA9ICJwdWJsaWM6IjsnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICdXZWlyZCBudW1iZXIgb2Ygc3BhY2VzIGF0IGxpbmUtc3RhcnQuICAnCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJ0FyZSB5b3UgdXNpbmcgYSA0LXNwYWNlIGluZGVudD8gIFt3
aGl0ZXNwYWNlL2luZGVudF0gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnIHB1Ymxp
YzonLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICBwdWJsaWM6JywgJycpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgIHB1YmxpYzonLCAnJykKLQotICAgIGRlZiB0ZXN0X2xh
YmVsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdwdWJsaWM6JywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAnTGFiZWxzIHNob3VsZCBhbHdheXMgYmUgaW5kZW50ZWQgYXQgbGVh
c3Qgb25lIHNwYWNlLiAgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdJZiB0aGlzIGlzIGEg
bWVtYmVyLWluaXRpYWxpemVyIGxpc3QgaW4gYSBjb25zdHJ1Y3RvciwgJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICd0aGUgY29sb24gc2hvdWxkIGJlIG9uIHRoZSBsaW5lIGFmdGVyIHRoZSBk
ZWZpbml0aW9uICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnaGVhZGVyLiAgW3doaXRlc3Bh
Y2UvbGFiZWxzXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgIHB1YmxpYzonLCAn
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgcHVibGljOicsICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCcgcHVibGljOicsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCcgIHB1YmxpYzonLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgcHVibGljOics
ICcnKQotCi0gICAgZGVmIHRlc3Rfbm90X2FsYWJlbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnTXlWZXJ5TG9uZ05hbWVzcGFjZTo6TXlWZXJ5TG9uZ0NsYXNzTmFtZTo6JywgJycp
Ci0KLSAgICBkZWYgdGVzdF90YWIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ1x0
aW50IGE7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnVGFiIGZvdW5kOyBiZXR0ZXIgdG8g
dXNlIHNwYWNlcyAgW3doaXRlc3BhY2UvdGFiXSBbMV0nKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdpbnQgYSA9IDU7XHQvLyBzZXQgYSB0byA1JywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAnVGFiIGZvdW5kOyBiZXR0ZXIgdG8gdXNlIHNwYWNlcyAgW3doaXRlc3BhY2UvdGFiXSBbMV0n
KQotCi0gICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgotICAgICAgICBvbGRfZmlsdGVycyA9IGNw
cF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMKLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMoJy0sK3doaXRlc3BhY2Us
LXdoaXRlc3BhY2UvaW5kZW50JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAg
ICAgICAgICAgICAgJy8vIEhlbGxvIHRoZXJlICcsCi0gICAgICAgICAgICAgICAgJ0xpbmUgZW5k
cyBpbiB3aGl0ZXNwYWNlLiAgQ29uc2lkZXIgZGVsZXRpbmcgdGhlc2UgZXh0cmEgc3BhY2VzLicK
LSAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9lbmRfb2ZfbGluZV0gWzRdJykKLSAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhID0gKGludCkxLjA7JywgJycpCi0gICAgICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCcgd2VpcmQgb3BlbmluZyBzcGFjZScsICcnKQotICAgICAg
ICBmaW5hbGx5OgotICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVy
cyA9IG9sZF9maWx0ZXJzCi0KLSAgICBkZWYgdGVzdF9kZWZhdWx0X2ZpbHRlcihzZWxmKToKLSAg
ICAgICAgZGVmYXVsdF9maWx0ZXJfcnVsZXMgPSBjcHBfc3R5bGUuX0RFRkFVTFRfRklMVEVSX1JV
TEVTCi0gICAgICAgIG9sZF9maWx0ZXJzID0gY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmls
dGVycwotICAgICAgICBjcHBfc3R5bGUuX0RFRkFVTFRfRklMVEVSX1JVTEVTID0gWyAnLXdoaXRl
c3BhY2UnIF0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBSZXNldCBmaWx0ZXJzCi0gICAg
ICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVycygnJykKLSAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy8vIEhlbGxvIHRoZXJlICcsICcnKQotICAgICAgICAg
ICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMoJyt3aGl0ZXNwYWNlL2Vu
ZF9vZl9saW5lJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAg
ICAgJy8vIEhlbGxvIHRoZXJlICcsCi0gICAgICAgICAgICAgICAgJ0xpbmUgZW5kcyBpbiB3aGl0
ZXNwYWNlLiAgQ29uc2lkZXIgZGVsZXRpbmcgdGhlc2UgZXh0cmEgc3BhY2VzLicKLSAgICAgICAg
ICAgICAgICAnICBbd2hpdGVzcGFjZS9lbmRfb2ZfbGluZV0gWzRdJykKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJyB3ZWlyZCBvcGVuaW5nIHNwYWNlJywgJycpCi0gICAgICAgIGZpbmFs
bHk6Ci0gICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXJzID0gb2xk
X2ZpbHRlcnMKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fREVGQVVMVF9GSUxURVJfUlVMRVMgPSBk
ZWZhdWx0X2ZpbHRlcl9ydWxlcwotCi0gICAgZGVmIHRlc3RfdW5uYW1lZF9uYW1lc3BhY2VzX2lu
X2hlYWRlcnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNr
KAotICAgICAgICAgICAgJ2Zvby5oJywgJ25hbWVzcGFjZSB7JywKLSAgICAgICAgICAgICdEbyBu
b3QgdXNlIHVubmFtZWQgbmFtZXNwYWNlcyBpbiBoZWFkZXIgZmlsZXMuICBTZWUnCi0gICAgICAg
ICAgICAnIGh0dHA6Ly9nb29nbGUtc3R5bGVndWlkZS5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmsv
Y3BwZ3VpZGUueG1sI05hbWVzcGFjZXMnCi0gICAgICAgICAgICAnIGZvciBtb3JlIGluZm9ybWF0
aW9uLiAgW2J1aWxkL25hbWVzcGFjZXNdIFs0XScpCi0gICAgICAgICMgbmFtZXNwYWNlIHJlZ2lz
dHJhdGlvbiBtYWNyb3MgYXJlIE9LLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxl
c19jaGVjaygnZm9vLmgnLCAnbmFtZXNwYWNlIHsgIFxcJywgJycpCi0gICAgICAgICMgbmFtZWQg
bmFtZXNwYWNlcyBhcmUgT0suCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2No
ZWNrKCdmb28uaCcsICduYW1lc3BhY2UgZm9vIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5oJywgJ25hbWVzcGFjZSBmb29uYW1lc3BhY2Ugeycs
ICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcs
ICduYW1lc3BhY2UgeycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19j
aGVjaygnZm9vLmNwcCcsICduYW1lc3BhY2UgZm9vIHsnLCAnJykKLQotICAgIGRlZiB0ZXN0X2J1
aWxkX2NsYXNzKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCB0aGUgbGludGVyIGNhbiBwYXJz
ZSB0byB0aGUgZW5kIG9mIGNsYXNzIGRlZmluaXRpb25zLAotICAgICAgICAjIGFuZCB0aGF0IGl0
IHdpbGwgcmVwb3J0IHdoZW4gaXQgY2FuJ3QuCi0gICAgICAgICMgVXNlIG11bHRpLWxpbmUgbGlu
dGVyIGJlY2F1c2UgaXQgcGVyZm9ybXMgdGhlIENsYXNzU3RhdGUgY2hlY2suCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdjbGFzcyBGb28geycsCi0g
ICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgY29tcGxldGUgZGVjbGFyYXRpb24gb2YgY2xhc3Mg
Rm9vJwotICAgICAgICAgICAgJyAgW2J1aWxkL2NsYXNzXSBbNV0nKQotICAgICAgICAjIERvbid0
IHdhcm4gb24gZm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgdmFyaW91cyB0eXBlcy4KLSAgICAgICAg
c2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2NsYXNzIEZvbzsnLAot
ICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAg
ICAgICAgICAgICcnJ3N0cnVjdCBGb28qCi0gICAgICAgICAgICAgICAgIGZvbyA9IE5ld0Zvbygp
OycnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICAjIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVy
ZSB0aGUgbGludGVyIGdldHMgY29uZnVzZWQsIGV2ZW4gdGhvdWdoCi0gICAgICAgICMgdGhlIGNv
ZGUgZG9lc24ndCB2aW9sYXRlIHRoZSBzdHlsZSBndWlkZS4KLSAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vCi0gICAgICAgICAgICAj
aWZkZWYgREVSSVZFX0ZST01fR09PCi0gICAgICAgICAgICAgIDogcHVibGljIEdvbyB7Ci0gICAg
ICAgICAgICAjZWxzZQotICAgICAgICAgICAgICA6IHB1YmxpYyBIb28gewotICAgICAgICAgICAg
I2VuZGlmCi0gICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJ0ZhaWxlZCB0byBmaW5k
IGNvbXBsZXRlIGRlY2xhcmF0aW9uIG9mIGNsYXNzIEZvbycKLSAgICAgICAgICAgICcgIFtidWls
ZC9jbGFzc10gWzVdJykKLQotICAgIGRlZiB0ZXN0X2J1aWxkX2VuZF9jb21tZW50KHNlbGYpOgot
ICAgICAgICAjIFRoZSBjcm9zc3Rvb2wgY29tcGlsZXIgd2UgY3VycmVudGx5IHVzZSB3aWxsIGZh
aWwgdG8gY29tcGlsZSB0aGUKLSAgICAgICAgIyBjb2RlIGluIHRoaXMgdGVzdCwgc28gd2UgbWln
aHQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlIGxpbnQgY2hlY2suCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJyNlbmRpZiBOb3QgYSBjb21tZW50JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
VW5jb21tZW50ZWQgdGV4dCBhZnRlciAjZW5kaWYgaXMgbm9uLXN0YW5kYXJkLicKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAnICBVc2UgYSBjb21tZW50LicKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAnICBbYnVpbGQvZW5kaWZfY29tbWVudF0gWzVdJykKLQotICAgIGRlZiB0ZXN0X2J1aWxk
X2ZvcndhcmRfZGVjbChzZWxmKToKLSAgICAgICAgIyBUaGUgY3Jvc3N0b29sIGNvbXBpbGVyIHdl
IGN1cnJlbnRseSB1c2Ugd2lsbCBmYWlsIHRvIGNvbXBpbGUgdGhlCi0gICAgICAgICMgY29kZSBp
biB0aGlzIHRlc3QsIHNvIHdlIG1pZ2h0IGNvbnNpZGVyIHJlbW92aW5nIHRoZSBsaW50IGNoZWNr
LgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdjbGFzcyBGb286OkdvbzsnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICdJbm5lci1zdHlsZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhcmUgaW52
YWxpZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgUmVtb3ZlIHRoaXMgbGluZS4nCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgJyAgW2J1aWxkL2ZvcndhcmRfZGVjbF0gWzVdJykKLQot
ICAgIGRlZiB0ZXN0X2J1aWxkX2hlYWRlcl9ndWFyZChzZWxmKToKLSAgICAgICAgZmlsZV9wYXRo
ID0gJ215ZGlyL0Zvby5oJwotCi0gICAgICAgICMgV2UgY2FuJ3QgcmVseSBvbiBvdXIgaW50ZXJu
YWwgc3R1ZmYgdG8gZ2V0IGEgc2FuZSBwYXRoIG9uIHRoZSBvcGVuIHNvdXJjZQotICAgICAgICAj
IHNpZGUgb2YgdGhpbmdzLCBzbyBqdXN0IHBhcnNlIG91dCB0aGUgc3VnZ2VzdGVkIGhlYWRlciBn
dWFyZC4gVGhpcwotICAgICAgICAjIGRvZXNuJ3QgYWxsb3cgdXMgdG8gdGVzdCB0aGUgc3VnZ2Vz
dGVkIGhlYWRlciBndWFyZCwgYnV0IGl0IGRvZXMgbGV0IHVzCi0gICAgICAgICMgdGVzdCBhbGwg
dGhlIG90aGVyIGhlYWRlciB0ZXN0cy4KLSAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JD
b2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQotICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2Rh
dGEoZmlsZV9wYXRoLCAnaCcsIFtdLCBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIGV4cGVjdGVk
X2d1YXJkID0gJycKLSAgICAgICAgbWF0Y2hlciA9IHJlLmNvbXBpbGUoCi0gICAgICAgICAgICAn
Tm8gXCNpZm5kZWYgaGVhZGVyIGd1YXJkIGZvdW5kXCwgc3VnZ2VzdGVkIENQUCB2YXJpYWJsZSBp
c1w6IChbQS1aYS16XzAtOV0rKSAnKQotICAgICAgICBmb3IgZXJyb3IgaW4gZXJyb3JfY29sbGVj
dG9yLnJlc3VsdF9saXN0KCk6Ci0gICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2hlci5tYXRjaChl
cnJvcikKLSAgICAgICAgICAgIGlmIG1hdGNoZXM6Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWRf
Z3VhcmQgPSBtYXRjaGVzLmdyb3VwKDEpCi0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAg
ICAjIE1ha2Ugc3VyZSB3ZSBleHRyYWN0ZWQgc29tZXRoaW5nIGZvciBvdXIgaGVhZGVyIGd1YXJk
LgotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV4cGVjdGVkX2d1YXJkLCAnJykKLQotICAg
ICAgICAjIFdyb25nIGd1YXJkCi0gICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVj
dG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKGZp
bGVfcGF0aCwgJ2gnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycjaWZu
ZGVmIEZPT19IJywgJyNkZWZpbmUgRk9PX0gnXSwgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBlcnJvcl9jb2xs
ZWN0b3IucmVzdWx0X2xpc3QoKS5jb3VudCgKLSAgICAgICAgICAgICAgICAnI2lmbmRlZiBoZWFk
ZXIgZ3VhcmQgaGFzIHdyb25nIHN0eWxlLCBwbGVhc2UgdXNlOiAlcycKLSAgICAgICAgICAgICAg
ICAnICBbYnVpbGQvaGVhZGVyX2d1YXJkXSBbNV0nICUgZXhwZWN0ZWRfZ3VhcmQpLAotICAgICAg
ICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCkpCi0KLSAgICAgICAgIyBObyBkZWZp
bmUKLSAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRf
KQotICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoZmlsZV9wYXRoLCAnaCcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyNpZm5kZWYgJXMnICUgZXhwZWN0
ZWRfZ3VhcmRdLCBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAot
ICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgp
LmNvdW50KAotICAgICAgICAgICAgICAgICdObyAjaWZuZGVmIGhlYWRlciBndWFyZCBmb3VuZCwg
c3VnZ2VzdGVkIENQUCB2YXJpYWJsZSBpczogJXMnCi0gICAgICAgICAgICAgICAgJyAgW2J1aWxk
L2hlYWRlcl9ndWFyZF0gWzVdJyAlIGV4cGVjdGVkX2d1YXJkKSwKLSAgICAgICAgICAgIGVycm9y
X2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpKQotCi0gICAgICAgICMgTWlzbWF0Y2hlZCBkZWZpbmUK
LSAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQot
ICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoZmlsZV9wYXRoLCAnaCcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyNpZm5kZWYgJXMnICUgZXhwZWN0ZWRf
Z3VhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNkZWZpbmUgRk9P
X0gnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rv
cikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgICAxLAotICAgICAgICAg
ICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCkuY291bnQoCi0gICAgICAgICAgICAgICAg
J05vICNpZm5kZWYgaGVhZGVyIGd1YXJkIGZvdW5kLCBzdWdnZXN0ZWQgQ1BQIHZhcmlhYmxlIGlz
OiAlcycKLSAgICAgICAgICAgICAgICAnICBbYnVpbGQvaGVhZGVyX2d1YXJkXSBbNV0nICUgZXhw
ZWN0ZWRfZ3VhcmQpLAotICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCkp
Ci0KLSAgICAgICAgIyBObyBlbmRpZgotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNv
bGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0
YShmaWxlX3BhdGgsICdoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsn
I2lmbmRlZiAlcycgJSBleHBlY3RlZF9ndWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnI2RlZmluZSAlcycgJSBleHBlY3RlZF9ndWFyZF0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKAotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5y
ZXN1bHRfbGlzdCgpLmNvdW50KAotICAgICAgICAgICAgICAgICcjZW5kaWYgbGluZSBzaG91bGQg
YmUgIiNlbmRpZiAvLyAlcyInCi0gICAgICAgICAgICAgICAgJyAgW2J1aWxkL2hlYWRlcl9ndWFy
ZF0gWzVdJyAlIGV4cGVjdGVkX2d1YXJkKSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5y
ZXN1bHRfbGlzdCgpKQotCi0gICAgICAgICMgQ29tbWVudGxlc3MgZW5kaWYKLSAgICAgICAgZXJy
b3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQotICAgICAgICBjcHBf
c3R5bGUucHJvY2Vzc19maWxlX2RhdGEoZmlsZV9wYXRoLCAnaCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbJyNpZm5kZWYgJXMnICUgZXhwZWN0ZWRfZ3VhcmQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNkZWZpbmUgJXMnICUgZXhwZWN0ZWRf
Z3VhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNlbmRpZiddLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBlcnJv
cl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKS5jb3VudCgKLSAgICAgICAgICAgICAgICAnI2VuZGlm
IGxpbmUgc2hvdWxkIGJlICIjZW5kaWYgLy8gJXMiJwotICAgICAgICAgICAgICAgICcgIFtidWls
ZC9oZWFkZXJfZ3VhcmRdIFs1XScgJSBleHBlY3RlZF9ndWFyZCksCi0gICAgICAgICAgICBlcnJv
cl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKSkKLQotICAgICAgICAjIENvbW1lbnRsZXNzIGVuZGlm
IGZvciBvbGQtc3R5bGUgZ3VhcmQKLSAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xs
ZWN0b3Ioc2VsZi5hc3NlcnRfKQotICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEo
ZmlsZV9wYXRoLCAnaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyNp
Zm5kZWYgJXNfJyAlIGV4cGVjdGVkX2d1YXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcjZGVmaW5lICVzXycgJSBleHBlY3RlZF9ndWFyZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnI2VuZGlmJ10sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KAotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlz
dCgpLmNvdW50KAotICAgICAgICAgICAgICAgICcjZW5kaWYgbGluZSBzaG91bGQgYmUgIiNlbmRp
ZiAvLyAlcyInCi0gICAgICAgICAgICAgICAgJyAgW2J1aWxkL2hlYWRlcl9ndWFyZF0gWzVdJyAl
IGV4cGVjdGVkX2d1YXJkKSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlz
dCgpKQotCi0gICAgICAgICMgTm8gaGVhZGVyIGd1YXJkIGVycm9ycwotICAgICAgICBlcnJvcl9j
b2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAgIGNwcF9zdHls
ZS5wcm9jZXNzX2ZpbGVfZGF0YShmaWxlX3BhdGgsICdoJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsnI2lmbmRlZiAlcycgJSBleHBlY3RlZF9ndWFyZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2RlZmluZSAlcycgJSBleHBlY3RlZF9ndWFy
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAl
IGV4cGVjdGVkX2d1YXJkXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvbGxlY3RvcikKLSAgICAgICAgZm9yIGxpbmUgaW4gZXJyb3JfY29sbGVjdG9yLnJlc3Vs
dF9saXN0KCk6Ci0gICAgICAgICAgICBpZiBsaW5lLmZpbmQoJ2J1aWxkL2hlYWRlcl9ndWFyZCcp
ICE9IC0xOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBlcnJvcjogJXMn
ICUgbGluZSkKLQotICAgICAgICAjIENvbXBsZXRlbHkgaW5jb3JyZWN0IGhlYWRlciBndWFyZAot
ICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0g
ICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YShmaWxlX3BhdGgsICdoJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnI2lmbmRlZiBGT08nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjZGVmaW5lIEZPTycsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJyNlbmRpZiAgLy8gRk9PJ10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKAotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5y
ZXN1bHRfbGlzdCgpLmNvdW50KAotICAgICAgICAgICAgICAgICcjaWZuZGVmIGhlYWRlciBndWFy
ZCBoYXMgd3Jvbmcgc3R5bGUsIHBsZWFzZSB1c2U6ICVzJwotICAgICAgICAgICAgICAgICcgIFti
dWlsZC9oZWFkZXJfZ3VhcmRdIFs1XScgJSBleHBlY3RlZF9ndWFyZCksCi0gICAgICAgICAgICBl
cnJvcl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0
KCkuY291bnQoCi0gICAgICAgICAgICAgICAgJyNlbmRpZiBsaW5lIHNob3VsZCBiZSAiI2VuZGlm
IC8vICVzIicKLSAgICAgICAgICAgICAgICAnICBbYnVpbGQvaGVhZGVyX2d1YXJkXSBbNV0nICUg
ZXhwZWN0ZWRfZ3VhcmQpLAotICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0
KCkpCi0KLSAgICBkZWYgdGVzdF9idWlsZF9wcmludGZfZm9ybWF0KHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgcidwcmludGYoIlwlJWQiLCB2YWx1ZSk7JywK
LSAgICAgICAgICAgICclLCBbLCAoLCBhbmQgeyBhcmUgdW5kZWZpbmVkIGNoYXJhY3RlciBlc2Nh
cGVzLiAgVW5lc2NhcGUgdGhlbS4nCi0gICAgICAgICAgICAnICBbYnVpbGQvcHJpbnRmX2Zvcm1h
dF0gWzNdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgcidzbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiXFslZCIsIHZhbHVlKTsnLAotICAgICAgICAg
ICAgJyUsIFssICgsIGFuZCB7IGFyZSB1bmRlZmluZWQgY2hhcmFjdGVyIGVzY2FwZXMuICBVbmVz
Y2FwZSB0aGVtLicKLSAgICAgICAgICAgICcgIFtidWlsZC9wcmludGZfZm9ybWF0XSBbM10nKQot
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICByJ2ZwcmludGYoZmlsZSwg
IlwoJWQiLCB2YWx1ZSk7JywKLSAgICAgICAgICAgICclLCBbLCAoLCBhbmQgeyBhcmUgdW5kZWZp
bmVkIGNoYXJhY3RlciBlc2NhcGVzLiAgVW5lc2NhcGUgdGhlbS4nCi0gICAgICAgICAgICAnICBb
YnVpbGQvcHJpbnRmX2Zvcm1hdF0gWzNdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAot
ICAgICAgICAgICAgcid2c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIlxcXHslZCIs
IGFwKTsnLAotICAgICAgICAgICAgJyUsIFssICgsIGFuZCB7IGFyZSB1bmRlZmluZWQgY2hhcmFj
dGVyIGVzY2FwZXMuICBVbmVzY2FwZSB0aGVtLicKLSAgICAgICAgICAgICcgIFtidWlsZC9wcmlu
dGZfZm9ybWF0XSBbM10nKQotCi0gICAgICAgICMgRG9uJ3Qgd2FybiBpZiBkb3VibGUtc2xhc2gg
cHJlY2VkZXMgdGhlIHN5bWJvbAotICAgICAgICBzZWxmLmFzc2VydF9saW50KHIncHJpbnRmKCJc
XCUlJWQiLCB2YWx1ZSk7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLQotICAgIGRl
ZiB0ZXN0X3J1bnRpbWVfcHJpbnRmX2Zvcm1hdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgKLSAgICAgICAgICAgIHInZnByaW50ZihmaWxlLCAiJXEiLCB2YWx1ZSk7JywKLSAgICAg
ICAgICAgICclcSBpbiBmb3JtYXQgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiAgVXNlICVsbCBpbnN0
ZWFkLicKLSAgICAgICAgICAgICcgIFtydW50aW1lL3ByaW50Zl9mb3JtYXRdIFszXScpCi0KLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgIHInYXByaW50ZihmaWxlLCAiVGhl
IG51bWJlciBpcyAlMTJxIiwgdmFsdWUpOycsCi0gICAgICAgICAgICAnJXEgaW4gZm9ybWF0IHN0
cmluZ3MgaXMgZGVwcmVjYXRlZC4gIFVzZSAlbGwgaW5zdGVhZC4nCi0gICAgICAgICAgICAnICBb
cnVudGltZS9wcmludGZfZm9ybWF0XSBbM10nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
Ci0gICAgICAgICAgICByJ3ByaW50ZihmaWxlLCAiVGhlIG51bWJlciBpcyIgIiUtMTJxIiwgdmFs
dWUpOycsCi0gICAgICAgICAgICAnJXEgaW4gZm9ybWF0IHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4g
IFVzZSAlbGwgaW5zdGVhZC4nCi0gICAgICAgICAgICAnICBbcnVudGltZS9wcmludGZfZm9ybWF0
XSBbM10nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICByJ3ByaW50
ZihmaWxlLCAiVGhlIG51bWJlciBpcyIgIiUrMTJxIiwgdmFsdWUpOycsCi0gICAgICAgICAgICAn
JXEgaW4gZm9ybWF0IHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gIFVzZSAlbGwgaW5zdGVhZC4nCi0g
ICAgICAgICAgICAnICBbcnVudGltZS9wcmludGZfZm9ybWF0XSBbM10nKQotCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICByJ3ByaW50ZihmaWxlLCAiVGhlIG51bWJlciBp
cyIgIiUgMTJxIiwgdmFsdWUpOycsCi0gICAgICAgICAgICAnJXEgaW4gZm9ybWF0IHN0cmluZ3Mg
aXMgZGVwcmVjYXRlZC4gIFVzZSAlbGwgaW5zdGVhZC4nCi0gICAgICAgICAgICAnICBbcnVudGlt
ZS9wcmludGZfZm9ybWF0XSBbM10nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAg
ICAgICAgICByJ3NucHJpbnRmKGZpbGUsICJOZXZlciBtaXggJWQgYW5kICUxJGQgcGFybWFldGVy
cyEiLCB2YWx1ZSk7JywKLSAgICAgICAgICAgICclTiQgZm9ybWF0cyBhcmUgdW5jb252ZW50aW9u
YWwuICBUcnkgcmV3cml0aW5nIHRvIGF2b2lkIHRoZW0uJwotICAgICAgICAgICAgJyAgW3J1bnRp
bWUvcHJpbnRmX2Zvcm1hdF0gWzJdJykKLQotICAgIGRlZiBhc3NlcnRfbGludExvZ0NvZGVPbkVy
cm9yKHNlbGYsIGNvZGUsIGV4cGVjdGVkX21lc3NhZ2UpOgotICAgICAgICAjIFNwZWNpYWwgYXNz
ZXJ0X2xpbnQgd2hpY2ggbG9ncyB0aGUgaW5wdXQgY29kZSBvbiBlcnJvci4KLSAgICAgICAgcmVz
dWx0ID0gc2VsZi5wZXJmb3JtX3NpbmdsZV9saW5lX2xpbnQoY29kZSwgJ2Zvby5jcHAnKQotICAg
ICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfbWVzc2FnZToKLSAgICAgICAgICAgIHNlbGYuZmFp
bCgnRm9yIGNvZGU6ICIlcyJcbkdvdDogIiVzIlxuRXhwZWN0ZWQ6ICIlcyInCi0gICAgICAgICAg
ICAgICAgICAgICAgJSAoY29kZSwgcmVzdWx0LCBleHBlY3RlZF9tZXNzYWdlKSkKLQotICAgIGRl
ZiB0ZXN0X2J1aWxkX3N0b3JhZ2VfY2xhc3Moc2VsZik6Ci0gICAgICAgIHF1YWxpZmllcnMgPSBb
Tm9uZSwgJ2NvbnN0JywgJ3ZvbGF0aWxlJ10KLSAgICAgICAgc2lnbnMgPSBbTm9uZSwgJ3NpZ25l
ZCcsICd1bnNpZ25lZCddCi0gICAgICAgIHR5cGVzID0gWyd2b2lkJywgJ2NoYXInLCAnaW50Jywg
J2Zsb2F0JywgJ2RvdWJsZScsCi0gICAgICAgICAgICAgICAgICdzY2hhcicsICdpbnQ4JywgJ3Vp
bnQ4JywgJ2ludDE2JywgJ3VpbnQxNicsCi0gICAgICAgICAgICAgICAgICdpbnQzMicsICd1aW50
MzInLCAnaW50NjQnLCAndWludDY0J10KLSAgICAgICAgc3RvcmFnZV9jbGFzc2VzID0gWydhdXRv
JywgJ2V4dGVybicsICdyZWdpc3RlcicsICdzdGF0aWMnLCAndHlwZWRlZiddCi0KLSAgICAgICAg
YnVpbGRfc3RvcmFnZV9jbGFzc19lcnJvcl9tZXNzYWdlID0gKAotICAgICAgICAgICAgJ1N0b3Jh
Z2UgY2xhc3MgKHN0YXRpYywgZXh0ZXJuLCB0eXBlZGVmLCBldGMpIHNob3VsZCBiZSBmaXJzdC4n
Ci0gICAgICAgICAgICAnICBbYnVpbGQvc3RvcmFnZV9jbGFzc10gWzVdJykKLQotICAgICAgICAj
IFNvbWUgZXhwbGljaXQgY2FzZXMuIExlZ2FsIGluIEMrKywgZGVwcmVjYXRlZCBpbiBDOTkuCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2NvbnN0IGludCBzdGF0aWMgZm9vID0gNTsnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3N0b3JhZ2VfY2xhc3NfZXJyb3JfbWVzc2FnZSkK
LQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdjaGFyIHN0YXRpYyBmb287JywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBidWlsZF9zdG9yYWdlX2NsYXNzX2Vycm9yX21lc3NhZ2UpCi0KLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnZG91YmxlIGNvbnN0IHN0YXRpYyBmb28gPSAyLjA7JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9zdG9yYWdlX2NsYXNzX2Vycm9yX21lc3Nh
Z2UpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndWludDY0IHR5cGVkZWYgdW5zaWduZWRM
b25nTG9uZzsnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3N0b3JhZ2VfY2xhc3Nf
ZXJyb3JfbWVzc2FnZSkKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgcmVnaXN0ZXIg
Zm9vID0gMDsnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3N0b3JhZ2VfY2xhc3Nf
ZXJyb3JfbWVzc2FnZSkKLQotICAgICAgICAjIFNpbmNlIHRoZXJlIGFyZSBhIHZlcnkgbGFyZ2Ug
bnVtYmVyIG9mIHBvc3NpYmlsaXRpZXMsIHJhbmRvbWx5Ci0gICAgICAgICMgY29uc3RydWN0IGRl
Y2xhcmF0aW9ucy4KLSAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVjbGFyYXRpb24gaXMg
bG9nZ2VkIGlmIHRoZXJlJ3MgYW4gZXJyb3IuCi0gICAgICAgICMgU2VlZCBnZW5lcmF0b3Igd2l0
aCBhbiBpbnRlZ2VyIGZvciBhYnNvbHV0ZSByZXByb2R1Y2liaWxpdHkuCi0gICAgICAgIHJhbmRv
bS5zZWVkKDI1KQotICAgICAgICBmb3IgdW51c2VkX2kgaW4gcmFuZ2UoMTApOgotICAgICAgICAg
ICAgIyBCdWlsZCB1cCByYW5kb20gbGlzdCBvZiBub24tc3RvcmFnZS1jbGFzcyBkZWNsYXJhdGlv
biBzcGVjcy4KLSAgICAgICAgICAgIG90aGVyX2RlY2xfc3BlY3MgPSBbcmFuZG9tLmNob2ljZShx
dWFsaWZpZXJzKSwgcmFuZG9tLmNob2ljZShzaWducyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJhbmRvbS5jaG9pY2UodHlwZXMpXQotICAgICAgICAgICAgIyByZW1vdmUgTm9u
ZQotICAgICAgICAgICAgb3RoZXJfZGVjbF9zcGVjcyA9IGZpbHRlcihsYW1iZGEgeDogeCBpcyBu
b3QgTm9uZSwgb3RoZXJfZGVjbF9zcGVjcykKLQotICAgICAgICAgICAgIyBzaHVmZmxlCi0gICAg
ICAgICAgICByYW5kb20uc2h1ZmZsZShvdGhlcl9kZWNsX3NwZWNzKQotCi0gICAgICAgICAgICAj
IGluc2VydCBzdG9yYWdlIGNsYXNzIGFmdGVyIHRoZSBmaXJzdAotICAgICAgICAgICAgc3RvcmFn
ZV9jbGFzcyA9IHJhbmRvbS5jaG9pY2Uoc3RvcmFnZV9jbGFzc2VzKQotICAgICAgICAgICAgaW5z
ZXJ0aW9uX3BvaW50ID0gcmFuZG9tLnJhbmRpbnQoMSwgbGVuKG90aGVyX2RlY2xfc3BlY3MpKQot
ICAgICAgICAgICAgZGVjbF9zcGVjcyA9IChvdGhlcl9kZWNsX3NwZWNzWzA6aW5zZXJ0aW9uX3Bv
aW50XQotICAgICAgICAgICAgICAgICAgICAgICAgICArIFtzdG9yYWdlX2NsYXNzXQotICAgICAg
ICAgICAgICAgICAgICAgICAgICArIG90aGVyX2RlY2xfc3BlY3NbaW5zZXJ0aW9uX3BvaW50Ol0p
Ci0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnRMb2dDb2RlT25FcnJvcigKLSAgICAgICAg
ICAgICAgICAnICcuam9pbihkZWNsX3NwZWNzKSArICc7JywKLSAgICAgICAgICAgICAgICBidWls
ZF9zdG9yYWdlX2NsYXNzX2Vycm9yX21lc3NhZ2UpCi0KLSAgICAgICAgICAgICMgYnV0IG5vIGVy
cm9yIGlmIHN0b3JhZ2UgY2xhc3MgaXMgZmlyc3QKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnRMb2dDb2RlT25FcnJvcigKLSAgICAgICAgICAgICAgICBzdG9yYWdlX2NsYXNzICsgJyAnICsg
JyAnLmpvaW4ob3RoZXJfZGVjbF9zcGVjcyksCi0gICAgICAgICAgICAgICAgJycpCi0KLSAgICBk
ZWYgdGVzdF9sZWdhbF9jb3B5cmlnaHQoc2VsZik6Ci0gICAgICAgIGxlZ2FsX2NvcHlyaWdodF9t
ZXNzYWdlID0gKAotICAgICAgICAgICAgJ05vIGNvcHlyaWdodCBtZXNzYWdlIGZvdW5kLiAgJwot
ICAgICAgICAgICAgJ1lvdSBzaG91bGQgaGF2ZSBhIGxpbmU6ICJDb3B5cmlnaHQgW3llYXJdIDxD
b3B5cmlnaHQgT3duZXI+IicKLSAgICAgICAgICAgICcgIFtsZWdhbC9jb3B5cmlnaHRdIFs1XScp
Ci0KLSAgICAgICAgY29weXJpZ2h0X2xpbmUgPSAnLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4nCi0KLSAgICAgICAgZmlsZV9wYXRoID0gJ215ZGlyL2dv
b2dsZWNsaWVudC9mb28uY3BwJwotCi0gICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIGEgY29weXJp
Z2h0IG1lc3NhZ2UgaW4gdGhlIGZpcnN0IDEwIGxpbmVzCi0gICAgICAgIGVycm9yX2NvbGxlY3Rv
ciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nl
c3NfZmlsZV9kYXRhKGZpbGVfcGF0aCwgJ2NwcCcsIFtdLCBlcnJvcl9jb2xsZWN0b3IpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIGVycm9y
X2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpLmNvdW50KGxlZ2FsX2NvcHlyaWdodF9tZXNzYWdlKSkK
LQotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8p
Ci0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgKLSAgICAgICAgICAgIGZpbGVf
cGF0aCwgJ2NwcCcsCi0gICAgICAgICAgICBbJycgZm9yIHVudXNlZF9pIGluIHJhbmdlKDEwKV0g
KyBbY29weXJpZ2h0X2xpbmVdLAotICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBlcnJvcl9j
b2xsZWN0b3IucmVzdWx0X2xpc3QoKS5jb3VudChsZWdhbF9jb3B5cmlnaHRfbWVzc2FnZSkpCi0K
LSAgICAgICAgIyBUZXN0IHRoYXQgd2FybmluZyBpc24ndCBpc3N1ZWQgaWYgQ29weXJpZ2h0IGxp
bmUgYXBwZWFycyBlYXJseSBlbm91Z2guCi0gICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9y
Q29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZV9k
YXRhKGZpbGVfcGF0aCwgJ2NwcCcsIFtjb3B5cmlnaHRfbGluZV0sIGVycm9yX2NvbGxlY3RvcikK
LSAgICAgICAgZm9yIG1lc3NhZ2UgaW4gZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCk6Ci0g
ICAgICAgICAgICBpZiBtZXNzYWdlLmZpbmQoJ2xlZ2FsL2NvcHlyaWdodCcpICE9IC0xOgotICAg
ICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBlcnJvcjogJXMnICUgbWVzc2FnZSkK
LQotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8p
Ci0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgKLSAgICAgICAgICAgIGZpbGVf
cGF0aCwgJ2NwcCcsCi0gICAgICAgICAgICBbJycgZm9yIHVudXNlZF9pIGluIHJhbmdlKDkpXSAr
IFtjb3B5cmlnaHRfbGluZV0sCi0gICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAg
IGZvciBtZXNzYWdlIGluIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpOgotICAgICAgICAg
ICAgaWYgbWVzc2FnZS5maW5kKCdsZWdhbC9jb3B5cmlnaHQnKSAhPSAtMToKLSAgICAgICAgICAg
ICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZXJyb3I6ICVzJyAlIG1lc3NhZ2UpCi0KLSAgICBk
ZWYgdGVzdF9pbnZhbGlkX2luY3JlbWVudChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnKmNvdW50Kys7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnQ2hhbmdpbmcgcG9pbnRl
ciBpbnN0ZWFkIG9mIHZhbHVlIChvciB1bnVzZWQgdmFsdWUgb2YgJwotICAgICAgICAgICAgICAg
ICAgICAgICAgICdvcGVyYXRvciopLiAgW3J1bnRpbWUvaW52YWxpZF9pbmNyZW1lbnRdIFs1XScp
Ci0KLQotY2xhc3MgQ2xlYW5zZWRMaW5lc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRl
ZiB0ZXN0X2luaXQoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWydMaW5lIDEnLAotICAgICAgICAg
ICAgICAgICAnTGluZSAyJywKLSAgICAgICAgICAgICAgICAgJ0xpbmUgMyAvLyBDb21tZW50IHRl
c3QnLAotICAgICAgICAgICAgICAgICAnTGluZSA0ICJmb28iJ10KLQotICAgICAgICBjbGVhbl9s
aW5lcyA9IGNwcF9zdHlsZS5DbGVhbnNlZExpbmVzKGxpbmVzKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhsaW5lcywgY2xlYW5fbGluZXMucmF3X2xpbmVzKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyg0LCBjbGVhbl9saW5lcy5udW1fbGluZXMoKSkKLQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhbJ0xpbmUgMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnTGluZSAyJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICdMaW5lIDMgJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdMaW5lIDQgImZvbyInXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2xl
YW5fbGluZXMubGluZXMpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydMaW5lIDEnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xpbmUgMicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAnTGluZSAzICcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnTGluZSA0ICIi
J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuX2xpbmVzLmVsaWRlZCkKLQotICAg
IGRlZiB0ZXN0X2luaXRfZW1wdHkoc2VsZik6Ci0gICAgICAgIGNsZWFuX2xpbmVzID0gY3BwX3N0
eWxlLkNsZWFuc2VkTGluZXMoW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBjbGVh
bl9saW5lcy5yYXdfbGluZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGNsZWFuX2xp
bmVzLm51bV9saW5lcygpKQotCi0gICAgZGVmIHRlc3RfY29sbGFwc2Vfc3RyaW5ncyhzZWxmKToK
LSAgICAgICAgY29sbGFwc2UgPSBjcHBfc3R5bGUuQ2xlYW5zZWRMaW5lcy5jb2xsYXBzZV9zdHJp
bmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCciIicsIGNvbGxhcHNlKCciIicpKSAgICAg
ICAgICAgICAjICIiICAgICAoZW1wdHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCciIiIn
LCBjb2xsYXBzZSgnIiIiJykpICAgICAgICAgICAjICIiIiAgICAoYmFkKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygnIiInLCBjb2xsYXBzZSgnInh5eiInKSkgICAgICAgICAgIyAieHl6IiAg
KHN0cmluZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJyIiJywgY29sbGFwc2UoJyJcXFwi
IicpKSAgICAgICAgICMgIlwiIiAgIChzdHJpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KCciIicsIGNvbGxhcHNlKCciXCciJykpICAgICAgICAgICAjICInIiAgICAoc3RyaW5nKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscygnIlwiJywgY29sbGFwc2UoJyJcIicpKSAgICAgICAgICAg
IyAiXCIgICAgKGJhZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJyIiJywgY29sbGFwc2Uo
JyJcXFxcIicpKSAgICAgICAgICMgIlxcIiAgIChzdHJpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKCciJywgY29sbGFwc2UoJyJcXFxcXFwiJykpICAgICAgICAjICJcXFwiICAoYmFkKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnIiInLCBjb2xsYXBzZSgnIlxcXFxcXFxcIicpKSAg
ICAgIyAiXFxcXCIgKHN0cmluZykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXCdcJycs
IGNvbGxhcHNlKCdcJ1wnJykpICAgICAgICAgIyAnJyAgICAgKGVtcHR5KQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygnXCdcJycsIGNvbGxhcHNlKCdcJ2FcJycpKSAgICAgICAgIyAnYScgICAg
KGNoYXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdcJ1wnJywgY29sbGFwc2UoJ1wnXFxc
J1wnJykpICAgICAjICdcJycgICAoY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1wn
JywgY29sbGFwc2UoJ1wnXFxcJycpKSAgICAgICAgICMgJ1wnICAgIChiYWQpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKCcnLCBjb2xsYXBzZSgnXFwwMTInKSkgICAgICAgICAgICAjICdcMDEy
JyAoY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsIGNvbGxhcHNlKCdcXHhmRjAn
KSkgICAgICAgICAgICMgJ1x4ZkYwJyAoY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
JycsIGNvbGxhcHNlKCdcXG4nKSkgICAgICAgICAgICAgICMgJ1xuJyAoY2hhcikKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoJ1wjJywgY29sbGFwc2UoJ1xcIycpKSAgICAgICAgICAgICMgJ1wj
JyAoYmFkKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdTdHJpbmdSZXBsYWNlKGJvZHks
ICIiLCAiIik7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2UoJ1N0cmluZ1Jl
cGxhY2UoYm9keSwgIlxcXFwiLCAiXFxcXFxcXFwiKTsnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoJ1wnXCcgIiInLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZSgnXCci
XCcgImZvbyInKSkKLQotCi1jbGFzcyBPcmRlck9mSW5jbHVkZXNUZXN0KENwcFN0eWxlVGVzdEJh
c2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlID0g
Y3BwX3N0eWxlLl9JbmNsdWRlU3RhdGUoKQotCi0gICAgICAgICMgQ2hlYXQgb3MucGF0aC5hYnNw
YXRoIGNhbGxlZCBpbiBGaWxlSW5mbyBjbGFzcy4KLSAgICAgICAgc2VsZi5vc19wYXRoX2Fic3Bh
dGhfb3JpZyA9IG9zLnBhdGguYWJzcGF0aAotICAgICAgICBvcy5wYXRoLmFic3BhdGggPSBsYW1i
ZGEgdmFsdWU6IHZhbHVlCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIG9zLnBh
dGguYWJzcGF0aCA9IHNlbGYub3NfcGF0aF9hYnNwYXRoX29yaWcKLQotICAgIGRlZiB0ZXN0X3Ry
eV9kcm9wX2NvbW1vbl9zdWZmaXhlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
Zm9vL2ZvbycsIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9mb28taW5sLmgn
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vL2Jhci9mb28nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9iYXIvZm9v
X2lubC5oJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Zvby9mb28nLCBjcHBfc3R5bGUu
X2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCdmb28vZm9vLmNwcCcpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdmb28vZm9vX3VudXN1YWxpbnRlcm5hbCcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY3BwX3N0eWxlLl9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zvb191bnVzdWFsaW50ZXJu
YWwuaCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ190ZXN0LmNwcCcpKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICBj
cHBfc3R5bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNwcCcpKQotCi0KLWNsYXNzIE9y
ZGVyT2ZJbmNsdWRlc1Rlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYp
OgotICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUgPSBjcHBfc3R5bGUuX0luY2x1ZGVTdGF0ZSgp
Ci0KLSAgICAgICAgIyBDaGVhdCBvcy5wYXRoLmFic3BhdGggY2FsbGVkIGluIEZpbGVJbmZvIGNs
YXNzLgotICAgICAgICBzZWxmLm9zX3BhdGhfYWJzcGF0aF9vcmlnID0gb3MucGF0aC5hYnNwYXRo
Ci0gICAgICAgIG9zLnBhdGguYWJzcGF0aCA9IGxhbWJkYSB2YWx1ZTogdmFsdWUKLQotICAgIGRl
ZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgb3MucGF0aC5hYnNwYXRoID0gc2VsZi5vc19wYXRo
X2Fic3BhdGhfb3JpZwotCi0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19u
b19jb25maWcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlYWRlciBmaWxlIHNo
b3VsZCBub3QgY29udGFpbiBXZWJDb3JlIGNvbmZpZy5oLicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihjcHBfc3R5
bGUuX0NPTkZJR19IRUFERVIsIFRydWUpKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNs
dWRlX29yZGVyX19ub19zZWxmKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWFk
ZXIgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gaXRzZWxmLicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihjcHBfc3R5
bGUuX1BSSU1BUllfSEVBREVSLCBUcnVlKSkKLSAgICAgICAgIyBUZXN0IGFjdHVhbCBjb2RlIHRv
IG1ha2Ugc3VyZSB0aGF0IGhlYWRlciB0eXBlcyBhcmUgY29ycmVjdGx5IGFzc2lnbmVkLgotICAg
ICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnRm9vLmgnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgIkZvby5oIlxuJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hlYWRlciBmaWxlIHNob3Vs
ZCBub3QgY29udGFpbiBpdHNlbGYuIFNob3VsZCBiZTogYWxwaGFiZXRpY2FsbHkgc29ydGVkLicK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW2J1aWxkL2luY2x1
ZGVfb3JkZXJdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNr
KCdGb29CYXIuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiRm9vLmgiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnJykKLQotICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fbGlrZWx5
X3RoZW5fY29uZmlnKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBoZWFk
ZXIgdGhpcyBmaWxlIGltcGxlbWVudHMgYmVmb3JlIFdlYkNvcmUgY29uZmlnLmguJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRl
X29yZGVyKGNwcF9zdHlsZS5fUFJJTUFSWV9IRUFERVIsIEZhbHNlKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnRm91bmQgV2ViQ29yZSBjb25maWcuaCBhZnRlciBhIGhlYWRlciB0aGlzIGZp
bGUgaW1wbGVtZW50cy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9z
dGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwX3N0eWxlLl9DT05GSUdfSEVBREVSLCBG
YWxzZSkpCi0KLSAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX290aGVyX3Ro
ZW5fY29uZmlnKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBvdGhlciBo
ZWFkZXIgYmVmb3JlIFdlYkNvcmUgY29uZmlnLmguJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5f
T1RIRVJfSEVBREVSLCBGYWxzZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIFdl
YkNvcmUgY29uZmlnLmggYWZ0ZXIgb3RoZXIgaGVhZGVyLicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihjcHBfc3R5
bGUuX0NPTkZJR19IRUFERVIsIEZhbHNlKSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5j
bHVkZV9vcmRlcl9fY29uZmlnX3RoZW5fb3RoZXJfdGhlbl9saWtlbHkoc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1
ZGVfb3JkZXIoY3BwX3N0eWxlLl9DT05GSUdfSEVBREVSLCBGYWxzZSkpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ0ZvdW5kIG90aGVyIGhlYWRlciBiZWZvcmUgYSBoZWFkZXIgdGhpcyBmaWxl
IGltcGxlbWVudHMuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3Rh
dGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5fT1RIRVJfSEVBREVSLCBGYWxz
ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIGhlYWRlciB0aGlzIGZpbGUgaW1w
bGVtZW50cyBhZnRlciBvdGhlciBoZWFkZXIuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5fUFJJ
TUFSWV9IRUFERVIsIEZhbHNlKSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrX2FscGhhYmV0aWNhbF9p
bmNsdWRlX29yZGVyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19j
aGVjaygnZm9vLmgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgImEuaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJjLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcjaW5jbHVkZSAiYi5oIlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVk
ZV9vcmRlcl0gWzRdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVj
aygnZm9vLmgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lu
Y2x1ZGUgImEuaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyNpbmNsdWRlICJiLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiYy5oIlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJycpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2so
J2Zvby5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlIDxhc3NlcnQuaD5cbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJiYXIuaCJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBwcm9ibGVtLiAgW2J1aWxkL2luY2x1ZGVf
b3JkZXJdIFs0XScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2so
J2Zvby5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJiYXIuaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyNpbmNsdWRlIDxhc3NlcnQuaD5cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfbGluZV9icmVha19hZnRlcl9vd25f
aGVhZGVyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygn
Zm9vLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5j
bHVkZSAiY29uZmlnLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiZm9vLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnWW91IHNob3VsZCBhZGQgYSBibGFuayBsaW5lIGFmdGVyIGltcGxl
bWVudGF0aW9uIGZpbGVcJ3Mgb3duIGhlYWRlci4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0n
KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25m
aWcuaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJmb28uaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J1xuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUg
ImJhci5oIlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycp
Ci0KLSAgICBkZWYgdGVzdF9jaGVja19wcmVwcm9jZXNzb3JfaW5faW5jbHVkZV9zZWN0aW9uKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29u
ZmlnLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5j
bHVkZSAiZm9vLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpZmRlZiBC
QVpcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRl
ICJiYXouaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNl
bHNlXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVk
ZSAiZm9vYmFyLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcjZW5kaWYiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiYmFyLmgiXG4nLCAjIE5vIGZsYWcgYmVjYXVzZSBwcmV2aW91cyBpcyBpbiBwcmVw
cm9jZXNzb3Igc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnJykKLQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNw
cCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAi
Y29uZmlnLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiZm9vLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpZmRl
ZiBCQVpcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJiYXouaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyNlbmRpZiJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJiYXIuaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJhLmgiXG4nLCAjIFNob3VsZCBzdGlsbCBmbGFnIHRoaXMuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBw
cm9ibGVtLiAgW2J1aWxkL2luY2x1ZGVfb3JkZXJdIFs0XScpCi0KLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImZvby5oIlxuJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcjaWZkZWYgQkFaXG4nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmF6LmgiXG4nCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nICNTaG91
bGQgc3RpbGwgZmxhZyB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjZW5kaWYiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnQWxwaGFiZXRpY2FsIHNvcnRpbmcgcHJvYmxlbS4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBb
NF0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3Bw
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJj
b25maWcuaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJmb28uaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ1xuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lmZGVm
IEJBWlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgImJhei5oIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2VuZGlmIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lm
ZGVmIEZPT0JBUlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgImZvb2Jhci5oIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnI2VuZGlmIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnI2luY2x1ZGUgImJhci5oIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnI2luY2x1ZGUgImEuaCJcbicsICMgU2hvdWxkIHN0aWxsIGZsYWcgdGhpcy4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBz
b3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKLQotICAgICAgICAj
IENoZWNrIHRoYXQgYWZ0ZXIgYW4gYWxyZWFkeSBpbmNsdWRlZCBlcnJvciwgdGhlIHNvcnRpbmcg
cnVsZXMgc3RpbGwgd29yay4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hl
Y2soJ2Zvby5jcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgImNvbmZpZy5oIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnI2luY2x1ZGUgImZvby5oIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiZm9vLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcjaW5jbHVkZSAiZy5oIlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJyJmb28uaCIgYWxyZWFkeSBpbmNsdWRlZCBhdCBmb28uY3BwOjEgIFti
dWlsZC9pbmNsdWRlXSBbNF0nKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfd3RmX2luY2x1ZGVzKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29u
ZmlnLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5j
bHVkZSAiZm9vLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdm
b28uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJjb25maWcuaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJmb28uaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ1xuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgInd0Zi9Bc3NlcnRpb25zLmgiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnd3RmIGluY2x1ZGVzIHNob3VsZCBiZSA8d3RmL2ZpbGUuaD4gaW5z
dGVhZCBvZiAid3RmL2ZpbGUuaCIuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnICBbYnVpbGQvaW5jbHVkZV0gWzRdJykKLQotICAgIGRlZiB0ZXN0X2NsYXNzaWZ5
X2luY2x1ZGUoc2VsZik6Ci0gICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUgPSBjcHBfc3R5bGUuX2Ns
YXNzaWZ5X2luY2x1ZGUKLSAgICAgICAgaW5jbHVkZV9zdGF0ZSA9IGNwcF9zdHlsZS5fSW5jbHVk
ZVN0YXRlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX0NPTkZJR19IRUFE
RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9vL2Zvby5j
cHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZy5o
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBpbmNs
dWRlX3N0YXRlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX1BSSU1BUllf
SEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby9p
bnRlcm5hbC9mb28uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdmb28vcHVibGljL2Zvby5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZhbHNlLCBpbmNsdWRlX3N0YXRlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjcHBfc3R5bGUuX1BSSU1BUllfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzaWZ5X2luY2x1ZGUoJ2Zvby9pbnRlcm5hbC9mb28uY3BwJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vb3RoZXIvcHVibGljL2Zvby5oJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBpbmNsdWRlX3N0YXRl
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX09USEVSX0hFQURFUiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKCdmb28vaW50ZXJuYWwvZm9v
LmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vL290
aGVyL3B1YmxpYy9mb29wLmgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRmFsc2UsIGluY2x1ZGVfc3RhdGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNw
cF9zdHlsZS5fT1RIRVJfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5
X2luY2x1ZGUoJ2Zvby9mb28uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdzdHJpbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJ1ZSwgaW5jbHVkZV9zdGF0ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3Bw
X3N0eWxlLl9QUklNQVJZX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lm
eV9pbmNsdWRlKCdmb29DdXN0b20uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdmb28uaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGYWxzZSwgaW5jbHVkZV9zdGF0ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Y3BwX3N0eWxlLl9QUklNQVJZX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
c2lmeV9pbmNsdWRlKCdQcmVmaXhGb29DdXN0b20uY3BwJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdGb28uaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGYWxzZSwgaW5jbHVkZV9zdGF0ZSkpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY3BwX3N0eWxlLl9NT0NfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby5jcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2Zvby5tb2MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmFsc2UsIGluY2x1ZGVfc3RhdGUpKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGNwcF9zdHlsZS5fTU9DX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
c2lmeV9pbmNsdWRlKCdmb28uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdtb2NfZm9vLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGYWxzZSwgaW5jbHVkZV9zdGF0ZSkpCi0gICAgICAgICMgVHJpY2t5IGV4YW1w
bGUgd2hlcmUgYm90aCBpbmNsdWRlcyBtaWdodCBiZSBjbGFzc2lmaWVkIGFzIHByaW1hcnkuCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdTY3JvbGxiYXJUaGVtZVdp
bmNlLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5j
bHVkZSAiY29uZmlnLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVXaW5jZS5oIlxuJwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiXG4nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFu
Z3VhZ2VfcnVsZXNfY2hlY2soJ1Njcm9sbGJhclRoZW1lV2luY2UuY3BwJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJTY3JvbGxi
YXIuaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lV2luY2UuaCJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdGb3VuZCBoZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMgYWZ0ZXIgYSBoZWFkZXIg
dGhpcyBmaWxlIGltcGxlbWVudHMuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnIFNob3VsZCBiZTogY29uZmlnLmgsIHByaW1hcnkgaGVhZGVyLCBibGFuayBsaW5l
LCBhbmQgdGhlbiBhbHBoYWJldGljYWxseSBzb3J0ZWQuJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKLQotICAg
IGRlZiB0ZXN0X3RyeV9kcm9wX2NvbW1vbl9zdWZmaXhlcyhzZWxmKToKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnZm9vL2ZvbycsIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zv
by9mb28taW5sLmgnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vL2Jhci9mb28nLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMo
J2Zvby9iYXIvZm9vX2lubC5oJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Zvby9mb28n
LCBjcHBfc3R5bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCdmb28vZm9vLmNwcCcpKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdmb28vZm9vX3VudXN1YWxpbnRlcm5hbCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY3BwX3N0eWxlLl9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zvb191
bnVzdWFsaW50ZXJuYWwuaCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ190ZXN0
LmNwcCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBjcHBfc3R5bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNwcCcpKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjcHBfc3R5bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNwcCcpKQotCi1jbGFzcyBD
aGVja0ZvckZ1bmN0aW9uTGVuZ3Roc1Rlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6Ci0gICAgZGVmIHNl
dFVwKHNlbGYpOgotICAgICAgICAjIFJlZHVjaW5nIHRoZXNlIHRocmVzaG9sZHMgZm9yIHRoZSB0
ZXN0cyBzcGVlZHMgdXAgdGVzdHMgc2lnbmlmaWNhbnRseS4KLSAgICAgICAgc2VsZi5vbGRfbm9y
bWFsX3RyaWdnZXIgPSBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUuX05PUk1BTF9UUklHR0VSCi0g
ICAgICAgIHNlbGYub2xkX3Rlc3RfdHJpZ2dlciA9IGNwcF9zdHlsZS5fRnVuY3Rpb25TdGF0ZS5f
VEVTVF9UUklHR0VSCi0KLSAgICAgICAgY3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlLl9OT1JNQUxf
VFJJR0dFUiA9IDEwCi0gICAgICAgIGNwcF9zdHlsZS5fRnVuY3Rpb25TdGF0ZS5fVEVTVF9UUklH
R0VSID0gMjUKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgY3BwX3N0eWxlLl9G
dW5jdGlvblN0YXRlLl9OT1JNQUxfVFJJR0dFUiA9IHNlbGYub2xkX25vcm1hbF90cmlnZ2VyCi0g
ICAgICAgIGNwcF9zdHlsZS5fRnVuY3Rpb25TdGF0ZS5fVEVTVF9UUklHR0VSID0gc2VsZi5vbGRf
dGVzdF90cmlnZ2VyCi0KLSAgICBkZWYgYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soc2Vs
ZiwgY29kZSwgZXhwZWN0ZWRfbWVzc2FnZSk6Ci0gICAgICAgICIiIkNoZWNrIHdhcm5pbmdzIGZv
ciBsb25nIGZ1bmN0aW9uIGJvZGllcyBhcmUgYXMgZXhwZWN0ZWQuCi0KLSAgICAgICAgQXJnczoK
LSAgICAgICAgICBjb2RlOiBDKysgc291cmNlIGNvZGUgZXhwZWN0ZWQgdG8gZ2VuZXJhdGUgYSB3
YXJuaW5nIG1lc3NhZ2UuCi0gICAgICAgICAgZXhwZWN0ZWRfbWVzc2FnZTogTWVzc2FnZSBleHBl
Y3RlZCB0byBiZSBnZW5lcmF0ZWQgYnkgdGhlIEMrKyBjb2RlLgotICAgICAgICAiIiIKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soY29kZSkpCi0KLSAg
ICBkZWYgdHJpZ2dlcl9saW5lcyhzZWxmLCBlcnJvcl9sZXZlbCk6Ci0gICAgICAgICIiIlJldHVy
biBudW1iZXIgb2YgbGluZXMgbmVlZGVkIHRvIHRyaWdnZXIgYSBmdW5jdGlvbiBsZW5ndGggd2Fy
bmluZy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIGVycm9yX2xldmVsOiAtLXYgc2V0dGlu
ZyBmb3IgY3BwX3N0eWxlLgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgTnVtYmVyIG9m
IGxpbmVzIG5lZWRlZCB0byB0cmlnZ2VyIGEgZnVuY3Rpb24gbGVuZ3RoIHdhcm5pbmcuCi0gICAg
ICAgICIiIgotICAgICAgICByZXR1cm4gY3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlLl9OT1JNQUxf
VFJJR0dFUiAqIDIgKiogZXJyb3JfbGV2ZWwKLQotICAgIGRlZiB0cmlnZ2VyX3Rlc3RfbGluZXMo
c2VsZiwgZXJyb3JfbGV2ZWwpOgotICAgICAgICAiIiJSZXR1cm4gbnVtYmVyIG9mIGxpbmVzIG5l
ZWRlZCB0byB0cmlnZ2VyIGEgdGVzdCBmdW5jdGlvbiBsZW5ndGggd2FybmluZy4KLQotICAgICAg
ICBBcmdzOgotICAgICAgICAgIGVycm9yX2xldmVsOiAtLXYgc2V0dGluZyBmb3IgY3BwX3N0eWxl
LgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgTnVtYmVyIG9mIGxpbmVzIG5lZWRlZCB0
byB0cmlnZ2VyIGEgdGVzdCBmdW5jdGlvbiBsZW5ndGggd2FybmluZy4KLSAgICAgICAgIiIiCi0g
ICAgICAgIHJldHVybiBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUuX1RFU1RfVFJJR0dFUiAqIDIg
KiogZXJyb3JfbGV2ZWwKLQotICAgIGRlZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Rl
ZmluaXRpb24oc2VsZiwgbGluZXMsIGVycm9yX2xldmVsKToKLSAgICAgICAgIiIiR2VuZXJhdGUg
bG9uZyBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBjaGVjayB3YXJuaW5ncyBhcmUgYXMgZXhwZWN0
ZWQuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBsaW5lczogTnVtYmVyIG9mIGxpbmVzIHRv
IGdlbmVyYXRlLgotICAgICAgICAgIGVycm9yX2xldmVsOiAgLS12IHNldHRpbmcgZm9yIGNwcF9z
dHlsZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJf
bGluZXMoY3BwX3N0eWxlLl92ZXJib3NlX2xldmVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1
bmN0aW9uX2xlbmd0aHNfY2hlY2soCi0gICAgICAgICAgICAndm9pZCB0ZXN0KGludCB4KScgKyBz
ZWxmLmZ1bmN0aW9uX2JvZHkobGluZXMpLAotICAgICAgICAgICAgKCdTbWFsbCBhbmQgZm9jdXNl
ZCBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZDogJwotICAgICAgICAgICAgICd0ZXN0KCkgaGFzICVk
IG5vbi1jb21tZW50IGxpbmVzICcKLSAgICAgICAgICAgICAnKGVycm9yIHRyaWdnZXJlZCBieSBl
eGNlZWRpbmcgJWQgbGluZXMpLicKLSAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvZm5fc2l6
ZV0gWyVkXScKLSAgICAgICAgICAgICAlIChsaW5lcywgdHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2
ZWwpKSkKLQotICAgIGRlZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25f
b2soc2VsZiwgbGluZXMpOgotICAgICAgICAiIiJHZW5lcmF0ZSBzaG9ydGVyIGZ1bmN0aW9uIGRl
ZmluaXRpb24gYW5kIGNoZWNrIG5vIHdhcm5pbmcgaXMgcHJvZHVjZWQuCi0KLSAgICAgICAgQXJn
czoKLSAgICAgICAgICBsaW5lczogTnVtYmVyIG9mIGxpbmVzIHRvIGdlbmVyYXRlLgotICAgICAg
ICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKLSAgICAg
ICAgICAgICd2b2lkIHRlc3QoaW50IHgpJyArIHNlbGYuZnVuY3Rpb25fYm9keShsaW5lcyksCi0g
ICAgICAgICAgICAnJykKLQotICAgIGRlZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2F0
X2Vycm9yX2xldmVsKHNlbGYsIGVycm9yX2xldmVsKToKLSAgICAgICAgIiIiR2VuZXJhdGUgYW5k
IGNoZWNrIGZ1bmN0aW9uIGF0IHRoZSB0cmlnZ2VyIGxldmVsIGZvciAtLXYgc2V0dGluZy4KLQot
ICAgICAgICBBcmdzOgotICAgICAgICAgIGVycm9yX2xldmVsOiAtLXYgc2V0dGluZyBmb3IgY3Bw
X3N0eWxlLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Ro
X2NoZWNrX2RlZmluaXRpb24oc2VsZi50cmlnZ2VyX2xpbmVzKGVycm9yX2xldmVsKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbGV2
ZWwpCi0KLSAgICBkZWYgYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9s
ZXZlbChzZWxmLCBlcnJvcl9sZXZlbCk6Ci0gICAgICAgICIiIkdlbmVyYXRlIGFuZCBjaGVjayBm
dW5jdGlvbiBqdXN0IGJlbG93IHRoZSB0cmlnZ2VyIGxldmVsIGZvciAtLXYgc2V0dGluZy4KLQot
ICAgICAgICBBcmdzOgotICAgICAgICAgIGVycm9yX2xldmVsOiAtLXYgc2V0dGluZyBmb3IgY3Bw
X3N0eWxlLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Ro
X2NoZWNrX2RlZmluaXRpb24oc2VsZi50cmlnZ2VyX2xpbmVzKGVycm9yX2xldmVsKSAtIDEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2xldmVsIC0gMSkKLQotICAgIGRlZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Fib3Zl
X2Vycm9yX2xldmVsKHNlbGYsIGVycm9yX2xldmVsKToKLSAgICAgICAgIiIiR2VuZXJhdGUgYW5k
IGNoZWNrIGZ1bmN0aW9uIGp1c3QgYWJvdmUgdGhlIHRyaWdnZXIgbGV2ZWwgZm9yIC0tdiBzZXR0
aW5nLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZXJyb3JfbGV2ZWw6IC0tdiBzZXR0aW5n
IGZvciBjcHBfc3R5bGUuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlv
bl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbihzZWxmLnRyaWdnZXJfbGluZXMoZXJyb3JfbGV2ZWwp
ICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfbGV2ZWwpCi0KLSAgICBkZWYgZnVuY3Rpb25fYm9keShzZWxmLCBudW1iZXJfb2Zf
bGluZXMpOgotICAgICAgICByZXR1cm4gJyB7XG4nICsgJyAgICB0aGlzX2lzX2p1c3RfYV90ZXN0
KCk7XG4nICogbnVtYmVyX29mX2xpbmVzICsgJ30nCi0KLSAgICBkZWYgZnVuY3Rpb25fYm9keV93
aXRoX2JsYW5rX2xpbmVzKHNlbGYsIG51bWJlcl9vZl9saW5lcyk6Ci0gICAgICAgIHJldHVybiAn
IHtcbicgKyAnICAgIHRoaXNfaXNfanVzdF9hX3Rlc3QoKTtcblxuJyAqIG51bWJlcl9vZl9saW5l
cyArICd9JwotCi0gICAgZGVmIGZ1bmN0aW9uX2JvZHlfd2l0aF9ub19saW50cyhzZWxmLCBudW1i
ZXJfb2ZfbGluZXMpOgotICAgICAgICByZXR1cm4gJyB7XG4nICsgJyAgICB0aGlzX2lzX2p1c3Rf
YV90ZXN0KCk7ICAvLyBOT0xJTlRcbicgKiBudW1iZXJfb2ZfbGluZXMgKyAnfScKLQotICAgICMg
VGVzdCBsaW5lIGxlbmd0aCBjaGVja3MuCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2No
ZWNrX2RlY2xhcmF0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5n
dGhzX2NoZWNrKAotICAgICAgICAgICAgJ3ZvaWQgdGVzdCgpOycsICAjIE5vdCBhIGZ1bmN0aW9u
IGRlZmluaXRpb24KLSAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVu
Z3RoX2NoZWNrX2RlY2xhcmF0aW9uX3dpdGhfYmxvY2tfZm9sbG93aW5nKHNlbGYpOgotICAgICAg
ICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAotICAgICAgICAgICAgKCd2b2lk
IHRlc3QoKTtcbicKLSAgICAgICAgICAgICArIHNlbGYuZnVuY3Rpb25fYm9keSg2NikpLCAgIyBO
b3QgYSBmdW5jdGlvbiBkZWZpbml0aW9uCi0gICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0
X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19jbGFzc19kZWZpbml0aW9uKHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKCAgIyBOb3QgYSBmdW5jdGlvbiBkZWZp
bml0aW9uCi0gICAgICAgICAgICAnY2xhc3MgVGVzdCcgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoNjYp
ICsgJzsnLAotICAgICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhf
Y2hlY2tfdHJpdmlhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Ro
c19jaGVjaygKLSAgICAgICAgICAgICd2b2lkIHRlc3QoKSB7fScsICAjIE5vdCBjb3VudGVkCi0g
ICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19lbXB0
eShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKLSAg
ICAgICAgICAgICd2b2lkIHRlc3QoKSB7XG59JywKLSAgICAgICAgICAgICcnKQotCi0gICAgZGVm
IHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYmVsb3dfc2V2ZXJpdHkwKHNl
bGYpOgotICAgICAgICBvbGRfdmVyYm9zaXR5ID0gY3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9sZXZl
bCgwKQotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlv
bl9vayhzZWxmLnRyaWdnZXJfbGluZXMoMCkgLSAxKQotICAgICAgICBjcHBfc3R5bGUuX3NldF92
ZXJib3NlX2xldmVsKG9sZF92ZXJib3NpdHkpCi0KLSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5n
dGhfY2hlY2tfZGVmaW5pdGlvbl9hdF9zZXZlcml0eTAoc2VsZik6Ci0gICAgICAgIG9sZF92ZXJi
b3NpdHkgPSBjcHBfc3R5bGUuX3NldF92ZXJib3NlX2xldmVsKDApCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX29rKHNlbGYudHJpZ2dlcl9saW5l
cygwKSkKLSAgICAgICAgY3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9sZXZlbChvbGRfdmVyYm9zaXR5
KQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYWJvdmVf
c2V2ZXJpdHkwKHNlbGYpOgotICAgICAgICBvbGRfdmVyYm9zaXR5ID0gY3BwX3N0eWxlLl9zZXRf
dmVyYm9zZV9sZXZlbCgwKQotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hl
Y2tfYWJvdmVfZXJyb3JfbGV2ZWwoMCkKLSAgICAgICAgY3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9s
ZXZlbChvbGRfdmVyYm9zaXR5KQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNr
X2RlZmluaXRpb25fYmVsb3dfc2V2ZXJpdHkxdjAoc2VsZik6Ci0gICAgICAgIG9sZF92ZXJib3Np
dHkgPSBjcHBfc3R5bGUuX3NldF92ZXJib3NlX2xldmVsKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9sZXZlbCgxKQotICAgICAgICBjcHBf
c3R5bGUuX3NldF92ZXJib3NlX2xldmVsKG9sZF92ZXJib3NpdHkpCi0KLSAgICBkZWYgdGVzdF9m
dW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9hdF9zZXZlcml0eTF2MChzZWxmKToKLSAg
ICAgICAgb2xkX3ZlcmJvc2l0eSA9IGNwcF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwoMCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2F0X2Vycm9yX2xldmVsKDEp
Ci0gICAgICAgIGNwcF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwob2xkX3ZlcmJvc2l0eSkKLQot
ICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX2JlbG93X3NldmVy
aXR5MShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Rl
ZmluaXRpb25fb2soc2VsZi50cmlnZ2VyX2xpbmVzKDEpIC0gMSkKLQotICAgIGRlZiB0ZXN0X2Z1
bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX2F0X3NldmVyaXR5MShzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fb2soc2VsZi50
cmlnZ2VyX2xpbmVzKDEpKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Rl
ZmluaXRpb25fYWJvdmVfc2V2ZXJpdHkxKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5j
dGlvbl9sZW5ndGhfY2hlY2tfYWJvdmVfZXJyb3JfbGV2ZWwoMSkKLQotICAgIGRlZiB0ZXN0X2Z1
bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9wbHVzX2JsYW5rcyhzZWxm
KToKLSAgICAgICAgZXJyb3JfbGV2ZWwgPSAxCi0gICAgICAgIGVycm9yX2xpbmVzID0gc2VsZi50
cmlnZ2VyX2xpbmVzKGVycm9yX2xldmVsKSArIDEKLSAgICAgICAgdHJpZ2dlcl9sZXZlbCA9IHNl
bGYudHJpZ2dlcl9saW5lcyhjcHBfc3R5bGUuX3ZlcmJvc2VfbGV2ZWwoKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKLSAgICAgICAgICAgICd2b2lkIHRlc3Rf
YmxhbmtzKGludCB4KScgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoZXJyb3JfbGluZXMpLAotICAgICAg
ICAgICAgKCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZDogJwotICAg
ICAgICAgICAgICd0ZXN0X2JsYW5rcygpIGhhcyAlZCBub24tY29tbWVudCBsaW5lcyAnCi0gICAg
ICAgICAgICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nCi0gICAg
ICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVdIFslZF0nKQotICAgICAgICAgICAgJSAo
ZXJyb3JfbGluZXMsIHRyaWdnZXJfbGV2ZWwsIGVycm9yX2xldmVsKSkKLQotICAgIGRlZiB0ZXN0
X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19jb21wbGV4X2RlZmluaXRpb25fc2V2ZXJpdHkxKHNlbGYp
OgotICAgICAgICBlcnJvcl9sZXZlbCA9IDEKLSAgICAgICAgZXJyb3JfbGluZXMgPSBzZWxmLnRy
aWdnZXJfbGluZXMoZXJyb3JfbGV2ZWwpICsgMQotICAgICAgICB0cmlnZ2VyX2xldmVsID0gc2Vs
Zi50cmlnZ2VyX2xpbmVzKGNwcF9zdHlsZS5fdmVyYm9zZV9sZXZlbCgpKQotICAgICAgICBzZWxm
LmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAotICAgICAgICAgICAgKCdteV9uYW1lc3Bh
Y2U6Om15X290aGVyX25hbWVzcGFjZTo6TXlWZXJ5TG9uZ1R5cGVOYW1lKlxuJwotICAgICAgICAg
ICAgICdteV9uYW1lc3BhY2U6Om15X290aGVyX25hbWVzcGFjZTo6TXlGdW5jdGlvbihpbnQgYXJn
MSwgY2hhciogYXJnMiknCi0gICAgICAgICAgICAgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoZXJyb3Jf
bGluZXMpKSwKLSAgICAgICAgICAgICgnU21hbGwgYW5kIGZvY3VzZWQgZnVuY3Rpb25zIGFyZSBw
cmVmZXJyZWQ6ICcKLSAgICAgICAgICAgICAnbXlfbmFtZXNwYWNlOjpteV9vdGhlcl9uYW1lc3Bh
Y2U6Ok15RnVuY3Rpb24oKScKLSAgICAgICAgICAgICAnIGhhcyAlZCBub24tY29tbWVudCBsaW5l
cyAnCi0gICAgICAgICAgICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVkaW5nICVkIGxpbmVz
KS4nCi0gICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVdIFslZF0nKQotICAgICAg
ICAgICAgJSAoZXJyb3JfbGluZXMsIHRyaWdnZXJfbGV2ZWwsIGVycm9yX2xldmVsKSkKLQotICAg
IGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3Jf
dGVzdChzZWxmKToKLSAgICAgICAgZXJyb3JfbGV2ZWwgPSAxCi0gICAgICAgIGVycm9yX2xpbmVz
ID0gc2VsZi50cmlnZ2VyX3Rlc3RfbGluZXMoZXJyb3JfbGV2ZWwpICsgMQotICAgICAgICB0cmln
Z2VyX2xldmVsID0gc2VsZi50cmlnZ2VyX3Rlc3RfbGluZXMoY3BwX3N0eWxlLl92ZXJib3NlX2xl
dmVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCi0gICAg
ICAgICAgICAnVEVTVF9GKFRlc3QsIE11dGF0b3IpJyArIHNlbGYuZnVuY3Rpb25fYm9keShlcnJv
cl9saW5lcyksCi0gICAgICAgICAgICAoJ1NtYWxsIGFuZCBmb2N1c2VkIGZ1bmN0aW9ucyBhcmUg
cHJlZmVycmVkOiAnCi0gICAgICAgICAgICAgJ1RFU1RfRihUZXN0LCBNdXRhdG9yKSBoYXMgJWQg
bm9uLWNvbW1lbnQgbGluZXMgJwotICAgICAgICAgICAgICcoZXJyb3IgdHJpZ2dlcmVkIGJ5IGV4
Y2VlZGluZyAlZCBsaW5lcykuJwotICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9mbl9zaXpl
XSBbJWRdJykKLSAgICAgICAgICAgICUgKGVycm9yX2xpbmVzLCB0cmlnZ2VyX2xldmVsLCBlcnJv
cl9sZXZlbCkpCi0KLSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlv
bl9zZXZlcml0eTFfZm9yX3NwbGl0X2xpbmVfdGVzdChzZWxmKToKLSAgICAgICAgZXJyb3JfbGV2
ZWwgPSAxCi0gICAgICAgIGVycm9yX2xpbmVzID0gc2VsZi50cmlnZ2VyX3Rlc3RfbGluZXMoZXJy
b3JfbGV2ZWwpICsgMQotICAgICAgICB0cmlnZ2VyX2xldmVsID0gc2VsZi50cmlnZ2VyX3Rlc3Rf
bGluZXMoY3BwX3N0eWxlLl92ZXJib3NlX2xldmVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1
bmN0aW9uX2xlbmd0aHNfY2hlY2soCi0gICAgICAgICAgICAoJ1RFU1RfRihHb29nbGVVcGRhdGVS
ZWNvdmVyeVJlZ2lzdHJ5UHJvdGVjdGVkVGVzdCxcbicKLSAgICAgICAgICAgICAnICAgIEZpeEdv
b2dsZVVwZGF0ZV9BbGxWYWx1ZXNfTWFjaGluZUFwcCknICAjIG5vdGU6IDQgc3BhY2VzCi0gICAg
ICAgICAgICAgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoZXJyb3JfbGluZXMpKSwKLSAgICAgICAgICAg
ICgnU21hbGwgYW5kIGZvY3VzZWQgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6ICcKLSAgICAgICAg
ICAgICAnVEVTVF9GKEdvb2dsZVVwZGF0ZVJlY292ZXJ5UmVnaXN0cnlQcm90ZWN0ZWRUZXN0LCAn
ICAjIDEgc3BhY2UKLSAgICAgICAgICAgICAnRml4R29vZ2xlVXBkYXRlX0FsbFZhbHVlc19NYWNo
aW5lQXBwKSBoYXMgJWQgbm9uLWNvbW1lbnQgbGluZXMgJwotICAgICAgICAgICAgICcoZXJyb3Ig
dHJpZ2dlcmVkIGJ5IGV4Y2VlZGluZyAlZCBsaW5lcykuJwotICAgICAgICAgICAgICcgIFtyZWFk
YWJpbGl0eS9mbl9zaXplXSBbJWRdJykKLSAgICAgICAgICAgICUgKGVycm9yX2xpbmVzKzEsIHRy
aWdnZXJfbGV2ZWwsIGVycm9yX2xldmVsKSkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0
aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3JfYmFkX3Rlc3RfZG9lc250X2JyZWFrKHNl
bGYpOgotICAgICAgICBlcnJvcl9sZXZlbCA9IDEKLSAgICAgICAgZXJyb3JfbGluZXMgPSBzZWxm
LnRyaWdnZXJfdGVzdF9saW5lcyhlcnJvcl9sZXZlbCkgKyAxCi0gICAgICAgIHRyaWdnZXJfbGV2
ZWwgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhjcHBfc3R5bGUuX3ZlcmJvc2VfbGV2ZWwoKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKLSAgICAgICAgICAg
ICgnVEVTVF9GKCcKLSAgICAgICAgICAgICArIHNlbGYuZnVuY3Rpb25fYm9keShlcnJvcl9saW5l
cykpLAotICAgICAgICAgICAgKCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5jdGlvbnMgYXJlIHByZWZl
cnJlZDogJwotICAgICAgICAgICAgICdURVNUX0YgaGFzICVkIG5vbi1jb21tZW50IGxpbmVzICcK
LSAgICAgICAgICAgICAnKGVycm9yIHRyaWdnZXJlZCBieSBleGNlZWRpbmcgJWQgbGluZXMpLicK
LSAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvZm5fc2l6ZV0gWyVkXScpCi0gICAgICAgICAg
ICAlIChlcnJvcl9saW5lcywgdHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2ZWwpKQotCi0gICAgZGVm
IHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX3dpdGhfZW1i
ZWRkZWRfbm9fbGludHMoc2VsZik6Ci0gICAgICAgIGVycm9yX2xldmVsID0gMQotICAgICAgICBl
cnJvcl9saW5lcyA9IHNlbGYudHJpZ2dlcl9saW5lcyhlcnJvcl9sZXZlbCkgKyAxCi0gICAgICAg
IHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfbGluZXMoY3BwX3N0eWxlLl92ZXJib3NlX2xl
dmVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCi0gICAg
ICAgICAgICAndm9pZCB0ZXN0KGludCB4KScgKyBzZWxmLmZ1bmN0aW9uX2JvZHlfd2l0aF9ub19s
aW50cyhlcnJvcl9saW5lcyksCi0gICAgICAgICAgICAoJ1NtYWxsIGFuZCBmb2N1c2VkIGZ1bmN0
aW9ucyBhcmUgcHJlZmVycmVkOiAnCi0gICAgICAgICAgICAgJ3Rlc3QoKSBoYXMgJWQgbm9uLWNv
bW1lbnQgbGluZXMgJwotICAgICAgICAgICAgICcoZXJyb3IgdHJpZ2dlcmVkIGJ5IGV4Y2VlZGlu
ZyAlZCBsaW5lcykuJwotICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9mbl9zaXplXSBbJWRd
JykKLSAgICAgICAgICAgICUgKGVycm9yX2xpbmVzLCB0cmlnZ2VyX2xldmVsLCBlcnJvcl9sZXZl
bCkpCi0KLSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZl
cml0eTFfd2l0aF9ub19saW50KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9s
ZW5ndGhzX2NoZWNrKAotICAgICAgICAgICAgKCd2b2lkIHRlc3QoaW50IHgpJyArIHNlbGYuZnVu
Y3Rpb25fYm9keShzZWxmLnRyaWdnZXJfbGluZXMoMSkpCi0gICAgICAgICAgICAgKyAnICAvLyBO
T0xJTlQgLS0gbG9uZyBmdW5jdGlvbicpLAotICAgICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTIoc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9s
ZXZlbCgyKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25f
c2V2ZXJpdHkyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hl
Y2tfYXRfZXJyb3JfbGV2ZWwoMikKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX2Fib3ZlX3NldmVyaXR5MihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9yX2xldmVsKDIpCi0KLSAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTMoc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9s
ZXZlbCgzKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25f
c2V2ZXJpdHkzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hl
Y2tfYXRfZXJyb3JfbGV2ZWwoMykKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX2Fib3ZlX3NldmVyaXR5MyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9yX2xldmVsKDMpCi0KLSAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTQoc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9s
ZXZlbCg0KQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25f
c2V2ZXJpdHk0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hl
Y2tfYXRfZXJyb3JfbGV2ZWwoNCkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX2Fib3ZlX3NldmVyaXR5NChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9yX2xldmVsKDQpCi0KLSAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTUoc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9s
ZXZlbCg1KQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25f
YXRfc2V2ZXJpdHk1KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhf
Y2hlY2tfYXRfZXJyb3JfbGV2ZWwoNSkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9j
aGVja19kZWZpbml0aW9uX2Fib3ZlX3NldmVyaXR5NShzZWxmKToKLSAgICAgICAgc2VsZi5hc3Nl
cnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9yX2xldmVsKDUpCi0KLSAgICBkZWYg
dGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9odWdlX2xpbmVzKHNlbGYpOgot
ICAgICAgICAjIDUgaXMgdGhlIGxpbWl0Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xl
bmd0aF9jaGVja19kZWZpbml0aW9uKHNlbGYudHJpZ2dlcl9saW5lcygxMCksIDUpCi0KLSAgICBk
ZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfbm90X2RldGVybWluYWJsZShzZWxmKToKLSAgICAgICAg
IyBNYWNybyBpbnZvY2F0aW9uIHdpdGhvdXQgdGVybWluYXRpbmcgc2VtaWNvbG9uLgotICAgICAg
ICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAotICAgICAgICAgICAgJ01BQ1JP
KGFyZyknLAotICAgICAgICAgICAgJycpCi0KLSAgICAgICAgIyBNYWNybyB3aXRoIHVuZGVyc2Nv
cmVzCi0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCi0gICAgICAg
ICAgICAnTUFDUk9fV0lUSF9VTkRFUlNDT1JFUyhhcmcxLCBhcmcyLCBhcmczKScsCi0gICAgICAg
ICAgICAnJykKLQotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAot
ICAgICAgICAgICAgJ05vbk1hY3JvKGFyZyknLAotICAgICAgICAgICAgJ0xpbnQgZmFpbGVkIHRv
IGZpbmQgc3RhcnQgb2YgZnVuY3Rpb24gYm9keS4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxp
dHkvZm5fc2l6ZV0gWzVdJykKLQotCi1jbGFzcyBOb05vblZpcnR1YWxEZXN0cnVjdG9yc1Rlc3Qo
Q3BwU3R5bGVUZXN0QmFzZSk6Ci0KLSAgICBkZWYgdGVzdF9ub19lcnJvcihzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9v
IHsKLSAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIH5Gb28oKTsKLSAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgZm9vKCk7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAg
ICcnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAg
ICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAgICAgdmlydHVhbCBpbmxpbmUgfkZvbygp
OwotICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBmb28oKTsKLSAgICAgICAgICAgICAg
IH07JycnLAotICAgICAgICAgICAgJycpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGlu
ZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAgICAgICAgICAgICBp
bmxpbmUgdmlydHVhbCB+Rm9vKCk7Ci0gICAgICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGZv
bygpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnJykKLQotICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnJydjbGFzcyBGb286Okdv
byB7Ci0gICAgICAgICAgICAgICAgICAgdmlydHVhbCB+R29vKCk7Ci0gICAgICAgICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIGdvbygpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAg
ICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAg
J2NsYXNzIEZvbyB7IHZvaWQgZm9vKCk7IH07JywKLSAgICAgICAgICAgICdNb3JlIHRoYW4gb25l
IGNvbW1hbmQgb24gdGhlIHNhbWUgbGluZSAgW3doaXRlc3BhY2UvbmV3bGluZV0gWzRdJykKLQot
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnJydjbGFz
cyBRdWFsaWZpZWQ6OkdvbyA6IHB1YmxpYyBGb28gewotICAgICAgICAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBnb28oKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJycpCi0K
LSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgIyBMaW5l
LWVuZGluZyA6Ci0gICAgICAgICAgICAnJydjbGFzcyBHb28gOgotICAgICAgICAgICAgICAgcHVi
bGljIEZvbyB7Ci0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBnb28oKTsKLSAgICAg
ICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJ0xhYmVscyBzaG91bGQgYWx3YXlzIGJlIGlu
ZGVudGVkIGF0IGxlYXN0IG9uZSBzcGFjZS4gIElmIHRoaXMgaXMgYSAnCi0gICAgICAgICAgICAn
bWVtYmVyLWluaXRpYWxpemVyIGxpc3QgaW4gYSBjb25zdHJ1Y3RvciwgdGhlIGNvbG9uIHNob3Vs
ZCBiZSBvbiB0aGUgJwotICAgICAgICAgICAgJ2xpbmUgYWZ0ZXIgdGhlIGRlZmluaXRpb24gaGVh
ZGVyLiAgW3doaXRlc3BhY2UvbGFiZWxzXSBbNF0nKQotCi0gICAgZGVmIHRlc3Rfbm9fZGVzdHJ1
Y3Rvcl93aGVuX3ZpcnR1YWxfbmVlZGVkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0
aV9saW5lX2xpbnRfcmUoCi0gICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAg
ICAgICAgIHZpcnR1YWwgdm9pZCBmb28oKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAg
ICAgICAgJ1RoZSBjbGFzcyBGb28gcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3In
KQotCi0gICAgZGVmIHRlc3RfZGVzdHJ1Y3Rvcl9ub25fdmlydHVhbF93aGVuX3ZpcnR1YWxfbmVl
ZGVkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnRfcmUoCi0gICAg
ICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgICAgIH5Gb28oKTsKLSAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Ci0gICAgICAgICAgICAgICB9OycnJywK
LSAgICAgICAgICAgICdUaGUgY2xhc3MgRm9vIHByb2JhYmx5IG5lZWRzIGEgdmlydHVhbCBkZXN0
cnVjdG9yJykKLQotICAgIGRlZiB0ZXN0X25vX3dhcm5fd2hlbl9kZXJpdmVkKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnJydjbGFzcyBG
b28gOiBwdWJsaWMgR29vIHsKLSAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7
Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3Rf
aW50ZXJuYWxfYnJhY2VzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnRfcmUoCi0gICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgICAgIGVu
dW0gR29vIHsKLSAgICAgICAgICAgICAgICAgICAgICAgR09PCi0gICAgICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Ci0gICAgICAgICAgICAg
ICB9OycnJywKLSAgICAgICAgICAgICdUaGUgY2xhc3MgRm9vIHByb2JhYmx5IG5lZWRzIGEgdmly
dHVhbCBkZXN0cnVjdG9yJykKLQotICAgIGRlZiB0ZXN0X2lubmVyX2NsYXNzX25lZWRzX3ZpcnR1
YWxfZGVzdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
X3JlKAotICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAgICAgICAgICAgICBjbGFz
cyBHb28gewotICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZ29vKCk7Ci0gICAg
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJ1Ro
ZSBjbGFzcyBHb28gcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3InKQotCi0gICAg
ZGVmIHRlc3Rfb3V0ZXJfY2xhc3NfbmVlZHNfdmlydHVhbF9kZXN0cnVjdG9yKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnRfcmUoCi0gICAgICAgICAgICAnJydjbGFz
cyBGb28gewotICAgICAgICAgICAgICAgICAgIGNsYXNzIEdvbyB7Ci0gICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Ci0gICAgICAgICAg
ICAgICB9OycnJywKLSAgICAgICAgICAgICdUaGUgY2xhc3MgRm9vIHByb2JhYmx5IG5lZWRzIGEg
dmlydHVhbCBkZXN0cnVjdG9yJykKLQotICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9jbGFzc19uZWVk
c192aXJ0dWFsX2Rlc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xp
bmVfbGludF9yZSgKLSAgICAgICAgICAgICcnJ2NsYXNzIFF1YWxpZmllZDo6Rm9vIHsKLSAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Ci0gICAgICAgICAgICAgICB9OycnJywK
LSAgICAgICAgICAgICdUaGUgY2xhc3MgUXVhbGlmaWVkOjpGb28gcHJvYmFibHkgbmVlZHMgYSB2
aXJ0dWFsIGRlc3RydWN0b3InKQotCi0gICAgZGVmIHRlc3RfbXVsdGlfbGluZV9kZWNsYXJhdGlv
bl9ub19lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50X3Jl
KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vCi0gICAgICAgICAgICAgICAgICAgOiBwdWJsaWMg
R29vIHsKLSAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Ci0gICAgICAgICAg
ICAgICB9OycnJywKLSAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfbXVsdGlfbGluZV9k
ZWNsYXJhdGlvbl93aXRoX2Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoCi0gICAgICAgICAgICAnJydjbGFzcyBGb28KLSAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Ci0gICAgICAgICAgICAgICB9Oycn
JywKLSAgICAgICAgICAgIFsnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2
aW91cyBsaW5lICAnCi0gICAgICAgICAgICAgJ1t3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJywKLSAg
ICAgICAgICAgICAnVGhlIGNsYXNzIEZvbyBwcm9iYWJseSBuZWVkcyBhIHZpcnR1YWwgZGVzdHJ1
Y3RvciBkdWUgdG8gaGF2aW5nICcKLSAgICAgICAgICAgICAndmlydHVhbCBtZXRob2QocyksIG9u
ZSBkZWNsYXJlZCBhdCBsaW5lIDIuICBbcnVudGltZS92aXJ0dWFsXSBbNF0nXSkKLQotCi1jbGFz
cyBDcHBTdHlsZVN0YXRlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfZXJy
b3JfY291bnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGNwcF9zdHlsZS5l
cnJvcl9jb3VudCgpKQotICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5pbmNyZW1l
bnRfZXJyb3JfY291bnQoKQotICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5pbmNy
ZW1lbnRfZXJyb3JfY291bnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyLCBjcHBfc3R5
bGUuZXJyb3JfY291bnQoKSkKLSAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUucmVz
ZXRfZXJyb3JfY291bnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwLCBjcHBfc3R5bGUu
ZXJyb3JfY291bnQoKSkKLQotCi1jbGFzcyBXZWJLaXRTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFz
ZSk6Ci0KLSAgICAjIGZvciBodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29kaW5nLXN0eWxlLmh0
bWwKLSAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbihzZWxmKToKLSAgICAgICAgIyAxLiBVc2Ugc3Bh
Y2VzLCBub3QgdGFicy4gVGFicyBzaG91bGQgb25seSBhcHBlYXIgaW4gZmlsZXMgdGhhdAotICAg
ICAgICAjICAgIHJlcXVpcmUgdGhlbSBmb3Igc2VtYW50aWMgbWVhbmluZywgbGlrZSBNYWtlZmls
ZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdj
bGFzcyBGb28ge1xuJwotICAgICAgICAgICAgJyAgICBpbnQgZ29vO1xuJwotICAgICAgICAgICAg
J307JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICAnY2xhc3MgRm9vIHtcbicKLSAgICAgICAgICAgICdcdGludCBnb287
XG4nCi0gICAgICAgICAgICAnfTsnLAotICAgICAgICAgICAgJ1RhYiBmb3VuZDsgYmV0dGVyIHRv
IHVzZSBzcGFjZXMgIFt3aGl0ZXNwYWNlL3RhYl0gWzFdJykKLQotICAgICAgICAjIDIuIFRoZSBp
bmRlbnQgc2l6ZSBpcyA0IHNwYWNlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAotICAgICAgICAgICAgJ2NsYXNzIEZvbyB7XG4nCi0gICAgICAgICAgICAnICAgIGludCBn
b287XG4nCi0gICAgICAgICAgICAnfTsnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdjbGFzcyBGb28ge1xuJwotICAg
ICAgICAgICAgJyAgIGludCBnb287XG4nCi0gICAgICAgICAgICAnfTsnLAotICAgICAgICAgICAg
J1dlaXJkIG51bWJlciBvZiBzcGFjZXMgYXQgbGluZS1zdGFydC4gIEFyZSB5b3UgdXNpbmcgYSA0
LXNwYWNlIGluZGVudD8gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzNdJykKLSAgICAgICAgIyBGSVhN
RTogTm8gdGVzdHMgZm9yIDgtc3BhY2VzLgotCi0gICAgICAgICMgMy4gSW4gYSBoZWFkZXIsIGNv
ZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29y
ZSB7XG5cbicKLSAgICAgICAgICAgICdjbGFzcyBEb2N1bWVudCB7XG4nCi0gICAgICAgICAgICAn
ICAgIGludCBteVZhcmlhYmxlO1xuJwotICAgICAgICAgICAgJ307XG4nCi0gICAgICAgICAgICAn
fScsCi0gICAgICAgICAgICAnJywKLSAgICAgICAgICAgICdmb28uaCcpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgT3V0ZXJOYW1l
c3BhY2Uge1xuJwotICAgICAgICAgICAgJyAgICBuYW1lc3BhY2UgSW5uZXJOYW1lc3BhY2Uge1xu
JwotICAgICAgICAgICAgJyAgICBjbGFzcyBEb2N1bWVudCB7XG4nCi0gICAgICAgICAgICAnfTtc
bicKLSAgICAgICAgICAgICd9O1xuJwotICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgJ0Nv
ZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFj
ZS9pbmRlbnRdIFs0XScsCi0gICAgICAgICAgICAnZm9vLmgnKQotICAgICAgICBzZWxmLmFzc2Vy
dF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnbmFtZXNwYWNlIE91dGVyTmFtZXNwYWNl
IHtcbicKLSAgICAgICAgICAgICcgICAgY2xhc3MgRG9jdW1lbnQge1xuJwotICAgICAgICAgICAg
JyAgICBuYW1lc3BhY2UgSW5uZXJOYW1lc3BhY2Uge1xuJwotICAgICAgICAgICAgJ307XG4nCi0g
ICAgICAgICAgICAnfTtcbicKLSAgICAgICAgICAgICd9JywKLSAgICAgICAgICAgICdDb2RlIGlu
c2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLiAgW3doaXRlc3BhY2UvaW5k
ZW50XSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5oJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVs
dGlfbGluZV9saW50KAotICAgICAgICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcbicKLSAgICAg
ICAgICAgICcjaWYgMFxuJwotICAgICAgICAgICAgJyAgICBjbGFzcyBEb2N1bWVudCB7XG4nCi0g
ICAgICAgICAgICAnfTtcbicKLSAgICAgICAgICAgICcjZW5kaWZcbicKLSAgICAgICAgICAgICd9
JywKLSAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGlu
ZGVudGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5oJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ25hbWVz
cGFjZSBXZWJDb3JlIHtcbicKLSAgICAgICAgICAgICdjbGFzcyBEb2N1bWVudCB7XG4nCi0gICAg
ICAgICAgICAnfTtcbicKLSAgICAgICAgICAgICd9JywKLSAgICAgICAgICAgICcnLAotICAgICAg
ICAgICAgJ2Zvby5oJykKLQotICAgICAgICAjIDQuIEluIGFuIGltcGxlbWVudGF0aW9uIGZpbGUg
KGZpbGVzIHdpdGggdGhlIGV4dGVuc2lvbiAuY3BwLCAuYwotICAgICAgICAjICAgIG9yIC5tbSks
IGNvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuCi0gICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgV2Vi
Q29yZSB7XG5cbicKLSAgICAgICAgICAgICdEb2N1bWVudDo6Rm9vKClcbicKLSAgICAgICAgICAg
ICcgICAgOiBmb28oYmFyKVxuJwotICAgICAgICAgICAgJyAgICAsIGJvbyhmYXIpXG4nCi0gICAg
ICAgICAgICAne1xuJwotICAgICAgICAgICAgJyAgICBzdHVmZigpO1xuJwotICAgICAgICAgICAg
J30nLAotICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgT3V0ZXJO
YW1lc3BhY2Uge1xuJwotICAgICAgICAgICAgJ25hbWVzcGFjZSBJbm5lck5hbWVzcGFjZSB7XG4n
Ci0gICAgICAgICAgICAnRG9jdW1lbnQ6OkZvbygpIHsgfVxuJwotICAgICAgICAgICAgJyAgICB2
b2lkKiBwO1xuJwotICAgICAgICAgICAgJ31cbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAg
ICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBb
d2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgT3V0
ZXJOYW1lc3BhY2Uge1xuJwotICAgICAgICAgICAgJ25hbWVzcGFjZSBJbm5lck5hbWVzcGFjZSB7
XG4nCi0gICAgICAgICAgICAnRG9jdW1lbnQ6OkZvbygpIHsgfVxuJwotICAgICAgICAgICAgJ31c
bicKLSAgICAgICAgICAgICcgICAgdm9pZCogcDtcbicKLSAgICAgICAgICAgICd9XG4nLAotICAg
ICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQu
ICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2Ug
V2ViQ29yZSB7XG5cbicKLSAgICAgICAgICAgICcgICAgY29uc3QgY2hhciogZm9vID0gInN0YXJ0
OjsiXG4nCi0gICAgICAgICAgICAnICAgICAgICAiZGZzZnNmcyI7XG4nCi0gICAgICAgICAgICAn
fVxuJywKLSAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJl
IGluZGVudGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5j
cHAnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAn
bmFtZXNwYWNlIFdlYkNvcmUge1xuXG4nCi0gICAgICAgICAgICAnY29uc3QgY2hhciogZm9vKHZv
aWQqIGEgPSAiOyIsIC8vIDtcbicKLSAgICAgICAgICAgICcgICAgdm9pZCogYik7XG4nCi0gICAg
ICAgICAgICAnICAgIHZvaWQqIHA7XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAgICAg
ICdDb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLiAgW3doaXRl
c3BhY2UvaW5kZW50XSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotICAgICAgICBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnbmFtZXNwYWNlIFdlYkNvcmUg
e1xuXG4nCi0gICAgICAgICAgICAnY29uc3QgY2hhciogZm9vW10gPSB7XG4nCi0gICAgICAgICAg
ICAnICAgICJ2b2lkKiBiKTsiLCAvLyA7XG4nCi0gICAgICAgICAgICAnICAgICJhc2ZkZiIsXG4n
Ci0gICAgICAgICAgICAnICAgIH1cbicKLSAgICAgICAgICAgICcgICAgdm9pZCogcDtcbicKLSAg
ICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNo
b3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCi0gICAgICAg
ICAgICAnZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAg
ICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG5cbicKLSAgICAgICAgICAgICdjb25zdCBj
aGFyKiBmb29bXSA9IHtcbicKLSAgICAgICAgICAgICcgICAgInZvaWQqIGIpOyIsIC8vIH1cbicK
LSAgICAgICAgICAgICcgICAgImFzZmRmIixcbicKLSAgICAgICAgICAgICcgICAgfVxuJwotICAg
ICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnJywKLSAgICAgICAgICAgICdmb28uY3BwJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJyAgICBu
YW1lc3BhY2UgV2ViQ29yZSB7XG5cbicKLSAgICAgICAgICAgICcgICAgdm9pZCBEb2N1bWVudDo6
Rm9vKClcbicKLSAgICAgICAgICAgICcgICAge1xuJwotICAgICAgICAgICAgJ3N0YXJ0OiAvLyBp
bmZpbml0ZSBsb29wcyBhcmUgZnVuIVxuJwotICAgICAgICAgICAgJyAgICAgICAgZ290byBzdGFy
dDtcbicKLSAgICAgICAgICAgICcgICAgfScsCi0gICAgICAgICAgICAnbmFtZXNwYWNlIHNob3Vs
ZCBuZXZlciBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKLSAgICAgICAg
ICAgICdmb28uY3BwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAg
ICAgICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcbicKLSAgICAgICAgICAgICcgICAgRG9jdW1l
bnQ6OkZvbygpIHsgfVxuJwotICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgJ0NvZGUgaW5z
aWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuJwotICAgICAgICAgICAgJyAg
W3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotICAgICAg
ICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnbmFtZXNwYWNlIFdl
YkNvcmUge1xuJwotICAgICAgICAgICAgJyNkZWZpbmUgYWJjKHgpIHg7IFxcXG4nCi0gICAgICAg
ICAgICAnICAgIHhcbicKLSAgICAgICAgICAgICd9JywKLSAgICAgICAgICAgICcnLAotICAgICAg
ICAgICAgJ2Zvby5jcHAnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0g
ICAgICAgICAgICAnbmFtZXNwYWNlIFdlYkNvcmUge1xuJwotICAgICAgICAgICAgJyNkZWZpbmUg
YWJjKHgpIHg7IFxcXG4nCi0gICAgICAgICAgICAnICAgIHhcbicKLSAgICAgICAgICAgICcgICAg
dm9pZCogeDsnCi0gICAgICAgICAgICAnfScsCi0gICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBu
YW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRd
JywKLSAgICAgICAgICAgICdmb28uY3BwJykKLQotICAgICAgICAjIDUuIEEgY2FzZSBsYWJlbCBz
aG91bGQgbGluZSB1cCB3aXRoIGl0cyBzd2l0Y2ggc3RhdGVtZW50LiBUaGUKLSAgICAgICAgIyAg
ICBjYXNlIHN0YXRlbWVudCBpcyBpbmRlbnRlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlf
bGluZV9saW50KAotICAgICAgICAgICAgJyAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuJwotICAg
ICAgICAgICAgJyAgICBjYXNlIGZvb0NvbmRpdGlvbjpcbicKLSAgICAgICAgICAgICcgICAgY2Fz
ZSBiYXJDb25kaXRpb246XG4nCi0gICAgICAgICAgICAnICAgICAgICBpKys7XG4nCi0gICAgICAg
ICAgICAnICAgICAgICBicmVhaztcbicKLSAgICAgICAgICAgICcgICAgZGVmYXVsdDpcbicKLSAg
ICAgICAgICAgICcgICAgICAgIGktLTtcbicKLSAgICAgICAgICAgICcgICAgfVxuJywKLSAgICAg
ICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAg
ICAgICAnICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAgICAnICAgIGNhc2Ug
Zm9vQ29uZGl0aW9uOlxuJwotICAgICAgICAgICAgJyAgICAgICAgc3dpdGNoIChvdGhlckNvbmRp
dGlvbikge1xuJwotICAgICAgICAgICAgJyAgICAgICAgZGVmYXVsdDpcbicKLSAgICAgICAgICAg
ICcgICAgICAgICAgICByZXR1cm47XG4nCi0gICAgICAgICAgICAnICAgICAgICB9XG4nCi0gICAg
ICAgICAgICAnICAgIGRlZmF1bHQ6XG4nCi0gICAgICAgICAgICAnICAgICAgICBpLS07XG4nCi0g
ICAgICAgICAgICAnICAgIH1cbicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJyAgICBzd2l0Y2ggKGNvbmRpdGlvbikg
e1xuJwotICAgICAgICAgICAgJyAgICBjYXNlIGZvb0NvbmRpdGlvbjogYnJlYWs7XG4nCi0gICAg
ICAgICAgICAnICAgIGRlZmF1bHQ6IHJldHVybjtcbicKLSAgICAgICAgICAgICcgICAgfVxuJywK
LSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0g
ICAgICAgICAgICAnICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAgICAnICAg
ICAgICBjYXNlIGZvb0NvbmRpdGlvbjpcbicKLSAgICAgICAgICAgICcgICAgICAgIGNhc2UgYmFy
Q29uZGl0aW9uOlxuJwotICAgICAgICAgICAgJyAgICAgICAgICAgIGkrKztcbicKLSAgICAgICAg
ICAgICcgICAgICAgICAgICBicmVhaztcbicKLSAgICAgICAgICAgICcgICAgICAgIGRlZmF1bHQ6
XG4nCi0gICAgICAgICAgICAnICAgICAgICAgICAgaS0tO1xuJwotICAgICAgICAgICAgJyAgICB9
XG4nLAotICAgICAgICAgICAgJ0EgY2FzZSBsYWJlbCBzaG91bGQgbm90IGJlIGluZGVudGVkLCBi
dXQgbGluZSB1cCB3aXRoIGl0cyBzd2l0Y2ggc3RhdGVtZW50LicKLSAgICAgICAgICAgICcgIFt3
aGl0ZXNwYWNlL2luZGVudF0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAotICAgICAgICAgICAgJyAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuJwotICAgICAgICAg
ICAgJyAgICAgICAgY2FzZSBmb29Db25kaXRpb246XG4nCi0gICAgICAgICAgICAnICAgICAgICAg
ICAgYnJlYWs7XG4nCi0gICAgICAgICAgICAnICAgIGRlZmF1bHQ6XG4nCi0gICAgICAgICAgICAn
ICAgICAgICAgICAgaS0tO1xuJwotICAgICAgICAgICAgJyAgICB9XG4nLAotICAgICAgICAgICAg
J0EgY2FzZSBsYWJlbCBzaG91bGQgbm90IGJlIGluZGVudGVkLCBidXQgbGluZSB1cCB3aXRoIGl0
cyBzd2l0Y2ggc3RhdGVtZW50LicKLSAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2luZGVudF0g
WzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAg
JyAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuJwotICAgICAgICAgICAgJyAgICBjYXNlIGZvb0Nv
bmRpdGlvbjpcbicKLSAgICAgICAgICAgICcgICAgY2FzZSBiYXJDb25kaXRpb246XG4nCi0gICAg
ICAgICAgICAnICAgICAgICBzd2l0Y2ggKG90aGVyQ29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAg
ICAnICAgICAgICAgICAgZGVmYXVsdDpcbicKLSAgICAgICAgICAgICcgICAgICAgICAgICByZXR1
cm47XG4nCi0gICAgICAgICAgICAnICAgICAgICB9XG4nCi0gICAgICAgICAgICAnICAgIGRlZmF1
bHQ6XG4nCi0gICAgICAgICAgICAnICAgICAgICBpLS07XG4nCi0gICAgICAgICAgICAnICAgIH1c
bicsCi0gICAgICAgICAgICAnQSBjYXNlIGxhYmVsIHNob3VsZCBub3QgYmUgaW5kZW50ZWQsIGJ1
dCBsaW5lIHVwIHdpdGggaXRzIHN3aXRjaCBzdGF0ZW1lbnQuJwotICAgICAgICAgICAgJyAgW3do
aXRlc3BhY2UvaW5kZW50XSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICAnICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAg
ICAnICAgIGNhc2UgZm9vQ29uZGl0aW9uOlxuJwotICAgICAgICAgICAgJyAgICBjYXNlIGJhckNv
bmRpdGlvbjpcbicKLSAgICAgICAgICAgICcgICAgaSsrO1xuJwotICAgICAgICAgICAgJyAgICBi
cmVhaztcblxuJwotICAgICAgICAgICAgJyAgICBkZWZhdWx0OlxuJwotICAgICAgICAgICAgJyAg
ICBpLS07XG4nCi0gICAgICAgICAgICAnICAgIH1cbicsCi0gICAgICAgICAgICAnTm9uLWxhYmVs
IGNvZGUgaW5zaWRlIHN3aXRjaCBzdGF0ZW1lbnRzIHNob3VsZCBiZSBpbmRlbnRlZC4nCi0gICAg
ICAgICAgICAnICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcgICAgc3dpdGNoIChjb25kaXRpb24pIHtc
bicKLSAgICAgICAgICAgICcgICAgY2FzZSBmb29Db25kaXRpb246XG4nCi0gICAgICAgICAgICAn
ICAgIGNhc2UgYmFyQ29uZGl0aW9uOlxuJwotICAgICAgICAgICAgJyAgICAgICAgc3dpdGNoIChv
dGhlckNvbmRpdGlvbikge1xuJwotICAgICAgICAgICAgJyAgICAgICAgZGVmYXVsdDpcbicKLSAg
ICAgICAgICAgICcgICAgICAgIHJldHVybjtcbicKLSAgICAgICAgICAgICcgICAgICAgIH1cbicK
LSAgICAgICAgICAgICcgICAgZGVmYXVsdDpcbicKLSAgICAgICAgICAgICcgICAgICAgIGktLTtc
bicKLSAgICAgICAgICAgICcgICAgfVxuJywKLSAgICAgICAgICAgICdOb24tbGFiZWwgY29kZSBp
bnNpZGUgc3dpdGNoIHN0YXRlbWVudHMgc2hvdWxkIGJlIGluZGVudGVkLicKLSAgICAgICAgICAg
ICcgIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJykKLQotICAgICAgICAjIDYuIEJvb2xlYW4gZXhw
cmVzc2lvbnMgYXQgdGhlIHNhbWUgbmVzdGluZyBsZXZlbCB0aGF0IHNwYW4KLSAgICAgICAgIyAg
IG11bHRpcGxlIGxpbmVzIHNob3VsZCBoYXZlIHRoZWlyIG9wZXJhdG9ycyBvbiB0aGUgbGVmdCBz
aWRlIG9mCi0gICAgICAgICMgICB0aGUgbGluZSBpbnN0ZWFkIG9mIHRoZSByaWdodCBzaWRlLgot
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnICAgIHJl
dHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0clxuJwotICAgICAgICAgICAgJyAgICAgICAgfHwg
YXR0ci0+bmFtZSgpID09IGxvd3NyY0F0dHI7XG4nLAotICAgICAgICAgICAgJycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcgICAgcmV0dXJuIGF0
dHItPm5hbWUoKSA9PSBzcmNBdHRyIHx8XG4nCi0gICAgICAgICAgICAnICAgICAgICBhdHRyLT5u
YW1lKCkgPT0gbG93c3JjQXR0cjtcbicsCi0gICAgICAgICAgICAnQm9vbGVhbiBleHByZXNzaW9u
cyB0aGF0IHNwYW4gbXVsdGlwbGUgbGluZXMgc2hvdWxkIGhhdmUgdGhlaXIgJwotICAgICAgICAg
ICAgJ29wZXJhdG9ycyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBsaW5lIGluc3RlYWQgb2YgdGhl
IHJpZ2h0IHNpZGUuJwotICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbNF0n
KQotCi0gICAgZGVmIHRlc3Rfc3BhY2luZyhzZWxmKToKLSAgICAgICAgIyAxLiBEbyBub3QgcGxh
Y2Ugc3BhY2VzIGFyb3VuZCB1bmFyeSBvcGVyYXRvcnMuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpKys7JywKLSAgICAgICAgICAgICcnKQotICAg
ICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaSArKzsnLAot
ICAgICAgICAgICAgJ0V4dHJhIHNwYWNlIGZvciBvcGVyYXRvciAgKys7ICBbd2hpdGVzcGFjZS9v
cGVyYXRvcnNdIFs0XScpCi0KLSAgICAgICAgIyAyLiBEbyBwbGFjZSBzcGFjZXMgYXJvdW5kIGJp
bmFyeSBhbmQgdGVybmFyeSBvcGVyYXRvcnMuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xp
bmVfbGludCgKLSAgICAgICAgICAgICd5ID0gbSAqIHggKyBiOycsCi0gICAgICAgICAgICAnJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2YoYSwg
Yik7JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICAnYyA9IGEgfCBiOycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ3JldHVybiBjb25kaXRp
b24gPyAxIDogMDsnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICd5PW0qeCtiOycsCi0gICAgICAgICAgICAnTWlzc2lu
ZyBzcGFjZXMgYXJvdW5kID0gIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzRdJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2YoYSxiKTsnLAotICAg
ICAgICAgICAgJ01pc3Npbmcgc3BhY2UgYWZ0ZXIgLCAgW3doaXRlc3BhY2UvY29tbWFdIFszXScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdjID0g
YXxiOycsCi0gICAgICAgICAgICAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIHwgIFt3aGl0ZXNwYWNl
L29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgIyBGSVhNRTogV2UgY2Fubm90IGNhdGNoIHRoaXMg
bGludCBlcnJvci4KLSAgICAgICAgIyBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAg
ICAgICMgICAgICdyZXR1cm4gY29uZGl0aW9uID8gMTowOycsCi0gICAgICAgICMgICAgICcnKQot
Ci0gICAgICAgICMgMy4gUGxhY2Ugc3BhY2VzIGJldHdlZW4gY29udHJvbCBzdGF0ZW1lbnRzIGFu
ZCB0aGVpciBwYXJlbnRoZXNlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAotICAgICAgICAgICAgJyAgICBpZiAoY29uZGl0aW9uKVxuJwotICAgICAgICAgICAgJyAgICAg
ICAgZG9JdCgpO1xuJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0
aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnICAgIGlmKGNvbmRpdGlvbilcbicKLSAgICAgICAg
ICAgICcgICAgICAgIGRvSXQoKTtcbicsCi0gICAgICAgICAgICAnTWlzc2luZyBzcGFjZSBiZWZv
cmUgKCBpbiBpZiggIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKLQotICAgICAgICAjIDQuIERv
IG5vdCBwbGFjZSBzcGFjZXMgYmV0d2VlbiBhIGZ1bmN0aW9uIGFuZCBpdHMgcGFyZW50aGVzZXMs
Ci0gICAgICAgICMgICAgb3IgYmV0d2VlbiBhIHBhcmVudGhlc2lzIGFuZCBpdHMgY29udGVudC4K
LSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2YoYSwg
Yik7JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICAnZiAoYSwgYik7JywKLSAgICAgICAgICAgICdFeHRyYSBzcGFjZSBi
ZWZvcmUgKCBpbiBmdW5jdGlvbiBjYWxsICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs0XScpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdmKCBhLCBiICk7
JywKLSAgICAgICAgICAgIFsnRXh0cmEgc3BhY2UgYWZ0ZXIgKCBpbiBmdW5jdGlvbiBjYWxsICBb
d2hpdGVzcGFjZS9wYXJlbnNdIFs0XScsCi0gICAgICAgICAgICAgJ0V4dHJhIHNwYWNlIGJlZm9y
ZSApICBbd2hpdGVzcGFjZS9wYXJlbnNdIFsyXSddKQotCi0gICAgZGVmIHRlc3RfbGluZV9icmVh
a2luZyhzZWxmKToKLSAgICAgICAgIyAxLiBFYWNoIHN0YXRlbWVudCBzaG91bGQgZ2V0IGl0cyBv
d24gbGluZS4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAg
ICAgJyAgICB4Kys7XG4nCi0gICAgICAgICAgICAnICAgIHkrKztcbicKLSAgICAgICAgICAgICcg
ICAgaWYgKGNvbmRpdGlvbik7XG4nCi0gICAgICAgICAgICAnICAgICAgICBkb0l0KCk7XG4nLAot
ICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAg
ICAgICAgICAgICcgICAgeCsrOyB5Kys7JywKLSAgICAgICAgICAgICdNb3JlIHRoYW4gb25lIGNv
bW1hbmQgb24gdGhlIHNhbWUgbGluZSAgW3doaXRlc3BhY2UvbmV3bGluZV0gWzRdJykKLSAgICAg
ICAgIyBGSVhNRTogTWFrZSB0aGlzIGZhaWwuCi0gICAgICAgICMgc2VsZi5hc3NlcnRfbXVsdGlf
bGluZV9saW50KAotICAgICAgICAjICAgICAnICAgIGlmIChjb25kaXRpb24pIGRvSXQoKTtcbics
Ci0gICAgICAgICMgICAgICcnKQotCi0gICAgICAgICMgMi4gQW4gZWxzZSBzdGF0ZW1lbnQgc2hv
dWxkIGdvIG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBwcmVjZWRpbmcKLSAgICAgICAgIyAgIGNsb3Nl
IGJyYWNlIGlmIG9uZSBpcyBwcmVzZW50LCBlbHNlIGl0IHNob3VsZCBsaW5lIHVwIHdpdGggdGhl
Ci0gICAgICAgICMgICBpZiBzdGF0ZW1lbnQuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xp
bmVfbGludCgKLSAgICAgICAgICAgICdpZiAoY29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAgICAn
ICAgIGRvU29tZXRoaW5nKCk7XG4nCi0gICAgICAgICAgICAnICAgIGRvU29tZXRoaW5nQWdhaW4o
KTtcbicKLSAgICAgICAgICAgICd9IGVsc2Uge1xuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0
aGluZ0Vsc2UoKTtcbicKLSAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdFbHNlQWdhaW4oKTtc
bicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpZiAoY29uZGl0aW9uKVxuJwotICAg
ICAgICAgICAgJyAgICBkb1NvbWV0aGluZygpO1xuJwotICAgICAgICAgICAgJ2Vsc2VcbicKLSAg
ICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdFbHNlKCk7XG4nLAotICAgICAgICAgICAgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpZiAoY29u
ZGl0aW9uKVxuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZygpO1xuJwotICAgICAgICAg
ICAgJ2Vsc2Uge1xuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZ0Vsc2UoKTtcbicKLSAg
ICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdFbHNlQWdhaW4oKTtcbicKLSAgICAgICAgICAgICd9
XG4nLAotICAgICAgICAgICAgJycpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAotICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pIHtcbicKLSAgICAgICAgICAgICcgICAg
ZG9Tb21ldGhpbmcoKTtcbicKLSAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdBZ2FpbigpO1xu
JwotICAgICAgICAgICAgJ31cbicKLSAgICAgICAgICAgICdlbHNlIHtcbicKLSAgICAgICAgICAg
ICcgICAgZG9Tb21ldGhpbmdFbHNlKCk7XG4nCi0gICAgICAgICAgICAnICAgIGRvU29tZXRoaW5n
RWxzZUFnYWluKCk7XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAgICAgICdBbiBlbHNl
IHNob3VsZCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgcHJlY2VkaW5nIH0gIFt3aGl0
ZXNwYWNlL25ld2xpbmVdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKLSAgICAgICAgICAgICdpZiAoY29uZGl0aW9uKSBkb1NvbWV0aGluZygpOyBlbHNlIGRvU29t
ZXRoaW5nRWxzZSgpO1xuJywKLSAgICAgICAgICAgIFsnTW9yZSB0aGFuIG9uZSBjb21tYW5kIG9u
IHRoZSBzYW1lIGxpbmUgIFt3aGl0ZXNwYWNlL25ld2xpbmVdIFs0XScsCi0gICAgICAgICAgICAg
J0Vsc2UgY2xhdXNlIHNob3VsZCBuZXZlciBiZSBvbiBzYW1lIGxpbmUgYXMgZWxzZSAodXNlIDIg
bGluZXMpICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBbNF0nXSkKLSAgICAgICAgIyBGSVhNRTogTWFr
ZSB0aGlzIGZhaWwuCi0gICAgICAgICMgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAg
ICAgICAjICAgICAnaWYgKGNvbmRpdGlvbikgZG9Tb21ldGhpbmcoKTsgZWxzZSB7XG4nCi0gICAg
ICAgICMgICAgICcgICAgZG9Tb21ldGhpbmdFbHNlKCk7XG4nCi0gICAgICAgICMgICAgICd9XG4n
LAotICAgICAgICAjICAgICAnJykKLQotICAgICAgICAjIDMuIEFuIGVsc2UgaWYgc3RhdGVtZW50
IHNob3VsZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0YXRlbWVudAotICAgICAgICAjICAgIHdoZW4g
dGhlIHByaW9yIGlmIGNvbmNsdWRlcyB3aXRoIGEgcmV0dXJuIHN0YXRlbWVudC4KLSAgICAgICAg
c2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmIChtb3RpdmF0ZWQp
IHtcbicKLSAgICAgICAgICAgICcgICAgaWYgKGxpcXVpZClcbicKLSAgICAgICAgICAgICcgICAg
ICAgIHJldHVybiBtb25leTtcbicKLSAgICAgICAgICAgICd9IGVsc2UgaWYgKHRpcmVkKVxuJwot
ICAgICAgICAgICAgJyAgICBicmVhaztcbicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pXG4n
Ci0gICAgICAgICAgICAnICAgIGRvU29tZXRoaW5nKCk7XG4nCi0gICAgICAgICAgICAnZWxzZSBp
ZiAob3RoZXJDb25kaXRpb24pXG4nCi0gICAgICAgICAgICAnICAgIGRvU29tZXRoaW5nRWxzZSgp
O1xuJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKLSAgICAgICAgICAgICcgICAgZG9T
b21ldGhpbmcoKTtcbicKLSAgICAgICAgICAgICdlbHNlXG4nCi0gICAgICAgICAgICAnICAgIGRv
U29tZXRoaW5nRWxzZSgpO1xuJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2Vy
dF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKLSAgICAg
ICAgICAgICcgICAgcmV0dXJuVmFsdWUgPSBmb287XG4nCi0gICAgICAgICAgICAnZWxzZSBpZiAo
b3RoZXJDb25kaXRpb24pXG4nCi0gICAgICAgICAgICAnICAgIHJldHVyblZhbHVlID0gYmFyO1xu
JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQo
Ci0gICAgICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKLSAgICAgICAgICAgICcgICAgcmV0dXJu
VmFsdWUgPSBmb287XG4nCi0gICAgICAgICAgICAnZWxzZVxuJwotICAgICAgICAgICAgJyAgICBy
ZXR1cm5WYWx1ZSA9IGJhcjtcbicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pXG4nCi0gICAg
ICAgICAgICAnICAgIGRvU29tZXRoaW5nKCk7XG4nCi0gICAgICAgICAgICAnZWxzZSBpZiAobGlx
dWlkKVxuJwotICAgICAgICAgICAgJyAgICByZXR1cm4gbW9uZXk7XG4nCi0gICAgICAgICAgICAn
ZWxzZSBpZiAoYnJva2UpXG4nCi0gICAgICAgICAgICAnICAgIHJldHVybiBmYXZvcjtcbicKLSAg
ICAgICAgICAgICdlbHNlXG4nCi0gICAgICAgICAgICAnICAgIHNsZWVwKDI4ODAwKTtcbicsCi0g
ICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAg
ICAgICAgICAgJ2lmIChsaXF1aWQpIHtcbicKLSAgICAgICAgICAgICcgICAgcHJlcGFyZSgpO1xu
JwotICAgICAgICAgICAgJyAgICByZXR1cm4gbW9uZXk7XG4nCi0gICAgICAgICAgICAnfSBlbHNl
IGlmIChncmVlZHkpIHtcbicKLSAgICAgICAgICAgICcgICAga2VlcCgpO1xuJwotICAgICAgICAg
ICAgJyAgICByZXR1cm4gbm90aGluZztcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAg
ICAgJ0FuIGVsc2UgaWYgc3RhdGVtZW50IHNob3VsZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0YXRl
bWVudCB3aGVuIHRoZSAnCi0gICAgICAgICAgICAncHJpb3IgImlmIiBjb25jbHVkZXMgd2l0aCBh
IHJldHVybiwgYnJlYWssIGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicKLSAgICAgICAgICAg
ICcgIFtyZWFkYWJpbGl0eS9jb250cm9sX2Zsb3ddIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcgICAgaWYgKHN0dXBpZCkge1xuJwotICAg
ICAgICAgICAgJ2luZmluaXRlTG9vcDpcbicKLSAgICAgICAgICAgICcgICAgICAgIGdvdG8gaW5m
aW5pdGVMb29wO1xuJwotICAgICAgICAgICAgJyAgICB9IGVsc2UgaWYgKGV2aWwpXG4nCi0gICAg
ICAgICAgICAnICAgICAgICBnb3RvIGhlbGw7XG4nLAotICAgICAgICAgICAgJ0FuIGVsc2UgaWYg
c3RhdGVtZW50IHNob3VsZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0YXRlbWVudCB3aGVuIHRoZSAn
Ci0gICAgICAgICAgICAncHJpb3IgImlmIiBjb25jbHVkZXMgd2l0aCBhIHJldHVybiwgYnJlYWss
IGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0
eS9jb250cm9sX2Zsb3ddIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKLSAgICAgICAgICAgICdpZiAobGlxdWlkKVxuJwotICAgICAgICAgICAgJ3tcbicKLSAgICAg
ICAgICAgICcgICAgcHJlcGFyZSgpO1xuJwotICAgICAgICAgICAgJyAgICByZXR1cm4gbW9uZXk7
XG4nCi0gICAgICAgICAgICAnfVxuJwotICAgICAgICAgICAgJ2Vsc2UgaWYgKGdyZWVkeSlcbicK
LSAgICAgICAgICAgICcgICAga2VlcCgpO1xuJywKLSAgICAgICAgICAgIFsnVGhpcyB7IHNob3Vs
ZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNd
IFs0XScsCi0gICAgICAgICAgICAnQW4gZWxzZSBzaG91bGQgYXBwZWFyIG9uIHRoZSBzYW1lIGxp
bmUgYXMgdGhlIHByZWNlZGluZyB9ICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBbNF0nLAotICAgICAg
ICAgICAgJ0FuIGVsc2UgaWYgc3RhdGVtZW50IHNob3VsZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0
YXRlbWVudCB3aGVuIHRoZSAnCi0gICAgICAgICAgICAncHJpb3IgImlmIiBjb25jbHVkZXMgd2l0
aCBhIHJldHVybiwgYnJlYWssIGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicKLSAgICAgICAg
ICAgICcgIFtyZWFkYWJpbGl0eS9jb250cm9sX2Zsb3ddIFs0XSddKQotICAgICAgICBzZWxmLmFz
c2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaWYgKGdvbmUpXG4nCi0gICAgICAg
ICAgICAnICAgIHJldHVybjtcbicKLSAgICAgICAgICAgICdlbHNlIGlmIChoZXJlKVxuJwotICAg
ICAgICAgICAgJyAgICBnbygpO1xuJywKLSAgICAgICAgICAgICdBbiBlbHNlIGlmIHN0YXRlbWVu
dCBzaG91bGQgYmUgd3JpdHRlbiBhcyBhbiBpZiBzdGF0ZW1lbnQgd2hlbiB0aGUgJwotICAgICAg
ICAgICAgJ3ByaW9yICJpZiIgY29uY2x1ZGVzIHdpdGggYSByZXR1cm4sIGJyZWFrLCBjb250aW51
ZSBvciBnb3RvIHN0YXRlbWVudC4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29udHJv
bF9mbG93XSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAg
ICAgICAgICAnaWYgKGdvbmUpXG4nCi0gICAgICAgICAgICAnICAgIHJldHVybjtcbicKLSAgICAg
ICAgICAgICdlbHNlXG4nCi0gICAgICAgICAgICAnICAgIGdvKCk7XG4nLAotICAgICAgICAgICAg
J0FuIGVsc2Ugc3RhdGVtZW50IGNhbiBiZSByZW1vdmVkIHdoZW4gdGhlIHByaW9yICJpZiIgY29u
Y2x1ZGVzICcKLSAgICAgICAgICAgICd3aXRoIGEgcmV0dXJuLCBicmVhaywgY29udGludWUgb3Ig
Z290byBzdGF0ZW1lbnQuJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxv
d10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAg
ICAgJ2lmIChtb3RpdmF0ZWQpIHtcbicKLSAgICAgICAgICAgICcgICAgcHJlcGFyZSgpO1xuJwot
ICAgICAgICAgICAgJyAgICBjb250aW51ZTtcbicKLSAgICAgICAgICAgICd9IGVsc2Uge1xuJwot
ICAgICAgICAgICAgJyAgICBjbGVhblVwKCk7XG4nCi0gICAgICAgICAgICAnICAgIGJyZWFrO1xu
JwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnQW4gZWxzZSBzdGF0ZW1lbnQgY2Fu
IGJlIHJlbW92ZWQgd2hlbiB0aGUgcHJpb3IgImlmIiBjb25jbHVkZXMgJwotICAgICAgICAgICAg
J3dpdGggYSByZXR1cm4sIGJyZWFrLCBjb250aW51ZSBvciBnb3RvIHN0YXRlbWVudC4nCi0gICAg
ICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29udHJvbF9mbG93XSBbNF0nKQotICAgICAgICBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaWYgKHRpcmVkKVxuJwotICAg
ICAgICAgICAgJyAgICBicmVhaztcbicKLSAgICAgICAgICAgICdlbHNlIHtcbicKLSAgICAgICAg
ICAgICcgICAgcHJlcGFyZSgpO1xuJwotICAgICAgICAgICAgJyAgICBjb250aW51ZTtcbicKLSAg
ICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ0FuIGVsc2Ugc3RhdGVtZW50IGNhbiBiZSBy
ZW1vdmVkIHdoZW4gdGhlIHByaW9yICJpZiIgY29uY2x1ZGVzICcKLSAgICAgICAgICAgICd3aXRo
IGEgcmV0dXJuLCBicmVhaywgY29udGludWUgb3IgZ290byBzdGF0ZW1lbnQuJwotICAgICAgICAg
ICAgJyAgW3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxvd10gWzRdJykKLQotICAgIGRlZiB0ZXN0X2Jy
YWNlcyhzZWxmKToKLSAgICAgICAgIyAxLiBGdW5jdGlvbiBkZWZpbml0aW9uczogcGxhY2UgZWFj
aCBicmFjZSBvbiBpdHMgb3duIGxpbmUuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVf
bGludCgKLSAgICAgICAgICAgICdpbnQgbWFpbigpXG4nCi0gICAgICAgICAgICAne1xuJwotICAg
ICAgICAgICAgJyAgICBkb1NvbWV0aGluZygpO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAg
ICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAg
ICAgICAgJ2ludCBtYWluKCkge1xuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZygpO1xu
JwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnUGxhY2UgYnJhY2Ugb24gaXRzIG93
biBsaW5lIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRd
JykKLQotICAgICAgICAjIDIuIE90aGVyIGJyYWNlczogcGxhY2UgdGhlIG9wZW4gYnJhY2Ugb24g
dGhlIGxpbmUgcHJlY2VkaW5nIHRoZQotICAgICAgICAjICAgIGNvZGUgYmxvY2s7IHBsYWNlIHRo
ZSBjbG9zZSBicmFjZSBvbiBpdHMgb3duIGxpbmUuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICdjbGFzcyBNeUNsYXNzIHtcbicKLSAgICAgICAgICAg
ICcgICAgaW50IGZvbztcbicKLSAgICAgICAgICAgICd9O1xuJywKLSAgICAgICAgICAgICcnKQot
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnbmFtZXNw
YWNlIFdlYkNvcmUge1xuJwotICAgICAgICAgICAgJ2ludCBmb287XG4nCi0gICAgICAgICAgICAn
fTtcbicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAotICAgICAgICAgICAgJ2ZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuJwotICAg
ICAgICAgICAgJyAgICBEb1NvbWV0aGluZygpO1xuJwotICAgICAgICAgICAgJ307XG4nLAotICAg
ICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAg
ICAgICAgICdjbGFzcyBNeUNsYXNzXG4nCi0gICAgICAgICAgICAne1xuJwotICAgICAgICAgICAg
JyAgICBpbnQgZm9vO1xuJwotICAgICAgICAgICAgJ307XG4nLAotICAgICAgICAgICAgJ1RoaXMg
eyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2Uv
YnJhY2VzXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAg
ICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAgICAg
ICAnICAgIGludCBmb287XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAgICAgICdUaGlz
IHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNl
L2JyYWNlc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAg
ICAgICAgICAgJ2ZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKylcbicKLSAgICAgICAgICAgICd7
XG4nCi0gICAgICAgICAgICAnICAgIGludCBmb287XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAg
ICAgICAgICAgICdUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxp
bmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlf
bGluZV9saW50KAotICAgICAgICAgICAgJ3doaWxlICh0cnVlKVxuJwotICAgICAgICAgICAgJ3tc
bicKLSAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKLSAgICAgICAgICAgICd9XG4nLAotICAg
ICAgICAgICAgJ1RoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGlu
ZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoCi0gICAgICAgICAgICAnZm9yZWFjaCAoRm9vKiBmb28sIGZvb3MpXG4nCi0gICAg
ICAgICAgICAne1xuJwotICAgICAgICAgICAgJyAgICBpbnQgYmFyO1xuJwotICAgICAgICAgICAg
J31cbicsCi0gICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBw
cmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdzd2l0Y2ggKHR5cGUpXG4nCi0gICAg
ICAgICAgICAne1xuJwotICAgICAgICAgICAgJ2Nhc2UgZm9vOiByZXR1cm47XG4nCi0gICAgICAg
ICAgICAnfVxuJywKLSAgICAgICAgICAgICdUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2Yg
dGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pXG4n
Ci0gICAgICAgICAgICAne1xuJwotICAgICAgICAgICAgJyAgICBpbnQgZm9vO1xuJwotICAgICAg
ICAgICAgJ31cbicsCi0gICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9m
IHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdmb3IgKGludCBpID0gMDsg
aSA8IDEwOyBpKyspXG4nCi0gICAgICAgICAgICAne1xuJwotICAgICAgICAgICAgJyAgICBpbnQg
Zm9vO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBi
ZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0
XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICd3
aGlsZSAodHJ1ZSlcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAgICAgICAnICAgIGludCBm
b287XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAgICAgICdUaGlzIHsgc2hvdWxkIGJl
IGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRd
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ3N3
aXRjaCAodHlwZSlcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAgICAgICAnY2FzZSBmb286
IHJldHVybjtcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ1RoaXMgeyBzaG91
bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2Vz
XSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAg
ICAnZWxzZSBpZiAodHlwZSlcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAgICAgICAnY2Fz
ZSBmb286IHJldHVybjtcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ1RoaXMg
eyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2Uv
YnJhY2VzXSBbNF0nKQotCi0gICAgICAgICMgMy4gT25lLWxpbmUgY29udHJvbCBjbGF1c2VzIHNo
b3VsZCBub3QgdXNlIGJyYWNlcyB1bmxlc3MKLSAgICAgICAgIyAgICBjb21tZW50cyBhcmUgaW5j
bHVkZWQgb3IgYSBzaW5nbGUgc3RhdGVtZW50IHNwYW5zIG11bHRpcGxlCi0gICAgICAgICMgICAg
bGluZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAg
ICdpZiAodHJ1ZSkge1xuJwotICAgICAgICAgICAgJyAgICBpbnQgZm9vO1xuJwotICAgICAgICAg
ICAgJ31cbicsCi0gICAgICAgICAgICAnT25lIGxpbmUgY29udHJvbCBjbGF1c2VzIHNob3VsZCBu
b3QgdXNlIGJyYWNlcy4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKLQotICAgICAgICBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnZm9yICg7IGZvbzsgYmFyKSB7
XG4nCi0gICAgICAgICAgICAnICAgIGludCBmb287XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAg
ICAgICAgICAgICdPbmUgbGluZSBjb250cm9sIGNsYXVzZXMgc2hvdWxkIG5vdCB1c2UgYnJhY2Vz
LiAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICdmb3JlYWNoIChmb28sIGZvb3MpIHtcbicKLSAgICAg
ICAgICAgICcgICAgaW50IGJhcjtcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAg
J09uZSBsaW5lIGNvbnRyb2wgY2xhdXNlcyBzaG91bGQgbm90IHVzZSBicmFjZXMuICBbd2hpdGVz
cGFjZS9icmFjZXNdIFs0XScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAotICAgICAgICAgICAgJ3doaWxlICh0cnVlKSB7XG4nCi0gICAgICAgICAgICAnICAgIGludCBm
b287XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAgICAgICdPbmUgbGluZSBjb250cm9s
IGNsYXVzZXMgc2hvdWxkIG5vdCB1c2UgYnJhY2VzLiAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0n
KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdp
ZiAodHJ1ZSlcbicKLSAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKLSAgICAgICAgICAgICdl
bHNlIHtcbicKLSAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKLSAgICAgICAgICAgICd9XG4n
LAotICAgICAgICAgICAgJ09uZSBsaW5lIGNvbnRyb2wgY2xhdXNlcyBzaG91bGQgbm90IHVzZSBi
cmFjZXMuICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmICh0cnVlKSB7XG4nCi0gICAgICAgICAg
ICAnICAgIGludCBmb287XG4nCi0gICAgICAgICAgICAnfSBlbHNlXG4nCi0gICAgICAgICAgICAn
ICAgIGludCBmb287XG4nLAotICAgICAgICAgICAgJ09uZSBsaW5lIGNvbnRyb2wgY2xhdXNlcyBz
aG91bGQgbm90IHVzZSBicmFjZXMuICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCi0KLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmICh0cnVlKSB7
XG4nCi0gICAgICAgICAgICAnICAgIC8vIFNvbWUgY29tbWVudFxuJwotICAgICAgICAgICAgJyAg
ICBpbnQgZm9vO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnJykKLQotICAg
ICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaWYgKHRydWUp
IHtcbicKLSAgICAgICAgICAgICcgICAgbXlGdW5jdGlvbihyZWFsbHlMb25nUGFyYW0xLCByZWFs
bHlMb25nUGFyYW0yLFxuJwotICAgICAgICAgICAgJyAgICAgICAgICAgICAgIHJlYWxseUxvbmdQ
YXJhbTMpO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnJykKLQotICAgICAg
ICAjIDQuIENvbnRyb2wgY2xhdXNlcyB3aXRob3V0IGEgYm9keSBzaG91bGQgdXNlIGVtcHR5IGJy
YWNlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAg
J2ZvciAoIDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQpIHsgfVxuJywKLSAgICAg
ICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAg
ICAgICAnZm9yICggOyBjdXJyZW50O1xuJwotICAgICAgICAgICAgJyAgICAgY3VycmVudCA9IGN1
cnJlbnQtPm5leHQpIHt9XG4nLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdmb3IgKCA7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5uZXh0KTtcbicsCi0gICAgICAgICAgICAnU2VtaWNvbG9uIGRlZmluaW5nIGVt
cHR5IHN0YXRlbWVudCBmb3IgdGhpcyBsb29wLiBVc2UgeyB9IGluc3RlYWQuICBbd2hpdGVzcGFj
ZS9zZW1pY29sb25dIFs1XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgK
LSAgICAgICAgICAgICd3aGlsZSAodHJ1ZSk7XG4nLAotICAgICAgICAgICAgJ1NlbWljb2xvbiBk
ZWZpbmluZyBlbXB0eSBzdGF0ZW1lbnQgZm9yIHRoaXMgbG9vcC4gVXNlIHsgfSBpbnN0ZWFkLiAg
W3doaXRlc3BhY2Uvc2VtaWNvbG9uXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoCi0gICAgICAgICAgICAnfSB3aGlsZSAodHJ1ZSk7XG4nLAotICAgICAgICAgICAg
JycpCi0KLSAgICBkZWYgdGVzdF9udWxsX2ZhbHNlX3plcm8oc2VsZik6Ci0gICAgICAgICMgMS4g
SW4gQysrLCB0aGUgbnVsbCBwb2ludGVyIHZhbHVlIHNob3VsZCBiZSB3cml0dGVuIGFzIDAuIElu
IEMsCi0gICAgICAgICMgICAgaXQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgTlVMTC4gSW4gT2JqZWN0
aXZlLUMgYW5kIE9iamVjdGl2ZS1DKyssCi0gICAgICAgICMgICAgZm9sbG93IHRoZSBndWlkZWxp
bmUgZm9yIEMgb3IgQysrLCByZXNwZWN0aXZlbHksIGJ1dCB1c2UgbmlsIHRvCi0gICAgICAgICMg
ICAgcmVwcmVzZW50IGEgbnVsbCBPYmplY3RpdmUtQyBvYmplY3QuCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoCi0gICAgICAgICAgICAnZnVuY3Rpb25DYWxsKE5VTEwpJywKLSAgICAgICAgICAg
ICdVc2UgMCBpbnN0ZWFkIG9mIE5VTEwuJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L251
bGxdIFs1XScsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoCi0gICAgICAgICAgICAiLy8gRG9uJ3QgdXNlIE5VTEwgaW4gY29tbWVudHMgc2luY2UgaXQg
aXNuJ3QgaW4gY29kZS4iLAotICAgICAgICAgICAgJ1VzZSAwIGluc3RlYWQgb2YgTlVMTC4nCi0g
ICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvbnVsbF0gWzRdJywKLSAgICAgICAgICAgICdmb28u
Y3BwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICciQSBzdHJpbmcg
d2l0aCBOVUxMIiAvLyBhbmQgYSBjb21tZW50IHdpdGggTlVMTCBpcyB0cmlja3kgdG8gZmxhZyBj
b3JyZWN0bHkgaW4gY3BwX3N0eWxlLicsCi0gICAgICAgICAgICAnVXNlIDAgaW5zdGVhZCBvZiBO
VUxMLicKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9udWxsXSBbNF0nLAotICAgICAgICAg
ICAgJ2Zvby5jcHAnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJyJB
IHN0cmluZyBjb250YWluaW5nIE5VTEwgaXMgb2siJywKLSAgICAgICAgICAgICcnLAotICAgICAg
ICAgICAgJ2Zvby5jcHAnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAg
J2lmIChhYm91dE5VTEwpJywKLSAgICAgICAgICAgICcnLAotICAgICAgICAgICAgJ2Zvby5jcHAn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ215VmFyaWFibGUgPSBO
VUxMaWZ5JywKLSAgICAgICAgICAgICcnLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotICAgICAg
ICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBOVUxMIGNoZWNrIGRvZXMgbm90IGFwcGx5IHRvIEMgYW5k
IE9iamVjdGl2ZS1DIGZpbGVzLgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAg
ICAgJ2Z1bmN0aW9uQ2FsbChOVUxMKScsCi0gICAgICAgICAgICAnJywKLSAgICAgICAgICAgICdm
b28uYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnZnVuY3Rpb25D
YWxsKE5VTEwpJywKLSAgICAgICAgICAgICcnLAotICAgICAgICAgICAgJ2Zvby5tJykKLQotICAg
ICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBOVUxMIGNoZWNrIGRvZXMgbm90IGFwcGx5IHRvIGdf
b2JqZWN0X3tzZXQsZ2V0fQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAg
J2dfb2JqZWN0X2dldChmb28sICJwcm9wIiwgJmJhciwgTlVMTCk7JywKLSAgICAgICAgICAgICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2dfb2JqZWN0X3NldChm
b28sICJwcm9wIiwgYmFyLCBOVUxMKTsnLAotICAgICAgICAgICAgJycpCi0KLSAgICAgICAgIyAy
LiBDKysgYW5kIEMgYm9vbCB2YWx1ZXMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgdHJ1ZSBhbmQKLSAg
ICAgICAgIyAgICBmYWxzZS4gT2JqZWN0aXZlLUMgQk9PTCB2YWx1ZXMgc2hvdWxkIGJlIHdyaXR0
ZW4gYXMgWUVTIGFuZCBOTy4KLSAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0KLSAg
ICAgICAgIyAzLiBUZXN0cyBmb3IgdHJ1ZS9mYWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8v
bm9uLXplcm8gc2hvdWxkCi0gICAgICAgICMgICAgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0
eSBjb21wYXJpc29ucy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdp
ZiAoY291bnQgPT0gMCknLAotICAgICAgICAgICAgJ1Rlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxs
L25vbi1udWxsLCBhbmQgemVyby9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBl
cXVhbGl0eSBjb21wYXJpc29ucy4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29tcGFy
aXNvbl90b196ZXJvXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50X29uZV9vZl9tYW55
X2Vycm9yc19yZSgKLSAgICAgICAgICAgICdpZiAoc3RyaW5nICE9IE5VTEwpJywKLSAgICAgICAg
ICAgIHInVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16
ZXJvIHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zXC4nKQot
ICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2lmIChjb25kaXRpb24gPT0g
dHJ1ZSknLAotICAgICAgICAgICAgJ1Rlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1udWxs
LCBhbmQgemVyby9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBj
b21wYXJpc29ucy4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90b196
ZXJvXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2lmICht
eVZhcmlhYmxlICE9IC8qIFdoeSB3b3VsZCBhbnlvbmUgcHV0IGEgY29tbWVudCBoZXJlPyAqLyBm
YWxzZSknLAotICAgICAgICAgICAgJ1Rlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1udWxs
LCBhbmQgemVyby9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBj
b21wYXJpc29ucy4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90b196
ZXJvXSBbNV0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaWYg
KDAgLyogVGhpcyBjb21tZW50IGFsc28gbG9va3Mgb2RkIHRvIG1lLiAqLyAhPSBhTG9uZ2VyVmFy
aWFibGVOYW1lKScsCi0gICAgICAgICAgICAnVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9u
LW51bGwsIGFuZCB6ZXJvL25vbi16ZXJvIHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFs
aXR5IGNvbXBhcmlzb25zLicKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jb21wYXJpc29u
X3RvX3plcm9dIFs1XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnRfb25lX29mX21hbnlfZXJy
b3JzX3JlKAotICAgICAgICAgICAgJ2lmIChOVUxMID09IHRoaXNNYXlCZU51bGwpJywKLSAgICAg
ICAgICAgIHInVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25v
bi16ZXJvIHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zXC4n
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2lmICh0cnVlICE9IGFu
b3RoZXJDb25kaXRpb24pJywKLSAgICAgICAgICAgICdUZXN0cyBmb3IgdHJ1ZS9mYWxzZSwgbnVs
bC9ub24tbnVsbCwgYW5kIHplcm8vbm9uLXplcm8gc2hvdWxkIGFsbCBiZSBkb25lIHdpdGhvdXQg
ZXF1YWxpdHkgY29tcGFyaXNvbnMuJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NvbXBh
cmlzb25fdG9femVyb10gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAg
ICAgICdpZiAoZmFsc2UgPT0gbXlCb29sVmFsdWUpJywKLSAgICAgICAgICAgICdUZXN0cyBmb3Ig
dHJ1ZS9mYWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8vbm9uLXplcm8gc2hvdWxkIGFsbCBi
ZSBkb25lIHdpdGhvdXQgZXF1YWxpdHkgY29tcGFyaXNvbnMuJwotICAgICAgICAgICAgJyAgW3Jl
YWRhYmlsaXR5L2NvbXBhcmlzb25fdG9femVyb10gWzVdJykKLQotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAotICAgICAgICAgICAgJ2lmIChmb250VHlwZSA9PSB0cnVlVHlwZSknLAotICAgICAg
ICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaWYgKG90
aGVydHJ1ZSA9PSBmb250VHlwZSknLAotICAgICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVzdF91
c2luZ19zdGQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAn
dXNpbmcgc3RkOjptaW47JywKLSAgICAgICAgICAgICJVc2UgJ3VzaW5nIG5hbWVzcGFjZSBzdGQ7
JyBpbnN0ZWFkIG9mICd1c2luZyBzdGQ6Om1pbjsnLiIKLSAgICAgICAgICAgICIgIFtidWlsZC91
c2luZ19zdGRdIFs0XSIsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0KLSAgICBkZWYgdGVzdF9t
YXhfbWFjcm8oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAn
aW50IGkgPSBNQVgoMCwgMSk7JywKLSAgICAgICAgICAgICcnLAotICAgICAgICAgICAgJ2Zvby5j
JykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2ludCBpID0gTUFY
KDAsIDEpOycsCi0gICAgICAgICAgICAnVXNlIHN0ZDo6bWF4KCkgb3Igc3RkOjptYXg8dHlwZT4o
KSBpbnN0ZWFkIG9mIHRoZSBNQVgoKSBtYWNyby4nCi0gICAgICAgICAgICAnICBbcnVudGltZS9t
YXhfbWluX21hY3Jvc10gWzRdJywKLSAgICAgICAgICAgICdmb28uY3BwJykKLQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2lubGluZSBpbnQgZm9vKCkgeyByZXR1cm4g
TUFYKDAsIDEpOyB9JywKLSAgICAgICAgICAgICdVc2Ugc3RkOjptYXgoKSBvciBzdGQ6Om1heDx0
eXBlPigpIGluc3RlYWQgb2YgdGhlIE1BWCgpIG1hY3JvLicKLSAgICAgICAgICAgICcgIFtydW50
aW1lL21heF9taW5fbWFjcm9zXSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5oJykKLQotICAgIGRl
ZiB0ZXN0X21pbl9tYWNybyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAg
ICAgICAgICdpbnQgaSA9IE1JTigwLCAxKTsnLAotICAgICAgICAgICAgJycsCi0gICAgICAgICAg
ICAnZm9vLmMnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaW50
IGkgPSBNSU4oMCwgMSk7JywKLSAgICAgICAgICAgICdVc2Ugc3RkOjptaW4oKSBvciBzdGQ6Om1p
bjx0eXBlPigpIGluc3RlYWQgb2YgdGhlIE1JTigpIG1hY3JvLicKLSAgICAgICAgICAgICcgIFty
dW50aW1lL21heF9taW5fbWFjcm9zXSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaW5saW5lIGludCBmb28oKSB7
IHJldHVybiBNSU4oMCwgMSk7IH0nLAotICAgICAgICAgICAgJ1VzZSBzdGQ6Om1pbigpIG9yIHN0
ZDo6bWluPHR5cGU+KCkgaW5zdGVhZCBvZiB0aGUgTUlOKCkgbWFjcm8uJwotICAgICAgICAgICAg
JyAgW3J1bnRpbWUvbWF4X21pbl9tYWNyb3NdIFs0XScsCi0gICAgICAgICAgICAnZm9vLmgnKQot
Ci0gICAgZGVmIHRlc3RfbmFtZXMoc2VsZik6Ci0gICAgICAgIG5hbWVfZXJyb3JfbWVzc2FnZSA9
ICIgaXMgaW5jb3JyZWN0bHkgbmFtZWQuIERvbid0IHVzZSB1bmRlcnNjb3JlcyBpbiB5b3VyIGlk
ZW50aWZpZXIgbmFtZXMuICBbcmVhZGFiaWxpdHkvbmFtaW5nXSBbNF0iCi0KLSAgICAgICAgIyBC
YXNpYyBjYXNlcyBmcm9tIFdlYktpdCBzdHlsZSBndWlkZS4KLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnc3RydWN0IERhdGE7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3NpemVf
dCBidWZmZXJTaXplOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdjbGFzcyBIVE1M
RG9jdW1lbnQ7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ1N0cmluZyBtaW1lVHlw
ZSgpOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzaXplX3QgYnVmZmVyX3NpemU7
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnYnVmZmVyX3NpemUnICsgbmFtZV9lcnJvcl9t
ZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzaG9ydCBtX2xlbmd0aDsnLCAnJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc2hvcnQgX2xlbmd0aDsnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICdfbGVuZ3RoJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnc2hvcnQgbGVuZ3RoXzsnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICdsZW5ndGhfJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLQotICAgICAgICAjIFBvaW50ZXJzLCBy
ZWZlcmVuY2VzLCBmdW5jdGlvbnMsIHRlbXBsYXRlcywgYW5kIGFkamVjdGl2ZXMuCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2NoYXIqIHVuZGVyX3Njb3JlOycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnY29uc3QgaW50IFVOREVSX1NDT1JFOycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJ1VOREVSX1NDT1JFJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnc3RhdGljIGlubGluZSBjb25zdCBjaGFyIGNvbnN0JiBjb25zdCB1bmRl
cl9zY29yZTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1l
X2Vycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ1dlYkNvcmU6OlJlbmRl
ck9iamVjdCogdW5kZXJfc2NvcmU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJf
c2NvcmUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdp
bnQgZnVuY19uYW1lKCk7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZnVuY19uYW1lJyAr
IG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnUmVmUHRyPFJl
bmRlck9iamVjdCo+IHVuZGVyX3Njb3JlOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3Vu
ZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnV1RGOjpWZWN0b3I8V1RGOjpSZWZQdHI8Y29uc3QgUmVuZGVyT2JqZWN0KiBjb25zdD4gPiB1
bmRlcl9zY29yZTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBu
YW1lX2Vycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCB1bmRlcl9z
Y29yZVtdOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVf
ZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RydWN0IGRpcmVudCog
dW5kZXJfc2NvcmU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsg
bmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdsb25nIHVuZGVy
X3Njb3JlOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVf
ZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnbG9uZyBsb25nIHVuZGVy
X3Njb3JlOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVf
ZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnbG9uZyBkb3VibGUgdW5k
ZXJfc2NvcmU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFt
ZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdsb25nIGxvbmcgaW50
IHVuZGVyX3Njb3JlOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyAr
IG5hbWVfZXJyb3JfbWVzc2FnZSkKLQotICAgICAgICAjIERlY2xhcmF0aW9ucyBpbiBjb250cm9s
IHN0YXRlbWVudC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaWYgKGludCB1bmRlcl9zY29y
ZSA9IDQyKSB7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFt
ZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdlbHNlIGlmIChpbnQg
dW5kZXJfc2NvcmUgPSA0MikgeycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Nj
b3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9y
IChpbnQgdW5kZXJfc2NvcmUgPSA0MjsgY29uZDsgaSsrKSB7JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxm
LmFzc2VydF9saW50KCd3aGlsZSAoZm9vICYgdW5kZXJfc2NvcmUgPSBiYXIpIHsnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvciAoZm9vICogdW5kZXJfc2NvcmUgPSBwOyBjb25k
OyBpKyspIHsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1l
X2Vycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvciAoZm9vICogdW5k
ZXJfc2NvcmU7IGNvbmQ7IGkrKykgeycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVy
X3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
d2hpbGUgKGZvbyAmIHZhbHVlX2luX3RoaXJkcGFydHlfbGlicmFyeSkgeycsICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCd3aGlsZSAoZm9vICogdmFsdWVfaW5fdGhpcmRwYXJ0eV9saWJy
YXJ5KSB7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChtbGkgJiYgU19PSyA9
PSBtbGktPmZvbygpKSB7JywgJycpCi0KLSAgICAgICAgIyBNb3JlIG1lbWJlciB2YXJpYWJsZXMg
YW5kIGZ1bmN0aW9ucy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IFNvbWVDbGFzczo6
c192YWxpZE5hbWUnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IG1fdW5kZXJf
c2NvcmU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnbV91bmRlcl9zY29yZScgKyBuYW1l
X2Vycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBTb21lQ2xhc3M6
OnNfdW5kZXJfc2NvcmUgPSAwOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWVDbGFz
czo6c191bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ2ludCBTb21lQ2xhc3M6OnVuZGVyX3Njb3JlID0gMDsnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICdTb21lQ2xhc3M6OnVuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2Fn
ZSkKLQotICAgICAgICAjIE90aGVyIHN0YXRlbWVudHMuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ3JldHVybiBJTlRfTUFYOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdyZXR1
cm5fdCB1bmRlcl9zY29yZTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29y
ZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2dvdG8g
dW5kZXJfc2NvcmU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsg
bmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdkZWxldGUgc3Rh
dGljX2Nhc3Q8Rm9vKj4ocCk7JywgJycpCi0KLSAgICAgICAgIyBNdWx0aXBsZSB2YXJpYWJsZXMg
aW4gb25lIGxpbmUuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZvaWQgbXlGdW5jdGlvbihp
bnQgdmFyaWFibGUxLCBpbnQgYW5vdGhlcl92YXJpYWJsZSk7JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAnYW5vdGhlcl92YXJpYWJsZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCB2YXJpYWJsZTEsIGFub3RoZXJfdmFyaWFibGU7JywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAnYW5vdGhlcl92YXJpYWJsZScgKyBuYW1lX2Vycm9yX21l
c3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBmaXJzdF92YXJpYWJsZSwgc2Vj
b25kVmFyaWFibGU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZmlyc3RfdmFyaWFibGUn
ICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd2b2lkIG15
X2Z1bmN0aW9uKGludCB2YXJpYWJsZV8xLCBpbnQgdmFyaWFibGVfMik7JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBbJ215X2Z1bmN0aW9uJyArIG5hbWVfZXJyb3JfbWVzc2FnZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3ZhcmlhYmxlXzEnICsgbmFtZV9lcnJvcl9tZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAndmFyaWFibGVfMicgKyBuYW1lX2Vycm9yX21lc3Nh
Z2VdKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb3IgKGludCB2YXJpYWJsZV8xLCB2YXJp
YWJsZV8yOzspIHsnLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsndmFyaWFibGVfMScgKyBu
YW1lX2Vycm9yX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICd2YXJpYWJsZV8y
JyArIG5hbWVfZXJyb3JfbWVzc2FnZV0pCi0KLSAgICAgICAgIyBUaGVyZSBpcyBhbiBleGNlcHRp
b24gZm9yIG9wIGNvZGUgZnVuY3Rpb25zIGJ1dCBvbmx5IGluIHRoZSBKYXZhU2NyaXB0Q29yZSBk
aXJlY3RvcnkuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZvaWQgdGhpc19vcF9jb2RlKGlu
dCB2YXIxLCBpbnQgdmFyMiknLCAnJywgJ0phdmFTY3JpcHRDb3JlL2Zvby5jcHAnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCd2b2lkIHRoaXNfb3BfY29kZShpbnQgdmFyMSwgaW50IHZhcjIp
JywgJ3RoaXNfb3BfY29kZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0KLSAgICAgICAgIyBUaGVy
ZSBpcyBhbiBleGNlcHRpb24gZm9yIHNvbWUgdW5pdCB0ZXN0cyB0aGF0IGJlZ2luIHdpdGggInRz
dF8iLgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd2b2lkIHRzdF9RV2ViRnJhbWU6OmFycmF5
T2JqZWN0RW51bWVyYWJsZShpbnQgdmFyMSwgaW50IHZhcjIpJywgJycpCi0KLSAgICAgICAgIyBj
b25zdF9pdGVyYXRvciBpcyBhbGxvd2VkIGFzIHdlbGwuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ3R5cGVkZWYgVmVjdG9yVHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Jywg
JycpCi0KLQotICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgotICAgICAgICAjIEEgY29tbWVu
dCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpcyBvay4KLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnLy8gY29tbWVudCcsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICAgLy8g
Y29tbWVudCcsICcnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ30gIC8vIG5hbWVzcGFj
ZSBXZWJDb3JlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnT25lIHNwYWNlIGJlZm9yZSBl
bmQgb2YgbGluZSBjb21tZW50cycKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVz
cGFjZS9jb21tZW50c10gWzVdJykKLQotICAgIGRlZiB0ZXN0X290aGVyKHNlbGYpOgotICAgICAg
ICAjIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICAgICAgcGFzcwotCi0KLSAgICBkZWYgdGVz
dF9jYW5faGFuZGxlKHNlbGYpOgotICAgICAgICAiIiJUZXN0cyBmb3IgY3BwX3N0eWxlLmNhbl9o
YW5kbGUoKS4iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRs
ZSgnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmgn
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmhw
cCcpKQotICAgICAgICBzZWxmLmFzc2VydF8oY3BwX3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jJykp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmNwcCcpKQot
ICAgICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uY2MnKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmN4eCcp
KQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uQycp
KQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28ubW0n
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnLScpKQot
Ci0KLWRlZiB0ZWFyRG93bigpOgotICAgICIiIkEgZ2xvYmFsIGNoZWNrIHRvIG1ha2Ugc3VyZSBh
bGwgZXJyb3ItY2F0ZWdvcmllcyBoYXZlIGJlZW4gdGVzdGVkLgotCi0gICAgVGhlIG1haW4gdGVh
ckRvd24oKSByb3V0aW5lIGlzIHRoZSBvbmx5IGNvZGUgd2UgY2FuIGd1YXJhbnRlZSB3aWxsIGJl
Ci0gICAgcnVuIGFmdGVyIGFsbCBvdGhlciB0ZXN0cyBoYXZlIGJlZW4gZXhlY3V0ZWQuCi0gICAg
IiIiCi0gICAgdHJ5OgotICAgICAgICBpZiBfcnVuX3ZlcmlmeWFsbGNhdGVnb3JpZXNzZWVuOgot
ICAgICAgICAgICAgRXJyb3JDb2xsZWN0b3IoTm9uZSkudmVyaWZ5X2FsbF9jYXRlZ29yaWVzX2Fy
ZV9zZWVuKCkKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAjIElmIG5vYm9keSBzZXQg
dGhlIGdsb2JhbCBfcnVuX3ZlcmlmeWFsbGNhdGVnb3JpZXNzZWVuLCB0aGVuCi0gICAgICAgICMg
d2UgYXNzdW1lIHdlIHNob3VsZG4ndCBydW4gdGhlIHRlc3QKLSAgICAgICAgcGFzcwotCi1pZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBzeXMKLSAgICAjIFdlIGRvbid0IHdh
bnQgdG8gcnVuIHRoZSB2ZXJpZnlfYWxsX2NhdGVnb3JpZXNfYXJlX3NlZW4oKSB0ZXN0IHVubGVz
cwotICAgICMgd2UncmUgcnVubmluZyB0aGUgZnVsbCB0ZXN0IHN1aXRlOiBpZiB3ZSBvbmx5IHJ1
biBvbmUgdGVzdCwKLSAgICAjIG9idmlvdXNseSB3ZSdyZSBub3QgZ29pbmcgdG8gc2VlIGFsbCB0
aGUgZXJyb3IgY2F0ZWdvcmllcy4gIFNvIHdlCi0gICAgIyBvbmx5IHJ1biB2ZXJpZnlfYWxsX2Nh
dGVnb3JpZXNfYXJlX3NlZW4oKSB3aGVuIG5vIGNvbW1hbmRsaW5lIGZsYWdzCi0gICAgIyBhcmUg
cGFzc2VkIGluLgotICAgIGdsb2JhbCBfcnVuX3ZlcmlmeWFsbGNhdGVnb3JpZXNzZWVuCi0gICAg
X3J1bl92ZXJpZnlhbGxjYXRlZ29yaWVzc2VlbiA9IChsZW4oc3lzLmFyZ3YpID09IDEpCi0KLSAg
ICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcmVk
ZW50aWFscy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3Jl
ZGVudGlhbHMucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1
bGVzL2NyZWRlbnRpYWxzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMiArMCwwIEBACi0jIENv
cHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5
cmlnaHQgKGMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyAKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSMKLSMgUHl0aG9uIG1vZHVsZSBmb3IgcmVhZGluZyBzdG9yZWQgd2ViIGNy
ZWRlbnRpYWxzIGZyb20gdGhlIE9TLgotCi1pbXBvcnQgZ2V0cGFzcwotaW1wb3J0IG9zCi1pbXBv
cnQgcGxhdGZvcm0KLWltcG9ydCByZQotCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBF
eGVjdXRpdmUKLWZyb20gbW9kdWxlcy53ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9nCi1mcm9tIG1v
ZHVsZXMuc2NtIGltcG9ydCBHaXQKLQotY2xhc3MgQ3JlZGVudGlhbHMob2JqZWN0KToKLSAgICBr
ZXljaGFpbl9lbnRyeV9ub3RfZm91bmQgPSAic2VjdXJpdHk6IFNlY0tleWNoYWluU2VhcmNoQ29w
eU5leHQ6IFRoZSBzcGVjaWZpZWQgaXRlbSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIGtleWNo
YWluLiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBnaXRfcHJlZml4PU5vbmUsIGV4
ZWN1dGl2ZT1Ob25lLCBjd2Q9b3MuZ2V0Y3dkKCkpOgotICAgICAgICBzZWxmLmhvc3QgPSBob3N0
Ci0gICAgICAgIHNlbGYuZ2l0X3ByZWZpeCA9IGdpdF9wcmVmaXgKLSAgICAgICAgc2VsZi5leGVj
dXRpdmUgPSBleGVjdXRpdmUgb3IgRXhlY3V0aXZlKCkKLSAgICAgICAgc2VsZi5jd2QgPSBjd2QK
LQotICAgIGRlZiBfY3JlZGVudGlhbHNfZnJvbV9naXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBb
c2VsZi5fcmVhZF9naXRfY29uZmlnKCJ1c2VybmFtZSIpLCBzZWxmLl9yZWFkX2dpdF9jb25maWco
InBhc3N3b3JkIildCi0KLSAgICBkZWYgX3JlYWRfZ2l0X2NvbmZpZyhzZWxmLCBrZXkpOgotICAg
ICAgICBjb25maWdfa2V5ID0gIiVzLiVzIiAlIChzZWxmLmdpdF9wcmVmaXgsIGtleSkgaWYgc2Vs
Zi5naXRfcHJlZml4IGVsc2Uga2V5Ci0gICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChbImdpdCIsICJjb25maWciLCAiLS1nZXQiLCBjb25maWdfa2V5XSwgZXJyb3JfaGFu
ZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKS5yc3RyaXAoJ1xuJykKLQotICAgIGRlZiBfa2V5
Y2hhaW5fdmFsdWVfd2l0aF9sYWJlbChzZWxmLCBsYWJlbCwgc291cmNlX3RleHQpOgotICAgICAg
ICBtYXRjaCA9IHJlLnNlYXJjaCgiJXNcIig/UDx2YWx1ZT4uKylcIiIgJSBsYWJlbCwgc291cmNl
X3RleHQsIHJlLk1VTFRJTElORSkKLSAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICByZXR1
cm4gbWF0Y2guZ3JvdXAoJ3ZhbHVlJykKLQotICAgIGRlZiBfaXNfbWFjX29zX3goc2VsZik6Ci0g
ICAgICAgIHJldHVybiBwbGF0Zm9ybS5tYWNfdmVyKClbMF0KLQotICAgIGRlZiBfcGFyc2Vfc2Vj
dXJpdHlfdG9vbF9vdXRwdXQoc2VsZiwgc2VjdXJpdHlfb3V0cHV0KToKLSAgICAgICAgaWYgc2Vj
dXJpdHlfb3V0cHV0ID09IHNlbGYua2V5Y2hhaW5fZW50cnlfbm90X2ZvdW5kOgotICAgICAgICAg
ICAgcmV0dXJuIFtOb25lLCBOb25lXQotICAgICAgICB1c2VybmFtZSA9IHNlbGYuX2tleWNoYWlu
X3ZhbHVlX3dpdGhfbGFiZWwoIl5ccypcImFjY3RcIjxibG9iPj0iLCBzZWN1cml0eV9vdXRwdXQp
Ci0gICAgICAgIHBhc3N3b3JkID0gc2VsZi5fa2V5Y2hhaW5fdmFsdWVfd2l0aF9sYWJlbCgiXnBh
c3N3b3JkOiAiLCBzZWN1cml0eV9vdXRwdXQpCi0gICAgICAgIHJldHVybiBbdXNlcm5hbWUsIHBh
c3N3b3JkXQotCi0gICAgZGVmIF9ydW5fc2VjdXJpdHlfdG9vbChzZWxmLCB1c2VybmFtZT1Ob25l
KToKLSAgICAgICAgc2VjdXJpdHlfY29tbWFuZCA9IFsiL3Vzci9iaW4vc2VjdXJpdHkiLCAiZmlu
ZC1pbnRlcm5ldC1wYXNzd29yZCIsICItZyIsICItcyIsIHNlbGYuaG9zdF0KLSAgICAgICAgaWYg
dXNlcm5hbWU6Ci0gICAgICAgICAgICBzZWN1cml0eV9jb21tYW5kICs9IFsiLWEiLCB1c2VybmFt
ZV0KLQotICAgICAgICBsb2coIlJlYWRpbmcgS2V5Y2hhaW4gZm9yICVzIGFjY291bnQgYW5kIHBh
c3N3b3JkLiAgQ2xpY2sgXCJBbGxvd1wiIHRvIGNvbnRpbnVlLi4uIiAlIHNlbGYuaG9zdCkKLSAg
ICAgICAgcmV0dXJuIHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlY3VyaXR5X2NvbW1hbmQp
Ci0KLSAgICBkZWYgX2NyZWRlbnRpYWxzX2Zyb21fa2V5Y2hhaW4oc2VsZiwgdXNlcm5hbWU9Tm9u
ZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9pc19tYWNfb3NfeCgpOgotICAgICAgICAgICAgcmV0
dXJuIFt1c2VybmFtZSwgTm9uZV0KLQotICAgICAgICBzZWN1cml0eV9vdXRwdXQgPSBzZWxmLl9y
dW5fc2VjdXJpdHlfdG9vbCh1c2VybmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlX3Nl
Y3VyaXR5X3Rvb2xfb3V0cHV0KHNlY3VyaXR5X291dHB1dCkKLQotICAgIGRlZiByZWFkX2NyZWRl
bnRpYWxzKHNlbGYpOgotICAgICAgICB1c2VybmFtZSA9IE5vbmUKLSAgICAgICAgcGFzc3dvcmQg
PSBOb25lCi0KLSAgICAgICAgaWYgR2l0LmluX3dvcmtpbmdfZGlyZWN0b3J5KHNlbGYuY3dkKToK
LSAgICAgICAgICAgICh1c2VybmFtZSwgcGFzc3dvcmQpID0gc2VsZi5fY3JlZGVudGlhbHNfZnJv
bV9naXQoKQotCi0gICAgICAgIGlmIG5vdCB1c2VybmFtZSBvciBub3QgcGFzc3dvcmQ6Ci0gICAg
ICAgICAgICAodXNlcm5hbWUsIHBhc3N3b3JkKSA9IHNlbGYuX2NyZWRlbnRpYWxzX2Zyb21fa2V5
Y2hhaW4odXNlcm5hbWUpCi0KLSAgICAgICAgaWYgbm90IHVzZXJuYW1lOgotICAgICAgICAgICAg
dXNlcm5hbWUgPSByYXdfaW5wdXQoIiVzIGxvZ2luOiAiICUgc2VsZi5ob3N0KQotICAgICAgICBp
ZiBub3QgcGFzc3dvcmQ6Ci0gICAgICAgICAgICBwYXNzd29yZCA9IGdldHBhc3MuZ2V0cGFzcygi
JXMgcGFzc3dvcmQgZm9yICVzOiAiICUgKHNlbGYuaG9zdCwgdXNlcm5hbWUpKQotCi0gICAgICAg
IHJldHVybiBbdXNlcm5hbWUsIHBhc3N3b3JkXQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9t
b2R1bGVzL2NyZWRlbnRpYWxzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy9jcmVkZW50aWFsc191bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3JlZGVudGlhbHNfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTE5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQg
b3MKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIG1vZHVsZXMuY3JlZGVu
dGlhbHMgaW1wb3J0IENyZWRlbnRpYWxzCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBF
eGVjdXRpdmUKLWZyb20gbW9kdWxlcy5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJl
Ci1mcm9tIG1vZHVsZXMubW9jayBpbXBvcnQgTW9jawotCi1jbGFzcyBDcmVkZW50aWFsc1Rlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGV4YW1wbGVfc2VjdXJpdHlfb3V0cHV0ID0gIiIia2V5
Y2hhaW46ICIvVXNlcnMvdGVzdC9MaWJyYXJ5L0tleWNoYWlucy9sb2dpbi5rZXljaGFpbiIKLWNs
YXNzOiAiaW5ldCIKLWF0dHJpYnV0ZXM6Ci0gICAgMHgwMDAwMDAwNyA8YmxvYj49ImJ1Z3Mud2Vi
a2l0Lm9yZyAodGVzdEB3ZWJraXQub3JnKSIKLSAgICAweDAwMDAwMDA4IDxibG9iPj08TlVMTD4K
LSAgICAiYWNjdCI8YmxvYj49InRlc3RAd2Via2l0Lm9yZyIKLSAgICAiYXR5cCI8YmxvYj49ImZv
cm0iCi0gICAgImNkYXQiPHRpbWVkYXRlPj0weDMyMzAzMDM5MzAzODMyMzUzMjMzMzUzMjMxMzY1
QTAwICAiMjAwOTA4MjUyMzUyMTZaXDAwMCIKLSAgICAiY3J0ciI8dWludDMyPj08TlVMTD4KLSAg
ICAiY3VzaSI8c2ludDMyPj08TlVMTD4KLSAgICAiZGVzYyI8YmxvYj49IldlYiBmb3JtIHBhc3N3
b3JkIgotICAgICJpY210IjxibG9iPj0iZGVmYXVsdCIKLSAgICAiaW52aSI8c2ludDMyPj08TlVM
TD4KLSAgICAibWRhdCI8dGltZWRhdGU+PTB4MzIzMDMwMzkzMDM5MzAzOTMxMzczMjM2MzUzMTVB
MDAgICIyMDA5MDkwOTE3MjY1MVpcMDAwIgotICAgICJuZWdhIjxzaW50MzI+PTxOVUxMPgotICAg
ICJwYXRoIjxibG9iPj08TlVMTD4KLSAgICAicG9ydCI8dWludDMyPj0weDAwMDAwMDAwIAotICAg
ICJwcm90IjxibG9iPj08TlVMTD4KLSAgICAicHRjbCI8dWludDMyPj0iaHRwcyIKLSAgICAic2Ny
cCI8c2ludDMyPj08TlVMTD4KLSAgICAic2RtbiI8YmxvYj49PE5VTEw+Ci0gICAgInNydnIiPGJs
b2I+PSJidWdzLndlYmtpdC5vcmciCi0gICAgInR5cGUiPHVpbnQzMj49PE5VTEw+Ci1wYXNzd29y
ZDogIlNFQ1JFVFNBVUNFIgotIiIiCi0KLSAgICBkZWYgdGVzdF9rZXljaGFpbl9sb29rdXBfb25f
bm9uX21hYyhzZWxmKToKLSAgICAgICAgY2xhc3MgRmFrZUNyZWRlbnRpYWxzKENyZWRlbnRpYWxz
KToKLSAgICAgICAgICAgIGRlZiBfaXNfbWFjX29zX3goc2VsZik6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCi0gICAgICAgIGNyZWRlbnRpYWxzID0gRmFrZUNyZWRlbnRpYWxzKCJidWdz
LndlYmtpdC5vcmciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWRlbnRpYWxzLl9pc19t
YWNfb3NfeCgpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVkZW50aWFscy5f
Y3JlZGVudGlhbHNfZnJvbV9rZXljaGFpbigiZm9vIiksIFsiZm9vIiwgTm9uZV0pCi0KLSAgICBk
ZWYgdGVzdF9zZWN1cml0eV9vdXRwdXRfcGFyc2Uoc2VsZik6Ci0gICAgICAgIGNyZWRlbnRpYWxz
ID0gQ3JlZGVudGlhbHMoImJ1Z3Mud2Via2l0Lm9yZyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY3JlZGVudGlhbHMuX3BhcnNlX3NlY3VyaXR5X3Rvb2xfb3V0cHV0KHNlbGYuZXhhbXBsZV9z
ZWN1cml0eV9vdXRwdXQpLCBbInRlc3RAd2Via2l0Lm9yZyIsICJTRUNSRVRTQVVDRSJdKQotCi0g
ICAgZGVmIHRlc3Rfc2VjdXJpdHlfb3V0cHV0X3BhcnNlX2VudHJ5X25vdF9mb3VuZChzZWxmKToK
LSAgICAgICAgY3JlZGVudGlhbHMgPSBDcmVkZW50aWFscygiZm9vLmV4YW1wbGUuY29tIikKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVkZW50aWFscy5fcGFyc2Vfc2VjdXJpdHlfdG9vbF9v
dXRwdXQoQ3JlZGVudGlhbHMua2V5Y2hhaW5fZW50cnlfbm90X2ZvdW5kKSwgW05vbmUsIE5vbmVd
KQotCi0gICAgZGVmIF9hc3NlcnRfc2VjdXJpdHlfY2FsbChzZWxmLCB1c2VybmFtZT1Ob25lKToK
LSAgICAgICAgZXhlY3V0aXZlX21vY2sgPSBNb2NrKCkKLSAgICAgICAgY3JlZGVudGlhbHMgPSBD
cmVkZW50aWFscygiZXhhbXBsZS5jb20iLCBleGVjdXRpdmU9ZXhlY3V0aXZlX21vY2spCi0KLSAg
ICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIlJlYWRpbmcgS2V5Y2hhaW4gZm9yIGV4YW1wbGUuY29t
IGFjY291bnQgYW5kIHBhc3N3b3JkLiAgQ2xpY2sgXCJBbGxvd1wiIHRvIGNvbnRpbnVlLi4uXG4i
Ci0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjcmVkZW50aWFs
cy5fcnVuX3NlY3VyaXR5X3Rvb2wsIFt1c2VybmFtZV0sIGV4cGVjdGVkX3N0ZGVycj1leHBlY3Rl
ZF9zdGRlcnIpCi0KLSAgICAgICAgc2VjdXJpdHlfYXJncyA9IFsiL3Vzci9iaW4vc2VjdXJpdHki
LCAiZmluZC1pbnRlcm5ldC1wYXNzd29yZCIsICItZyIsICItcyIsICJleGFtcGxlLmNvbSJdCi0g
ICAgICAgIGlmIHVzZXJuYW1lOgotICAgICAgICAgICAgc2VjdXJpdHlfYXJncyArPSBbIi1hIiwg
dXNlcm5hbWVdCi0gICAgICAgIGV4ZWN1dGl2ZV9tb2NrLnJ1bl9jb21tYW5kLmFzc2VydF9jYWxs
ZWRfd2l0aChzZWN1cml0eV9hcmdzKQotCi0gICAgZGVmIHRlc3Rfc2VjdXJpdHlfY2FsbHMoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuX2Fzc2VydF9zZWN1cml0eV9jYWxsKCkKLSAgICAgICAgc2VsZi5f
YXNzZXJ0X3NlY3VyaXR5X2NhbGwodXNlcm5hbWU9ImZvbyIpCi0KLSAgICBkZWYgdGVzdF9naXRf
Y29uZmlnX2NhbGxzKHNlbGYpOgotICAgICAgICBleGVjdXRpdmVfbW9jayA9IE1vY2soKQotICAg
ICAgICBjcmVkZW50aWFscyA9IENyZWRlbnRpYWxzKCJleGFtcGxlLmNvbSIsIGV4ZWN1dGl2ZT1l
eGVjdXRpdmVfbW9jaykKLSAgICAgICAgY3JlZGVudGlhbHMuX3JlYWRfZ2l0X2NvbmZpZygiZm9v
IikKLSAgICAgICAgZXhlY3V0aXZlX21vY2sucnVuX2NvbW1hbmQuYXNzZXJ0X2NhbGxlZF93aXRo
KFsiZ2l0IiwgImNvbmZpZyIsICItLWdldCIsICJmb28iXSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRp
dmUuaWdub3JlX2Vycm9yKQotCi0gICAgICAgIGNyZWRlbnRpYWxzID0gQ3JlZGVudGlhbHMoImV4
YW1wbGUuY29tIiwgZ2l0X3ByZWZpeD0idGVzdF9wcmVmaXgiLCBleGVjdXRpdmU9ZXhlY3V0aXZl
X21vY2spCi0gICAgICAgIGNyZWRlbnRpYWxzLl9yZWFkX2dpdF9jb25maWcoImZvbyIpCi0gICAg
ICAgIGV4ZWN1dGl2ZV9tb2NrLnJ1bl9jb21tYW5kLmFzc2VydF9jYWxsZWRfd2l0aChbImdpdCIs
ICJjb25maWciLCAiLS1nZXQiLCAidGVzdF9wcmVmaXguZm9vIl0sIGVycm9yX2hhbmRsZXI9RXhl
Y3V0aXZlLmlnbm9yZV9lcnJvcikKLQotICAgIGRlZiB0ZXN0X3JlYWRfY3JlZGVudGlhbHNfd2l0
aG91dF9naXRfcmVwbyhzZWxmKToKLSAgICAgICAgY2xhc3MgRmFrZUNyZWRlbnRpYWxzKENyZWRl
bnRpYWxzKToKLSAgICAgICAgICAgIGRlZiBfaXNfbWFjX29zX3goc2VsZik6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGRlZiBfY3JlZGVudGlhbHNfZnJvbV9rZXlj
aGFpbihzZWxmLCB1c2VybmFtZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFsidGVzdEB3ZWJr
aXQub3JnIiwgIlNFQ1JFVFNBVUNFIl0KLQotICAgICAgICB0ZW1wX2Rpcl9wYXRoID0gdGVtcGZp
bGUubWtkdGVtcChzdWZmaXg9Im5vdF9hX2dpdF9yZXBvIikKLSAgICAgICAgY3JlZGVudGlhbHMg
PSBGYWtlQ3JlZGVudGlhbHMoImJ1Z3Mud2Via2l0Lm9yZyIsIGN3ZD10ZW1wX2Rpcl9wYXRoKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWRlbnRpYWxzLnJlYWRfY3JlZGVudGlhbHMoKSwg
WyJ0ZXN0QHdlYmtpdC5vcmciLCAiU0VDUkVUU0FVQ0UiXSkKLSAgICAgICAgb3Mucm1kaXIodGVt
cF9kaXJfcGF0aCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5t
YWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9kaWZmX3BhcnNlci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvZGlmZl9wYXJzZXIucHkJ
KHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2RpZmZfcGFy
c2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MiArMCwwIEBACi0jIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
IiIiV2ViS2l0J3MgUHl0aG9uIG1vZHVsZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBwYXRjaGVzLiIi
IgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi0KLQotX3JlZ2V4cF9jb21waWxlX2NhY2hl
ID0ge30KLQotCi1kZWYgbWF0Y2gocGF0dGVybiwgc3RyaW5nKToKLSAgICAiIiJNYXRjaGVzIHRo
ZSBzdHJpbmcgd2l0aCB0aGUgcGF0dGVybiwgY2FjaGluZyB0aGUgY29tcGlsZWQgcmVnZXhwLiIi
IgotICAgIGlmIG5vdCBwYXR0ZXJuIGluIF9yZWdleHBfY29tcGlsZV9jYWNoZToKLSAgICAgICAg
X3JlZ2V4cF9jb21waWxlX2NhY2hlW3BhdHRlcm5dID0gcmUuY29tcGlsZShwYXR0ZXJuKQotICAg
IHJldHVybiBfcmVnZXhwX2NvbXBpbGVfY2FjaGVbcGF0dGVybl0ubWF0Y2goc3RyaW5nKQotCi0K
LWRlZiBnaXRfZGlmZl90b19zdm5fZGlmZihsaW5lKToKLSAgICAiIiJDb252ZXJ0cyBhIGdpdCBm
b3JtYXR0ZWQgZGlmZiBsaW5lIHRvIGEgc3ZuIGZvcm1hdHRlZCBsaW5lLgotCi0gICAgQXJnczoK
LSAgICAgIGxpbmU6IEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGxpbmUgb2YgdGhlIGRpZmYuCi0g
ICAgIiIiCi0gICAgY29udmVyc2lvbl9wYXR0ZXJucyA9ICgoIl5kaWZmIC0tZ2l0IGEvKC4rKSBi
Lyg/UDxGaWxlUGF0aD4uKykiLCBsYW1iZGEgbWF0Y2hlZDogIkluZGV4OiAiICsgbWF0Y2hlZC5n
cm91cCgnRmlsZVBhdGgnKSArICJcbiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJe
bmV3IGZpbGUuKiIsIGxhbWJkYSBtYXRjaGVkOiAiXG4iKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgiXmluZGV4IFswLTlhLWZdezd9XC5cLlswLTlhLWZdezd9IFswLTldezZ9IiwgbGFt
YmRhIG1hdGNoZWQ6ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09XG4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgiXi0tLSBhLyg/UDxGaWxlUGF0aD4uKykiLCBsYW1iZGEgbWF0Y2hlZDogIi0tLSAiICsgbWF0
Y2hlZC5ncm91cCgnRmlsZVBhdGgnKSArICJcbiIpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCJeXCtcK1wrIGIvKD9QPEZpbGVQYXRoPi4rKSIsIGxhbWJkYSBtYXRjaGVkOiAiKysrICIg
KyBtYXRjaGVkLmdyb3VwKCdGaWxlUGF0aCcpICsgIlxuIikpCi0KLSAgICBmb3IgcGF0dGVybiwg
Y29udmVyc2lvbiBpbiBjb252ZXJzaW9uX3BhdHRlcm5zOgotICAgICAgICBtYXRjaGVkID0gbWF0
Y2gocGF0dGVybiwgbGluZSkKLSAgICAgICAgaWYgbWF0Y2hlZDoKLSAgICAgICAgICAgIHJldHVy
biBjb252ZXJzaW9uKG1hdGNoZWQpCi0gICAgcmV0dXJuIGxpbmUKLQotCi1kZWYgZ2V0X2RpZmZf
Y29udmVydGVyKGZpcnN0X2RpZmZfbGluZSk6Ci0gICAgIiIiR2V0cyBhIGNvbnZlcnRlciBmdW5j
dGlvbiBvZiBkaWZmIGxpbmVzLgotCi0gICAgQXJnczoKLSAgICAgIGZpcnN0X2RpZmZfbGluZTog
VGhlIGZpcnN0IGZpbGVuYW1lIGxpbmUgb2YgYSBkaWZmIGZpbGUuCi0gICAgICAgICAgICAgICAg
ICAgICAgIElmIHRoaXMgbGluZSBpcyBnaXQgZm9ybWF0dGVkLCB3ZSdsbCByZXR1cm4gYQotICAg
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIgZnJvbSBnaXQgdG8gU1ZOLgotICAgICIiIgot
ICAgIGlmIG1hdGNoKHIiXmRpZmYgLS1naXQgYS8iLCBmaXJzdF9kaWZmX2xpbmUpOgotICAgICAg
ICByZXR1cm4gZ2l0X2RpZmZfdG9fc3ZuX2RpZmYKLSAgICByZXR1cm4gbGFtYmRhIGlucHV0OiBp
bnB1dAotCi0KLV9JTklUSUFMX1NUQVRFID0gMQotX0RFQ0xBUkVEX0ZJTEVfUEFUSCA9IDIKLV9Q
Uk9DRVNTSU5HX0NIVU5LID0gMwotCi0KLWNsYXNzIERpZmZGaWxlOgotICAgICIiIkNvbnRhaW5z
IHRoZSBpbmZvcm1hdGlvbiBmb3Igb25lIGZpbGUgaW4gYSBwYXRjaC4KLQotICAgIFRoZSBmaWVs
ZCAibGluZXMiIGlzIGEgbGlzdCB3aGljaCBjb250YWlucyB0dXBsZXMgaW4gdGhpcyBmb3JtYXQ6
Ci0gICAgICAgKGRlbGV0ZWRfbGluZV9udW1iZXIsIG5ld19saW5lX251bWJlciwgbGluZV9zdHJp
bmcpCi0gICAgSWYgZGVsZXRlZF9saW5lX251bWJlciBpcyB6ZXJvLCBpdCBtZWFucyB0aGlzIGxp
bmUgaXMgbmV3bHkgYWRkZWQuCi0gICAgSWYgbmV3X2xpbmVfbnVtYmVyIGlzIHplcm8sIGl0IG1l
YW5zIHRoaXMgbGluZSBpcyBkZWxldGVkLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGZpbGVuYW1lKToKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAg
IHNlbGYubGluZXMgPSBbXQotCi0gICAgZGVmIGFkZF9uZXdfbGluZShzZWxmLCBsaW5lX251bWJl
ciwgbGluZSk6Ci0gICAgICAgIHNlbGYubGluZXMuYXBwZW5kKCgwLCBsaW5lX251bWJlciwgbGlu
ZSkpCi0KLSAgICBkZWYgYWRkX2RlbGV0ZWRfbGluZShzZWxmLCBsaW5lX251bWJlciwgbGluZSk6
Ci0gICAgICAgIHNlbGYubGluZXMuYXBwZW5kKChsaW5lX251bWJlciwgMCwgbGluZSkpCi0KLSAg
ICBkZWYgYWRkX3VuY2hhbmdlZF9saW5lKHNlbGYsIGRlbGV0ZWRfbGluZV9udW1iZXIsIG5ld19s
aW5lX251bWJlciwgbGluZSk6Ci0gICAgICAgIHNlbGYubGluZXMuYXBwZW5kKChkZWxldGVkX2xp
bmVfbnVtYmVyLCBuZXdfbGluZV9udW1iZXIsIGxpbmUpKQotCi0KLWNsYXNzIERpZmZQYXJzZXI6
Ci0gICAgIiIiQSBwYXJzZXIgZm9yIGEgcGF0Y2ggZmlsZS4KLQotICAgIFRoZSBmaWVsZCAiZmls
ZXMiIGlzIGEgZGljdCB3aG9zZSBrZXkgaXMgdGhlIGZpbGVuYW1lIGFuZCB2YWx1ZSBpcwotICAg
IGEgRGlmZkZpbGUgb2JqZWN0LgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRp
ZmZfaW5wdXQpOgotICAgICAgICAiIiJQYXJzZXMgYSBkaWZmLgotCi0gICAgICAgIEFyZ3M6Ci0g
ICAgICAgICAgZGlmZl9pbnB1dDogQW4gaXRlcmFibGUgb2JqZWN0LgotICAgICAgICAiIiIKLSAg
ICAgICAgc3RhdGUgPSBfSU5JVElBTF9TVEFURQotCi0gICAgICAgIHNlbGYuZmlsZXMgPSB7fQot
ICAgICAgICBjdXJyZW50X2ZpbGUgPSBOb25lCi0gICAgICAgIG9sZF9kaWZmX2xpbmUgPSBOb25l
Ci0gICAgICAgIG5ld19kaWZmX2xpbmUgPSBOb25lCi0gICAgICAgIGZvciBsaW5lIGluIGRpZmZf
aW5wdXQ6Ci0gICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoIlxuIikKLSAgICAgICAgICAg
IGlmIHN0YXRlID09IF9JTklUSUFMX1NUQVRFOgotICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9s
aW5lID0gZ2V0X2RpZmZfY29udmVydGVyKGxpbmUpCi0gICAgICAgICAgICBsaW5lID0gdHJhbnNm
b3JtX2xpbmUobGluZSkKLQotICAgICAgICAgICAgZmlsZV9kZWNsYXJhdGlvbiA9IG1hdGNoKHIi
XkluZGV4OiAoP1A8RmlsZVBhdGg+LispIiwgbGluZSkKLSAgICAgICAgICAgIGlmIGZpbGVfZGVj
bGFyYXRpb246Ci0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlX2RlY2xhcmF0aW9uLmdy
b3VwKCdGaWxlUGF0aCcpCi0gICAgICAgICAgICAgICAgY3VycmVudF9maWxlID0gRGlmZkZpbGUo
ZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgc2VsZi5maWxlc1tmaWxlbmFtZV0gPSBjdXJyZW50
X2ZpbGUKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IF9ERUNMQVJFRF9GSUxFX1BBVEgKLSAgICAg
ICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBsaW5lc19jaGFuZ2VkID0gbWF0Y2go
ciJeQEAgLSg/UDxPbGRTdGFydExpbmU+XGQrKSgsXGQrKT8gXCsoP1A8TmV3U3RhcnRMaW5lPlxk
KykoLFxkKyk/IEBAIiwgbGluZSkKLSAgICAgICAgICAgIGlmIGxpbmVzX2NoYW5nZWQ6Ci0gICAg
ICAgICAgICAgICAgaWYgc3RhdGUgIT0gX0RFQ0xBUkVEX0ZJTEVfUEFUSCBhbmQgc3RhdGUgIT0g
X1BST0NFU1NJTkdfQ0hVTks6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ1Vu
ZXhwZWN0ZWQgbGluZSBjaGFuZ2Ugd2l0aG91dCBmaWxlIHBhdGggZGVjbGFyYXRpb246ICVyJyAl
IGxpbmUpCi0gICAgICAgICAgICAgICAgb2xkX2RpZmZfbGluZSA9IGludChsaW5lc19jaGFuZ2Vk
Lmdyb3VwKCdPbGRTdGFydExpbmUnKSkKLSAgICAgICAgICAgICAgICBuZXdfZGlmZl9saW5lID0g
aW50KGxpbmVzX2NoYW5nZWQuZ3JvdXAoJ05ld1N0YXJ0TGluZScpKQotICAgICAgICAgICAgICAg
IHN0YXRlID0gX1BST0NFU1NJTkdfQ0hVTksKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0g
ICAgICAgICAgICBpZiBzdGF0ZSA9PSBfUFJPQ0VTU0lOR19DSFVOSzoKLSAgICAgICAgICAgICAg
ICBpZiBsaW5lLnN0YXJ0c3dpdGgoJysnKToKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudF9m
aWxlLmFkZF9uZXdfbGluZShuZXdfZGlmZl9saW5lLCBsaW5lWzE6XSkKLSAgICAgICAgICAgICAg
ICAgICAgbmV3X2RpZmZfbGluZSArPSAxCi0gICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0
c3dpdGgoJy0nKToKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudF9maWxlLmFkZF9kZWxldGVk
X2xpbmUob2xkX2RpZmZfbGluZSwgbGluZVsxOl0pCi0gICAgICAgICAgICAgICAgICAgIG9sZF9k
aWZmX2xpbmUgKz0gMQotICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcgJyk6
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZmlsZS5hZGRfdW5jaGFuZ2VkX2xpbmUob2xk
X2RpZmZfbGluZSwgbmV3X2RpZmZfbGluZSwgbGluZVsxOl0pCi0gICAgICAgICAgICAgICAgICAg
IG9sZF9kaWZmX2xpbmUgKz0gMQotICAgICAgICAgICAgICAgICAgICBuZXdfZGlmZl9saW5lICs9
IDEKLSAgICAgICAgICAgICAgICBlbGlmIGxpbmUgPT0gJ1xcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUnOgotICAgICAgICAgICAgICAgICAgICAjIE5vdGhpbmcgdG8gZG8uICBXZSBtYXkgc3Rp
bGwgaGF2ZSBzb21lIGFkZGVkIGxpbmVzLgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignVW5l
eHBlY3RlZCBkaWZmIGZvcm1hdCB3aGVuIHBhcnNpbmcgYSBjaHVuazogJXInICUgbGluZSkKSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9kaWZmX3BhcnNlcl91bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvZGlmZl9wYXJzZXJfdW5p
dHRlc3QucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVz
L2RpZmZfcGFyc2VyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMSArMCwwIEBA
Ci0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgZGlmZl9wYXJzZXIKLQot
Ci1jbGFzcyBEaWZmUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBfUEFUQ0gg
PSAnJydkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJv
eERhdGEuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmgK
LWluZGV4IGY1ZDVlNzQuLjNiNmFhOTIgMTAwNjQ0Ci0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCi0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCi1AQCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6Ci0gCi0g
ICAgIHVuc2lnbmVkIGFsaWduIDogMzsgLy8gRUJveEFsaWdubWVudAotICAgICB1bnNpZ25lZCBw
YWNrOiAzOyAvLyBFQm94QWxpZ25tZW50Ci0tICAgIHVuc2lnbmVkIG9yaWVudDogMTsgLy8gRUJv
eE9yaWVudAotICAgICB1bnNpZ25lZCBsaW5lcyA6IDE7IC8vIEVCb3hMaW5lcwotIAotIHByaXZh
dGU6Ci1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJp
dGVkRGF0YS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWRE
YXRhLmNwcAotaW5kZXggY2UyMTcyMC4uMzI0OTI5ZSAxMDA2NDQKLS0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwCi0rKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAotQEAgLTM5LDYgKzM5LDcg
QEAgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlSW5oZXJpdGVkRGF0YSgpCi0gICAg
ICwgdGV4dFNpemVBZGp1c3QoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0U2l6ZUFkanVzdCgpKQot
ICAgICAsIHJlc2l6ZShSZW5kZXJTdHlsZTo6aW5pdGlhbFJlc2l6ZSgpKQotICAgICAsIHVzZXJT
ZWxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyU2VsZWN0KCkpCi0rICAgICwgYm94T3JpZW50
KFJlbmRlclN0eWxlOjppbml0aWFsQm94T3JpZW50KCkpCi0gewotIH0KLSAKLUBAIC01OCw2ICs1
OSw3IEBAIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6OlN0eWxlUmFyZUluaGVyaXRlZERhdGEoY29u
c3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYgbykKLSAgICAgLCB0ZXh0U2l6ZUFkanVzdChvLnRl
eHRTaXplQWRqdXN0KQotICAgICAsIHJlc2l6ZShvLnJlc2l6ZSkKLSAgICAgLCB1c2VyU2VsZWN0
KG8udXNlclNlbGVjdCkKLSsgICAgLCBib3hPcmllbnQoby5ib3hPcmllbnQpCi0gewotIH0KLSAK
LUBAIC04MSw3ICs4Myw4IEBAIGJvb2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9
PShjb25zdCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhJiBvKSBjb25zdAotICAgICAgICAgJiYga2h0
bWxMaW5lQnJlYWsgPT0gby5raHRtbExpbmVCcmVhawotICAgICAgICAgJiYgdGV4dFNpemVBZGp1
c3QgPT0gby50ZXh0U2l6ZUFkanVzdAotICAgICAgICAgJiYgcmVzaXplID09IG8ucmVzaXplCi0t
ICAgICAgICAmJiB1c2VyU2VsZWN0ID09IG8udXNlclNlbGVjdDsKLSsgICAgICAgICYmIHVzZXJT
ZWxlY3QgPT0gby51c2VyU2VsZWN0Ci0rICAgICAgICAmJiBib3hPcmllbnQgPT0gby5ib3hPcmll
bnQ7Ci0gfQotIAotIGJvb2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6c2hhZG93RGF0YUVxdWl2
YWxlbnQoY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLWRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9mbGV4Ym94L2JveC1vcmllbnQtYnV0dG9u
LWV4cGVjdGVkLmNoZWNrc3VtIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZmxleGJv
eC9ib3gtb3JpZW50LWJ1dHRvbi1leHBlY3RlZC5jaGVja3N1bQotbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLWluZGV4IDAwMDAwMDAuLjZkYjI2YmQKLS0tLSAvZGV2L251bGwKLSsrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9mYXN0L2ZsZXhib3gvYm94LW9yaWVudC1idXR0b24tZXhwZWN0ZWQu
Y2hlY2tzdW0KLUBAIC0wLDAgKzEgQEAKLSs2MWEzNzNlZTczOTY3M2E5ZGNkN2JhYzYyYjlmMTgy
ZQotXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0nJycuc3BsaXRsaW5lcygpCi0KLQotICAg
IGRlZiB0ZXN0X2RpZmZfcGFyc2VyKHNlbGYpOgotICAgICAgICBwYXJzZXIgPSBkaWZmX3BhcnNl
ci5EaWZmUGFyc2VyKHNlbGYuX1BBVENIKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzLCBs
ZW4ocGFyc2VyLmZpbGVzKSkKLQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmgnIGluIHBhcnNlci5maWxlcykKLSAg
ICAgICAgZGlmZiA9IHBhcnNlci5maWxlc1snV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVG
bGV4aWJsZUJveERhdGEuaCddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDcsIGxlbihkaWZm
LmxpbmVzKSkKLSAgICAgICAgIyBUaGUgZmlyc3QgdHdvIHVuY2hhZ2VkIGxpbmVzLgotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygoNDcsIDQ3KSwgZGlmZi5saW5lc1swXVswOjJdKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygnJywgZGlmZi5saW5lc1swXVsyXSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoKDQ4LCA0OCksIGRpZmYubGluZXNbMV1bMDoyXSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoJyAgICB1bnNpZ25lZCBhbGlnbiA6IDM7IC8vIEVCb3hBbGlnbm1lbnQnLCBk
aWZmLmxpbmVzWzFdWzJdKQotICAgICAgICAjIFRoZSBkZWxldGVkIGxpbmUKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoKDUwLCAwKSwgZGlmZi5saW5lc1szXVswOjJdKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygnICAgIHVuc2lnbmVkIG9yaWVudDogMTsgLy8gRUJveE9yaWVudCcsIGRp
ZmYubGluZXNbM11bMl0pCi0KLSAgICAgICAgIyBUaGUgZmlyc3QgZmlsZSBsb29rcyBPSy4gTGV0
J3MgY2hlY2sgdGhlIG5leHQsIG1vcmUgY29tcGxpY2F0ZWQgZmlsZS4KLSAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKCdXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRh
LmNwcCcgaW4gcGFyc2VyLmZpbGVzKQotICAgICAgICBkaWZmID0gcGFyc2VyLmZpbGVzWydXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcCddCi0gICAgICAg
ICMgVGhlcmUgYXJlIDMgY2h1bmtzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg3ICsgNyAr
IDksIGxlbihkaWZmLmxpbmVzKSkKLSAgICAgICAgIyBBcm91bmQgYW4gYWRkZWQgbGluZS4KLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDYwLCA2MSksIGRpZmYubGluZXNbOV1bMDoyXSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDAsIDYyKSwgZGlmZi5saW5lc1sxMF1bMDoyXSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDYxLCA2MyksIGRpZmYubGluZXNbMTFdWzA6Ml0pCi0g
ICAgICAgICMgTG9vayB0aHJvdWdoIHRoZSBsYXN0IGNodW5rLCB3aGljaCBjb250YWlucyBib3Ro
IGFkZCdzIGFuZCBkZWxldGUncy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDgxLCA4Myks
IGRpZmYubGluZXNbMTRdWzA6Ml0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg4MiwgODQp
LCBkaWZmLmxpbmVzWzE1XVswOjJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoODMsIDg1
KSwgZGlmZi5saW5lc1sxNl1bMDoyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDg0LCAw
KSwgZGlmZi5saW5lc1sxN11bMDoyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDAsIDg2
KSwgZGlmZi5saW5lc1sxOF1bMDoyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDAsIDg3
KSwgZGlmZi5saW5lc1sxOV1bMDoyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDg1LCA4
OCksIGRpZmYubGluZXNbMjBdWzA6Ml0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg4Niwg
ODkpLCBkaWZmLmxpbmVzWzIxXVswOjJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoODcs
IDkwKSwgZGlmZi5saW5lc1syMl1bMDoyXSkKLQotICAgICAgICAjIENoZWNrIGlmIGEgbmV3bHkg
YWRkZWQgZmlsZSBpcyBjb3JyZWN0bHkgaGFuZGxlZC4KLSAgICAgICAgZGlmZiA9IHBhcnNlci5m
aWxlc1snTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZmxleGJveC9ib3gtb3JpZW50LWJ1
dHRvbi1leHBlY3RlZC5jaGVja3N1bSddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxl
bihkaWZmLmxpbmVzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDAsIDEpLCBkaWZmLmxp
bmVzWzBdWzA6Ml0pCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVz
dC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9leGVjdXRpdmUucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2V4ZWN1dGl2ZS5weQko
cmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvZXhlY3V0aXZl
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzNiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAw
OSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LWltcG9ydCBvcwotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5
cwotCi1mcm9tIG1vZHVsZXMud2Via2l0X2xvZ2dpbmcgaW1wb3J0IHRlZQotCi0KLWNsYXNzIFNj
cmlwdEVycm9yKEV4Y2VwdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2U9Tm9u
ZSwgc2NyaXB0X2FyZ3M9Tm9uZSwgZXhpdF9jb2RlPU5vbmUsIG91dHB1dD1Ob25lLCBjd2Q9Tm9u
ZSk6Ci0gICAgICAgIGlmIG5vdCBtZXNzYWdlOgotICAgICAgICAgICAgbWVzc2FnZSA9ICdGYWls
ZWQgdG8gcnVuICIlcyInICUgc2NyaXB0X2FyZ3MKLSAgICAgICAgICAgIGlmIGV4aXRfY29kZToK
LSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIgZXhpdF9jb2RlOiAlZCIgJSBleGl0X2NvZGUK
LSAgICAgICAgICAgIGlmIGN3ZDoKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIgY3dkOiAl
cyIgJSBjd2QKLQotICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbWVzc2FnZSkKLSAg
ICAgICAgc2VsZi5zY3JpcHRfYXJncyA9IHNjcmlwdF9hcmdzICMgJ2FyZ3MnIGlzIGFscmVhZHkg
dXNlZCBieSBFeGNlcHRpb24KLSAgICAgICAgc2VsZi5leGl0X2NvZGUgPSBleGl0X2NvZGUKLSAg
ICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKLSAgICAgICAgc2VsZi5jd2QgPSBjd2QKLQotICAg
IGRlZiBtZXNzYWdlX3dpdGhfb3V0cHV0KHNlbGYsIG91dHB1dF9saW1pdD01MDApOgotICAgICAg
ICBpZiBzZWxmLm91dHB1dDoKLSAgICAgICAgICAgIGlmIG91dHB1dF9saW1pdCBhbmQgbGVuKHNl
bGYub3V0cHV0KSA+IG91dHB1dF9saW1pdDoKLSAgICAgICAgICAgICAgICAgcmV0dXJuICIlc1xu
TGFzdCAlcyBjaGFyYWN0ZXJzIG9mIG91dHB1dDpcbiVzIiAlIChzZWxmLCBvdXRwdXRfbGltaXQs
IHNlbGYub3V0cHV0Wy1vdXRwdXRfbGltaXQ6XSkKLSAgICAgICAgICAgIHJldHVybiAiJXNcbiVz
IiAlIChzZWxmLCBzZWxmLm91dHB1dCkKLSAgICAgICAgcmV0dXJuIHN0cihzZWxmKQotCi0gICAg
ZGVmIGNvbW1hbmRfbmFtZShzZWxmKToKLSAgICAgICAgY29tbWFuZF9wYXRoID0gc2VsZi5zY3Jp
cHRfYXJncwotICAgICAgICBpZiB0eXBlKGNvbW1hbmRfcGF0aCkgaXMgbGlzdDoKLSAgICAgICAg
ICAgIGNvbW1hbmRfcGF0aCA9IGNvbW1hbmRfcGF0aFswXQotICAgICAgICByZXR1cm4gb3MucGF0
aC5iYXNlbmFtZShjb21tYW5kX3BhdGgpCi0KLQotIyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJl
IGEgZ2xvYmFsIHN0YXRpYy4KLSMgTmV3IGNvZGUgc2hvdWxkIHVzZSBFeGVjdXRpdmUucnVuX2Nv
bW1hbmQgZGlyZWN0bHkgaW5zdGVhZAotZGVmIHJ1bl9jb21tYW5kKCphcmdzLCAqKmt3YXJncyk6
Ci0gICAgcmV0dXJuIEV4ZWN1dGl2ZSgpLnJ1bl9jb21tYW5kKCphcmdzLCAqKmt3YXJncykKLQot
Ci1jbGFzcyBFeGVjdXRpdmUob2JqZWN0KToKLSAgICBkZWYgX3J1bl9jb21tYW5kX3dpdGhfdGVl
ZF9vdXRwdXQoc2VsZiwgYXJncywgdGVlZF9vdXRwdXQpOgotICAgICAgICBjaGlsZF9wcm9jZXNz
ID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9
c3VicHJvY2Vzcy5TVERPVVQpCi0KLSAgICAgICAgIyBVc2Ugb3VyIG93biBjdXN0b20gd2FpdCBs
b29wIGJlY2F1c2UgUG9wZW4gaWdub3JlcyBhIHRlZSdkIHN0ZGVyci9zdGRvdXQuCi0gICAgICAg
ICMgRklYTUU6IFRoaXMgY291bGQgYmUgaW1wcm92ZWQgbm90IHRvIGZsYXR0ZW4gb3V0cHV0IHRv
IHN0ZG91dC4KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIG91dHB1dF9saW5lID0g
Y2hpbGRfcHJvY2Vzcy5zdGRvdXQucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgb3V0cHV0X2xp
bmUgPT0gIiIgYW5kIGNoaWxkX3Byb2Nlc3MucG9sbCgpICE9IE5vbmU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkX3Byb2Nlc3MucG9sbCgpCi0gICAgICAgICAgICB0ZWVkX291dHB1dC53
cml0ZShvdXRwdXRfbGluZSkKLQotICAgIGRlZiBydW5fYW5kX3Rocm93X2lmX2ZhaWwoc2VsZiwg
YXJncywgcXVpZXQ9RmFsc2UpOgotICAgICAgICAjIENhY2hlIHRoZSBjaGlsZCdzIG91dHB1dCBs
b2NhbGx5IHNvIGl0IGNhbiBiZSB1c2VkIGZvciBlcnJvciByZXBvcnRzLgotICAgICAgICBjaGls
ZF9vdXRfZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICAgICAgaWYgcXVpZXQ6Ci0gICAg
ICAgICAgICBkZXZfbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCwgInciKQotICAgICAgICBjaGlsZF9z
dGRvdXQgPSB0ZWUoY2hpbGRfb3V0X2ZpbGUsIGRldl9udWxsIGlmIHF1aWV0IGVsc2Ugc3lzLnN0
ZG91dCkKLSAgICAgICAgZXhpdF9jb2RlID0gc2VsZi5fcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291
dHB1dChhcmdzLCBjaGlsZF9zdGRvdXQpCi0gICAgICAgIGlmIHF1aWV0OgotICAgICAgICAgICAg
ZGV2X251bGwuY2xvc2UoKQotCi0gICAgICAgIGNoaWxkX291dHB1dCA9IGNoaWxkX291dF9maWxl
LmdldHZhbHVlKCkKLSAgICAgICAgY2hpbGRfb3V0X2ZpbGUuY2xvc2UoKQotCi0gICAgICAgIGlm
IGV4aXRfY29kZToKLSAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKHNjcmlwdF9hcmdzPWFy
Z3MsIGV4aXRfY29kZT1leGl0X2NvZGUsIG91dHB1dD1jaGlsZF9vdXRwdXQpCi0KLSAgICAjIEVy
cm9yIGhhbmRsZXJzIGRvIG5vdCBuZWVkIHRvIGJlIHN0YXRpYyBtZXRob2RzIG9uY2UgYWxsIGNh
bGxlcnMgYXJlIHVwZGF0ZWQgdG8gdXNlIGFuIEV4ZWN1dGl2ZSBvYmplY3QuCi0gICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBkZWZhdWx0X2Vycm9yX2hhbmRsZXIoZXJyb3IpOgotICAgICAgICBy
YWlzZSBlcnJvcgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBpZ25vcmVfZXJyb3IoZXJy
b3IpOgotICAgICAgICBwYXNzCi0KLSAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtZXJnZWQg
d2l0aCBydW5fYW5kX3Rocm93X2lmX2ZhaWwKLSAgICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwgYXJn
cywgY3dkPU5vbmUsIGlucHV0PU5vbmUsIGVycm9yX2hhbmRsZXI9Tm9uZSwgcmV0dXJuX2V4aXRf
Y29kZT1GYWxzZSwgcmV0dXJuX3N0ZGVycj1UcnVlKToKLSAgICAgICAgaWYgaGFzYXR0cihpbnB1
dCwgJ3JlYWQnKTogIyBDaGVjayBpZiB0aGUgaW5wdXQgaXMgYSBmaWxlLgotICAgICAgICAgICAg
c3RkaW4gPSBpbnB1dAotICAgICAgICAgICAgc3RyaW5nX3RvX2NvbW11bmljYXRlID0gTm9uZQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3RkaW4gPSBzdWJwcm9jZXNzLlBJUEUgaWYgaW5w
dXQgZWxzZSBOb25lCi0gICAgICAgICAgICBzdHJpbmdfdG9fY29tbXVuaWNhdGUgPSBpbnB1dAot
ICAgICAgICBpZiByZXR1cm5fc3RkZXJyOgotICAgICAgICAgICAgc3RkZXJyID0gc3VicHJvY2Vz
cy5TVERPVVQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc3Rk
aW49c3RkaW4sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdGRlcnIsIGN3ZD1jd2Qp
Ci0gICAgICAgICAgICBvdXRwdXQgPSBwcm9jZXNzLmNvbW11bmljYXRlKHN0cmluZ190b19jb21t
dW5pY2F0ZSlbMF0KLSAgICAgICAgICAgIGV4aXRfY29kZSA9IHByb2Nlc3Mud2FpdCgpCi0gICAg
ICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgIyBDYXRjaCBPU0Vycm9yIGV4Y2Vw
dGlvbnMuIEZvciBleGFtcGxlLCAibm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIgKGkuZS4gT1NF
cnJvciBlcnJubyAyKSwKLSAgICAgICAgICAgICMgd2hlbiB0aGUgY29tbWFuZCBjYW5ub3QgYmUg
Zm91bmQuCi0gICAgICAgICAgICBvdXRwdXQgPSBlLnN0cmVycm9yCi0gICAgICAgICAgICBleGl0
X2NvZGUgPSBlLmVycm5vCi0gICAgICAgIGlmIGV4aXRfY29kZToKLSAgICAgICAgICAgIHNjcmlw
dF9lcnJvciA9IFNjcmlwdEVycm9yKHNjcmlwdF9hcmdzPWFyZ3MsIGV4aXRfY29kZT1leGl0X2Nv
ZGUsIG91dHB1dD1vdXRwdXQsIGN3ZD1jd2QpCi0gICAgICAgICAgICAoZXJyb3JfaGFuZGxlciBv
ciBzZWxmLmRlZmF1bHRfZXJyb3JfaGFuZGxlcikoc2NyaXB0X2Vycm9yKQotICAgICAgICBpZiBy
ZXR1cm5fZXhpdF9jb2RlOgotICAgICAgICAgICAgcmV0dXJuIGV4aXRfY29kZQotICAgICAgICBy
ZXR1cm4gb3V0cHV0CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvZXhlY3V0aXZl
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9l
eGVjdXRpdmVfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy9tb2R1bGVzL2V4ZWN1dGl2ZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0
OCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMDkgRGFuaWVsIEJhdGVzIChkYmF0ZXNAaW50dWRh
dGEuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1
bml0dGVzdAotZnJvbSBtb2R1bGVzLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRF
cnJvciwgcnVuX2NvbW1hbmQKLQotY2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0KLSAgICBkZWYgdGVzdF9ydW5fY29tbWFuZF93aXRoX2JhZF9jb21tYW5kX2NoZWNrX3Jl
dHVybl9jb2RlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bl9jb21tYW5kKFsi
Zm9vX2Jhcl9jb21tYW5kX2JsYWgiXSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vy
cm9yLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpLCAyKQotCi0gICAgZGVmIHRlc3RfcnVuX2NvbW1h
bmRfd2l0aF9iYWRfY29tbWFuZF9jaGVja19jYWxsc19lcnJvcl9oYW5kbGVyKHNlbGYpOgotICAg
ICAgICBzZWxmLmRpZEhhbmRsZUVycm9yR2V0Q2FsbGVkID0gRmFsc2UKLSAgICAgICAgZGVmIGhh
bmRsZUVycm9yKHNjcmlwdEVycm9yKToKLSAgICAgICAgICAgIHNlbGYuZGlkSGFuZGxlRXJyb3JH
ZXRDYWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjcmlwdEVycm9y
LmV4aXRfY29kZSwgMikKLQotICAgICAgICBydW5fY29tbWFuZChbImZvb19iYXJfY29tbWFuZF9i
bGFoIl0sIGVycm9yX2hhbmRsZXI9aGFuZGxlRXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShzZWxmLmRpZEhhbmRsZUVycm9yR2V0Q2FsbGVkKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1
bGVzL2dyYW1tYXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVz
L2dyYW1tYXIucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1
bGVzL2dyYW1tYXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNDMgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IHJlCi0KLWRlZiBwbHVyYWwo
bm91bik6Ci0gICAgIyBUaGlzIGlzIGEgZHVtYiBwbHVyYWwoKSBpbXBsZW1lbnRhdGlvbiB3aGlj
aCB3YXMganVzdCBlbm91Z2ggZm9yIG91ciB1c2VzLgotICAgIGlmIHJlLnNlYXJjaCgiaCQiLCBu
b3VuKToKLSAgICAgICAgcmV0dXJuIG5vdW4gKyAiZXMiCi0gICAgZWxzZToKLSAgICAgICAgcmV0
dXJuIG5vdW4gKyAicyIKLQotZGVmIHBsdXJhbGl6ZShub3VuLCBjb3VudCk6Ci0gICAgaWYgY291
bnQgIT0gMToKLSAgICAgICAgbm91biA9IHBsdXJhbChub3VuKQotICAgIHJldHVybiAiJWQgJXMi
ICUgKGNvdW50LCBub3VuKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL21vY2su
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL21vY2sucHkJKHJl
dmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL21vY2sucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzA5ICswLDAgQEAKLSMgbW9jay5weQ0KLSMgVGVzdCB0b29scyBm
b3IgbW9ja2luZyBhbmQgcGF0Y2hpbmcuDQotIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBNaWNo
YWVsIEZvb3JkDQotIyBFLW1haWw6IGZ1enp5bWFuIEFUIHZvaWRzcGFjZSBET1Qgb3JnIERPVCB1
aw0KLQ0KLSMgbW9jayAwLjYuMA0KLSMgaHR0cDovL3d3dy52b2lkc3BhY2Uub3JnLnVrL3B5dGhv
bi9tb2NrLw0KLQ0KLSMgUmVsZWFzZWQgc3ViamVjdCB0byB0aGUgQlNEIExpY2Vuc2UNCi0jIFBs
ZWFzZSBzZWUgaHR0cDovL3d3dy52b2lkc3BhY2Uub3JnLnVrL3B5dGhvbi9saWNlbnNlLnNodG1s
DQotDQotIyAyMDA5LTExLTI1OiBMaWNlbmNlIGRvd25sb2FkZWQgZnJvbSBhYm92ZSBVUkwuDQot
IyBCRUdJTiBET1dOTE9BREVEIExJQ0VOU0UNCi0jDQotIyBDb3B5cmlnaHQgKGMpIDIwMDMtMjAw
OSwgTWljaGFlbCBGb29yZA0KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0jIEUtbWFpbCA6IGZ1
enp5bWFuIEFUIHZvaWRzcGFjZSBET1Qgb3JnIERPVCB1aw0KLSMgDQotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCi0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUNCi0jIG1ldDoNCi0jIA0KLSMgDQotIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KLSMgICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLg0KLSMgDQotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlDQotIyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZw0KLSMgICAgICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkDQotIyAg
ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQotIyANCi0jICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgTWljaGFlbCBGb29yZCBub3IgdGhlIG5hbWUgb2YgVm9pZHNwYWNlDQotIyAgICAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMNCi0jICAgICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLg0KLSMgDQotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
DQotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVA0KLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQotIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQotIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwNCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KLSMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLg0KLSMNCi0jIEVORCBET1dOTE9BREVEIExJQ0VOU0UNCi0NCi0jIFNjcmlw
dHMgbWFpbnRhaW5lZCBhdCBodHRwOi8vd3d3LnZvaWRzcGFjZS5vcmcudWsvcHl0aG9uL2luZGV4
LnNodG1sDQotIyBDb21tZW50cywgc3VnZ2VzdGlvbnMgYW5kIGJ1ZyByZXBvcnRzIHdlbGNvbWUu
DQotDQotDQotX19hbGxfXyA9ICgNCi0gICAgJ01vY2snLA0KLSAgICAncGF0Y2gnLA0KLSAgICAn
cGF0Y2hfb2JqZWN0JywNCi0gICAgJ3NlbnRpbmVsJywNCi0gICAgJ0RFRkFVTFQnDQotKQ0KLQ0K
LV9fdmVyc2lvbl9fID0gJzAuNi4wJw0KLQ0KLWNsYXNzIFNlbnRpbmVsT2JqZWN0KG9iamVjdCk6
DQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToNCi0gICAgICAgIHNlbGYubmFtZSA9IG5h
bWUNCi0gICAgICAgIA0KLSAgICBkZWYgX19yZXByX18oc2VsZik6DQotICAgICAgICByZXR1cm4g
JzxTZW50aW5lbE9iamVjdCAiJXMiPicgJSBzZWxmLm5hbWUNCi0NCi0NCi1jbGFzcyBTZW50aW5l
bChvYmplY3QpOg0KLSAgICBkZWYgX19pbml0X18oc2VsZik6DQotICAgICAgICBzZWxmLl9zZW50
aW5lbHMgPSB7fQ0KLSAgICAgICAgDQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToN
Ci0gICAgICAgIHJldHVybiBzZWxmLl9zZW50aW5lbHMuc2V0ZGVmYXVsdChuYW1lLCBTZW50aW5l
bE9iamVjdChuYW1lKSkNCi0gICAgDQotICAgIA0KLXNlbnRpbmVsID0gU2VudGluZWwoKQ0KLQ0K
LURFRkFVTFQgPSBzZW50aW5lbC5ERUZBVUxUDQotDQotY2xhc3MgT2xkU3R5bGVDbGFzczoNCi0g
ICAgcGFzcw0KLUNsYXNzVHlwZSA9IHR5cGUoT2xkU3R5bGVDbGFzcykNCi0NCi1kZWYgX2lzX21h
Z2ljKG5hbWUpOg0KLSAgICByZXR1cm4gJ19fJXNfXycgJSBuYW1lWzI6LTJdID09IG5hbWUNCi0N
Ci1kZWYgX2NvcHkodmFsdWUpOg0KLSAgICBpZiB0eXBlKHZhbHVlKSBpbiAoZGljdCwgbGlzdCwg
dHVwbGUsIHNldCk6DQotICAgICAgICByZXR1cm4gdHlwZSh2YWx1ZSkodmFsdWUpDQotICAgIHJl
dHVybiB2YWx1ZQ0KLQ0KLQ0KLWNsYXNzIE1vY2sob2JqZWN0KToNCi0NCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIHNwZWM9Tm9uZSwgc2lkZV9lZmZlY3Q9Tm9uZSwgcmV0dXJuX3ZhbHVlPURFRkFV
TFQsIA0KLSAgICAgICAgICAgICAgICAgbmFtZT1Ob25lLCBwYXJlbnQ9Tm9uZSwgd3JhcHM9Tm9u
ZSk6DQotICAgICAgICBzZWxmLl9wYXJlbnQgPSBwYXJlbnQNCi0gICAgICAgIHNlbGYuX25hbWUg
PSBuYW1lDQotICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShz
cGVjLCBsaXN0KToNCi0gICAgICAgICAgICBzcGVjID0gW21lbWJlciBmb3IgbWVtYmVyIGluIGRp
cihzcGVjKSBpZiBub3QgX2lzX21hZ2ljKG1lbWJlcildDQotICAgICAgICANCi0gICAgICAgIHNl
bGYuX21ldGhvZHMgPSBzcGVjDQotICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IHt9DQotICAgICAg
ICBzZWxmLl9yZXR1cm5fdmFsdWUgPSByZXR1cm5fdmFsdWUNCi0gICAgICAgIHNlbGYuc2lkZV9l
ZmZlY3QgPSBzaWRlX2VmZmVjdA0KLSAgICAgICAgc2VsZi5fd3JhcHMgPSB3cmFwcw0KLSAgICAg
ICAgDQotICAgICAgICBzZWxmLnJlc2V0X21vY2soKQ0KLSAgICAgICAgDQotDQotICAgIGRlZiBy
ZXNldF9tb2NrKHNlbGYpOg0KLSAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQ0KLSAgICAgICAg
c2VsZi5jYWxsX2FyZ3MgPSBOb25lDQotICAgICAgICBzZWxmLmNhbGxfY291bnQgPSAwDQotICAg
ICAgICBzZWxmLmNhbGxfYXJnc19saXN0ID0gW10NCi0gICAgICAgIHNlbGYubWV0aG9kX2NhbGxz
ID0gW10NCi0gICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLl9jaGlsZHJlbi5pdGVydmFsdWVzKCk6
DQotICAgICAgICAgICAgY2hpbGQucmVzZXRfbW9jaygpDQotICAgICAgICBpZiBpc2luc3RhbmNl
KHNlbGYuX3JldHVybl92YWx1ZSwgTW9jayk6DQotICAgICAgICAgICAgc2VsZi5fcmV0dXJuX3Zh
bHVlLnJlc2V0X21vY2soKQ0KLSAgICAgICAgDQotICAgIA0KLSAgICBkZWYgX19nZXRfcmV0dXJu
X3ZhbHVlKHNlbGYpOg0KLSAgICAgICAgaWYgc2VsZi5fcmV0dXJuX3ZhbHVlIGlzIERFRkFVTFQ6
DQotICAgICAgICAgICAgc2VsZi5fcmV0dXJuX3ZhbHVlID0gTW9jaygpDQotICAgICAgICByZXR1
cm4gc2VsZi5fcmV0dXJuX3ZhbHVlDQotICAgIA0KLSAgICBkZWYgX19zZXRfcmV0dXJuX3ZhbHVl
KHNlbGYsIHZhbHVlKToNCi0gICAgICAgIHNlbGYuX3JldHVybl92YWx1ZSA9IHZhbHVlDQotICAg
ICAgICANCi0gICAgcmV0dXJuX3ZhbHVlID0gcHJvcGVydHkoX19nZXRfcmV0dXJuX3ZhbHVlLCBf
X3NldF9yZXR1cm5fdmFsdWUpDQotDQotDQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywg
Kiprd2FyZ3MpOg0KLSAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlDQotICAgICAgICBzZWxmLmNh
bGxfY291bnQgKz0gMQ0KLSAgICAgICAgc2VsZi5jYWxsX2FyZ3MgPSAoYXJncywga3dhcmdzKQ0K
LSAgICAgICAgc2VsZi5jYWxsX2FyZ3NfbGlzdC5hcHBlbmQoKGFyZ3MsIGt3YXJncykpDQotICAg
ICAgICANCi0gICAgICAgIHBhcmVudCA9IHNlbGYuX3BhcmVudA0KLSAgICAgICAgbmFtZSA9IHNl
bGYuX25hbWUNCi0gICAgICAgIHdoaWxlIHBhcmVudCBpcyBub3QgTm9uZToNCi0gICAgICAgICAg
ICBwYXJlbnQubWV0aG9kX2NhbGxzLmFwcGVuZCgobmFtZSwgYXJncywga3dhcmdzKSkNCi0gICAg
ICAgICAgICBpZiBwYXJlbnQuX3BhcmVudCBpcyBOb25lOg0KLSAgICAgICAgICAgICAgICBicmVh
aw0KLSAgICAgICAgICAgIG5hbWUgPSBwYXJlbnQuX25hbWUgKyAnLicgKyBuYW1lDQotICAgICAg
ICAgICAgcGFyZW50ID0gcGFyZW50Ll9wYXJlbnQNCi0gICAgICAgIA0KLSAgICAgICAgcmV0X3Zh
bCA9IERFRkFVTFQNCi0gICAgICAgIGlmIHNlbGYuc2lkZV9lZmZlY3QgaXMgbm90IE5vbmU6DQot
ICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2Uoc2VsZi5zaWRlX2VmZmVjdCwgRXhjZXB0aW9uKSBv
ciANCi0gICAgICAgICAgICAgICAgaXNpbnN0YW5jZShzZWxmLnNpZGVfZWZmZWN0LCAodHlwZSwg
Q2xhc3NUeXBlKSkgYW5kDQotICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Moc2VsZi5zaWRlX2Vm
ZmVjdCwgRXhjZXB0aW9uKSk6DQotICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuc2lkZV9lZmZl
Y3QNCi0gICAgICAgICAgICANCi0gICAgICAgICAgICByZXRfdmFsID0gc2VsZi5zaWRlX2VmZmVj
dCgqYXJncywgKiprd2FyZ3MpDQotICAgICAgICAgICAgaWYgcmV0X3ZhbCBpcyBERUZBVUxUOg0K
LSAgICAgICAgICAgICAgICByZXRfdmFsID0gc2VsZi5yZXR1cm5fdmFsdWUNCi0gICAgICAgIA0K
LSAgICAgICAgaWYgc2VsZi5fd3JhcHMgaXMgbm90IE5vbmUgYW5kIHNlbGYuX3JldHVybl92YWx1
ZSBpcyBERUZBVUxUOg0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLl93cmFwcygqYXJncywgKipr
d2FyZ3MpDQotICAgICAgICBpZiByZXRfdmFsIGlzIERFRkFVTFQ6DQotICAgICAgICAgICAgcmV0
X3ZhbCA9IHNlbGYucmV0dXJuX3ZhbHVlDQotICAgICAgICByZXR1cm4gcmV0X3ZhbA0KLSAgICAN
Ci0gICAgDQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToNCi0gICAgICAgIGlmIHNl
bGYuX21ldGhvZHMgaXMgbm90IE5vbmU6DQotICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc2Vs
Zi5fbWV0aG9kczoNCi0gICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIk1vY2sg
b2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJSBuYW1lKQ0KLSAgICAgICAgZWxpZiBfaXNf
bWFnaWMobmFtZSk6DQotICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkNCi0g
ICAgICAgIA0KLSAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5fY2hpbGRyZW46DQotICAgICAg
ICAgICAgd3JhcHMgPSBOb25lDQotICAgICAgICAgICAgaWYgc2VsZi5fd3JhcHMgaXMgbm90IE5v
bmU6DQotICAgICAgICAgICAgICAgIHdyYXBzID0gZ2V0YXR0cihzZWxmLl93cmFwcywgbmFtZSkN
Ci0gICAgICAgICAgICBzZWxmLl9jaGlsZHJlbltuYW1lXSA9IE1vY2socGFyZW50PXNlbGYsIG5h
bWU9bmFtZSwgd3JhcHM9d3JhcHMpDQotICAgICAgICAgICAgDQotICAgICAgICByZXR1cm4gc2Vs
Zi5fY2hpbGRyZW5bbmFtZV0NCi0gICAgDQotICAgIA0KLSAgICBkZWYgYXNzZXJ0X2NhbGxlZF93
aXRoKHNlbGYsICphcmdzLCAqKmt3YXJncyk6DQotICAgICAgICBhc3NlcnQgc2VsZi5jYWxsX2Fy
Z3MgPT0gKGFyZ3MsIGt3YXJncyksICdFeHBlY3RlZDogJXNcbkNhbGxlZCB3aXRoOiAlcycgJSAo
KGFyZ3MsIGt3YXJncyksIHNlbGYuY2FsbF9hcmdzKQ0KLSAgICAgICAgDQotDQotZGVmIF9kb3Rf
bG9va3VwKHRoaW5nLCBjb21wLCBpbXBvcnRfcGF0aCk6DQotICAgIHRyeToNCi0gICAgICAgIHJl
dHVybiBnZXRhdHRyKHRoaW5nLCBjb21wKQ0KLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6DQot
ICAgICAgICBfX2ltcG9ydF9fKGltcG9ydF9wYXRoKQ0KLSAgICAgICAgcmV0dXJuIGdldGF0dHIo
dGhpbmcsIGNvbXApDQotDQotDQotZGVmIF9pbXBvcnRlcih0YXJnZXQpOg0KLSAgICBjb21wb25l
bnRzID0gdGFyZ2V0LnNwbGl0KCcuJykNCi0gICAgaW1wb3J0X3BhdGggPSBjb21wb25lbnRzLnBv
cCgwKQ0KLSAgICB0aGluZyA9IF9faW1wb3J0X18oaW1wb3J0X3BhdGgpDQotDQotICAgIGZvciBj
b21wIGluIGNvbXBvbmVudHM6DQotICAgICAgICBpbXBvcnRfcGF0aCArPSAiLiVzIiAlIGNvbXAN
Ci0gICAgICAgIHRoaW5nID0gX2RvdF9sb29rdXAodGhpbmcsIGNvbXAsIGltcG9ydF9wYXRoKQ0K
LSAgICByZXR1cm4gdGhpbmcNCi0NCi0NCi1jbGFzcyBfcGF0Y2gob2JqZWN0KToNCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHRhcmdldCwgYXR0cmlidXRlLCBuZXcsIHNwZWMsIGNyZWF0ZSk6DQot
ICAgICAgICBzZWxmLnRhcmdldCA9IHRhcmdldA0KLSAgICAgICAgc2VsZi5hdHRyaWJ1dGUgPSBh
dHRyaWJ1dGUNCi0gICAgICAgIHNlbGYubmV3ID0gbmV3DQotICAgICAgICBzZWxmLnNwZWMgPSBz
cGVjDQotICAgICAgICBzZWxmLmNyZWF0ZSA9IGNyZWF0ZQ0KLSAgICAgICAgc2VsZi5oYXNfbG9j
YWwgPSBGYWxzZQ0KLQ0KLQ0KLSAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuYyk6DQotICAgICAg
ICBpZiBoYXNhdHRyKGZ1bmMsICdwYXRjaGluZ3MnKToNCi0gICAgICAgICAgICBmdW5jLnBhdGNo
aW5ncy5hcHBlbmQoc2VsZikNCi0gICAgICAgICAgICByZXR1cm4gZnVuYw0KLQ0KLSAgICAgICAg
ZGVmIHBhdGNoZWQoKmFyZ3MsICoqa2V5d2FyZ3MpOg0KLSAgICAgICAgICAgICMgZG9uJ3QgdXNl
IGEgd2l0aCBoZXJlIChiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSB3aXRoIDIuNSkNCi0gICAgICAg
ICAgICBleHRyYV9hcmdzID0gW10NCi0gICAgICAgICAgICBmb3IgcGF0Y2hpbmcgaW4gcGF0Y2hl
ZC5wYXRjaGluZ3M6DQotICAgICAgICAgICAgICAgIGFyZyA9IHBhdGNoaW5nLl9fZW50ZXJfXygp
DQotICAgICAgICAgICAgICAgIGlmIHBhdGNoaW5nLm5ldyBpcyBERUZBVUxUOg0KLSAgICAgICAg
ICAgICAgICAgICAgZXh0cmFfYXJncy5hcHBlbmQoYXJnKQ0KLSAgICAgICAgICAgIGFyZ3MgKz0g
dHVwbGUoZXh0cmFfYXJncykNCi0gICAgICAgICAgICB0cnk6DQotICAgICAgICAgICAgICAgIHJl
dHVybiBmdW5jKCphcmdzLCAqKmtleXdhcmdzKQ0KLSAgICAgICAgICAgIGZpbmFsbHk6DQotICAg
ICAgICAgICAgICAgIGZvciBwYXRjaGluZyBpbiBnZXRhdHRyKHBhdGNoZWQsICdwYXRjaGluZ3Mn
LCBbXSk6DQotICAgICAgICAgICAgICAgICAgICBwYXRjaGluZy5fX2V4aXRfXygpDQotDQotICAg
ICAgICBwYXRjaGVkLnBhdGNoaW5ncyA9IFtzZWxmXQ0KLSAgICAgICAgcGF0Y2hlZC5fX25hbWVf
XyA9IGZ1bmMuX19uYW1lX18gDQotICAgICAgICBwYXRjaGVkLmNvbXBhdF9jb19maXJzdGxpbmVu
byA9IGdldGF0dHIoZnVuYywgImNvbXBhdF9jb19maXJzdGxpbmVubyIsIA0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuZnVuY19jb2RlLmNvX2Zp
cnN0bGluZW5vKQ0KLSAgICAgICAgcmV0dXJuIHBhdGNoZWQNCi0NCi0NCi0gICAgZGVmIGdldF9v
cmlnaW5hbChzZWxmKToNCi0gICAgICAgIHRhcmdldCA9IHNlbGYudGFyZ2V0DQotICAgICAgICBu
YW1lID0gc2VsZi5hdHRyaWJ1dGUNCi0gICAgICAgIGNyZWF0ZSA9IHNlbGYuY3JlYXRlDQotICAg
ICAgICANCi0gICAgICAgIG9yaWdpbmFsID0gREVGQVVMVA0KLSAgICAgICAgaWYgX2hhc19sb2Nh
bF9hdHRyKHRhcmdldCwgbmFtZSk6DQotICAgICAgICAgICAgdHJ5Og0KLSAgICAgICAgICAgICAg
ICBvcmlnaW5hbCA9IHRhcmdldC5fX2RpY3RfX1tuYW1lXQ0KLSAgICAgICAgICAgIGV4Y2VwdCBB
dHRyaWJ1dGVFcnJvcjoNCi0gICAgICAgICAgICAgICAgIyBmb3IgaW5zdGFuY2VzIG9mIGNsYXNz
ZXMgd2l0aCBzbG90cywgdGhleSBoYXZlIG5vIF9fZGljdF9fDQotICAgICAgICAgICAgICAgIG9y
aWdpbmFsID0gZ2V0YXR0cih0YXJnZXQsIG5hbWUpDQotICAgICAgICBlbGlmIG5vdCBjcmVhdGUg
YW5kIG5vdCBoYXNhdHRyKHRhcmdldCwgbmFtZSk6DQotICAgICAgICAgICAgcmFpc2UgQXR0cmli
dXRlRXJyb3IoIiVzIGRvZXMgbm90IGhhdmUgdGhlIGF0dHJpYnV0ZSAlciIgJSAodGFyZ2V0LCBu
YW1lKSkNCi0gICAgICAgIHJldHVybiBvcmlnaW5hbA0KLQ0KLSAgICANCi0gICAgZGVmIF9fZW50
ZXJfXyhzZWxmKToNCi0gICAgICAgIG5ldywgc3BlYywgPSBzZWxmLm5ldywgc2VsZi5zcGVjDQot
ICAgICAgICBvcmlnaW5hbCA9IHNlbGYuZ2V0X29yaWdpbmFsKCkNCi0gICAgICAgIGlmIG5ldyBp
cyBERUZBVUxUOg0KLSAgICAgICAgICAgICMgWFhYWCB3aGF0IGlmIG9yaWdpbmFsIGlzIERFRkFV
TFQgLSBzaG91bGRuJ3QgdXNlIGl0IGFzIGEgc3BlYw0KLSAgICAgICAgICAgIGluaGVyaXQgPSBG
YWxzZQ0KLSAgICAgICAgICAgIGlmIHNwZWMgPT0gVHJ1ZToNCi0gICAgICAgICAgICAgICAgIyBz
ZXQgc3BlYyB0byB0aGUgb2JqZWN0IHdlIGFyZSByZXBsYWNpbmcNCi0gICAgICAgICAgICAgICAg
c3BlYyA9IG9yaWdpbmFsDQotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3BlYywgKHR5
cGUsIENsYXNzVHlwZSkpOg0KLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFRydWUNCi0g
ICAgICAgICAgICBuZXcgPSBNb2NrKHNwZWM9c3BlYykNCi0gICAgICAgICAgICBpZiBpbmhlcml0
Og0KLSAgICAgICAgICAgICAgICBuZXcucmV0dXJuX3ZhbHVlID0gTW9jayhzcGVjPXNwZWMpDQot
ICAgICAgICBzZWxmLnRlbXBfb3JpZ2luYWwgPSBvcmlnaW5hbA0KLSAgICAgICAgc2V0YXR0cihz
ZWxmLnRhcmdldCwgc2VsZi5hdHRyaWJ1dGUsIG5ldykNCi0gICAgICAgIHJldHVybiBuZXcNCi0N
Ci0NCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICpfKToNCi0gICAgICAgIGlmIHNlbGYudGVtcF9v
cmlnaW5hbCBpcyBub3QgREVGQVVMVDoNCi0gICAgICAgICAgICBzZXRhdHRyKHNlbGYudGFyZ2V0
LCBzZWxmLmF0dHJpYnV0ZSwgc2VsZi50ZW1wX29yaWdpbmFsKQ0KLSAgICAgICAgZWxzZToNCi0g
ICAgICAgICAgICBkZWxhdHRyKHNlbGYudGFyZ2V0LCBzZWxmLmF0dHJpYnV0ZSkNCi0gICAgICAg
IGRlbCBzZWxmLnRlbXBfb3JpZ2luYWwNCi0gICAgICAgICAgICANCi0gICAgICAgICAgICAgICAg
DQotZGVmIHBhdGNoX29iamVjdCh0YXJnZXQsIGF0dHJpYnV0ZSwgbmV3PURFRkFVTFQsIHNwZWM9
Tm9uZSwgY3JlYXRlPUZhbHNlKToNCi0gICAgcmV0dXJuIF9wYXRjaCh0YXJnZXQsIGF0dHJpYnV0
ZSwgbmV3LCBzcGVjLCBjcmVhdGUpDQotDQotDQotZGVmIHBhdGNoKHRhcmdldCwgbmV3PURFRkFV
TFQsIHNwZWM9Tm9uZSwgY3JlYXRlPUZhbHNlKToNCi0gICAgdHJ5Og0KLSAgICAgICAgdGFyZ2V0
LCBhdHRyaWJ1dGUgPSB0YXJnZXQucnNwbGl0KCcuJywgMSkgICAgDQotICAgIGV4Y2VwdCAoVHlw
ZUVycm9yLCBWYWx1ZUVycm9yKToNCi0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiTmVlZCBhIHZh
bGlkIHRhcmdldCB0byBwYXRjaC4gWW91IHN1cHBsaWVkOiAlciIgJSAodGFyZ2V0LCkpDQotICAg
IHRhcmdldCA9IF9pbXBvcnRlcih0YXJnZXQpDQotICAgIHJldHVybiBfcGF0Y2godGFyZ2V0LCBh
dHRyaWJ1dGUsIG5ldywgc3BlYywgY3JlYXRlKQ0KLQ0KLQ0KLQ0KLWRlZiBfaGFzX2xvY2FsX2F0
dHIob2JqLCBuYW1lKToNCi0gICAgdHJ5Og0KLSAgICAgICAgcmV0dXJuIG5hbWUgaW4gdmFycyhv
YmopDQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6DQotICAgICAgICAjIG9iamVjdHMgd2l0aG91dCBh
IF9fZGljdF9fDQotICAgICAgICByZXR1cm4gaGFzYXR0cihvYmosIG5hbWUpDQpJbmRleDogV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL21vY2tfYnVnemlsbGF0b29sLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9tb2NrX2J1Z3ppbGxhdG9vbC5weQkocmV2
aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvbW9ja19idWd6aWxs
YXRvb2wucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1pbXBvcnQgb3MKLQotZnJvbSBtb2R1bGVzLm1vY2sgaW1wb3J0IE1vY2sKLWZyb20gbW9kdWxl
cy5zY20gaW1wb3J0IENvbW1pdE1lc3NhZ2UKLWZyb20gbW9kdWxlcy5idWd6aWxsYSBpbXBvcnQg
QnVnCi0KLWRlZiBfaWRfdG9fb2JqZWN0X2RpY3Rpb25hcnkoKm9iamVjdHMpOgotICAgIGRpY3Rp
b25hcnkgPSB7fQotICAgIGZvciB0aGluZyBpbiBvYmplY3RzOgotICAgICAgICBkaWN0aW9uYXJ5
W3RoaW5nWyJpZCJdXSA9IHRoaW5nCi0gICAgcmV0dXJuIGRpY3Rpb25hcnkKLQotIyBGSVhNRTog
VGhlIGlkcyBzaG91bGQgYmUgMSwgMiwgMyBpbnN0ZWFkIG9mIGNyYXp5IG51bWJlcnMuCi1fcGF0
Y2gxID0gewotICAgICJpZCIgOiAxOTcsCi0gICAgImJ1Z19pZCIgOiA0MiwKLSAgICAidXJsIiA6
ICJodHRwOi8vZXhhbXBsZS5jb20vMTk3IiwKLSAgICAiaXNfb2Jzb2xldGUiIDogRmFsc2UsCi0g
ICAgImlzX3BhdGNoIiA6IFRydWUsCi0gICAgInJldmlld2VyIiA6ICJSZXZpZXdlcjEiLAotICAg
ICJhdHRhY2hlcl9lbWFpbCIgOiAiQ29udHJpYnV0ZXIxIiwKLX0KLV9wYXRjaDIgPSB7Ci0gICAg
ImlkIiA6IDEyOCwKLSAgICAiYnVnX2lkIiA6IDQyLAotICAgICJ1cmwiIDogImh0dHA6Ly9leGFt
cGxlLmNvbS8xMjgiLAotICAgICJpc19vYnNvbGV0ZSIgOiBGYWxzZSwKLSAgICAiaXNfcGF0Y2gi
IDogVHJ1ZSwKLSAgICAicmV2aWV3ZXIiIDogIlJldmlld2VyMiIsCi0gICAgImF0dGFjaGVyX2Vt
YWlsIiA6ICJlcmljQHdlYmtpdC5vcmciLAotfQotCi0jIFRoaXMgbXVzdCBiZSBkZWZpbmVkIGJl
Zm9yZSB3ZSBkZWZpbmUgdGhlIGJ1Z3MsIHRodXMgd2UgZG9uJ3QgdXNlIE1vY2tCdWd6aWxsYS51
bmFzc2lnbmVkX2VtYWlsIGRpcmVjdGx5LgotX3VuYXNzaWduZWRfZW1haWwgPSAidW5hc3NpZ25l
ZEBleGFtcGxlLmNvbSIKLQotIyBGSVhNRTogVGhlIGlkcyBzaG91bGQgYmUgMSwgMiwgMyBpbnN0
ZWFkIG9mIGNyYXp5IG51bWJlcnMuCi1fYnVnMSA9IHsKLSAgICAiaWQiIDogNDIsCi0gICAgImFz
c2lnbmVkX3RvX2VtYWlsIiA6IF91bmFzc2lnbmVkX2VtYWlsLAotICAgICJhdHRhY2htZW50cyIg
OiBbX3BhdGNoMSwgX3BhdGNoMl0sCi19Ci1fYnVnMiA9IHsKLSAgICAiaWQiIDogNzUsCi0gICAg
ImFzc2lnbmVkX3RvX2VtYWlsIiA6ICJmb29AZm9vLmNvbSIsCi0gICAgImF0dGFjaG1lbnRzIiA6
IFtdLAotfQotX2J1ZzMgPSB7Ci0gICAgImlkIiA6IDc2LAotICAgICJhc3NpZ25lZF90b19lbWFp
bCIgOiBfdW5hc3NpZ25lZF9lbWFpbCwKLSAgICAiYXR0YWNobWVudHMiIDogW10sCi19Ci0KLWNs
YXNzIE1vY2tCdWd6aWxsYVF1ZXJpZXMoTW9jayk6Ci0gICAgZGVmIGZldGNoX2J1Z19pZHNfZnJv
bV9jb21taXRfcXVldWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBbNDIsIDc1XQotCi0gICAgZGVm
IGZldGNoX2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3X3F1ZXVlKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gWzE5NywgMTI4XQotCi0gICAgZGVmIGZldGNoX3BhdGNoZXNfZnJvbV9jb21taXRfcXVl
dWUoc2VsZiwgcmVqZWN0X2ludmFsaWRfcGF0Y2hlcz1GYWxzZSk6Ci0gICAgICAgIHJldHVybiBb
X3BhdGNoMSwgX3BhdGNoMl0KLQotICAgIGRlZiBmZXRjaF9idWdfaWRzX2Zyb21fcGVuZGluZ19j
b21taXRfbGlzdChzZWxmKToKLSAgICAgICAgcmV0dXJuIFs0MiwgNzUsIDc2XQotICAgIAotICAg
IGRlZiBmZXRjaF9wYXRjaGVzX2Zyb21fcGVuZGluZ19jb21taXRfbGlzdChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIFtfcGF0Y2gxLCBfcGF0Y2gyXQotCi0KLWNsYXNzIE1vY2tCdWd6aWxsYShNb2Nr
KToKLSAgICBidWdfc2VydmVyX3VybCA9ICJodHRwOi8vZXhhbXBsZS5jb20iCi0gICAgdW5hc3Np
Z25lZF9lbWFpbCA9IF91bmFzc2lnbmVkX2VtYWlsCi0gICAgYnVnX2NhY2hlID0gX2lkX3RvX29i
amVjdF9kaWN0aW9uYXJ5KF9idWcxLCBfYnVnMiwgX2J1ZzMpCi0gICAgYXR0YWNobWVudF9jYWNo
ZSA9IF9pZF90b19vYmplY3RfZGljdGlvbmFyeShfcGF0Y2gxLCBfcGF0Y2gyKQotICAgIHF1ZXJp
ZXMgPSBNb2NrQnVnemlsbGFRdWVyaWVzKCkKLQotICAgIGRlZiBmZXRjaF9idWcoc2VsZiwgYnVn
X2lkKToKLSAgICAgICAgcmV0dXJuIEJ1ZyhzZWxmLmJ1Z19jYWNoZS5nZXQoYnVnX2lkKSkKLQot
ICAgIGRlZiBmZXRjaF9yZXZpZXdlZF9wYXRjaGVzX2Zyb21fYnVnKHNlbGYsIGJ1Z19pZCk6Ci0g
ICAgICAgIHJldHVybiBzZWxmLmZldGNoX3BhdGNoZXNfZnJvbV9idWcoYnVnX2lkKSAjIFJldHVy
biB0aGVtIGFsbCBmb3Igbm93LgotCi0gICAgZGVmIGZldGNoX2F0dGFjaG1lbnQoc2VsZiwgYXR0
YWNobWVudF9pZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLmF0dGFjaG1lbnRfY2FjaGVbYXR0YWNo
bWVudF9pZF0gIyBUaGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gLmdldCgpIGlmIHdlIHdpc2ggdG8g
YWxsb3cgZmFpbGVkIGxvb2t1cHMuCi0KLSAgICAjIE5PVEU6IEZ1bmN0aW9ucyBiZWxvdyB0aGlz
IGFyZSBkaXJlY3QgY29waWVzIGZyb20gYnVnemlsbGEucHkKLSAgICBkZWYgZmV0Y2hfcGF0Y2hl
c19mcm9tX2J1ZyhzZWxmLCBidWdfaWQpOgotICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9idWco
YnVnX2lkKS5wYXRjaGVzKCkKLSAgICAKLSAgICBkZWYgYnVnX3VybF9mb3JfYnVnX2lkKHNlbGYs
IGJ1Z19pZCk6Ci0gICAgICAgIHJldHVybiAiJXMvJXMiICUgKHNlbGYuYnVnX3NlcnZlcl91cmws
IGJ1Z19pZCkKLQotICAgIGRlZiBhdHRhY2htZW50X3VybF9mb3JfaWQoc2VsZiwgYXR0YWNobWVu
dF9pZCwgYWN0aW9uKToKLSAgICAgICAgYWN0aW9uX3BhcmFtID0gIiIKLSAgICAgICAgaWYgYWN0
aW9uIGFuZCBhY3Rpb24gIT0gInZpZXciOgotICAgICAgICAgICAgYWN0aW9uX3BhcmFtID0gIiZh
Y3Rpb249JXMiICUgYWN0aW9uCi0gICAgICAgIHJldHVybiAiJXMvJXMlcyIgJSAoc2VsZi5idWdf
c2VydmVyX3VybCwgYXR0YWNobWVudF9pZCwgYWN0aW9uX3BhcmFtKQotCi0KLWNsYXNzIE1vY2tC
dWlsZEJvdChNb2NrKToKLSAgICBkZWYgYnVpbGRlcl9zdGF0dXNlcyhzZWxmKToKLSAgICAgICAg
cmV0dXJuIFt7Ci0gICAgICAgICAgICAibmFtZSI6ICJCdWlsZGVyMSIsCi0gICAgICAgICAgICAi
aXNfZ3JlZW4iOiBUcnVlCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgICJuYW1lIjogIkJ1aWxk
ZXIyIiwKLSAgICAgICAgICAgICJpc19ncmVlbiI6IFRydWUKLSAgICAgICAgfV0KLQotICAgIGRl
ZiByZWRfY29yZV9idWlsZGVyc19uYW1lcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtdCi0KLQot
Y2xhc3MgTW9ja1NDTShNb2NrKToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIE1v
Y2suX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5jaGVja291dF9yb290ID0gb3MuZ2V0Y3dk
KCkKLQotICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZik6Ci0gICAgICAgIHJldHVybiAiUGF0Y2gx
IgotCi0gICAgZGVmIGNvbW1pdF9pZHNfZnJvbV9jb21taXRpc2hfYXJndW1lbnRzKHNlbGYsIGFy
Z3MpOgotICAgICAgICByZXR1cm4gWyJDb21taXRpc2gxIiwgIkNvbW1pdGlzaDIiXQotCi0gICAg
ZGVmIGNvbW1pdF9tZXNzYWdlX2Zvcl9sb2NhbF9jb21taXQoc2VsZiwgY29tbWl0X2lkKToKLSAg
ICAgICAgaWYgY29tbWl0X2lkID09ICJDb21taXRpc2gxIjoKLSAgICAgICAgICAgIHJldHVybiBD
b21taXRNZXNzYWdlKCJDb21taXRNZXNzYWdlMVxuaHR0cHM6Ly9idWdzLmV4YW1wbGUub3JnL3No
b3dfYnVnLmNnaT9pZD00MlxuIikKLSAgICAgICAgaWYgY29tbWl0X2lkID09ICJDb21taXRpc2gy
IjoKLSAgICAgICAgICAgIHJldHVybiBDb21taXRNZXNzYWdlKCJDb21taXRNZXNzYWdlMlxuaHR0
cHM6Ly9idWdzLmV4YW1wbGUub3JnL3Nob3dfYnVnLmNnaT9pZD03NVxuIikKLSAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCJCb2d1cyBjb21taXRfaWQgaW4gY29tbWl0X21lc3NhZ2VfZm9yX2xvY2Fs
X2NvbW1pdC4iKQotCi0gICAgZGVmIGNyZWF0ZV9wYXRjaF9mcm9tX2xvY2FsX2NvbW1pdChzZWxm
LCBjb21taXRfaWQpOgotICAgICAgICBpZiBjb21taXRfaWQgPT0gIkNvbW1pdGlzaDEiOgotICAg
ICAgICAgICAgcmV0dXJuICJQYXRjaDEiCi0gICAgICAgIGlmIGNvbW1pdF9pZCA9PSAiQ29tbWl0
aXNoMiI6Ci0gICAgICAgICAgICByZXR1cm4gIlBhdGNoMiIKLSAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJCb2d1cyBjb21taXRfaWQgaW4gY29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdC4i
KQotCi0gICAgZGVmIGRpZmZfZm9yX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uKToKLSAgICAgICAg
cmV0dXJuICJEaWZmRm9yUmV2aXNpb24lc1xuaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIzNDUiICUgcmV2aXNpb24KLQotICAgIGRlZiBtb2RpZmllZF9jaGFuZ2Vsb2dz
KHNlbGYpOgotICAgICAgICAjIElkZWFsbHkgd2UnZCByZXR1cm4gc29tZXRoaW5nIG1vcmUgaW50
ZXJlc3RpbmcgaGVyZS4KLSAgICAgICAgIyBUaGUgcHJvYmxlbSBpcyB0aGF0IExhbmREaWZmIHdp
bGwgdHJ5IHRvIGFjdHVhbGx5IHJlYWQgdGhlIHBhdGggZnJvbSBkaXNrIQotICAgICAgICByZXR1
cm4gW10KLQotCi1jbGFzcyBNb2NrVXNlcihvYmplY3QpOgotICAgIGRlZiBwcm9tcHQoc2VsZiwg
bWVzc2FnZSk6Ci0gICAgICAgIHJldHVybiAiTW9jayB1c2VyIHJlc3BvbnNlIgotCi0gICAgZGVm
IGVkaXQoc2VsZiwgZmlsZXMpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcGFnZShzZWxmLCBt
ZXNzYWdlKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGNvbmZpcm0oc2VsZik6Ci0gICAgICAg
IHJldHVybiBUcnVlCi0KLQotY2xhc3MgTW9ja1N0YXR1c0JvdChvYmplY3QpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5zdGF0dXNib3RfaG9zdCA9ICJleGFtcGxlLmNv
bSIKLQotICAgIGRlZiBwYXRjaF9zdGF0dXMoc2VsZiwgcXVldWVfbmFtZSwgcGF0Y2hfaWQpOgot
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIHVwZGF0ZV9zdGF0dXMoc2VsZiwgcXVldWVf
bmFtZSwgc3RhdHVzLCBwYXRjaD1Ob25lLCByZXN1bHRzX2ZpbGU9Tm9uZSk6Ci0gICAgICAgIHJl
dHVybiAxODcKLQotCi1jbGFzcyBNb2NrQnVnemlsbGFUb29sKCk6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYpOgotICAgICAgICBzZWxmLmJ1Z3MgPSBNb2NrQnVnemlsbGEoKQotICAgICAgICBzZWxm
LmJ1aWxkYm90ID0gTW9ja0J1aWxkQm90KCkKLSAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBNb2Nr
KCkKLSAgICAgICAgc2VsZi51c2VyID0gTW9ja1VzZXIoKQotICAgICAgICBzZWxmLl9zY20gPSBN
b2NrU0NNKCkKLSAgICAgICAgc2VsZi5zdGF0dXNfYm90ID0gTW9ja1N0YXR1c0JvdCgpCi0KLSAg
ICBkZWYgc2NtKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fc2NtCi0KLSAgICBkZWYgcGF0
aChzZWxmKToKLSAgICAgICAgcmV0dXJuICJlY2hvIgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0
cy9tb2R1bGVzL211bHRpY29tbWFuZHRvb2wucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL211bHRpY29tbWFuZHRvb2wucHkJKHJldmlzaW9uIDUyNzAyKQorKysg
V2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL211bHRpY29tbWFuZHRvb2wucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjkzICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotIwotIyBNdWx0aUNvbW1h
bmRUb29sIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciB3cml0aW5nIHN2bi1saWtlL2dpdC1saWtl
IHRvb2xzCi0jIHdoaWNoIGFyZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSMg
dG9vbC1uYW1lIFtnbG9iYWwgb3B0aW9uc10gY29tbWFuZC1uYW1lIFtjb21tYW5kIG9wdGlvbnNd
Ci0KLWltcG9ydCBzeXMKLQotZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyLCBJbmRl
bnRlZEhlbHBGb3JtYXR0ZXIsIFNVUFBSRVNTX1VTQUdFLCBtYWtlX29wdGlvbgotCi1mcm9tIG1v
ZHVsZXMuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCi1mcm9tIG1vZHVsZXMud2Via2l0X2xvZ2dp
bmcgaW1wb3J0IGxvZwotCi0KLWNsYXNzIENvbW1hbmQob2JqZWN0KToKLSAgICBuYW1lID0gTm9u
ZQotICAgIHNob3dfaW5fbWFpbl9oZWxwID0gRmFsc2UKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
aGVscF90ZXh0LCBhcmd1bWVudF9uYW1lcz1Ob25lLCBvcHRpb25zPU5vbmUsIHJlcXVpcmVzX2xv
Y2FsX2NvbW1pdHM9RmFsc2UpOgotICAgICAgICBzZWxmLmhlbHBfdGV4dCA9IGhlbHBfdGV4dAot
ICAgICAgICBzZWxmLmFyZ3VtZW50X25hbWVzID0gYXJndW1lbnRfbmFtZXMKLSAgICAgICAgc2Vs
Zi5yZXF1aXJlZF9hcmd1bWVudHMgPSBzZWxmLl9wYXJzZV9yZXF1aXJlZF9hcmd1bWVudHMoYXJn
dW1lbnRfbmFtZXMpCi0gICAgICAgIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2Vs
Zi5yZXF1aXJlc19sb2NhbF9jb21taXRzID0gcmVxdWlyZXNfbG9jYWxfY29tbWl0cwotICAgICAg
ICBzZWxmLnRvb2wgPSBOb25lCi0gICAgICAgICMgb3B0aW9uX3BhcnNlciBjYW4gYmUgb3ZlcnJp
ZGVuIGJ5IHRoZSB0b29sIHVzaW5nIHNldF9vcHRpb25fcGFyc2VyCi0gICAgICAgICMgVGhpcyBk
ZWZhdWx0IHBhcnNlciB3aWxsIGJlIHVzZWQgZm9yIHN0YW5kYWxvbmVfaGVscCBwcmludGluZy4K
LSAgICAgICAgc2VsZi5vcHRpb25fcGFyc2VyID0gSGVscFByaW50aW5nT3B0aW9uUGFyc2VyKHVz
YWdlPVNVUFBSRVNTX1VTQUdFLCBhZGRfaGVscF9vcHRpb249RmFsc2UsIG9wdGlvbl9saXN0PXNl
bGYub3B0aW9ucykKLQotICAgICMgVGhpcyBkZXNpZ24gaXMgc2xpZ2h0bHkgYXdrd2FyZCwgYnV0
IHdlIG5lZWQgdGhlCi0gICAgIyB0aGUgdG9vbCB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhbmQgbW9k
aWZ5IHRoZSBvcHRpb25fcGFyc2VyCi0gICAgIyBiZWZvcmUgaXQga25vd3Mgd2hhdCBDb21tYW5k
IHRvIHJ1bi4KLSAgICBkZWYgc2V0X29wdGlvbl9wYXJzZXIoc2VsZiwgb3B0aW9uX3BhcnNlcik6
Ci0gICAgICAgIHNlbGYub3B0aW9uX3BhcnNlciA9IG9wdGlvbl9wYXJzZXIKLSAgICAgICAgc2Vs
Zi5fYWRkX29wdGlvbnNfdG9fcGFyc2VyKCkKLQotICAgIGRlZiBfYWRkX29wdGlvbnNfdG9fcGFy
c2VyKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gc2VsZi5vcHRpb25zIG9yIFtdCi0gICAgICAg
IGZvciBvcHRpb24gaW4gb3B0aW9uczoKLSAgICAgICAgICAgIHNlbGYub3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKG9wdGlvbikKLQotICAgICMgVGhlIHRvb2wgY2FsbHMgYmluZF90b190b29sIG9u
IGVhY2ggQ29tbWFuZCBhZnRlciBhZGRpbmcgaXQgdG8gaXRzIGxpc3QuCi0gICAgZGVmIGJpbmRf
dG9fdG9vbChzZWxmLCB0b29sKToKLSAgICAgICAgIyBDb21tYW5kIGluc3RhbmNlcyBjYW4gb25s
eSBiZSBib3VuZCB0byBvbmUgdG9vbCBhdCBhIHRpbWUuCi0gICAgICAgIGlmIHNlbGYudG9vbCBh
bmQgdG9vbCAhPSBzZWxmLnRvb2w6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvbW1h
bmQgYWxyZWFkeSBib3VuZCB0byB0b29sISIpCi0gICAgICAgIHNlbGYudG9vbCA9IHRvb2wKLQot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX3BhcnNlX3JlcXVpcmVkX2FyZ3VtZW50cyhhcmd1
bWVudF9uYW1lcyk6Ci0gICAgICAgIHJlcXVpcmVkX2FyZ3MgPSBbXQotICAgICAgICBpZiBub3Qg
YXJndW1lbnRfbmFtZXM6Ci0gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRfYXJncwotICAgICAg
ICBzcGxpdF9hcmdzID0gYXJndW1lbnRfbmFtZXMuc3BsaXQoIiAiKQotICAgICAgICBmb3IgYXJn
dW1lbnQgaW4gc3BsaXRfYXJnczoKLSAgICAgICAgICAgIGlmIGFyZ3VtZW50WzBdID09ICdbJzoK
LSAgICAgICAgICAgICAgICAjIEZvciBub3cgb3VyIHBhcnNlciBpcyByYXRoZXIgZHVtYi4gIERv
IHNvbWUgbWluaW1hbCB2YWxpZGF0aW9uIHRoYXQKLSAgICAgICAgICAgICAgICAjIHdlIGhhdmVu
J3QgY29uZnVzZWQgaXQuCi0gICAgICAgICAgICAgICAgaWYgYXJndW1lbnRbLTFdICE9ICddJzoK
LSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsdXJlIHRvIHBhcnNlIGFy
Z3VtZW50IHN0cmluZyAlcy4gIEFyZ3VtZW50ICVzIGlzIG1pc3NpbmcgZW5kaW5nIF0iICUgKGFy
Z3VtZW50X25hbWVzLCBhcmd1bWVudCkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIHJlcXVpcmVkX2FyZ3MuYXBwZW5kKGFyZ3VtZW50KQotICAgICAgICByZXR1cm4gcmVxdWly
ZWRfYXJncwotCi0gICAgZGVmIG5hbWVfd2l0aF9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgIHVz
YWdlX3N0cmluZyA9IHNlbGYubmFtZQotICAgICAgICBpZiBzZWxmLm9wdGlvbnM6Ci0gICAgICAg
ICAgICB1c2FnZV9zdHJpbmcgKz0gIiBbb3B0aW9uc10iCi0gICAgICAgIGlmIHNlbGYuYXJndW1l
bnRfbmFtZXM6Ci0gICAgICAgICAgICB1c2FnZV9zdHJpbmcgKz0gIiAiICsgc2VsZi5hcmd1bWVu
dF9uYW1lcwotICAgICAgICByZXR1cm4gdXNhZ2Vfc3RyaW5nCi0KLSAgICBkZWYgcGFyc2VfYXJn
cyhzZWxmLCBhcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9uX3BhcnNlci5wYXJzZV9h
cmdzKGFyZ3MpCi0KLSAgICBkZWYgY2hlY2tfYXJndW1lbnRzX2FuZF9leGVjdXRlKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2w9Tm9uZSk6Ci0gICAgICAgIGlmIGxlbihhcmdzKSA8IGxlbihzZWxm
LnJlcXVpcmVkX2FyZ3VtZW50cyk6Ci0gICAgICAgICAgICBsb2coIiVzIHJlcXVpcmVkLCAlcyBw
cm92aWRlZC4gIFByb3ZpZGVkOiAlcyAgUmVxdWlyZWQ6ICVzXG5TZWUgJyVzIGhlbHAgJXMnIGZv
ciB1c2FnZS4iICUgKAotICAgICAgICAgICAgICAgIHBsdXJhbGl6ZSgiYXJndW1lbnQiLCBsZW4o
c2VsZi5yZXF1aXJlZF9hcmd1bWVudHMpKSwKLSAgICAgICAgICAgICAgICBwbHVyYWxpemUoImFy
Z3VtZW50IiwgbGVuKGFyZ3MpKSwKLSAgICAgICAgICAgICAgICAiJyVzJyIgJSAiICIuam9pbihh
cmdzKSwKLSAgICAgICAgICAgICAgICAiICIuam9pbihzZWxmLnJlcXVpcmVkX2FyZ3VtZW50cyks
Ci0gICAgICAgICAgICAgICAgdG9vbC5uYW1lKCksCi0gICAgICAgICAgICAgICAgc2VsZi5uYW1l
KSkKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGUob3B0
aW9ucywgYXJncywgdG9vbCkgb3IgMAotCi0gICAgZGVmIHN0YW5kYWxvbmVfaGVscChzZWxmKToK
LSAgICAgICAgaGVscF90ZXh0ID0gc2VsZi5uYW1lX3dpdGhfYXJndW1lbnRzKCkubGp1c3QobGVu
KHNlbGYubmFtZV93aXRoX2FyZ3VtZW50cygpKSArIDMpICsgc2VsZi5oZWxwX3RleHQgKyAiXG4i
Ci0gICAgICAgIGhlbHBfdGV4dCArPSBzZWxmLm9wdGlvbl9wYXJzZXIuZm9ybWF0X29wdGlvbl9o
ZWxwKEluZGVudGVkSGVscEZvcm1hdHRlcigpKQotICAgICAgICByZXR1cm4gaGVscF90ZXh0Ci0K
LSAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAg
ICAjIG1haW4oKSBleGlzdHMgc28gdGhhdCBDb21tYW5kcyBjYW4gYmUgdHVybmVkIGludG8gc3Rh
bmQtYWxvbmUgc2NyaXB0cy4KLSAgICAjIE90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIHdpbGwgbGlr
ZWx5IHJlcXVpcmUgbW9kaWZpY2F0aW9uIHRvIHdvcmsgc3RhbmQtYWxvbmUuCi0gICAgZGVmIG1h
aW4oc2VsZiwgYXJncz1zeXMuYXJndik6Ci0gICAgICAgIChvcHRpb25zLCBhcmdzKSA9IHNlbGYu
cGFyc2VfYXJncyhhcmdzKQotICAgICAgICAjIFNvbWUgY29tbWFuZHMgbWlnaHQgcmVxdWlyZSBh
IGR1bW15IHRvb2wKLSAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tfYXJndW1lbnRzX2FuZF9leGVj
dXRlKG9wdGlvbnMsIGFyZ3MpCi0KLQotIyBGSVhNRTogVGhpcyBzaG91bGQganVzdCBiZSByb2xs
ZWQgaW50byBDb21tYW5kLiAgaGVscF90ZXh0IGFuZCBhcmd1bWVudF9uYW1lcyBkbyBub3QgbmVl
ZCB0byBiZSBpbnN0YW5jZSB2YXJpYWJsZXMuCi1jbGFzcyBBYnN0cmFjdERlY2xhcmF0aXZlQ29t
bW1hbmQoQ29tbWFuZCk6Ci0gICAgaGVscF90ZXh0ID0gTm9uZQotICAgIGFyZ3VtZW50X25hbWVz
ID0gTm9uZQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zPU5vbmUpOgotICAgICAgICBD
b21tYW5kLl9faW5pdF9fKHNlbGYsIHNlbGYuaGVscF90ZXh0LCBzZWxmLmFyZ3VtZW50X25hbWVz
LCBvcHRpb25zKQotCi0KLWNsYXNzIEhlbHBQcmludGluZ09wdGlvblBhcnNlcihPcHRpb25QYXJz
ZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcGlsb2dfbWV0aG9kPU5vbmUsICphcmdzLCAq
Kmt3YXJncyk6Ci0gICAgICAgIHNlbGYuZXBpbG9nX21ldGhvZCA9IGVwaWxvZ19tZXRob2QKLSAg
ICAgICAgT3B0aW9uUGFyc2VyLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKLQotICAg
IGRlZiBlcnJvcihzZWxmLCBtc2cpOgotICAgICAgICBzZWxmLnByaW50X3VzYWdlKHN5cy5zdGRl
cnIpCi0gICAgICAgIGVycm9yX21lc3NhZ2UgPSAiJXM6IGVycm9yOiAlc1xuIiAlIChzZWxmLmdl
dF9wcm9nX25hbWUoKSwgbXNnKQotICAgICAgICAjIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRlbiB0
byBhZGQgdGhpcyBvbmUgbGluZSB0byB0aGUgb3V0cHV0OgotICAgICAgICBlcnJvcl9tZXNzYWdl
ICs9ICJcblR5cGUgXCIlcyAtLWhlbHBcIiB0byBzZWUgdXNhZ2UuXG4iICUgc2VsZi5nZXRfcHJv
Z19uYW1lKCkKLSAgICAgICAgc2VsZi5leGl0KDEsIGVycm9yX21lc3NhZ2UpCi0KLSAgICAjIFdl
IG92ZXJyaWRlIGZvcm1hdF9lcGlsb2cgdG8gYXZvaWQgdGhlIGRlZmF1bHQgZm9ybWF0dGluZyB3
aGljaCB3b3VsZCBwYXJhZ3JhcGgtd3JhcCB0aGUgZXBpbG9nCi0gICAgIyBhbmQgYWxzbyB0byBh
bGxvdyB1cyB0byBjb21wdXRlIHRoZSBlcGlsb2cgbGF6aWx5IGluc3RlYWQgb2YgaW4gdGhlIGNv
bnN0cnVjdG9yIChhbGxvd2luZyBpdCB0byBiZSBjb250ZXh0IHNlbnNpdGl2ZSkuCi0gICAgZGVm
IGZvcm1hdF9lcGlsb2coc2VsZiwgZXBpbG9nKToKLSAgICAgICAgaWYgc2VsZi5lcGlsb2dfbWV0
aG9kOgotICAgICAgICAgICAgcmV0dXJuICJcbiVzXG4iICUgc2VsZi5lcGlsb2dfbWV0aG9kKCkK
LSAgICAgICAgcmV0dXJuICIiCi0KLQotY2xhc3MgSGVscENvbW1hbmQoQ29tbWFuZCk6Ci0gICAg
bmFtZSA9ICJoZWxwIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBvcHRpb25z
ID0gWwotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1hIiwgIi0tYWxsLWNvbW1hbmRzIiwgYWN0
aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2hvd19hbGxfY29tbWFuZHMiLCBoZWxwPSJQcmludCBh
bGwgYXZhaWxhYmxlIGNvbW1hbmRzIiksCi0gICAgICAgIF0KLSAgICAgICAgQ29tbWFuZC5fX2lu
aXRfXyhzZWxmLCAiRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHByb2dyYW0gb3IgaXRz
IHN1YmNvbW1hbmRzIiwgIltDT01NQU5EXSIsIG9wdGlvbnM9b3B0aW9ucykKLSAgICAgICAgc2Vs
Zi5zaG93X2FsbF9jb21tYW5kcyA9IEZhbHNlICMgQSBoYWNrIHVzZWQgdG8gcGFzcyAtLWFsbC1j
b21tYW5kcyB0byBfaGVscF9lcGlsb2cgZXZlbiB0aG91Z2ggaXQncyBjYWxsZWQgYnkgdGhlIE9w
dGlvblBhcnNlci4KLQotICAgIGRlZiBfaGVscF9lcGlsb2coc2VsZik6Ci0gICAgICAgICMgT25s
eSBzaG93IGNvbW1hbmRzIHdoaWNoIGFyZSByZWxldmFudCB0byB0aGlzIGNoZWNrb3V0J3MgU0NN
IHN5c3RlbS4gIE1pZ2h0IHRoaXMgYmUgY29uZnVzaW5nIHRvIHNvbWUgdXNlcnM/Ci0gICAgICAg
IGlmIHNlbGYuc2hvd19hbGxfY29tbWFuZHM6Ci0gICAgICAgICAgICBlcGlsb2cgPSAiQWxsICVw
cm9nIGNvbW1hbmRzOlxuIgotICAgICAgICAgICAgcmVsZXZhbnRfY29tbWFuZHMgPSBzZWxmLnRv
b2wuY29tbWFuZHNbOl0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVwaWxvZyA9ICJDb21t
b24gJXByb2cgY29tbWFuZHM6XG4iCi0gICAgICAgICAgICByZWxldmFudF9jb21tYW5kcyA9IGZp
bHRlcihzZWxmLnRvb2wuc2hvdWxkX3Nob3dfaW5fbWFpbl9oZWxwLCBzZWxmLnRvb2wuY29tbWFu
ZHMpCi0gICAgICAgIGxvbmdlc3RfbmFtZV9sZW5ndGggPSBtYXgobWFwKGxhbWJkYSBjb21tYW5k
OiBsZW4oY29tbWFuZC5uYW1lKSwgcmVsZXZhbnRfY29tbWFuZHMpKQotICAgICAgICByZWxldmFu
dF9jb21tYW5kcy5zb3J0KGxhbWJkYSBhLCBiOiBjbXAoYS5uYW1lLCBiLm5hbWUpKQotICAgICAg
ICBjb21tYW5kX2hlbHBfdGV4dHMgPSBtYXAobGFtYmRhIGNvbW1hbmQ6ICIgICAlcyAgICVzXG4i
ICUgKGNvbW1hbmQubmFtZS5sanVzdChsb25nZXN0X25hbWVfbGVuZ3RoKSwgY29tbWFuZC5oZWxw
X3RleHQpLCByZWxldmFudF9jb21tYW5kcykKLSAgICAgICAgZXBpbG9nICs9ICIlc1xuIiAlICIi
LmpvaW4oY29tbWFuZF9oZWxwX3RleHRzKQotICAgICAgICBlcGlsb2cgKz0gIlNlZSAnJXByb2cg
aGVscCAtLWFsbC1jb21tYW5kcycgdG8gbGlzdCBhbGwgY29tbWFuZHMuXG4iCi0gICAgICAgIGVw
aWxvZyArPSAiU2VlICclcHJvZyBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9u
IGEgc3BlY2lmaWMgY29tbWFuZC5cbiIKLSAgICAgICAgcmV0dXJuIGVwaWxvZy5yZXBsYWNlKCIl
cHJvZyIsIHNlbGYudG9vbC5uYW1lKCkpICMgVXNlIG9mICVwcm9nIGhlcmUgbWltaWNzIE9wdGlv
blBhcnNlci5leHBhbmRfcHJvZ19uYW1lKCkuCi0KLSAgICAjIEZJWE1FOiBUaGlzIGlzIGEgaGFj
ayBzbyB0aGF0IHdlIGRvbid0IHNob3cgLS1hbGwtY29tbWFuZHMgYXMgYSBnbG9iYWwgb3B0aW9u
OgotICAgIGRlZiBfcmVtb3ZlX2hlbHBfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgZm9yIG9wdGlv
biBpbiBzZWxmLm9wdGlvbnM6Ci0gICAgICAgICAgICBzZWxmLm9wdGlvbl9wYXJzZXIucmVtb3Zl
X29wdGlvbihvcHRpb24uZ2V0X29wdF9zdHJpbmcoKSkKLQotICAgIGRlZiBleGVjdXRlKHNlbGYs
IG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBpZiBhcmdzOgotICAgICAgICAgICAgY29t
bWFuZCA9IHNlbGYudG9vbC5jb21tYW5kX2J5X25hbWUoYXJnc1swXSkKLSAgICAgICAgICAgIGlm
IGNvbW1hbmQ6Ci0gICAgICAgICAgICAgICAgcHJpbnQgY29tbWFuZC5zdGFuZGFsb25lX2hlbHAo
KQotICAgICAgICAgICAgICAgIHJldHVybiAwCi0KLSAgICAgICAgc2VsZi5zaG93X2FsbF9jb21t
YW5kcyA9IG9wdGlvbnMuc2hvd19hbGxfY29tbWFuZHMKLSAgICAgICAgc2VsZi5fcmVtb3ZlX2hl
bHBfb3B0aW9ucygpCi0gICAgICAgIHNlbGYub3B0aW9uX3BhcnNlci5wcmludF9oZWxwKCkKLSAg
ICAgICAgcmV0dXJuIDAKLQotCi1jbGFzcyBNdWx0aUNvbW1hbmRUb29sKG9iamVjdCk6Ci0gICAg
Z2xvYmFsX29wdGlvbnMgPSBOb25lCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT1Ob25l
LCBjb21tYW5kcz1Ob25lKToKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgb3IgT3B0aW9uUGFy
c2VyKHByb2c9bmFtZSkuZ2V0X3Byb2dfbmFtZSgpICMgT3B0aW9uUGFyc2VyIGhhcyBuaWNlIGxv
Z2ljIGZvciBmZXRjaGluZyB0aGUgbmFtZS4KLSAgICAgICAgIyBBbGxvdyB0aGUgdW5pdCB0ZXN0
cyB0byBkaXNhYmxlIGNvbW1hbmQgYXV0by1kaXNjb3ZlcnkuCi0gICAgICAgIHNlbGYuY29tbWFu
ZHMgPSBjb21tYW5kcyBvciBbY2xzKCkgZm9yIGNscyBpbiBzZWxmLl9maW5kX2FsbF9jb21tYW5k
cygpIGlmIGNscy5uYW1lXQotICAgICAgICBzZWxmLmhlbHBfY29tbWFuZCA9IHNlbGYuY29tbWFu
ZF9ieV9uYW1lKEhlbHBDb21tYW5kLm5hbWUpCi0gICAgICAgICMgUmVxdWlyZSBhIGhlbHAgY29t
bWFuZCwgZXZlbiBpZiB0aGUgbWFudWFsIHRlc3QgbGlzdCBkb2Vzbid0IGluY2x1ZGUgb25lLgot
ICAgICAgICBpZiBub3Qgc2VsZi5oZWxwX2NvbW1hbmQ6Ci0gICAgICAgICAgICBzZWxmLmhlbHBf
Y29tbWFuZCA9IEhlbHBDb21tYW5kKCkKLSAgICAgICAgICAgIHNlbGYuY29tbWFuZHMuYXBwZW5k
KHNlbGYuaGVscF9jb21tYW5kKQotICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRz
OgotICAgICAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2woc2VsZikKLQotICAgIEBjbGFzc21l
dGhvZAotICAgIGRlZiBfYWRkX2FsbF9zdWJjbGFzc2VzKGNscywgY2xhc3NfdG9fY3Jhd2wsIHNl
ZW5fY2xhc3Nlcyk6Ci0gICAgICAgIGZvciBzdWJjbGFzcyBpbiBjbGFzc190b19jcmF3bC5fX3N1
YmNsYXNzZXNfXygpOgotICAgICAgICAgICAgaWYgc3ViY2xhc3Mgbm90IGluIHNlZW5fY2xhc3Nl
czoKLSAgICAgICAgICAgICAgICBzZWVuX2NsYXNzZXMuYWRkKHN1YmNsYXNzKQotICAgICAgICAg
ICAgICAgIGNscy5fYWRkX2FsbF9zdWJjbGFzc2VzKHN1YmNsYXNzLCBzZWVuX2NsYXNzZXMpCi0K
LSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2ZpbmRfYWxsX2NvbW1hbmRzKGNscyk6Ci0gICAg
ICAgIGNvbW1hbmRzID0gc2V0KCkKLSAgICAgICAgY2xzLl9hZGRfYWxsX3N1YmNsYXNzZXMoQ29t
bWFuZCwgY29tbWFuZHMpCi0gICAgICAgIHJldHVybiBzb3J0ZWQoY29tbWFuZHMpCi0KLSAgICBk
ZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKLQotICAgIGRlZiBfY3Jl
YXRlX29wdGlvbl9wYXJzZXIoc2VsZik6Ci0gICAgICAgIHVzYWdlID0gIlVzYWdlOiAlcHJvZyBb
b3B0aW9uc10gQ09NTUFORCBbQVJHU10iCi0gICAgICAgIHJldHVybiBIZWxwUHJpbnRpbmdPcHRp
b25QYXJzZXIoZXBpbG9nX21ldGhvZD1zZWxmLmhlbHBfY29tbWFuZC5faGVscF9lcGlsb2csIHBy
b2c9c2VsZi5uYW1lKCksIHVzYWdlPXVzYWdlKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBfc3BsaXRfY29tbWFuZF9uYW1lX2Zyb21fYXJncyhhcmdzKToKLSAgICAgICAgIyBBc3N1bWUg
dGhlIGZpcnN0IGFyZ3VtZW50IHdoaWNoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAiLSIgaXMgdGhlIGNv
bW1hbmQgbmFtZS4KLSAgICAgICAgY29tbWFuZF9pbmRleCA9IDAKLSAgICAgICAgZm9yIGFyZyBp
biBhcmdzOgotICAgICAgICAgICAgaWYgYXJnWzBdICE9ICItIjoKLSAgICAgICAgICAgICAgICBi
cmVhawotICAgICAgICAgICAgY29tbWFuZF9pbmRleCArPSAxCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICByZXR1cm4gKE5vbmUsIGFyZ3NbOl0pCi0KLSAgICAgICAgY29tbWFuZCA9IGFyZ3Nb
Y29tbWFuZF9pbmRleF0KLSAgICAgICAgcmV0dXJuIChjb21tYW5kLCBhcmdzWzpjb21tYW5kX2lu
ZGV4XSArIGFyZ3NbY29tbWFuZF9pbmRleCArIDE6XSkKLQotICAgIGRlZiBjb21tYW5kX2J5X25h
bWUoc2VsZiwgY29tbWFuZF9uYW1lKToKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21t
YW5kczoKLSAgICAgICAgICAgIGlmIGNvbW1hbmRfbmFtZSA9PSBjb21tYW5kLm5hbWU6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmQKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRl
ZiBwYXRoKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xh
c3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiBzaG91bGRfc2hvd19pbl9tYWluX2hlbHAo
c2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIHJldHVybiBjb21tYW5kLnNob3dfaW5fbWFpbl9oZWxw
Ci0KLSAgICBkZWYgc2hvdWxkX2V4ZWN1dGVfY29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAgICAg
ICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfYWRkX2dsb2JhbF9vcHRpb25zKHNlbGYsIG9wdGlv
bl9wYXJzZXIpOgotICAgICAgICBnbG9iYWxfb3B0aW9ucyA9IHNlbGYuZ2xvYmFsX29wdGlvbnMg
b3IgW10KLSAgICAgICAgZm9yIG9wdGlvbiBpbiBnbG9iYWxfb3B0aW9uczoKLSAgICAgICAgICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbihvcHRpb24pCi0KLSAgICBkZWYgaGFuZGxlX2dsb2Jh
bF9vcHRpb25zKHNlbGYsIG9wdGlvbnMpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgbWFpbihz
ZWxmLCBhcmd2PXN5cy5hcmd2KToKLSAgICAgICAgKGNvbW1hbmRfbmFtZSwgYXJncykgPSBzZWxm
Ll9zcGxpdF9jb21tYW5kX25hbWVfZnJvbV9hcmdzKGFyZ3ZbMTpdKQotCi0gICAgICAgIG9wdGlv
bl9wYXJzZXIgPSBzZWxmLl9jcmVhdGVfb3B0aW9uX3BhcnNlcigpCi0gICAgICAgIHNlbGYuX2Fk
ZF9nbG9iYWxfb3B0aW9ucyhvcHRpb25fcGFyc2VyKQotCi0gICAgICAgIGNvbW1hbmQgPSBzZWxm
LmNvbW1hbmRfYnlfbmFtZShjb21tYW5kX25hbWUpIG9yIHNlbGYuaGVscF9jb21tYW5kCi0gICAg
ICAgIGlmIG5vdCBjb21tYW5kOgotICAgICAgICAgICAgb3B0aW9uX3BhcnNlci5lcnJvcigiJXMg
aXMgbm90IGEgcmVjb2duaXplZCBjb21tYW5kIiAlIGNvbW1hbmRfbmFtZSkKLQotICAgICAgICBj
b21tYW5kLnNldF9vcHRpb25fcGFyc2VyKG9wdGlvbl9wYXJzZXIpCi0gICAgICAgIChvcHRpb25z
LCBhcmdzKSA9IGNvbW1hbmQucGFyc2VfYXJncyhhcmdzKQotICAgICAgICBzZWxmLmhhbmRsZV9n
bG9iYWxfb3B0aW9ucyhvcHRpb25zKQotCi0gICAgICAgIChzaG91bGRfZXhlY3V0ZSwgZmFpbHVy
ZV9yZWFzb24pID0gc2VsZi5zaG91bGRfZXhlY3V0ZV9jb21tYW5kKGNvbW1hbmQpCi0gICAgICAg
IGlmIG5vdCBzaG91bGRfZXhlY3V0ZToKLSAgICAgICAgICAgIGxvZyhmYWlsdXJlX3JlYXNvbikK
LSAgICAgICAgICAgIHJldHVybiAwICMgRklYTUU6IFNob3VsZCB0aGlzIHJlYWxseSBiZSAwPwot
Ci0gICAgICAgIHJldHVybiBjb21tYW5kLmNoZWNrX2FyZ3VtZW50c19hbmRfZXhlY3V0ZShvcHRp
b25zLCBhcmdzLCBzZWxmKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL211bHRp
Y29tbWFuZHRvb2xfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy9tb2R1bGVzL211bHRpY29tbWFuZHRvb2xfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUyNzAyKQor
KysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL211bHRpY29tbWFuZHRvb2xfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUzICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDA5
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gbXVsdGljb21tYW5kdG9vbCBpbXBv
cnQgTXVsdGlDb21tYW5kVG9vbCwgQ29tbWFuZAotZnJvbSBtb2R1bGVzLm91dHB1dGNhcHR1cmUg
aW1wb3J0IE91dHB1dENhcHR1cmUKLQotZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24K
LQotY2xhc3MgVHJpdmlhbENvbW1hbmQoQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJ0cml2aWFsIgot
ICAgIHNob3dfaW5fbWFpbl9oZWxwID0gVHJ1ZQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3
YXJncyk6Ci0gICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgImhlbHAgdGV4dCIsICoqa3dh
cmdzKQotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAg
ICAgIHBhc3MKLQotY2xhc3MgVW5jb21tb25Db21tYW5kKFRyaXZpYWxDb21tYW5kKToKLSAgICBu
YW1lID0gInVuY29tbW9uIgotICAgIHNob3dfaW5fbWFpbl9oZWxwID0gRmFsc2UKLQotY2xhc3Mg
Q29tbWFuZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X25hbWVfd2l0aF9h
cmd1bWVudHMoc2VsZik6Ci0gICAgICAgIGNvbW1hbmRfd2l0aF9hcmdzID0gVHJpdmlhbENvbW1h
bmQoYXJndW1lbnRfbmFtZXM9IkFSRzEgQVJHMiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Y29tbWFuZF93aXRoX2FyZ3MubmFtZV93aXRoX2FyZ3VtZW50cygpLCAidHJpdmlhbCBBUkcxIEFS
RzIiKQotCi0gICAgICAgIGNvbW1hbmRfd2l0aF9hcmdzID0gVHJpdmlhbENvbW1hbmQob3B0aW9u
cz1bbWFrZV9vcHRpb24oIi0tbXlfb3B0aW9uIildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGNvbW1hbmRfd2l0aF9hcmdzLm5hbWVfd2l0aF9hcmd1bWVudHMoKSwgInRyaXZpYWwgW29wdGlv
bnNdIikKLQotICAgIGRlZiB0ZXN0X3BhcnNlX3JlcXVpcmVkX2FyZ3VtZW50cyhzZWxmKToKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21tYW5kLl9wYXJzZV9yZXF1aXJlZF9hcmd1bWVudHMo
IkFSRzEgQVJHMiIpLCBbIkFSRzEiLCAiQVJHMiJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KENvbW1hbmQuX3BhcnNlX3JlcXVpcmVkX2FyZ3VtZW50cygiW0FSRzFdIFtBUkcyXSIpLCBbXSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21tYW5kLl9wYXJzZV9yZXF1aXJlZF9hcmd1bWVu
dHMoIltBUkcxXSBBUkcyIiksIFsiQVJHMiJdKQotICAgICAgICAjIE5vdGU6IFdlIG1pZ2h0IG1h
a2Ugb3VyIGFyZyBwYXJzaW5nIHNtYXJ0ZXIgaW4gdGhlIGZ1dHVyZSBhbmQgYWxsb3cgdGhpcyB0
eXBlIG9mIGFyZ3VtZW50cyBzdHJpbmcuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2Vw
dGlvbiwgQ29tbWFuZC5fcGFyc2VfcmVxdWlyZWRfYXJndW1lbnRzLCAiW0FSRzEgQVJHMl0iKQot
Ci0gICAgZGVmIHRlc3RfcmVxdWlyZWRfYXJndW1lbnRzKHNlbGYpOgotICAgICAgICB0d29fcmVx
dWlyZWRfYXJndW1lbnRzID0gVHJpdmlhbENvbW1hbmQoYXJndW1lbnRfbmFtZXM9IkFSRzEgQVJH
MiBbQVJHM10iKQotICAgICAgICBleHBlY3RlZF9taXNzaW5nX2FyZ3NfZXJyb3IgPSAiMiBhcmd1
bWVudHMgcmVxdWlyZWQsIDEgYXJndW1lbnQgcHJvdmlkZWQuICBQcm92aWRlZDogJ2ZvbycgIFJl
cXVpcmVkOiBBUkcxIEFSRzJcblNlZSAndHJpdmlhbC10b29sIGhlbHAgdHJpdmlhbCcgZm9yIHVz
YWdlLlxuIgotICAgICAgICBleGl0X2NvZGUgPSBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1
dHMoc2VsZiwgdHdvX3JlcXVpcmVkX2FyZ3VtZW50cy5jaGVja19hcmd1bWVudHNfYW5kX2V4ZWN1
dGUsIFtOb25lLCBbImZvbyJdLCBUcml2aWFsVG9vbCgpXSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVj
dGVkX21pc3NpbmdfYXJnc19lcnJvcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0X2Nv
ZGUsIDEpCi0KLQotY2xhc3MgVHJpdmlhbFRvb2woTXVsdGlDb21tYW5kVG9vbCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIGNvbW1hbmRzPU5vbmUpOgotICAgICAgICBNdWx0aUNvbW1hbmRUb29s
Ll9faW5pdF9fKHNlbGYsIG5hbWU9InRyaXZpYWwtdG9vbCIsIGNvbW1hbmRzPWNvbW1hbmRzKQot
Ci0gICAgZGVmIHBhdGgoKToKLSAgICAgICAgcmV0dXJuIF9fZmlsZV9fCi0KLSAgICBkZWYgc2hv
dWxkX2V4ZWN1dGVfY29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuIChUcnVl
LCBOb25lKQotCi0KLWNsYXNzIE11bHRpQ29tbWFuZFRvb2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLSAgICBkZWYgX2Fzc2VydF9zcGxpdChzZWxmLCBhcmdzLCBleHBlY3RlZF9zcGxpdCk6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTXVsdGlDb21tYW5kVG9vbC5fc3BsaXRfY29tbWFuZF9u
YW1lX2Zyb21fYXJncyhhcmdzKSwgZXhwZWN0ZWRfc3BsaXQpCi0KLSAgICBkZWYgdGVzdF9zcGxp
dF9hcmdzKHNlbGYpOgotICAgICAgICAjIE11bHRpQ29tbWFuZFRvb2xUZXN0Ll9zcGxpdF9jb21t
YW5kX25hbWVfZnJvbV9hcmdzIHJldHVybnM6IChjb21tYW5kLCBhcmdzKQotICAgICAgICBmdWxs
X2FyZ3MgPSBbIi0tZ2xvYmFsLW9wdGlvbiIsICJjb21tYW5kIiwgIi0tb3B0aW9uIiwgImFyZyJd
Ci0gICAgICAgIGZ1bGxfYXJnc19leHBlY3RlZCA9ICgiY29tbWFuZCIsIFsiLS1nbG9iYWwtb3B0
aW9uIiwgIi0tb3B0aW9uIiwgImFyZyJdKQotICAgICAgICBzZWxmLl9hc3NlcnRfc3BsaXQoZnVs
bF9hcmdzLCBmdWxsX2FyZ3NfZXhwZWN0ZWQpCi0KLSAgICAgICAgZnVsbF9hcmdzID0gW10KLSAg
ICAgICAgZnVsbF9hcmdzX2V4cGVjdGVkID0gKE5vbmUsIFtdKQotICAgICAgICBzZWxmLl9hc3Nl
cnRfc3BsaXQoZnVsbF9hcmdzLCBmdWxsX2FyZ3NfZXhwZWN0ZWQpCi0KLSAgICAgICAgZnVsbF9h
cmdzID0gWyJjb21tYW5kIiwgImFyZyJdCi0gICAgICAgIGZ1bGxfYXJnc19leHBlY3RlZCA9ICgi
Y29tbWFuZCIsIFsiYXJnIl0pCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zcGxpdChmdWxsX2FyZ3Ms
IGZ1bGxfYXJnc19leHBlY3RlZCkKLQotICAgIGRlZiB0ZXN0X2NvbW1hbmRfYnlfbmFtZShzZWxm
KToKLSAgICAgICAgIyBUaGlzIGFsc28gdGVzdHMgQ29tbWFuZCBhdXRvLWRpc2NvdmVyeS4KLSAg
ICAgICAgdG9vbCA9IFRyaXZpYWxUb29sKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b29s
LmNvbW1hbmRfYnlfbmFtZSgidHJpdmlhbCIpLm5hbWUsICJ0cml2aWFsIikKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh0b29sLmNvbW1hbmRfYnlfbmFtZSgiYmFyIiksIE5vbmUpCi0KLSAgICBk
ZWYgX2Fzc2VydF90b29sX21haW5fb3V0cHV0cyhzZWxmLCB0b29sLCBtYWluX2FyZ3MsIGV4cGVj
dGVkX3N0ZG91dCwgZXhwZWN0ZWRfc3RkZXJyID0gIiIsIGV4cGVjdGVkX2V4aXRfY29kZT0wKToK
LSAgICAgICAgZXhpdF9jb2RlID0gT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IHRvb2wubWFpbiwgW21haW5fYXJnc10sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQs
IGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZXhpdF9jb2RlLCBleHBlY3RlZF9leGl0X2NvZGUpCi0KLSAgICBkZWYgdGVzdF9nbG9iYWxf
aGVscChzZWxmKToKLSAgICAgICAgdG9vbCA9IFRyaXZpYWxUb29sKGNvbW1hbmRzPVtUcml2aWFs
Q29tbWFuZCgpLCBVbmNvbW1vbkNvbW1hbmQoKV0pCi0gICAgICAgIGV4cGVjdGVkX2NvbW1vbl9j
b21tYW5kc19oZWxwID0gIiIiVXNhZ2U6IHRyaXZpYWwtdG9vbCBbb3B0aW9uc10gQ09NTUFORCBb
QVJHU10KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBh
bmQgZXhpdAotCi1Db21tb24gdHJpdmlhbC10b29sIGNvbW1hbmRzOgotICAgdHJpdmlhbCAgIGhl
bHAgdGV4dAotCi1TZWUgJ3RyaXZpYWwtdG9vbCBoZWxwIC0tYWxsLWNvbW1hbmRzJyB0byBsaXN0
IGFsbCBjb21tYW5kcy4KLVNlZSAndHJpdmlhbC10b29sIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUg
aW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgotCi0iIiIKLSAgICAgICAgc2VsZi5f
YXNzZXJ0X3Rvb2xfbWFpbl9vdXRwdXRzKHRvb2wsIFsidG9vbCJdLCBleHBlY3RlZF9jb21tb25f
Y29tbWFuZHNfaGVscCkKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3Rvb2xfbWFpbl9vdXRwdXRzKHRv
b2wsIFsidG9vbCIsICJoZWxwIl0sIGV4cGVjdGVkX2NvbW1vbl9jb21tYW5kc19oZWxwKQotICAg
ICAgICBleHBlY3RlZF9hbGxfY29tbWFuZHNfaGVscCA9ICIiIlVzYWdlOiB0cml2aWFsLXRvb2wg
W29wdGlvbnNdIENPTU1BTkQgW0FSR1NdCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgIHNob3cg
dGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLQotQWxsIHRyaXZpYWwtdG9vbCBjb21tYW5kczoK
LSAgIGhlbHAgICAgICAgRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHByb2dyYW0gb3Ig
aXRzIHN1YmNvbW1hbmRzCi0gICB0cml2aWFsICAgIGhlbHAgdGV4dAotICAgdW5jb21tb24gICBo
ZWxwIHRleHQKLQotU2VlICd0cml2aWFsLXRvb2wgaGVscCAtLWFsbC1jb21tYW5kcycgdG8gbGlz
dCBhbGwgY29tbWFuZHMuCi1TZWUgJ3RyaXZpYWwtdG9vbCBoZWxwIENPTU1BTkQnIGZvciBtb3Jl
IGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KLQotIiIiCi0gICAgICAgIHNlbGYu
X2Fzc2VydF90b29sX21haW5fb3V0cHV0cyh0b29sLCBbInRvb2wiLCAiaGVscCIsICItLWFsbC1j
b21tYW5kcyJdLCBleHBlY3RlZF9hbGxfY29tbWFuZHNfaGVscCkKLSAgICAgICAgIyBUZXN0IHRo
YXQgYXJndW1lbnRzIGNhbiBiZSBwYXNzZWQgYmVmb3JlIGNvbW1hbmRzIGFzIHdlbGwKLSAgICAg
ICAgc2VsZi5fYXNzZXJ0X3Rvb2xfbWFpbl9vdXRwdXRzKHRvb2wsIFsidG9vbCIsICItLWFsbC1j
b21tYW5kcyIsICJoZWxwIl0sIGV4cGVjdGVkX2FsbF9jb21tYW5kc19oZWxwKQotCi0KLSAgICBk
ZWYgdGVzdF9jb21tYW5kX2hlbHAoc2VsZik6Ci0gICAgICAgIGNvbW1hbmRfd2l0aF9vcHRpb25z
ID0gVHJpdmlhbENvbW1hbmQob3B0aW9ucz1bbWFrZV9vcHRpb24oIi0tbXlfb3B0aW9uIildKQot
ICAgICAgICB0b29sID0gVHJpdmlhbFRvb2woY29tbWFuZHM9W2NvbW1hbmRfd2l0aF9vcHRpb25z
XSkKLSAgICAgICAgZXhwZWN0ZWRfc3ViY29tbWFuZF9oZWxwID0gInRyaXZpYWwgW29wdGlvbnNd
ICAgaGVscCB0ZXh0XG5PcHRpb25zOlxuICAtLW15X29wdGlvbj1NWV9PUFRJT05cblxuIgotICAg
ICAgICBzZWxmLl9hc3NlcnRfdG9vbF9tYWluX291dHB1dHModG9vbCwgWyJ0b29sIiwgImhlbHAi
LCAidHJpdmlhbCJdLCBleHBlY3RlZF9zdWJjb21tYW5kX2hlbHApCi0KLQotaWYgX19uYW1lX18g
PT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy9vdXRwdXRjYXB0dXJlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy9vdXRwdXRjYXB0dXJlLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9vdXRwdXRjYXB0dXJlLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYyICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotIwotIyBDbGFzcyBmb3IgdW5p
dHRlc3Qgc3VwcG9ydC4gIFVzZWQgZm9yIGNhcHR1cmluZyBzdGRlcnIvc3Rkb3V0LgotCi1pbXBv
cnQgc3lzCi1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotCi1jbGFzcyBPdXRwdXRDYXB0
dXJlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnNhdmVk
X291dHB1dHMgPSBkaWN0KCkKLQotICAgIGRlZiBfY2FwdHVyZV9vdXRwdXRfd2l0aF9uYW1lKHNl
bGYsIG91dHB1dF9uYW1lKToKLSAgICAgICAgc2VsZi5zYXZlZF9vdXRwdXRzW291dHB1dF9uYW1l
XSA9IGdldGF0dHIoc3lzLCBvdXRwdXRfbmFtZSkKLSAgICAgICAgc2V0YXR0cihzeXMsIG91dHB1
dF9uYW1lLCBTdHJpbmdJTygpKQotCi0gICAgZGVmIF9yZXN0b3JlX291dHB1dF93aXRoX25hbWUo
c2VsZiwgb3V0cHV0X25hbWUpOgotICAgICAgICBjYXB0dXJlZF9vdXRwdXQgPSBnZXRhdHRyKHN5
cywgb3V0cHV0X25hbWUpLmdldHZhbHVlKCkKLSAgICAgICAgc2V0YXR0cihzeXMsIG91dHB1dF9u
YW1lLCBzZWxmLnNhdmVkX291dHB1dHNbb3V0cHV0X25hbWVdKQotICAgICAgICBkZWwgc2VsZi5z
YXZlZF9vdXRwdXRzW291dHB1dF9uYW1lXQotICAgICAgICByZXR1cm4gY2FwdHVyZWRfb3V0cHV0
Ci0KLSAgICBkZWYgY2FwdHVyZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIHNlbGYuX2NhcHR1cmVf
b3V0cHV0X3dpdGhfbmFtZSgic3Rkb3V0IikKLSAgICAgICAgc2VsZi5fY2FwdHVyZV9vdXRwdXRf
d2l0aF9uYW1lKCJzdGRlcnIiKQotCi0gICAgZGVmIHJlc3RvcmVfb3V0cHV0KHNlbGYpOgotICAg
ICAgICByZXR1cm4gKHNlbGYuX3Jlc3RvcmVfb3V0cHV0X3dpdGhfbmFtZSgic3Rkb3V0IiksIHNl
bGYuX3Jlc3RvcmVfb3V0cHV0X3dpdGhfbmFtZSgic3RkZXJyIikpCi0KLSAgICBkZWYgYXNzZXJ0
X291dHB1dHMoc2VsZiwgdGVzdGNhc2UsIGZ1bmN0aW9uLCBhcmdzPVtdLCBrd2FyZ3M9e30sIGV4
cGVjdGVkX3N0ZG91dD0iIiwgZXhwZWN0ZWRfc3RkZXJyPSIiKToKLSAgICAgICAgc2VsZi5jYXB0
dXJlX291dHB1dCgpCi0gICAgICAgIHJldHVybl92YWx1ZSA9IGZ1bmN0aW9uKCphcmdzLCAqKmt3
YXJncykKLSAgICAgICAgKHN0ZG91dF9zdHJpbmcsIHN0ZGVycl9zdHJpbmcpID0gc2VsZi5yZXN0
b3JlX291dHB1dCgpCi0gICAgICAgIHRlc3RjYXNlLmFzc2VydEVxdWFsKHN0ZG91dF9zdHJpbmcs
IGV4cGVjdGVkX3N0ZG91dCkKLSAgICAgICAgdGVzdGNhc2UuYXNzZXJ0RXF1YWwoc3RkZXJyX3N0
cmluZywgZXhwZWN0ZWRfc3RkZXJyKQotICAgICAgICAjIFRoaXMgaXMgYSBsaXR0bGUgc3RyYW5n
ZSwgYnV0IEkgZG9uJ3Qga25vdyB3aGVyZSBlbHNlIHRvIHJldHVybiB0aGlzIGluZm9ybWF0aW9u
LgotICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvcGF0Y2hjb2xsZWN0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy9wYXRjaGNvbGxlY3Rpb24ucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3BhdGNoY29sbGVjdGlvbi5weQkod29ya2luZyBjb3B5
KQpAQCAtMSw2MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChj
KSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi1jbGFzcyBQZXJzaXN0ZW50UGF0Y2hDb2xsZWN0aW9uRGVsZWdhdGU6Ci0gICAgZGVm
IGNvbGxlY3Rpb25fbmFtZShzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
ciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYgZmV0Y2hfcG90ZW50aWFs
X3BhdGNoX2lkcyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1
YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYgc3RhdHVzX3NlcnZlcihzZWxmKToK
LSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBs
ZW1lbnQiCi0KLQotY2xhc3MgUGVyc2lzdGVudFBhdGNoQ29sbGVjdGlvbjoKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgZGVsZWdhdGUpOgotICAgICAgICBzZWxmLl9kZWxlZ2F0ZSA9IGRlbGVnYXRl
Ci0gICAgICAgIHNlbGYuX25hbWUgPSBzZWxmLl9kZWxlZ2F0ZS5jb2xsZWN0aW9uX25hbWUoKQot
ICAgICAgICBzZWxmLl9zdGF0dXMgPSBzZWxmLl9kZWxlZ2F0ZS5zdGF0dXNfc2VydmVyKCkKLSAg
ICAgICAgc2VsZi5fc3RhdHVzX2NhY2hlID0ge30KLQotICAgIGRlZiBfY2FjaGVkX3N0YXR1cyhz
ZWxmLCBwYXRjaF9pZCk6Ci0gICAgICAgIGNhY2hlZCA9IHNlbGYuX3N0YXR1c19jYWNoZS5nZXQo
cGF0Y2hfaWQpCi0gICAgICAgIGlmIGNhY2hlZDoKLSAgICAgICAgICAgIHJldHVybiBjYWNoZWQK
LSAgICAgICAgc3RhdHVzID0gc2VsZi5fc3RhdHVzLnBhdGNoX3N0YXR1cyhzZWxmLl9uYW1lLCBw
YXRjaF9pZCkKLSAgICAgICAgaWYgc3RhdHVzOgotICAgICAgICAgICAgc2VsZi5fc3RhdHVzX2Nh
Y2hlW3BhdGNoX2lkXSA9IHN0YXR1cwotICAgICAgICByZXR1cm4gc3RhdHVzCi0KLSAgICBkZWYg
bmV4dChzZWxmKToKLSAgICAgICAgcGF0Y2hfaWRzID0gc2VsZi5fZGVsZWdhdGUuZmV0Y2hfcG90
ZW50aWFsX3BhdGNoX2lkcygpCi0gICAgICAgIGZvciBwYXRjaF9pZCBpbiBwYXRjaF9pZHM6Ci0g
ICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9jYWNoZWRfc3RhdHVzKHBhdGNoX2lkKQotICAgICAg
ICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGF0Y2hfaWQKLQpJ
bmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3F1ZXVlZW5naW5lLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9xdWV1ZWVuZ2luZS5weQkocmV2aXNp
b24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvcXVldWVlbmdpbmUucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTQ0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgot
IyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
IENvcHlyaWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgot
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1wb3J0IHRpbWUKLWltcG9ydCB0cmFjZWJh
Y2sKLQotZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQotCi1mcm9tIG1v
ZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgotZnJvbSBtb2R1bGVzLndlYmtpdF9s
b2dnaW5nIGltcG9ydCBsb2csIE91dHB1dFRlZQotZnJvbSBtb2R1bGVzLnN0YXR1c2JvdCBpbXBv
cnQgU3RhdHVzQm90Ci0KLWNsYXNzIFF1ZXVlRW5naW5lRGVsZWdhdGU6Ci0gICAgZGVmIHF1ZXVl
X2xvZ19wYXRoKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3Vi
Y2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiB3b3JrX2l0ZW1fbG9nX3BhdGgoc2Vs
Ziwgd29ya19pdGVtKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNs
YXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYgYmVnaW5fd29ya19xdWV1ZShzZWxmKToK
LSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBs
ZW1lbnQiCi0KLSAgICBkZWYgc2hvdWxkX2NvbnRpbnVlX3dvcmtfcXVldWUoc2VsZik6Ci0gICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50
IgotCi0gICAgZGVmIG5leHRfd29ya19pdGVtKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiBzaG91
bGRfcHJvY2VlZF93aXRoX3dvcmtfaXRlbShzZWxmLCB3b3JrX2l0ZW0pOgotICAgICAgICAjIHJl
dHVybnMgKHNhZmVfdG9fcHJvY2VlZCwgd2FpdGluZ19tZXNzYWdlLCBwYXRjaCkKLSAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0K
LSAgICBkZWYgcHJvY2Vzc193b3JrX2l0ZW0oc2VsZiwgd29ya19pdGVtKToKLSAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAg
ICBkZWYgaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3Ioc2VsZiwgd29ya19pdGVtLCBtZXNzYWdlKToK
LSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBs
ZW1lbnQiCi0KLQotY2xhc3MgUXVldWVFbmdpbmU6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h
bWUsIGRlbGVnYXRlKToKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5f
ZGVsZWdhdGUgPSBkZWxlZ2F0ZQotICAgICAgICBzZWxmLl9vdXRwdXRfdGVlID0gT3V0cHV0VGVl
KCkKLQotICAgIGxvZ19kYXRlX2Zvcm1hdCA9ICIlWS0lbS0lZCAlSDolTTolUyIKLSAgICBzbGVl
cF9kdXJhdGlvbl90ZXh0ID0gIjUgbWlucyIKLSAgICBzZWNvbmRzX3RvX3NsZWVwID0gMzAwCi0g
ICAgaGFuZGxlZF9lcnJvcl9jb2RlID0gMgotCi0gICAgIyBDaGlsZCBwcm9jZXNzZXMgZXhpdCB3
aXRoIGEgc3BlY2lhbCBjb2RlIHRvIHRoZSBwYXJlbnQgcXVldWUgcHJvY2VzcyBjYW4gZGV0ZWN0
IHRoZSBlcnJvciB3YXMgaGFuZGxlZC4KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZXhpdF9h
ZnRlcl9oYW5kbGVkX2Vycm9yKGNscywgZXJyb3IpOgotICAgICAgICBsb2coZXJyb3IpCi0gICAg
ICAgIGV4aXQoY2xzLmhhbmRsZWRfZXJyb3JfY29kZSkKLQotICAgIGRlZiBydW4oc2VsZik6Ci0g
ICAgICAgIHNlbGYuX2JlZ2luX2xvZ2dpbmcoKQotCi0gICAgICAgIHNlbGYuX2RlbGVnYXRlLmJl
Z2luX3dvcmtfcXVldWUoKQotICAgICAgICB3aGlsZSAoc2VsZi5fZGVsZWdhdGUuc2hvdWxkX2Nv
bnRpbnVlX3dvcmtfcXVldWUoKSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
c2VsZi5fZW5zdXJlX3dvcmtfbG9nX2Nsb3NlZCgpCi0gICAgICAgICAgICAgICAgd29ya19pdGVt
ID0gc2VsZi5fZGVsZWdhdGUubmV4dF93b3JrX2l0ZW0oKQotICAgICAgICAgICAgICAgIGlmIG5v
dCB3b3JrX2l0ZW06Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3NsZWVwKCJObyB3b3JrIGl0
ZW0uIikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5fZGVsZWdhdGUuc2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0od29ya19pdGVt
KToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2xlZXAoIk5vdCBwcm9jZWVkaW5nIHdpdGgg
d29yayBpdGVtLiIpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAg
ICAgICAjIEZJWE1FOiBXb3JrIGxvZ3Mgc2hvdWxkIG5vdCBkZXBlbmQgb24gYnVnX2lkIHNwZWNp
ZmljYWx5LgotICAgICAgICAgICAgICAgICMgICAgICAgIFRoaXMgbG9va3MgZml4ZWQsIG5vPwot
ICAgICAgICAgICAgICAgIHNlbGYuX29wZW5fd29ya19sb2cod29ya19pdGVtKQotICAgICAgICAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVsZWdhdGUucHJvY2Vzc193
b3JrX2l0ZW0od29ya19pdGVtKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwg
ZToKLSAgICAgICAgICAgICAgICAgICAgIyBVc2UgYSBzcGVjaWFsIGV4aXQgY29kZSB0byBpbmRp
Y2F0ZSB0aGF0IHRoZSBlcnJvciB3YXMgYWxyZWFkeQotICAgICAgICAgICAgICAgICAgICAjIGhh
bmRsZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgYW5kIHdlIHNob3VsZCBqdXN0IGtlZXAgbG9vcGlu
Zy4KLSAgICAgICAgICAgICAgICAgICAgaWYgZS5leGl0X2NvZGUgPT0gc2VsZi5oYW5kbGVkX2Vy
cm9yX2NvZGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQgZmFpbHVyZSB3aGVuIGxhbmRpbmcgcGF0Y2gh
ICBQbGVhc2UgZmlsZSBhIGJ1ZyBhZ2FpbnN0IGJ1Z3ppbGxhLXRvb2wuXG4lcyIgJSBlLm1lc3Nh
Z2Vfd2l0aF9vdXRwdXQoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWxlZ2F0ZS5oYW5k
bGVfdW5leHBlY3RlZF9lcnJvcih3b3JrX2l0ZW0sIG1lc3NhZ2UpCi0gICAgICAgICAgICBleGNl
cHQgS2V5Ym9hcmRJbnRlcnJ1cHQsIGU6Ci0gICAgICAgICAgICAgICAgbG9nKCJcblVzZXIgdGVy
bWluYXRlZCBxdWV1ZS4iKQotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMo
KQotICAgICAgICAgICAgICAgICMgRG9uJ3QgdHJ5IHRlbGwgdGhlIHN0YXR1cyBib3QsIGluIGNh
c2UgdGVsbGluZyBpdCBjYXVzZXMgYW4gZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIHNlbGYu
X3NsZWVwKCJFeGNlcHRpb24gd2hpbGUgcHJlcGFyaW5nIHF1ZXVlOiAlcy4iICUgZSkKLSAgICAg
ICAgIyBOZXZlciByZWFjaGVkLgotICAgICAgICBzZWxmLl9lbnN1cmVfd29ya19sb2dfY2xvc2Vk
KCkKLQotICAgIGRlZiBfYmVnaW5fbG9nZ2luZyhzZWxmKToKLSAgICAgICAgc2VsZi5fcXVldWVf
bG9nID0gc2VsZi5fb3V0cHV0X3RlZS5hZGRfbG9nKHNlbGYuX2RlbGVnYXRlLnF1ZXVlX2xvZ19w
YXRoKCkpCi0gICAgICAgIHNlbGYuX3dvcmtfbG9nID0gTm9uZQotCi0gICAgZGVmIF9vcGVuX3dv
cmtfbG9nKHNlbGYsIHdvcmtfaXRlbSk6Ci0gICAgICAgIHdvcmtfaXRlbV9sb2dfcGF0aCA9IHNl
bGYuX2RlbGVnYXRlLndvcmtfaXRlbV9sb2dfcGF0aCh3b3JrX2l0ZW0pCi0gICAgICAgIHNlbGYu
X3dvcmtfbG9nID0gc2VsZi5fb3V0cHV0X3RlZS5hZGRfbG9nKHdvcmtfaXRlbV9sb2dfcGF0aCkK
LQotICAgIGRlZiBfZW5zdXJlX3dvcmtfbG9nX2Nsb3NlZChzZWxmKToKLSAgICAgICAgIyBJZiB3
ZSBzdGlsbCBoYXZlIGEgYnVnIGxvZyBvcGVuLCBjbG9zZSBpdC4KLSAgICAgICAgaWYgc2VsZi5f
d29ya19sb2c6Ci0gICAgICAgICAgICBzZWxmLl9vdXRwdXRfdGVlLnJlbW92ZV9sb2coc2VsZi5f
d29ya19sb2cpCi0gICAgICAgICAgICBzZWxmLl93b3JrX2xvZyA9IE5vbmUKLQotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBfc2xlZXBfbWVzc2FnZShjbHMsIG1lc3NhZ2UpOgotICAgICAgICB3
YWtlX3RpbWUgPSBkYXRldGltZS5ub3coKSArIHRpbWVkZWx0YShzZWNvbmRzPWNscy5zZWNvbmRz
X3RvX3NsZWVwKQotICAgICAgICByZXR1cm4gIiVzIFNsZWVwaW5nIHVudGlsICVzICglcykuIiAl
IChtZXNzYWdlLCB3YWtlX3RpbWUuc3RyZnRpbWUoY2xzLmxvZ19kYXRlX2Zvcm1hdCksIGNscy5z
bGVlcF9kdXJhdGlvbl90ZXh0KQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9zbGVlcChj
bHMsIG1lc3NhZ2UpOgotICAgICAgICBsb2coY2xzLl9zbGVlcF9tZXNzYWdlKG1lc3NhZ2UpKQot
ICAgICAgICB0aW1lLnNsZWVwKGNscy5zZWNvbmRzX3RvX3NsZWVwKQpJbmRleDogV2ViS2l0VG9v
bHMvU2NyaXB0cy9tb2R1bGVzL3F1ZXVlZW5naW5lX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9xdWV1ZWVuZ2luZV91bml0dGVzdC5weQkocmV2
aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvcXVldWVlbmdpbmVf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcwICswLDAgQEAKLSMhL3Vzci9iaW4v
ZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMg
ZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1wb3J0IHNodXRp
bAotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBtb2R1bGVzLmV4ZWN1
dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKLWZyb20gbW9kdWxlcy5xdWV1ZWVuZ2luZSBpbXBvcnQg
UXVldWVFbmdpbmUsIFF1ZXVlRW5naW5lRGVsZWdhdGUKLQotY2xhc3MgTG9nZ2luZ0RlbGVnYXRl
KFF1ZXVlRW5naW5lRGVsZWdhdGUpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0KToKLSAg
ICAgICAgc2VsZi5fdGVzdCA9IHRlc3QKLSAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0gW10KLSAg
ICAgICAgc2VsZi5fcnVuX2JlZm9yZSA9IEZhbHNlCi0KLSAgICBleHBlY3RlZF9jYWxsYmFja3Mg
PSBbCi0gICAgICAgICdxdWV1ZV9sb2dfcGF0aCcsCi0gICAgICAgICdiZWdpbl93b3JrX3F1ZXVl
JywKLSAgICAgICAgJ3Nob3VsZF9jb250aW51ZV93b3JrX3F1ZXVlJywKLSAgICAgICAgJ25leHRf
d29ya19pdGVtJywKLSAgICAgICAgJ3Nob3VsZF9wcm9jZWVkX3dpdGhfd29ya19pdGVtJywKLSAg
ICAgICAgJ3dvcmtfaXRlbV9sb2dfcGF0aCcsCi0gICAgICAgICdwcm9jZXNzX3dvcmtfaXRlbScs
Ci0gICAgICAgICdzaG91bGRfY29udGludWVfd29ya19xdWV1ZScKLSAgICBdCi0KLSAgICBkZWYg
cmVjb3JkKHNlbGYsIG1ldGhvZF9uYW1lKToKLSAgICAgICAgc2VsZi5fY2FsbGJhY2tzLmFwcGVu
ZChtZXRob2RfbmFtZSkKLQotICAgIGRlZiBxdWV1ZV9sb2dfcGF0aChzZWxmKToKLSAgICAgICAg
c2VsZi5yZWNvcmQoInF1ZXVlX2xvZ19wYXRoIikKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9p
bihzZWxmLl90ZXN0LnRlbXBfZGlyLCAicXVldWVfbG9nX3BhdGgiKQotCi0gICAgZGVmIHdvcmtf
aXRlbV9sb2dfcGF0aChzZWxmLCB3b3JrX2l0ZW0pOgotICAgICAgICBzZWxmLnJlY29yZCgid29y
a19pdGVtX2xvZ19wYXRoIikKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl90ZXN0
LnRlbXBfZGlyLCAid29ya19sb2dfcGF0aCIsICIlcy5sb2ciICUgd29ya19pdGVtKQotCi0gICAg
ZGVmIGJlZ2luX3dvcmtfcXVldWUoc2VsZik6Ci0gICAgICAgIHNlbGYucmVjb3JkKCJiZWdpbl93
b3JrX3F1ZXVlIikKLQotICAgIGRlZiBzaG91bGRfY29udGludWVfd29ya19xdWV1ZShzZWxmKToK
LSAgICAgICAgc2VsZi5yZWNvcmQoInNob3VsZF9jb250aW51ZV93b3JrX3F1ZXVlIikKLSAgICAg
ICAgaWYgbm90IHNlbGYuX3J1bl9iZWZvcmU6Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYmVmb3Jl
ID0gVHJ1ZQotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0K
LSAgICBkZWYgbmV4dF93b3JrX2l0ZW0oc2VsZik6Ci0gICAgICAgIHNlbGYucmVjb3JkKCJuZXh0
X3dvcmtfaXRlbSIpCi0gICAgICAgIHJldHVybiAid29ya19pdGVtIgotCi0gICAgZGVmIHNob3Vs
ZF9wcm9jZWVkX3dpdGhfd29ya19pdGVtKHNlbGYsIHdvcmtfaXRlbSk6Ci0gICAgICAgIHNlbGYu
cmVjb3JkKCJzaG91bGRfcHJvY2VlZF93aXRoX3dvcmtfaXRlbSIpCi0gICAgICAgIHNlbGYuX3Rl
c3QuYXNzZXJ0RXF1YWxzKHdvcmtfaXRlbSwgIndvcmtfaXRlbSIpCi0gICAgICAgIGZha2VfcGF0
Y2ggPSB7ICdidWdfaWQnIDogNDIgfQotICAgICAgICByZXR1cm4gKFRydWUsICJ3YWl0aW5nX21l
c3NhZ2UiLCBmYWtlX3BhdGNoKQotCi0gICAgZGVmIHByb2Nlc3Nfd29ya19pdGVtKHNlbGYsIHdv
cmtfaXRlbSk6Ci0gICAgICAgIHNlbGYucmVjb3JkKCJwcm9jZXNzX3dvcmtfaXRlbSIpCi0gICAg
ICAgIHNlbGYuX3Rlc3QuYXNzZXJ0RXF1YWxzKHdvcmtfaXRlbSwgIndvcmtfaXRlbSIpCi0KLSAg
ICBkZWYgaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3Ioc2VsZiwgd29ya19pdGVtLCBtZXNzYWdlKToK
LSAgICAgICAgc2VsZi5yZWNvcmQoImhhbmRsZV91bmV4cGVjdGVkX2Vycm9yIikKLSAgICAgICAg
c2VsZi5fdGVzdC5hc3NlcnRFcXVhbHMod29ya19pdGVtLCAid29ya19pdGVtIikKLQotCi1jbGFz
cyBUaHJvd0Vycm9yRGVsZWdhdGUoTG9nZ2luZ0RlbGVnYXRlKToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgdGVzdCwgZXJyb3JfY29kZSk6Ci0gICAgICAgIExvZ2dpbmdEZWxlZ2F0ZS5fX2luaXRf
XyhzZWxmLCB0ZXN0KQotICAgICAgICBzZWxmLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlCi0KLSAg
ICBkZWYgcHJvY2Vzc193b3JrX2l0ZW0oc2VsZiwgd29ya19pdGVtKToKLSAgICAgICAgc2VsZi5y
ZWNvcmQoInByb2Nlc3Nfd29ya19pdGVtIikKLSAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoZXhp
dF9jb2RlPXNlbGYuZXJyb3JfY29kZSkKLQotCi1jbGFzcyBOb3RTYWZlVG9Qcm9jZWVkRGVsZWdh
dGUoTG9nZ2luZ0RlbGVnYXRlKToKLSAgICBkZWYgc2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0
ZW0oc2VsZiwgd29ya19pdGVtKToKLSAgICAgICAgc2VsZi5yZWNvcmQoInNob3VsZF9wcm9jZWVk
X3dpdGhfd29ya19pdGVtIikKLSAgICAgICAgc2VsZi5fdGVzdC5hc3NlcnRFcXVhbHMod29ya19p
dGVtLCAid29ya19pdGVtIikKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLQotY2xhc3MgRmFzdFF1
ZXVlRW5naW5lKFF1ZXVlRW5naW5lKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVsZWdhdGUp
OgotICAgICAgICBRdWV1ZUVuZ2luZS5fX2luaXRfXyhzZWxmLCAiZmFzdC1xdWV1ZSIsIGRlbGVn
YXRlKQotCi0gICAgIyBObyBzbGVlcCBmb3IgdGhlIHdpY2tlZC4KLSAgICBzZWNvbmRzX3RvX3Ns
ZWVwID0gMAotCi0gICAgZGVmIF9zbGVlcChzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgcGFzcwot
Ci0KLWNsYXNzIFF1ZXVlRW5naW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRl
c3RfdHJpdmlhbChzZWxmKToKLSAgICAgICAgZGVsZWdhdGUgPSBMb2dnaW5nRGVsZWdhdGUoc2Vs
ZikKLSAgICAgICAgd29ya19xdWV1ZSA9IFF1ZXVlRW5naW5lKCJ0cml2aWFsLXF1ZXVlIiwgZGVs
ZWdhdGUpCi0gICAgICAgIHdvcmtfcXVldWUucnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoZGVsZWdhdGUuX2NhbGxiYWNrcywgTG9nZ2luZ0RlbGVnYXRlLmV4cGVjdGVkX2NhbGxiYWNr
cykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihz
ZWxmLnRlbXBfZGlyLCAicXVldWVfbG9nX3BhdGgiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgIndvcmtfbG9nX3Bh
dGgiLCAid29ya19pdGVtLmxvZyIpKSkKLQotICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfZXJyb3Io
c2VsZik6Ci0gICAgICAgIGRlbGVnYXRlID0gVGhyb3dFcnJvckRlbGVnYXRlKHNlbGYsIDMpCi0g
ICAgICAgIHdvcmtfcXVldWUgPSBRdWV1ZUVuZ2luZSgiZXJyb3ItcXVldWUiLCBkZWxlZ2F0ZSkK
LSAgICAgICAgd29ya19xdWV1ZS5ydW4oKQotICAgICAgICBleHBlY3RlZF9jYWxsYmFja3MgPSBM
b2dnaW5nRGVsZWdhdGUuZXhwZWN0ZWRfY2FsbGJhY2tzWzpdCi0gICAgICAgIHdvcmtfaXRlbV9p
bmRleCA9IGV4cGVjdGVkX2NhbGxiYWNrcy5pbmRleCgncHJvY2Vzc193b3JrX2l0ZW0nKQotICAg
ICAgICAjIFRoZSB1bmV4cGVjdGVkIGVycm9yIHNob3VsZCBiZSBoYW5kbGVkIHJpZ2h0IGFmdGVy
IHByb2Nlc3Nfd29ya19pdGVtIHN0YXJ0cwotICAgICAgICAjIGJ1dCBiZWZvcmUgYW55IG90aGVy
IGNhbGxiYWNrLiAgT3RoZXJ3aXNlIGNhbGxiYWNrcyBzaG91bGQgYmUgbm9ybWFsLgotICAgICAg
ICBleHBlY3RlZF9jYWxsYmFja3MuaW5zZXJ0KHdvcmtfaXRlbV9pbmRleCArIDEsICdoYW5kbGVf
dW5leHBlY3RlZF9lcnJvcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlbGVnYXRlLl9j
YWxsYmFja3MsIGV4cGVjdGVkX2NhbGxiYWNrcykKLQotICAgIGRlZiB0ZXN0X2hhbmRsZWRfZXJy
b3Ioc2VsZik6Ci0gICAgICAgIGRlbGVnYXRlID0gVGhyb3dFcnJvckRlbGVnYXRlKHNlbGYsIFF1
ZXVlRW5naW5lLmhhbmRsZWRfZXJyb3JfY29kZSkKLSAgICAgICAgd29ya19xdWV1ZSA9IFF1ZXVl
RW5naW5lKCJoYW5kbGVkLWVycm9yLXF1ZXVlIiwgZGVsZWdhdGUpCi0gICAgICAgIHdvcmtfcXVl
dWUucnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVsZWdhdGUuX2NhbGxiYWNrcywg
TG9nZ2luZ0RlbGVnYXRlLmV4cGVjdGVkX2NhbGxiYWNrcykKLQotICAgIGRlZiB0ZXN0X25vdF9z
YWZlX3RvX3Byb2NlZWQoc2VsZik6Ci0gICAgICAgIGRlbGVnYXRlID0gTm90U2FmZVRvUHJvY2Vl
ZERlbGVnYXRlKHNlbGYpCi0gICAgICAgIHdvcmtfcXVldWUgPSBGYXN0UXVldWVFbmdpbmUoZGVs
ZWdhdGUpCi0gICAgICAgIHdvcmtfcXVldWUucnVuKCkKLSAgICAgICAgZXhwZWN0ZWRfY2FsbGJh
Y2tzID0gTG9nZ2luZ0RlbGVnYXRlLmV4cGVjdGVkX2NhbGxiYWNrc1s6XQotICAgICAgICBuZXh0
X3dvcmtfaXRlbV9pbmRleCA9IGV4cGVjdGVkX2NhbGxiYWNrcy5pbmRleCgnbmV4dF93b3JrX2l0
ZW0nKQotICAgICAgICAjIFdlIHNsaWNlIG91dCB0aGUgY29tbW9uIHBhcnQgb2YgdGhlIGV4cGVj
dGVkIGNhbGxiYWNrcy4KLSAgICAgICAgIyBXZSBhZGQgMiBoZXJlIHRvIGluY2x1ZGUgc2hvdWxk
X3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0sIHdoaWNoIGlzCi0gICAgICAgICMgYSBwYWluIHRvIHNl
YXJjaCBmb3IgZGlyZWN0bHkgYmVjYXVzZSBpdCBvY2N1cnMgdHdpY2UuCi0gICAgICAgIGV4cGVj
dGVkX2NhbGxiYWNrcyA9IGV4cGVjdGVkX2NhbGxiYWNrc1s6bmV4dF93b3JrX2l0ZW1faW5kZXgg
KyAyXQotICAgICAgICBleHBlY3RlZF9jYWxsYmFja3MuYXBwZW5kKCdzaG91bGRfY29udGludWVf
d29ya19xdWV1ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlbGVnYXRlLl9jYWxsYmFj
a3MsIGV4cGVjdGVkX2NhbGxiYWNrcykKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAg
c2VsZi50ZW1wX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoc3VmZml4PSJ3b3JrX3F1ZXVlX3Rlc3Rf
bG9ncyIpCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUo
c2VsZi50ZW1wX2RpcikKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0
ZXN0Lm1haW4oKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3NjbS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvc2NtLnB5CShyZXZpc2lvbiA1
MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zY20ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTEyICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIyAKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0
OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSMKLSMgUHl0aG9uIG1vZHVs
ZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhbiBTQ00gc3lzdGVtIChsaWtlIFNWTiBvciBHaXQpCi0K
LWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3VicHJvY2VzcwotCi0jIEltcG9ydCBXZWJL
aXQtc3BlY2lmaWMgbW9kdWxlcy4KLWZyb20gbW9kdWxlcy5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFu
Z2VMb2cKLWZyb20gbW9kdWxlcy5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgcnVuX2NvbW1h
bmQsIFNjcmlwdEVycm9yCi1mcm9tIG1vZHVsZXMud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGVycm9y
LCBsb2cKLQotZGVmIGRldGVjdF9zY21fc3lzdGVtKHBhdGgpOgotICAgIGlmIFNWTi5pbl93b3Jr
aW5nX2RpcmVjdG9yeShwYXRoKToKLSAgICAgICAgcmV0dXJuIFNWTihjd2Q9cGF0aCkKLSAgICAK
LSAgICBpZiBHaXQuaW5fd29ya2luZ19kaXJlY3RvcnkocGF0aCk6Ci0gICAgICAgIHJldHVybiBH
aXQoY3dkPXBhdGgpCi0gICAgCi0gICAgcmV0dXJuIE5vbmUKLQotZGVmIGZpcnN0X25vbl9lbXB0
eV9saW5lX2FmdGVyX2luZGV4KGxpbmVzLCBpbmRleD0wKToKLSAgICBmaXJzdF9ub25fZW1wdHlf
bGluZSA9IGluZGV4Ci0gICAgZm9yIGxpbmUgaW4gbGluZXNbaW5kZXg6XToKLSAgICAgICAgaWYg
cmUubWF0Y2goIl5ccyokIiwgbGluZSk6Ci0gICAgICAgICAgICBmaXJzdF9ub25fZW1wdHlfbGlu
ZSArPSAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIHJldHVybiBmaXJz
dF9ub25fZW1wdHlfbGluZQotCi0KLWNsYXNzIENvbW1pdE1lc3NhZ2U6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICBzZWxmLm1lc3NhZ2VfbGluZXMgPSBtZXNzYWdl
W2ZpcnN0X25vbl9lbXB0eV9saW5lX2FmdGVyX2luZGV4KG1lc3NhZ2UsIDApOl0KLQotICAgIGRl
ZiBib2R5KHNlbGYsIGxzdHJpcD1GYWxzZSk6Ci0gICAgICAgIGxpbmVzID0gc2VsZi5tZXNzYWdl
X2xpbmVzW2ZpcnN0X25vbl9lbXB0eV9saW5lX2FmdGVyX2luZGV4KHNlbGYubWVzc2FnZV9saW5l
cywgMSk6XQotICAgICAgICBpZiBsc3RyaXA6Ci0gICAgICAgICAgICBsaW5lcyA9IFtsaW5lLmxz
dHJpcCgpIGZvciBsaW5lIGluIGxpbmVzXQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVz
KSArICJcbiIKLQotICAgIGRlZiBkZXNjcmlwdGlvbihzZWxmLCBsc3RyaXA9RmFsc2UsIHN0cmlw
X3VybD1GYWxzZSk6Ci0gICAgICAgIGxpbmUgPSBzZWxmLm1lc3NhZ2VfbGluZXNbMF0KLSAgICAg
ICAgaWYgbHN0cmlwOgotICAgICAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKLSAgICAgICAg
aWYgc3RyaXBfdXJsOgotICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiXihccyopPC4rPiAiLCAi
XDEiLCBsaW5lKQotICAgICAgICByZXR1cm4gbGluZQotCi0gICAgZGVmIG1lc3NhZ2Uoc2VsZik6
Ci0gICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2VsZi5tZXNzYWdlX2xpbmVzKSArICJcbiIKLQot
Ci1jbGFzcyBDaGVja291dE5lZWRzVXBkYXRlKFNjcmlwdEVycm9yKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgc2NyaXB0X2FyZ3MsIGV4aXRfY29kZSwgb3V0cHV0LCBjd2QpOgotICAgICAgICBT
Y3JpcHRFcnJvci5fX2luaXRfXyhzZWxmLCBzY3JpcHRfYXJncz1zY3JpcHRfYXJncywgZXhpdF9j
b2RlPWV4aXRfY29kZSwgb3V0cHV0PW91dHB1dCwgY3dkPWN3ZCkKLQotCi1kZWYgY29tbWl0X2Vy
cm9yX2hhbmRsZXIoZXJyb3IpOgotICAgIGlmIHJlLnNlYXJjaCgicmVzb3VyY2Ugb3V0IG9mIGRh
dGUiLCBlcnJvci5vdXRwdXQpOgotICAgICAgICByYWlzZSBDaGVja291dE5lZWRzVXBkYXRlKHNj
cmlwdF9hcmdzPWVycm9yLnNjcmlwdF9hcmdzLCBleGl0X2NvZGU9ZXJyb3IuZXhpdF9jb2RlLCBv
dXRwdXQ9ZXJyb3Iub3V0cHV0LCBjd2Q9ZXJyb3IuY3dkKQotICAgIEV4ZWN1dGl2ZS5kZWZhdWx0
X2Vycm9yX2hhbmRsZXIoZXJyb3IpCi0KLQotY2xhc3MgU0NNOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBjd2QsIGRyeXJ1bj1GYWxzZSk6Ci0gICAgICAgIHNlbGYuY3dkID0gY3dkCi0gICAgICAg
IHNlbGYuY2hlY2tvdXRfcm9vdCA9IHNlbGYuZmluZF9jaGVja291dF9yb290KHNlbGYuY3dkKQot
ICAgICAgICBzZWxmLmRyeXJ1biA9IGRyeXJ1bgotCi0gICAgZGVmIHNjcmlwdHNfZGlyZWN0b3J5
KHNlbGYpOgotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY2hlY2tvdXRfcm9vdCwg
IldlYktpdFRvb2xzIiwgIlNjcmlwdHMiKQotCi0gICAgZGVmIHNjcmlwdF9wYXRoKHNlbGYsIHNj
cmlwdF9uYW1lKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnNjcmlwdHNfZGly
ZWN0b3J5KCksIHNjcmlwdF9uYW1lKQotCi0gICAgZGVmIGVuc3VyZV9jbGVhbl93b3JraW5nX2Rp
cmVjdG9yeShzZWxmLCBmb3JjZV9jbGVhbik6Ci0gICAgICAgIGlmIG5vdCBmb3JjZV9jbGVhbiBh
bmQgbm90IHNlbGYud29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4oKToKLSAgICAgICAgICAgIHBy
aW50IHJ1bl9jb21tYW5kKHNlbGYuc3RhdHVzX2NvbW1hbmQoKSwgZXJyb3JfaGFuZGxlcj1FeGVj
dXRpdmUuaWdub3JlX2Vycm9yKQotICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IobWVzc2Fn
ZT0iV29ya2luZyBkaXJlY3RvcnkgaGFzIG1vZGlmaWNhdGlvbnMsIHBhc3MgLS1mb3JjZS1jbGVh
biBvciAtLW5vLWNsZWFuIHRvIGNvbnRpbnVlLiIpCi0gICAgICAgIAotICAgICAgICBsb2coIkNs
ZWFuaW5nIHdvcmtpbmcgZGlyZWN0b3J5IikKLSAgICAgICAgc2VsZi5jbGVhbl93b3JraW5nX2Rp
cmVjdG9yeSgpCi0gICAgCi0gICAgZGVmIGVuc3VyZV9ub19sb2NhbF9jb21taXRzKHNlbGYsIGZv
cmNlKToKLSAgICAgICAgaWYgbm90IHNlbGYuc3VwcG9ydHNfbG9jYWxfY29tbWl0cygpOgotICAg
ICAgICAgICAgcmV0dXJuCi0gICAgICAgIGNvbW1pdHMgPSBzZWxmLmxvY2FsX2NvbW1pdHMoKQot
ICAgICAgICBpZiBub3QgbGVuKGNvbW1pdHMpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
IGlmIG5vdCBmb3JjZToKLSAgICAgICAgICAgIGVycm9yKCJXb3JraW5nIGRpcmVjdG9yeSBoYXMg
bG9jYWwgY29tbWl0cywgcGFzcyAtLWZvcmNlLWNsZWFuIHRvIGNvbnRpbnVlLiIpCi0gICAgICAg
IHNlbGYuZGlzY2FyZF9sb2NhbF9jb21taXRzKCkKLQotICAgIGRlZiBhcHBseV9wYXRjaChzZWxm
LCBwYXRjaCwgZm9yY2U9RmFsc2UpOgotICAgICAgICAjIEl0J3MgcG9zc2libGUgdGhhdCB0aGUg
cGF0Y2ggd2FzIG5vdCBtYWRlIGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5LgotICAgICAgICAjIFdl
IHNob3VsZCBkZXRlY3QgYW5kIGhhbmRsZSB0aGF0IGNhc2UuCi0gICAgICAgIGN1cmxfcHJvY2Vz
cyA9IHN1YnByb2Nlc3MuUG9wZW4oWydjdXJsJywgJy0tbG9jYXRpb24nLCAnLS1zaWxlbnQnLCAn
LS1zaG93LWVycm9yJywgcGF0Y2hbJ3VybCddXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAg
ICAgICAgYXJncyA9IFtzZWxmLnNjcmlwdF9wYXRoKCdzdm4tYXBwbHknKV0KLSAgICAgICAgaWYg
cGF0Y2guZ2V0KCdyZXZpZXdlcicpOgotICAgICAgICAgICAgYXJncyArPSBbJy0tcmV2aWV3ZXIn
LCBwYXRjaFsncmV2aWV3ZXInXV0KLSAgICAgICAgaWYgZm9yY2U6Ci0gICAgICAgICAgICBhcmdz
LmFwcGVuZCgnLS1mb3JjZScpCi0KLSAgICAgICAgcnVuX2NvbW1hbmQoYXJncywgaW5wdXQ9Y3Vy
bF9wcm9jZXNzLnN0ZG91dCkKLQotICAgIGRlZiBydW5fc3RhdHVzX2FuZF9leHRyYWN0X2ZpbGVu
YW1lcyhzZWxmLCBzdGF0dXNfY29tbWFuZCwgc3RhdHVzX3JlZ2V4cCk6Ci0gICAgICAgIGZpbGVu
YW1lcyA9IFtdCi0gICAgICAgIGZvciBsaW5lIGluIHJ1bl9jb21tYW5kKHN0YXR1c19jb21tYW5k
KS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChzdGF0dXNfcmVn
ZXhwLCBsaW5lKQotICAgICAgICAgICAgaWYgbm90IG1hdGNoOgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlCi0gICAgICAgICAgICAjIHN0YXR1cyA9IG1hdGNoLmdyb3VwKCdzdGF0dXMnKQotICAg
ICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaC5ncm91cCgnZmlsZW5hbWUnKQotICAgICAgICAgICAg
ZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIGZpbGVuYW1lcwotCi0g
ICAgZGVmIHN0cmlwX3JfZnJvbV9zdm5fcmV2aXNpb24oc2VsZiwgc3ZuX3JldmlzaW9uKToKLSAg
ICAgICAgbWF0Y2ggPSByZS5tYXRjaCgiXnIoP1A8c3ZuX3JldmlzaW9uPlxkKykiLCBzdm5fcmV2
aXNpb24pCi0gICAgICAgIGlmIChtYXRjaCk6Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2guZ3Jv
dXAoJ3N2bl9yZXZpc2lvbicpCi0gICAgICAgIHJldHVybiBzdm5fcmV2aXNpb24KLQotICAgIGRl
ZiBzdm5fcmV2aXNpb25fZnJvbV9jb21taXRfdGV4dChzZWxmLCBjb21taXRfdGV4dCk6Ci0gICAg
ICAgIG1hdGNoID0gcmUuc2VhcmNoKHNlbGYuY29tbWl0X3N1Y2Nlc3NfcmVnZXhwKCksIGNvbW1p
dF90ZXh0LCByZS5NVUxUSUxJTkUpCi0gICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgnc3ZuX3Jl
dmlzaW9uJykKLQotICAgICMgQ2hhbmdlTG9nLXNwZWNpZmljIGNvZGUgZG9lc24ndCByZWFsbHkg
YmVsb25nIGluIHNjbS5weSwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgdmVyeSB1c2VmdWwuCi0gICAg
ZGVmIG1vZGlmaWVkX2NoYW5nZWxvZ3Moc2VsZik6Ci0gICAgICAgIGNoYW5nZWxvZ19wYXRocyA9
IFtdCi0gICAgICAgIHBhdGhzID0gc2VsZi5jaGFuZ2VkX2ZpbGVzKCkKLSAgICAgICAgZm9yIHBh
dGggaW4gcGF0aHM6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpID09ICJD
aGFuZ2VMb2ciOgotICAgICAgICAgICAgICAgIGNoYW5nZWxvZ19wYXRocy5hcHBlbmQocGF0aCkK
LSAgICAgICAgcmV0dXJuIGNoYW5nZWxvZ19wYXRocwotCi0gICAgIyBGSVhNRTogUmVxdWlyZXMg
dW5pdCB0ZXN0Ci0gICAgIyBGSVhNRTogY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0IGFu
ZCBtb2RpZmllZF9jaGFuZ2Vsb2dzIGRvbid0Ci0gICAgIyAgICAgICAgcmVhbGx5IGJlbG9uZyBo
ZXJlLiAgV2Ugc2hvdWxkIGhhdmUgYSBzZXBhcmF0ZSBtb2R1bGUgZm9yCi0gICAgIyAgICAgICAg
aGFuZGxpbmcgQ2hhbmdlTG9ncy4KLSAgICBkZWYgY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29t
bWl0KHNlbGYpOgotICAgICAgICBjaGFuZ2Vsb2dfcGF0aHMgPSBzZWxmLm1vZGlmaWVkX2NoYW5n
ZWxvZ3MoKQotICAgICAgICBpZiBub3QgbGVuKGNoYW5nZWxvZ19wYXRocyk6Ci0gICAgICAgICAg
ICByYWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSJGb3VuZCBubyBtb2RpZmllZCBDaGFuZ2VMb2dz
LCBjYW5ub3QgY3JlYXRlIGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiQWxsIGNoYW5nZXMgcmVxdWlyZSBhIENoYW5nZUxvZy4gIFNlZTpcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29u
dHJpYnV0aW5nLmh0bWwiKQotCi0gICAgICAgIGNoYW5nZWxvZ19tZXNzYWdlcyA9IFtdCi0gICAg
ICAgIGZvciBjaGFuZ2Vsb2dfcGF0aCBpbiBjaGFuZ2Vsb2dfcGF0aHM6Ci0gICAgICAgICAgICBs
b2coIlBhcnNpbmcgQ2hhbmdlTG9nOiAlcyIgJSBjaGFuZ2Vsb2dfcGF0aCkKLSAgICAgICAgICAg
IGNoYW5nZWxvZ19lbnRyeSA9IENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0aCkubGF0ZXN0X2VudHJ5
KCkKLSAgICAgICAgICAgIGlmIG5vdCBjaGFuZ2Vsb2dfZW50cnk6Ci0gICAgICAgICAgICAgICAg
cmFpc2UgU2NyaXB0RXJyb3IobWVzc2FnZT0iRmFpbGVkIHRvIHBhcnNlIENoYW5nZUxvZzogIiAr
IG9zLnBhdGguYWJzcGF0aChjaGFuZ2Vsb2dfcGF0aCkpCi0gICAgICAgICAgICBjaGFuZ2Vsb2df
bWVzc2FnZXMuYXBwZW5kKGNoYW5nZWxvZ19lbnRyeSkKLQotICAgICAgICAjIEZJWE1FOiBXZSBz
aG91bGQgc29ydCBhbmQgbGFiZWwgdGhlIENoYW5nZUxvZyBtZXNzYWdlcyBsaWtlIGNvbW1pdC1s
b2ctZWRpdG9yIGRvZXMuCi0gICAgICAgIHJldHVybiBDb21taXRNZXNzYWdlKCIiLmpvaW4oY2hh
bmdlbG9nX21lc3NhZ2VzKS5zcGxpdGxpbmVzKCkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIGluX3dvcmtpbmdfZGlyZWN0b3J5KHBhdGgpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgZmluZF9jaGVja291dF9yb290KHBhdGgpOgotICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgY29tbWl0X3N1Y2Nlc3NfcmVnZXhwKCk6Ci0gICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IgotCi0gICAg
ZGVmIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiBj
bGVhbl93b3JraW5nX2RpcmVjdG9yeShzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYgc3RhdHVzX2Nv
bW1hbmQoc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFz
c2VzIG11c3QgaW1wbGVtZW50IgotCi0gICAgZGVmIGNoYW5nZWRfZmlsZXMoc2VsZik6Ci0gICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50
IgotCi0gICAgZGVmIGRpc3BsYXlfbmFtZShzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYgY3JlYXRl
X3BhdGNoKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xh
c3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiBkaWZmX2Zvcl9yZXZpc2lvbihzZWxmLCBy
ZXZpc2lvbik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2Vz
IG11c3QgaW1wbGVtZW50IgotCi0gICAgZGVmIGFwcGx5X3JldmVyc2VfZGlmZihzZWxmLCByZXZp
c2lvbik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11
c3QgaW1wbGVtZW50IgotCi0gICAgZGVmIHJldmVydF9maWxlcyhzZWxmLCBmaWxlX3BhdGhzKToK
LSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBs
ZW1lbnQiCi0KLSAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlKToKLSAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1l
bnQiCi0KLSAgICBkZWYgc3ZuX2NvbW1pdF9sb2coc2VsZiwgc3ZuX3JldmlzaW9uKToKLSAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQi
Ci0KLSAgICBkZWYgbGFzdF9zdm5fY29tbWl0X2xvZyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICAjIFN1
YmNsYXNzZXMgbXVzdCBpbmRpY2F0ZSBpZiB0aGV5IHN1cHBvcnQgbG9jYWwgY29tbWl0cywKLSAg
ICAjIGJ1dCB0aGUgU0NNIGJhc2VjbGFzcyB3aWxsIG9ubHkgY2FsbCBsb2NhbF9jb21taXRzIG1l
dGhvZHMgd2hlbiB0aGlzIGlzIHRydWUuCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzdXBw
b3J0c19sb2NhbF9jb21taXRzKCk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Is
ICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IgotCi0gICAgZGVmIGNyZWF0ZV9wYXRjaF9mcm9t
X2xvY2FsX2NvbW1pdChzZWxmLCBjb21taXRfaWQpOgotICAgICAgICBlcnJvcigiWW91ciBzb3Vy
Y2UgY29udHJvbCBtYW5hZ2VyIGRvZXMgbm90IHN1cHBvcnQgY3JlYXRpbmcgYSBwYXRjaCBmcm9t
IGEgbG9jYWwgY29tbWl0LiIpCi0KLSAgICBkZWYgY3JlYXRlX3BhdGNoX3NpbmNlX2xvY2FsX2Nv
bW1pdChzZWxmLCBjb21taXRfaWQpOgotICAgICAgICBlcnJvcigiWW91ciBzb3VyY2UgY29udHJv
bCBtYW5hZ2VyIGRvZXMgbm90IHN1cHBvcnQgY3JlYXRpbmcgYSBwYXRjaCBmcm9tIGEgbG9jYWwg
Y29tbWl0LiIpCi0KLSAgICBkZWYgY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKHNlbGYsIG1l
c3NhZ2UpOgotICAgICAgICBlcnJvcigiWW91ciBzb3VyY2UgY29udHJvbCBtYW5hZ2VyIGRvZXMg
bm90IHN1cHBvcnQgbG9jYWwgY29tbWl0cy4iKQotCi0gICAgZGVmIGRpc2NhcmRfbG9jYWxfY29t
bWl0cyhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGxvY2FsX2NvbW1pdHMoc2VsZik6
Ci0gICAgICAgIHJldHVybiBbXQotCi0KLWNsYXNzIFNWTihTQ00pOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBjd2QsIGRyeXJ1bj1GYWxzZSk6Ci0gICAgICAgIFNDTS5fX2luaXRfXyhzZWxmLCBj
d2QsIGRyeXJ1bikKLSAgICAgICAgc2VsZi5jYWNoZWRfdmVyc2lvbiA9IE5vbmUKLSAgICAKLSAg
ICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGluX3dvcmtpbmdfZGlyZWN0b3J5KHBhdGgpOgotICAg
ICAgICByZXR1cm4gb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocGF0aCwgJy5zdm4nKSkKLSAg
ICAKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZmluZF91dWlkKGNscywgcGF0aCk6Ci0gICAg
ICAgIGlmIG5vdCBjbHMuaW5fd29ya2luZ19kaXJlY3RvcnkocGF0aCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gY2xzLnZhbHVlX2Zyb21fc3ZuX2luZm8ocGF0aCwg
J1JlcG9zaXRvcnkgVVVJRCcpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdmFsdWVfZnJv
bV9zdm5faW5mbyhjbHMsIHBhdGgsIGZpZWxkX25hbWUpOgotICAgICAgICBzdm5faW5mb19hcmdz
ID0gWydzdm4nLCAnaW5mbycsIHBhdGhdCi0gICAgICAgIGluZm9fb3V0cHV0ID0gcnVuX2NvbW1h
bmQoc3ZuX2luZm9fYXJncykucnN0cmlwKCkKLSAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goIl4l
czogKD9QPHZhbHVlPi4rKSQiICUgZmllbGRfbmFtZSwgaW5mb19vdXRwdXQsIHJlLk1VTFRJTElO
RSkKLSAgICAgICAgaWYgbm90IG1hdGNoOgotICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3Io
c2NyaXB0X2FyZ3M9c3ZuX2luZm9fYXJncywgbWVzc2FnZT0nc3ZuIGluZm8gZGlkIG5vdCBjb250
YWluIGEgJXMuJyAlIGZpZWxkX25hbWUpCi0gICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgndmFs
dWUnKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBmaW5kX2NoZWNrb3V0X3Jvb3QocGF0
aCk6Ci0gICAgICAgIHV1aWQgPSBTVk4uZmluZF91dWlkKHBhdGgpCi0gICAgICAgICMgSWYgfHBh
dGh8IGlzIG5vdCBpbiBhIHdvcmtpbmcgZGlyZWN0b3J5LCB3ZSdyZSBzdXBwb3NlZCB0byByZXR1
cm4gfHBhdGh8LgotICAgICAgICBpZiBub3QgdXVpZDoKLSAgICAgICAgICAgIHJldHVybiBwYXRo
Ci0gICAgICAgICMgU2VhcmNoIHVwIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5IHVudGlsIHdlIGZp
bmQgYSBkaWZmZXJlbnQgVVVJRC4KLSAgICAgICAgbGFzdF9wYXRoID0gTm9uZQotICAgICAgICB3
aGlsZSBUcnVlOgotICAgICAgICAgICAgaWYgdXVpZCAhPSBTVk4uZmluZF91dWlkKHBhdGgpOgot
ICAgICAgICAgICAgICAgIHJldHVybiBsYXN0X3BhdGgKLSAgICAgICAgICAgIGxhc3RfcGF0aCA9
IHBhdGgKLSAgICAgICAgICAgIChwYXRoLCBsYXN0X2NvbXBvbmVudCkgPSBvcy5wYXRoLnNwbGl0
KHBhdGgpCi0gICAgICAgICAgICBpZiBsYXN0X3BhdGggPT0gcGF0aDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjb21taXRfc3VjY2Vz
c19yZWdleHAoKToKLSAgICAgICAgcmV0dXJuICJeQ29tbWl0dGVkIHJldmlzaW9uICg/UDxzdm5f
cmV2aXNpb24+XGQrKVwuJCIKLQotICAgIGRlZiBzdm5fdmVyc2lvbihzZWxmKToKLSAgICAgICAg
aWYgbm90IHNlbGYuY2FjaGVkX3ZlcnNpb246Ci0gICAgICAgICAgICBzZWxmLmNhY2hlZF92ZXJz
aW9uID0gcnVuX2NvbW1hbmQoWydzdm4nLCAnLS12ZXJzaW9uJywgJy0tcXVpZXQnXSkKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiBzZWxmLmNhY2hlZF92ZXJzaW9uCi0KLSAgICBkZWYgd29ya2lu
Z19kaXJlY3RvcnlfaXNfY2xlYW4oc2VsZik6Ci0gICAgICAgIHJldHVybiBydW5fY29tbWFuZChb
J3N2bicsICdkaWZmJ10pID09ICIiCi0KLSAgICBkZWYgY2xlYW5fd29ya2luZ19kaXJlY3Rvcnko
c2VsZik6Ci0gICAgICAgIHJ1bl9jb21tYW5kKFsnc3ZuJywgJ3JldmVydCcsICctUicsICcuJ10p
Ci0KLSAgICBkZWYgc3RhdHVzX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiBbJ3N2bics
ICdzdGF0dXMnXQotCi0gICAgZGVmIGNoYW5nZWRfZmlsZXMoc2VsZik6Ci0gICAgICAgIGlmIHNl
bGYuc3ZuX3ZlcnNpb24oKSA+ICIxLjYiOgotICAgICAgICAgICAgc3RhdHVzX3JlZ2V4cCA9ICJe
KD9QPHN0YXR1cz5bQUNETVJdKS57Nn0gKD9QPGZpbGVuYW1lPi4rKSQiCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBzdGF0dXNfcmVnZXhwID0gIl4oP1A8c3RhdHVzPltBQ0RNUl0pLns1fSAo
P1A8ZmlsZW5hbWU+LispJCIKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0
cmFjdF9maWxlbmFtZXMoc2VsZi5zdGF0dXNfY29tbWFuZCgpLCBzdGF0dXNfcmVnZXhwKQotCi0g
ICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzdXBwb3J0c19sb2NhbF9jb21taXRzKCk6Ci0gICAg
ICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIGRpc3BsYXlfbmFtZShzZWxmKToKLSAgICAgICAg
cmV0dXJuICJzdm4iCi0KLSAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYpOgotICAgICAgICByZXR1
cm4gcnVuX2NvbW1hbmQoc2VsZi5zY3JpcHRfcGF0aCgic3ZuLWNyZWF0ZS1wYXRjaCIpLCBjd2Q9
c2VsZi5jaGVja291dF9yb290LCByZXR1cm5fc3RkZXJyPUZhbHNlKQotCi0gICAgZGVmIGRpZmZf
Zm9yX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uKToKLSAgICAgICAgcmV0dXJuIHJ1bl9jb21tYW5k
KFsnc3ZuJywgJ2RpZmYnLCAnLWMnLCBzdHIocmV2aXNpb24pXSkKLQotICAgIGRlZiBfcmVwb3Np
dG9yeV91cmwoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8o
c2VsZi5jaGVja291dF9yb290LCAnVVJMJykKLQotICAgIGRlZiBhcHBseV9yZXZlcnNlX2RpZmYo
c2VsZiwgcmV2aXNpb24pOgotICAgICAgICAjICctYyAtcmV2aXNpb24nIGFwcGxpZXMgdGhlIGlu
dmVyc2UgZGlmZiBvZiAncmV2aXNpb24nCi0gICAgICAgIHN2bl9tZXJnZV9hcmdzID0gWydzdm4n
LCAnbWVyZ2UnLCAnLS1ub24taW50ZXJhY3RpdmUnLCAnLWMnLCAnLSVzJyAlIHJldmlzaW9uLCBz
ZWxmLl9yZXBvc2l0b3J5X3VybCgpXQotICAgICAgICBsb2coIldBUk5JTkc6IHN2biBtZXJnZSBo
YXMgYmVlbiBrbm93biB0byB0YWtlIG1vcmUgdGhhbiAxMCBtaW51dGVzIHRvIGNvbXBsZXRlLiAg
SXQgaXMgcmVjb21tZW5kZWQgeW91IHVzZSBnaXQgZm9yIHJvbGxvdXRzLiIpCi0gICAgICAgIGxv
ZygiUnVubmluZyAnJXMnIiAlICIgIi5qb2luKHN2bl9tZXJnZV9hcmdzKSkKLSAgICAgICAgcnVu
X2NvbW1hbmQoc3ZuX21lcmdlX2FyZ3MpCi0KLSAgICBkZWYgcmV2ZXJ0X2ZpbGVzKHNlbGYsIGZp
bGVfcGF0aHMpOgotICAgICAgICBydW5fY29tbWFuZChbJ3N2bicsICdyZXZlcnQnXSArIGZpbGVf
cGF0aHMpCi0KLSAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlKToKLSAg
ICAgICAgaWYgc2VsZi5kcnlydW46Ci0gICAgICAgICAgICAjIFJldHVybiBhIHN0cmluZyB3aGlj
aCBsb29rcyBsaWtlIGEgY29tbWl0IHNvIHRoYXQgdGhpbmdzIHdoaWNoIHBhcnNlIHRoaXMgb3V0
cHV0IHdpbGwgc3VjY2VlZC4KLSAgICAgICAgICAgIHJldHVybiAiRHJ5IHJ1biwgbm8gY29tbWl0
LlxuQ29tbWl0dGVkIHJldmlzaW9uIDAuIgotICAgICAgICByZXR1cm4gcnVuX2NvbW1hbmQoWydz
dm4nLCAnY29tbWl0JywgJy1tJywgbWVzc2FnZV0sIGVycm9yX2hhbmRsZXI9Y29tbWl0X2Vycm9y
X2hhbmRsZXIpCi0KLSAgICBkZWYgc3ZuX2NvbW1pdF9sb2coc2VsZiwgc3ZuX3JldmlzaW9uKToK
LSAgICAgICAgc3ZuX3JldmlzaW9uID0gc2VsZi5zdHJpcF9yX2Zyb21fc3ZuX3JldmlzaW9uKHN0
cihzdm5fcmV2aXNpb24pKQotICAgICAgICByZXR1cm4gcnVuX2NvbW1hbmQoWydzdm4nLCAnbG9n
JywgJy0tbm9uLWludGVyYWN0aXZlJywgJy0tcmV2aXNpb24nLCBzdm5fcmV2aXNpb25dKTsKLQot
ICAgIGRlZiBsYXN0X3N2bl9jb21taXRfbG9nKHNlbGYpOgotICAgICAgICAjIEJBU0UgaXMgdGhl
IGNoZWNrb3V0IHJldmlzaW9uLCBIRUFEIGlzIHRoZSByZW1vdGUgcmVwb3NpdG9yeSByZXZpc2lv
bgotICAgICAgICAjIGh0dHA6Ly9zdm5ib29rLnJlZC1iZWFuLmNvbS9lbi8xLjAvY2gwM3MwMy5o
dG1sCi0gICAgICAgIHJldHVybiBzZWxmLnN2bl9jb21taXRfbG9nKCdCQVNFJykKLQotIyBBbGwg
Z2l0LXNwZWNpZmljIGxvZ2ljIHNob3VsZCBnbyBoZXJlLgotY2xhc3MgR2l0KFNDTSk6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGN3ZCwgZHJ5cnVuPUZhbHNlKToKLSAgICAgICAgU0NNLl9faW5p
dF9fKHNlbGYsIGN3ZCwgZHJ5cnVuKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGluX3dv
cmtpbmdfZGlyZWN0b3J5KGNscywgcGF0aCk6Ci0gICAgICAgIHJldHVybiBydW5fY29tbWFuZChb
J2dpdCcsICdyZXYtcGFyc2UnLCAnLS1pcy1pbnNpZGUtd29yay10cmVlJ10sIGN3ZD1wYXRoLCBl
cnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgpID09ICJ0cnVlIgot
Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfY2hlY2tvdXRfcm9vdChjbHMsIHBhdGgp
OgotICAgICAgICAjICJnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwIiB3b3VsZCBiZSBhbm90aGVy
IHdheSB0byBnZXQgdG8gdGhlIHJvb3QKLSAgICAgICAgKGNoZWNrb3V0X3Jvb3QsIGRvdF9naXQp
ID0gb3MucGF0aC5zcGxpdChydW5fY29tbWFuZChbJ2dpdCcsICdyZXYtcGFyc2UnLCAnLS1naXQt
ZGlyJ10sIGN3ZD1wYXRoKSkKLSAgICAgICAgIyBJZiB3ZSB3ZXJlIHVzaW5nIDIuNiAjIGNoZWNr
b3V0X3Jvb3QgPSBvcy5wYXRoLnJlbHBhdGgoY2hlY2tvdXRfcm9vdCwgcGF0aCkKLSAgICAgICAg
aWYgbm90IG9zLnBhdGguaXNhYnMoY2hlY2tvdXRfcm9vdCk6ICMgU29tZXRpbWVzIGdpdCByZXR1
cm5zIHJlbGF0aXZlIHBhdGhzCi0gICAgICAgICAgICBjaGVja291dF9yb290ID0gb3MucGF0aC5q
b2luKHBhdGgsIGNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIHJldHVybiBjaGVja291dF9yb290Ci0g
ICAgCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjb21taXRfc3VjY2Vzc19yZWdleHAoKToK
LSAgICAgICAgcmV0dXJuICJeQ29tbWl0dGVkIHIoP1A8c3ZuX3JldmlzaW9uPlxkKykkIgotCi0K
LSAgICBkZWYgZGlzY2FyZF9sb2NhbF9jb21taXRzKHNlbGYpOgotICAgICAgICBydW5fY29tbWFu
ZChbJ2dpdCcsICdyZXNldCcsICctLWhhcmQnLCAndHJ1bmsnXSkKLSAgICAKLSAgICBkZWYgbG9j
YWxfY29tbWl0cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ2xv
ZycsICctLXByZXR0eT1vbmVsaW5lJywgJ0hFQUQuLi50cnVuayddKS5zcGxpdGxpbmVzKCkKLQot
ICAgIGRlZiByZWJhc2VfaW5fcHJvZ3Jlc3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBvcy5wYXRo
LmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5jaGVja291dF9yb290LCAnLmdpdC9yZWJhc2UtYXBw
bHknKSkKLQotICAgIGRlZiB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbihzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ2RpZmYtaW5kZXgnLCAnSEVBRCddKSA9PSAi
IgotCi0gICAgZGVmIGNsZWFuX3dvcmtpbmdfZGlyZWN0b3J5KHNlbGYpOgotICAgICAgICAjIENv
dWxkIHJ1biBnaXQgY2xlYW4gaGVyZSB0b28sIGJ1dCB0aGF0IHdvdWxkbid0IG1hdGNoIHdvcmtp
bmdfZGlyZWN0b3J5X2lzX2NsZWFuCi0gICAgICAgIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ3Jlc2V0
JywgJy0taGFyZCcsICdIRUFEJ10pCi0gICAgICAgICMgQWJvcnRpbmcgcmViYXNlIGV2ZW4gdGhv
dWdoIHRoaXMgZG9lcyBub3QgbWF0Y2ggd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4KLSAgICAg
ICAgaWYgc2VsZi5yZWJhc2VfaW5fcHJvZ3Jlc3MoKToKLSAgICAgICAgICAgIHJ1bl9jb21tYW5k
KFsnZ2l0JywgJ3JlYmFzZScsICctLWFib3J0J10pCi0KLSAgICBkZWYgc3RhdHVzX2NvbW1hbmQo
c2VsZik6Ci0gICAgICAgIHJldHVybiBbJ2dpdCcsICdzdGF0dXMnXQotCi0gICAgZGVmIGNoYW5n
ZWRfZmlsZXMoc2VsZik6Ci0gICAgICAgIHN0YXR1c19jb21tYW5kID0gWydnaXQnLCAnZGlmZics
ICctcicsICctLW5hbWUtc3RhdHVzJywgJy1DJywgJy1NJywgJ0hFQUQnXQotICAgICAgICBzdGF0
dXNfcmVnZXhwID0gJ14oP1A8c3RhdHVzPltBRE1dKVx0KD9QPGZpbGVuYW1lPi4rKSQnCi0gICAg
ICAgIHJldHVybiBzZWxmLnJ1bl9zdGF0dXNfYW5kX2V4dHJhY3RfZmlsZW5hbWVzKHN0YXR1c19j
b21tYW5kLCBzdGF0dXNfcmVnZXhwKQotICAgIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYg
c3VwcG9ydHNfbG9jYWxfY29tbWl0cygpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVm
IGRpc3BsYXlfbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICJnaXQiCi0KLSAgICBkZWYgY3Jl
YXRlX3BhdGNoKHNlbGYpOgotICAgICAgICByZXR1cm4gcnVuX2NvbW1hbmQoWydnaXQnLCAnZGlm
ZicsICctLWJpbmFyeScsICdIRUFEJ10pCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZ2l0
X2NvbW1pdF9mcm9tX3N2bl9yZXZpc2lvbihjbHMsIHJldmlzaW9uKToKLSAgICAgICAgIyBnaXQg
c3ZuIGZpbmQtcmV2IGFsd2F5cyBleGl0cyAwLCBldmVuIHdoZW4gdGhlIHJldmlzaW9uIGlzIG5v
dCBmb3VuZC4KLSAgICAgICAgcmV0dXJuIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ3N2bicsICdmaW5k
LXJldicsICdyJXMnICUgcmV2aXNpb25dKS5yc3RyaXAoKQotCi0gICAgZGVmIGRpZmZfZm9yX3Jl
dmlzaW9uKHNlbGYsIHJldmlzaW9uKToKLSAgICAgICAgZ2l0X2NvbW1pdCA9IHNlbGYuZ2l0X2Nv
bW1pdF9mcm9tX3N2bl9yZXZpc2lvbihyZXZpc2lvbikKLSAgICAgICAgcmV0dXJuIHNlbGYuY3Jl
YXRlX3BhdGNoX2Zyb21fbG9jYWxfY29tbWl0KGdpdF9jb21taXQpCi0KLSAgICBkZWYgYXBwbHlf
cmV2ZXJzZV9kaWZmKHNlbGYsIHJldmlzaW9uKToKLSAgICAgICAgIyBBc3N1bWUgdGhlIHJldmlz
aW9uIGlzIGFuIHN2biByZXZpc2lvbi4KLSAgICAgICAgZ2l0X2NvbW1pdCA9IHNlbGYuZ2l0X2Nv
bW1pdF9mcm9tX3N2bl9yZXZpc2lvbihyZXZpc2lvbikKLSAgICAgICAgaWYgbm90IGdpdF9jb21t
aXQ6Ci0gICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSdGYWlsZWQgdG8gZmlu
ZCBnaXQgY29tbWl0IGZvciByZXZpc2lvbiAlcywgZ2l0IHN2biBsb2cgb3V0cHV0OiAiJXMiJyAl
IChyZXZpc2lvbiwgZ2l0X2NvbW1pdCkpCi0KLSAgICAgICAgIyBJIHRoaW5rIHRoaXMgd2lsbCBh
bHdheXMgZmFpbCBkdWUgdG8gQ2hhbmdlTG9ncy4KLSAgICAgICAgIyBGSVhNRTogV2UgbmVlZCB0
byBkZXRlYyBzcGVjaWZpYyBmYWlsdXJlIGNvbmRpdGlvbnMgYW5kIGhhbmRsZSB0aGVtLgotICAg
ICAgICBydW5fY29tbWFuZChbJ2dpdCcsICdyZXZlcnQnLCAnLS1uby1jb21taXQnLCBnaXRfY29t
bWl0XSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKQotCi0gICAgICAgICMg
Rml4IGFueSBDaGFuZ2VMb2dzIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgY2hhbmdlbG9nX3BhdGhz
ID0gc2VsZi5tb2RpZmllZF9jaGFuZ2Vsb2dzKCkKLSAgICAgICAgaWYgbGVuKGNoYW5nZWxvZ19w
YXRocyk6Ci0gICAgICAgICAgICBydW5fY29tbWFuZChbc2VsZi5zY3JpcHRfcGF0aCgncmVzb2x2
ZS1DaGFuZ2VMb2dzJyldICsgY2hhbmdlbG9nX3BhdGhzKQotCi0gICAgZGVmIHJldmVydF9maWxl
cyhzZWxmLCBmaWxlX3BhdGhzKToKLSAgICAgICAgcnVuX2NvbW1hbmQoWydnaXQnLCAnY2hlY2tv
dXQnLCAnSEVBRCddICsgZmlsZV9wYXRocykKLQotICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdl
KHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICBzZWxmLmNvbW1pdF9sb2NhbGx5X3dpdGhfbWVzc2Fn
ZShtZXNzYWdlKQotICAgICAgICByZXR1cm4gc2VsZi5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2Vy
dmVyKCkKLQotICAgIGRlZiBzdm5fY29tbWl0X2xvZyhzZWxmLCBzdm5fcmV2aXNpb24pOgotICAg
ICAgICBzdm5fcmV2aXNpb24gPSBzZWxmLnN0cmlwX3JfZnJvbV9zdm5fcmV2aXNpb24oc3ZuX3Jl
dmlzaW9uKQotICAgICAgICByZXR1cm4gcnVuX2NvbW1hbmQoWydnaXQnLCAnc3ZuJywgJ2xvZycs
ICctcicsIHN2bl9yZXZpc2lvbl0pCi0KLSAgICBkZWYgbGFzdF9zdm5fY29tbWl0X2xvZyhzZWxm
KToKLSAgICAgICAgcmV0dXJuIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ3N2bicsICdsb2cnLCAnLS1s
aW1pdD0xJ10pCi0KLSAgICAjIEdpdC1zcGVjaWZpYyBtZXRob2RzOgotCi0gICAgZGVmIGNyZWF0
ZV9wYXRjaF9mcm9tX2xvY2FsX2NvbW1pdChzZWxmLCBjb21taXRfaWQpOgotICAgICAgICByZXR1
cm4gcnVuX2NvbW1hbmQoWydnaXQnLCAnZGlmZicsICctLWJpbmFyeScsIGNvbW1pdF9pZCArICJe
Li4iICsgY29tbWl0X2lkXSkKLQotICAgIGRlZiBjcmVhdGVfcGF0Y2hfc2luY2VfbG9jYWxfY29t
bWl0KHNlbGYsIGNvbW1pdF9pZCk6Ci0gICAgICAgIHJldHVybiBydW5fY29tbWFuZChbJ2dpdCcs
ICdkaWZmJywgJy0tYmluYXJ5JywgY29tbWl0X2lkXSkKLQotICAgIGRlZiBjb21taXRfbG9jYWxs
eV93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgIHJ1bl9jb21tYW5kKFsnZ2l0
JywgJ2NvbW1pdCcsICctLWFsbCcsICctRicsICctJ10sIGlucHV0PW1lc3NhZ2UpCi0gICAgICAg
IAotICAgIGRlZiBwdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyKHNlbGYpOgotICAgICAgICBp
ZiBzZWxmLmRyeXJ1bjoKLSAgICAgICAgICAgICMgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGxvb2tz
IGxpa2UgYSBjb21taXQgc28gdGhhdCB0aGluZ3Mgd2hpY2ggcGFyc2UgdGhpcyBvdXRwdXQgd2ls
bCBzdWNjZWVkLgotICAgICAgICAgICAgcmV0dXJuICJEcnkgcnVuLCBubyByZW1vdGUgY29tbWl0
LlxuQ29tbWl0dGVkIHIwIgotICAgICAgICByZXR1cm4gcnVuX2NvbW1hbmQoWydnaXQnLCAnc3Zu
JywgJ2Rjb21taXQnXSwgZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3JfaGFuZGxlcikKLQotICAg
ICMgVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50IGZvcm1hdHM6
Ci0gICAgIyBubyBhcmdzIDogcmV2LWxpc3QgdHJ1bmsuLkhFQUQKLSAgICAjIEEuLkIgICAgOiBy
ZXYtbGlzdCBBLi5CCi0gICAgIyBBLi4uQiAgIDogZXJyb3IhCi0gICAgIyBBIEIgICAgIDogW0Es
IEJdICAoZGlmZmVyZW50IGZyb20gZ2l0IGRpZmYsIHdoaWNoIHdvdWxkIHVzZSAicmV2LWxpc3Qg
QS4uQiIpCi0gICAgZGVmIGNvbW1pdF9pZHNfZnJvbV9jb21taXRpc2hfYXJndW1lbnRzKHNlbGYs
IGFyZ3MpOgotICAgICAgICBpZiBub3QgbGVuKGFyZ3MpOgotICAgICAgICAgICAgIyBGSVhNRTog
dHJ1bmsgaXMgbm90IGFsd2F5cyB0aGUgcmVtb3RlIGJyYW5jaCBuYW1lLCBuZWVkIGEgd2F5IHRv
IGRldGVjdCB0aGUgbmFtZS4KLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCd0cnVuay4uSEVBRCcp
Ci0KLSAgICAgICAgY29tbWl0X2lkcyA9IFtdCi0gICAgICAgIGZvciBjb21taXRpc2ggaW4gYXJn
czoKLSAgICAgICAgICAgIGlmICcuLi4nIGluIGNvbW1pdGlzaDoKLSAgICAgICAgICAgICAgICBy
YWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSInLi4uJyBpcyBub3Qgc3VwcG9ydGVkIChmb3VuZCBp
biAnJXMnKS4gRGlkIHlvdSBtZWFuICcuLic/IiAlIGNvbW1pdGlzaCkKLSAgICAgICAgICAgIGVs
aWYgJy4uJyBpbiBjb21taXRpc2g6Ci0gICAgICAgICAgICAgICAgY29tbWl0X2lkcyArPSByZXZl
cnNlZChydW5fY29tbWFuZChbJ2dpdCcsICdyZXYtbGlzdCcsIGNvbW1pdGlzaF0pLnNwbGl0bGlu
ZXMoKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBUdXJuIHNpbmdsZSBj
b21taXRzIG9yIGJyYW5jaCBvciB0YWcgbmFtZXMgaW50byBjb21taXQgaWRzLgotICAgICAgICAg
ICAgICAgIGNvbW1pdF9pZHMgKz0gcnVuX2NvbW1hbmQoWydnaXQnLCAncmV2LXBhcnNlJywgJy0t
cmV2cy1vbmx5JywgY29tbWl0aXNoXSkuc3BsaXRsaW5lcygpCi0gICAgICAgIHJldHVybiBjb21t
aXRfaWRzCi0KLSAgICBkZWYgY29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdChzZWxmLCBj
b21taXRfaWQpOgotICAgICAgICBjb21taXRfbGluZXMgPSBydW5fY29tbWFuZChbJ2dpdCcsICdj
YXQtZmlsZScsICdjb21taXQnLCBjb21taXRfaWRdKS5zcGxpdGxpbmVzKCkKLQotICAgICAgICAj
IFNraXAgdGhlIGdpdCBoZWFkZXJzLgotICAgICAgICBmaXJzdF9saW5lX2FmdGVyX2hlYWRlcnMg
PSAwCi0gICAgICAgIGZvciBsaW5lIGluIGNvbW1pdF9saW5lczoKLSAgICAgICAgICAgIGZpcnN0
X2xpbmVfYWZ0ZXJfaGVhZGVycyArPSAxCi0gICAgICAgICAgICBpZiBsaW5lID09ICIiOgotICAg
ICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBDb21taXRNZXNzYWdlKGNvbW1pdF9s
aW5lc1tmaXJzdF9saW5lX2FmdGVyX2hlYWRlcnM6XSkKLQotICAgIGRlZiBmaWxlc19jaGFuZ2Vk
X3N1bW1hcnlfZm9yX2NvbW1pdChzZWxmLCBjb21taXRfaWQpOgotICAgICAgICByZXR1cm4gcnVu
X2NvbW1hbmQoWydnaXQnLCAnZGlmZi10cmVlJywgJy0tc2hvcnRzdGF0JywgJy0tbm8tY29tbWl0
LWlkJywgY29tbWl0X2lkXSkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zY21f
dW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3Nj
bV91bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21v
ZHVsZXMvc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5NCArMCwwIEBACi0j
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0j
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotaW1wb3J0IGJhc2U2NAotaW1wb3J0IG9zCi1pbXBvcnQgb3MucGF0aAotaW1w
b3J0IHJlCi1pbXBvcnQgc3RhdAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0ZW1wZmlsZQot
aW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdXJsbGliCi0KLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRh
dGUKLWZyb20gbW9kdWxlcy5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgcnVuX2NvbW1hbmQs
IFNjcmlwdEVycm9yCi1mcm9tIG1vZHVsZXMuc2NtIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbSwg
U0NNLCBDaGVja291dE5lZWRzVXBkYXRlLCBjb21taXRfZXJyb3JfaGFuZGxlcgotCi0jIEV2ZW50
dWFsbHkgd2Ugd2lsbCB3YW50IHRvIHdyaXRlIHRlc3RzIHdoaWNoIHdvcmsgZm9yIGJvdGggc2Nt
cy4gKGxpa2UgdXBkYXRlX3dlYmtpdCwgY2hhbmdlZF9maWxlcywgZXRjLikKLSMgUGVyaGFwcyB0
aHJvdWdoIHNvbWUgU0NNVGVzdCBiYXNlLWNsYXNzIHdoaWNoIGJvdGggU1ZOVGVzdCBhbmQgR2l0
VGVzdCBpbmhlcml0IGZyb20uCi0KLSMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIHVuaWZpZWQgaW50
byBvbmUgb2YgdGhlIGV4ZWN1dGl2ZS5weSBjb21tYW5kcyEKLWRlZiBydW5fc2lsZW50KGFyZ3Ms
IGN3ZD1Ob25lKToKLSAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBzdGRvdXQ9
c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBjd2Q9Y3dkKQotICAgIHBy
b2Nlc3MuY29tbXVuaWNhdGUoKSAjIGlnbm9yZSBvdXRwdXQKLSAgICBleGl0X2NvZGUgPSBwcm9j
ZXNzLndhaXQoKQotICAgIGlmIGV4aXRfY29kZToKLSAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3Io
J0ZhaWxlZCB0byBydW4gIiVzIiAgZXhpdF9jb2RlOiAlZCAgY3dkOiAlcycgJSAoYXJncywgZXhp
dF9jb2RlLCBjd2QpKQotCi1kZWYgd3JpdGVfaW50b19maWxlX2F0X3BhdGgoZmlsZV9wYXRoLCBj
b250ZW50cyk6Ci0gICAgZmlsZSA9IG9wZW4oZmlsZV9wYXRoLCAndycpCi0gICAgZmlsZS53cml0
ZShjb250ZW50cykKLSAgICBmaWxlLmNsb3NlKCkKLQotZGVmIHJlYWRfZnJvbV9wYXRoKGZpbGVf
cGF0aCk6Ci0gICAgZmlsZSA9IG9wZW4oZmlsZV9wYXRoLCAncicpCi0gICAgY29udGVudHMgPSBm
aWxlLnJlYWQoKQotICAgIGZpbGUuY2xvc2UoKQotICAgIHJldHVybiBjb250ZW50cwotCi0jIEV4
aXN0cyB0byBzaGFyZSBzdm4gcmVwb3NpdG9yeSBjcmVhdGlvbiBjb2RlIGJldHdlZW4gdGhlIGdp
dCBhbmQgc3ZuIHRlc3RzCi1jbGFzcyBTVk5UZXN0UmVwb3NpdG9yeToKLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIF9zZXR1cF90ZXN0X2NvbW1pdHModGVzdF9vYmplY3QpOgotICAgICAgICAj
IEFkZCBzb21lIHRlc3QgY29tbWl0cwotICAgICAgICBvcy5jaGRpcih0ZXN0X29iamVjdC5zdm5f
Y2hlY2tvdXRfcGF0aCkKLSAgICAgICAgdGVzdF9maWxlID0gb3BlbigndGVzdF9maWxlJywgJ3cn
KQotICAgICAgICB0ZXN0X2ZpbGUud3JpdGUoInRlc3QxIikKLSAgICAgICAgdGVzdF9maWxlLmZs
dXNoKCkKLSAgICAgICAgCi0gICAgICAgIHJ1bl9jb21tYW5kKFsnc3ZuJywgJ2FkZCcsICd0ZXN0
X2ZpbGUnXSkKLSAgICAgICAgcnVuX2NvbW1hbmQoWydzdm4nLCAnY29tbWl0JywgJy0tcXVpZXQn
LCAnLS1tZXNzYWdlJywgJ2luaXRpYWwgY29tbWl0J10pCi0gICAgICAgIAotICAgICAgICB0ZXN0
X2ZpbGUud3JpdGUoInRlc3QyIikKLSAgICAgICAgdGVzdF9maWxlLmZsdXNoKCkKLSAgICAgICAg
Ci0gICAgICAgIHJ1bl9jb21tYW5kKFsnc3ZuJywgJ2NvbW1pdCcsICctLXF1aWV0JywgJy0tbWVz
c2FnZScsICdzZWNvbmQgY29tbWl0J10pCi0gICAgICAgIAotICAgICAgICB0ZXN0X2ZpbGUud3Jp
dGUoInRlc3QzXG4iKQotICAgICAgICB0ZXN0X2ZpbGUuZmx1c2goKQotICAgICAgICAKLSAgICAg
ICAgcnVuX2NvbW1hbmQoWydzdm4nLCAnY29tbWl0JywgJy0tcXVpZXQnLCAnLS1tZXNzYWdlJywg
J3RoaXJkIGNvbW1pdCddKQotCi0gICAgICAgIHRlc3RfZmlsZS53cml0ZSgidGVzdDRcbiIpCi0g
ICAgICAgIHRlc3RfZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgcnVuX2NvbW1hbmQoWydzdm4nLCAn
Y29tbWl0JywgJy0tcXVpZXQnLCAnLS1tZXNzYWdlJywgJ2ZvdXJ0aCBjb21taXQnXSkKLQotICAg
ICAgICAjIHN2biBkb2VzIG5vdCBzZWVtIHRvIHVwZGF0ZSBhZnRlciBjb21taXQgYXMgSSB3b3Vs
ZCBleHBlY3QuCi0gICAgICAgIHJ1bl9jb21tYW5kKFsnc3ZuJywgJ3VwZGF0ZSddKQotCi0gICAg
QGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldHVwKGNscywgdGVzdF9vYmplY3QpOgotICAgICAgICAj
IENyZWF0ZSBhbiB0ZXN0IFNWTiByZXBvc2l0b3J5Ci0gICAgICAgIHRlc3Rfb2JqZWN0LnN2bl9y
ZXBvX3BhdGggPSB0ZW1wZmlsZS5ta2R0ZW1wKHN1ZmZpeD0ic3ZuX3Rlc3RfcmVwbyIpCi0gICAg
ICAgIHRlc3Rfb2JqZWN0LnN2bl9yZXBvX3VybCA9ICJmaWxlOi8vJXMiICUgdGVzdF9vYmplY3Qu
c3ZuX3JlcG9fcGF0aCAjIE5vdCBzdXJlIHRoaXMgd2lsbCB3b3JrIG9uIHdpbmRvd3MKLSAgICAg
ICAgIyBnaXQgc3ZuIGNvbXBsYWlucyBpZiB3ZSBkb24ndCBwYXNzIC0tcHJlLTEuNS1jb21wYXRp
YmxlLCBub3Qgc3VyZSB3aHk6Ci0gICAgICAgICMgRXhwZWN0ZWQgRlMgZm9ybWF0ICcyJzsgZm91
bmQgZm9ybWF0ICczJyBhdCAvdXNyL2xvY2FsL2xpYmV4ZWMvZ2l0LWNvcmUvL2dpdC1zdm4gbGlu
ZSAxNDc3Ci0gICAgICAgIHJ1bl9jb21tYW5kKFsnc3ZuYWRtaW4nLCAnY3JlYXRlJywgJy0tcHJl
LTEuNS1jb21wYXRpYmxlJywgdGVzdF9vYmplY3Quc3ZuX3JlcG9fcGF0aF0pCi0KLSAgICAgICAg
IyBDcmVhdGUgYSB0ZXN0IHN2biBjaGVja291dAotICAgICAgICB0ZXN0X29iamVjdC5zdm5fY2hl
Y2tvdXRfcGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoc3VmZml4PSJzdm5fdGVzdF9jaGVja291dCIp
Ci0gICAgICAgIHJ1bl9jb21tYW5kKFsnc3ZuJywgJ2NoZWNrb3V0JywgJy0tcXVpZXQnLCB0ZXN0
X29iamVjdC5zdm5fcmVwb191cmwsIHRlc3Rfb2JqZWN0LnN2bl9jaGVja291dF9wYXRoXSkKLQot
ICAgICAgICBjbHMuX3NldHVwX3Rlc3RfY29tbWl0cyh0ZXN0X29iamVjdCkKLQotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiB0ZWFyX2Rvd24oY2xzLCB0ZXN0X29iamVjdCk6Ci0gICAgICAgIHJ1
bl9jb21tYW5kKFsncm0nLCAnLXJmJywgdGVzdF9vYmplY3Quc3ZuX3JlcG9fcGF0aF0pCi0gICAg
ICAgIHJ1bl9jb21tYW5kKFsncm0nLCAnLXJmJywgdGVzdF9vYmplY3Quc3ZuX2NoZWNrb3V0X3Bh
dGhdKQotCi0jIEZvciB0ZXN0aW5nIHRoZSBTQ00gYmFzZWNsYXNzIGRpcmVjdGx5LgotY2xhc3Mg
U0NNQ2xhc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgot
ICAgICAgICBzZWxmLmRldl9udWxsID0gb3Blbihvcy5kZXZudWxsLCAidyIpICMgVXNlZCB0byBt
YWtlIG91ciBQb3BlbiBjYWxscyBxdWlldC4KLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAg
ICAgICAgc2VsZi5kZXZfbnVsbC5jbG9zZSgpCi0KLSAgICBkZWYgdGVzdF9ydW5fY29tbWFuZF93
aXRoX3BpcGUoc2VsZik6Ci0gICAgICAgIGlucHV0X3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVu
KFsnZWNobycsICdmb29cbmJhciddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c2Vs
Zi5kZXZfbnVsbCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fY29tbWFuZChbJ2dyZXAn
LCAnYmFyJ10sIGlucHV0PWlucHV0X3Byb2Nlc3Muc3Rkb3V0KSwgImJhclxuIikKLQotICAgICAg
ICAjIFRlc3QgdGhlIG5vbi1waXBlIGNhc2UgdG9vOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHJ1bl9jb21tYW5kKFsnZ3JlcCcsICdiYXInXSwgaW5wdXQ9ImZvb1xuYmFyIiksICJiYXJcbiIp
Ci0KLSAgICAgICAgY29tbWFuZF9yZXR1cm5zX25vbl96ZXJvID0gWycvYmluL3NoJywgJy0taW52
YWxpZC1vcHRpb24nXQotICAgICAgICAjIFRlc3Qgd2hlbiB0aGUgaW5wdXQgcGlwZSBwcm9jZXNz
IGZhaWxzLgotICAgICAgICBpbnB1dF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5k
X3JldHVybnNfbm9uX3plcm8sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zZWxmLmRl
dl9udWxsKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5wdXRfcHJvY2Vzcy5wb2xsKCkgIT0g
MCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2NyaXB0RXJyb3IsIHJ1bl9jb21tYW5kLCBb
J2dyZXAnLCAnYmFyJ10sIGlucHV0PWlucHV0X3Byb2Nlc3Muc3Rkb3V0KQotCi0gICAgICAgICMg
VGVzdCB3aGVuIHRoZSBydW5fY29tbWFuZCBwcm9jZXNzIGZhaWxzLgotICAgICAgICBpbnB1dF9w
cm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2VjaG8nLCAnZm9vXG5iYXInXSwgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSwgc3RkZXJyPXNlbGYuZGV2X251bGwpICMgZ3JlcCBzaG93cyB1c2FnZSBh
bmQgY2FsbHMgZXhpdCgyKSB3aGVuIGNhbGxlZCB3L28gYXJndW1lbnRzLgotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhTY3JpcHRFcnJvciwgcnVuX2NvbW1hbmQsIGNvbW1hbmRfcmV0dXJuc19u
b25femVybywgaW5wdXQ9aW5wdXRfcHJvY2Vzcy5zdGRvdXQpCi0KLSAgICBkZWYgdGVzdF9lcnJv
cl9oYW5kbGVycyhzZWxmKToKLSAgICAgICAgZ2l0X2ZhaWx1cmVfbWVzc2FnZT0iTWVyZ2UgY29u
ZmxpY3QgZHVyaW5nIGNvbW1pdDogWW91ciBmaWxlIG9yIGRpcmVjdG9yeSAnV2ViQ29yZS9DaGFu
Z2VMb2cnIGlzIHByb2JhYmx5IG91dC1vZi1kYXRlOiByZXNvdXJjZSBvdXQgb2YgZGF0ZTsgdHJ5
IHVwZGF0aW5nIGF0IC91c3IvbG9jYWwvbGliZXhlYy9naXQtY29yZS8vZ2l0LXN2biBsaW5lIDQ2
OSIKLSAgICAgICAgc3ZuX2ZhaWx1cmVfbWVzc2FnZT0iIiJzdm46IENvbW1pdCBmYWlsZWQgKGRl
dGFpbHMgZm9sbG93KToKLXN2bjogRmlsZSBvciBkaXJlY3RvcnkgJ0NoYW5nZUxvZycgaXMgb3V0
IG9mIGRhdGU7IHRyeSB1cGRhdGluZwotc3ZuOiByZXNvdXJjZSBvdXQgb2YgZGF0ZTsgdHJ5IHVw
ZGF0aW5nCi0iIiIKLSAgICAgICAgY29tbWFuZF9kb2VzX25vdF9leGlzdCA9IFsnZG9lc19ub3Rf
ZXhpc3QnLCAnaW52YWxpZF9vcHRpb24nXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vy
cm9yLCBydW5fY29tbWFuZCwgY29tbWFuZF9kb2VzX25vdF9leGlzdCkKLSAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoT1NFcnJvciwgcnVuX2NvbW1hbmQsIGNvbW1hbmRfZG9lc19ub3RfZXhpc3Qs
IGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikKLQotICAgICAgICBjb21tYW5k
X3JldHVybnNfbm9uX3plcm8gPSBbJy9iaW4vc2gnLCAnLS1pbnZhbGlkLW9wdGlvbiddCi0gICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNjcmlwdEVycm9yLCBydW5fY29tbWFuZCwgY29tbWFuZF9y
ZXR1cm5zX25vbl96ZXJvKQotICAgICAgICAjIENoZWNrIGlmIHJldHVybnMgZXJyb3IgdGV4dDoK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bl9jb21tYW5kKGNvbW1hbmRfcmV0dXJuc19ub25f
emVybywgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKSkKLQotICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhDaGVja291dE5lZWRzVXBkYXRlLCBjb21taXRfZXJyb3JfaGFuZGxl
ciwgU2NyaXB0RXJyb3Iob3V0cHV0PWdpdF9mYWlsdXJlX21lc3NhZ2UpKQotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhDaGVja291dE5lZWRzVXBkYXRlLCBjb21taXRfZXJyb3JfaGFuZGxlciwg
U2NyaXB0RXJyb3Iob3V0cHV0PXN2bl9mYWlsdXJlX21lc3NhZ2UpKQotICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhTY3JpcHRFcnJvciwgY29tbWl0X2Vycm9yX2hhbmRsZXIsIFNjcmlwdEVycm9y
KG91dHB1dD0nYmxhaCBibGFoIGJsYWgnKSkKLQotCi0jIEdpdFRlc3QgYW5kIFNWTlRlc3QgaW5o
ZXJpdCBmcm9tIHRoaXMgc28gYW55IHRlc3RfIG1ldGhvZHMgaGVyZSB3aWxsIGJlIHJ1biBvbmNl
IGZvciB0aGlzIGNsYXNzIGFuZCB0aGVuIG9uY2UgZm9yIGVhY2ggc3ViY2xhc3MuCi1jbGFzcyBT
Q01UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgX2NyZWF0ZV9wYXRjaChzZWxmLCBw
YXRjaF9jb250ZW50cyk6Ci0gICAgICAgIHBhdGNoX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5z
dm5fY2hlY2tvdXRfcGF0aCwgJ3BhdGNoLmRpZmYnKQotICAgICAgICB3cml0ZV9pbnRvX2ZpbGVf
YXRfcGF0aChwYXRjaF9wYXRoLCBwYXRjaF9jb250ZW50cykKLSAgICAgICAgcGF0Y2ggPSB7fQot
ICAgICAgICBwYXRjaFsncmV2aWV3ZXInXSA9ICdKb2UgQ29vbCcKLSAgICAgICAgcGF0Y2hbJ2J1
Z19pZCddID0gJzEyMzQ1JwotICAgICAgICBwYXRjaFsndXJsJ10gPSAnZmlsZTovLyVzJyAlIHVy
bGxpYi5wYXRobmFtZTJ1cmwocGF0Y2hfcGF0aCkKLSAgICAgICAgcmV0dXJuIHBhdGNoCi0KLSAg
ICBkZWYgX3NldHVwX3dlYmtpdHRvb2xzX3NjcmlwdHNfc3ltbGluayhzZWxmLCBsb2NhbF9zY20p
OgotICAgICAgICB3ZWJraXRfc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0ob3MucGF0aC5kaXJuYW1l
KG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKQotICAgICAgICB3ZWJraXRfc2NyaXB0c19kaXJl
Y3RvcnkgPSB3ZWJraXRfc2NtLnNjcmlwdHNfZGlyZWN0b3J5KCkKLSAgICAgICAgbG9jYWxfc2Ny
aXB0c19kaXJlY3RvcnkgPSBsb2NhbF9zY20uc2NyaXB0c19kaXJlY3RvcnkoKQotICAgICAgICBv
cy5ta2Rpcihvcy5wYXRoLmRpcm5hbWUobG9jYWxfc2NyaXB0c19kaXJlY3RvcnkpKQotICAgICAg
ICBvcy5zeW1saW5rKHdlYmtpdF9zY3JpcHRzX2RpcmVjdG9yeSwgbG9jYWxfc2NyaXB0c19kaXJl
Y3RvcnkpCi0KLSAgICAjIFRlc3RzIHdoaWNoIGJvdGggR2l0VGVzdCBhbmQgU1ZOVGVzdCBzaG91
bGQgcnVuLgotICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBzaW1wbGVyIHdheSB0byBhZGQg
dGhlc2Ugdy9vIGFkZGluZyBhIHdyYXBwZXIgbWV0aG9kIHRvIGJvdGggc3ViY2xhc3NlcwotICAg
IGRlZiBfc2hhcmVkX3Rlc3RfY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmKToKLSAgICAgICAgd3Jp
dGVfaW50b19maWxlX2F0X3BhdGgoJ3Rlc3RfZmlsZScsICdtb3JlIHRlc3QgY29udGVudCcpCi0g
ICAgICAgIGNvbW1pdF90ZXh0ID0gc2VsZi5zY20uY29tbWl0X3dpdGhfbWVzc2FnZSgnYW5vdGhl
ciB0ZXN0IGNvbW1pdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20uc3ZuX3Jl
dmlzaW9uX2Zyb21fY29tbWl0X3RleHQoY29tbWl0X3RleHQpLCAnNScpCi0KLSAgICAgICAgc2Vs
Zi5zY20uZHJ5cnVuID0gVHJ1ZQotICAgICAgICB3cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aCgndGVz
dF9maWxlJywgJ3N0aWxsIG1vcmUgdGVzdCBjb250ZW50JykKLSAgICAgICAgY29tbWl0X3RleHQg
PSBzZWxmLnNjbS5jb21taXRfd2l0aF9tZXNzYWdlKCd5ZXQgYW5vdGhlciB0ZXN0IGNvbW1pdCcp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20uc3ZuX3JldmlzaW9uX2Zyb21fY29t
bWl0X3RleHQoY29tbWl0X3RleHQpLCAnMCcpCi0KLSAgICBkZWYgX3NoYXJlZF90ZXN0X3JldmVy
c2VfZGlmZihzZWxmKToKLSAgICAgICAgc2VsZi5fc2V0dXBfd2Via2l0dG9vbHNfc2NyaXB0c19z
eW1saW5rKHNlbGYuc2NtKSAjIEdpdCdzIGFwcGx5X3JldmVyc2VfZGlmZiB1c2VzIHJlc29sdmUt
Q2hhbmdlTG9ncwotICAgICAgICAjIE9ubHkgdGVzdCB0aGUgc2ltcGxlIGNhc2UsIGFzIGFueSBv
dGhlciB3aWxsIGVuZCB1cCB3aXRoIGNvbmZsaWN0IG1hcmtlcnMuCi0gICAgICAgIHNlbGYuc2Nt
LmFwcGx5X3JldmVyc2VfZGlmZignNCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF9m
cm9tX3BhdGgoJ3Rlc3RfZmlsZScpLCAidGVzdDF0ZXN0MnRlc3QzXG4iKQotCi0gICAgZGVmIF9z
aGFyZWRfdGVzdF9kaWZmX2Zvcl9yZXZpc2lvbihzZWxmKToKLSAgICAgICAgIyBQYXRjaCBmb3Jt
YXRzIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQgYmV0d2VlbiBzdm4gYW5kIGdpdCwgc28ganVzdCBy
ZWdleHAgZm9yIHRoaW5ncyB3ZSBrbm93IHNob3VsZCBiZSB0aGVyZS4KLSAgICAgICAgcjNfcGF0
Y2ggPSBzZWxmLnNjbS5kaWZmX2Zvcl9yZXZpc2lvbigzKQotICAgICAgICBzZWxmLmFzc2VydFRy
dWUocmUuc2VhcmNoKCd0ZXN0MycsIHIzX3BhdGNoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShyZS5zZWFyY2goJ3Rlc3Q0JywgcjNfcGF0Y2gpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUo
cmUuc2VhcmNoKCd0ZXN0MicsIHIzX3BhdGNoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJl
LnNlYXJjaCgndGVzdDInLCBzZWxmLnNjbS5kaWZmX2Zvcl9yZXZpc2lvbigyKSkpCi0KLSAgICBk
ZWYgX3NoYXJlZF90ZXN0X3N2bl9hcHBseV9naXRfcGF0Y2goc2VsZik6Ci0gICAgICAgIHNlbGYu
X3NldHVwX3dlYmtpdHRvb2xzX3NjcmlwdHNfc3ltbGluayhzZWxmLnNjbSkKLSAgICAgICAgZ2l0
X2JpbmFyeV9hZGRpdGlvbiA9ICIiImRpZmYgLS1naXQgYS9maXp6YnV6ejcuZ2lmIGIvZml6emJ1
eno3LmdpZgotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0YTk1MzJlNzc5NGZjZDc5MWY2ZjEyMTU3NDA2ZDkwCi02
MDE1MTY5MAotR0lUIGJpbmFyeSBwYXRjaAotbGl0ZXJhbCA1MTIKLXpjbVo/d2JoRUhiUkF4fE1V
fD9pV3tLeGN+P0tvZkQ7Y2tZO0grJjVIbkhsISFHUU1EN2grc1V7XyllOWZeVjNjPwotemhKUCMj
SGRaQyM0S303RjY4QCExamZXUWcyZGFDbS1ncyMzfEpSRURUPmMrcEc0TDxfMjt3IyNXTU8jeXNQ
UGFwCi16THFwQWYxT0U5Mzh4QXNTcDQhNWYtbz48P1ZLZSgjMGpFY3dmSEdGNCVNMV5rUnMxNG9W
QnAyWkVMe0UxTjwtekoKLXpzZkxtT3RLdGE7Ml87MmMjXlMxLThjZjxuYiFRbkdsPmMhWGU2Ulh2
ckV0QVdCdlNEVGdUTzFqM3ZBMzFQdXchQQotenMoODdxKWpfbVZEVHFCby1QKzAzLVA1bUhDRW5K
K3h9WWRDdVM3I2JDQ3llUFVlKHluSyt8NGItM3FLKVQ/WiYpCi16WUcrYHRsNGg/R1p2XyR0ODJ9
WDQqRFRFfCQ7e0RFaVB5RkApVS0xK0ZhWCsrVDlIeyYlY2FnYFcxfHpWUEBgJWIKLXpxaVNrcDZ7
QlRwV1RrQ3IhPTxDNlE9PyN+UjheSmZybGlBRjZRXmdWOUl1cDhScUNYcXFocUNgcXN5aGs8LW5s
QgotejAwZntRWnZmSyZ8Tm0jb1owVFFsYFlyJEJJYTZBQDE2TzI2dWQ3SDxRTT14bGB0b0xLbnot
M2hAOWM5cSZ3bXxYCi16ezg5SXxXUHlEISpNP2d2P3FgO0w9MllGZVhySlFOdGk0P31zIXpGbz01
Q3plQnhDNjl4QTx6cmpQPHdVY0NSaDQKLXB0VWwtWkc8JWF+I0x3a0lXdiZxIUtTQ0g3dFE4Y0pE
aXcrfEdWP01OKVJqWTUwUlRiLXh2VCZICi0KLWxpdGVyYWwgMAotSGNtVj9kMDAwMDEKLQotIiIi
Ci0gICAgICAgIHNlbGYuc2NtLmFwcGx5X3BhdGNoKHNlbGYuX2NyZWF0ZV9wYXRjaChnaXRfYmlu
YXJ5X2FkZGl0aW9uKSkKLSAgICAgICAgYWRkZWQgPSByZWFkX2Zyb21fcGF0aCgnZml6emJ1eno3
LmdpZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNTEyLCBsZW4oYWRkZWQpKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUoYWRkZWQuc3RhcnRzd2l0aCgnR0lGODlhJykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZSgnZml6emJ1eno3LmdpZicgaW4gc2VsZi5zY20uY2hhbmdlZF9maWxlcygp
KQotCi0gICAgICAgICMgVGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuCi0gICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKFNjcmlwdEVycm9yLCBzZWxmLnNjbS5hcHBseV9wYXRjaCwgc2VsZi5fY3JlYXRl
X3BhdGNoKGdpdF9iaW5hcnlfYWRkaXRpb24pKQotCi0gICAgICAgIGdpdF9iaW5hcnlfbW9kaWZp
Y2F0aW9uID0gIiIiZGlmZiAtLWdpdCBhL2ZpenpidXp6Ny5naWYgYi9maXp6YnV6ejcuZ2lmCi1p
bmRleCA2NGE5NTMyZTc3OTRmY2Q3OTFmNmYxMjE1NzQwNmQ5MDYwMTUxNjkwLi4zMjNmYWUwM2Y0
NjA2ZWE5OTkxZGY4YmVmYmIyZmNhNwotR0lUIGJpbmFyeSBwYXRjaAotbGl0ZXJhbCA3Ci1PY21Z
ZXgmcmVEJDtzTzgqRjlMKUIKLQotbGl0ZXJhbCA1MTIKLXpjbVo/d2JoRUhiUkF4fE1VfD9pV3tL
eGN+P0tvZkQ7Y2tZO0grJjVIbkhsISFHUU1EN2grc1V7XyllOWZeVjNjPwotemhKUCMjSGRaQyM0
S303RjY4QCExamZXUWcyZGFDbS1ncyMzfEpSRURUPmMrcEc0TDxfMjt3IyNXTU8jeXNQUGFwCi16
THFwQWYxT0U5Mzh4QXNTcDQhNWYtbz48P1ZLZSgjMGpFY3dmSEdGNCVNMV5rUnMxNG9WQnAyWkVM
e0UxTjwtekoKLXpzZkxtT3RLdGE7Ml87MmMjXlMxLThjZjxuYiFRbkdsPmMhWGU2Ulh2ckV0QVdC
dlNEVGdUTzFqM3ZBMzFQdXchQQotenMoODdxKWpfbVZEVHFCby1QKzAzLVA1bUhDRW5KK3h9WWRD
dVM3I2JDQ3llUFVlKHluSyt8NGItM3FLKVQ/WiYpCi16WUcrYHRsNGg/R1p2XyR0ODJ9WDQqRFRF
fCQ7e0RFaVB5RkApVS0xK0ZhWCsrVDlIeyYlY2FnYFcxfHpWUEBgJWIKLXpxaVNrcDZ7QlRwV1Rr
Q3IhPTxDNlE9PyN+UjheSmZybGlBRjZRXmdWOUl1cDhScUNYcXFocUNgcXN5aGs8LW5sQgotejAw
ZntRWnZmSyZ8Tm0jb1owVFFsYFlyJEJJYTZBQDE2TzI2dWQ3SDxRTT14bGB0b0xLbnotM2hAOWM5
cSZ3bXxYCi16ezg5SXxXUHlEISpNP2d2P3FgO0w9MllGZVhySlFOdGk0P31zIXpGbz01Q3plQnhD
Njl4QTx6cmpQPHdVY0NSaDQKLXB0VWwtWkc8JWF+I0x3a0lXdiZxIUtTQ0g3dFE4Y0pEaXcrfEdW
P01OKVJqWTUwUlRiLXh2VCZICi0KLSIiIgotICAgICAgICBzZWxmLnNjbS5hcHBseV9wYXRjaChz
ZWxmLl9jcmVhdGVfcGF0Y2goZ2l0X2JpbmFyeV9tb2RpZmljYXRpb24pKQotICAgICAgICBtb2Rp
ZmllZCA9IHJlYWRfZnJvbV9wYXRoKCdmaXp6YnV6ejcuZ2lmJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnZm9vYmFyXG4nLCBtb2RpZmllZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdm
aXp6YnV6ejcuZ2lmJyBpbiBzZWxmLnNjbS5jaGFuZ2VkX2ZpbGVzKCkpCi0KLSAgICAgICAgIyBB
cHBseWluZyB0aGUgc2FtZSBtb2RpZmljYXRpb24gc2hvdWxkIGZhaWwuCi0gICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFNjcmlwdEVycm9yLCBzZWxmLnNjbS5hcHBseV9wYXRjaCwgc2VsZi5fY3Jl
YXRlX3BhdGNoKGdpdF9iaW5hcnlfbW9kaWZpY2F0aW9uKSkKLQotICAgICAgICBnaXRfYmluYXJ5
X2RlbGV0aW9uID0gIiIiZGlmZiAtLWdpdCBhL2ZpenpidXp6Ny5naWYgYi9maXp6YnV6ejcuZ2lm
Ci1kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDMyM2ZhZTAuLjAwMDAwMDAKLUdJVCBi
aW5hcnkgcGF0Y2gKLWxpdGVyYWwgMAotSGNtVj9kMDAwMDEKLQotbGl0ZXJhbCA3Ci1PY21ZZXgm
cmVEJDtzTzgqRjlMKUIKLQotIiIiCi0gICAgICAgIHNlbGYuc2NtLmFwcGx5X3BhdGNoKHNlbGYu
X2NyZWF0ZV9wYXRjaChnaXRfYmluYXJ5X2RlbGV0aW9uKSkKLSAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShvcy5wYXRoLmV4aXN0cygnZml6emJ1eno3LmdpZicpKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKCdmaXp6YnV6ejcuZ2lmJyBpbiBzZWxmLnNjbS5jaGFuZ2VkX2ZpbGVzKCkpCi0KLSAg
ICAgICAgIyBDYW5ub3QgZGVsZXRlIGFnYWluLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhT
Y3JpcHRFcnJvciwgc2VsZi5zY20uYXBwbHlfcGF0Y2gsIHNlbGYuX2NyZWF0ZV9wYXRjaChnaXRf
YmluYXJ5X2RlbGV0aW9uKSkKLQotCi1jbGFzcyBTVk5UZXN0KFNDTVRlc3QpOgotCi0gICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiBfc2V0X2RhdGVfYW5kX3Jldmlld2VyKGNoYW5nZWxvZ19lbnRy
eSk6Ci0gICAgICAgICMgSm9lIENvb2wgbWF0Y2hlcyB0aGUgcmV2aWV3ZXIgc2V0IGluIFNDTVRl
c3QuX2NyZWF0ZV9wYXRjaAotICAgICAgICBjaGFuZ2Vsb2dfZW50cnkgPSBjaGFuZ2Vsb2dfZW50
cnkucmVwbGFjZSgnUkVWSUVXRVJfSEVSRScsICdKb2UgQ29vbCcpCi0gICAgICAgICMgc3ZuLWFw
cGx5IHdpbGwgdXBkYXRlIENoYW5nZUxvZyBlbnRyaWVzIHdpdGggdG9kYXkncyBkYXRlLgotICAg
ICAgICByZXR1cm4gY2hhbmdlbG9nX2VudHJ5LnJlcGxhY2UoJ0RBVEVfSEVSRScsIGRhdGUudG9k
YXkoKS5pc29mb3JtYXQoKSkKLQotICAgIGRlZiB0ZXN0X3N2bl9hcHBseShzZWxmKToKLSAgICAg
ICAgZmlyc3RfZW50cnkgPSAiIiIyMDA5LTEwLTI2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0
Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBGb28gQmFyLgotCi0gICAgICAgIE1vc3QgYXdl
c29tZSBjaGFuZ2UgZXZlci4KLQotICAgICAgICAqIHNjbV91bml0dGVzdC5weToKLSIiIgotICAg
ICAgICBpbnRlcm1lZGlhdGVfZW50cnkgPSAiIiIyMDA5LTEwLTI3ICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBCYXogQmFyLgotCi0gICAgICAg
IEEgbW9yZSBhd2Vzb21lciBjaGFuZ2UgeWV0IQotCi0gICAgICAgICogc2NtX3VuaXR0ZXN0LnB5
OgotIiIiCi0gICAgICAgIG9uZV9saW5lX292ZXJsYXBfcGF0Y2ggPSAiIiJJbmRleDogQ2hhbmdl
TG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiA1KQotKysrIENoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQotQEAgLTEsNSArMSwxMyBAQAotIDIwMDktMTAtMjYgIEVyaWMgU2Vp
ZGVsICA8ZXJpY0B3ZWJraXQub3JnPgotCi0rICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KLSsKLSsgICAgICAgIFNlY29uZCBtb3N0IGF3c29tZSBjaGFuZ2UgZXZlci4KLSsKLSsg
ICAgICAgICogc2NtX3VuaXR0ZXN0LnB5OgotKwotKzIwMDktMTAtMjYgIEVyaWMgU2VpZGVsICA8
ZXJpY0B3ZWJraXQub3JnPgotKwotICAgICAgICAgUmV2aWV3ZWQgYnkgRm9vIEJhci4KLQotICAg
ICAgICAgTW9zdCBhd2Vzb21lIGNoYW5nZSBldmVyLgotIiIiCi0gICAgICAgIG9uZV9saW5lX292
ZXJsYXBfZW50cnkgPSAiIiJEQVRFX0hFUkUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3Jn
PgotCi0gICAgICAgIFJldmlld2VkIGJ5IFJFVklFV0VSX0hFUkUuCi0KLSAgICAgICAgU2Vjb25k
IG1vc3QgYXdzb21lIGNoYW5nZSBldmVyLgotCi0gICAgICAgICogc2NtX3VuaXR0ZXN0LnB5Ogot
IiIiCi0gICAgICAgIHR3b19saW5lX292ZXJsYXBfcGF0Y2ggPSAiIiJJbmRleDogQ2hhbmdlTG9n
Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiA1KQotKysrIENoYW5nZUxvZwko
d29ya2luZyBjb3B5KQotQEAgLTIsNiArMiwxNCBAQAotCi0gICAgICAgICBSZXZpZXdlZCBieSBG
b28gQmFyLgotCi0rICAgICAgICBTZWNvbmQgbW9zdCBhd3NvbWUgY2hhbmdlIGV2ZXIuCi0rCi0r
ICAgICAgICAqIHNjbV91bml0dGVzdC5weToKLSsKLSsyMDA5LTEwLTI2ICBFcmljIFNlaWRlbCAg
PGVyaWNAd2Via2l0Lm9yZz4KLSsKLSsgICAgICAgIFJldmlld2VkIGJ5IEZvbyBCYXIuCi0rCi0g
ICAgICAgICBNb3N0IGF3ZXNvbWUgY2hhbmdlIGV2ZXIuCi0KLSAgICAgICAgICogc2NtX3VuaXR0
ZXN0LnB5OgotIiIiCi0gICAgICAgIHR3b19saW5lX292ZXJsYXBfZW50cnkgPSAiIiJEQVRFX0hF
UkUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5
IEZvbyBCYXIuCi0KLSAgICAgICAgU2Vjb25kIG1vc3QgYXdzb21lIGNoYW5nZSBldmVyLgotCi0g
ICAgICAgICogc2NtX3VuaXR0ZXN0LnB5OgotIiIiCi0gICAgICAgIHdyaXRlX2ludG9fZmlsZV9h
dF9wYXRoKCdDaGFuZ2VMb2cnLCBmaXJzdF9lbnRyeSkKLSAgICAgICAgcnVuX2NvbW1hbmQoWydz
dm4nLCAnYWRkJywgJ0NoYW5nZUxvZyddKQotICAgICAgICBydW5fY29tbWFuZChbJ3N2bicsICdj
b21taXQnLCAnLS1xdWlldCcsICctLW1lc3NhZ2UnLCAnQ2hhbmdlTG9nIGNvbW1pdCddKQotCi0g
ICAgICAgICMgUGF0Y2ggZmlsZXMgd2VyZSBjcmVhdGVkIGFnYWluc3QganVzdCAnZmlyc3RfZW50
cnknLgotICAgICAgICAjIEFkZCBhIHNlY29uZCBjb21taXQgdG8gbWFrZSBzdm4tYXBwbHkgaGF2
ZSB0byBhcHBseSB0aGUgcGF0Y2hlcyB3aXRoIGZ1enouCi0gICAgICAgIGNoYW5nZWxvZ19jb250
ZW50cyA9ICIlc1xuJXMiICUgKGludGVybWVkaWF0ZV9lbnRyeSwgZmlyc3RfZW50cnkpCi0gICAg
ICAgIHdyaXRlX2ludG9fZmlsZV9hdF9wYXRoKCdDaGFuZ2VMb2cnLCBjaGFuZ2Vsb2dfY29udGVu
dHMpCi0gICAgICAgIHJ1bl9jb21tYW5kKFsnc3ZuJywgJ2NvbW1pdCcsICctLXF1aWV0JywgJy0t
bWVzc2FnZScsICdJbnRlcm1lZGlhdGUgY29tbWl0J10pCi0KLSAgICAgICAgc2VsZi5fc2V0dXBf
d2Via2l0dG9vbHNfc2NyaXB0c19zeW1saW5rKHNlbGYuc2NtKQotICAgICAgICBzZWxmLnNjbS5h
cHBseV9wYXRjaChzZWxmLl9jcmVhdGVfcGF0Y2gob25lX2xpbmVfb3ZlcmxhcF9wYXRjaCkpCi0g
ICAgICAgIGV4cGVjdGVkX2NoYW5nZWxvZ19jb250ZW50cyA9ICIlc1xuJXMiICUgKHNlbGYuX3Nl
dF9kYXRlX2FuZF9yZXZpZXdlcihvbmVfbGluZV9vdmVybGFwX2VudHJ5KSwgY2hhbmdlbG9nX2Nv
bnRlbnRzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWFkX2Zyb21fcGF0aCgnQ2hhbmdl
TG9nJyksIGV4cGVjdGVkX2NoYW5nZWxvZ19jb250ZW50cykKLQotICAgICAgICBzZWxmLnNjbS5y
ZXZlcnRfZmlsZXMoWydDaGFuZ2VMb2cnXSkKLSAgICAgICAgc2VsZi5zY20uYXBwbHlfcGF0Y2go
c2VsZi5fY3JlYXRlX3BhdGNoKHR3b19saW5lX292ZXJsYXBfcGF0Y2gpKQotICAgICAgICBleHBl
Y3RlZF9jaGFuZ2Vsb2dfY29udGVudHMgPSAiJXNcbiVzIiAlIChzZWxmLl9zZXRfZGF0ZV9hbmRf
cmV2aWV3ZXIodHdvX2xpbmVfb3ZlcmxhcF9lbnRyeSksIGNoYW5nZWxvZ19jb250ZW50cykKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhZF9mcm9tX3BhdGgoJ0NoYW5nZUxvZycpLCBleHBl
Y3RlZF9jaGFuZ2Vsb2dfY29udGVudHMpCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAg
IFNWTlRlc3RSZXBvc2l0b3J5LnNldHVwKHNlbGYpCi0gICAgICAgIG9zLmNoZGlyKHNlbGYuc3Zu
X2NoZWNrb3V0X3BhdGgpCi0gICAgICAgIHNlbGYuc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0oc2Vs
Zi5zdm5fY2hlY2tvdXRfcGF0aCkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAg
U1ZOVGVzdFJlcG9zaXRvcnkudGVhcl9kb3duKHNlbGYpCi0KLSAgICBkZWYgdGVzdF9jcmVhdGVf
cGF0Y2hfaXNfZnVsbF9wYXRjaChzZWxmKToKLSAgICAgICAgdGVzdF9kaXJfcGF0aCA9IG9zLnBh
dGguam9pbihzZWxmLnN2bl9jaGVja291dF9wYXRoLCAndGVzdF9kaXInKQotICAgICAgICBvcy5t
a2Rpcih0ZXN0X2Rpcl9wYXRoKQotICAgICAgICB0ZXN0X2ZpbGVfcGF0aCA9IG9zLnBhdGguam9p
bih0ZXN0X2Rpcl9wYXRoLCAndGVzdF9maWxlMicpCi0gICAgICAgIHdyaXRlX2ludG9fZmlsZV9h
dF9wYXRoKHRlc3RfZmlsZV9wYXRoLCAndGVzdCBjb250ZW50JykKLSAgICAgICAgcnVuX2NvbW1h
bmQoWydzdm4nLCAnYWRkJywgJ3Rlc3RfZGlyJ10pCi0KLSAgICAgICAgIyBjcmVhdGVfcGF0Y2gg
ZGVwZW5kcyBvbiAnc3ZuLWNyZWF0ZS1wYXRjaCcsIHNvIG1ha2UgYSBkdW1teSB2ZXJzaW9uLgot
ICAgICAgICBzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5zdm5fY2hlY2tvdXRfcGF0
aCwgJ1dlYktpdFRvb2xzJywgJ1NjcmlwdHMnKQotICAgICAgICBvcy5tYWtlZGlycyhzY3JpcHRz
X3BhdGgpCi0gICAgICAgIGNyZWF0ZV9wYXRjaF9wYXRoID0gb3MucGF0aC5qb2luKHNjcmlwdHNf
cGF0aCwgJ3N2bi1jcmVhdGUtcGF0Y2gnKQotICAgICAgICB3cml0ZV9pbnRvX2ZpbGVfYXRfcGF0
aChjcmVhdGVfcGF0Y2hfcGF0aCwgJyMhL2Jpbi9zaFxuZWNobyAkUFdEJykgIyBXZSBjb3VsZCBw
YXNzIC1uIHRvIHByZXZlbnQgdGhlIFxuLCBidXQgbm90IGFsbCBlY2hvIGFjY2VwdCAtbi4KLSAg
ICAgICAgb3MuY2htb2QoY3JlYXRlX3BhdGNoX3BhdGgsIHN0YXQuU19JWFVTUiB8IHN0YXQuU19J
UlVTUikKLQotICAgICAgICAjIENoYW5nZSBpbnRvIG91ciB0ZXN0IGRpcmVjdG9yeSBhbmQgcnVu
IHRoZSBjcmVhdGVfcGF0Y2ggY29tbWFuZC4KLSAgICAgICAgb3MuY2hkaXIodGVzdF9kaXJfcGF0
aCkKLSAgICAgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0odGVzdF9kaXJfcGF0aCkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzY20uY2hlY2tvdXRfcm9vdCwgc2VsZi5zdm5fY2hlY2tvdXRf
cGF0aCkgIyBTYW5pdHkgY2hlY2sgdGhhdCBkZXRlY3Rpb24gd29ya2VkIHJpZ2h0LgotICAgICAg
ICBwYXRjaF9jb250ZW50cyA9IHNjbS5jcmVhdGVfcGF0Y2goKQotICAgICAgICAjIE91ciBmYWtl
ICdzdm4tY3JlYXRlLXBhdGNoJyByZXR1cm5zICRQV0QgaW5zdGVhZCBvZiBhIHBhdGNoLCBjaGVj
ayB0aGF0IGl0IHdhcyBleGVjdXRlZCBmcm9tIHRoZSByb290IG9mIHRoZSByZXBvLgotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCIlc1xuIiAlIG9zLnBhdGgucmVhbHBhdGgoc2NtLmNoZWNrb3V0
X3Jvb3QpLCBwYXRjaF9jb250ZW50cykgIyBBZGQgYSBcbiBiZWNhdXNlIGVjaG8gYWRkcyBhIFxu
LgotCi0gICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgotICAgICAgICBzY20gPSBkZXRlY3Rf
c2NtX3N5c3RlbShzZWxmLnN2bl9jaGVja291dF9wYXRoKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNjbS5kaXNwbGF5X25hbWUoKSwgInN2biIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2NtLnN1cHBvcnRzX2xvY2FsX2NvbW1pdHMoKSwgRmFsc2UpCi0KLSAgICBkZWYgdGVzdF9hcHBs
eV9zbWFsbF9iaW5hcnlfcGF0Y2goc2VsZik6Ci0gICAgICAgIHBhdGNoX2NvbnRlbnRzID0gIiIi
SW5kZXg6IHRlc3RfZmlsZS5zd2YKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNhbm5vdCBkaXNwbGF5OiBmaWxlIG1h
cmtlZCBhcyBhIGJpbmFyeSB0eXBlLgotc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQotCi1Qcm9wZXJ0eSBjaGFuZ2VzIG9uOiB0ZXN0X2ZpbGUuc3dmCi1fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ci1OYW1lOiBzdm46bWltZS10eXBlCi0gICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQotCi0K
LVExZFRCeDBBQUFCNDJpdGc0R2xnWUpqR3dNRER5T0RNeE1EdzM0R0JnUUVBSlBRREpBPT0KLSIi
IgotICAgICAgICBleHBlY3RlZF9jb250ZW50cyA9IGJhc2U2NC5iNjRkZWNvZGUoIlExZFRCeDBB
QUFCNDJpdGc0R2xnWUpqR3dNRER5T0RNeE1EdzM0R0JnUUVBSlBRREpBPT0iKQotICAgICAgICBz
ZWxmLl9zZXR1cF93ZWJraXR0b29sc19zY3JpcHRzX3N5bWxpbmsoc2VsZi5zY20pCi0gICAgICAg
IHBhdGNoX2ZpbGUgPSBzZWxmLl9jcmVhdGVfcGF0Y2gocGF0Y2hfY29udGVudHMpCi0gICAgICAg
IHNlbGYuc2NtLmFwcGx5X3BhdGNoKHBhdGNoX2ZpbGUpCi0gICAgICAgIGFjdHVhbF9jb250ZW50
cyA9IHJlYWRfZnJvbV9wYXRoKCJ0ZXN0X2ZpbGUuc3dmIikKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChhY3R1YWxfY29udGVudHMsIGV4cGVjdGVkX2NvbnRlbnRzKQotCi0gICAgZGVmIHRlc3Rf
YXBwbHlfc3ZuX3BhdGNoKHNlbGYpOgotICAgICAgICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShz
ZWxmLnN2bl9jaGVja291dF9wYXRoKQotICAgICAgICBwYXRjaCA9IHNlbGYuX2NyZWF0ZV9wYXRj
aChydW5fY29tbWFuZChbJ3N2bicsICdkaWZmJywgJy1yNDozJ10pKQotICAgICAgICBzZWxmLl9z
ZXR1cF93ZWJraXR0b29sc19zY3JpcHRzX3N5bWxpbmsoc2NtKQotICAgICAgICBzY20uYXBwbHlf
cGF0Y2gocGF0Y2gpCi0KLSAgICBkZWYgdGVzdF9hcHBseV9zdm5fcGF0Y2hfZm9yY2Uoc2VsZik6
Ci0gICAgICAgIHNjbSA9IGRldGVjdF9zY21fc3lzdGVtKHNlbGYuc3ZuX2NoZWNrb3V0X3BhdGgp
Ci0gICAgICAgIHBhdGNoID0gc2VsZi5fY3JlYXRlX3BhdGNoKHJ1bl9jb21tYW5kKFsnc3ZuJywg
J2RpZmYnLCAnLXIyOjQnXSkpCi0gICAgICAgIHNlbGYuX3NldHVwX3dlYmtpdHRvb2xzX3Njcmlw
dHNfc3ltbGluayhzY20pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNjcmlwdEVycm9yLCBz
Y20uYXBwbHlfcGF0Y2gsIHBhdGNoLCBmb3JjZT1UcnVlKQotCi0gICAgZGVmIHRlc3RfY29tbWl0
X2xvZ3Moc2VsZik6Ci0gICAgICAgICMgQ29tbWl0cyBoYXZlIGRhdGVzIGFuZCB1c2VybmFtZXMg
aW4gdGhlbSwgc28gd2UgY2FuJ3QganVzdCBkaXJlY3QgY29tcGFyZS4KLSAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHJlLnNlYXJjaCgnZm91cnRoIGNvbW1pdCcsIHNlbGYuc2NtLmxhc3Rfc3ZuX2Nv
bW1pdF9sb2coKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2goJ3NlY29uZCBj
b21taXQnLCBzZWxmLnNjbS5zdm5fY29tbWl0X2xvZygyKSkpCi0KLSAgICBkZWYgdGVzdF9jb21t
aXRfdGV4dF9wYXJzaW5nKHNlbGYpOgotICAgICAgICBzZWxmLl9zaGFyZWRfdGVzdF9jb21taXRf
d2l0aF9tZXNzYWdlKCkKLQotICAgIGRlZiB0ZXN0X3JldmVyc2VfZGlmZihzZWxmKToKLSAgICAg
ICAgc2VsZi5fc2hhcmVkX3Rlc3RfcmV2ZXJzZV9kaWZmKCkKLQotICAgIGRlZiB0ZXN0X2RpZmZf
Zm9yX3JldmlzaW9uKHNlbGYpOgotICAgICAgICBzZWxmLl9zaGFyZWRfdGVzdF9kaWZmX2Zvcl9y
ZXZpc2lvbigpCi0KLSAgICBkZWYgdGVzdF9zdm5fYXBwbHlfZ2l0X3BhdGNoKHNlbGYpOgotICAg
ICAgICBzZWxmLl9zaGFyZWRfdGVzdF9zdm5fYXBwbHlfZ2l0X3BhdGNoKCkKLQotY2xhc3MgR2l0
VGVzdChTQ01UZXN0KToKLQotICAgIGRlZiBfc2V0dXBfZ2l0X2Nsb25lX29mX3N2bl9yZXBvc2l0
b3J5KHNlbGYpOgotICAgICAgICBzZWxmLmdpdF9jaGVja291dF9wYXRoID0gdGVtcGZpbGUubWtk
dGVtcChzdWZmaXg9ImdpdF90ZXN0X2NoZWNrb3V0IikKLSAgICAgICAgIyAtLXF1aWV0IGRvZXNu
J3QgbWFrZSBnaXQgc3ZuIHNpbGVudCwgc28gd2UgdXNlIHJ1bl9zaWxlbnQgdG8gcmVkaXJlY3Qg
b3V0cHV0Ci0gICAgICAgIHJ1bl9zaWxlbnQoWydnaXQnLCAnc3ZuJywgJy0tcXVpZXQnLCAnY2xv
bmUnLCBzZWxmLnN2bl9yZXBvX3VybCwgc2VsZi5naXRfY2hlY2tvdXRfcGF0aF0pCi0KLSAgICBk
ZWYgX3RlYXJfZG93bl9naXRfY2xvbmVfb2Zfc3ZuX3JlcG9zaXRvcnkoc2VsZik6Ci0gICAgICAg
IHJ1bl9jb21tYW5kKFsncm0nLCAnLXJmJywgc2VsZi5naXRfY2hlY2tvdXRfcGF0aF0pCi0KLSAg
ICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIFNWTlRlc3RSZXBvc2l0b3J5LnNldHVwKHNlbGYp
Ci0gICAgICAgIHNlbGYuX3NldHVwX2dpdF9jbG9uZV9vZl9zdm5fcmVwb3NpdG9yeSgpCi0gICAg
ICAgIG9zLmNoZGlyKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpCi0gICAgICAgIHNlbGYuc2NtID0g
ZGV0ZWN0X3NjbV9zeXN0ZW0oc2VsZi5naXRfY2hlY2tvdXRfcGF0aCkKLQotICAgIGRlZiB0ZWFy
RG93bihzZWxmKToKLSAgICAgICAgU1ZOVGVzdFJlcG9zaXRvcnkudGVhcl9kb3duKHNlbGYpCi0g
ICAgICAgIHNlbGYuX3RlYXJfZG93bl9naXRfY2xvbmVfb2Zfc3ZuX3JlcG9zaXRvcnkoKQotCi0g
ICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgotICAgICAgICBzY20gPSBkZXRlY3Rfc2NtX3N5
c3RlbShzZWxmLmdpdF9jaGVja291dF9wYXRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNj
bS5kaXNwbGF5X25hbWUoKSwgImdpdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2NtLnN1
cHBvcnRzX2xvY2FsX2NvbW1pdHMoKSwgVHJ1ZSkKLQotICAgIGRlZiB0ZXN0X3JlYmFzZV9pbl9w
cm9ncmVzcyhzZWxmKToKLSAgICAgICAgc3ZuX3Rlc3RfZmlsZSA9IG9zLnBhdGguam9pbihzZWxm
LnN2bl9jaGVja291dF9wYXRoLCAndGVzdF9maWxlJykKLSAgICAgICAgd3JpdGVfaW50b19maWxl
X2F0X3BhdGgoc3ZuX3Rlc3RfZmlsZSwgInN2bl9jaGVja291dCIpCi0gICAgICAgIHJ1bl9jb21t
YW5kKFsnc3ZuJywgJ2NvbW1pdCcsICctLW1lc3NhZ2UnLCAnY29tbWl0IHRvIGNvbmZsaWN0IHdp
dGggZ2l0IGNvbW1pdCddLCBjd2Q9c2VsZi5zdm5fY2hlY2tvdXRfcGF0aCkKLQotICAgICAgICBn
aXRfdGVzdF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgsICd0ZXN0
X2ZpbGUnKQotICAgICAgICB3cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aChnaXRfdGVzdF9maWxlLCAi
Z2l0X2NoZWNrb3V0IikKLSAgICAgICAgcnVuX2NvbW1hbmQoWydnaXQnLCAnY29tbWl0JywgJy1h
JywgJy1tJywgJ2NvbW1pdCB0byBiZSB0aHJvd24gYXdheSBieSByZWJhc2UgYWJvcnQnXSkKLQot
ICAgICAgICAjIC0tcXVpZXQgZG9lc24ndCBtYWtlIGdpdCBzdm4gc2lsZW50LCBzbyB1c2UgcnVu
X3NpbGVudCB0byByZWRpcmVjdCBvdXRwdXQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2Ny
aXB0RXJyb3IsIHJ1bl9zaWxlbnQsIFsnZ2l0JywgJ3N2bicsICctLXF1aWV0JywgJ3JlYmFzZSdd
KSAjIFdpbGwgZmFpbCBkdWUgdG8gYSBjb25mbGljdCBsZWF2aW5nIHVzIG1pZC1yZWJhc2UuCi0K
LSAgICAgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0oc2VsZi5naXRfY2hlY2tvdXRfcGF0aCkK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNjbS5yZWJhc2VfaW5fcHJvZ3Jlc3MoKSkKLQotICAg
ICAgICAjIE1ha2Ugc3VyZSBvdXIgY2xlYW51cCB3b3Jrcy4KLSAgICAgICAgc2NtLmNsZWFuX3dv
cmtpbmdfZGlyZWN0b3J5KCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzY20ucmViYXNlX2lu
X3Byb2dyZXNzKCkpCi0KLSAgICAgICAgIyBNYWtlIHN1cmUgY2xlYW51cCBkb2Vzbid0IHRocm93
IHdoZW4gbm8gcmViYXNlIGlzIGluIHByb2dyZXNzLgotICAgICAgICBzY20uY2xlYW5fd29ya2lu
Z19kaXJlY3RvcnkoKQotCi0gICAgZGVmIHRlc3RfY29tbWl0aXNoX3BhcnNpbmcoc2VsZik6Ci0g
ICAgICAgIHNjbSA9IGRldGVjdF9zY21fc3lzdGVtKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpCi0g
ICAgCi0gICAgICAgICMgTXVsdGlwbGUgcmV2aXNpb25zIGFyZSBjaGVycnktcGlja2VkLgotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzY20uY29tbWl0X2lkc19mcm9tX2NvbW1pdGlzaF9h
cmd1bWVudHMoWydIRUFEfjInXSkpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihz
Y20uY29tbWl0X2lkc19mcm9tX2NvbW1pdGlzaF9hcmd1bWVudHMoWydIRUFEJywgJ0hFQUR+Midd
KSksIDIpCi0gICAgCi0gICAgICAgICMgLi4uIGlzIGFuIGludmFsaWQgcmFuZ2Ugc3BlY2lmaWVy
Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNjcmlwdEVycm9yLCBzY20uY29tbWl0X2lkc19m
cm9tX2NvbW1pdGlzaF9hcmd1bWVudHMsIFsndHJ1bmsuLi5IRUFEJ10pCi0KLSAgICBkZWYgdGVz
dF9jb21taXRpc2hfb3JkZXIoc2VsZik6Ci0gICAgICAgIHNjbSA9IGRldGVjdF9zY21fc3lzdGVt
KHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpCi0KLSAgICAgICAgY29tbWl0X3JhbmdlID0gJ0hFQUR+
My4uSEVBRCcKLQotICAgICAgICBhY3R1YWxfY29tbWl0cyA9IHNjbS5jb21taXRfaWRzX2Zyb21f
Y29tbWl0aXNoX2FyZ3VtZW50cyhbY29tbWl0X3JhbmdlXSkKLSAgICAgICAgZXhwZWN0ZWRfY29t
bWl0cyA9IFtdCi0gICAgICAgIGV4cGVjdGVkX2NvbW1pdHMgKz0gcmV2ZXJzZWQocnVuX2NvbW1h
bmQoWydnaXQnLCAncmV2LWxpc3QnLCBjb21taXRfcmFuZ2VdKS5zcGxpdGxpbmVzKCkpCi0KLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfY29tbWl0cywgZXhwZWN0ZWRfY29tbWl0cykK
LQotICAgIGRlZiB0ZXN0X2FwcGx5X2dpdF9wYXRjaChzZWxmKToKLSAgICAgICAgc2NtID0gZGV0
ZWN0X3NjbV9zeXN0ZW0oc2VsZi5naXRfY2hlY2tvdXRfcGF0aCkKLSAgICAgICAgcGF0Y2ggPSBz
ZWxmLl9jcmVhdGVfcGF0Y2gocnVuX2NvbW1hbmQoWydnaXQnLCAnZGlmZicsICdIRUFELi5IRUFE
XiddKSkKLSAgICAgICAgc2VsZi5fc2V0dXBfd2Via2l0dG9vbHNfc2NyaXB0c19zeW1saW5rKHNj
bSkKLSAgICAgICAgc2NtLmFwcGx5X3BhdGNoKHBhdGNoKQotCi0gICAgZGVmIHRlc3RfYXBwbHlf
Z2l0X3BhdGNoX2ZvcmNlKHNlbGYpOgotICAgICAgICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShz
ZWxmLmdpdF9jaGVja291dF9wYXRoKQotICAgICAgICBwYXRjaCA9IHNlbGYuX2NyZWF0ZV9wYXRj
aChydW5fY29tbWFuZChbJ2dpdCcsICdkaWZmJywgJ0hFQUR+Mi4uSEVBRCddKSkKLSAgICAgICAg
c2VsZi5fc2V0dXBfd2Via2l0dG9vbHNfc2NyaXB0c19zeW1saW5rKHNjbSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoU2NyaXB0RXJyb3IsIHNjbS5hcHBseV9wYXRjaCwgcGF0Y2gsIGZvcmNl
PVRydWUpCi0KLSAgICBkZWYgdGVzdF9jb21taXRfdGV4dF9wYXJzaW5nKHNlbGYpOgotICAgICAg
ICBzZWxmLl9zaGFyZWRfdGVzdF9jb21taXRfd2l0aF9tZXNzYWdlKCkKLQotICAgIGRlZiB0ZXN0
X3JldmVyc2VfZGlmZihzZWxmKToKLSAgICAgICAgc2VsZi5fc2hhcmVkX3Rlc3RfcmV2ZXJzZV9k
aWZmKCkKLQotICAgIGRlZiB0ZXN0X2RpZmZfZm9yX3JldmlzaW9uKHNlbGYpOgotICAgICAgICBz
ZWxmLl9zaGFyZWRfdGVzdF9kaWZmX2Zvcl9yZXZpc2lvbigpCi0KLSAgICBkZWYgdGVzdF9zdm5f
YXBwbHlfZ2l0X3BhdGNoKHNlbGYpOgotICAgICAgICBzZWxmLl9zaGFyZWRfdGVzdF9zdm5fYXBw
bHlfZ2l0X3BhdGNoKCkKLQotICAgIGRlZiB0ZXN0X2NyZWF0ZV9iaW5hcnlfcGF0Y2goc2VsZik6
Ci0gICAgICAgICMgQ3JlYXRlIGEgZ2l0IGJpbmFyeSBwYXRjaCBhbmQgY2hlY2sgdGhlIGNvbnRl
bnRzLgotICAgICAgICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShzZWxmLmdpdF9jaGVja291dF9w
YXRoKQotICAgICAgICB0ZXN0X2ZpbGVfbmFtZSA9ICdiaW5hcnlfZmlsZScKLSAgICAgICAgdGVz
dF9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5naXRfY2hlY2tvdXRfcGF0aCwgdGVzdF9m
aWxlX25hbWUpCi0gICAgICAgIGZpbGVfY29udGVudHMgPSAnJy5qb2luKG1hcChjaHIsIHJhbmdl
KDI1NikpKQotICAgICAgICB3cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aCh0ZXN0X2ZpbGVfcGF0aCwg
ZmlsZV9jb250ZW50cykKLSAgICAgICAgcnVuX2NvbW1hbmQoWydnaXQnLCAnYWRkJywgdGVzdF9m
aWxlX25hbWVdKQotICAgICAgICBwYXRjaCA9IHNjbS5jcmVhdGVfcGF0Y2goKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHInXG5saXRlcmFsIDBcbicsIHBhdGNoKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyJ1xubGl0ZXJhbCAyNTZcbicsIHBhdGNoKSkK
LQotICAgICAgICAjIENoZWNrIGlmIHdlIGNhbiBhcHBseSB0aGUgY3JlYXRlZCBwYXRjaC4KLSAg
ICAgICAgcnVuX2NvbW1hbmQoWydnaXQnLCAncm0nLCAnLWYnLCB0ZXN0X2ZpbGVfbmFtZV0pCi0g
ICAgICAgIHNlbGYuX3NldHVwX3dlYmtpdHRvb2xzX3NjcmlwdHNfc3ltbGluayhzY20pCi0gICAg
ICAgIHNlbGYuc2NtLmFwcGx5X3BhdGNoKHNlbGYuX2NyZWF0ZV9wYXRjaChwYXRjaCkpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9jb250ZW50cywgcmVhZF9mcm9tX3BhdGgodGVzdF9m
aWxlX3BhdGgpKQotCi0gICAgICAgICMgQ2hlY2sgaWYgd2UgY2FuIGNyZWF0ZSBhIHBhdGNoIGZy
b20gYSBsb2NhbCBjb21taXQuCi0gICAgICAgIHdyaXRlX2ludG9fZmlsZV9hdF9wYXRoKHRlc3Rf
ZmlsZV9wYXRoLCBmaWxlX2NvbnRlbnRzKQotICAgICAgICBydW5fY29tbWFuZChbJ2dpdCcsICdh
ZGQnLCB0ZXN0X2ZpbGVfbmFtZV0pCi0gICAgICAgIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ2NvbW1p
dCcsICctbScsICdiaW5hcnkgZGlmZiddKQotICAgICAgICBwYXRjaF9mcm9tX2xvY2FsX2NvbW1p
dCA9IHNjbS5jcmVhdGVfcGF0Y2hfZnJvbV9sb2NhbF9jb21taXQoJ0hFQUQnKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHInXG5saXRlcmFsIDBcbicsIHBhdGNoX2Zyb21fbG9j
YWxfY29tbWl0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyJ1xubGl0ZXJh
bCAyNTZcbicsIHBhdGNoX2Zyb21fbG9jYWxfY29tbWl0KSkKLSAgICAgICAgcGF0Y2hfc2luY2Vf
bG9jYWxfY29tbWl0ID0gc2NtLmNyZWF0ZV9wYXRjaF9zaW5jZV9sb2NhbF9jb21taXQoJ0hFQURe
MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gocidcbmxpdGVyYWwgMFxuJywg
cGF0Y2hfc2luY2VfbG9jYWxfY29tbWl0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNl
YXJjaChyJ1xubGl0ZXJhbCAyNTZcbicsIHBhdGNoX3NpbmNlX2xvY2FsX2NvbW1pdCkpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Y2hfZnJvbV9sb2NhbF9jb21taXQsIHBhdGNoX3NpbmNl
X2xvY2FsX2NvbW1pdCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0
ZXN0Lm1haW4oKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3N0YXR1c2JvdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvc3RhdHVzYm90LnB5
CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zdGF0dXNi
b3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0jCi0jIFdlYktpdCdzIFB5dGhvbiBtb2R1bGUgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIENv
bW1pdCBRdWV1ZSBzdGF0dXMgcGFnZS4KLQotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGlt
cG9ydCBsb2cKLWZyb20gbW9kdWxlcy53ZWJraXRfbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCi0K
LSMgV2ViS2l0IGluY2x1ZGVzIGEgYnVpbHQgY29weSBvZiBCZWF1dGlmdWxTb3VwIGluIFNjcmlw
dHMvbW9kdWxlcwotIyBzbyB0aGlzIGltcG9ydCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCi1mcm9t
IC5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCi0KLWltcG9ydCB1cmxsaWIyCi0K
LQotY2xhc3MgU3RhdHVzQm90OgotICAgIGRlZmF1bHRfaG9zdCA9ICJ3ZWJraXQtY29tbWl0LXF1
ZXVlLmFwcHNwb3QuY29tIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9ZGVmYXVsdF9o
b3N0KToKLSAgICAgICAgc2VsZi5zZXRfaG9zdChob3N0KQotICAgICAgICBzZWxmLmJyb3dzZXIg
PSBCcm93c2VyKCkKLQotICAgIGRlZiBzZXRfaG9zdChzZWxmLCBob3N0KToKLSAgICAgICAgc2Vs
Zi5zdGF0dXNib3RfaG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5zdGF0dXNib3Rfc2VydmVyX3Vy
bCA9ICJodHRwOi8vJXMiICUgc2VsZi5zdGF0dXNib3RfaG9zdAotCi0gICAgZGVmIHJlc3VsdHNf
dXJsX2Zvcl9zdGF0dXMoc2VsZiwgc3RhdHVzX2lkKToKLSAgICAgICAgcmV0dXJuICIlcy9yZXN1
bHRzLyVzIiAlIChzZWxmLnN0YXR1c2JvdF9zZXJ2ZXJfdXJsLCBzdGF0dXNfaWQpCi0KLSAgICBk
ZWYgdXBkYXRlX3N0YXR1cyhzZWxmLCBxdWV1ZV9uYW1lLCBzdGF0dXMsIHBhdGNoPU5vbmUsIHJl
c3VsdHNfZmlsZT1Ob25lKToKLSAgICAgICAgIyBEdXJpbmcgdW5pdCB0ZXN0aW5nLCBzdGF0dXNi
b3RfaG9zdCBpcyBOb25lCi0gICAgICAgIGlmIG5vdCBzZWxmLnN0YXR1c2JvdF9ob3N0OgotICAg
ICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgbG9nKHN0YXR1cykKLSAgICAgICAgdXBkYXRlX3N0
YXR1c191cmwgPSAiJXMvdXBkYXRlLXN0YXR1cyIgJSBzZWxmLnN0YXR1c2JvdF9zZXJ2ZXJfdXJs
Ci0gICAgICAgIHNlbGYuYnJvd3Nlci5vcGVuKHVwZGF0ZV9zdGF0dXNfdXJsKQotICAgICAgICBz
ZWxmLmJyb3dzZXIuc2VsZWN0X2Zvcm0obmFtZT0idXBkYXRlX3N0YXR1cyIpCi0gICAgICAgIHNl
bGYuYnJvd3NlclsncXVldWVfbmFtZSddID0gcXVldWVfbmFtZQotICAgICAgICBpZiBwYXRjaDoK
LSAgICAgICAgICAgIGlmIHBhdGNoLmdldCgnYnVnX2lkJyk6Ci0gICAgICAgICAgICAgICAgc2Vs
Zi5icm93c2VyWydidWdfaWQnXSA9IHN0cihwYXRjaFsnYnVnX2lkJ10pCi0gICAgICAgICAgICBp
ZiBwYXRjaC5nZXQoJ2lkJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5icm93c2VyWydwYXRjaF9p
ZCddID0gc3RyKHBhdGNoWydpZCddKQotICAgICAgICBzZWxmLmJyb3dzZXJbJ3N0YXR1cyddID0g
c3RhdHVzCi0gICAgICAgIGlmIHJlc3VsdHNfZmlsZToKLSAgICAgICAgICAgIHNlbGYuYnJvd3Nl
ci5hZGRfZmlsZShyZXN1bHRzX2ZpbGUsICJ0ZXh0L3BsYWluIiwgInJlc3VsdHMudHh0IiwgJ3Jl
c3VsdHNfZmlsZScpCi0gICAgICAgIHJlc3BvbnNlID0gc2VsZi5icm93c2VyLnN1Ym1pdCgpCi0g
ICAgICAgIHJldHVybiByZXNwb25zZS5yZWFkKCkgIyBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgbmV3
bHkgY3JlYXRlZCBzdGF0dXMgb2JqZWN0LgotCi0gICAgZGVmIHBhdGNoX3N0YXR1cyhzZWxmLCBx
dWV1ZV9uYW1lLCBwYXRjaF9pZCk6Ci0gICAgICAgIHVwZGF0ZV9zdGF0dXNfdXJsID0gIiVzL3Bh
dGNoLXN0YXR1cy8lcy8lcyIgJSAoc2VsZi5zdGF0dXNib3Rfc2VydmVyX3VybCwgcXVldWVfbmFt
ZSwgcGF0Y2hfaWQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiB1cmxsaWIyLnVy
bG9wZW4odXBkYXRlX3N0YXR1c191cmwpLnJlYWQoKQotICAgICAgICBleGNlcHQgdXJsbGliMi5I
VFRQRXJyb3IsIGU6Ci0gICAgICAgICAgICBpZiBlLmNvZGUgPT0gNDA0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByYWlzZSBlCkluZGV4OiBXZWJLaXRUb29scy9T
Y3JpcHRzL21vZHVsZXMvc3RlcHNlcXVlbmNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy9zdGVwc2VxdWVuY2UucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3N0ZXBzZXF1ZW5jZS5weQkod29ya2luZyBjb3B5KQpA
QCAtMSw3NiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyAKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotZnJvbSBtb2R1bGVzLmJ1aWxk
c3RlcHMgaW1wb3J0IENvbW1hbmRPcHRpb25zCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9y
dCBTY3JpcHRFcnJvcgotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGltcG9ydCBsb2cKLWZy
b20gbW9kdWxlcy5zY20gaW1wb3J0IENoZWNrb3V0TmVlZHNVcGRhdGUKLWZyb20gbW9kdWxlcy5x
dWV1ZWVuZ2luZSBpbXBvcnQgUXVldWVFbmdpbmUKLQotCi1jbGFzcyBTdGVwU2VxdWVuY2VFcnJv
ckhhbmRsZXIoKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgaGFuZGxlX3NjcmlwdF9lcnJv
cihjbHMsIHRvb2wsIHBhdGNoLCBzY3JpcHRfZXJyb3IpOgotICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotCi1jbGFzcyBTdGVw
U2VxdWVuY2Uob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RlcHMpOgotICAgICAg
ICBzZWxmLl9zdGVwcyA9IHN0ZXBzIG9yIFtdCi0KLSAgICBkZWYgb3B0aW9ucyhzZWxmKToKLSAg
ICAgICAgY29sbGVjdGVkX29wdGlvbnMgPSBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5w
YXJlbnRfY29tbWFuZCwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLnF1aWV0LAotICAgICAg
ICBdCi0gICAgICAgIGZvciBzdGVwIGluIHNlbGYuX3N0ZXBzOgotICAgICAgICAgICAgY29sbGVj
dGVkX29wdGlvbnMgPSBjb2xsZWN0ZWRfb3B0aW9ucyArIHN0ZXAub3B0aW9ucygpCi0gICAgICAg
ICMgUmVtb3ZlIGR1cGxpY2F0ZXMuCi0gICAgICAgIGNvbGxlY3RlZF9vcHRpb25zID0gc29ydGVk
KHNldChjb2xsZWN0ZWRfb3B0aW9ucykpCi0gICAgICAgIHJldHVybiBjb2xsZWN0ZWRfb3B0aW9u
cwotCi0gICAgZGVmIF9ydW4oc2VsZiwgdG9vbCwgb3B0aW9ucywgc3RhdGUpOgotICAgICAgICBm
b3Igc3RlcCBpbiBzZWxmLl9zdGVwczoKLSAgICAgICAgICAgIHN0ZXAodG9vbCwgb3B0aW9ucyku
cnVuKHN0YXRlKQotCi0gICAgZGVmIHJ1bl9hbmRfaGFuZGxlX2Vycm9ycyhzZWxmLCB0b29sLCBv
cHRpb25zLCBzdGF0ZT1Ob25lKToKLSAgICAgICAgaWYgbm90IHN0YXRlOgotICAgICAgICAgICAg
c3RhdGUgPSB7fQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9ydW4odG9vbCwgb3B0
aW9ucywgc3RhdGUpCi0gICAgICAgIGV4Y2VwdCBDaGVja291dE5lZWRzVXBkYXRlLCBlOgotICAg
ICAgICAgICAgbG9nKCJDb21taXQgZmFpbGVkIGJlY2F1c2UgdGhlIGNoZWNrb3V0IGlzIG91dCBv
ZiBkYXRlLiAgUGxlYXNlIHVwZGF0ZSBhbmQgdHJ5IGFnYWluLiIpCi0gICAgICAgICAgICBsb2co
IllvdSBjYW4gcGFzcyAtLW5vLWJ1aWxkIHRvIHNraXAgYnVpbGRpbmcvdGVzdGluZyBhZnRlciB1
cGRhdGUgaWYgeW91IGJlbGlldmUgdGhlIG5ldyBjb21taXRzIGRpZCBub3QgYWZmZWN0IHRoZSBy
ZXN1bHRzLiIpCi0gICAgICAgICAgICBRdWV1ZUVuZ2luZS5leGl0X2FmdGVyX2hhbmRsZWRfZXJy
b3IoZSkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAgICAgaWYgbm90
IG9wdGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZV93aXRoX291dHB1
dCgpKQotICAgICAgICAgICAgaWYgb3B0aW9ucy5wYXJlbnRfY29tbWFuZDoKLSAgICAgICAgICAg
ICAgICBjb21tYW5kID0gdG9vbC5jb21tYW5kX2J5X25hbWUob3B0aW9ucy5wYXJlbnRfY29tbWFu
ZCkKLSAgICAgICAgICAgICAgICBjb21tYW5kLmhhbmRsZV9zY3JpcHRfZXJyb3IodG9vbCwgc3Rh
dGUsIGUpCi0gICAgICAgICAgICBRdWV1ZUVuZ2luZS5leGl0X2FmdGVyX2hhbmRsZWRfZXJyb3Io
ZSkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zdHlsZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvc3R5bGUucHkJKHJldmlzaW9uIDUyNzAy
KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3N0eWxlLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDM1NyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiRnJvbnQgZW5kIG9mIHNv
bWUgc3R5bGUtY2hlY2tlciBtb2R1bGVzLiIiIgotCi0jIEZJWE1FOiBNb3ZlIG1vcmUgY29kZSBm
cm9tIGNwcF9zdHlsZSB0byBoZXJlLgotIyBjaGVjay13ZWJraXQtc3R5bGUgc2hvdWxkIG5vdCBy
ZWZlciBjcHBfc3R5bGUgZGlyZWN0bHkuCi0KLWltcG9ydCBnZXRvcHQKLWltcG9ydCBvcy5wYXRo
Ci1pbXBvcnQgc3lzCi0KLWltcG9ydCBjcHBfc3R5bGUKLWltcG9ydCB0ZXh0X3N0eWxlCi1mcm9t
IGRpZmZfcGFyc2VyIGltcG9ydCBEaWZmUGFyc2VyCi0KLQotIyBEZWZhdWx0IG9wdGlvbnMKLV9E
RUZBVUxUX1ZFUkJPU0lUWSA9IDEKLV9ERUZBVUxUX09VVFBVVF9GT1JNQVQgPSAnZW1hY3MnCi0K
LQotIyBGSVhNRTogRm9yIHN0eWxlIGNhdGVnb3JpZXMgd2Ugd2lsbCBuZXZlciB3YW50IHRvIGhh
dmUsIHJlbW92ZSB0aGVtLgotIyAgICAgICAgRm9yIGNhdGVnb3JpZXMgZm9yIHdoaWNoIHdlIHdh
bnQgdG8gaGF2ZSBzaW1pbGFyIGZ1bmN0aW9uYWxpdHksCi0jICAgICAgICBtb2RpZnkgdGhlIGlt
cGxlbWVudGF0aW9uIGFuZCBlbmFibGUgdGhlbS4KLSMgRklYTUU6IEFkZCBhIHVuaXQgdGVzdCB0
byBlbnN1cmUgdGhlIGNvcnJlc3BvbmRpbmcgY2F0ZWdvcmllcwotIyAgICAgICAgYXJlIGVsZW1l
bnRzIG9mIF9TVFlMRV9DQVRFR09SSUVTLgotIwotIyBGb3IgdW5hbWJpZ3VvdXMgdGVybWlub2xv
Z3ksIHdlIHVzZSAiZmlsdGVyIHJ1bGUiIHJhdGhlciB0aGFuICJmaWx0ZXIiCi0jIGZvciBhbiBp
bmRpdmlkdWFsIGJvb2xlYW4gZmlsdGVyIGZsYWcgbGlrZSAiK2ZvbyIuIFRoaXMgYWxsb3dzIHVz
IHRvIAotIyByZXNlcnZlICJmaWx0ZXIiIGZvciB3aGF0IG9uZSBnZXRzIGJ5IGNvbGxlY3RpdmVs
eSBhcHBseWluZyBhbGwgb2YgCi0jIHRoZSBmaWx0ZXIgcnVsZXMgYXMgc3BlY2lmaWVkIGJ5IGEg
LS1maWx0ZXIgZmxhZy4KLV9XRUJLSVRfRklMVEVSX1JVTEVTID0gWwotICAgICctYnVpbGQvZW5k
aWZfY29tbWVudCcsCi0gICAgJy1idWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZScsICAjIDxzdHJp
bmc+IGZvciBzdGQ6OnN0cmluZwotICAgICctYnVpbGQvc3RvcmFnZV9jbGFzcycsICAjIGNvbnN0
IHN0YXRpYwotICAgICctbGVnYWwvY29weXJpZ2h0JywKLSAgICAnLXJlYWRhYmlsaXR5L211bHRp
bGluZV9jb21tZW50JywKLSAgICAnLXJlYWRhYmlsaXR5L2JyYWNlcycsICAjIGludCBmb28oKSB7
fTsKLSAgICAnLXJlYWRhYmlsaXR5L2ZuX3NpemUnLAotICAgICctcmVhZGFiaWxpdHkvY2FzdGlu
ZycsCi0gICAgJy1yZWFkYWJpbGl0eS9mdW5jdGlvbicsCi0gICAgJy1ydW50aW1lL2FycmF5cycs
ICAjIHZhcmlhYmxlIGxlbmd0aCBhcnJheQotICAgICctcnVudGltZS9jYXN0aW5nJywKLSAgICAn
LXJ1bnRpbWUvc2l6ZW9mJywKLSAgICAnLXJ1bnRpbWUvZXhwbGljaXQnLCAgIyBleHBsaWNpdAot
ICAgICctcnVudGltZS92aXJ0dWFsJywgICMgdmlydHVhbCBkdG9yCi0gICAgJy1ydW50aW1lL3By
aW50ZicsCi0gICAgJy1ydW50aW1lL3RocmVhZHNhZmVfZm4nLAotICAgICctcnVudGltZS9ydHRp
JywKLSAgICAnLXdoaXRlc3BhY2UvYmxhbmtfbGluZScsCi0gICAgJy13aGl0ZXNwYWNlL2VuZF9v
Zl9saW5lJywKLSAgICAnLXdoaXRlc3BhY2UvbGFiZWxzJywKLSAgICBdCi0KLQotIyBXZSBjYXRl
Z29yaXplIGVhY2ggc3R5bGUgcnVsZSB3ZSBwcmludC4gIEhlcmUgYXJlIHRoZSBjYXRlZ29yaWVz
LgotIyBXZSB3YW50IGFuIGV4cGxpY2l0IGxpc3Qgc28gd2UgY2FuIGxpc3QgdGhlbSBhbGwgaW4g
Y3BwX3N0eWxlIC0tZmlsdGVyPS4KLSMgSWYgeW91IGFkZCBhIG5ldyBlcnJvciBtZXNzYWdlIHdp
dGggYSBuZXcgY2F0ZWdvcnksIGFkZCBpdCB0byB0aGUgbGlzdAotIyBoZXJlISAgY3BwX3N0eWxl
X3VuaXR0ZXN0LnB5IHNob3VsZCB0ZWxsIHlvdSBpZiB5b3UgZm9yZ2V0IHRvIGRvIHRoaXMuCi1f
U1RZTEVfQ0FURUdPUklFUyA9IFsKLSAgICAnYnVpbGQvY2xhc3MnLAotICAgICdidWlsZC9kZXBy
ZWNhdGVkJywKLSAgICAnYnVpbGQvZW5kaWZfY29tbWVudCcsCi0gICAgJ2J1aWxkL2ZvcndhcmRf
ZGVjbCcsCi0gICAgJ2J1aWxkL2hlYWRlcl9ndWFyZCcsCi0gICAgJ2J1aWxkL2luY2x1ZGUnLAot
ICAgICdidWlsZC9pbmNsdWRlX29yZGVyJywKLSAgICAnYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91
c2UnLAotICAgICdidWlsZC9uYW1lc3BhY2VzJywKLSAgICAnYnVpbGQvcHJpbnRmX2Zvcm1hdCcs
Ci0gICAgJ2J1aWxkL3N0b3JhZ2VfY2xhc3MnLAotICAgICdidWlsZC91c2luZ19zdGQnLAotICAg
ICdsZWdhbC9jb3B5cmlnaHQnLAotICAgICdyZWFkYWJpbGl0eS9icmFjZXMnLAotICAgICdyZWFk
YWJpbGl0eS9jYXN0aW5nJywKLSAgICAncmVhZGFiaWxpdHkvY2hlY2snLAotICAgICdyZWFkYWJp
bGl0eS9jb21wYXJpc29uX3RvX3plcm8nLAotICAgICdyZWFkYWJpbGl0eS9jb25zdHJ1Y3RvcnMn
LAotICAgICdyZWFkYWJpbGl0eS9jb250cm9sX2Zsb3cnLAotICAgICdyZWFkYWJpbGl0eS9mbl9z
aXplJywKLSAgICAncmVhZGFiaWxpdHkvZnVuY3Rpb24nLAotICAgICdyZWFkYWJpbGl0eS9tdWx0
aWxpbmVfY29tbWVudCcsCi0gICAgJ3JlYWRhYmlsaXR5L211bHRpbGluZV9zdHJpbmcnLAotICAg
ICdyZWFkYWJpbGl0eS9uYW1pbmcnLAotICAgICdyZWFkYWJpbGl0eS9udWxsJywKLSAgICAncmVh
ZGFiaWxpdHkvc3RyZWFtcycsCi0gICAgJ3JlYWRhYmlsaXR5L3RvZG8nLAotICAgICdyZWFkYWJp
bGl0eS91dGY4JywKLSAgICAncnVudGltZS9hcnJheXMnLAotICAgICdydW50aW1lL2Nhc3Rpbmcn
LAotICAgICdydW50aW1lL2V4cGxpY2l0JywKLSAgICAncnVudGltZS9pbml0JywKLSAgICAncnVu
dGltZS9pbnQnLAotICAgICdydW50aW1lL2ludmFsaWRfaW5jcmVtZW50JywKLSAgICAncnVudGlt
ZS9tYXhfbWluX21hY3JvcycsCi0gICAgJ3J1bnRpbWUvbWVtc2V0JywKLSAgICAncnVudGltZS9w
cmludGYnLAotICAgICdydW50aW1lL3ByaW50Zl9mb3JtYXQnLAotICAgICdydW50aW1lL3JlZmVy
ZW5jZXMnLAotICAgICdydW50aW1lL3J0dGknLAotICAgICdydW50aW1lL3NpemVvZicsCi0gICAg
J3J1bnRpbWUvc3RyaW5nJywKLSAgICAncnVudGltZS90aHJlYWRzYWZlX2ZuJywKLSAgICAncnVu
dGltZS92aXJ0dWFsJywKLSAgICAnd2hpdGVzcGFjZS9ibGFua19saW5lJywKLSAgICAnd2hpdGVz
cGFjZS9icmFjZXMnLAotICAgICd3aGl0ZXNwYWNlL2NvbW1hJywKLSAgICAnd2hpdGVzcGFjZS9j
b21tZW50cycsCi0gICAgJ3doaXRlc3BhY2UvZGVjbGFyYXRpb24nLAotICAgICd3aGl0ZXNwYWNl
L2VuZF9vZl9saW5lJywKLSAgICAnd2hpdGVzcGFjZS9lbmRpbmdfbmV3bGluZScsCi0gICAgJ3do
aXRlc3BhY2UvaW5kZW50JywKLSAgICAnd2hpdGVzcGFjZS9sYWJlbHMnLAotICAgICd3aGl0ZXNw
YWNlL2xpbmVfbGVuZ3RoJywKLSAgICAnd2hpdGVzcGFjZS9uZXdsaW5lJywKLSAgICAnd2hpdGVz
cGFjZS9vcGVyYXRvcnMnLAotICAgICd3aGl0ZXNwYWNlL3BhcmVucycsCi0gICAgJ3doaXRlc3Bh
Y2Uvc2VtaWNvbG9uJywKLSAgICAnd2hpdGVzcGFjZS90YWInLAotICAgICd3aGl0ZXNwYWNlL3Rv
ZG8nLAotICAgIF0KLQotCi1fVVNBR0UgPSAiIiIKLVN5bnRheDogJShwcm9ncmFtX25hbWUpcyBb
LS12ZXJib3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNvbW1pdD5dIFstLW91dHB1dD12czdd
Ci0gICAgICAgIFstLWZpbHRlcj0teCwreSwuLi5dIFtmaWxlXSAuLi4KLQotICBUaGUgc3R5bGUg
Z3VpZGVsaW5lcyB0aGlzIHRyaWVzIHRvIGZvbGxvdyBhcmUgaGVyZToKLSAgICBodHRwOi8vd2Vi
a2l0Lm9yZy9jb2RpbmcvY29kaW5nLXN0eWxlLmh0bWwKLQotICBFdmVyeSBzdHlsZSBlcnJvciBp
cyBnaXZlbiBhIGNvbmZpZGVuY2Ugc2NvcmUgZnJvbSAxLTUsIHdpdGggNSBtZWFuaW5nCi0gIHdl
IGFyZSBjZXJ0YWluIG9mIHRoZSBwcm9ibGVtLCBhbmQgMSBtZWFuaW5nIGl0IGNvdWxkIGJlIGEg
bGVnaXRpbWF0ZQotICBjb25zdHJ1Y3QuICBUaGlzIGNhbiBtaXNzIHNvbWUgZXJyb3JzIGFuZCBk
b2VzIG5vdCBzdWJzdGl0dXRlIGZvcgotICBjb2RlIHJldmlldy4KLQotICBUbyBwcmV2ZW50IHNw
ZWNpZmljIGxpbmVzIGZyb20gYmVpbmcgbGludGVkLCBhZGQgYSAnLy8gTk9MSU5UJyBjb21tZW50
IHRvIHRoZQotICBlbmQgb2YgdGhlIGxpbmUuCi0KLSAgTGludGVkIGV4dGVuc2lvbnMgYXJlIC5j
cHAsIC5jIGFuZCAuaC4gIE90aGVyIGZpbGUgdHlwZXMgYXJlIGlnbm9yZWQuCi0KLSAgVGhlIGZp
bGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhY2NlcHRzIG11bHRpcGxlIGZpbGVzLiAgTGVh
dmluZwotICBvdXQgdGhlIGZpbGUgcGFyYW1ldGVyIGFwcGxpZXMgdGhlIGNoZWNrIHRvIGFsbCBm
aWxlcyBjb25zaWRlcmVkIGNoYW5nZWQKLSAgYnkgeW91ciBzb3VyY2UgY29udHJvbCBtYW5hZ2Vt
ZW50IHN5c3RlbS4KLQotICBGbGFnczoKLQotICAgIHZlcmJvc2U9IwotICAgICAgQSBudW1iZXIg
MC01IHRvIHJlc3RyaWN0IGVycm9ycyB0byBjZXJ0YWluIHZlcmJvc2l0eSBsZXZlbHMuCi0gICAg
ICBEZWZhdWx0cyB0byAlKGRlZmF1bHRfdmVyYm9zaXR5KXMuCi0KLSAgICBnaXQtY29tbWl0PTxT
aW5nbGVDb21taXQ+Ci0gICAgICBDaGVja3MgdGhlIHN0eWxlIG9mIGV2ZXJ5dGhpbmcgZnJvbSB0
aGUgZ2l2ZW4gY29tbWl0IHRvIHRoZSBsb2NhbCB0cmVlLgotCi0gICAgb3V0cHV0PXZzNwotICAg
ICAgVGhlIG91dHB1dCBmb3JtYXQsIHdoaWNoIG1heSBiZSBvbmUgb2YKLSAgICAgICAgZW1hY3Mg
OiB0byBlYXNlIGVtYWNzIHBhcnNpbmcKLSAgICAgICAgdnM3ICAgOiBjb21wYXRpYmxlIHdpdGgg
VmlzdWFsIFN0dWRpbwotICAgICAgRGVmYXVsdHMgdG8gIiUoZGVmYXVsdF9vdXRwdXRfZm9ybWF0
KXMiLiBPdGhlciBmb3JtYXRzIGFyZSB1bnN1cHBvcnRlZC4KLQotICAgIGZpbHRlcj0teCwreSwu
Li4KLSAgICAgIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYm9vbGVhbiBmaWx0ZXIgcnVsZXMg
dXNlZCB0byBmaWx0ZXIKLSAgICAgIHdoaWNoIGNhdGVnb3JpZXMgb2Ygc3R5bGUgZ3VpZGVsaW5l
cyB0byBjaGVjay4gIFRoZSBzY3JpcHQgY2hlY2tzCi0gICAgICBhIGNhdGVnb3J5IGlmIHRoZSBj
YXRlZ29yeSBwYXNzZXMgdGhlIGZpbHRlciBydWxlcywgYXMgZm9sbG93cy4KLQotICAgICAgQW55
IHdlYmtpdCBjYXRlZ29yeSBzdGFydHMgb3V0IHBhc3NpbmcuICBBbGwgZmlsdGVyIHJ1bGVzIGFy
ZSB0aGVuCi0gICAgICBldmFsdWF0ZWQgbGVmdCB0byByaWdodCwgd2l0aCBsYXRlciBydWxlcyB0
YWtpbmcgcHJlY2VkZW5jZS4gIEZvcgotICAgICAgZXhhbXBsZSwgdGhlIHJ1bGUgIitmb28iIHBh
c3NlcyBhbnkgY2F0ZWdvcnkgdGhhdCBzdGFydHMgd2l0aCAiZm9vIiwKLSAgICAgIGFuZCAiLWZv
byIgZmFpbHMgYW55IHN1Y2ggY2F0ZWdvcnkuICBUaGUgZmlsdGVyIGlucHV0ICItd2hpdGVzcGFj
ZSwKLSAgICAgICt3aGl0ZXNwYWNlL2JyYWNlcyIgZmFpbHMgdGhlIGNhdGVnb3J5ICJ3aGl0ZXNw
YWNlL3RhYiIgYW5kIHBhc3NlcwotICAgICAgIndoaXRlc3BhY2UvYnJhY2VzIi4KLQotICAgICAg
RXhhbXBsZXM6IC0tZmlsdGVyPS13aGl0ZXNwYWNlLCt3aGl0ZXNwYWNlL2JyYWNlcwotICAgICAg
ICAgICAgICAgIC0tZmlsdGVyPS13aGl0ZXNwYWNlLC1ydW50aW1lL3ByaW50ZiwrcnVudGltZS9w
cmludGZfZm9ybWF0Ci0gICAgICAgICAgICAgICAgLS1maWx0ZXI9LSwrYnVpbGQvaW5jbHVkZV93
aGF0X3lvdV91c2UKLQotICAgICAgQ2F0ZWdvcnkgbmFtZXMgYXBwZWFyIGluIGVycm9yIG1lc3Nh
Z2VzIGluIGJyYWNrZXRzLCBmb3IgZXhhbXBsZQotICAgICAgW3doaXRlc3BhY2UvaW5kZW50XS4g
IFRvIHNlZSBhIGxpc3Qgb2YgYWxsIGNhdGVnb3JpZXMgYXZhaWxhYmxlIHRvCi0gICAgICAlKHBy
b2dyYW1fbmFtZSlzLCBhbG9uZyB3aXRoIHdoaWNoIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIHBh
c3MKLSAgICAgIHRoZSBlbXB0eSBmaWx0ZXIgYXMgZm9sbG93czoKLSAgICAgICAgIC0tZmlsdGVy
PQotIiIiICUgewotICAgICdwcm9ncmFtX25hbWUnOiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2
WzBdKSwKLSAgICAnZGVmYXVsdF92ZXJib3NpdHknOiBfREVGQVVMVF9WRVJCT1NJVFksCi0gICAg
J2RlZmF1bHRfb3V0cHV0X2Zvcm1hdCc6IF9ERUZBVUxUX09VVFBVVF9GT1JNQVQKLSAgICB9Ci0K
LQotZGVmIHVzZV93ZWJraXRfc3R5bGVzKCk6Ci0gICAgIiIiQ29uZmlndXJlcyB0aGlzIG1vZHVs
ZSBmb3IgV2ViS2l0IHN0eWxlLiIiIgotICAgIGNwcF9zdHlsZS5fREVGQVVMVF9GSUxURVJfUlVM
RVMgPSBfV0VCS0lUX0ZJTFRFUl9SVUxFUwotCi0KLWRlZiBleGl0X3dpdGhfdXNhZ2UoZXJyb3Jf
bWVzc2FnZSwgZGlzcGxheV9oZWxwPUZhbHNlKToKLSAgICAiIiJFeGl0IGFuZCBwcmludCBhIHVz
YWdlIHN0cmluZyB3aXRoIGFuIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2UuCi0KLSAgICBBcmdzOgot
ICAgICAgZXJyb3JfbWVzc2FnZTogVGhlIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2UuCi0gICAgICBk
aXNwbGF5X2hlbHA6IFdoZXRoZXIgdG8gZGlzcGxheSBoZWxwIG91dHB1dC4gU3VwcHJlc3Npbmcg
aGVscAotICAgICAgICAgICAgICAgICAgICBvdXRwdXQgaXMgdXNlZnVsIGZvciB1bml0IHRlc3Rz
LgotICAgICIiIgotICAgIGlmIGRpc3BsYXlfaGVscDoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0
ZShfVVNBR0UpCi0gICAgaWYgZXJyb3JfbWVzc2FnZToKLSAgICAgICAgc3lzLmV4aXQoJ1xuRkFU
QUwgRVJST1I6ICcgKyBlcnJvcl9tZXNzYWdlKQotICAgIGVsc2U6Ci0gICAgICAgIHN5cy5leGl0
KDEpCi0KLQotZGVmIGV4aXRfd2l0aF9jYXRlZ29yaWVzKGRpc3BsYXlfaGVscD1GYWxzZSk6Ci0g
ICAgIiIiRXhpdCBhbmQgcHJpbnQgYWxsIHN0eWxlIGNhdGVnb3JpZXMsIGFsb25nIHdpdGggdGhl
IGRlZmF1bHQgZmlsdGVyLgotCi0gICAgVGhlc2UgY2F0ZWdvcnkgbmFtZXMgYXBwZWFyIGluIGVy
cm9yIG1lc3NhZ2VzLiAgVGhleSBjYW4gYmUgZmlsdGVyZWQKLSAgICB1c2luZyB0aGUgLS1maWx0
ZXIgZmxhZy4KLQotICAgIEFyZ3M6Ci0gICAgICBkaXNwbGF5X2hlbHA6IFdoZXRoZXIgdG8gZGlz
cGxheSBoZWxwIG91dHB1dC4gU3VwcHJlc3NpbmcgaGVscAotICAgICAgICAgICAgICAgICAgICBv
dXRwdXQgaXMgdXNlZnVsIGZvciB1bml0IHRlc3RzLgotICAgICIiIgotICAgIGlmIGRpc3BsYXlf
aGVscDoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG5BbGwgY2F0ZWdvcmllczpcbicpCi0g
ICAgICAgIGZvciBjYXRlZ29yeSBpbiBzb3J0ZWQoX1NUWUxFX0NBVEVHT1JJRVMpOgotICAgICAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgnICAgICcgKyBjYXRlZ29yeSArICdcbicpCi0KLSAgICAg
ICAgc3lzLnN0ZGVyci53cml0ZSgnXG5EZWZhdWx0IGZpbHRlciBydWxlcyoqOlxuJykKLSAgICAg
ICAgZm9yIGZpbHRlcl9ydWxlIGluIHNvcnRlZChfV0VCS0lUX0ZJTFRFUl9SVUxFUyk6Ci0gICAg
ICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcgICAgJyArIGZpbHRlcl9ydWxlICsgJ1xuJykKLSAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG4qKlRoZSBjb21tYW5kIGFsd2F5cyBldmFsdWF0ZXMg
dGhlIGFib3ZlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAncnVsZXMsIGFuZCBiZWZvcmUg
YW55IC0tZmlsdGVyIGZsYWcuXG5cbicpCi0KLSAgICBzeXMuZXhpdCgwKQotCi0KLWRlZiBwYXJz
ZV9hcmd1bWVudHMoYXJncywgYWRkaXRpb25hbF9mbGFncz1bXSwgZGlzcGxheV9oZWxwPUZhbHNl
KToKLSAgICAiIiJQYXJzZXMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0KLSAgICBUaGlz
IG1heSBzZXQgdGhlIG91dHB1dCBmb3JtYXQgYW5kIHZlcmJvc2l0eSBsZXZlbCBhcyBzaWRlLWVm
ZmVjdHMuCi0KLSAgICBBcmdzOgotICAgICAgYXJnczogVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVu
dHM6Ci0gICAgICBhZGRpdGlvbmFsX2ZsYWdzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB3aGljaCBzcGVj
aWZpZXMgZmxhZ3Mgd2UgYWxsb3cuCi0gICAgICBkaXNwbGF5X2hlbHA6IFdoZXRoZXIgdG8gZGlz
cGxheSBoZWxwIG91dHB1dC4gU3VwcHJlc3NpbmcgaGVscAotICAgICAgICAgICAgICAgICAgICBv
dXRwdXQgaXMgdXNlZnVsIGZvciB1bml0IHRlc3RzLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEg
dHVwbGUgb2YgKGZpbGVuYW1lcywgZmxhZ3MpCi0KLSAgICAgIGZpbGVuYW1lczogVGhlIGxpc3Qg
b2YgZmlsZW5hbWVzIHRvIGxpbnQuCi0gICAgICBmbGFnczogVGhlIGRpY3Qgb2YgdGhlIGZsYWcg
bmFtZXMgYW5kIHRoZSBmbGFnIHZhbHVlcy4KLSAgICAiIiIKLSAgICBmbGFncyA9IFsnaGVscCcs
ICdvdXRwdXQ9JywgJ3ZlcmJvc2U9JywgJ2ZpbHRlcj0nXSArIGFkZGl0aW9uYWxfZmxhZ3MKLSAg
ICBhZGRpdGlvbmFsX2ZsYWdfdmFsdWVzID0ge30KLSAgICB0cnk6Ci0gICAgICAgIChvcHRzLCBm
aWxlbmFtZXMpID0gZ2V0b3B0LmdldG9wdChhcmdzLCAnJywgZmxhZ3MpCi0gICAgZXhjZXB0IGdl
dG9wdC5HZXRvcHRFcnJvcjoKLSAgICAgICAgZXhpdF93aXRoX3VzYWdlKCdJbnZhbGlkIGFyZ3Vt
ZW50cy4nLCBkaXNwbGF5X2hlbHApCi0KLSAgICB2ZXJib3NpdHkgPSBfREVGQVVMVF9WRVJCT1NJ
VFkKLSAgICBvdXRwdXRfZm9ybWF0ID0gX0RFRkFVTFRfT1VUUFVUX0ZPUk1BVAotICAgIGZpbHRl
cnMgPSAnJwotCi0gICAgZm9yIChvcHQsIHZhbCkgaW4gb3B0czoKLSAgICAgICAgaWYgb3B0ID09
ICctLWhlbHAnOgotICAgICAgICAgICAgZXhpdF93aXRoX3VzYWdlKE5vbmUsIGRpc3BsYXlfaGVs
cCkKLSAgICAgICAgZWxpZiBvcHQgPT0gJy0tb3V0cHV0JzoKLSAgICAgICAgICAgIGlmIG5vdCB2
YWwgaW4gKCdlbWFjcycsICd2czcnKToKLSAgICAgICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2Uo
J1RoZSBvbmx5IGFsbG93ZWQgb3V0cHV0IGZvcm1hdHMgYXJlIGVtYWNzIGFuZCB2czcuJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9oZWxwKQotICAgICAgICAgICAg
b3V0cHV0X2Zvcm1hdCA9IHZhbAotICAgICAgICBlbGlmIG9wdCA9PSAnLS12ZXJib3NlJzoKLSAg
ICAgICAgICAgIHZlcmJvc2l0eSA9IGludCh2YWwpCi0gICAgICAgIGVsaWYgb3B0ID09ICctLWZp
bHRlcic6Ci0gICAgICAgICAgICBmaWx0ZXJzID0gdmFsCi0gICAgICAgICAgICBpZiBub3QgZmls
dGVyczoKLSAgICAgICAgICAgICAgICBleGl0X3dpdGhfY2F0ZWdvcmllcyhkaXNwbGF5X2hlbHAp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhZGRpdGlvbmFsX2ZsYWdfdmFsdWVzW29wdF0g
PSB2YWwKLQotICAgIGNwcF9zdHlsZS5fc2V0X291dHB1dF9mb3JtYXQob3V0cHV0X2Zvcm1hdCkK
LSAgICBjcHBfc3R5bGUuX3NldF92ZXJib3NlX2xldmVsKHZlcmJvc2l0eSkKLSAgICBjcHBfc3R5
bGUuX3NldF9maWx0ZXJzKGZpbHRlcnMpCi0KLSAgICByZXR1cm4gKGZpbGVuYW1lcywgYWRkaXRp
b25hbF9mbGFnX3ZhbHVlcykKLQotCi1kZWYgcHJvY2Vzc19maWxlKGZpbGVuYW1lKToKLSAgICAi
IiJDaGVja3Mgc3R5bGUgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZS4KLQotICAgIElmIHRoZSBzcGVj
aWZpZWQgZmlsZW5hbWUgaXMgJy0nLCBhcHBsaWVzIGNwcF9zdHlsZSB0byB0aGUgc3RhbmRhcmQg
aW5wdXQuCi0gICAgIiIiCi0gICAgaWYgY3BwX3N0eWxlLmNhbl9oYW5kbGUoZmlsZW5hbWUpIG9y
IGZpbGVuYW1lID09ICctJzoKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZShmaWxlbmFt
ZSkKLSAgICBlbGlmIHRleHRfc3R5bGUuY2FuX2hhbmRsZShmaWxlbmFtZSk6Ci0gICAgICAgIHRl
eHRfc3R5bGUucHJvY2Vzc19maWxlKGZpbGVuYW1lKQotCi0KLWRlZiBwcm9jZXNzX3BhdGNoKHBh
dGNoX3N0cmluZyk6Ci0gICAgIiIiRG9lcyBsaW50IG9uIGEgc2luZ2xlIHBhdGNoLgotCi0gICAg
QXJnczoKLSAgICAgIHBhdGNoX3N0cmluZzogQSBzdHJpbmcgb2YgYSBwYXRjaC4KLSAgICAiIiIK
LSAgICBwYXRjaCA9IERpZmZQYXJzZXIocGF0Y2hfc3RyaW5nLnNwbGl0bGluZXMoKSkKLSAgICBm
b3IgZmlsZW5hbWUsIGRpZmYgaW4gcGF0Y2guZmlsZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgIGZp
bGVfZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMV0KLSAgICAgICAgbGlu
ZV9udW1iZXJzID0gc2V0KCkKLQotICAgICAgICBkZWYgZXJyb3JfZm9yX3BhdGNoKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZpZGVuY2UsIG1lc3NhZ2UpOgotICAgICAgICAg
ICAgIiIiV3JhcHBlciBmdW5jdGlvbiBvZiBjcHBfc3R5bGUuZXJyb3IgZm9yIHBhdGNoZXMuCi0K
LSAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gb3V0cHV0cyBlcnJvcnMgb25seSBpZiB0aGUgbGlu
ZSBudW1iZXIKLSAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIGxpbmVzIHdoaWNoIGFyZSBtb2Rp
ZmllZCBvciBhZGRlZC4KLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgaWYgbm90IGxpbmVf
bnVtYmVyczoKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBkaWZmLmxpbmVzOgotICAgICAg
ICAgICAgICAgICAgICAjIFdoZW4gZGVsZXRlZCBsaW5lIGlzIG5vdCBzZXQsIGl0IG1lYW5zIHRo
YXQKLSAgICAgICAgICAgICAgICAgICAgIyB0aGUgbGluZSBpcyBuZXdseSBhZGRlZC4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgbm90IGxpbmVbMF06Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5lX251bWJlcnMuYWRkKGxpbmVbMV0pCi0KLSAgICAgICAgICAgIGlmIGxpbmVfbnVtYmVyIGlu
IGxpbmVfbnVtYmVyczoKLSAgICAgICAgICAgICAgICBjcHBfc3R5bGUuZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCBjYXRlZ29yeSwgY29uZmlkZW5jZSwgbWVzc2FnZSkKLQotICAgICAgICBp
ZiBjcHBfc3R5bGUuY2FuX2hhbmRsZShmaWxlbmFtZSk6Ci0gICAgICAgICAgICBjcHBfc3R5bGUu
cHJvY2Vzc19maWxlKGZpbGVuYW1lLCBlcnJvcj1lcnJvcl9mb3JfcGF0Y2gpCi0gICAgICAgIGVs
aWYgdGV4dF9zdHlsZS5jYW5faGFuZGxlKGZpbGVuYW1lKToKLSAgICAgICAgICAgIHRleHRfc3R5
bGUucHJvY2Vzc19maWxlKGZpbGVuYW1lLCBlcnJvcj1lcnJvcl9mb3JfcGF0Y2gpCi0KLQotZGVm
IGVycm9yX2NvdW50KCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgdG90YWwgZXJyb3IgY291bnQuIiIi
Ci0gICAgcmV0dXJuIGNwcF9zdHlsZS5lcnJvcl9jb3VudCgpCkluZGV4OiBXZWJLaXRUb29scy9T
Y3JpcHRzL21vZHVsZXMvc3R5bGVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy9tb2R1bGVzL3N0eWxlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zdHlsZV91bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMSwxMjQgKzAsMCBAQAotIyEvdXNyL2Jpbi9weXRob24KLSMgLSotIGNvZGluZzog
dXRmLTg7IC0qLQotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuCi0jIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0iIiJVbml0IHRlc3RzIGZvciBzdHlsZS5weS4iIiIKLQotaW1wb3J0IHVuaXR0
ZXN0Ci0KLWltcG9ydCBzdHlsZQotIyBGSVhNRTogRWxpbWluYXRlIGNwcF9zdHlsZSBkZXBlbmRl
bmN5LgotaW1wb3J0IGNwcF9zdHlsZQotCi0KLWNsYXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIiIiVGVzdHMgYXJndW1lbnQgcGFyc2luZy4iIiIKLSAgICBk
ZWYgdGVzdF9wYXJzZV9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgIG9sZF91c2FnZSA9IHN0eWxl
Ll9VU0FHRQotICAgICAgICBvbGRfc3R5bGVfY2F0ZWdvcmllcyA9IHN0eWxlLl9TVFlMRV9DQVRF
R09SSUVTCi0gICAgICAgIG9sZF93ZWJraXRfZmlsdGVyX3J1bGVzID0gc3R5bGUuX1dFQktJVF9G
SUxURVJfUlVMRVMKLSAgICAgICAgb2xkX291dHB1dF9mb3JtYXQgPSBjcHBfc3R5bGUuX2NwcF9z
dHlsZV9zdGF0ZS5vdXRwdXRfZm9ybWF0Ci0gICAgICAgIG9sZF92ZXJib3NlX2xldmVsID0gY3Bw
X3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUudmVyYm9zZV9sZXZlbAotICAgICAgICBvbGRfZmlsdGVy
cyA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgIyBEb24ndCBwcmludCB1c2FnZSBkdXJpbmcgdGhlIHRlc3RzLCBvciBmaWx0ZXIg
Y2F0ZWdvcmllcwotICAgICAgICAgICAgc3R5bGUuX1VTQUdFID0gJycKLSAgICAgICAgICAgIHN0
eWxlLl9TVFlMRV9DQVRFR09SSUVTID0gW10KLSAgICAgICAgICAgIHN0eWxlLl9XRUJLSVRfRklM
VEVSX1JVTEVTID0gW10KLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhp
dCwgc3R5bGUucGFyc2VfYXJndW1lbnRzLCBbJy0tYmFkb3B0J10pCi0gICAgICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBzdHlsZS5wYXJzZV9hcmd1bWVudHMsIFsnLS1oZWxw
J10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBzdHlsZS5wYXJz
ZV9hcmd1bWVudHMsIFsnLS1maWx0ZXI9J10pCi0gICAgICAgICAgICAjIFRoaXMgaXMgaWxsZWdh
bCBiZWNhdXNlIGFsbCBmaWx0ZXJzIG11c3Qgc3RhcnQgd2l0aCArIG9yIC0KLSAgICAgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0eWxlLnBhcnNlX2FyZ3VtZW50cywgWyct
LWZpbHRlcj1mb28nXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3Is
IHN0eWxlLnBhcnNlX2FyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsn
LS1maWx0ZXI9K2EsYiwtYyddKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoWydm
b28uY3BwJ10sIHt9KSwgc3R5bGUucGFyc2VfYXJndW1lbnRzKFsnZm9vLmNwcCddKSkKLSAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9sZF9vdXRwdXRfZm9ybWF0LCBjcHBfc3R5bGUuX2Nw
cF9zdHlsZV9zdGF0ZS5vdXRwdXRfZm9ybWF0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMob2xkX3ZlcmJvc2VfbGV2ZWwsIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnZlcmJvc2Vf
bGV2ZWwpCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChbXSwge30pLCBzdHlsZS5w
YXJzZV9hcmd1bWVudHMoW10pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFtdLCB7
fSksIHN0eWxlLnBhcnNlX2FyZ3VtZW50cyhbJy0tdj0wJ10pKQotCi0gICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygoWydmb28uY3BwJ10sIHt9KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlLnBhcnNlX2FyZ3VtZW50cyhbJy0tdj0xJywgJ2Zvby5jcHAnXSkpCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS52
ZXJib3NlX2xldmVsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsnZm9vLmgnXSwg
e30pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRz
KFsnLS12PTMnLCAnZm9vLmgnXSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzLCBj
cHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS52ZXJib3NlX2xldmVsKQotICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoKFsnZm9vLmNwcCddLCB7fSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLXZlcmJvc2U9NScsICdmb28uY3BwJ10p
KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNSwgY3BwX3N0eWxlLl9jcHBfc3R5bGVf
c3RhdGUudmVyYm9zZV9sZXZlbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVl
RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5wYXJzZV9hcmd1bWVu
dHMsIFsnLS12PWYnLCAnZm9vLmNwcCddKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cygoWydmb28uY3BwJ10sIHt9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
LnBhcnNlX2FyZ3VtZW50cyhbJy0tb3V0cHV0PWVtYWNzJywgJ2Zvby5jcHAnXSkpCi0gICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscygnZW1hY3MnLCBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0
ZS5vdXRwdXRfZm9ybWF0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsnZm9vLmgn
XSwge30pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1l
bnRzKFsnLS1vdXRwdXQ9dnM3JywgJ2Zvby5oJ10pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoJ3ZzNycsIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLm91dHB1dF9mb3JtYXQpCi0g
ICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRzLCBbJy0tb3V0cHV0PWJsYWgnLCAn
Zm9vLmNwcCddKQotCi0gICAgICAgICAgICBmaWx0ID0gJy0sK3doaXRlc3BhY2UsLXdoaXRlc3Bh
Y2UvaW5kZW50JwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsnZm9vLmgnXSwge30p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRzKFsn
LS1maWx0ZXI9JytmaWx0LCAnZm9vLmgnXSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhbJy0nLCAnK3doaXRlc3BhY2UnLCAnLXdoaXRlc3BhY2UvaW5kZW50J10sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXJzKQot
Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoWydmb28uY3BwJywgJ2Zvby5oJ10sIHt9
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnBhcnNlX2FyZ3VtZW50cyhb
J2Zvby5jcHAnLCAnZm9vLmgnXSkpCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChb
J2Zvby5jcHAnXSwgeyctLWZvbyc6ICcnfSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLWZvbycsICdmb28uY3BwJ10sIFsnZm9vJ10pKQot
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsnZm9vLmNwcCddLCB7Jy0tZm9vJzogJ2Jh
cid9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnBhcnNlX2FyZ3VtZW50
cyhbJy0tZm9vPWJhcicsICdmb28uY3BwJ10sIFsnZm9vPSddKSkKLSAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKChbJ2Zvby5jcHAnXSwge30pLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRzKFsnZm9vLmNwcCddLCBbJ2Zvbz0nXSkpCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyctLWZvb3R5cG89YmFyJywgJ2Zvby5jcHAnXSwgWydmb289J10pCi0gICAgICAg
IGZpbmFsbHk6Ci0gICAgICAgICAgICBzdHlsZS5fVVNBR0UgPSBvbGRfdXNhZ2UKLSAgICAgICAg
ICAgIHN0eWxlLl9TVFlMRV9DQVRFR09SSUVTID0gb2xkX3N0eWxlX2NhdGVnb3JpZXMKLSAgICAg
ICAgICAgIHN0eWxlLl9XRUJLSVRfRklMVEVSX1JVTEVTID0gb2xkX3dlYmtpdF9maWx0ZXJfcnVs
ZXMKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLm91dHB1dF9mb3JtYXQg
PSBvbGRfb3V0cHV0X2Zvcm1hdAotICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3Rh
dGUudmVyYm9zZV9sZXZlbCA9IG9sZF92ZXJib3NlX2xldmVsCi0gICAgICAgICAgICBjcHBfc3R5
bGUuX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXJzID0gb2xkX2ZpbHRlcnMKLQotCi1pZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBzeXMKLQotICAgIHVuaXR0ZXN0Lm1haW4oKQpJ
bmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGUucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGUucHkJKHJldmlzaW9u
IDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGUucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIkRvZXMg
V2ViS2l0LWxpbnQgb24gdGV4dCBmaWxlcy4KLQotVGhpcyBtb2R1bGUgc2hhcmVzIGVycm9yIGNv
dW50LCBmaWx0ZXIgc2V0dGluZywgb3V0cHV0IHNldHRpbmcsIGV0Yy4gd2l0aCBjcHBfc3R5bGUu
Ci0iIiIKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLQotaW1w
b3J0IGNwcF9zdHlsZQotCi0KLWRlZiBwcm9jZXNzX2ZpbGVfZGF0YShmaWxlbmFtZSwgbGluZXMs
IGVycm9yKToKLSAgICAiIiJQZXJmb3JtcyBsaW50IGNoZWNrIGZvciB0ZXh0IG9uIHRoZSBzcGVj
aWZpZWQgbGluZXMuCi0KLSAgICBJdCByZXBvcnRzIGVycm9ycyB0byB0aGUgZ2l2ZW4gZXJyb3Ig
ZnVuY3Rpb24uCi0gICAgIiIiCi0gICAgbGluZXMgPSAoWycvLyBhZGp1c3QgbGluZSBudW1iZXJz
IHRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgMS4nXSArIGxpbmVzKQotCi0gICAgIyBGSVhNRTogc2hh
cmUgd2l0aCBjcHBfc3R5bGUuY2hlY2tfc3R5bGUoKQotICAgIGZvciBsaW5lX251bWJlciwgbGlu
ZSBpbiBlbnVtZXJhdGUobGluZXMpOgotICAgICAgICBpZiAnXHQnIGluIGxpbmU6Ci0gICAgICAg
ICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3RhYicsIDUsICdM
aW5lIGNvbnRhaW5zIHRhYiBjaGFyYWN0ZXIuJykKLQotCi1kZWYgcHJvY2Vzc19maWxlKGZpbGVu
YW1lLCBlcnJvcj1jcHBfc3R5bGUuZXJyb3IpOgotICAgICIiIlBlcmZvcm1zIGxpbnQgY2hlY2sg
Zm9yIHRleHQgb24gYSBzaW5nbGUgZmlsZS4iIiIKLSAgICBpZiAobm90IGNhbl9oYW5kbGUoZmls
ZW5hbWUpKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSWdub3JpbmcgJXM7IG5vdCBhIHN1
cHBvcnRlZCBmaWxlXG4nICUgZmlsZW5hbWUpCi0gICAgICAgIHJldHVybgotCi0gICAgIyBGSVhN
RTogc2hhcmUgY29kZSB3aXRoIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGUoKS4KLSAgICB0cnk6Ci0g
ICAgICAgICMgRG8gbm90IHN1cHBvcnQgZm9yIGZpbGVuYW1lPSctJy4gY3BwX3N0eWxlIGhhbmRs
ZXMgaXQuCi0gICAgICAgIGxpbmVzID0gY29kZWNzLm9wZW4oZmlsZW5hbWUsICdyJywgJ3V0Zjgn
LCAncmVwbGFjZScpLnJlYWQoKS5zcGxpdCgnXG4nKQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAg
ICAgICBzeXMuc3RkZXJyLndyaXRlKCJTa2lwcGluZyBpbnB1dCAnJXMnOiBDYW4ndCBvcGVuIGZv
ciByZWFkaW5nXG4iICUgZmlsZW5hbWUpCi0gICAgICAgIHJldHVybgotICAgIHByb2Nlc3NfZmls
ZV9kYXRhKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpCi0KLQotZGVmIGNhbl9oYW5kbGUoZmlsZW5h
bWUpOgotICAgICIiIkNoZWNrcyBpZiB0aGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgc3BlY2lmaWVk
IGZpbGUgdHlwZS4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogQSBmaWxlbmFtZS4gSXQg
bWF5IGNvbnRhaW4gZGlyZWN0b3J5IG5hbWVzLgotICAgICIiIgotICAgIHJldHVybiAoIkNoYW5n
ZUxvZyIgaW4gZmlsZW5hbWUKLSAgICAgICAgICAgIG9yICJXZWJLaXRUb29scy9TY3JpcHRzLyIg
aW4gZmlsZW5hbWUKLSAgICAgICAgICAgIG9yIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFd
IGluICgnLmNzcycsICcuaHRtbCcsICcuaWRsJywgJy5qcycsICcubW0nLCAnLnBocCcsICcucG0n
LCAnLnB5JywgJy50eHQnKSkgYW5kIG5vdCAiTGF5b3V0VGVzdHMvIiBpbiBmaWxlbmFtZQpJbmRl
eDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGVfdW5pdHRlc3QucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGVfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3Rl
eHRfc3R5bGVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAKLSMh
L3Vzci9iaW4vcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0j
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVW5pdCB0ZXN0IGZvciB0ZXh0
X3N0eWxlLnB5LiIiIgotCi1pbXBvcnQgdW5pdHRlc3QKLQotaW1wb3J0IHRleHRfc3R5bGUKLQot
Ci1jbGFzcyBUZXh0U3R5bGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIiIiVGVz
dENhc2UgZm9yIHRleHRfc3R5bGUucHkiIiIKLQotICAgIGRlZiBhc3NlcnROb0Vycm9yKHNlbGYs
IGxpbmVzKToKLSAgICAgICAgIiIiQXNzZXJ0cyB0aGF0IHRoZSBzcGVjaWZpZWQgbGluZXMgaGFz
IG5vIGVycm9ycy4iIiIKLSAgICAgICAgc2VsZi5oYWRfZXJyb3IgPSBGYWxzZQotCi0gICAgICAg
IGRlZiBlcnJvcl9mb3JfdGVzdChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGNhdGVnb3J5LCBjb25m
aWRlbmNlLCBtZXNzYWdlKToKLSAgICAgICAgICAgICIiIlJlY29yZHMgaWYgYW4gZXJyb3Igb2Nj
dXJzLiIiIgotICAgICAgICAgICAgc2VsZi5oYWRfZXJyb3IgPSBUcnVlCi0KLSAgICAgICAgdGV4
dF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgnJywgbGluZXMsIGVycm9yX2Zvcl90ZXN0KQotICAg
ICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYuaGFkX2Vycm9yLCAnJXMgc2hvdWxkIG5vdCBoYXZl
IGFueSBlcnJvcnMuJyAlIGxpbmVzKQotCi0gICAgZGVmIGFzc2VydEVycm9yKHNlbGYsIGxpbmVz
LCBleHBlY3RlZF9saW5lX251bWJlcik6Ci0gICAgICAgICIiIkFzc2VydHMgdGhhdCB0aGUgc3Bl
Y2lmaWVkIGxpbmVzIGhhcyBhbiBlcnJvci4iIiIKLSAgICAgICAgc2VsZi5oYWRfZXJyb3IgPSBG
YWxzZQotCi0gICAgICAgIGRlZiBlcnJvcl9mb3JfdGVzdChmaWxlbmFtZSwgbGluZV9udW1iZXIs
IGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKLSAgICAgICAgICAgICIiIkNoZWNrcyBp
ZiB0aGUgZXhwZWN0ZWQgZXJyb3Igb2NjdXJzLiIiIgotICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoZXhwZWN0ZWRfbGluZV9udW1iZXIsIGxpbmVfbnVtYmVyKQotICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoJ3doaXRlc3BhY2UvdGFiJywgY2F0ZWdvcnkpCi0gICAgICAgICAgICBz
ZWxmLmhhZF9lcnJvciA9IFRydWUKLQotICAgICAgICB0ZXh0X3N0eWxlLnByb2Nlc3NfZmlsZV9k
YXRhKCcnLCBsaW5lcywgZXJyb3JfZm9yX3Rlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxm
LmhhZF9lcnJvciwgJyVzIHNob3VsZCBoYXZlIGFuIGVycm9yIFt3aGl0ZXNwYWNlL3RhYl0uJyAl
IGxpbmVzKQotCi0KLSAgICBkZWYgdGVzdF9ub19lcnJvcihzZWxmKToKLSAgICAgICAgIiIiVGVz
dHMgZm9yIG5vIGVycm9yIGNhc2VzLiIiIgotICAgICAgICBzZWxmLmFzc2VydE5vRXJyb3IoWycn
XSkKLSAgICAgICAgc2VsZi5hc3NlcnROb0Vycm9yKFsnYWJjIGRlZicsICdnZ2cnXSkKLQotCi0g
ICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6Ci0gICAgICAgICIiIlRlc3RzIGZvciBlcnJvciBjYXNl
cy4iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihbJzIwMDktMTItMTZcdEtlbnQgVGFtdXJh
XHQ8dGtlbnRAY2hyb21pdW0ub3JnPiddLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVycm9yKFsn
MjAwOS0xMi0xNiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPicsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnXHRSZXZpZXdl
ZCBieSBOT0JPRFkuJ10sIDMpCi0KLQotICAgIGRlZiB0ZXN0X2Nhbl9oYW5kbGUoc2VsZik6Ci0g
ICAgICAgICIiIlRlc3RzIGZvciB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoKS4iIiIKLSAgICAgICAg
c2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJycpKQotICAgICAgICBzZWxm
LmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnLScpKQotICAgICAgICBzZWxmLmFz
c2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdDaGFuZ2VMb2cnKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnV2ViQ29yZS9DaGFuZ2VMb2cnKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnRm9vQ2hhbmdlTG9nLmJhaycp
KQotICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdXZWJLaXRUb29s
cy9TY3JpcHRzL2NoZWNrLXdlYmtpdD1zdHlsZScpKQotICAgICAgICBzZWxmLmFzc2VydF8odGV4
dF9zdHlsZS5jYW5faGFuZGxlKCdXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHls
ZS5weScpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgn
V2ViS2l0VG9vbHMvU2NyaXB0cycpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxl
LmNhbl9oYW5kbGUoJ2Zvby5jc3MnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUu
Y2FuX2hhbmRsZSgnZm9vLmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUu
Y2FuX2hhbmRsZSgnZm9vLmlkbCcpKQotICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5j
YW5faGFuZGxlKCdmb28uanMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2Fu
X2hhbmRsZSgnV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcycpKQotICAg
ICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28ubW0nKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLnBocCcpKQotICAgICAg
ICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28ucG0nKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLnB5JykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby50eHQnKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jJykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0Xyhub3QgdGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28uYycpKQotICAgICAgICBz
ZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmMnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5wbmcnKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jL2Jhci5wbmcn
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ1dlYktp
dC9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MnKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ01ha2VmaWxlJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0Xyhub3QgdGV4dF9zdHlsZS5jYW5faGFuZGxlKCdXZWJDb3JlL0FuZHJvaWQubWsnKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ0xheW91dFRl
c3RzL2luc3BlY3Rvci9jb25zb2xlLXRlc3RzLmpzJykpCi0KLQotaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMv
bW9kdWxlcy91c2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxl
cy91c2VyLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxl
cy91c2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLSMgQ29weXJpZ2h0IChj
KSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyAKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3VicHJvY2VzcwotCi1jbGFzcyBVc2VyKG9iamVj
dCk6Ci0gICAgZGVmIHByb21wdChzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgcmV0dXJuIHJhd19p
bnB1dChtZXNzYWdlKQotCi0gICAgZGVmIGVkaXQoc2VsZiwgZmlsZXMpOgotICAgICAgICBlZGl0
b3IgPSBvcy5lbnZpcm9uLmdldCgiRURJVE9SIikgb3IgInZpIgotICAgICAgICBzdWJwcm9jZXNz
LmNhbGwoW2VkaXRvcl0gKyBmaWxlcykKLQotICAgIGRlZiBwYWdlKHNlbGYsIG1lc3NhZ2UpOgot
ICAgICAgICBwYWdlciA9IG9zLmVudmlyb24uZ2V0KCJQQUdFUiIpIG9yICJsZXNzIgotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBjaGlsZF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbcGFn
ZXJdLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgICAgICBjaGlsZF9wcm9jZXNzLmNv
bW11bmljYXRlKGlucHV0PW1lc3NhZ2UpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAg
ICAgICAgICAgcGFzcwotCi0gICAgZGVmIGNvbmZpcm0oc2VsZik6Ci0gICAgICAgIHJlc3BvbnNl
ID0gcmF3X2lucHV0KCJcbkNvbnRpbnVlPyBbWS9uXTogIikKLSAgICAgICAgcmV0dXJuIG5vdCBy
ZXNwb25zZSBvciByZXNwb25zZS5sb3dlcigpID09ICJ5IgpJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy9tb2R1bGVzL3dlYmtpdF9sb2dnaW5nLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy93ZWJraXRfbG9nZ2luZy5weQkocmV2aXNpb24gNTI3MDIpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvd2Via2l0X2xvZ2dpbmcucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsODUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jIAotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotIwotIyBXZWJLaXQncyBQeXRo
b24gbW9kdWxlIGZvciBsb2dnaW5nCi0jIFRoaXMgbW9kdWxlIGlzIG5vdyBkZXByZWNhdGVkIGlu
IGZhdm9yIG9mIHB5dGhvbidzIGJ1aWx0LWluIGxvZ2dpbmcucHkuCi0KLWltcG9ydCBvcwotaW1w
b3J0IHN5cwotCi1kZWYgbG9nKHN0cmluZyk6Ci0gICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgc3Ry
aW5nCi0KLWRlZiBlcnJvcihzdHJpbmcpOgotICAgIGxvZygiRVJST1I6ICVzIiAlIHN0cmluZykK
LSAgICBleGl0KDEpCi0KLSMgU2ltcGxlIGNsYXNzIHRvIHNwbGl0IG91dHB1dCBiZXR3ZWVuIG11
bHRpcGxlIGRlc3RpbmF0aW9ucwotY2xhc3MgdGVlOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAq
ZmlsZXMpOgotICAgICAgICBzZWxmLmZpbGVzID0gZmlsZXMKLQotICAgIGRlZiB3cml0ZShzZWxm
LCBzdHJpbmcpOgotICAgICAgICBmb3IgZmlsZSBpbiBzZWxmLmZpbGVzOgotICAgICAgICAgICAg
ZmlsZS53cml0ZShzdHJpbmcpCi0KLWNsYXNzIE91dHB1dFRlZToKLSAgICBkZWYgX19pbml0X18o
c2VsZik6Ci0gICAgICAgIHNlbGYuX29yaWdpbmFsX3N0ZG91dCA9IE5vbmUKLSAgICAgICAgc2Vs
Zi5fb3JpZ2luYWxfc3RkZXJyID0gTm9uZQotICAgICAgICBzZWxmLl9maWxlc19mb3Jfb3V0cHV0
ID0gW10KLQotICAgIGRlZiBhZGRfbG9nKHNlbGYsIHBhdGgpOgotICAgICAgICBsb2dfZmlsZSA9
IHNlbGYuX29wZW5fbG9nX2ZpbGUocGF0aCkKLSAgICAgICAgc2VsZi5fZmlsZXNfZm9yX291dHB1
dC5hcHBlbmQobG9nX2ZpbGUpCi0gICAgICAgIHNlbGYuX3RlZV9vdXRwdXRzX3RvX2ZpbGVzKHNl
bGYuX2ZpbGVzX2Zvcl9vdXRwdXQpCi0gICAgICAgIHJldHVybiBsb2dfZmlsZQotCi0gICAgZGVm
IHJlbW92ZV9sb2coc2VsZiwgbG9nX2ZpbGUpOgotICAgICAgICBzZWxmLl9maWxlc19mb3Jfb3V0
cHV0LnJlbW92ZShsb2dfZmlsZSkKLSAgICAgICAgc2VsZi5fdGVlX291dHB1dHNfdG9fZmlsZXMo
c2VsZi5fZmlsZXNfZm9yX291dHB1dCkKLSAgICAgICAgbG9nX2ZpbGUuY2xvc2UoKQotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBfb3Blbl9sb2dfZmlsZShsb2dfcGF0aCk6Ci0gICAgICAg
IChsb2dfZGlyZWN0b3J5LCBsb2dfbmFtZSkgPSBvcy5wYXRoLnNwbGl0KGxvZ19wYXRoKQotICAg
ICAgICBpZiBsb2dfZGlyZWN0b3J5IGFuZCBub3Qgb3MucGF0aC5leGlzdHMobG9nX2RpcmVjdG9y
eSk6Ci0gICAgICAgICAgICBvcy5tYWtlZGlycyhsb2dfZGlyZWN0b3J5KQotICAgICAgICByZXR1
cm4gb3Blbihsb2dfcGF0aCwgJ2ErJykKLQotICAgIGRlZiBfdGVlX291dHB1dHNfdG9fZmlsZXMo
c2VsZiwgZmlsZXMpOgotICAgICAgICBpZiBub3Qgc2VsZi5fb3JpZ2luYWxfc3Rkb3V0OgotICAg
ICAgICAgICAgc2VsZi5fb3JpZ2luYWxfc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICAgICAg
c2VsZi5fb3JpZ2luYWxfc3RkZXJyID0gc3lzLnN0ZGVycgotICAgICAgICBpZiBmaWxlcyBhbmQg
bGVuKGZpbGVzKToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSB0ZWUoc2VsZi5fb3JpZ2luYWxf
c3Rkb3V0LCAqZmlsZXMpCi0gICAgICAgICAgICBzeXMuc3RkZXJyID0gdGVlKHNlbGYuX29yaWdp
bmFsX3N0ZGVyciwgKmZpbGVzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3lzLnN0ZG91
dCA9IHNlbGYuX29yaWdpbmFsX3N0ZG91dAotICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHNlbGYu
X29yaWdpbmFsX3N0ZGVycgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3dlYmtp
dF9sb2dnaW5nX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
bW9kdWxlcy93ZWJraXRfbG9nZ2luZ191bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvd2Via2l0X2xvZ2dpbmdfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0j
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwot
aW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHRlbXBmaWxlCi1pbXBv
cnQgdW5pdHRlc3QKLQotZnJvbSBtb2R1bGVzLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IK
LWZyb20gbW9kdWxlcy53ZWJraXRfbG9nZ2luZyBpbXBvcnQgKgotCi1jbGFzcyBMb2dnaW5nVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgYXNzZXJ0X2xvZ19lcXVhbHMoc2VsZiwg
bG9nX2lucHV0LCBleHBlY3RlZF9vdXRwdXQpOgotICAgICAgICBvcmlnaW5hbF9zdGRlcnIgPSBz
eXMuc3RkZXJyCi0gICAgICAgIHRlc3Rfc3RkZXJyID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAg
ICAgICBzeXMuc3RkZXJyID0gdGVzdF9zdGRlcnIKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICBsb2cobG9nX2lucHV0KQotICAgICAgICAgICAgYWN0dWFsX291dHB1dCA9IHRlc3Rfc3RkZXJy
LmdldHZhbHVlKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9yaWdpbmFsX3N0ZGVy
ciA9IG9yaWdpbmFsX3N0ZGVycgotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFjdHVhbF9v
dXRwdXQsIGV4cGVjdGVkX291dHB1dCwgImxvZyhcIiVzXCIpIGV4cGVjdGVkOiAlcyBhY3R1YWw6
ICVzIiAlIChsb2dfaW5wdXQsIGV4cGVjdGVkX291dHB1dCwgYWN0dWFsX291dHB1dCkpCi0KLSAg
ICBkZWYgdGVzdF9sb2coc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19lcXVhbHMoInRl
c3QiLCAidGVzdFxuIikKLQotICAgICAgICAjIFRlc3QgdGhhdCBsb2coKSBkb2VzIG5vdCB0aHJv
dyBhbiBleGNlcHRpb24gd2hlbiBwYXNzZWQgYW4gb2JqZWN0IGluc3RlYWQgb2YgYSBzdHJpbmcu
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19lcXVhbHMoU2NyaXB0RXJyb3IobWVzc2FnZT0iU2Ny
aXB0RXJyb3IiKSwgIlNjcmlwdEVycm9yXG4iKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVs
ZXMvd2Via2l0X21lY2hhbml6ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvd2Via2l0X21lY2hhbml6ZS5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRU
b29scy9TY3JpcHRzL21vZHVsZXMvd2Via2l0X21lY2hhbml6ZS5weQkod29ya2luZyBjb3B5KQpA
QCAtMSw0NCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyAKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSMKLSMgQSBweXRob24gc2hpbSBm
b3IgaW1wb3J0aW5nIG1lY2hhbml6ZS4KLQotIyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byBkb3du
bG9hZCBhIGNvcHkgaW5zdGVhZCBvZiByZXF1aXJpbmcgcm9vdCBhY2Nlc3MuCi10cnk6Ci0gICAg
ZnJvbSBtZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKLWV4Y2VwdCBJbXBvcnRFcnJvciwgZToKLSAg
ICBwcmludCAiIiIKLW1lY2hhbml6ZSBpcyByZXF1aXJlZC4KLQotVG8gaW5zdGFsbDoKLXN1ZG8g
ZWFzeV9pbnN0YWxsIG1lY2hhbml6ZQotCi1PciBmcm9tIHRoZSB3ZWI6Ci1odHRwOi8vd3d3c2Vh
cmNoLnNvdXJjZWZvcmdlLm5ldC9tZWNoYW5pemUvCi0iIiIKLSAgICBleGl0KDEpCkluZGV4OiBX
ZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvd2Via2l0cG9ydC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvd2Via2l0cG9ydC5weQkocmV2aXNpb24gNTI3MDIp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvd2Via2l0cG9ydC5weQkod29ya2luZyBj
b3B5KQpAQCAtMSwxNDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDksIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIAotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
IyBtZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotIwotIyBXZWJLaXQn
cyBQeXRob24gbW9kdWxlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB2YXJpb3VzIHBvcnRzCi0KLWlt
cG9ydCBvcwotCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgotCi1jbGFzcyBXZWJL
aXRQb3J0KG9iamVjdCk6Ci0gICAgIyBXZSBtaWdodCBuZWVkIHRvIHBhc3Mgc2NtIGludG8gdGhp
cyBmdW5jdGlvbiBmb3Igc2NtLmNoZWNrb3V0X3Jvb3QKLSAgICBAY2xhc3NtZXRob2QKLSAgICBk
ZWYgc2NyaXB0X3BhdGgoY2xzLCBzY3JpcHRfbmFtZSk6Ci0gICAgICAgIHJldHVybiBvcy5wYXRo
LmpvaW4oIldlYktpdFRvb2xzIiwgIlNjcmlwdHMiLCBzY3JpcHRfbmFtZSkKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgcG9ydChwb3J0X25hbWUpOgotICAgICAgICBwb3J0cyA9IHsKLSAg
ICAgICAgICAgICJjaHJvbWl1bSI6IENocm9taXVtUG9ydCwKLSAgICAgICAgICAgICJndGsiOiBH
dGtQb3J0LAotICAgICAgICAgICAgIm1hYyI6IE1hY1BvcnQsCi0gICAgICAgICAgICAicXQiOiBR
dFBvcnQsCi0gICAgICAgIH0KLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGRlZmF1bHQgdG8g
V2luUG9ydCBvbiBXaW5kb3dzLgotICAgICAgICByZXR1cm4gcG9ydHMuZ2V0KHBvcnRfbmFtZSwg
TWFjUG9ydCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBuYW1lKGNscyk6Ci0gICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50Igot
Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZsYWcoY2xzKToKLSAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBAY2xh
c3NtZXRob2QKLSAgICBkZWYgdXBkYXRlX3dlYmtpdF9jb21tYW5kKGNscyk6Ci0gICAgICAgIHJl
dHVybiBbY2xzLnNjcmlwdF9wYXRoKCJ1cGRhdGUtd2Via2l0IildCi0KLSAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgYnVpbGRfd2Via2l0X2NvbW1hbmQoY2xzLCBidWlsZF9zdHlsZT1Ob25lKToK
LSAgICAgICAgY29tbWFuZCA9IFtjbHMuc2NyaXB0X3BhdGgoImJ1aWxkLXdlYmtpdCIpXQotICAg
ICAgICBpZiBidWlsZF9zdHlsZSA9PSAiZGVidWciOgotICAgICAgICAgICAgY29tbWFuZC5hcHBl
bmQoIi0tZGVidWciKQotICAgICAgICBpZiBidWlsZF9zdHlsZSA9PSAicmVsZWFzZSI6Ci0gICAg
ICAgICAgICBjb21tYW5kLmFwcGVuZCgiLS1yZWxlYXNlIikKLSAgICAgICAgcmV0dXJuIGNvbW1h
bmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBydW5fd2Via2l0X3Rlc3RzX2NvbW1hbmQo
Y2xzKToKLSAgICAgICAgcmV0dXJuIFtjbHMuc2NyaXB0X3BhdGgoInJ1bi13ZWJraXQtdGVzdHMi
KV0KLQotCi1jbGFzcyBNYWNQb3J0KFdlYktpdFBvcnQpOgotICAgIEBjbGFzc21ldGhvZAotICAg
IGRlZiBuYW1lKGNscyk6Ci0gICAgICAgIHJldHVybiAiTWFjIgotCi0gICAgQGNsYXNzbWV0aG9k
Ci0gICAgZGVmIGZsYWcoY2xzKToKLSAgICAgICAgcmV0dXJuICItLXBvcnQ9bWFjIgotCi0KLWNs
YXNzIEd0a1BvcnQoV2ViS2l0UG9ydCk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG5hbWUo
Y2xzKToKLSAgICAgICAgcmV0dXJuICJHdGsiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
ZmxhZyhjbHMpOgotICAgICAgICByZXR1cm4gIi0tcG9ydD1ndGsiCi0KLSAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgYnVpbGRfd2Via2l0X2NvbW1hbmQoY2xzLCBidWlsZF9zdHlsZT1Ob25lKToK
LSAgICAgICAgY29tbWFuZCA9IFdlYktpdFBvcnQuYnVpbGRfd2Via2l0X2NvbW1hbmQoYnVpbGRf
c3R5bGU9YnVpbGRfc3R5bGUpCi0gICAgICAgIGNvbW1hbmQuYXBwZW5kKCItLWd0ayIpCi0gICAg
ICAgIHJldHVybiBjb21tYW5kCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcnVuX3dlYmtp
dF90ZXN0c19jb21tYW5kKGNscyk6Ci0gICAgICAgIGNvbW1hbmQgPSBXZWJLaXRQb3J0LnJ1bl93
ZWJraXRfdGVzdHNfY29tbWFuZCgpCi0gICAgICAgIGNvbW1hbmQuYXBwZW5kKCItLWd0ayIpCi0g
ICAgICAgIHJldHVybiBjb21tYW5kCi0KLQotY2xhc3MgUXRQb3J0KFdlYktpdFBvcnQpOgotICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiBuYW1lKGNscyk6Ci0gICAgICAgIHJldHVybiAiUXQiCi0K
LSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZmxhZyhjbHMpOgotICAgICAgICByZXR1cm4gIi0t
cG9ydD1xdCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBidWlsZF93ZWJraXRfY29tbWFu
ZChjbHMsIGJ1aWxkX3N0eWxlPU5vbmUpOgotICAgICAgICBjb21tYW5kID0gV2ViS2l0UG9ydC5i
dWlsZF93ZWJraXRfY29tbWFuZChidWlsZF9zdHlsZT1idWlsZF9zdHlsZSkKLSAgICAgICAgY29t
bWFuZC5hcHBlbmQoIi0tcXQiKQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkg
ZGV0ZWN0IHRoZSBudW1iZXIgb2YgY29yZXMuCi0gICAgICAgIGNvbW1hbmQuYXBwZW5kKCctLW1h
a2VhcmdzPSItajgiJykKLSAgICAgICAgcmV0dXJuIGNvbW1hbmQKLQotCi1jbGFzcyBDaHJvbWl1
bVBvcnQoV2ViS2l0UG9ydCk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG5hbWUoY2xzKToK
LSAgICAgICAgcmV0dXJuICJDaHJvbWl1bSIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBm
bGFnKGNscyk6Ci0gICAgICAgIHJldHVybiAiLS1wb3J0PWNocm9taXVtIgotCi0gICAgQGNsYXNz
bWV0aG9kCi0gICAgZGVmIHVwZGF0ZV93ZWJraXRfY29tbWFuZChjbHMpOgotICAgICAgICBjb21t
YW5kID0gV2ViS2l0UG9ydC51cGRhdGVfd2Via2l0X2NvbW1hbmQoKQotICAgICAgICBjb21tYW5k
LmFwcGVuZCgiLS1jaHJvbWl1bSIpCi0gICAgICAgIHJldHVybiBjb21tYW5kCi0KLSAgICBAY2xh
c3NtZXRob2QKLSAgICBkZWYgYnVpbGRfd2Via2l0X2NvbW1hbmQoY2xzLCBidWlsZF9zdHlsZT1O
b25lKToKLSAgICAgICAgY29tbWFuZCA9IFdlYktpdFBvcnQuYnVpbGRfd2Via2l0X2NvbW1hbmQo
YnVpbGRfc3R5bGU9YnVpbGRfc3R5bGUpCi0gICAgICAgIGNvbW1hbmQuYXBwZW5kKCItLWNocm9t
aXVtIikKLSAgICAgICAgcmV0dXJuIGNvbW1hbmQKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMv
bW9kdWxlcy93ZWJraXRwb3J0X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy93ZWJraXRwb3J0X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy93ZWJraXRwb3J0X3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBD
b3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgot
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIG1vZHVsZXMud2Via2l0
cG9ydCBpbXBvcnQgV2ViS2l0UG9ydCwgTWFjUG9ydCwgR3RrUG9ydCwgUXRQb3J0LCBDaHJvbWl1
bVBvcnQKLQotY2xhc3MgV2ViS2l0UG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRl
ZiB0ZXN0X21hY19wb3J0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhNYWNQb3J0
Lm5hbWUoKSwgIk1hYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE1hY1BvcnQuZmxhZygp
LCAiLS1wb3J0PW1hYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE1hY1BvcnQucnVuX3dl
YmtpdF90ZXN0c19jb21tYW5kKCksIFtXZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJydW4td2Via2l0
LXRlc3RzIildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhNYWNQb3J0LmJ1aWxkX3dlYmtp
dF9jb21tYW5kKCksIFtXZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJidWlsZC13ZWJraXQiKV0pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE1hY1BvcnQuYnVpbGRfd2Via2l0X2NvbW1hbmQoYnVp
bGRfc3R5bGU9ImRlYnVnIiksIFtXZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJidWlsZC13ZWJraXQi
KSwgIi0tZGVidWciXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTWFjUG9ydC5idWlsZF93
ZWJraXRfY29tbWFuZChidWlsZF9zdHlsZT0icmVsZWFzZSIpLCBbV2ViS2l0UG9ydC5zY3JpcHRf
cGF0aCgiYnVpbGQtd2Via2l0IiksICItLXJlbGVhc2UiXSkKLQotICAgIGRlZiB0ZXN0X2d0a19w
b3J0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhHdGtQb3J0Lm5hbWUoKSwgIkd0
ayIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEd0a1BvcnQuZmxhZygpLCAiLS1wb3J0PWd0
ayIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEd0a1BvcnQucnVuX3dlYmtpdF90ZXN0c19j
b21tYW5kKCksIFtXZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJydW4td2Via2l0LXRlc3RzIiksICIt
LWd0ayJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhHdGtQb3J0LmJ1aWxkX3dlYmtpdF9j
b21tYW5kKCksIFtXZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJidWlsZC13ZWJraXQiKSwgIi0tZ3Rr
Il0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEd0a1BvcnQuYnVpbGRfd2Via2l0X2NvbW1h
bmQoYnVpbGRfc3R5bGU9ImRlYnVnIiksIFtXZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJidWlsZC13
ZWJraXQiKSwgIi0tZGVidWciLCAiLS1ndGsiXSkKLQotICAgIGRlZiB0ZXN0X3F0X3BvcnQoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFF0UG9ydC5uYW1lKCksICJRdCIpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFF0UG9ydC5mbGFnKCksICItLXBvcnQ9cXQiKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhRdFBvcnQucnVuX3dlYmtpdF90ZXN0c19jb21tYW5kKCksIFtX
ZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJydW4td2Via2l0LXRlc3RzIildKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhRdFBvcnQuYnVpbGRfd2Via2l0X2NvbW1hbmQoKSwgW1dlYktpdFBvcnQu
c2NyaXB0X3BhdGgoImJ1aWxkLXdlYmtpdCIpLCAiLS1xdCIsICctLW1ha2VhcmdzPSItajgiJ10p
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFF0UG9ydC5idWlsZF93ZWJraXRfY29tbWFuZChi
dWlsZF9zdHlsZT0iZGVidWciKSwgW1dlYktpdFBvcnQuc2NyaXB0X3BhdGgoImJ1aWxkLXdlYmtp
dCIpLCAiLS1kZWJ1ZyIsICItLXF0IiwgJy0tbWFrZWFyZ3M9Ii1qOCInXSkKLQotICAgIGRlZiB0
ZXN0X2Nocm9taXVtX3BvcnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENocm9t
aXVtUG9ydC5uYW1lKCksICJDaHJvbWl1bSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENo
cm9taXVtUG9ydC5mbGFnKCksICItLXBvcnQ9Y2hyb21pdW0iKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhDaHJvbWl1bVBvcnQucnVuX3dlYmtpdF90ZXN0c19jb21tYW5kKCksIFtXZWJLaXRQ
b3J0LnNjcmlwdF9wYXRoKCJydW4td2Via2l0LXRlc3RzIildKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhDaHJvbWl1bVBvcnQuYnVpbGRfd2Via2l0X2NvbW1hbmQoKSwgW1dlYktpdFBvcnQu
c2NyaXB0X3BhdGgoImJ1aWxkLXdlYmtpdCIpLCAiLS1jaHJvbWl1bSJdKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhDaHJvbWl1bVBvcnQuYnVpbGRfd2Via2l0X2NvbW1hbmQoYnVpbGRfc3R5
bGU9ImRlYnVnIiksIFtXZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJidWlsZC13ZWJraXQiKSwgIi0t
ZGVidWciLCAiLS1jaHJvbWl1bSJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhDaHJvbWl1
bVBvcnQudXBkYXRlX3dlYmtpdF9jb21tYW5kKCksIFtXZWJLaXRQb3J0LnNjcmlwdF9wYXRoKCJ1
cGRhdGUtd2Via2l0IiksICItLWNocm9taXVtIl0pCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9k
dWxlcy9jb21tYW5kcy9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3Jp
cHRzL21vZHVsZXMvY29tbWFuZHMvX19pbml0X18ucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL19faW5pdF9fLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xICswLDAgQEAKLSMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBk
aXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1
bGVzL2NvbW1hbmRzL2NvbW1hbmR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy9jb21tYW5kcy9jb21tYW5kdGVzdC5weQkocmV2aXNpb24gNTI3MDIpCisr
KyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvY29tbWFuZHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0j
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0
dGVzdAotCi1mcm9tIG1vZHVsZXMubW9jayBpbXBvcnQgTW9jawotZnJvbSBtb2R1bGVzLm1vY2tf
YnVnemlsbGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFUb29sCi1mcm9tIG1vZHVsZXMub3V0cHV0
Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotCi1jbGFzcyBDb21tYW5kc1Rlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgotICAgIGRlZiBhc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKHNlbGYsIGNvbW1h
bmQsIGFyZ3MsIGV4cGVjdGVkX3N0ZG91dD0iIiwgZXhwZWN0ZWRfc3RkZXJyPSIiLCBvcHRpb25z
PU1vY2soKSwgdG9vbD1Nb2NrQnVnemlsbGFUb29sKCkpOgotICAgICAgICBjb21tYW5kLmJpbmRf
dG9fdG9vbCh0b29sKQotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2Vs
ZiwgY29tbWFuZC5leGVjdXRlLCBbb3B0aW9ucywgYXJncywgdG9vbF0sIGV4cGVjdGVkX3N0ZG91
dD1leHBlY3RlZF9zdGRvdXQsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvZG93bmxvYWQucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL2Rvd25sb2FkLnB5
CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jb21tYW5k
cy9kb3dubG9hZC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwyODcgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zCi0KLWZyb20gb3B0cGFy
c2UgaW1wb3J0IG1ha2Vfb3B0aW9uCi0KLWZyb20gbW9kdWxlcy5idWd6aWxsYSBpbXBvcnQgcGFy
c2VfYnVnX2lkCi0jIFdlIGNvdWxkIGluc3RlYWQgdXNlIGZyb20gbW9kdWxlcyBpbXBvcnQgYnVp
bGRzdGVwcyBhbmQgdGhlbiBwcmVmaXggZXZlcnkgYnVpbGRzdGVwIHdpdGggImJ1aWxkc3RlcHMu
IgotZnJvbSBtb2R1bGVzLmJ1aWxkc3RlcHMgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy5jaGFuZ2Vs
b2dzIGltcG9ydCBDaGFuZ2VMb2cKLWZyb20gbW9kdWxlcy5jb21tZW50cyBpbXBvcnQgYnVnX2Nv
bW1lbnRfZnJvbV9jb21taXRfdGV4dAotZnJvbSBtb2R1bGVzLmV4ZWN1dGl2ZSBpbXBvcnQgU2Ny
aXB0RXJyb3IKLWZyb20gbW9kdWxlcy5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20gbW9k
dWxlcy53ZWJraXRfbG9nZ2luZyBpbXBvcnQgZXJyb3IsIGxvZwotZnJvbSBtb2R1bGVzLm11bHRp
Y29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21tbWFuZCwgQ29tbWFuZAot
ZnJvbSBtb2R1bGVzLnN0ZXBzZXF1ZW5jZSBpbXBvcnQgU3RlcFNlcXVlbmNlCi0KLQotIyBGSVhN
RTogTW92ZSB0aGlzIHRvIGEgbW9yZSBnZW5lcmFsIGxvY2F0aW9uLgotY2xhc3MgQWJzdHJhY3RT
ZXF1ZW5jZWRDb21tbWFuZChBYnN0cmFjdERlY2xhcmF0aXZlQ29tbW1hbmQpOgotICAgIHN0ZXBz
ID0gTm9uZQotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fc2VxdWVuY2Ug
PSBTdGVwU2VxdWVuY2Uoc2VsZi5zdGVwcykKLSAgICAgICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNv
bW1tYW5kLl9faW5pdF9fKHNlbGYsIHNlbGYuX3NlcXVlbmNlLm9wdGlvbnMoKSkKLQotICAgIGRl
ZiBfcHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgot
ICAgICAgICBzZWxmLl9zZXF1ZW5jZS5ydW5fYW5kX2hhbmRsZV9lcnJvcnModG9vbCwgb3B0aW9u
cywgc2VsZi5fcHJlcGFyZV9zdGF0ZShvcHRpb25zLCBhcmdzLCB0b29sKSkKLQotCi1jbGFzcyBC
dWlsZChBYnN0cmFjdFNlcXVlbmNlZENvbW1tYW5kKToKLSAgICBuYW1lID0gImJ1aWxkIgotICAg
IGhlbHBfdGV4dCA9ICJVcGRhdGUgd29ya2luZyBjb3B5IGFuZCBidWlsZCIKLSAgICBzdGVwcyA9
IFsKLSAgICAgICAgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5U3RlcCwKLSAgICAgICAgVXBkYXRlU3Rl
cCwKLSAgICAgICAgQnVpbGRTdGVwLAotICAgIF0KLQotCi1jbGFzcyBCdWlsZEFuZFRlc3QoQWJz
dHJhY3RTZXF1ZW5jZWRDb21tbWFuZCk6Ci0gICAgbmFtZSA9ICJidWlsZC1hbmQtdGVzdCIKLSAg
ICBoZWxwX3RleHQgPSAiVXBkYXRlIHdvcmtpbmcgY29weSwgYnVpbGQsIGFuZCBydW4gdGhlIHRl
c3RzIgotICAgIHN0ZXBzID0gWwotICAgICAgICBDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVwLAot
ICAgICAgICBVcGRhdGVTdGVwLAotICAgICAgICBCdWlsZFN0ZXAsCi0gICAgICAgIFJ1blRlc3Rz
U3RlcCwKLSAgICBdCi0KLQotY2xhc3MgTGFuZERpZmYoQWJzdHJhY3RTZXF1ZW5jZWRDb21tbWFu
ZCk6Ci0gICAgbmFtZSA9ICJsYW5kLWRpZmYiCi0gICAgaGVscF90ZXh0ID0gIkxhbmQgdGhlIGN1
cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZGlmZiBhbmQgdXBkYXRlcyB0aGUgYXNzb2NpYXRlZCBi
dWcgaWYgYW55IgotICAgIGFyZ3VtZW50X25hbWVzID0gIltCVUdJRF0iCi0gICAgc2hvd19pbl9t
YWluX2hlbHAgPSBUcnVlCi0gICAgc3RlcHMgPSBbCi0gICAgICAgIEVuc3VyZUJ1aWxkZXJzQXJl
R3JlZW5TdGVwLAotICAgICAgICBVcGRhdGVDaGFuZ2VMb2dzV2l0aFJldmlld2VyU3RlcCwKLSAg
ICAgICAgRW5zdXJlQnVpbGRlcnNBcmVHcmVlblN0ZXAsCi0gICAgICAgIEJ1aWxkU3RlcCwKLSAg
ICAgICAgUnVuVGVzdHNTdGVwLAotICAgICAgICBDb21taXRTdGVwLAotICAgICAgICBDbG9zZUJ1
Z0ZvckxhbmREaWZmU3RlcCwKLSAgICBdCi0KLSAgICBkZWYgX3ByZXBhcmVfc3RhdGUoc2VsZiwg
b3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAicGF0
Y2giIDogewotICAgICAgICAgICAgICAgICJpZCIgOiBOb25lLAotICAgICAgICAgICAgICAgICJi
dWdfaWQiIDogKGFyZ3MgYW5kIGFyZ3NbMF0pIG9yIHBhcnNlX2J1Z19pZCh0b29sLnNjbSgpLmNy
ZWF0ZV9wYXRjaCgpKSwKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0KLWNsYXNzIEFic3Ry
YWN0UGF0Y2hQcm9jZXNzaW5nQ29tbWFuZChBYnN0cmFjdERlY2xhcmF0aXZlQ29tbW1hbmQpOgot
ICAgICMgU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kcyBiZWxvdy4gIFdlIGRv
bid0IGRlY2xhcmUgdGhlbSBoZXJlCi0gICAgIyBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0
byBpbXBsZW1lbnQgdGhlbSB3aXRoIG1peC1pbnMuCi0gICAgIwotICAgICMgZGVmIF9mZXRjaF9s
aXN0X29mX3BhdGNoZXNfdG9fcHJvY2VzcyhzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAg
ICAjIGRlZiBfcHJlcGFyZV90b19wcm9jZXNzKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgot
Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfY29sbGVjdF9wYXRjaGVzX2J5X2J1ZyhwYXRj
aGVzKToKLSAgICAgICAgYnVnc190b19wYXRjaGVzID0ge30KLSAgICAgICAgZm9yIHBhdGNoIGlu
IHBhdGNoZXM6Ci0gICAgICAgICAgICBidWdfaWQgPSBwYXRjaFsiYnVnX2lkIl0KLSAgICAgICAg
ICAgIGJ1Z3NfdG9fcGF0Y2hlc1tidWdfaWRdID0gYnVnc190b19wYXRjaGVzLmdldChidWdfaWQs
IFtdKSArIFtwYXRjaF0KLSAgICAgICAgcmV0dXJuIGJ1Z3NfdG9fcGF0Y2hlcwotCi0gICAgZGVm
IGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHNlbGYuX3ByZXBh
cmVfdG9fcHJvY2VzcyhvcHRpb25zLCBhcmdzLCB0b29sKQotICAgICAgICBwYXRjaGVzID0gc2Vs
Zi5fZmV0Y2hfbGlzdF9vZl9wYXRjaGVzX3RvX3Byb2Nlc3Mob3B0aW9ucywgYXJncywgdG9vbCkK
LQotICAgICAgICAjIEl0J3MgbmljZSB0byBwcmludCBvdXQgdG90YWwgc3RhdGlzdGljcy4KLSAg
ICAgICAgYnVnc190b19wYXRjaGVzID0gc2VsZi5fY29sbGVjdF9wYXRjaGVzX2J5X2J1ZyhwYXRj
aGVzKQotICAgICAgICBsb2coIlByb2Nlc3NpbmcgJXMgZnJvbSAlcy4iICUgKHBsdXJhbGl6ZSgi
cGF0Y2giLCBsZW4ocGF0Y2hlcykpLCBwbHVyYWxpemUoImJ1ZyIsIGxlbihidWdzX3RvX3BhdGNo
ZXMpKSkpCi0KLSAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6Ci0gICAgICAgICAgICBzZWxm
Ll9wcm9jZXNzX3BhdGNoKHBhdGNoLCBvcHRpb25zLCBhcmdzLCB0b29sKQotCi0KLWNsYXNzIEFi
c3RyYWN0UGF0Y2hTZXF1ZW5jaW5nQ29tbWFuZChBYnN0cmFjdFBhdGNoUHJvY2Vzc2luZ0NvbW1h
bmQpOgotICAgIHByZXBhcmVfc3RlcHMgPSBOb25lCi0gICAgbWFpbl9zdGVwcyA9IE5vbmUKLQot
ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IFtdCi0gICAgICAgIHNl
bGYuX3ByZXBhcmVfc2VxdWVuY2UgPSBTdGVwU2VxdWVuY2Uoc2VsZi5wcmVwYXJlX3N0ZXBzKQot
ICAgICAgICBzZWxmLl9tYWluX3NlcXVlbmNlID0gU3RlcFNlcXVlbmNlKHNlbGYubWFpbl9zdGVw
cykKLSAgICAgICAgb3B0aW9ucyA9IHNvcnRlZChzZXQoc2VsZi5fcHJlcGFyZV9zZXF1ZW5jZS5v
cHRpb25zKCkgKyBzZWxmLl9tYWluX3NlcXVlbmNlLm9wdGlvbnMoKSkpCi0gICAgICAgIEFic3Ry
YWN0UGF0Y2hQcm9jZXNzaW5nQ29tbWFuZC5fX2luaXRfXyhzZWxmLCBvcHRpb25zKQotCi0gICAg
ZGVmIF9wcmVwYXJlX3RvX3Byb2Nlc3Moc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAg
ICAgIHNlbGYuX3ByZXBhcmVfc2VxdWVuY2UucnVuX2FuZF9oYW5kbGVfZXJyb3JzKHRvb2wsIG9w
dGlvbnMpCi0KLSAgICBkZWYgX3Byb2Nlc3NfcGF0Y2goc2VsZiwgcGF0Y2gsIG9wdGlvbnMsIGFy
Z3MsIHRvb2wpOgotICAgICAgICBzdGF0ZSA9IHsgInBhdGNoIiA6IHBhdGNoIH0KLSAgICAgICAg
c2VsZi5fbWFpbl9zZXF1ZW5jZS5ydW5fYW5kX2hhbmRsZV9lcnJvcnModG9vbCwgb3B0aW9ucywg
c3RhdGUpCi0KLQotY2xhc3MgUHJvY2Vzc0F0dGFjaG1lbnRzTWl4aW4ob2JqZWN0KToKLSAgICBk
ZWYgX2ZldGNoX2xpc3Rfb2ZfcGF0Y2hlc190b19wcm9jZXNzKHNlbGYsIG9wdGlvbnMsIGFyZ3Ms
IHRvb2wpOgotICAgICAgICByZXR1cm4gbWFwKGxhbWJkYSBwYXRjaF9pZDogdG9vbC5idWdzLmZl
dGNoX2F0dGFjaG1lbnQocGF0Y2hfaWQpLCBhcmdzKQotCi0KLWNsYXNzIFByb2Nlc3NCdWdzTWl4
aW4ob2JqZWN0KToKLSAgICBkZWYgX2ZldGNoX2xpc3Rfb2ZfcGF0Y2hlc190b19wcm9jZXNzKHNl
bGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBhbGxfcGF0Y2hlcyA9IFtdCi0gICAg
ICAgIGZvciBidWdfaWQgaW4gYXJnczoKLSAgICAgICAgICAgIHBhdGNoZXMgPSB0b29sLmJ1Z3Mu
ZmV0Y2hfcmV2aWV3ZWRfcGF0Y2hlc19mcm9tX2J1ZyhidWdfaWQpCi0gICAgICAgICAgICBsb2co
IiVzIGZvdW5kIG9uIGJ1ZyAlcy4iICUgKHBsdXJhbGl6ZSgicmV2aWV3ZWQgcGF0Y2giLCBsZW4o
cGF0Y2hlcykpLCBidWdfaWQpKQotICAgICAgICAgICAgYWxsX3BhdGNoZXMgKz0gcGF0Y2hlcwot
ICAgICAgICByZXR1cm4gYWxsX3BhdGNoZXMKLQotCi1jbGFzcyBDaGVja1N0eWxlKEFic3RyYWN0
UGF0Y2hTZXF1ZW5jaW5nQ29tbWFuZCwgUHJvY2Vzc0F0dGFjaG1lbnRzTWl4aW4pOgotICAgIG5h
bWUgPSAiY2hlY2stc3R5bGUiCi0gICAgaGVscF90ZXh0ID0gIlJ1biBjaGVjay13ZWJraXQtc3R5
bGUgb24gdGhlIHNwZWNpZmllZCBhdHRhY2htZW50cyIKLSAgICBhcmd1bWVudF9uYW1lcyA9ICJB
VFRBQ0hNRU5UX0lEIFtBVFRBQ0hNRU5UX0lEU10iCi0gICAgbWFpbl9zdGVwcyA9IFsKLSAgICAg
ICAgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5U3RlcCwKLSAgICAgICAgVXBkYXRlU3RlcCwKLSAgICAg
ICAgQXBwbHlQYXRjaFN0ZXAsCi0gICAgICAgIENoZWNrU3R5bGVTdGVwLAotICAgIF0KLQotCi1j
bGFzcyBCdWlsZEF0dGFjaG1lbnQoQWJzdHJhY3RQYXRjaFNlcXVlbmNpbmdDb21tYW5kLCBQcm9j
ZXNzQXR0YWNobWVudHNNaXhpbik6Ci0gICAgbmFtZSA9ICJidWlsZC1hdHRhY2htZW50IgotICAg
IGhlbHBfdGV4dCA9ICJBcHBseSBhbmQgYnVpbGQgcGF0Y2hlcyBmcm9tIGJ1Z3ppbGxhIgotICAg
IGFyZ3VtZW50X25hbWVzID0gIkFUVEFDSE1FTlRfSUQgW0FUVEFDSE1FTlRfSURTXSIKLSAgICBt
YWluX3N0ZXBzID0gWwotICAgICAgICBDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVwLAotICAgICAg
ICBVcGRhdGVTdGVwLAotICAgICAgICBBcHBseVBhdGNoU3RlcCwKLSAgICAgICAgQnVpbGRTdGVw
LAotICAgIF0KLQotCi1jbGFzcyBBYnN0cmFjdFBhdGNoQXBwbHlpbmdDb21tYW5kKEFic3RyYWN0
UGF0Y2hTZXF1ZW5jaW5nQ29tbWFuZCk6Ci0gICAgcHJlcGFyZV9zdGVwcyA9IFsKLSAgICAgICAg
RW5zdXJlTG9jYWxDb21taXRJZk5lZWRlZCwKLSAgICAgICAgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5
V2l0aExvY2FsQ29tbWl0c1N0ZXAsCi0gICAgICAgIFVwZGF0ZVN0ZXAsCi0gICAgXQotICAgIG1h
aW5fc3RlcHMgPSBbCi0gICAgICAgIEFwcGx5UGF0Y2hXaXRoTG9jYWxDb21taXRTdGVwLAotICAg
IF0KLQotCi1jbGFzcyBBcHBseUF0dGFjaG1lbnQoQWJzdHJhY3RQYXRjaEFwcGx5aW5nQ29tbWFu
ZCwgUHJvY2Vzc0F0dGFjaG1lbnRzTWl4aW4pOgotICAgIG5hbWUgPSAiYXBwbHktYXR0YWNobWVu
dCIKLSAgICBoZWxwX3RleHQgPSAiQXBwbHkgYW4gYXR0YWNobWVudCB0byB0aGUgbG9jYWwgd29y
a2luZyBkaXJlY3RvcnkiCi0gICAgYXJndW1lbnRfbmFtZXMgPSAiQVRUQUNITUVOVF9JRCBbQVRU
QUNITUVOVF9JRFNdIgotICAgIHNob3dfaW5fbWFpbl9oZWxwID0gVHJ1ZQotCi0KLWNsYXNzIEFw
cGx5UGF0Y2hlcyhBYnN0cmFjdFBhdGNoQXBwbHlpbmdDb21tYW5kLCBQcm9jZXNzQnVnc01peGlu
KToKLSAgICBuYW1lID0gImFwcGx5LXBhdGNoZXMiCi0gICAgaGVscF90ZXh0ID0gIkFwcGx5IHJl
dmlld2VkIHBhdGNoZXMgZnJvbSBwcm92aWRlZCBidWdzIHRvIHRoZSBsb2NhbCB3b3JraW5nIGRp
cmVjdG9yeSIKLSAgICBhcmd1bWVudF9uYW1lcyA9ICJCVUdJRCBbQlVHSURTXSIKLSAgICBzaG93
X2luX21haW5faGVscCA9IFRydWUKLQotCi1jbGFzcyBBYnN0cmFjdFBhdGNoTGFuZGluZ0NvbW1h
bmQoQWJzdHJhY3RQYXRjaFNlcXVlbmNpbmdDb21tYW5kKToKLSAgICBwcmVwYXJlX3N0ZXBzID0g
WwotICAgICAgICBFbnN1cmVCdWlsZGVyc0FyZUdyZWVuU3RlcCwKLSAgICBdCi0gICAgbWFpbl9z
dGVwcyA9IFsKLSAgICAgICAgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5U3RlcCwKLSAgICAgICAgVXBk
YXRlU3RlcCwKLSAgICAgICAgQXBwbHlQYXRjaFN0ZXAsCi0gICAgICAgIEVuc3VyZUJ1aWxkZXJz
QXJlR3JlZW5TdGVwLAotICAgICAgICBCdWlsZFN0ZXAsCi0gICAgICAgIFJ1blRlc3RzU3RlcCwK
LSAgICAgICAgQ29tbWl0U3RlcCwKLSAgICAgICAgQ2xvc2VQYXRjaFN0ZXAsCi0gICAgICAgIENs
b3NlQnVnU3RlcCwKLSAgICBdCi0KLQotY2xhc3MgTGFuZEF0dGFjaG1lbnQoQWJzdHJhY3RQYXRj
aExhbmRpbmdDb21tYW5kLCBQcm9jZXNzQXR0YWNobWVudHNNaXhpbik6Ci0gICAgbmFtZSA9ICJs
YW5kLWF0dGFjaG1lbnQiCi0gICAgaGVscF90ZXh0ID0gIkxhbmQgcGF0Y2hlcyBmcm9tIGJ1Z3pp
bGxhLCBvcHRpb25hbGx5IGJ1aWxkaW5nIGFuZCB0ZXN0aW5nIHRoZW0gZmlyc3QiCi0gICAgYXJn
dW1lbnRfbmFtZXMgPSAiQVRUQUNITUVOVF9JRCBbQVRUQUNITUVOVF9JRFNdIgotICAgIHNob3df
aW5fbWFpbl9oZWxwID0gVHJ1ZQotCi0KLWNsYXNzIExhbmRQYXRjaGVzKEFic3RyYWN0UGF0Y2hM
YW5kaW5nQ29tbWFuZCwgUHJvY2Vzc0J1Z3NNaXhpbik6Ci0gICAgbmFtZSA9ICJsYW5kLXBhdGNo
ZXMiCi0gICAgaGVscF90ZXh0ID0gIkxhbmQgYWxsIHBhdGNoZXMgb24gdGhlIGdpdmVuIGJ1Z3Ms
IG9wdGlvbmFsbHkgYnVpbGRpbmcgYW5kIHRlc3RpbmcgdGhlbSBmaXJzdCIKLSAgICBhcmd1bWVu
dF9uYW1lcyA9ICJCVUdJRCBbQlVHSURTXSIKLSAgICBzaG93X2luX21haW5faGVscCA9IFRydWUK
LQotCi0jIEZJWE1FOiBNYWtlIFJvbGxvdXQgbW9yZSBkZWNsYXJhdGl2ZS4KLWNsYXNzIFJvbGxv
dXQoQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJyb2xsb3V0IgotICAgIHNob3dfaW5fbWFpbl9oZWxw
ID0gVHJ1ZQotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fc2VxdWVuY2Ug
PSBTdGVwU2VxdWVuY2UoWwotICAgICAgICAgICAgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5U3RlcCwK
LSAgICAgICAgICAgIFVwZGF0ZVN0ZXAsCi0gICAgICAgICAgICBSZXZlcnRSZXZpc2lvblN0ZXAs
Ci0gICAgICAgICAgICBQcmVwYXJlQ2hhbmdlTG9nRm9yUmV2ZXJ0U3RlcCwKLSAgICAgICAgICAg
IENvbXBsZXRlUm9sbG91dCwKLSAgICAgICAgXSkKLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhz
ZWxmLCAiUmV2ZXJ0IHRoZSBnaXZlbiByZXZpc2lvbiBpbiB0aGUgd29ya2luZyBjb3B5IGFuZCBv
cHRpb25hbGx5IGNvbW1pdCB0aGUgcmV2ZXJ0IGFuZCByZS1vcGVuIHRoZSBvcmlnaW5hbCBidWci
LCAiUkVWSVNJT04gW0JVR0lEXSIsIG9wdGlvbnM9c2VsZi5fc2VxdWVuY2Uub3B0aW9ucygpKQot
Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfcGFyc2VfYnVnX2lkX2Zyb21fcmV2aXNpb25f
ZGlmZih0b29sLCByZXZpc2lvbik6Ci0gICAgICAgIG9yaWdpbmFsX2RpZmYgPSB0b29sLnNjbSgp
LmRpZmZfZm9yX3JldmlzaW9uKHJldmlzaW9uKQotICAgICAgICByZXR1cm4gcGFyc2VfYnVnX2lk
KG9yaWdpbmFsX2RpZmYpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9yZW9wZW5fYnVn
X2FmdGVyX3JvbGxvdXQodG9vbCwgYnVnX2lkLCBjb21tZW50X3RleHQpOgotICAgICAgICBpZiBi
dWdfaWQ6Ci0gICAgICAgICAgICB0b29sLmJ1Z3MucmVvcGVuX2J1ZyhidWdfaWQsIGNvbW1lbnRf
dGV4dCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZyhjb21tZW50X3RleHQpCi0gICAg
ICAgICAgICBsb2coIk5vIGJ1Z3Mgd2VyZSB1cGRhdGVkIG9yIHJlLW9wZW5lZCB0byByZWZsZWN0
IHRoaXMgcm9sbG91dC4iKQotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywg
dG9vbCk6Ci0gICAgICAgIHJldmlzaW9uID0gYXJnc1swXQotICAgICAgICBidWdfaWQgPSBzZWxm
Ll9wYXJzZV9idWdfaWRfZnJvbV9yZXZpc2lvbl9kaWZmKHRvb2wsIHJldmlzaW9uKQotICAgICAg
ICBpZiBvcHRpb25zLmNvbXBsZXRlX3JvbGxvdXQ6Ci0gICAgICAgICAgICBpZiBidWdfaWQ6Ci0g
ICAgICAgICAgICAgICAgbG9nKCJXaWxsIHJlLW9wZW4gYnVnICVzIGFmdGVyIHJvbGxvdXQuIiAl
IGJ1Z19pZCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbG9nKCJGYWlsZWQg
dG8gcGFyc2UgYnVnIG51bWJlciBmcm9tIGRpZmYuICBObyBidWdzIHdpbGwgYmUgdXBkYXRlZC9y
ZW9wZW5lZCBhZnRlciB0aGUgcm9sbG91dC4iKQotCi0gICAgICAgIHN0YXRlID0gewotICAgICAg
ICAgICAgInJldmlzaW9uIjogcmV2aXNpb24sCi0gICAgICAgICAgICAiYnVnX2lkIjogYnVnX2lk
LAotICAgICAgICB9Ci0gICAgICAgIHNlbGYuX3NlcXVlbmNlLnJ1bl9hbmRfaGFuZGxlX2Vycm9y
cyh0b29sLCBvcHRpb25zLCBzdGF0ZSkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxl
cy9jb21tYW5kcy9kb3dubG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvZG93bmxvYWRfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL2Rvd25sb2Fk
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMCArMCwwIEBACi0jIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gbW9kdWxlcy5jb21tYW5kcy5jb21tYW5kdGVz
dCBpbXBvcnQgQ29tbWFuZHNUZXN0Ci1mcm9tIG1vZHVsZXMuY29tbWFuZHMuZG93bmxvYWQgaW1w
b3J0ICoKLWZyb20gbW9kdWxlcy5tb2NrIGltcG9ydCBNb2NrCi0KLWNsYXNzIERvd25sb2FkQ29t
bWFuZHNUZXN0KENvbW1hbmRzVGVzdCk6Ci0gICAgZGVmIF9kZWZhdWx0X29wdGlvbnMoc2VsZik6
Ci0gICAgICAgIG9wdGlvbnMgPSBNb2NrKCkKLSAgICAgICAgb3B0aW9ucy5mb3JjZV9jbGVhbiA9
IEZhbHNlCi0gICAgICAgIG9wdGlvbnMuY2xlYW4gPSBUcnVlCi0gICAgICAgIG9wdGlvbnMuY2hl
Y2tfYnVpbGRlcnMgPSBUcnVlCi0gICAgICAgIG9wdGlvbnMucXVpZXQgPSBGYWxzZQotICAgICAg
ICBvcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSA9IEZhbHNlCi0gICAgICAgIG9wdGlvbnMudXBkYXRl
ID0gVHJ1ZQotICAgICAgICBvcHRpb25zLmJ1aWxkID0gVHJ1ZQotICAgICAgICBvcHRpb25zLnRl
c3QgPSBUcnVlCi0gICAgICAgIG9wdGlvbnMuY2xvc2VfYnVnID0gVHJ1ZQotICAgICAgICBvcHRp
b25zLmNvbXBsZXRlX3JvbGxvdXQgPSBGYWxzZQotICAgICAgICByZXR1cm4gb3B0aW9ucwotCi0g
ICAgZGVmIHRlc3RfYnVpbGQoc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJVcGRh
dGluZyB3b3JraW5nIGRpcmVjdG9yeVxuQnVpbGRpbmcgV2ViS2l0XG4iCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhCdWlsZCgpLCBbXSwgb3B0aW9ucz1zZWxmLl9kZWZhdWx0
X29wdGlvbnMoKSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKLQotICAgIGRlZiB0
ZXN0X2J1aWxkX2FuZF90ZXN0KHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiVXBk
YXRpbmcgd29ya2luZyBkaXJlY3RvcnlcbkJ1aWxkaW5nIFdlYktpdFxuIgotICAgICAgICBzZWxm
LmFzc2VydF9leGVjdXRlX291dHB1dHMoQnVpbGRBbmRUZXN0KCksIFtdLCBvcHRpb25zPXNlbGYu
X2RlZmF1bHRfb3B0aW9ucygpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCi0g
ICAgZGVmIHRlc3RfYXBwbHlfYXR0YWNobWVudChzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IHNl
bGYuX2RlZmF1bHRfb3B0aW9ucygpCi0gICAgICAgIG9wdGlvbnMudXBkYXRlID0gVHJ1ZQotICAg
ICAgICBvcHRpb25zLmxvY2FsX2NvbW1pdCA9IFRydWUKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJy
ID0gIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5XG5Qcm9jZXNzaW5nIDEgcGF0Y2ggZnJvbSAx
IGJ1Zy5cblByb2Nlc3NpbmcgcGF0Y2ggMTk3IGZyb20gYnVnIDQyLlxuIgotICAgICAgICBzZWxm
LmFzc2VydF9leGVjdXRlX291dHB1dHMoQXBwbHlBdHRhY2htZW50KCksIFsxOTddLCBvcHRpb25z
PW9wdGlvbnMsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVz
dF9hcHBseV9wYXRjaGVzKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gc2VsZi5fZGVmYXVsdF9v
cHRpb25zKCkKLSAgICAgICAgb3B0aW9ucy51cGRhdGUgPSBUcnVlCi0gICAgICAgIG9wdGlvbnMu
bG9jYWxfY29tbWl0ID0gVHJ1ZQotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiVXBkYXRpbmcg
d29ya2luZyBkaXJlY3RvcnlcbjIgcmV2aWV3ZWQgcGF0Y2hlcyBmb3VuZCBvbiBidWcgNDIuXG5Q
cm9jZXNzaW5nIDIgcGF0Y2hlcyBmcm9tIDEgYnVnLlxuUHJvY2Vzc2luZyBwYXRjaCAxOTcgZnJv
bSBidWcgNDIuXG5Qcm9jZXNzaW5nIHBhdGNoIDEyOCBmcm9tIGJ1ZyA0Mi5cbiIKLSAgICAgICAg
c2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKEFwcGx5UGF0Y2hlcygpLCBbNDJdLCBvcHRpb25z
PW9wdGlvbnMsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVz
dF9sYW5kX2RpZmYoc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJCdWlsZGluZyBX
ZWJLaXRcblVwZGF0aW5nIGJ1ZyA0MlxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291
dHB1dHMoTGFuZERpZmYoKSwgWzQyXSwgb3B0aW9ucz1zZWxmLl9kZWZhdWx0X29wdGlvbnMoKSwg
ZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKLQotICAgIGRlZiB0ZXN0X2NoZWNrX3N0
eWxlKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUHJvY2Vzc2luZyAxIHBhdGNo
IGZyb20gMSBidWcuXG5VcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeVxuUHJvY2Vzc2luZyBwYXRj
aCAxOTcgZnJvbSBidWcgNDIuXG5SdW5uaW5nIGNoZWNrLXdlYmtpdC1zdHlsZVxuIgotICAgICAg
ICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoQ2hlY2tTdHlsZSgpLCBbMTk3XSwgb3B0aW9u
cz1zZWxmLl9kZWZhdWx0X29wdGlvbnMoKSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVy
cikKLQotICAgIGRlZiB0ZXN0X2J1aWxkX2F0dGFjaG1lbnQoc2VsZik6Ci0gICAgICAgIGV4cGVj
dGVkX3N0ZGVyciA9ICJQcm9jZXNzaW5nIDEgcGF0Y2ggZnJvbSAxIGJ1Zy5cblVwZGF0aW5nIHdv
cmtpbmcgZGlyZWN0b3J5XG5Qcm9jZXNzaW5nIHBhdGNoIDE5NyBmcm9tIGJ1ZyA0Mi5cbkJ1aWxk
aW5nIFdlYktpdFxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoQnVpbGRB
dHRhY2htZW50KCksIFsxOTddLCBvcHRpb25zPXNlbGYuX2RlZmF1bHRfb3B0aW9ucygpLCBleHBl
Y3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCi0gICAgZGVmIHRlc3RfbGFuZF9hdHRhY2ht
ZW50KHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUHJvY2Vzc2luZyAxIHBhdGNo
IGZyb20gMSBidWcuXG5VcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeVxuUHJvY2Vzc2luZyBwYXRj
aCAxOTcgZnJvbSBidWcgNDIuXG5CdWlsZGluZyBXZWJLaXRcbiIKLSAgICAgICAgc2VsZi5hc3Nl
cnRfZXhlY3V0ZV9vdXRwdXRzKExhbmRBdHRhY2htZW50KCksIFsxOTddLCBvcHRpb25zPXNlbGYu
X2RlZmF1bHRfb3B0aW9ucygpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCi0g
ICAgZGVmIHRlc3RfbGFuZF9wYXRjaGVzKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIg
PSAiMiByZXZpZXdlZCBwYXRjaGVzIGZvdW5kIG9uIGJ1ZyA0Mi5cblByb2Nlc3NpbmcgMiBwYXRj
aGVzIGZyb20gMSBidWcuXG5VcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeVxuUHJvY2Vzc2luZyBw
YXRjaCAxOTcgZnJvbSBidWcgNDIuXG5CdWlsZGluZyBXZWJLaXRcblVwZGF0aW5nIHdvcmtpbmcg
ZGlyZWN0b3J5XG5Qcm9jZXNzaW5nIHBhdGNoIDEyOCBmcm9tIGJ1ZyA0Mi5cbkJ1aWxkaW5nIFdl
YktpdFxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoTGFuZFBhdGNoZXMo
KSwgWzQyXSwgb3B0aW9ucz1zZWxmLl9kZWZhdWx0X29wdGlvbnMoKSwgZXhwZWN0ZWRfc3RkZXJy
PWV4cGVjdGVkX3N0ZGVycikKLQotICAgIGRlZiB0ZXN0X3JvbGxvdXQoc2VsZik6Ci0gICAgICAg
IGV4cGVjdGVkX3N0ZGVyciA9ICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeVxuUnVubmluZyBw
cmVwYXJlLUNoYW5nZUxvZ1xuXG5OT1RFOiBSb2xsb3V0IHN1cHBvcnQgaXMgZXhwZXJpbWVudGFs
LlxuUGxlYXNlIHZlcmlmeSB0aGUgcm9sbG91dCBkaWZmIGFuZCB1c2UgXCJidWd6aWxsYS10b29s
IGxhbmQtZGlmZiAxMjM0NVwiIHRvIGNvbW1pdCB0aGUgcm9sbG91dC5cbiIKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFJvbGxvdXQoKSwgWzg1Ml0sIG9wdGlvbnM9c2VsZi5f
ZGVmYXVsdF9vcHRpb25zKCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAg
ICBkZWYgdGVzdF9jb21wbGV0ZV9yb2xsb3V0KHNlbGYpOgotICAgICAgICBvcHRpb25zID0gc2Vs
Zi5fZGVmYXVsdF9vcHRpb25zKCkKLSAgICAgICAgb3B0aW9ucy5jb21wbGV0ZV9yb2xsb3V0ID0g
VHJ1ZQotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiV2lsbCByZS1vcGVuIGJ1ZyAxMjM0NSBh
ZnRlciByb2xsb3V0LlxuVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnlcblJ1bm5pbmcgcHJlcGFy
ZS1DaGFuZ2VMb2dcbkJ1aWxkaW5nIFdlYktpdFxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVj
dXRlX291dHB1dHMoUm9sbG91dCgpLCBbODUyXSwgb3B0aW9ucz1vcHRpb25zLCBleHBlY3RlZF9z
dGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVz
L2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdfc3lzdGVtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvbW9kdWxlcy9jb21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3RlbS5weQkocmV2
aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvZWFy
bHlfd2FybmluZ19zeXN0ZW0ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEzICswLDAgQEAKLSMh
L3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZyb20gU3RyaW5nSU8g
aW1wb3J0IFN0cmluZ0lPCi0KLWZyb20gbW9kdWxlcy5jb21tYW5kcy5xdWV1ZXMgaW1wb3J0IEFi
c3RyYWN0UmV2aWV3UXVldWUKLWZyb20gbW9kdWxlcy5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0
ZXJMaXN0Ci1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgotZnJvbSBt
b2R1bGVzLndlYmtpdHBvcnQgaW1wb3J0IFdlYktpdFBvcnQKLQotCi1jbGFzcyBBYnN0cmFjdEVh
cmx5V2FybmluZ1N5c3RlbShBYnN0cmFjdFJldmlld1F1ZXVlKToKLSAgICBkZWYgX19pbml0X18o
c2VsZik6Ci0gICAgICAgIEFic3RyYWN0UmV2aWV3UXVldWUuX19pbml0X18oc2VsZikKLSAgICAg
ICAgc2VsZi5wb3J0ID0gV2ViS2l0UG9ydC5wb3J0KHNlbGYucG9ydF9uYW1lKQotCi0gICAgZGVm
IHNob3VsZF9wcm9jZWVkX3dpdGhfd29ya19pdGVtKHNlbGYsIHBhdGNoKToKLSAgICAgICAgdHJ5
OgotICAgICAgICAgICAgc2VsZi5ydW5fYnVnemlsbGFfdG9vbChbImJ1aWxkIiwgc2VsZi5wb3J0
LmZsYWcoKSwgIi0tZm9yY2UtY2xlYW4iLCAiLS1xdWlldCJdKQotICAgICAgICAgICAgc2VsZi5f
dXBkYXRlX3N0YXR1cygiQnVpbGRpbmciLCBwYXRjaCkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVy
cm9yLCBlOgotICAgICAgICAgICAgc2VsZi5fdXBkYXRlX3N0YXR1cygiVW5hYmxlIHRvIHBlcmZv
cm0gYSBidWlsZCIpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRy
dWUKLQotICAgIGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIHNlbGYucnVuX2J1Z3ppbGxhX3Rvb2woWwotICAgICAgICAgICAgICAg
ICJidWlsZC1hdHRhY2htZW50IiwKLSAgICAgICAgICAgICAgICBzZWxmLnBvcnQuZmxhZygpLAot
ICAgICAgICAgICAgICAgICItLWZvcmNlLWNsZWFuIiwKLSAgICAgICAgICAgICAgICAiLS1xdWll
dCIsCi0gICAgICAgICAgICAgICAgIi0tbm9uLWludGVyYWN0aXZlIiwKLSAgICAgICAgICAgICAg
ICAiLS1wYXJlbnQtY29tbWFuZD0lcyIgJSBzZWxmLm5hbWUsCi0gICAgICAgICAgICAgICAgIi0t
bm8tdXBkYXRlIiwKLSAgICAgICAgICAgICAgICBwYXRjaFsiaWQiXV0pCi0gICAgICAgICAgICBz
ZWxmLl9kaWRfcGFzcyhwYXRjaCkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAg
ICAgICAgICAgc2VsZi5fZGlkX2ZhaWwocGF0Y2gpCi0gICAgICAgICAgICByYWlzZSBlCi0KLSAg
ICBAY2xhc3NtZXRob2QKLSAgICBkZWYgaGFuZGxlX3NjcmlwdF9lcnJvcihjbHMsIHRvb2wsIHN0
YXRlLCBzY3JpcHRfZXJyb3IpOgotICAgICAgICBzdGF0dXNfaWQgPSBjbHMuX3VwZGF0ZV9zdGF0
dXNfZm9yX3NjcmlwdF9lcnJvcih0b29sLCBzdGF0ZSwgc2NyaXB0X2Vycm9yKQotICAgICAgICAj
IEZJWE1FOiBUaGlzIHdvbid0IGJlIHJpZ2h0IGZvciBwb3J0cyB0aGF0IGRvbid0IHVzZSBidWls
ZC13ZWJraXQhCi0gICAgICAgIGlmIG5vdCBzY3JpcHRfZXJyb3IuY29tbWFuZF9uYW1lKCkgPT0g
ImJ1aWxkLXdlYmtpdCI6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcmVzdWx0c19saW5r
ID0gdG9vbC5zdGF0dXNfYm90LnJlc3VsdHNfdXJsX2Zvcl9zdGF0dXMoc3RhdHVzX2lkKQotICAg
ICAgICBtZXNzYWdlID0gIkF0dGFjaG1lbnQgJXMgZGlkIG5vdCBidWlsZCBvbiAlczpcbkJ1aWxk
IG91dHB1dDogJXMiICUgKHN0YXRlWyJwYXRjaCJdWyJpZCJdLCBjbHMucG9ydF9uYW1lLCByZXN1
bHRzX2xpbmspCi0gICAgICAgIHRvb2wuYnVncy5wb3N0X2NvbW1lbnRfdG9fYnVnKHN0YXRlWyJw
YXRjaCJdWyJidWdfaWQiXSwgbWVzc2FnZSwgY2M9Y2xzLndhdGNoZXJzKQotCi0KLWNsYXNzIEd0
a0VXUyhBYnN0cmFjdEVhcmx5V2FybmluZ1N5c3RlbSk6Ci0gICAgbmFtZSA9ICJndGstZXdzIgot
ICAgIHBvcnRfbmFtZSA9ICJndGsiCi0KLQotY2xhc3MgUXRFV1MoQWJzdHJhY3RFYXJseVdhcm5p
bmdTeXN0ZW0pOgotICAgIG5hbWUgPSAicXQtZXdzIgotICAgIHBvcnRfbmFtZSA9ICJxdCIKLQot
Ci1jbGFzcyBDaHJvbWl1bUVXUyhBYnN0cmFjdEVhcmx5V2FybmluZ1N5c3RlbSk6Ci0gICAgbmFt
ZSA9ICJjaHJvbWl1bS1ld3MiCi0gICAgcG9ydF9uYW1lID0gImNocm9taXVtIgotICAgIHdhdGNo
ZXJzID0gQWJzdHJhY3RFYXJseVdhcm5pbmdTeXN0ZW0ud2F0Y2hlcnMgKyBbCi0gICAgICAgICJk
Z2xhemtvdkBjaHJvbWl1bS5vcmciLAotICAgIF0KLQotCi0jIEZvciBwbGF0Zm9ybXMgdGhhdCB3
ZSBjYW4ndCBydW4gaW5zaWRlIGEgVk0gKGxpa2UgTWFjIE9TIFgpLCB3ZSByZXF1aXJlCi0jIHBh
dGNoZXMgdG8gYmUgdXBsb2FkZWQgYnkgY29tbWl0dGVycywgd2hvIGFyZSBnZW5lcmFsbHkgdHJ1
c3R3b3J0aHkgZm9say4gOikKLWNsYXNzIEFic3RyYWN0Q29tbWl0dGVyT25seUVXUyhBYnN0cmFj
dEVhcmx5V2FybmluZ1N5c3RlbSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1pdHRlcnM9
Q29tbWl0dGVyTGlzdCgpKToKLSAgICAgICAgQWJzdHJhY3RFYXJseVdhcm5pbmdTeXN0ZW0uX19p
bml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fY29tbWl0dGVycyA9IGNvbW1pdHRlcnMKLQotICAg
IGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxmLCBwYXRjaCk6Ci0gICAgICAgIGlmIG5vdCBzZWxm
Ll9jb21taXR0ZXJzLmNvbW1pdHRlcl9ieV9lbWFpbChwYXRjaFsiYXR0YWNoZXJfZW1haWwiXSk6
Ci0gICAgICAgICAgICBzZWxmLl9kaWRfZXJyb3IocGF0Y2gsICIlcyBjYW5ub3QgcHJvY2VzcyBw
YXRjaGVzIGZyb20gbm9uLWNvbW1pdHRlcnMgOigiICUgc2VsZi5uYW1lKQotICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgIEFic3RyYWN0RWFybHlXYXJuaW5nU3lzdGVtLnByb2Nlc3Nfd29ya19p
dGVtKHNlbGYsIHBhdGNoKQotCi0KLWNsYXNzIE1hY0VXUyhBYnN0cmFjdENvbW1pdHRlck9ubHlF
V1MpOgotICAgIG5hbWUgPSAibWFjLWV3cyIKLSAgICBwb3J0X25hbWUgPSAibWFjIgpJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdfc3lzdGVt
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9j
b21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3RlbV91bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvZWFybHlfd2FybmluZ19z
eXN0ZW1fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gbW9kdWxlcy5jb21t
YW5kcy5lYXJseV93YXJuaW5nX3N5c3RlbSBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLmNvbW1hbmRz
LnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QKLWZyb20gbW9kdWxlcy5tb2NrIGltcG9ydCBN
b2NrCi0KLWNsYXNzIEVhcmx5V2FybmluZ1N5dGVtVGVzdChRdWV1ZXNUZXN0KToKLSAgICBkZWYg
dGVzdF9jaHJvbWl1bV9ld3Moc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9IHsKLSAg
ICAgICAgICAgICJiZWdpbl93b3JrX3F1ZXVlIiA6ICJDQVVUSU9OOiBjaHJvbWl1bS1ld3Mgd2ls
bCBkaXNjYXJkIGFsbCBsb2NhbCBjaGFuZ2VzIGluIFwiJXNcIlxuUnVubmluZyBXZWJLaXQgY2hy
b21pdW0tZXdzLlxuIiAlIG9zLmdldGN3ZCgpLAotICAgICAgICAgICAgImhhbmRsZV91bmV4cGVj
dGVkX2Vycm9yIiA6ICJNb2NrIGVycm9yIG1lc3NhZ2VcbiIsCi0gICAgICAgIH0KLSAgICAgICAg
c2VsZi5hc3NlcnRfcXVldWVfb3V0cHV0cyhDaHJvbWl1bUVXUygpLCBleHBlY3RlZF9zdGRlcnI9
ZXhwZWN0ZWRfc3RkZXJyKQotCi0gICAgZGVmIHRlc3RfcXRfZXdzKHNlbGYpOgotICAgICAgICBl
eHBlY3RlZF9zdGRlcnIgPSB7Ci0gICAgICAgICAgICAiYmVnaW5fd29ya19xdWV1ZSIgOiAiQ0FV
VElPTjogcXQtZXdzIHdpbGwgZGlzY2FyZCBhbGwgbG9jYWwgY2hhbmdlcyBpbiBcIiVzXCJcblJ1
bm5pbmcgV2ViS2l0IHF0LWV3cy5cbiIgJSBvcy5nZXRjd2QoKSwKLSAgICAgICAgICAgICJoYW5k
bGVfdW5leHBlY3RlZF9lcnJvciIgOiAiTW9jayBlcnJvciBtZXNzYWdlXG4iLAotICAgICAgICB9
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3F1ZXVlX291dHB1dHMoUXRFV1MoKSwgZXhwZWN0ZWRfc3Rk
ZXJyPWV4cGVjdGVkX3N0ZGVycikKLQotICAgIGRlZiB0ZXN0X2d0a19ld3Moc2VsZik6Ci0gICAg
ICAgIGV4cGVjdGVkX3N0ZGVyciA9IHsKLSAgICAgICAgICAgICJiZWdpbl93b3JrX3F1ZXVlIiA6
ICJDQVVUSU9OOiBndGstZXdzIHdpbGwgZGlzY2FyZCBhbGwgbG9jYWwgY2hhbmdlcyBpbiBcIiVz
XCJcblJ1bm5pbmcgV2ViS2l0IGd0ay1ld3MuXG4iICUgb3MuZ2V0Y3dkKCksCi0gICAgICAgICAg
ICAiaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3IiIDogIk1vY2sgZXJyb3IgbWVzc2FnZVxuIiwKLSAg
ICAgICAgfQotICAgICAgICBzZWxmLmFzc2VydF9xdWV1ZV9vdXRwdXRzKEd0a0VXUygpLCBleHBl
Y3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCi0gICAgZGVmIHRlc3RfbWFjX2V3cyhzZWxm
KToKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gewotICAgICAgICAgICAgImJlZ2luX3dvcmtf
cXVldWUiIDogIkNBVVRJT046IG1hYy1ld3Mgd2lsbCBkaXNjYXJkIGFsbCBsb2NhbCBjaGFuZ2Vz
IGluIFwiJXNcIlxuUnVubmluZyBXZWJLaXQgbWFjLWV3cy5cbiIgJSBvcy5nZXRjd2QoKSwKLSAg
ICAgICAgICAgICJoYW5kbGVfdW5leHBlY3RlZF9lcnJvciIgOiAiTW9jayBlcnJvciBtZXNzYWdl
XG4iLAotICAgICAgICB9Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3F1ZXVlX291dHB1dHMoTWFjRVdT
KCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCkluZGV4OiBXZWJLaXRUb29scy9T
Y3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVlcmllcy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVlcmllcy5weQkocmV2aXNpb24gNTI3MDIp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVlcmllcy5weQkod29y
a2luZyBjb3B5KQpAQCAtMSwxMzAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENv
cHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29w
eXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgotCi1mcm9t
IG1vZHVsZXMuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90Ci1mcm9tIG1vZHVsZXMuY29tbWl0dGVy
cyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGltcG9y
dCBsb2cKLWZyb20gbW9kdWxlcy5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBDb21tYW5kCi0KLQot
Y2xhc3MgQnVnc1RvQ29tbWl0KENvbW1hbmQpOgotICAgIG5hbWUgPSAiYnVncy10by1jb21taXQi
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYs
ICJMaXN0IGJ1Z3MgaW4gdGhlIGNvbW1pdC1xdWV1ZSIpCi0KLSAgICBkZWYgZXhlY3V0ZShzZWxm
LCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgYnVnX2lkcyA9IHRvb2wuYnVncy5xdWVy
aWVzLmZldGNoX2J1Z19pZHNfZnJvbV9jb21taXRfcXVldWUoKQotICAgICAgICBmb3IgYnVnX2lk
IGluIGJ1Z19pZHM6Ci0gICAgICAgICAgICBwcmludCAiJXMiICUgYnVnX2lkCi0KLQotY2xhc3Mg
UGF0Y2hlc1RvQ29tbWl0KENvbW1hbmQpOgotICAgIG5hbWUgPSAicGF0Y2hlcy10by1jb21taXQi
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYs
ICJMaXN0IHBhdGNoZXMgaW4gdGhlIGNvbW1pdC1xdWV1ZSIpCi0KLSAgICBkZWYgZXhlY3V0ZShz
ZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgcGF0Y2hlcyA9IHRvb2wuYnVncy5x
dWVyaWVzLmZldGNoX3BhdGNoZXNfZnJvbV9jb21taXRfcXVldWUoKQotICAgICAgICBsb2coIlBh
dGNoZXMgaW4gY29tbWl0IHF1ZXVlOiIpCi0gICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgot
ICAgICAgICAgICAgcHJpbnQgIiVzIiAlIHBhdGNoWyJ1cmwiXQotCi0KLWNsYXNzIFBhdGNoZXNU
b0NvbW1pdFF1ZXVlKENvbW1hbmQpOgotICAgIG5hbWUgPSAicGF0Y2hlcy10by1jb21taXQtcXVl
dWUiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gWwotICAgICAg
ICAgICAgbWFrZV9vcHRpb24oIi0tYnVncyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImJ1
Z3MiLCBoZWxwPSJPdXRwdXQgYnVnIGxpbmtzIGluc3RlYWQgb2YgcGF0Y2ggbGlua3MiKSwKLSAg
ICAgICAgXQotICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYsICJQYXRjaGVzIHdoaWNoIHNo
b3VsZCBiZSBhZGRlZCB0byB0aGUgY29tbWl0IHF1ZXVlIiwgb3B0aW9ucz1vcHRpb25zKQotCi0g
ICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfbmVlZHNfY29tbWl0X3F1ZXVlKHBhdGNoKToKLSAg
ICAgICAgY29tbWl0X3F1ZXVlX2ZsYWcgPSBwYXRjaC5nZXQoImNvbW1pdC1xdWV1ZSIpCi0gICAg
ICAgIGlmIChjb21taXRfcXVldWVfZmxhZyBhbmQgY29tbWl0X3F1ZXVlX2ZsYWcgPT0gJysnKTog
IyBJZiBpdCdzIGFscmVhZHkgY3ErLCBpZ25vcmUgdGhlIHBhdGNoLgotICAgICAgICAgICAgbG9n
KCIlcyBhbHJlYWR5IGhhcyBjcT0lcyIgJSAocGF0Y2hbImlkIl0sIGNvbW1pdF9xdWV1ZV9mbGFn
KSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgICMgV2Ugb25seSBuZWVkIHRv
IHdvcnJ5IGFib3V0IHBhdGNoZXMgZnJvbSBjb250cmlidXRlcnMgd2hvIGFyZSBub3QgeWV0IGNv
bW1pdHRlcnMuCi0gICAgICAgIGNvbW1pdHRlcl9yZWNvcmQgPSBDb21taXR0ZXJMaXN0KCkuY29t
bWl0dGVyX2J5X2VtYWlsKHBhdGNoWyJhdHRhY2hlcl9lbWFpbCJdKQotICAgICAgICBpZiBjb21t
aXR0ZXJfcmVjb3JkOgotICAgICAgICAgICAgbG9nKCIlcyBjb21taXR0ZXIgPSAlcyIgJSAocGF0
Y2hbImlkIl0sIGNvbW1pdHRlcl9yZWNvcmQpKQotICAgICAgICByZXR1cm4gbm90IGNvbW1pdHRl
cl9yZWNvcmQKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgot
ICAgICAgICBwYXRjaGVzID0gdG9vbC5idWdzLnF1ZXJpZXMuZmV0Y2hfcGF0Y2hlc19mcm9tX3Bl
bmRpbmdfY29tbWl0X2xpc3QoKQotICAgICAgICBwYXRjaGVzX25lZWRpbmdfY3EgPSBmaWx0ZXIo
c2VsZi5fbmVlZHNfY29tbWl0X3F1ZXVlLCBwYXRjaGVzKQotICAgICAgICBpZiBvcHRpb25zLmJ1
Z3M6Ci0gICAgICAgICAgICBidWdzX25lZWRpbmdfY3EgPSBtYXAobGFtYmRhIHBhdGNoOiBwYXRj
aFsnYnVnX2lkJ10sIHBhdGNoZXNfbmVlZGluZ19jcSkKLSAgICAgICAgICAgIGJ1Z3NfbmVlZGlu
Z19jcSA9IHNvcnRlZChzZXQoYnVnc19uZWVkaW5nX2NxKSkKLSAgICAgICAgICAgIGZvciBidWdf
aWQgaW4gYnVnc19uZWVkaW5nX2NxOgotICAgICAgICAgICAgICAgIHByaW50ICIlcyIgJSB0b29s
LmJ1Z3MuYnVnX3VybF9mb3JfYnVnX2lkKGJ1Z19pZCkKLSAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzX25lZWRpbmdfY3E6Ci0gICAgICAgICAgICAgICAgcHJp
bnQgIiVzIiAlIHRvb2wuYnVncy5hdHRhY2htZW50X3VybF9mb3JfaWQocGF0Y2hbImlkIl0sIGFj
dGlvbj0iZWRpdCIpCi0KLQotY2xhc3MgUGF0Y2hlc1RvUmV2aWV3KENvbW1hbmQpOgotICAgIG5h
bWUgPSAicGF0Y2hlcy10by1yZXZpZXciCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAg
ICBDb21tYW5kLl9faW5pdF9fKHNlbGYsICJMaXN0IHBhdGNoZXMgdGhhdCBhcmUgcGVuZGluZyBy
ZXZpZXciKQotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0g
ICAgICAgIHBhdGNoX2lkcyA9IHRvb2wuYnVncy5xdWVyaWVzLmZldGNoX2F0dGFjaG1lbnRfaWRz
X2Zyb21fcmV2aWV3X3F1ZXVlKCkKLSAgICAgICAgbG9nKCJQYXRjaGVzIHBlbmRpbmcgcmV2aWV3
OiIpCi0gICAgICAgIGZvciBwYXRjaF9pZCBpbiBwYXRjaF9pZHM6Ci0gICAgICAgICAgICBwcmlu
dCBwYXRjaF9pZAotCi0KLWNsYXNzIFJldmlld2VkUGF0Y2hlcyhDb21tYW5kKToKLSAgICBuYW1l
ID0gInJldmlld2VkLXBhdGNoZXMiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBD
b21tYW5kLl9faW5pdF9fKHNlbGYsICJMaXN0IHIrJ2QgcGF0Y2hlcyBvbiBhIGJ1ZyIsICJCVUdJ
RCIpCi0KLSAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAg
ICAgYnVnX2lkID0gYXJnc1swXQotICAgICAgICBwYXRjaGVzX3RvX2xhbmQgPSB0b29sLmJ1Z3Mu
ZmV0Y2hfcmV2aWV3ZWRfcGF0Y2hlc19mcm9tX2J1ZyhidWdfaWQpCi0gICAgICAgIGZvciBwYXRj
aCBpbiBwYXRjaGVzX3RvX2xhbmQ6Ci0gICAgICAgICAgICBwcmludCAiJXMiICUgcGF0Y2hbInVy
bCJdCi0KLQotY2xhc3MgVHJlZVN0YXR1cyhDb21tYW5kKToKLSAgICBuYW1lID0gInRyZWUtc3Rh
dHVzIgotICAgIHNob3dfaW5fbWFpbl9oZWxwID0gVHJ1ZQotICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAiUHJpbnQgdGhlIHN0YXR1cyBvZiB0
aGUgJXMgYnVpbGRib3RzIiAlIEJ1aWxkQm90LmRlZmF1bHRfaG9zdCkKLQotICAgIGRlZiBleGVj
dXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBmb3IgYnVpbGRlciBpbiB0
b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMoKToKLSAgICAgICAgICAgIHN0YXR1c19zdHJp
bmcgPSAib2siIGlmIGJ1aWxkZXJbImlzX2dyZWVuIl0gZWxzZSAiRkFJTCIKLSAgICAgICAgICAg
IHByaW50ICIlcyA6ICVzIiAlIChzdGF0dXNfc3RyaW5nLmxqdXN0KDQpLCBidWlsZGVyWyJuYW1l
Il0pCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVlcmllc191
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29t
bWFuZHMvcXVlcmllc191bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29s
cy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMSw2OCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IHVuaXR0ZXN0Ci0K
LWZyb20gbW9kdWxlcy5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEKLWZyb20gbW9kdWxlcy5jb21t
YW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Ci1mcm9tIG1vZHVsZXMuY29tbWFu
ZHMucXVlcmllcyBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLm1vY2sgaW1wb3J0IE1vY2sKLWZyb20g
bW9kdWxlcy5tb2NrX2J1Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbAotCi1jbGFz
cyBRdWVyeUNvbW1hbmRzVGVzdChDb21tYW5kc1Rlc3QpOgotICAgIGRlZiB0ZXN0X2J1Z3NfdG9f
Y29tbWl0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoQnVnc1Rv
Q29tbWl0KCksIE5vbmUsICI0MlxuNzVcbiIpCi0KLSAgICBkZWYgdGVzdF9wYXRjaGVzX3RvX2Nv
bW1pdChzZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gImh0dHA6Ly9leGFtcGxlLmNv
bS8xOTdcbmh0dHA6Ly9leGFtcGxlLmNvbS8xMjhcbiIKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJy
ID0gIlBhdGNoZXMgaW4gY29tbWl0IHF1ZXVlOlxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVj
dXRlX291dHB1dHMoUGF0Y2hlc1RvQ29tbWl0KCksIE5vbmUsIGV4cGVjdGVkX3N0ZG91dCwgZXhw
ZWN0ZWRfc3RkZXJyKQotCi0gICAgZGVmIHRlc3RfcGF0Y2hlc190b19jb21taXRfcXVldWUoc2Vs
Zik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJodHRwOi8vZXhhbXBsZS5jb20vMTk3JmFj
dGlvbj1lZGl0XG4iCi0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICIxMjggY29tbWl0dGVyID0g
XCJFcmljIFNlaWRlbFwiIDxlcmljQHdlYmtpdC5vcmc+XG4iCi0gICAgICAgIG9wdGlvbnMgPSBN
b2NrKCkKLSAgICAgICAgb3B0aW9ucy5idWdzID0gRmFsc2UKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZXhlY3V0ZV9vdXRwdXRzKFBhdGNoZXNUb0NvbW1pdFF1ZXVlKCksIE5vbmUsIGV4cGVjdGVkX3N0
ZG91dCwgZXhwZWN0ZWRfc3RkZXJyLCBvcHRpb25zPW9wdGlvbnMpCi0KLSAgICAgICAgZXhwZWN0
ZWRfc3Rkb3V0ID0gImh0dHA6Ly9leGFtcGxlLmNvbS80MlxuIgotICAgICAgICBvcHRpb25zLmJ1
Z3MgPSBUcnVlCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhQYXRjaGVzVG9D
b21taXRRdWV1ZSgpLCBOb25lLCBleHBlY3RlZF9zdGRvdXQsIGV4cGVjdGVkX3N0ZGVyciwgb3B0
aW9ucz1vcHRpb25zKQotCi0gICAgZGVmIHRlc3RfcGF0Y2hlc190b19yZXZpZXcoc2VsZik6Ci0g
ICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICIxOTdcbjEyOFxuIgotICAgICAgICBleHBlY3RlZF9z
dGRlcnIgPSAiUGF0Y2hlcyBwZW5kaW5nIHJldmlldzpcbiIKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZXhlY3V0ZV9vdXRwdXRzKFBhdGNoZXNUb1JldmlldygpLCBOb25lLCBleHBlY3RlZF9zdGRvdXQs
IGV4cGVjdGVkX3N0ZGVycikKLQotICAgIGRlZiB0ZXN0X3Jldmlld2VkX3BhdGNoZXMoc2VsZik6
Ci0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJodHRwOi8vZXhhbXBsZS5jb20vMTk3XG5odHRw
Oi8vZXhhbXBsZS5jb20vMTI4XG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0
cyhSZXZpZXdlZFBhdGNoZXMoKSwgWzQyXSwgZXhwZWN0ZWRfc3Rkb3V0KQotCi0gICAgZGVmIHRl
c3RfdHJlZV9zdGF0dXMoc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJvayAgIDog
QnVpbGRlcjFcbm9rICAgOiBCdWlsZGVyMlxuIgotICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRl
X291dHB1dHMoVHJlZVN0YXR1cygpLCBOb25lLCBleHBlY3RlZF9zdGRvdXQpCkluZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVldWVzLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jb21tYW5kcy9xdWV1ZXMucHkJKHJldmlzaW9u
IDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXVlcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSwyNTIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
Ci0jIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMgQ29weXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24u
Ci0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zCi0KLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRh
dGV0aW1lCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgotZnJvbSBTdHJpbmdJTyBp
bXBvcnQgU3RyaW5nSU8KLQotZnJvbSBtb2R1bGVzLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJy
b3IKLWZyb20gbW9kdWxlcy5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20gbW9kdWxlcy53
ZWJraXRfbG9nZ2luZyBpbXBvcnQgZXJyb3IsIGxvZwotZnJvbSBtb2R1bGVzLm11bHRpY29tbWFu
ZHRvb2wgaW1wb3J0IENvbW1hbmQKLWZyb20gbW9kdWxlcy5wYXRjaGNvbGxlY3Rpb24gaW1wb3J0
IFBlcnNpc3RlbnRQYXRjaENvbGxlY3Rpb24sIFBlcnNpc3RlbnRQYXRjaENvbGxlY3Rpb25EZWxl
Z2F0ZQotZnJvbSBtb2R1bGVzLnN0YXR1c2JvdCBpbXBvcnQgU3RhdHVzQm90Ci1mcm9tIG1vZHVs
ZXMuc3RlcHNlcXVlbmNlIGltcG9ydCBTdGVwU2VxdWVuY2VFcnJvckhhbmRsZXIKLWZyb20gbW9k
dWxlcy5xdWV1ZWVuZ2luZSBpbXBvcnQgUXVldWVFbmdpbmUsIFF1ZXVlRW5naW5lRGVsZWdhdGUK
LQotY2xhc3MgQWJzdHJhY3RRdWV1ZShDb21tYW5kLCBRdWV1ZUVuZ2luZURlbGVnYXRlKToKLSAg
ICB3YXRjaGVycyA9IFsKLSAgICAgICAgIndlYmtpdC1ib3Qtd2F0Y2hlcnNAZ29vZ2xlZ3JvdXBz
LmNvbSIsCi0gICAgXQotCi0gICAgX3Bhc3Nfc3RhdHVzID0gIlBhc3MiCi0gICAgX2ZhaWxfc3Rh
dHVzID0gIkZhaWwiCi0gICAgX2Vycm9yX3N0YXR1cyA9ICJFcnJvciIKLQotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBvcHRpb25zPU5vbmUpOiAjIERlZmF1bHQgdmFsdWVzIHNob3VsZCBuZXZlciBi
ZSBjb2xsZWN0aW9ucyAobGlrZSBbXSkgYXMgZGVmYXVsdCB2YWx1ZXMgYXJlIHNoYXJlZCBiZXR3
ZWVuIGludm9jYXRpb25zCi0gICAgICAgIG9wdGlvbnNfbGlzdCA9IChvcHRpb25zIG9yIFtdKSAr
IFsKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLWNvbmZpcm0iLCBhY3Rpb249InN0b3Jl
X2ZhbHNlIiwgZGVzdD0iY29uZmlybSIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG8gbm90IGFzayB0
aGUgdXNlciBmb3IgY29uZmlybWF0aW9uIGJlZm9yZSBydW5uaW5nIHRoZSBxdWV1ZS4gIERhbmdl
cm91cyEiKSwKLSAgICAgICAgXQotICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYsICJSdW4g
dGhlICVzIiAlIHNlbGYubmFtZSwgb3B0aW9ucz1vcHRpb25zX2xpc3QpCi0KLSAgICBkZWYgX2Nj
X3dhdGNoZXJzKHNlbGYsIGJ1Z19pZCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYu
dG9vbC5idWdzLmFkZF9jY190b19idWcoYnVnX2lkLCBzZWxmLndhdGNoZXJzKQotICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gQ0Mgd2F0Y2hl
cnM6ICVzLiIgJSBlKQotCi0gICAgZGVmIF91cGRhdGVfc3RhdHVzKHNlbGYsIG1lc3NhZ2UsIHBh
dGNoPU5vbmUsIHJlc3VsdHNfZmlsZT1Ob25lKToKLSAgICAgICAgc2VsZi50b29sLnN0YXR1c19i
b3QudXBkYXRlX3N0YXR1cyhzZWxmLm5hbWUsIG1lc3NhZ2UsIHBhdGNoLCByZXN1bHRzX2ZpbGUp
Ci0KLSAgICBkZWYgX2RpZF9wYXNzKHNlbGYsIHBhdGNoKToKLSAgICAgICAgc2VsZi5fdXBkYXRl
X3N0YXR1cyhzZWxmLl9wYXNzX3N0YXR1cywgcGF0Y2gpCi0KLSAgICBkZWYgX2RpZF9mYWlsKHNl
bGYsIHBhdGNoKToKLSAgICAgICAgc2VsZi5fdXBkYXRlX3N0YXR1cyhzZWxmLl9mYWlsX3N0YXR1
cywgcGF0Y2gpCi0KLSAgICBkZWYgX2RpZF9lcnJvcihzZWxmLCBwYXRjaCwgcmVhc29uKToKLSAg
ICAgICAgbWVzc2FnZSA9ICIlczogJXMiICUgKHNlbGYuX2Vycm9yX3N0YXR1cywgcmVhc29uKQot
ICAgICAgICBzZWxmLl91cGRhdGVfc3RhdHVzKG1lc3NhZ2UsIHBhdGNoKQotCi0gICAgZGVmIHF1
ZXVlX2xvZ19wYXRoKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVzLmxvZyIgJSBzZWxmLm5hbWUK
LQotICAgIGRlZiB3b3JrX2l0ZW1fbG9nX3BhdGgoc2VsZiwgcGF0Y2gpOgotICAgICAgICByZXR1
cm4gb3MucGF0aC5qb2luKCIlcy1sb2dzIiAlIHNlbGYubmFtZSwgIiVzLmxvZyIgJSBwYXRjaFsi
YnVnX2lkIl0pCi0KLSAgICBkZWYgYmVnaW5fd29ya19xdWV1ZShzZWxmKToKLSAgICAgICAgbG9n
KCJDQVVUSU9OOiAlcyB3aWxsIGRpc2NhcmQgYWxsIGxvY2FsIGNoYW5nZXMgaW4gXCIlc1wiIiAl
IChzZWxmLm5hbWUsIHNlbGYudG9vbC5zY20oKS5jaGVja291dF9yb290KSkKLSAgICAgICAgaWYg
c2VsZi5vcHRpb25zLmNvbmZpcm06Ci0gICAgICAgICAgICByZXNwb25zZSA9IHJhd19pbnB1dCgi
QXJlIHlvdSBzdXJlPyAgVHlwZSBcInllc1wiIHRvIGNvbnRpbnVlOiAiKQotICAgICAgICAgICAg
aWYgKHJlc3BvbnNlICE9ICJ5ZXMiKToKLSAgICAgICAgICAgICAgICBlcnJvcigiVXNlciBkZWNs
aW5lZC4iKQotICAgICAgICBsb2coIlJ1bm5pbmcgV2ViS2l0ICVzLiIgJSBzZWxmLm5hbWUpCi0K
LSAgICBkZWYgc2hvdWxkX2NvbnRpbnVlX3dvcmtfcXVldWUoc2VsZik6Ci0gICAgICAgIHJldHVy
biBUcnVlCi0KLSAgICBkZWYgbmV4dF93b3JrX2l0ZW0oc2VsZik6Ci0gICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IgotCi0gICAgZGVm
IHNob3VsZF9wcm9jZWVkX3dpdGhfd29ya19pdGVtKHNlbGYsIHdvcmtfaXRlbSk6Ci0gICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50Igot
Ci0gICAgZGVmIHByb2Nlc3Nfd29ya19pdGVtKHNlbGYsIHdvcmtfaXRlbSk6Ci0gICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IgotCi0g
ICAgZGVmIGhhbmRsZV91bmV4cGVjdGVkX2Vycm9yKHNlbGYsIHdvcmtfaXRlbSwgbWVzc2FnZSk6
Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1w
bGVtZW50IgotCi0gICAgZGVmIHJ1bl9idWd6aWxsYV90b29sKHNlbGYsIGFyZ3MpOgotICAgICAg
ICBidWd6aWxsYV90b29sX2FyZ3MgPSBbc2VsZi50b29sLnBhdGgoKV0KLSAgICAgICAgIyBGSVhN
RTogVGhpcyBpcyBhIGhhY2ssIHdlIHNob3VsZCBoYXZlIGEgbW9yZSBnZW5lcmFsIHdheSB0byBw
YXNzIGdsb2JhbCBvcHRpb25zLgotICAgICAgICBidWd6aWxsYV90b29sX2FyZ3MgKz0gWyItLXN0
YXR1cy1ob3N0PSVzIiAlIHNlbGYudG9vbC5zdGF0dXNfYm90LnN0YXR1c2JvdF9ob3N0XQotICAg
ICAgICBidWd6aWxsYV90b29sX2FyZ3MgKz0gbWFwKHN0ciwgYXJncykKLSAgICAgICAgc2VsZi50
b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwoYnVnemlsbGFfdG9vbF9hcmdzKQot
Ci0gICAgZGVmIGxvZ19wcm9ncmVzcyhzZWxmLCBwYXRjaF9pZHMpOgotICAgICAgICBsb2coIiVz
IGluICVzIFslc10iICUgKHBsdXJhbGl6ZSgicGF0Y2giLCBsZW4ocGF0Y2hfaWRzKSksIHNlbGYu
bmFtZSwgIiwgIi5qb2luKG1hcChzdHIsIHBhdGNoX2lkcykpKSkKLQotICAgIGRlZiBleGVjdXRl
KHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wsIGVuZ2luZT1RdWV1ZUVuZ2luZSk6Ci0gICAgICAg
IHNlbGYub3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi50b29sID0gdG9vbAotICAgICAg
ICByZXR1cm4gZW5naW5lKHNlbGYubmFtZSwgc2VsZikucnVuKCkKLQotICAgIEBjbGFzc21ldGhv
ZAotICAgIGRlZiBfdXBkYXRlX3N0YXR1c19mb3Jfc2NyaXB0X2Vycm9yKGNscywgdG9vbCwgc3Rh
dGUsIHNjcmlwdF9lcnJvcik6Ci0gICAgICAgIHJldHVybiB0b29sLnN0YXR1c19ib3QudXBkYXRl
X3N0YXR1cyhjbHMubmFtZSwgc2NyaXB0X2Vycm9yLm1lc3NhZ2UsIHN0YXRlWyJwYXRjaCJdLCBT
dHJpbmdJTyhzY3JpcHRfZXJyb3Iub3V0cHV0KSkKLQotCi1jbGFzcyBDb21taXRRdWV1ZShBYnN0
cmFjdFF1ZXVlLCBTdGVwU2VxdWVuY2VFcnJvckhhbmRsZXIpOgotICAgIG5hbWUgPSAiY29tbWl0
LXF1ZXVlIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgQWJzdHJhY3RRdWV1ZS5f
X2luaXRfXyhzZWxmKQotCi0gICAgIyBBYnN0cmFjdFF1ZXVlIG1ldGhvZHMKLQotICAgIGRlZiBi
ZWdpbl93b3JrX3F1ZXVlKHNlbGYpOgotICAgICAgICBBYnN0cmFjdFF1ZXVlLmJlZ2luX3dvcmtf
cXVldWUoc2VsZikKLQotICAgIGRlZiBuZXh0X3dvcmtfaXRlbShzZWxmKToKLSAgICAgICAgcGF0
Y2hlcyA9IHNlbGYudG9vbC5idWdzLnF1ZXJpZXMuZmV0Y2hfcGF0Y2hlc19mcm9tX2NvbW1pdF9x
dWV1ZShyZWplY3RfaW52YWxpZF9wYXRjaGVzPVRydWUpCi0gICAgICAgIGlmIG5vdCBwYXRjaGVz
OgotICAgICAgICAgICAgc2VsZi5fdXBkYXRlX3N0YXR1cygiRW1wdHkgcXVldWUiKQotICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgIyBPbmx5IGJvdGhlciBsb2dnaW5nIGlmIHdlIGhh
dmUgcGF0Y2hlcyBpbiB0aGUgcXVldWUuCi0gICAgICAgIHNlbGYubG9nX3Byb2dyZXNzKFtwYXRj
aFsnaWQnXSBmb3IgcGF0Y2ggaW4gcGF0Y2hlc10pCi0gICAgICAgIHJldHVybiBwYXRjaGVzWzBd
Ci0KLSAgICBkZWYgc2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0oc2VsZiwgcGF0Y2gpOgot
ICAgICAgICByZWRfYnVpbGRlcnNfbmFtZXMgPSBzZWxmLnRvb2wuYnVpbGRib3QucmVkX2NvcmVf
YnVpbGRlcnNfbmFtZXMoKQotICAgICAgICBpZiByZWRfYnVpbGRlcnNfbmFtZXM6Ci0gICAgICAg
ICAgICByZWRfYnVpbGRlcnNfbmFtZXMgPSBtYXAobGFtYmRhIG5hbWU6ICJcIiVzXCIiICUgbmFt
ZSwgcmVkX2J1aWxkZXJzX25hbWVzKSAjIEFkZCBxdW90ZXMgYXJvdW5kIHRoZSBuYW1lcy4KLSAg
ICAgICAgICAgIHNlbGYuX3VwZGF0ZV9zdGF0dXMoIkJ1aWxkZXJzIFslc10gYXJlIHJlZC4gU2Vl
IGh0dHA6Ly9idWlsZC53ZWJraXQub3JnIiAlICIsICIuam9pbihyZWRfYnVpbGRlcnNfbmFtZXMp
LCBOb25lKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHNlbGYuX3VwZGF0ZV9z
dGF0dXMoIkxhbmRpbmcgcGF0Y2giLCBwYXRjaCkKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAg
IGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHNlbGYuX2NjX3dhdGNoZXJzKHBhdGNoWyJidWdfaWQiXSkKLSAgICAgICAgICAgIHNl
bGYucnVuX2J1Z3ppbGxhX3Rvb2woWyJsYW5kLWF0dGFjaG1lbnQiLCAiLS1mb3JjZS1jbGVhbiIs
ICItLW5vbi1pbnRlcmFjdGl2ZSIsICItLXBhcmVudC1jb21tYW5kPWNvbW1pdC1xdWV1ZSIsICIt
LWJ1aWxkLXN0eWxlPWJvdGgiLCAiLS1xdWlldCIsIHBhdGNoWyJpZCJdXSkKLSAgICAgICAgICAg
IHNlbGYuX2RpZF9wYXNzKHBhdGNoKQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0g
ICAgICAgICAgICBzZWxmLl9kaWRfZmFpbChwYXRjaCkKLSAgICAgICAgICAgIHJhaXNlIGUKLQot
ICAgIGRlZiBoYW5kbGVfdW5leHBlY3RlZF9lcnJvcihzZWxmLCBwYXRjaCwgbWVzc2FnZSk6Ci0g
ICAgICAgIHNlbGYudG9vbC5idWdzLnJlamVjdF9wYXRjaF9mcm9tX2NvbW1pdF9xdWV1ZShwYXRj
aFsiaWQiXSwgbWVzc2FnZSkKLQotICAgICMgU3RlcFNlcXVlbmNlRXJyb3JIYW5kbGVyIG1ldGhv
ZHMKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2Vycm9yX21lc3NhZ2VfZm9yX2J1Zyh0
b29sLCBzdGF0dXNfaWQsIHNjcmlwdF9lcnJvcik6Ci0gICAgICAgIGlmIG5vdCBzY3JpcHRfZXJy
b3Iub3V0cHV0OgotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdF9lcnJvci5tZXNzYWdlX3dpdGhf
b3V0cHV0KCkKLSAgICAgICAgcmVzdWx0c19saW5rID0gdG9vbC5zdGF0dXNfYm90LnJlc3VsdHNf
dXJsX2Zvcl9zdGF0dXMoc3RhdHVzX2lkKQotICAgICAgICByZXR1cm4gIiVzXG5GdWxsIG91dHB1
dDogJXMiICUgKHNjcmlwdF9lcnJvci5tZXNzYWdlX3dpdGhfb3V0cHV0KCksIHJlc3VsdHNfbGlu
aykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBoYW5kbGVfc2NyaXB0X2Vycm9yKGNscywg
dG9vbCwgc3RhdGUsIHNjcmlwdF9lcnJvcik6Ci0gICAgICAgIHN0YXR1c19pZCA9IGNscy5fdXBk
YXRlX3N0YXR1c19mb3Jfc2NyaXB0X2Vycm9yKHRvb2wsIHN0YXRlLCBzY3JpcHRfZXJyb3IpCi0g
ICAgICAgIHRvb2wuYnVncy5yZWplY3RfcGF0Y2hfZnJvbV9jb21taXRfcXVldWUoc3RhdGVbInBh
dGNoIl1bImlkIl0sIGNscy5fZXJyb3JfbWVzc2FnZV9mb3JfYnVnKHRvb2wsIHN0YXR1c19pZCwg
c2NyaXB0X2Vycm9yKSkKLQotCi1jbGFzcyBBYnN0cmFjdFJldmlld1F1ZXVlKEFic3RyYWN0UXVl
dWUsIFBlcnNpc3RlbnRQYXRjaENvbGxlY3Rpb25EZWxlZ2F0ZSwgU3RlcFNlcXVlbmNlRXJyb3JI
YW5kbGVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucz1Ob25lKToKLSAgICAgICAg
QWJzdHJhY3RRdWV1ZS5fX2luaXRfXyhzZWxmLCBvcHRpb25zKQotCi0gICAgIyBQZXJzaXN0ZW50
UGF0Y2hDb2xsZWN0aW9uRGVsZWdhdGUgbWV0aG9kcwotCi0gICAgZGVmIGNvbGxlY3Rpb25fbmFt
ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYubmFtZQotCi0gICAgZGVmIGZldGNoX3BvdGVu
dGlhbF9wYXRjaF9pZHMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnRvb2wuYnVncy5xdWVy
aWVzLmZldGNoX2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3X3F1ZXVlKCkKLQotICAgIGRlZiBz
dGF0dXNfc2VydmVyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50b29sLnN0YXR1c19ib3QK
LQotICAgICMgQWJzdHJhY3RRdWV1ZSBtZXRob2RzCi0KLSAgICBkZWYgYmVnaW5fd29ya19xdWV1
ZShzZWxmKToKLSAgICAgICAgQWJzdHJhY3RRdWV1ZS5iZWdpbl93b3JrX3F1ZXVlKHNlbGYpCi0g
ICAgICAgIHNlbGYuX3BhdGNoZXMgPSBQZXJzaXN0ZW50UGF0Y2hDb2xsZWN0aW9uKHNlbGYpCi0K
LSAgICBkZWYgbmV4dF93b3JrX2l0ZW0oc2VsZik6Ci0gICAgICAgIHBhdGNoX2lkID0gc2VsZi5f
cGF0Y2hlcy5uZXh0KCkKLSAgICAgICAgaWYgcGF0Y2hfaWQ6Ci0gICAgICAgICAgICByZXR1cm4g
c2VsZi50b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudChwYXRjaF9pZCkKLSAgICAgICAgc2VsZi5f
dXBkYXRlX3N0YXR1cygiRW1wdHkgcXVldWUiKQotCi0gICAgZGVmIHNob3VsZF9wcm9jZWVkX3dp
dGhfd29ya19pdGVtKHNlbGYsIHBhdGNoKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYgcHJvY2Vzc193b3Jr
X2l0ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAi
c3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiBoYW5kbGVfdW5leHBlY3RlZF9l
cnJvcihzZWxmLCBwYXRjaCwgbWVzc2FnZSk6Ci0gICAgICAgIGxvZyhtZXNzYWdlKQotCi0gICAg
IyBTdGVwU2VxdWVuY2VFcnJvckhhbmRsZXIgbWV0aG9kcwotCi0gICAgQGNsYXNzbWV0aG9kCi0g
ICAgZGVmIGhhbmRsZV9zY3JpcHRfZXJyb3IoY2xzLCB0b29sLCBzdGF0ZSwgc2NyaXB0X2Vycm9y
KToKLSAgICAgICAgbG9nKHNjcmlwdF9lcnJvci5tZXNzYWdlX3dpdGhfb3V0cHV0KCkpCi0KLQot
Y2xhc3MgU3R5bGVRdWV1ZShBYnN0cmFjdFJldmlld1F1ZXVlKToKLSAgICBuYW1lID0gInN0eWxl
LXF1ZXVlIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgQWJzdHJhY3RSZXZpZXdR
dWV1ZS5fX2luaXRfXyhzZWxmKQotCi0gICAgZGVmIHNob3VsZF9wcm9jZWVkX3dpdGhfd29ya19p
dGVtKHNlbGYsIHBhdGNoKToKLSAgICAgICAgc2VsZi5fdXBkYXRlX3N0YXR1cygiQ2hlY2tpbmcg
c3R5bGUiLCBwYXRjaCkKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBwcm9jZXNzX3dv
cmtfaXRlbShzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYucnVu
X2J1Z3ppbGxhX3Rvb2woWyJjaGVjay1zdHlsZSIsICItLWZvcmNlLWNsZWFuIiwgIi0tbm9uLWlu
dGVyYWN0aXZlIiwgIi0tcGFyZW50LWNvbW1hbmQ9c3R5bGUtcXVldWUiLCBwYXRjaFsiaWQiXV0p
Ci0gICAgICAgICAgICBtZXNzYWdlID0gIiVzIHJhbiBjaGVjay13ZWJraXQtc3R5bGUgb24gYXR0
YWNobWVudCAlcyB3aXRob3V0IGFueSBlcnJvcnMuIiAlIChzZWxmLm5hbWUsIHBhdGNoWyJpZCJd
KQotICAgICAgICAgICAgc2VsZi50b29sLmJ1Z3MucG9zdF9jb21tZW50X3RvX2J1ZyhwYXRjaFsi
YnVnX2lkIl0sIG1lc3NhZ2UsIGNjPXNlbGYud2F0Y2hlcnMpCi0gICAgICAgICAgICBzZWxmLl9k
aWRfcGFzcyhwYXRjaCkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAg
ICAgc2VsZi5fZGlkX2ZhaWwocGF0Y2gpCi0gICAgICAgICAgICByYWlzZSBlCi0KLSAgICBAY2xh
c3NtZXRob2QKLSAgICBkZWYgaGFuZGxlX3NjcmlwdF9lcnJvcihjbHMsIHRvb2wsIHN0YXRlLCBz
Y3JpcHRfZXJyb3IpOgotICAgICAgICBzdGF0dXNfaWQgPSBjbHMuX3VwZGF0ZV9zdGF0dXNfZm9y
X3NjcmlwdF9lcnJvcih0b29sLCBzdGF0ZSwgc2NyaXB0X2Vycm9yKQotICAgICAgICBpZiBub3Qg
c2NyaXB0X2Vycm9yLmNvbW1hbmRfbmFtZSgpID09ICJjaGVjay13ZWJraXQtc3R5bGUiOgotICAg
ICAgICAgICAgcmV0dXJuCi0gICAgICAgIG1lc3NhZ2UgPSAiQXR0YWNobWVudCAlcyBkaWQgbm90
IHBhc3MgJXM6XG5cbiVzIiAlIChzdGF0ZVsicGF0Y2giXVsiaWQiXSwgY2xzLm5hbWUsIHNjcmlw
dF9lcnJvci5tZXNzYWdlX3dpdGhfb3V0cHV0KG91dHB1dF9saW1pdD0zKjEwMjQpKQotICAgICAg
ICB0b29sLmJ1Z3MucG9zdF9jb21tZW50X3RvX2J1ZyhzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0s
IG1lc3NhZ2UsIGNjPWNscy53YXRjaGVycykKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9k
dWxlcy9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5weQkocmV2aXNpb24g
NTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVldWVzX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIG1vZHVsZXMuY29tbWFuZHMuY29t
bWFuZHRlc3QgaW1wb3J0IENvbW1hbmRzVGVzdAotZnJvbSBtb2R1bGVzLmNvbW1hbmRzLnF1ZXVl
cyBpbXBvcnQgKgotZnJvbSBtb2R1bGVzLmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVl
c1Rlc3QKLWZyb20gbW9kdWxlcy5tb2NrX2J1Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxh
VG9vbAotZnJvbSBtb2R1bGVzLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKLQot
Ci1jbGFzcyBUZXN0UXVldWUoQWJzdHJhY3RRdWV1ZSk6Ci0gICAgbmFtZSA9ICJ0ZXN0LXF1ZXVl
IgotCi0KLWNsYXNzIEFic3RyYWN0UXVldWVUZXN0KENvbW1hbmRzVGVzdCk6Ci0gICAgZGVmIF9h
c3NlcnRfbG9nX3Byb2dyZXNzX291dHB1dChzZWxmLCBwYXRjaF9pZHMsIHByb2dyZXNzX291dHB1
dCk6Ci0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBUZXN0UXVl
dWUoKS5sb2dfcHJvZ3Jlc3MsIFtwYXRjaF9pZHNdLCBleHBlY3RlZF9zdGRlcnI9cHJvZ3Jlc3Nf
b3V0cHV0KQotCi0gICAgZGVmIHRlc3RfbG9nX3Byb2dyZXNzKHNlbGYpOgotICAgICAgICBzZWxm
Ll9hc3NlcnRfbG9nX3Byb2dyZXNzX291dHB1dChbMSwyLDNdLCAiMyBwYXRjaGVzIGluIHRlc3Qt
cXVldWUgWzEsIDIsIDNdXG4iKQotICAgICAgICBzZWxmLl9hc3NlcnRfbG9nX3Byb2dyZXNzX291
dHB1dChbIjEiLCIyIiwiMyJdLCAiMyBwYXRjaGVzIGluIHRlc3QtcXVldWUgWzEsIDIsIDNdXG4i
KQotICAgICAgICBzZWxmLl9hc3NlcnRfbG9nX3Byb2dyZXNzX291dHB1dChbMV0sICIxIHBhdGNo
IGluIHRlc3QtcXVldWUgWzFdXG4iKQotCi0gICAgZGVmIF9hc3NlcnRfcnVuX2J1Z3ppbGxhX3Rv
b2woc2VsZiwgcnVuX2FyZ3MpOgotICAgICAgICBxdWV1ZSA9IFRlc3RRdWV1ZSgpCi0gICAgICAg
IHRvb2wgPSBNb2NrQnVnemlsbGFUb29sKCkKLSAgICAgICAgcXVldWUuYmluZF90b190b29sKHRv
b2wpCi0KLSAgICAgICAgcXVldWUucnVuX2J1Z3ppbGxhX3Rvb2wocnVuX2FyZ3MpCi0gICAgICAg
IGV4cGVjdGVkX3J1bl9hcmdzID0gWyJlY2hvIiwgIi0tc3RhdHVzLWhvc3Q9ZXhhbXBsZS5jb20i
XSArIG1hcChzdHIsIHJ1bl9hcmdzKQotICAgICAgICB0b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Ro
cm93X2lmX2ZhaWwuYXNzZXJ0X2NhbGxlZF93aXRoKGV4cGVjdGVkX3J1bl9hcmdzKQotCi0gICAg
ZGVmIHRlc3RfcnVuX2J1Z3ppbGxhX3Rvb2woc2VsZik6Ci0gICAgICAgIHNlbGYuX2Fzc2VydF9y
dW5fYnVnemlsbGFfdG9vbChbMV0pCi0gICAgICAgIHNlbGYuX2Fzc2VydF9ydW5fYnVnemlsbGFf
dG9vbChbIm9uZSIsIDJdKQotCi0KLWNsYXNzIENvbW1pdFF1ZXVlVGVzdChRdWV1ZXNUZXN0KToK
LSAgICBkZWYgdGVzdF9zdHlsZV9xdWV1ZShzZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJy
ID0gewotICAgICAgICAgICAgImJlZ2luX3dvcmtfcXVldWUiIDogIkNBVVRJT046IGNvbW1pdC1x
dWV1ZSB3aWxsIGRpc2NhcmQgYWxsIGxvY2FsIGNoYW5nZXMgaW4gXCIlc1wiXG5SdW5uaW5nIFdl
YktpdCBjb21taXQtcXVldWUuXG4iICUgb3MuZ2V0Y3dkKCksCi0gICAgICAgICAgICAibmV4dF93
b3JrX2l0ZW0iIDogIjIgcGF0Y2hlcyBpbiBjb21taXQtcXVldWUgWzE5NywgMTI4XVxuIiwKLSAg
ICAgICAgfQotICAgICAgICBzZWxmLmFzc2VydF9xdWV1ZV9vdXRwdXRzKENvbW1pdFF1ZXVlKCks
IGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLQotY2xhc3MgU3R5bGVRdWV1ZVRl
c3QoUXVldWVzVGVzdCk6Ci0gICAgZGVmIHRlc3Rfc3R5bGVfcXVldWUoc2VsZik6Ci0gICAgICAg
IGV4cGVjdGVkX3N0ZGVyciA9IHsKLSAgICAgICAgICAgICJiZWdpbl93b3JrX3F1ZXVlIiA6ICJD
QVVUSU9OOiBzdHlsZS1xdWV1ZSB3aWxsIGRpc2NhcmQgYWxsIGxvY2FsIGNoYW5nZXMgaW4gXCIl
c1wiXG5SdW5uaW5nIFdlYktpdCBzdHlsZS1xdWV1ZS5cbiIgJSBvcy5nZXRjd2QoKSwKLSAgICAg
ICAgICAgICJoYW5kbGVfdW5leHBlY3RlZF9lcnJvciIgOiAiTW9jayBlcnJvciBtZXNzYWdlXG4i
LAotICAgICAgICB9Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3F1ZXVlX291dHB1dHMoU3R5bGVRdWV1
ZSgpLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQpJbmRleDogV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXVlc3Rlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXVlc3Rlc3QucHkJKHJldmlzaW9u
IDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXVlc3Rl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsOTggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWlt
cG9ydCB1bml0dGVzdAotCi1mcm9tIG1vZHVsZXMubW9jayBpbXBvcnQgTW9jawotZnJvbSBtb2R1
bGVzLm1vY2tfYnVnemlsbGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFUb29sCi1mcm9tIG1vZHVs
ZXMub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotCi0KLWNsYXNzIE1vY2tRdWV1
ZUVuZ2luZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBxdWV1ZSk6Ci0g
ICAgICAgIHBhc3MKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHBhc3MKLQotCi1jbGFz
cyBRdWV1ZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtb2NrX3dvcmtfaXRlbSA9IHsK
LSAgICAgICAgImlkIiA6IDEyMzQsCi0gICAgICAgICJidWdfaWQiIDogMzQ1LAotICAgICAgICAi
YXR0YWNoZXJfZW1haWwiOiAiYWRhbUBleGFtcGxlLmNvbSIsCi0gICAgfQotCi0gICAgZGVmIGFz
c2VydF9xdWV1ZV9vdXRwdXRzKHNlbGYsIHF1ZXVlLCBhcmdzPU5vbmUsIHdvcmtfaXRlbT1Ob25l
LCBleHBlY3RlZF9zdGRvdXQ9Tm9uZSwgZXhwZWN0ZWRfc3RkZXJyPU5vbmUsIG9wdGlvbnM9TW9j
aygpLCB0b29sPU1vY2tCdWd6aWxsYVRvb2woKSk6Ci0gICAgICAgIGlmIG5vdCBleHBlY3RlZF9z
dGRvdXQ6Ci0gICAgICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSB7fQotICAgICAgICBpZiBub3Qg
ZXhwZWN0ZWRfc3RkZXJyOgotICAgICAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0ge30KLSAgICAg
ICAgaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICBhcmdzID0gW10KLSAgICAgICAgaWYgbm90IHdv
cmtfaXRlbToKLSAgICAgICAgICAgIHdvcmtfaXRlbSA9IHNlbGYubW9ja193b3JrX2l0ZW0KLSAg
ICAgICAgb3B0aW9ucy5jb25maXJtID0gRmFsc2UgIyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB0
b29sLnVzZXIgdGhhdCB3ZSBjYW4gbW9jay4KLQotICAgICAgICBxdWV1ZS5leGVjdXRlKG9wdGlv
bnMsIGFyZ3MsIHRvb2wsIGVuZ2luZT1Nb2NrUXVldWVFbmdpbmUpCi0KLSAgICAgICAgT3V0cHV0
Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsCi0gICAgICAgICAgICAgICAgcXVldWUucXVl
dWVfbG9nX3BhdGgsCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0
ZG91dC5nZXQoInF1ZXVlX2xvZ19wYXRoIiwgIiIpLAotICAgICAgICAgICAgICAgIGV4cGVjdGVk
X3N0ZGVycj1leHBlY3RlZF9zdGRlcnIuZ2V0KCJxdWV1ZV9sb2dfcGF0aCIsICIiKSkKLSAgICAg
ICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsCi0gICAgICAgICAgICAgICAg
cXVldWUud29ya19pdGVtX2xvZ19wYXRoLAotICAgICAgICAgICAgICAgIGFyZ3M9W3dvcmtfaXRl
bV0sCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dC5nZXQo
IndvcmtfaXRlbV9sb2dfcGF0aCIsICIiKSwKLSAgICAgICAgICAgICAgICBleHBlY3RlZF9zdGRl
cnI9ZXhwZWN0ZWRfc3RkZXJyLmdldCgid29ya19pdGVtX2xvZ19wYXRoIiwgIiIpKQotICAgICAg
ICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwKLSAgICAgICAgICAgICAgICBx
dWV1ZS5iZWdpbl93b3JrX3F1ZXVlLAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dD1l
eHBlY3RlZF9zdGRvdXQuZ2V0KCJiZWdpbl93b3JrX3F1ZXVlIiwgIiIpLAotICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIuZ2V0KCJiZWdpbl93b3JrX3F1ZXVl
IiwgIiIpKQotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwKLSAg
ICAgICAgICAgICAgICBxdWV1ZS5zaG91bGRfY29udGludWVfd29ya19xdWV1ZSwKLSAgICAgICAg
ICAgICAgICBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LmdldCgic2hvdWxkX2NvbnRp
bnVlX3dvcmtfcXVldWUiLCAiIiksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIuZ2V0
KCJzaG91bGRfY29udGludWVfd29ya19xdWV1ZSIsICIiKSkKLSAgICAgICAgT3V0cHV0Q2FwdHVy
ZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsCi0gICAgICAgICAgICAgICAgcXVldWUubmV4dF93b3Jr
X2l0ZW0sCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dC5n
ZXQoIm5leHRfd29ya19pdGVtIiwgIiIpLAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0ZGVy
cj1leHBlY3RlZF9zdGRlcnIuZ2V0KCJuZXh0X3dvcmtfaXRlbSIsICIiKSkKLSAgICAgICAgT3V0
cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsCi0gICAgICAgICAgICAgICAgcXVldWUu
c2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0sCi0gICAgICAgICAgICAgICAgYXJncz1bd29y
a19pdGVtXSwKLSAgICAgICAgICAgICAgICBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0
LmdldCgic2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0iLCAiIiksCi0gICAgICAgICAgICAg
ICAgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVyci5nZXQoInNob3VsZF9wcm9jZWVkX3dp
dGhfd29ya19pdGVtIiwgIiIpKQotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1
dHMoc2VsZiwKLSAgICAgICAgICAgICAgICBxdWV1ZS5wcm9jZXNzX3dvcmtfaXRlbSwKLSAgICAg
ICAgICAgICAgICBhcmdzPVt3b3JrX2l0ZW1dLAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0
ZG91dD1leHBlY3RlZF9zdGRvdXQuZ2V0KCJwcm9jZXNzX3dvcmtfaXRlbSIsICIiKSwKLSAgICAg
ICAgICAgICAgICBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyLmdldCgicHJvY2Vzc193
b3JrX2l0ZW0iLCAiIikpCi0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhz
ZWxmLAotICAgICAgICAgICAgICAgIHF1ZXVlLmhhbmRsZV91bmV4cGVjdGVkX2Vycm9yLAotICAg
ICAgICAgICAgICAgIGFyZ3M9W3dvcmtfaXRlbSwgIk1vY2sgZXJyb3IgbWVzc2FnZSJdLAotICAg
ICAgICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQuZ2V0KCJoYW5kbGVf
dW5leHBlY3RlZF9lcnJvciIsICIiKSwKLSAgICAgICAgICAgICAgICBleHBlY3RlZF9zdGRlcnI9
ZXhwZWN0ZWRfc3RkZXJyLmdldCgiaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3IiLCAiIikpCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvdXBsb2FkLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jb21tYW5kcy91cGxvYWQucHkJKHJl
dmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3Vw
bG9hZC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzODQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmli
dXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBT
dHJpbmdJTwotaW1wb3J0IHN5cwotCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgot
Ci1mcm9tIG1vZHVsZXMuYnVnemlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAotZnJvbSBtb2R1bGVz
LmJ1aWxkc3RlcHMgaW1wb3J0IFByZXBhcmVDaGFuZ2VMb2dTdGVwLCBFZGl0Q2hhbmdlTG9nU3Rl
cCwgQ29uZmlybURpZmZTdGVwLCBDb21tYW5kT3B0aW9ucywgT2Jzb2xldGVQYXRjaGVzT25CdWdT
dGVwLCBQb3N0RGlmZlRvQnVnU3RlcCwgUHJvbXB0Rm9yQnVnT3JUaXRsZVN0ZXAsIENyZWF0ZUJ1
Z1N0ZXAKLWZyb20gbW9kdWxlcy5jb21tYW5kcy5kb3dubG9hZCBpbXBvcnQgQWJzdHJhY3RTZXF1
ZW5jZWRDb21tbWFuZAotZnJvbSBtb2R1bGVzLmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9m
cm9tX3N2bl9yZXZpc2lvbgotZnJvbSBtb2R1bGVzLmNvbW1pdHRlcnMgaW1wb3J0IENvbW1pdHRl
ckxpc3QKLWZyb20gbW9kdWxlcy5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20gbW9kdWxl
cy53ZWJraXRfbG9nZ2luZyBpbXBvcnQgZXJyb3IsIGxvZwotZnJvbSBtb2R1bGVzLm11bHRpY29t
bWFuZHRvb2wgaW1wb3J0IENvbW1hbmQsIEFic3RyYWN0RGVjbGFyYXRpdmVDb21tbWFuZAotCi0j
IEZJWE1FOiBSZXF1aXJlcyB1bml0IHRlc3QuCi1jbGFzcyBDb21taXRNZXNzYWdlRm9yQ3VycmVu
dERpZmYoQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJjb21taXQtbWVzc2FnZSIKLSAgICBkZWYgX19p
bml0X18oc2VsZik6Ci0gICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgIlByaW50IGEgY29t
bWl0IG1lc3NhZ2Ugc3VpdGFibGUgZm9yIHRoZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIikKLQotICAg
IGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBvcy5jaGRp
cih0b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIHByaW50ICIlcyIgJSB0b29sLnNj
bSgpLmNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdCgpLm1lc3NhZ2UoKQotCi0KLWNsYXNz
IEFzc2lnblRvQ29tbWl0dGVyKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tbWFuZCk6Ci0gICAgbmFt
ZSA9ICJhc3NpZ24tdG8tY29tbWl0dGVyIgotICAgIGhlbHBfdGV4dCA9ICJBc3NpZ24gYnVnIHRv
IHdob2V2ZXIgYXR0YWNoZWQgdGhlIG1vc3QgcmVjZW50IHIrJ2QgcGF0Y2giCi0KLSAgICBkZWYg
X2Fzc2lnbl9idWdfdG9fbGFzdF9wYXRjaF9hdHRhY2hlcihzZWxmLCBidWdfaWQpOgotICAgICAg
ICBjb21taXR0ZXJzID0gQ29tbWl0dGVyTGlzdCgpCi0gICAgICAgIGJ1ZyA9IHNlbGYudG9vbC5i
dWdzLmZldGNoX2J1ZyhidWdfaWQpCi0gICAgICAgIGFzc2lnbmVkX3RvX2VtYWlsID0gYnVnLmFz
c2lnbmVkX3RvX2VtYWlsKCkKLSAgICAgICAgaWYgYXNzaWduZWRfdG9fZW1haWwgIT0gc2VsZi50
b29sLmJ1Z3MudW5hc3NpZ25lZF9lbWFpbDoKLSAgICAgICAgICAgIGxvZygiQnVnICVzIGlzIGFs
cmVhZHkgYXNzaWduZWQgdG8gJXMgKCVzKS4iICUgKGJ1Z19pZCwgYXNzaWduZWRfdG9fZW1haWws
IGNvbW1pdHRlcnMuY29tbWl0dGVyX2J5X2VtYWlsKGFzc2lnbmVkX3RvX2VtYWlsKSkpCi0gICAg
ICAgICAgICByZXR1cm4KLQotICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBjYWxsIGEgcmV2
aWV3ZWRfcGF0Y2hlcygpIG1ldGhvZCBvbiBidWcgaW5zdGVhZCBvZiByZS1mZXRjaGluZy4KLSAg
ICAgICAgcmV2aWV3ZWRfcGF0Y2hlcyA9IHNlbGYudG9vbC5idWdzLmZldGNoX3Jldmlld2VkX3Bh
dGNoZXNfZnJvbV9idWcoYnVnX2lkKQotICAgICAgICBpZiBub3QgcmV2aWV3ZWRfcGF0Y2hlczoK
LSAgICAgICAgICAgIGxvZygiQnVnICVzIGhhcyBubyBub24tb2Jzb2xldGUgcGF0Y2hlcywgaWdu
b3JpbmcuIiAlIGJ1Z19pZCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBsYXRlc3RfcGF0
Y2ggPSByZXZpZXdlZF9wYXRjaGVzWy0xXQotICAgICAgICBhdHRhY2hlcl9lbWFpbCA9IGxhdGVz
dF9wYXRjaFsiYXR0YWNoZXJfZW1haWwiXQotICAgICAgICBjb21taXR0ZXIgPSBjb21taXR0ZXJz
LmNvbW1pdHRlcl9ieV9lbWFpbChhdHRhY2hlcl9lbWFpbCkKLSAgICAgICAgaWYgbm90IGNvbW1p
dHRlcjoKLSAgICAgICAgICAgIGxvZygiQXR0YWNoZXIgJXMgaXMgbm90IGEgY29tbWl0dGVyLiAg
QnVnICVzIGxpa2VseSBuZWVkcyBjb21taXQtcXVldWUrLiIgJSAoYXR0YWNoZXJfZW1haWwsIGJ1
Z19pZCkpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICByZWFzc2lnbl9tZXNzYWdlID0g
IkF0dGFjaG1lbnQgJXMgd2FzIHBvc3RlZCBieSBhIGNvbW1pdHRlciBhbmQgaGFzIHJldmlldyss
IGFzc2lnbmluZyB0byAlcyBmb3IgY29tbWl0LiIgJSAobGF0ZXN0X3BhdGNoWyJpZCJdLCBjb21t
aXR0ZXIuZnVsbF9uYW1lKQotICAgICAgICBzZWxmLnRvb2wuYnVncy5yZWFzc2lnbl9idWcoYnVn
X2lkLCBjb21taXR0ZXIuYnVnemlsbGFfZW1haWwoKSwgcmVhc3NpZ25fbWVzc2FnZSkKLQotICAg
IGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBmb3IgYnVn
X2lkIGluIHRvb2wuYnVncy5xdWVyaWVzLmZldGNoX2J1Z19pZHNfZnJvbV9wZW5kaW5nX2NvbW1p
dF9saXN0KCk6Ci0gICAgICAgICAgICBzZWxmLl9hc3NpZ25fYnVnX3RvX2xhc3RfcGF0Y2hfYXR0
YWNoZXIoYnVnX2lkKQotCi0KLWNsYXNzIE9ic29sZXRlQXR0YWNobWVudHMoQWJzdHJhY3RTZXF1
ZW5jZWRDb21tbWFuZCk6Ci0gICAgbmFtZSA9ICJvYnNvbGV0ZS1hdHRhY2htZW50cyIKLSAgICBo
ZWxwX3RleHQgPSAiTWFyayBhbGwgYXR0YWNobWVudHMgb24gYSBidWcgYXMgb2Jzb2xldGUiCi0g
ICAgYXJndW1lbnRfbmFtZXMgPSAiQlVHSUQiCi0gICAgc3RlcHMgPSBbCi0gICAgICAgIE9ic29s
ZXRlUGF0Y2hlc09uQnVnU3RlcCwKLSAgICBdCi0KLSAgICBkZWYgX3ByZXBhcmVfc3RhdGUoc2Vs
Ziwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHJldHVybiB7ICJidWdfaWQiIDogYXJn
c1swXSB9Ci0KLQotY2xhc3MgUG9zdERpZmYoQWJzdHJhY3RTZXF1ZW5jZWRDb21tbWFuZCk6Ci0g
ICAgbmFtZSA9ICJwb3N0LWRpZmYiCi0gICAgaGVscF90ZXh0ID0gIkF0dGFjaCB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeSBkaWZmIHRvIGEgYnVnIGFzIGEgcGF0Y2ggZmlsZSIKLSAgICBh
cmd1bWVudF9uYW1lcyA9ICJbQlVHSURdIgotICAgIHNob3dfaW5fbWFpbl9oZWxwID0gVHJ1ZQot
ICAgIHN0ZXBzID0gWwotICAgICAgICBDb25maXJtRGlmZlN0ZXAsCi0gICAgICAgIE9ic29sZXRl
UGF0Y2hlc09uQnVnU3RlcCwKLSAgICAgICAgUG9zdERpZmZUb0J1Z1N0ZXAsCi0gICAgXQotCi0g
ICAgZGVmIF9wcmVwYXJlX3N0YXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAg
ICAjIFBlcmZlciBhIGJ1ZyBpZCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgb3ZlciBhIGJ1ZyB1cmwg
aW4gdGhlIGRpZmYgKGkuZS4gQ2hhbmdlTG9ncykuCi0gICAgICAgIHN0YXRlID0ge30KLSAgICAg
ICAgYnVnX2lkID0gYXJncyBhbmQgYXJnc1swXQotICAgICAgICBpZiBub3QgYnVnX2lkOgotICAg
ICAgICAgICAgc3RhdGVbImRpZmYiXSA9IHRvb2wuc2NtKCkuY3JlYXRlX3BhdGNoKCkKLSAgICAg
ICAgICAgIGJ1Z19pZCA9IHBhcnNlX2J1Z19pZChzdGF0ZVsiZGlmZiJdKQotICAgICAgICBpZiBu
b3QgYnVnX2lkOgotICAgICAgICAgICAgZXJyb3IoIk5vIGJ1ZyBpZCBwYXNzZWQgYW5kIG5vIGJ1
ZyB1cmwgZm91bmQgaW4gZGlmZiwgY2FuJ3QgcG9zdC4iKQotICAgICAgICBzdGF0ZVsiYnVnX2lk
Il0gPSBidWdfaWQKLSAgICAgICAgcmV0dXJuIHN0YXRlCi0KLQotY2xhc3MgUHJlcGFyZURpZmYo
QWJzdHJhY3RTZXF1ZW5jZWRDb21tbWFuZCk6Ci0gICAgbmFtZSA9ICJwcmVwYXJlLWRpZmYiCi0g
ICAgaGVscF90ZXh0ID0gIkNyZWF0ZXMgYSBidWcgKG9yIHByb21wdHMgZm9yIGFuIGV4aXN0aW5n
IGJ1ZykgYW5kIHByZXBhcmVzIHRoZSBDaGFuZ2VMb2dzIgotICAgIGFyZ3VtZW50X25hbWVzID0g
IltCVUdJRF0iCi0gICAgc3RlcHMgPSBbCi0gICAgICAgIFByb21wdEZvckJ1Z09yVGl0bGVTdGVw
LAotICAgICAgICBDcmVhdGVCdWdTdGVwLAotICAgICAgICBQcmVwYXJlQ2hhbmdlTG9nU3RlcCwK
LSAgICBdCi0KLSAgICBkZWYgX3ByZXBhcmVfc3RhdGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9v
bCk6Ci0gICAgICAgIGJ1Z19pZCA9IGFyZ3MgYW5kIGFyZ3NbMF0KLSAgICAgICAgcmV0dXJuIHsg
ImJ1Z19pZCIgOiBidWdfaWQgfQotCi0KLWNsYXNzIENyZWF0ZVJldmlldyhBYnN0cmFjdFNlcXVl
bmNlZENvbW1tYW5kKToKLSAgICBuYW1lID0gImNyZWF0ZS1yZXZpZXciCi0gICAgaGVscF90ZXh0
ID0gIkFkZHMgYSBDaGFuZ2VMb2cgdG8gdGhlIGN1cnJlbnQgZGlmZiBhbmQgcG9zdHMgaXQgdG8g
YSAocG9zc2libHkgbmV3KSBidWciCi0gICAgYXJndW1lbnRfbmFtZXMgPSAiW0JVR0lEXSIKLSAg
ICBzdGVwcyA9IFsKLSAgICAgICAgUHJvbXB0Rm9yQnVnT3JUaXRsZVN0ZXAsCi0gICAgICAgIENy
ZWF0ZUJ1Z1N0ZXAsCi0gICAgICAgIFByZXBhcmVDaGFuZ2VMb2dTdGVwLAotICAgICAgICBFZGl0
Q2hhbmdlTG9nU3RlcCwKLSAgICAgICAgQ29uZmlybURpZmZTdGVwLAotICAgICAgICBPYnNvbGV0
ZVBhdGNoZXNPbkJ1Z1N0ZXAsCi0gICAgICAgIFBvc3REaWZmVG9CdWdTdGVwLAotICAgIF0KLQot
ICAgIGRlZiBfcHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAg
ICAgYnVnX2lkID0gYXJncyBhbmQgYXJnc1swXQotICAgICAgICByZXR1cm4geyAiYnVnX2lkIiA6
IGJ1Z19pZCB9Ci0KLQotY2xhc3MgRWRpdENoYW5nZUxvZyhBYnN0cmFjdFNlcXVlbmNlZENvbW1t
YW5kKToKLSAgICBuYW1lID0gImVkaXQtY2hhbmdlbG9nIgotICAgIGhlbHBfdGV4dCA9ICJPcGVu
cyBtb2RpZmllZCBDaGFuZ2VMb2dzIGluICRFRElUT1IiCi0gICAgc3RlcHMgPSBbCi0gICAgICAg
IEVkaXRDaGFuZ2VMb2dTdGVwLAotICAgIF0KLQotCi1jbGFzcyBQb3N0Q29tbWl0cyhDb21tYW5k
KToKLSAgICBuYW1lID0gInBvc3QtY29tbWl0cyIKLSAgICBzaG93X2luX21haW5faGVscCA9IFRy
dWUKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBbCi0gICAgICAg
ICAgICBtYWtlX29wdGlvbigiLWIiLCAiLS1idWctaWQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0i
c3RyaW5nIiwgZGVzdD0iYnVnX2lkIiwgaGVscD0iU3BlY2lmeSBidWcgaWQgaWYgbm8gVVJMIGlz
IHByb3ZpZGVkIGluIHRoZSBjb21taXQgbG9nLiIpLAotICAgICAgICAgICAgbWFrZV9vcHRpb24o
Ii0tYWRkLWxvZy1hcy1jb21tZW50IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iYWRkX2xv
Z19hc19jb21tZW50IiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iQWRkIGNvbW1pdCBsb2cgbWVzc2Fn
ZSBhcyBhIGNvbW1lbnQgd2hlbiB1cGxvYWRpbmcgdGhlIHBhdGNoLiIpLAotICAgICAgICAgICAg
bWFrZV9vcHRpb24oIi1tIiwgIi0tZGVzY3JpcHRpb24iLCBhY3Rpb249InN0b3JlIiwgdHlwZT0i
c3RyaW5nIiwgZGVzdD0iZGVzY3JpcHRpb24iLCBoZWxwPSJEZXNjcmlwdGlvbiBzdHJpbmcgZm9y
IHRoZSBhdHRhY2htZW50IChkZWZhdWx0OiBkZXNjcmlwdGlvbiBmcm9tIGNvbW1pdCBtZXNzYWdl
KSIpLAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMub2Jzb2xldGVfcGF0Y2hlcywKLSAgICAg
ICAgICAgIENvbW1hbmRPcHRpb25zLnJldmlldywKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25z
LnJlcXVlc3RfY29tbWl0LAotICAgICAgICBdCi0gICAgICAgIENvbW1hbmQuX19pbml0X18oc2Vs
ZiwgIkF0dGFjaCBhIHJhbmdlIG9mIGxvY2FsIGNvbW1pdHMgdG8gYnVncyBhcyBwYXRjaCBmaWxl
cyIsICJDT01NSVRJU0giLCBvcHRpb25zPW9wdGlvbnMsIHJlcXVpcmVzX2xvY2FsX2NvbW1pdHM9
VHJ1ZSkKLQotICAgIGRlZiBfY29tbWVudF90ZXh0X2Zvcl9jb21taXQoc2VsZiwgb3B0aW9ucywg
Y29tbWl0X21lc3NhZ2UsIHRvb2wsIGNvbW1pdF9pZCk6Ci0gICAgICAgIGNvbW1lbnRfdGV4dCA9
IE5vbmUKLSAgICAgICAgaWYgKG9wdGlvbnMuYWRkX2xvZ19hc19jb21tZW50KToKLSAgICAgICAg
ICAgIGNvbW1lbnRfdGV4dCA9IGNvbW1pdF9tZXNzYWdlLmJvZHkobHN0cmlwPVRydWUpCi0gICAg
ICAgICAgICBjb21tZW50X3RleHQgKz0gIi0tLVxuIgotICAgICAgICAgICAgY29tbWVudF90ZXh0
ICs9IHRvb2wuc2NtKCkuZmlsZXNfY2hhbmdlZF9zdW1tYXJ5X2Zvcl9jb21taXQoY29tbWl0X2lk
KQotICAgICAgICByZXR1cm4gY29tbWVudF90ZXh0Ci0KLSAgICBkZWYgX2RpZmZfZmlsZV9mb3Jf
Y29tbWl0KHNlbGYsIHRvb2wsIGNvbW1pdF9pZCk6Ci0gICAgICAgIGRpZmYgPSB0b29sLnNjbSgp
LmNyZWF0ZV9wYXRjaF9mcm9tX2xvY2FsX2NvbW1pdChjb21taXRfaWQpCi0gICAgICAgIHJldHVy
biBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGFkZF9wYXRjaF90b19idWcgZXhwZWN0cyBhIGZp
bGUtbGlrZSBvYmplY3QKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRv
b2wpOgotICAgICAgICBjb21taXRfaWRzID0gdG9vbC5zY20oKS5jb21taXRfaWRzX2Zyb21fY29t
bWl0aXNoX2FyZ3VtZW50cyhhcmdzKQotICAgICAgICBpZiBsZW4oY29tbWl0X2lkcykgPiAxMDog
IyBXZSBjb3VsZCBsb3dlciB0aGlzIGxpbWl0LCAxMCBpcyB0b28gbWFueSBmb3Igb25lIGJ1ZyBh
cy1pcy4KLSAgICAgICAgICAgIGVycm9yKCJidWd6aWxsYS10b29sIGRvZXMgbm90IHN1cHBvcnQg
YXR0YWNoaW5nICVzIGF0IG9uY2UuICBBcmUgeW91IHN1cmUgeW91IHBhc3NlZCB0aGUgcmlnaHQg
Y29tbWl0IHJhbmdlPyIgJSAocGx1cmFsaXplKCJwYXRjaCIsIGxlbihjb21taXRfaWRzKSkpKQot
Ci0gICAgICAgIGhhdmVfb2Jzb2xldGVkX3BhdGNoZXMgPSBzZXQoKQotICAgICAgICBmb3IgY29t
bWl0X2lkIGluIGNvbW1pdF9pZHM6Ci0gICAgICAgICAgICBjb21taXRfbWVzc2FnZSA9IHRvb2wu
c2NtKCkuY29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdChjb21taXRfaWQpCi0KLSAgICAg
ICAgICAgICMgUHJlZmVyIC0tYnVnLWlkPSwgdGhlbiBhIGJ1ZyB1cmwgaW4gdGhlIGNvbW1pdCBt
ZXNzYWdlLCB0aGVuIGEgYnVnIHVybCBpbiB0aGUgZW50aXJlIGNvbW1pdCBkaWZmIChpLmUuIENo
YW5nZUxvZ3MpLgotICAgICAgICAgICAgYnVnX2lkID0gb3B0aW9ucy5idWdfaWQgb3IgcGFyc2Vf
YnVnX2lkKGNvbW1pdF9tZXNzYWdlLm1lc3NhZ2UoKSkgb3IgcGFyc2VfYnVnX2lkKHRvb2wuc2Nt
KCkuY3JlYXRlX3BhdGNoX2Zyb21fbG9jYWxfY29tbWl0KGNvbW1pdF9pZCkpCi0gICAgICAgICAg
ICBpZiBub3QgYnVnX2lkOgotICAgICAgICAgICAgICAgIGxvZygiU2tpcHBpbmcgJXM6IE5vIGJ1
ZyBpZCBmb3VuZCBpbiBjb21taXQgb3Igc3BlY2lmaWVkIHdpdGggLS1idWctaWQuIiAlIGNvbW1p
dF9pZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBpZiBvcHRpb25z
Lm9ic29sZXRlX3BhdGNoZXMgYW5kIGJ1Z19pZCBub3QgaW4gaGF2ZV9vYnNvbGV0ZWRfcGF0Y2hl
czoKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IHsgImJ1Z19pZCI6IGJ1Z19pZCB9Ci0gICAgICAg
ICAgICAgICAgT2Jzb2xldGVQYXRjaGVzT25CdWdTdGVwKHRvb2wsIG9wdGlvbnMpLnJ1bihzdGF0
ZSkKLSAgICAgICAgICAgICAgICBoYXZlX29ic29sZXRlZF9wYXRjaGVzLmFkZChidWdfaWQpCi0K
LSAgICAgICAgICAgIGRpZmZfZmlsZSA9IHNlbGYuX2RpZmZfZmlsZV9mb3JfY29tbWl0KHRvb2ws
IGNvbW1pdF9pZCkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlv
biBvciBjb21taXRfbWVzc2FnZS5kZXNjcmlwdGlvbihsc3RyaXA9VHJ1ZSwgc3RyaXBfdXJsPVRy
dWUpCi0gICAgICAgICAgICBjb21tZW50X3RleHQgPSBzZWxmLl9jb21tZW50X3RleHRfZm9yX2Nv
bW1pdChvcHRpb25zLCBjb21taXRfbWVzc2FnZSwgdG9vbCwgY29tbWl0X2lkKQotICAgICAgICAg
ICAgdG9vbC5idWdzLmFkZF9wYXRjaF90b19idWcoYnVnX2lkLCBkaWZmX2ZpbGUsIGRlc2NyaXB0
aW9uLCBjb21tZW50X3RleHQsIG1hcmtfZm9yX3Jldmlldz1vcHRpb25zLnJldmlldywgbWFya19m
b3JfY29tbWl0X3F1ZXVlPW9wdGlvbnMucmVxdWVzdF9jb21taXQpCi0KLQotIyBGSVhNRTogUmVx
dWlyZXMgdW5pdCB0ZXN0LiAgQmxvY2tpbmcgaXNzdWU6IHRvbyBjb21wbGV4IGZvciBub3cuCi1j
bGFzcyBNYXJrQnVnRml4ZWQoQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJtYXJrLWJ1Zy1maXhlZCIK
LSAgICBzaG93X2luX21haW5faGVscCA9IFRydWUKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0g
ICAgICAgIG9wdGlvbnMgPSBbCi0gICAgICAgICAgICBtYWtlX29wdGlvbigiLS1idWctaWQiLCBh
Y3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iYnVnX2lkIiwgaGVscD0iU3BlY2lm
eSBidWcgaWQgaWYgbm8gVVJMIGlzIHByb3ZpZGVkIGluIHRoZSBjb21taXQgbG9nLiIpLAotICAg
ICAgICAgICAgbWFrZV9vcHRpb24oIi0tY29tbWVudCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJz
dHJpbmciLCBkZXN0PSJjb21tZW50IiwgaGVscD0iVGV4dCB0byBpbmNsdWRlIGluIGJ1ZyBjb21t
ZW50LiIpLAotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tb3BlbiIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGRlc3Q9Im9wZW5fYnVnIiwgaGVscD0iT3BlbiBidWcgaW4g
ZGVmYXVsdCB3ZWIgYnJvd3NlciAoTWFjIG9ubHkpLiIpLAotICAgICAgICAgICAgbWFrZV9vcHRp
b24oIi0tdXBkYXRlLW9ubHkiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLCBk
ZXN0PSJ1cGRhdGVfb25seSIsIGhlbHA9IkFkZCBjb21tZW50IHRvIHRoZSBidWcsIGJ1dCBkbyBu
b3QgY2xvc2UgaXQuIiksCi0gICAgICAgIF0KLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxm
LCAiTWFyayB0aGUgc3BlY2lmaWVkIGJ1ZyBhcyBmaXhlZCIsICJbU1ZOX1JFVklTSU9OXSIsIG9w
dGlvbnM9b3B0aW9ucykKLQotICAgIGRlZiBfZmV0Y2hfY29tbWl0X2xvZyhzZWxmLCB0b29sLCBz
dm5fcmV2aXNpb24pOgotICAgICAgICBpZiBub3Qgc3ZuX3JldmlzaW9uOgotICAgICAgICAgICAg
cmV0dXJuIHRvb2wuc2NtKCkubGFzdF9zdm5fY29tbWl0X2xvZygpCi0gICAgICAgIHJldHVybiB0
b29sLnNjbSgpLnN2bl9jb21taXRfbG9nKHN2bl9yZXZpc2lvbikKLQotICAgIGRlZiBfZGV0ZXJt
aW5lX2J1Z19pZF9hbmRfc3ZuX3JldmlzaW9uKHNlbGYsIHRvb2wsIGJ1Z19pZCwgc3ZuX3Jldmlz
aW9uKToKLSAgICAgICAgY29tbWl0X2xvZyA9IHNlbGYuX2ZldGNoX2NvbW1pdF9sb2codG9vbCwg
c3ZuX3JldmlzaW9uKQotCi0gICAgICAgIGlmIG5vdCBidWdfaWQ6Ci0gICAgICAgICAgICBidWdf
aWQgPSBwYXJzZV9idWdfaWQoY29tbWl0X2xvZykKLQotICAgICAgICBpZiBub3Qgc3ZuX3Jldmlz
aW9uOgotICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goIl5yKD9QPHN2bl9yZXZpc2lvbj5c
ZCspIFx8IiwgY29tbWl0X2xvZywgcmUuTVVMVElMSU5FKQotICAgICAgICAgICAgaWYgbWF0Y2g6
Ci0gICAgICAgICAgICAgICAgc3ZuX3JldmlzaW9uID0gbWF0Y2guZ3JvdXAoJ3N2bl9yZXZpc2lv
bicpCi0KLSAgICAgICAgaWYgbm90IGJ1Z19pZCBvciBub3Qgc3ZuX3JldmlzaW9uOgotICAgICAg
ICAgICAgbm90X2ZvdW5kID0gW10KLSAgICAgICAgICAgIGlmIG5vdCBidWdfaWQ6Ci0gICAgICAg
ICAgICAgICAgbm90X2ZvdW5kLmFwcGVuZCgiYnVnIGlkIikKLSAgICAgICAgICAgIGlmIG5vdCBz
dm5fcmV2aXNpb246Ci0gICAgICAgICAgICAgICAgbm90X2ZvdW5kLmFwcGVuZCgic3ZuIHJldmlz
aW9uIikKLSAgICAgICAgICAgIGVycm9yKCJDb3VsZCBub3QgZmluZCAlcyBvbiBjb21tYW5kLWxp
bmUgb3IgaW4gJXMuIgotICAgICAgICAgICAgICAgICAgJSAoIiBvciAiLmpvaW4obm90X2ZvdW5k
KSwgInIlcyIgJSBzdm5fcmV2aXNpb24gaWYgc3ZuX3JldmlzaW9uIGVsc2UgImxhc3QgY29tbWl0
IikpCi0KLSAgICAgICAgcmV0dXJuIChidWdfaWQsIHN2bl9yZXZpc2lvbikKLQotICAgIGRlZiBf
b3Blbl9idWdfaW5fd2ViX2Jyb3dzZXIoc2VsZiwgdG9vbCwgYnVnX2lkKToKLSAgICAgICAgaWYg
c3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgotICAgICAgICAgICAgdG9vbC5leGVjdXRpdmUucnVu
X2NvbW1hbmQoWyJvcGVuIiwgdG9vbC5idWdzLnNob3J0X2J1Z191cmxfZm9yX2J1Z19pZChidWdf
aWQpXSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBsb2coIldBUk5JTkc6IC0tb3BlbiBp
cyBvbmx5IHN1cHBvcnRlZCBvbiBNYWMgT1MgWC4iKQotCi0gICAgZGVmIF9wcm9tcHRfdXNlcl9m
b3JfY29ycmVjdG5lc3Moc2VsZiwgYnVnX2lkLCBzdm5fcmV2aXNpb24pOgotICAgICAgICBhbnN3
ZXIgPSByYXdfaW5wdXQoIklzIHRoaXMgY29ycmVjdCAoeS9OKT8gIikKLSAgICAgICAgaWYgbm90
IHJlLm1hdGNoKCJeXHMqeShlcyk/IiwgYW5zd2VyLCByZS5JR05PUkVDQVNFKToKLSAgICAgICAg
ICAgIGV4aXQoMSkKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wp
OgotICAgICAgICBidWdfaWQgPSBvcHRpb25zLmJ1Z19pZAotCi0gICAgICAgIHN2bl9yZXZpc2lv
biA9IGFyZ3MgYW5kIGFyZ3NbMF0KLSAgICAgICAgaWYgc3ZuX3JldmlzaW9uOgotICAgICAgICAg
ICAgaWYgcmUubWF0Y2goIl5yWzAtOV0rJCIsIHN2bl9yZXZpc2lvbiwgcmUuSUdOT1JFQ0FTRSk6
Ci0gICAgICAgICAgICAgICAgc3ZuX3JldmlzaW9uID0gc3ZuX3JldmlzaW9uWzE6XQotICAgICAg
ICAgICAgaWYgbm90IHJlLm1hdGNoKCJeWzAtOV0rJCIsIHN2bl9yZXZpc2lvbik6Ci0gICAgICAg
ICAgICAgICAgZXJyb3IoIkludmFsaWQgc3ZuIHJldmlzaW9uOiAnJXMnIiAlIHN2bl9yZXZpc2lv
bikKLQotICAgICAgICBuZWVkc19wcm9tcHQgPSBGYWxzZQotICAgICAgICBpZiBub3QgYnVnX2lk
IG9yIG5vdCBzdm5fcmV2aXNpb246Ci0gICAgICAgICAgICBuZWVkc19wcm9tcHQgPSBUcnVlCi0g
ICAgICAgICAgICAoYnVnX2lkLCBzdm5fcmV2aXNpb24pID0gc2VsZi5fZGV0ZXJtaW5lX2J1Z19p
ZF9hbmRfc3ZuX3JldmlzaW9uKHRvb2wsIGJ1Z19pZCwgc3ZuX3JldmlzaW9uKQotCi0gICAgICAg
IGxvZygiQnVnOiA8JXM+ICVzIiAlICh0b29sLmJ1Z3Muc2hvcnRfYnVnX3VybF9mb3JfYnVnX2lk
KGJ1Z19pZCksIHRvb2wuYnVncy5mZXRjaF9idWdfZGljdGlvbmFyeShidWdfaWQpWyJ0aXRsZSJd
KSkKLSAgICAgICAgbG9nKCJSZXZpc2lvbjogJXMiICUgc3ZuX3JldmlzaW9uKQotCi0gICAgICAg
IGlmIG9wdGlvbnMub3Blbl9idWc6Ci0gICAgICAgICAgICBzZWxmLl9vcGVuX2J1Z19pbl93ZWJf
YnJvd3Nlcih0b29sLCBidWdfaWQpCi0KLSAgICAgICAgaWYgbmVlZHNfcHJvbXB0OgotICAgICAg
ICAgICAgc2VsZi5fcHJvbXB0X3VzZXJfZm9yX2NvcnJlY3RuZXNzKGJ1Z19pZCwgc3ZuX3Jldmlz
aW9uKQotCi0gICAgICAgIGJ1Z19jb21tZW50ID0gYnVnX2NvbW1lbnRfZnJvbV9zdm5fcmV2aXNp
b24oc3ZuX3JldmlzaW9uKQotICAgICAgICBpZiBvcHRpb25zLmNvbW1lbnQ6Ci0gICAgICAgICAg
ICBidWdfY29tbWVudCA9ICIlc1xuXG4lcyIgJSAob3B0aW9ucy5jb21tZW50LCBidWdfY29tbWVu
dCkKLQotICAgICAgICBpZiBvcHRpb25zLnVwZGF0ZV9vbmx5OgotICAgICAgICAgICAgbG9nKCJB
ZGRpbmcgY29tbWVudCB0byBCdWcgJXMuIiAlIGJ1Z19pZCkKLSAgICAgICAgICAgIHRvb2wuYnVn
cy5wb3N0X2NvbW1lbnRfdG9fYnVnKGJ1Z19pZCwgYnVnX2NvbW1lbnQpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBsb2coIkFkZGluZyBjb21tZW50IHRvIEJ1ZyAlcyBhbmQgbWFya2luZyBh
cyBSZXNvbHZlZC9GaXhlZC4iICUgYnVnX2lkKQotICAgICAgICAgICAgdG9vbC5idWdzLmNsb3Nl
X2J1Z19hc19maXhlZChidWdfaWQsIGJ1Z19jb21tZW50KQotCi0KLSMgRklYTUU6IFJlcXVpcmVz
IHVuaXQgdGVzdC4gIEJsb2NraW5nIGlzc3VlOiB0b28gY29tcGxleCBmb3Igbm93LgotY2xhc3Mg
Q3JlYXRlQnVnKENvbW1hbmQpOgotICAgIG5hbWUgPSAiY3JlYXRlLWJ1ZyIKLSAgICBzaG93X2lu
X21haW5faGVscCA9IFRydWUKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIG9wdGlv
bnMgPSBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5jYywKLSAgICAgICAgICAgIENvbW1h
bmRPcHRpb25zLmNvbXBvbmVudCwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXByb21w
dCIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJwcm9tcHQiLCBkZWZhdWx0PVRydWUsIGhl
bHA9IkRvIG5vdCBwcm9tcHQgZm9yIGJ1ZyB0aXRsZSBhbmQgY29tbWVudDsgdXNlIGNvbW1pdCBs
b2cgaW5zdGVhZC4iKSwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXJldmlldyIsIGFj
dGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJyZXZpZXciLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRv
IG5vdCBtYXJrIHRoZSBwYXRjaCBmb3IgcmV2aWV3LiIpLAotICAgICAgICAgICAgbWFrZV9vcHRp
b24oIi0tcmVxdWVzdC1jb21taXQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZXF1ZXN0
X2NvbW1pdCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik1hcmsgdGhlIHBhdGNoIGFzIG5lZWRpbmcg
YXV0by1jb21taXQgYWZ0ZXIgcmV2aWV3LiIpLAotICAgICAgICBdCi0gICAgICAgIENvbW1hbmQu
X19pbml0X18oc2VsZiwgIkNyZWF0ZSBhIGJ1ZyBmcm9tIGxvY2FsIGNoYW5nZXMgb3IgbG9jYWwg
Y29tbWl0cyIsICJbQ09NTUlUSVNIXSIsIG9wdGlvbnM9b3B0aW9ucykKLQotICAgIGRlZiBjcmVh
dGVfYnVnX2Zyb21fY29tbWl0KHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBj
b21taXRfaWRzID0gdG9vbC5zY20oKS5jb21taXRfaWRzX2Zyb21fY29tbWl0aXNoX2FyZ3VtZW50
cyhhcmdzKQotICAgICAgICBpZiBsZW4oY29tbWl0X2lkcykgPiAzOgotICAgICAgICAgICAgZXJy
b3IoIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjcmVhdGUgb25lIGJ1ZyB3aXRoICVzIHBhdGNo
ZXM/IiAlIGxlbihjb21taXRfaWRzKSkKLQotICAgICAgICBjb21taXRfaWQgPSBjb21taXRfaWRz
WzBdCi0KLSAgICAgICAgYnVnX3RpdGxlID0gIiIKLSAgICAgICAgY29tbWVudF90ZXh0ID0gIiIK
LSAgICAgICAgaWYgb3B0aW9ucy5wcm9tcHQ6Ci0gICAgICAgICAgICAoYnVnX3RpdGxlLCBjb21t
ZW50X3RleHQpID0gc2VsZi5wcm9tcHRfZm9yX2J1Z190aXRsZV9hbmRfY29tbWVudCgpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBjb21taXRfbWVzc2FnZSA9IHRvb2wuc2NtKCkuY29tbWl0
X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdChjb21taXRfaWQpCi0gICAgICAgICAgICBidWdfdGl0
bGUgPSBjb21taXRfbWVzc2FnZS5kZXNjcmlwdGlvbihsc3RyaXA9VHJ1ZSwgc3RyaXBfdXJsPVRy
dWUpCi0gICAgICAgICAgICBjb21tZW50X3RleHQgPSBjb21taXRfbWVzc2FnZS5ib2R5KGxzdHJp
cD1UcnVlKQotICAgICAgICAgICAgY29tbWVudF90ZXh0ICs9ICItLS1cbiIKLSAgICAgICAgICAg
IGNvbW1lbnRfdGV4dCArPSB0b29sLnNjbSgpLmZpbGVzX2NoYW5nZWRfc3VtbWFyeV9mb3JfY29t
bWl0KGNvbW1pdF9pZCkKLQotICAgICAgICBkaWZmID0gdG9vbC5zY20oKS5jcmVhdGVfcGF0Y2hf
ZnJvbV9sb2NhbF9jb21taXQoY29tbWl0X2lkKQotICAgICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJ
Ty5TdHJpbmdJTyhkaWZmKSAjIGNyZWF0ZV9idWcgZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QK
LSAgICAgICAgYnVnX2lkID0gdG9vbC5idWdzLmNyZWF0ZV9idWcoYnVnX3RpdGxlLCBjb21tZW50
X3RleHQsIG9wdGlvbnMuY29tcG9uZW50LCBkaWZmX2ZpbGUsICJQYXRjaCIsIGNjPW9wdGlvbnMu
Y2MsIG1hcmtfZm9yX3Jldmlldz1vcHRpb25zLnJldmlldywgbWFya19mb3JfY29tbWl0X3F1ZXVl
PW9wdGlvbnMucmVxdWVzdF9jb21taXQpCi0KLSAgICAgICAgaWYgYnVnX2lkIGFuZCBsZW4oY29t
bWl0X2lkcykgPiAxOgotICAgICAgICAgICAgb3B0aW9ucy5idWdfaWQgPSBidWdfaWQKLSAgICAg
ICAgICAgIG9wdGlvbnMub2Jzb2xldGVfcGF0Y2hlcyA9IEZhbHNlCi0gICAgICAgICAgICAjIEZJ
WE1FOiBXZSBzaG91bGQgcGFzcyB0aHJvdWdoIC0tbm8tY29tbWVudCBzd2l0Y2ggYXMgd2VsbC4K
LSAgICAgICAgICAgIFBvc3RDb21taXRzLmV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgY29tbWl0X2lk
c1sxOl0sIHRvb2wpCi0KLSAgICBkZWYgY3JlYXRlX2J1Z19mcm9tX3BhdGNoKHNlbGYsIG9wdGlv
bnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBidWdfdGl0bGUgPSAiIgotICAgICAgICBjb21tZW50
X3RleHQgPSAiIgotICAgICAgICBpZiBvcHRpb25zLnByb21wdDoKLSAgICAgICAgICAgIChidWdf
dGl0bGUsIGNvbW1lbnRfdGV4dCkgPSBzZWxmLnByb21wdF9mb3JfYnVnX3RpdGxlX2FuZF9jb21t
ZW50KCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbW1pdF9tZXNzYWdlID0gdG9vbC5z
Y20oKS5jb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQoKQotICAgICAgICAgICAgYnVnX3Rp
dGxlID0gY29tbWl0X21lc3NhZ2UuZGVzY3JpcHRpb24obHN0cmlwPVRydWUsIHN0cmlwX3VybD1U
cnVlKQotICAgICAgICAgICAgY29tbWVudF90ZXh0ID0gY29tbWl0X21lc3NhZ2UuYm9keShsc3Ry
aXA9VHJ1ZSkKLQotICAgICAgICBkaWZmID0gdG9vbC5zY20oKS5jcmVhdGVfcGF0Y2goKQotICAg
ICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGNyZWF0ZV9idWcgZXhw
ZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QKLSAgICAgICAgYnVnX2lkID0gdG9vbC5idWdzLmNyZWF0
ZV9idWcoYnVnX3RpdGxlLCBjb21tZW50X3RleHQsIG9wdGlvbnMuY29tcG9uZW50LCBkaWZmX2Zp
bGUsICJQYXRjaCIsIGNjPW9wdGlvbnMuY2MsIG1hcmtfZm9yX3Jldmlldz1vcHRpb25zLnJldmll
dywgbWFya19mb3JfY29tbWl0X3F1ZXVlPW9wdGlvbnMucmVxdWVzdF9jb21taXQpCi0KLSAgICBk
ZWYgcHJvbXB0X2Zvcl9idWdfdGl0bGVfYW5kX2NvbW1lbnQoc2VsZik6Ci0gICAgICAgIGJ1Z190
aXRsZSA9IHJhd19pbnB1dCgiQnVnIHRpdGxlOiAiKQotICAgICAgICBwcmludCAiQnVnIGNvbW1l
bnQgKGhpdCBeRCBvbiBibGFuayBsaW5lIHRvIGVuZCk6IgotICAgICAgICBsaW5lcyA9IHN5cy5z
dGRpbi5yZWFkbGluZXMoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3RkaW4uc2Vl
aygwLCBvcy5TRUVLX0VORCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAj
IEN5Z3dpbiByYWlzZXMgYW4gSWxsZWdhbCBTZWVrIChlcnJubyAyOSkgZXhjZXB0aW9uIHdoZW4g
dGhlIGFib3ZlCi0gICAgICAgICAgICAjIHNlZWsoKSBjYWxsIGlzIG1hZGUuIElnbm9yaW5nIGl0
IHNlZW1zIHRvIGNhdXNlIG5vIGhhcm0uCi0gICAgICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0
IGEgd2F5IHRvIGdldCBhdm9pZCB0aGUgZXhjZXB0aW9uIGluIHRoZSBmaXJzdAotICAgICAgICAg
ICAgIyBwbGFjZS4KLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgY29tbWVudF90ZXh0ID0gIiIu
am9pbihsaW5lcykKLSAgICAgICAgcmV0dXJuIChidWdfdGl0bGUsIGNvbW1lbnRfdGV4dCkKLQot
ICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBpZiBs
ZW4oYXJncyk6Ci0gICAgICAgICAgICBpZiAobm90IHRvb2wuc2NtKCkuc3VwcG9ydHNfbG9jYWxf
Y29tbWl0cygpKToKLSAgICAgICAgICAgICAgICBlcnJvcigiRXh0cmEgYXJndW1lbnRzIG5vdCBz
dXBwb3J0ZWQ7IHBhdGNoIGlzIHRha2VuIGZyb20gd29ya2luZyBkaXJlY3RvcnkuIikKLSAgICAg
ICAgICAgIHNlbGYuY3JlYXRlX2J1Z19mcm9tX2NvbW1pdChvcHRpb25zLCBhcmdzLCB0b29sKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5jcmVhdGVfYnVnX2Zyb21fcGF0Y2gob3B0
aW9ucywgYXJncywgdG9vbCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jb21t
YW5kcy91cGxvYWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy9tb2R1bGVzL2NvbW1hbmRzL3VwbG9hZF91bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIpCisr
KyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvdXBsb2FkX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQg
dW5pdHRlc3QKLQotZnJvbSBtb2R1bGVzLmNvbW1hbmRzLmNvbW1hbmR0ZXN0IGltcG9ydCBDb21t
YW5kc1Rlc3QKLWZyb20gbW9kdWxlcy5jb21tYW5kcy51cGxvYWQgaW1wb3J0ICoKLWZyb20gbW9k
dWxlcy5tb2NrX2J1Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbAotCi1jbGFzcyBV
cGxvYWRDb21tYW5kc1Rlc3QoQ29tbWFuZHNUZXN0KToKLSAgICBkZWYgdGVzdF9hc3NpZ25fdG9f
Y29tbWl0dGVyKHNlbGYpOgotICAgICAgICB0b29sID0gTW9ja0J1Z3ppbGxhVG9vbCgpCi0gICAg
ICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJCdWcgNzUgaXMgYWxyZWFkeSBhc3NpZ25lZCB0byBmb29A
Zm9vLmNvbSAoTm9uZSkuXG5CdWcgNzYgaGFzIG5vIG5vbi1vYnNvbGV0ZSBwYXRjaGVzLCBpZ25v
cmluZy5cbiIKLSAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKEFzc2lnblRvQ29t
bWl0dGVyKCksIFtdLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyLCB0b29sPXRvb2wp
Ci0gICAgICAgIHRvb2wuYnVncy5yZWFzc2lnbl9idWcuYXNzZXJ0X2NhbGxlZF93aXRoKDQyLCAi
ZXJpY0B3ZWJraXQub3JnIiwgIkF0dGFjaG1lbnQgMTI4IHdhcyBwb3N0ZWQgYnkgYSBjb21taXR0
ZXIgYW5kIGhhcyByZXZpZXcrLCBhc3NpZ25pbmcgdG8gRXJpYyBTZWlkZWwgZm9yIGNvbW1pdC4i
KQotCi0gICAgZGVmIHRlc3Rfb2Jzb2xldGVfYXR0YWNobWVudHMoc2VsZik6Ci0gICAgICAgIGV4
cGVjdGVkX3N0ZGVyciA9ICJPYnNvbGV0aW5nIDIgb2xkIHBhdGNoZXMgb24gYnVnIDQyXG4iCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhPYnNvbGV0ZUF0dGFjaG1lbnRzKCks
IFs0Ml0sIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCi0KLSAgICBkZWYgdGVzdF9w
b3N0X2RpZmYoc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJPYnNvbGV0aW5nIDIg
b2xkIHBhdGNoZXMgb24gYnVnIDQyXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0
cHV0cyhQb3N0RGlmZigpLCBbNDJdLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQot
Ci0gICAgZGVmIHRlc3RfcHJlcGFyZV9kaWZmX3dpdGhfYXJnKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydF9leGVjdXRlX291dHB1dHMoUHJlcGFyZURpZmYoKSwgWzQyXSkKLQotICAgIGRlZiB0
ZXN0X3ByZXBhcmVfZGlmZihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRw
dXRzKFByZXBhcmVEaWZmKCksIFtdKQotCi0gICAgZGVmIHRlc3RfY3JlYXRlX3JldmlldyhzZWxm
KToKLSAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIk9ic29sZXRpbmcgMiBvbGQgcGF0Y2hlcyBv
biBidWcgNDJcbiIKLSAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKENyZWF0ZVJl
dmlldygpLCBbNDJdLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQotCi0gICAgZGVm
IHRlc3RfZWRpdF9jaGFuZ2Vsb2coc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVf
b3V0cHV0cyhFZGl0Q2hhbmdlTG9nKCksIFtdKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9idWd6aWxsYS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2J1Z3ppbGxhLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYnVnemlsbGEucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSwxNSBA
QCBpbXBvcnQgc3VicHJvY2VzcwogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUgIyB1c2Vk
IGluIHRpbWVzdGFtcCgpCiAKICMgSW1wb3J0IFdlYktpdC1zcGVjaWZpYyBtb2R1bGVzLgotZnJv
bSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCi1mcm9tIG1vZHVsZXMu
Y29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSBtb2R1bGVzLmNyZWRlbnRpYWxz
IGltcG9ydCBDcmVkZW50aWFscworZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQg
ZXJyb3IsIGxvZworZnJvbSB3ZWJraXRweS5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0
Citmcm9tIHdlYmtpdHB5LmNyZWRlbnRpYWxzIGltcG9ydCBDcmVkZW50aWFscwogCiAjIFdlYktp
dCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkgb2YgQmVhdXRpZnVsU291cCBpbiBTY3JpcHRzL21vZHVs
ZXMKICMgc28gdGhpcyBpbXBvcnQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgogZnJvbSAuQmVhdXRp
ZnVsU291cCBpbXBvcnQgQmVhdXRpZnVsU291cCwgU291cFN0cmFpbmVyCiAKLWZyb20gbW9kdWxl
cy53ZWJraXRfbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCitmcm9tIHdlYmtpdHB5LndlYmtpdF9t
ZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKIAogZGVmIHBhcnNlX2J1Z19pZChtZXNzYWdlKToKICAg
ICBtYXRjaCA9IHJlLnNlYXJjaCgiaHR0cFw6Ly93ZWJraXRcLm9yZy9iLyg/UDxidWdfaWQ+XGQr
KSIsIG1lc3NhZ2UpCkBAIC0yNTUsNyArMjU1LDcgQEAgY2xhc3MgQnVnemlsbGEob2JqZWN0KToK
ICAgICAgICAgcmV0dXJuICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvJXMi
ICUgbG9jYWxfcGF0aAogCiAgICAgZGVmIF9mbGFnX3Blcm1pc3Npb25fcmVqZWN0aW9uX21lc3Nh
Z2Uoc2VsZiwgc2V0dGVyX2VtYWlsLCBmbGFnX25hbWUpOgotICAgICAgICBjb21taXR0ZXJfbGlz
dCA9ICJXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWl0dGVycy5weSIgIyBUaGlzIGNv
dWxkIGJlIGNvbXB1dGVkIGZyb20gQ29tbWl0dGVyTGlzdC5fX2ZpbGVfXworICAgICAgICBjb21t
aXR0ZXJfbGlzdCA9ICJXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1pdHRlcnMucHki
ICMgVGhpcyBjb3VsZCBiZSBjb21wdXRlZCBmcm9tIENvbW1pdHRlckxpc3QuX19maWxlX18KICAg
ICAgICAgY29udHJpYnV0aW9uX2d1aWRsaW5lc191cmwgPSAiaHR0cDovL3dlYmtpdC5vcmcvY29k
aW5nL2NvbnRyaWJ1dGluZy5odG1sIiAjIFNob3VsZCBjb21lIGZyb20gc29tZSB3ZWJraXRfY29u
ZmlnLnB5CiAgICAgICAgIHF1ZXVlX2FkbWluaXN0cmF0b3IgPSAiZXNlaWRlbEBjaHJvbWl1bS5v
cmciICMgVGhpcyBjb3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIHN0YXR1c19ib3QuCiAgICAgICAg
IHF1ZXVlX25hbWUgPSAiY29tbWl0LXF1ZXVlIiAjIFRoaXMgY291bGQgYmUgcXVlcmllZCBmcm9t
IHRoZSB0b29sLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWd6aWxsYV91
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1
Z3ppbGxhX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYnVnemlsbGFfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEy
ICsyOCwxMiBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBtb2R1bGVzLmNvbW1pdHRlcnMg
aW1wb3J0IENvbW1pdHRlckxpc3QsIFJldmlld2VyLCBDb21taXR0ZXIKLWZyb20gbW9kdWxlcy5i
dWd6aWxsYSBpbXBvcnQgQnVnemlsbGEsIEJ1Z3ppbGxhUXVlcmllcywgcGFyc2VfYnVnX2lkCi1m
cm9tIG1vZHVsZXMub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotZnJvbSBtb2R1
bGVzLm1vY2sgaW1wb3J0IE1vY2sKK2Zyb20gd2Via2l0cHkuY29tbWl0dGVycyBpbXBvcnQgQ29t
bWl0dGVyTGlzdCwgUmV2aWV3ZXIsIENvbW1pdHRlcgorZnJvbSB3ZWJraXRweS5idWd6aWxsYSBp
bXBvcnQgQnVnemlsbGEsIEJ1Z3ppbGxhUXVlcmllcywgcGFyc2VfYnVnX2lkCitmcm9tIHdlYmtp
dHB5Lm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20gd2Via2l0cHkubW9j
ayBpbXBvcnQgTW9jawogCi1mcm9tIG1vZHVsZXMuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRp
ZnVsU291cAorZnJvbSB3ZWJraXRweS5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3Vw
CiAKIAogY2xhc3MgTW9ja0Jyb3dzZXIob2JqZWN0KToKQEAgLTIzMywxMSArMjMzLDExIEBAIFpF
WnBibWx6YUV4dllXUlhhWFJvVW1WaGMyOXVPbkpsWVhOdmJsMDcKIAogICAgIGRlZiB0ZXN0X2Zs
YWdfcGVybWlzc2lvbl9yZWplY3Rpb25fbWVzc2FnZShzZWxmKToKICAgICAgICAgYnVnemlsbGEg
PSBCdWd6aWxsYSgpCi0gICAgICAgIGV4cGVjdGVkX21lc3NzYWdlPSIiImZvb0Bmb28uY29tIGRv
ZXMgbm90IGhhdmUgcmV2aWV3IHBlcm1pc3Npb25zIGFjY29yZGluZyB0byBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1p
dHRlcnMucHkuCisgICAgICAgIGV4cGVjdGVkX21lc3NzYWdlPSIiImZvb0Bmb28uY29tIGRvZXMg
bm90IGhhdmUgcmV2aWV3IHBlcm1pc3Npb25zIGFjY29yZGluZyB0byBodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2Jyb3dzZXIvdHJ1bmsvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21taXR0
ZXJzLnB5LgogCiAtIElmIHlvdSBkbyBub3QgaGF2ZSByZXZpZXcgcmlnaHRzIHBsZWFzZSByZWFk
IGh0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9jb250cmlidXRpbmcuaHRtbCBmb3IgaW5zdHJ1Y3Rp
b25zIG9uIGhvdyB0byB1c2UgYnVnemlsbGEgZmxhZ3MuCiAKLS0gSWYgeW91IGhhdmUgcmV2aWV3
IHJpZ2h0cyBwbGVhc2UgY29ycmVjdCB0aGUgZXJyb3IgaW4gV2ViS2l0VG9vbHMvU2NyaXB0cy9t
b2R1bGVzL2NvbW1pdHRlcnMucHkgYnkgYWRkaW5nIHlvdXJzZWxmIHRvIHRoZSBmaWxlIChubyBy
ZXZpZXcgbmVlZGVkKS4gIER1ZSB0byBidWcgMzAwODQgdGhlIGNvbW1pdC1xdWV1ZSB3aWxsIHJl
cXVpcmUgYSByZXN0YXJ0IGFmdGVyIHlvdXIgY2hhbmdlLiAgUGxlYXNlIGNvbnRhY3QgZXNlaWRl
bEBjaHJvbWl1bS5vcmcgdG8gcmVxdWVzdCBhIGNvbW1pdC1xdWV1ZSByZXN0YXJ0LiAgQWZ0ZXIg
cmVzdGFydCB0aGUgY29tbWl0LXF1ZXVlIHdpbGwgY29ycmVjdGx5IHJlc3BlY3QgeW91ciByZXZp
ZXcgcmlnaHRzLiIiIgorLSBJZiB5b3UgaGF2ZSByZXZpZXcgcmlnaHRzIHBsZWFzZSBjb3JyZWN0
IHRoZSBlcnJvciBpbiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1pdHRlcnMucHkg
YnkgYWRkaW5nIHlvdXJzZWxmIHRvIHRoZSBmaWxlIChubyByZXZpZXcgbmVlZGVkKS4gIER1ZSB0
byBidWcgMzAwODQgdGhlIGNvbW1pdC1xdWV1ZSB3aWxsIHJlcXVpcmUgYSByZXN0YXJ0IGFmdGVy
IHlvdXIgY2hhbmdlLiAgUGxlYXNlIGNvbnRhY3QgZXNlaWRlbEBjaHJvbWl1bS5vcmcgdG8gcmVx
dWVzdCBhIGNvbW1pdC1xdWV1ZSByZXN0YXJ0LiAgQWZ0ZXIgcmVzdGFydCB0aGUgY29tbWl0LXF1
ZXVlIHdpbGwgY29ycmVjdGx5IHJlc3BlY3QgeW91ciByZXZpZXcgcmlnaHRzLiIiIgogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGJ1Z3ppbGxhLl9mbGFnX3Blcm1pc3Npb25fcmVqZWN0aW9uX21l
c3NhZ2UoImZvb0Bmb28uY29tIiwgInJldmlldyIpLCBleHBlY3RlZF9tZXNzc2FnZSkKIAogCklu
ZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1aWxkYm90LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVpbGRib3QucHkJKHJldmlzaW9uIDUy
NzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWlsZGJvdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQCBpbXBvcnQgcmUKIGltcG9ydCB1cmxsaWIyCiAKICMg
SW1wb3J0IFdlYktpdC1zcGVjaWZpYyBtb2R1bGVzLgotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dn
aW5nIGltcG9ydCBsb2cKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZwog
Ci0jIFdlYktpdCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkgb2YgQmVhdXRpZnVsU291cCBpbiBTY3Jp
cHRzL21vZHVsZXMKKyMgV2ViS2l0IGluY2x1ZGVzIGEgYnVpbHQgY29weSBvZiBCZWF1dGlmdWxT
b3VwIGluIFNjcmlwdHMvd2Via2l0cHkKICMgc28gdGhpcyBpbXBvcnQgc2hvdWxkIGFsd2F5cyBz
dWNjZWVkLgogZnJvbSAuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVsU291cAogCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1aWxkYm90X3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVpbGRib3RfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWls
ZGJvdF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiBpbXBv
cnQgdW5pdHRlc3QKIAotZnJvbSBtb2R1bGVzLmJ1aWxkYm90IGltcG9ydCBCdWlsZEJvdAorZnJv
bSB3ZWJraXRweS5idWlsZGJvdCBpbXBvcnQgQnVpbGRCb3QKIAotZnJvbSBtb2R1bGVzLkJlYXV0
aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKK2Zyb20gd2Via2l0cHkuQmVhdXRpZnVsU291
cCBpbXBvcnQgQmVhdXRpZnVsU291cAogCiBjbGFzcyBCdWlsZEJvdFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1aWxkc3RlcHMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWlsZHN0ZXBz
LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVp
bGRzdGVwcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDExIEBAIGltcG9ydCBTdHJp
bmdJTwogCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgogCi1mcm9tIG1vZHVsZXMu
Y29tbWVudHMgaW1wb3J0IGJ1Z19jb21tZW50X2Zyb21fY29tbWl0X3RleHQKLWZyb20gbW9kdWxl
cy5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20gbW9kdWxlcy53ZWJraXRfbG9nZ2luZyBp
bXBvcnQgbG9nLCBlcnJvcgotZnJvbSBtb2R1bGVzLndlYmtpdHBvcnQgaW1wb3J0IFdlYktpdFBv
cnQKLWZyb20gbW9kdWxlcy5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKK2Zyb20gd2Via2l0
cHkuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21tZW50X2Zyb21fY29tbWl0X3RleHQKK2Zyb20gd2Vi
a2l0cHkuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCitmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dn
aW5nIGltcG9ydCBsb2csIGVycm9yCitmcm9tIHdlYmtpdHB5LndlYmtpdHBvcnQgaW1wb3J0IFdl
YktpdFBvcnQKK2Zyb20gd2Via2l0cHkuY2hhbmdlbG9ncyBpbXBvcnQgQ2hhbmdlTG9nCiAKICMg
RklYTUU6IFdoeSBkbyBzb21lIG9mIHRoZXNlIGhhdmUgIlN0ZXAiIGluIHRoZWlyIG5hbWUgYnV0
IG5vdCBhbGw/CiBfX2FsbF9fID0gWwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9idWlsZHN0ZXBzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYnVpbGRzdGVwc191bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1aWxkc3RlcHNfdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDEwICsyOCwxMCBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBt
b2R1bGVzLmJ1aWxkc3RlcHMgaW1wb3J0IFVwZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3ZXJTdGVw
LCBVcGRhdGVTdGVwLCBQcm9tcHRGb3JCdWdPclRpdGxlU3RlcAotZnJvbSBtb2R1bGVzLm1vY2tf
YnVnemlsbGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFUb29sCi1mcm9tIG1vZHVsZXMub3V0cHV0
Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotZnJvbSBtb2R1bGVzLm1vY2sgaW1wb3J0IE1v
Y2sKK2Zyb20gd2Via2l0cHkuYnVpbGRzdGVwcyBpbXBvcnQgVXBkYXRlQ2hhbmdlTG9nc1dpdGhS
ZXZpZXdlclN0ZXAsIFVwZGF0ZVN0ZXAsIFByb21wdEZvckJ1Z09yVGl0bGVTdGVwCitmcm9tIHdl
YmtpdHB5Lm1vY2tfYnVnemlsbGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFUb29sCitmcm9tIHdl
YmtpdHB5Lm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20gd2Via2l0cHku
bW9jayBpbXBvcnQgTW9jawogCiAKIGNsYXNzIFVwZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3ZXJT
dGVwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1lbnRzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbWVudHMucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tZW50cy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAog
IwogIyBBIHRvb2wgZm9yIGF1dG9tYXRpbmcgZGVhbGluZyB3aXRoIGJ1Z3ppbGxhLCBwb3N0aW5n
IHBhdGNoZXMsIGNvbW1pdHRpbmcgcGF0Y2hlcywgZXRjLgogCi1mcm9tIG1vZHVsZXMuY2hhbmdl
bG9ncyBpbXBvcnQgdmlld19zb3VyY2VfdXJsCitmcm9tIHdlYmtpdHB5LmNoYW5nZWxvZ3MgaW1w
b3J0IHZpZXdfc291cmNlX3VybAogCiBkZWYgYnVnX2NvbW1lbnRfZnJvbV9zdm5fcmV2aXNpb24o
c3ZuX3JldmlzaW9uKToKICAgICByZXR1cm4gIkNvbW1pdHRlZCByJXM6IDwlcz4iICUgKHN2bl9y
ZXZpc2lvbiwgdmlld19zb3VyY2VfdXJsKHN2bl9yZXZpc2lvbikpCkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NyZWRlbnRpYWxzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY3JlZGVudGlhbHMucHkJKHJldmlzaW9uIDUyNzAyKQorKysg
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jcmVkZW50aWFscy5weQkod29ya2luZyBjb3B5
KQpAQCAtMzQsOSArMzQsOSBAQCBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IHJl
CiAKLWZyb20gbW9kdWxlcy5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQotZnJvbSBtb2R1bGVz
LndlYmtpdF9sb2dnaW5nIGltcG9ydCBsb2cKLWZyb20gbW9kdWxlcy5zY20gaW1wb3J0IEdpdAor
ZnJvbSB3ZWJraXRweS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQorZnJvbSB3ZWJraXRweS53
ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9nCitmcm9tIHdlYmtpdHB5LnNjbSBpbXBvcnQgR2l0CiAK
IGNsYXNzIENyZWRlbnRpYWxzKG9iamVjdCk6CiAgICAga2V5Y2hhaW5fZW50cnlfbm90X2ZvdW5k
ID0gInNlY3VyaXR5OiBTZWNLZXljaGFpblNlYXJjaENvcHlOZXh0OiBUaGUgc3BlY2lmaWVkIGl0
ZW0gY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSBrZXljaGFpbi4iCkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NyZWRlbnRpYWxzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY3JlZGVudGlhbHNfdW5pdHRlc3QucHkJKHJl
dmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jcmVkZW50aWFs
c191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiBpbXBvcnQg
b3MKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIG1vZHVsZXMuY3JlZGVu
dGlhbHMgaW1wb3J0IENyZWRlbnRpYWxzCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBF
eGVjdXRpdmUKLWZyb20gbW9kdWxlcy5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJl
Ci1mcm9tIG1vZHVsZXMubW9jayBpbXBvcnQgTW9jaworZnJvbSB3ZWJraXRweS5jcmVkZW50aWFs
cyBpbXBvcnQgQ3JlZGVudGlhbHMKK2Zyb20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBFeGVj
dXRpdmUKK2Zyb20gd2Via2l0cHkub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQor
ZnJvbSB3ZWJraXRweS5tb2NrIGltcG9ydCBNb2NrCiAKIGNsYXNzIENyZWRlbnRpYWxzVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZXhhbXBsZV9zZWN1cml0eV9vdXRwdXQgPSAiIiJrZXlj
aGFpbjogIi9Vc2Vycy90ZXN0L0xpYnJhcnkvS2V5Y2hhaW5zL2xvZ2luLmtleWNoYWluIgpJbmRl
eDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9leGVjdXRpdmUucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9leGVjdXRpdmUucHkJKHJldmlzaW9uIDUy
NzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9leGVjdXRpdmUucHkJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgc3VicHJv
Y2VzcwogaW1wb3J0IHN5cwogCi1mcm9tIG1vZHVsZXMud2Via2l0X2xvZ2dpbmcgaW1wb3J0IHRl
ZQorZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgdGVlCiAKIAogY2xhc3MgU2Ny
aXB0RXJyb3IoRXhjZXB0aW9uKToKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
ZXhlY3V0aXZlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCB1bml0dGVzdAot
ZnJvbSBtb2R1bGVzLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvciwgcnVu
X2NvbW1hbmQKK2Zyb20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlw
dEVycm9yLCBydW5fY29tbWFuZAogCiBjbGFzcyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb2NrX2J1Z3ppbGxh
dG9vbC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vY2tf
YnVnemlsbGF0b29sLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbW9ja19idWd6aWxsYXRvb2wucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4
LDkgQEAKIAogaW1wb3J0IG9zCiAKLWZyb20gbW9kdWxlcy5tb2NrIGltcG9ydCBNb2NrCi1mcm9t
IG1vZHVsZXMuc2NtIGltcG9ydCBDb21taXRNZXNzYWdlCi1mcm9tIG1vZHVsZXMuYnVnemlsbGEg
aW1wb3J0IEJ1ZworZnJvbSB3ZWJraXRweS5tb2NrIGltcG9ydCBNb2NrCitmcm9tIHdlYmtpdHB5
LnNjbSBpbXBvcnQgQ29tbWl0TWVzc2FnZQorZnJvbSB3ZWJraXRweS5idWd6aWxsYSBpbXBvcnQg
QnVnCiAKIGRlZiBfaWRfdG9fb2JqZWN0X2RpY3Rpb25hcnkoKm9iamVjdHMpOgogICAgIGRpY3Rp
b25hcnkgPSB7fQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tdWx0aWNvbW1h
bmR0b29sLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbXVs
dGljb21tYW5kdG9vbC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L211bHRpY29tbWFuZHRvb2wucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1
LDggQEAgaW1wb3J0IHN5cwogCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIsIElu
ZGVudGVkSGVscEZvcm1hdHRlciwgU1VQUFJFU1NfVVNBR0UsIG1ha2Vfb3B0aW9uCiAKLWZyb20g
bW9kdWxlcy5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20gbW9kdWxlcy53ZWJraXRfbG9n
Z2luZyBpbXBvcnQgbG9nCitmcm9tIHdlYmtpdHB5LmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQor
ZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9nCiAKIAogY2xhc3MgQ29tbWFu
ZChvYmplY3QpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tdWx0aWNvbW1h
bmR0b29sX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbXVsdGljb21tYW5kdG9vbF91bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L211bHRpY29tbWFuZHRvb2xfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0
dGVzdAogZnJvbSBtdWx0aWNvbW1hbmR0b29sIGltcG9ydCBNdWx0aUNvbW1hbmRUb29sLCBDb21t
YW5kCi1mcm9tIG1vZHVsZXMub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQorZnJv
bSB3ZWJraXRweS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCiAKIGZyb20gb3B0
cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiAKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcXVldWVlbmdpbmUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9xdWV1ZWVuZ2luZS5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3F1ZXVlZW5naW5lLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICsz
NCw5IEBAIGltcG9ydCB0cmFjZWJhY2sKIAogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUs
IHRpbWVkZWx0YQogCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgot
ZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGltcG9ydCBsb2csIE91dHB1dFRlZQotZnJvbSBt
b2R1bGVzLnN0YXR1c2JvdCBpbXBvcnQgU3RhdHVzQm90Citmcm9tIHdlYmtpdHB5LmV4ZWN1dGl2
ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0
IGxvZywgT3V0cHV0VGVlCitmcm9tIHdlYmtpdHB5LnN0YXR1c2JvdCBpbXBvcnQgU3RhdHVzQm90
CiAKIGNsYXNzIFF1ZXVlRW5naW5lRGVsZWdhdGU6CiAgICAgZGVmIHF1ZXVlX2xvZ19wYXRoKHNl
bGYpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9xdWV1ZWVuZ2luZV91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3F1ZXVl
ZW5naW5lX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcXVldWVlbmdpbmVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDggKzMyLDggQEAgaW1wb3J0IHNodXRpbAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRl
c3QKIAotZnJvbSBtb2R1bGVzLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKLWZyb20gbW9k
dWxlcy5xdWV1ZWVuZ2luZSBpbXBvcnQgUXVldWVFbmdpbmUsIFF1ZXVlRW5naW5lRGVsZWdhdGUK
K2Zyb20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRw
eS5xdWV1ZWVuZ2luZSBpbXBvcnQgUXVldWVFbmdpbmUsIFF1ZXVlRW5naW5lRGVsZWdhdGUKIAog
Y2xhc3MgTG9nZ2luZ0RlbGVnYXRlKFF1ZXVlRW5naW5lRGVsZWdhdGUpOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0ZXN0KToKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc2Nt
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc2NtLnB5CShy
ZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc2NtLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBAIGltcG9ydCByZQogaW1wb3J0IHN1YnByb2Nl
c3MKIAogIyBJbXBvcnQgV2ViS2l0LXNwZWNpZmljIG1vZHVsZXMuCi1mcm9tIG1vZHVsZXMuY2hh
bmdlbG9ncyBpbXBvcnQgQ2hhbmdlTG9nCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBF
eGVjdXRpdmUsIHJ1bl9jb21tYW5kLCBTY3JpcHRFcnJvcgotZnJvbSBtb2R1bGVzLndlYmtpdF9s
b2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCitmcm9tIHdlYmtpdHB5LmNoYW5nZWxvZ3MgaW1wb3J0
IENoYW5nZUxvZworZnJvbSB3ZWJraXRweS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgcnVu
X2NvbW1hbmQsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGltcG9y
dCBlcnJvciwgbG9nCiAKIGRlZiBkZXRlY3Rfc2NtX3N5c3RlbShwYXRoKToKICAgICBpZiBTVk4u
aW5fd29ya2luZ19kaXJlY3RvcnkocGF0aCk6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3NjbV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3NjbV91bml0dGVzdC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3NjbV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzgs
OCArMzgsOCBAQCBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB1cmxsaWIKIAogZnJvbSBkYXRldGlt
ZSBpbXBvcnQgZGF0ZQotZnJvbSBtb2R1bGVzLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBy
dW5fY29tbWFuZCwgU2NyaXB0RXJyb3IKLWZyb20gbW9kdWxlcy5zY20gaW1wb3J0IGRldGVjdF9z
Y21fc3lzdGVtLCBTQ00sIENoZWNrb3V0TmVlZHNVcGRhdGUsIGNvbW1pdF9lcnJvcl9oYW5kbGVy
Citmcm9tIHdlYmtpdHB5LmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBydW5fY29tbWFuZCwg
U2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuc2NtIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbSwg
U0NNLCBDaGVja291dE5lZWRzVXBkYXRlLCBjb21taXRfZXJyb3JfaGFuZGxlcgogCiAjIEV2ZW50
dWFsbHkgd2Ugd2lsbCB3YW50IHRvIHdyaXRlIHRlc3RzIHdoaWNoIHdvcmsgZm9yIGJvdGggc2Nt
cy4gKGxpa2UgdXBkYXRlX3dlYmtpdCwgY2hhbmdlZF9maWxlcywgZXRjLikKICMgUGVyaGFwcyB0
aHJvdWdoIHNvbWUgU0NNVGVzdCBiYXNlLWNsYXNzIHdoaWNoIGJvdGggU1ZOVGVzdCBhbmQgR2l0
VGVzdCBpbmhlcml0IGZyb20uCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
YXR1c2JvdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
YXR1c2JvdC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0YXR1c2JvdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAjCiAj
IFdlYktpdCdzIFB5dGhvbiBtb2R1bGUgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIENvbW1pdCBR
dWV1ZSBzdGF0dXMgcGFnZS4KIAotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGltcG9ydCBs
b2cKLWZyb20gbW9kdWxlcy53ZWJraXRfbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCitmcm9tIHdl
YmtpdHB5LndlYmtpdF9sb2dnaW5nIGltcG9ydCBsb2cKK2Zyb20gd2Via2l0cHkud2Via2l0X21l
Y2hhbml6ZSBpbXBvcnQgQnJvd3NlcgogCi0jIFdlYktpdCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkg
b2YgQmVhdXRpZnVsU291cCBpbiBTY3JpcHRzL21vZHVsZXMKKyMgV2ViS2l0IGluY2x1ZGVzIGEg
YnVpbHQgY29weSBvZiBCZWF1dGlmdWxTb3VwIGluIFNjcmlwdHMvd2Via2l0cHkKICMgc28gdGhp
cyBpbXBvcnQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgogZnJvbSAuQmVhdXRpZnVsU291cCBpbXBv
cnQgQmVhdXRpZnVsU291cAogCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
ZXBzZXF1ZW5jZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzZXF1ZW5jZS5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0ZXBzZXF1ZW5jZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDEx
IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1mcm9tIG1vZHVsZXMuYnVpbGRz
dGVwcyBpbXBvcnQgQ29tbWFuZE9wdGlvbnMKLWZyb20gbW9kdWxlcy5leGVjdXRpdmUgaW1wb3J0
IFNjcmlwdEVycm9yCi1mcm9tIG1vZHVsZXMud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZwotZnJv
bSBtb2R1bGVzLnNjbSBpbXBvcnQgQ2hlY2tvdXROZWVkc1VwZGF0ZQotZnJvbSBtb2R1bGVzLnF1
ZXVlZW5naW5lIGltcG9ydCBRdWV1ZUVuZ2luZQorZnJvbSB3ZWJraXRweS5idWlsZHN0ZXBzIGlt
cG9ydCBDb21tYW5kT3B0aW9ucworZnJvbSB3ZWJraXRweS5leGVjdXRpdmUgaW1wb3J0IFNjcmlw
dEVycm9yCitmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGltcG9ydCBsb2cKK2Zyb20gd2Vi
a2l0cHkuc2NtIGltcG9ydCBDaGVja291dE5lZWRzVXBkYXRlCitmcm9tIHdlYmtpdHB5LnF1ZXVl
ZW5naW5lIGltcG9ydCBRdWV1ZUVuZ2luZQogCiAKIGNsYXNzIFN0ZXBTZXF1ZW5jZUVycm9ySGFu
ZGxlcigpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJraXRfbG9nZ2lu
Z191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3dlYmtpdF9sb2dnaW5nX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvd2Via2l0X2xvZ2dpbmdfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDggKzMyLDggQEAgaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgdGVtcGZpbGUK
IGltcG9ydCB1bml0dGVzdAogCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRF
cnJvcgotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGltcG9ydCAqCitmcm9tIHdlYmtpdHB5
LmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dp
bmcgaW1wb3J0ICoKIAogY2xhc3MgTG9nZ2luZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCklu
ZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmtpdHBvcnRfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJraXRwb3J0X3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvd2Via2l0cG9ydF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBA
QAogCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBtb2R1bGVzLndlYmtpdHBvcnQgaW1wb3J0IFdl
YktpdFBvcnQsIE1hY1BvcnQsIEd0a1BvcnQsIFF0UG9ydCwgQ2hyb21pdW1Qb3J0Citmcm9tIHdl
YmtpdHB5LndlYmtpdHBvcnQgaW1wb3J0IFdlYktpdFBvcnQsIE1hY1BvcnQsIEd0a1BvcnQsIFF0
UG9ydCwgQ2hyb21pdW1Qb3J0CiAKIGNsYXNzIFdlYktpdFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICBkZWYgdGVzdF9tYWNfcG9ydChzZWxmKToKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbWFuZHMvY29tbWFuZHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9jb21tYW5kdGVzdC5weQkocmV2aXNp
b24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL2NvbW1h
bmR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBACiAKIGltcG9ydCB1bml0
dGVzdAogCi1mcm9tIG1vZHVsZXMubW9jayBpbXBvcnQgTW9jawotZnJvbSBtb2R1bGVzLm1vY2tf
YnVnemlsbGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFUb29sCi1mcm9tIG1vZHVsZXMub3V0cHV0
Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRweS5tb2NrIGltcG9ydCBN
b2NrCitmcm9tIHdlYmtpdHB5Lm1vY2tfYnVnemlsbGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFU
b29sCitmcm9tIHdlYmtpdHB5Lm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIAog
Y2xhc3MgQ29tbWFuZHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgYXNzZXJ0X2V4
ZWN1dGVfb3V0cHV0cyhzZWxmLCBjb21tYW5kLCBhcmdzLCBleHBlY3RlZF9zdGRvdXQ9IiIsIGV4
cGVjdGVkX3N0ZGVycj0iIiwgb3B0aW9ucz1Nb2NrKCksIHRvb2w9TW9ja0J1Z3ppbGxhVG9vbCgp
KToKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvZG93bmxvYWQu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9k
b3dubG9hZC5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1hbmRzL2Rvd25sb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIsMTYg
QEAgaW1wb3J0IG9zCiAKIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiAKLWZyb20g
bW9kdWxlcy5idWd6aWxsYSBpbXBvcnQgcGFyc2VfYnVnX2lkCitmcm9tIHdlYmtpdHB5LmJ1Z3pp
bGxhIGltcG9ydCBwYXJzZV9idWdfaWQKICMgV2UgY291bGQgaW5zdGVhZCB1c2UgZnJvbSBtb2R1
bGVzIGltcG9ydCBidWlsZHN0ZXBzIGFuZCB0aGVuIHByZWZpeCBldmVyeSBidWlsZHN0ZXAgd2l0
aCAiYnVpbGRzdGVwcy4iCi1mcm9tIG1vZHVsZXMuYnVpbGRzdGVwcyBpbXBvcnQgKgotZnJvbSBt
b2R1bGVzLmNoYW5nZWxvZ3MgaW1wb3J0IENoYW5nZUxvZwotZnJvbSBtb2R1bGVzLmNvbW1lbnRz
IGltcG9ydCBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0Ci1mcm9tIG1vZHVsZXMuZXhlY3V0
aXZlIGltcG9ydCBTY3JpcHRFcnJvcgotZnJvbSBtb2R1bGVzLmdyYW1tYXIgaW1wb3J0IHBsdXJh
bGl6ZQotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCi1mcm9t
IG1vZHVsZXMubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1t
YW5kLCBDb21tYW5kCi1mcm9tIG1vZHVsZXMuc3RlcHNlcXVlbmNlIGltcG9ydCBTdGVwU2VxdWVu
Y2UKK2Zyb20gd2Via2l0cHkuYnVpbGRzdGVwcyBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5jaGFu
Z2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKK2Zyb20gd2Via2l0cHkuY29tbWVudHMgaW1wb3J0IGJ1
Z19jb21tZW50X2Zyb21fY29tbWl0X3RleHQKK2Zyb20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9y
dCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKK2Zy
b20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGVycm9yLCBsb2cKK2Zyb20gd2Via2l0
cHkubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1tYW5kLCBD
b21tYW5kCitmcm9tIHdlYmtpdHB5LnN0ZXBzZXF1ZW5jZSBpbXBvcnQgU3RlcFNlcXVlbmNlCiAK
IAogIyBGSVhNRTogTW92ZSB0aGlzIHRvIGEgbW9yZSBnZW5lcmFsIGxvY2F0aW9uLgpJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9kb3dubG9hZF91bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL2Rv
d25sb2FkX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbWFuZHMvZG93bmxvYWRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDkgKzI4LDkgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gbW9kdWxlcy5jb21t
YW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Ci1mcm9tIG1vZHVsZXMuY29tbWFu
ZHMuZG93bmxvYWQgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy5tb2NrIGltcG9ydCBNb2NrCitmcm9t
IHdlYmtpdHB5LmNvbW1hbmRzLmNvbW1hbmR0ZXN0IGltcG9ydCBDb21tYW5kc1Rlc3QKK2Zyb20g
d2Via2l0cHkuY29tbWFuZHMuZG93bmxvYWQgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkubW9jayBp
bXBvcnQgTW9jawogCiBjbGFzcyBEb3dubG9hZENvbW1hbmRzVGVzdChDb21tYW5kc1Rlc3QpOgog
ICAgIGRlZiBfZGVmYXVsdF9vcHRpb25zKHNlbGYpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3RlbS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL2Vhcmx5X3dhcm5pbmdfc3lz
dGVtLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbWFuZHMvZWFybHlfd2FybmluZ19zeXN0ZW0ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEw
ICsyOSwxMCBAQAogCiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCi1mcm9tIG1vZHVs
ZXMuY29tbWFuZHMucXVldWVzIGltcG9ydCBBYnN0cmFjdFJldmlld1F1ZXVlCi1mcm9tIG1vZHVs
ZXMuY29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSBtb2R1bGVzLmV4ZWN1dGl2
ZSBpbXBvcnQgU2NyaXB0RXJyb3IKLWZyb20gbW9kdWxlcy53ZWJraXRwb3J0IGltcG9ydCBXZWJL
aXRQb3J0Citmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLnF1ZXVlcyBpbXBvcnQgQWJzdHJhY3RSZXZp
ZXdRdWV1ZQorZnJvbSB3ZWJraXRweS5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0Citm
cm9tIHdlYmtpdHB5LmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHku
d2Via2l0cG9ydCBpbXBvcnQgV2ViS2l0UG9ydAogCiAKIGNsYXNzIEFic3RyYWN0RWFybHlXYXJu
aW5nU3lzdGVtKEFic3RyYWN0UmV2aWV3UXVldWUpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tYW5kcy9lYXJseV93YXJuaW5nX3N5c3RlbV91bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL2Vhcmx5X3dh
cm5pbmdfc3lzdGVtX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvZWFybHlfd2FybmluZ19zeXN0ZW1fdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKIGltcG9ydCBvcwogaW1wb3J0IHVu
aXR0ZXN0CiAKLWZyb20gbW9kdWxlcy5jb21tYW5kcy5lYXJseV93YXJuaW5nX3N5c3RlbSBpbXBv
cnQgKgotZnJvbSBtb2R1bGVzLmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QK
LWZyb20gbW9kdWxlcy5tb2NrIGltcG9ydCBNb2NrCitmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmVh
cmx5X3dhcm5pbmdfc3lzdGVtIGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLnF1ZXVl
c3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QKK2Zyb20gd2Via2l0cHkubW9jayBpbXBvcnQgTW9jawog
CiBjbGFzcyBFYXJseVdhcm5pbmdTeXRlbVRlc3QoUXVldWVzVGVzdCk6CiAgICAgZGVmIHRlc3Rf
Y2hyb21pdW1fZXdzKHNlbGYpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tYW5kcy9xdWVyaWVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbWFuZHMvcXVlcmllcy5weQkocmV2aXNpb24gNTI3MDIpCisrKyBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXJpZXMucHkJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDEwICszMSwxMCBAQAogCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgogCi1m
cm9tIG1vZHVsZXMuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90Ci1mcm9tIG1vZHVsZXMuY29tbWl0
dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSBtb2R1bGVzLndlYmtpdF9sb2dnaW5nIGlt
cG9ydCBsb2cKLWZyb20gbW9kdWxlcy5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBDb21tYW5kCitm
cm9tIHdlYmtpdHB5LmJ1aWxkYm90IGltcG9ydCBCdWlsZEJvdAorZnJvbSB3ZWJraXRweS5jb21t
aXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0Citmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5n
IGltcG9ydCBsb2cKK2Zyb20gd2Via2l0cHkubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQ29tbWFu
ZAogCiAKIGNsYXNzIEJ1Z3NUb0NvbW1pdChDb21tYW5kKToKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
YW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEg
QEAKIAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gbW9kdWxlcy5idWd6aWxsYSBpbXBvcnQgQnVn
emlsbGEKLWZyb20gbW9kdWxlcy5jb21tYW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNU
ZXN0Ci1mcm9tIG1vZHVsZXMuY29tbWFuZHMucXVlcmllcyBpbXBvcnQgKgotZnJvbSBtb2R1bGVz
Lm1vY2sgaW1wb3J0IE1vY2sKLWZyb20gbW9kdWxlcy5tb2NrX2J1Z3ppbGxhdG9vbCBpbXBvcnQg
TW9ja0J1Z3ppbGxhVG9vbAorZnJvbSB3ZWJraXRweS5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEK
K2Zyb20gd2Via2l0cHkuY29tbWFuZHMuY29tbWFuZHRlc3QgaW1wb3J0IENvbW1hbmRzVGVzdAor
ZnJvbSB3ZWJraXRweS5jb21tYW5kcy5xdWVyaWVzIGltcG9ydCAqCitmcm9tIHdlYmtpdHB5Lm1v
Y2sgaW1wb3J0IE1vY2sKK2Zyb20gd2Via2l0cHkubW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1v
Y2tCdWd6aWxsYVRvb2wKIAogY2xhc3MgUXVlcnlDb21tYW5kc1Rlc3QoQ29tbWFuZHNUZXN0KToK
ICAgICBkZWYgdGVzdF9idWdzX3RvX2NvbW1pdChzZWxmKToKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVldWVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVldWVzLnB5CShyZXZpc2lvbiA1MjcwMikK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvcXVldWVzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxNCArMzQsMTQgQEAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRp
bWUKIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBmcm9tIFN0cmluZ0lPIGltcG9y
dCBTdHJpbmdJTwogCi1mcm9tIG1vZHVsZXMuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgot
ZnJvbSBtb2R1bGVzLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQotZnJvbSBtb2R1bGVzLndlYmtp
dF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCi1mcm9tIG1vZHVsZXMubXVsdGljb21tYW5kdG9v
bCBpbXBvcnQgQ29tbWFuZAotZnJvbSBtb2R1bGVzLnBhdGNoY29sbGVjdGlvbiBpbXBvcnQgUGVy
c2lzdGVudFBhdGNoQ29sbGVjdGlvbiwgUGVyc2lzdGVudFBhdGNoQ29sbGVjdGlvbkRlbGVnYXRl
Ci1mcm9tIG1vZHVsZXMuc3RhdHVzYm90IGltcG9ydCBTdGF0dXNCb3QKLWZyb20gbW9kdWxlcy5z
dGVwc2VxdWVuY2UgaW1wb3J0IFN0ZXBTZXF1ZW5jZUVycm9ySGFuZGxlcgotZnJvbSBtb2R1bGVz
LnF1ZXVlZW5naW5lIGltcG9ydCBRdWV1ZUVuZ2luZSwgUXVldWVFbmdpbmVEZWxlZ2F0ZQorZnJv
bSB3ZWJraXRweS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5Lmdy
YW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQorZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBv
cnQgZXJyb3IsIGxvZworZnJvbSB3ZWJraXRweS5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBDb21t
YW5kCitmcm9tIHdlYmtpdHB5LnBhdGNoY29sbGVjdGlvbiBpbXBvcnQgUGVyc2lzdGVudFBhdGNo
Q29sbGVjdGlvbiwgUGVyc2lzdGVudFBhdGNoQ29sbGVjdGlvbkRlbGVnYXRlCitmcm9tIHdlYmtp
dHB5LnN0YXR1c2JvdCBpbXBvcnQgU3RhdHVzQm90Citmcm9tIHdlYmtpdHB5LnN0ZXBzZXF1ZW5j
ZSBpbXBvcnQgU3RlcFNlcXVlbmNlRXJyb3JIYW5kbGVyCitmcm9tIHdlYmtpdHB5LnF1ZXVlZW5n
aW5lIGltcG9ydCBRdWV1ZUVuZ2luZSwgUXVldWVFbmdpbmVEZWxlZ2F0ZQogCiBjbGFzcyBBYnN0
cmFjdFF1ZXVlKENvbW1hbmQsIFF1ZXVlRW5naW5lRGVsZWdhdGUpOgogICAgIHdhdGNoZXJzID0g
WwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9xdWV1ZXNfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
YW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUyNzAyKQorKysgV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDExICsyOSwxMSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJv
bSBtb2R1bGVzLmNvbW1hbmRzLmNvbW1hbmR0ZXN0IGltcG9ydCBDb21tYW5kc1Rlc3QKLWZyb20g
bW9kdWxlcy5jb21tYW5kcy5xdWV1ZXMgaW1wb3J0ICoKLWZyb20gbW9kdWxlcy5jb21tYW5kcy5x
dWV1ZXN0ZXN0IGltcG9ydCBRdWV1ZXNUZXN0Ci1mcm9tIG1vZHVsZXMubW9ja19idWd6aWxsYXRv
b2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wKLWZyb20gbW9kdWxlcy5vdXRwdXRjYXB0dXJlIGlt
cG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmNvbW1hbmR0ZXN0IGlt
cG9ydCBDb21tYW5kc1Rlc3QKK2Zyb20gd2Via2l0cHkuY29tbWFuZHMucXVldWVzIGltcG9ydCAq
Citmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QKK2Zy
b20gd2Via2l0cHkubW9ja19idWd6aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wKK2Zy
b20gd2Via2l0cHkub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogCiAKIGNsYXNz
IFRlc3RRdWV1ZShBYnN0cmFjdFF1ZXVlKToKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbWFuZHMvcXVldWVzdGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3F1ZXVlc3Rlc3QucHkJKHJldmlzaW9uIDUyNzAyKQor
KysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9xdWV1ZXN0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBACiAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9t
IG1vZHVsZXMubW9jayBpbXBvcnQgTW9jawotZnJvbSBtb2R1bGVzLm1vY2tfYnVnemlsbGF0b29s
IGltcG9ydCBNb2NrQnVnemlsbGFUb29sCi1mcm9tIG1vZHVsZXMub3V0cHV0Y2FwdHVyZSBpbXBv
cnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRweS5tb2NrIGltcG9ydCBNb2NrCitmcm9tIHdl
YmtpdHB5Lm1vY2tfYnVnemlsbGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFUb29sCitmcm9tIHdl
YmtpdHB5Lm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIAogCiBjbGFzcyBNb2Nr
UXVldWVFbmdpbmUob2JqZWN0KToKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbWFuZHMvdXBsb2FkLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbWFuZHMvdXBsb2FkLnB5CShyZXZpc2lvbiA1MjcwMikKKysrIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxNCArMzUsMTQgQEAgaW1wb3J0IHN5cwogCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29w
dGlvbgogCi1mcm9tIG1vZHVsZXMuYnVnemlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAotZnJvbSBt
b2R1bGVzLmJ1aWxkc3RlcHMgaW1wb3J0IFByZXBhcmVDaGFuZ2VMb2dTdGVwLCBFZGl0Q2hhbmdl
TG9nU3RlcCwgQ29uZmlybURpZmZTdGVwLCBDb21tYW5kT3B0aW9ucywgT2Jzb2xldGVQYXRjaGVz
T25CdWdTdGVwLCBQb3N0RGlmZlRvQnVnU3RlcCwgUHJvbXB0Rm9yQnVnT3JUaXRsZVN0ZXAsIENy
ZWF0ZUJ1Z1N0ZXAKLWZyb20gbW9kdWxlcy5jb21tYW5kcy5kb3dubG9hZCBpbXBvcnQgQWJzdHJh
Y3RTZXF1ZW5jZWRDb21tbWFuZAotZnJvbSBtb2R1bGVzLmNvbW1lbnRzIGltcG9ydCBidWdfY29t
bWVudF9mcm9tX3N2bl9yZXZpc2lvbgotZnJvbSBtb2R1bGVzLmNvbW1pdHRlcnMgaW1wb3J0IENv
bW1pdHRlckxpc3QKLWZyb20gbW9kdWxlcy5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20g
bW9kdWxlcy53ZWJraXRfbG9nZ2luZyBpbXBvcnQgZXJyb3IsIGxvZwotZnJvbSBtb2R1bGVzLm11
bHRpY29tbWFuZHRvb2wgaW1wb3J0IENvbW1hbmQsIEFic3RyYWN0RGVjbGFyYXRpdmVDb21tbWFu
ZAorZnJvbSB3ZWJraXRweS5idWd6aWxsYSBpbXBvcnQgcGFyc2VfYnVnX2lkCitmcm9tIHdlYmtp
dHB5LmJ1aWxkc3RlcHMgaW1wb3J0IFByZXBhcmVDaGFuZ2VMb2dTdGVwLCBFZGl0Q2hhbmdlTG9n
U3RlcCwgQ29uZmlybURpZmZTdGVwLCBDb21tYW5kT3B0aW9ucywgT2Jzb2xldGVQYXRjaGVzT25C
dWdTdGVwLCBQb3N0RGlmZlRvQnVnU3RlcCwgUHJvbXB0Rm9yQnVnT3JUaXRsZVN0ZXAsIENyZWF0
ZUJ1Z1N0ZXAKK2Zyb20gd2Via2l0cHkuY29tbWFuZHMuZG93bmxvYWQgaW1wb3J0IEFic3RyYWN0
U2VxdWVuY2VkQ29tbW1hbmQKK2Zyb20gd2Via2l0cHkuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21t
ZW50X2Zyb21fc3ZuX3JldmlzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1pdHRlcnMgaW1wb3J0IENv
bW1pdHRlckxpc3QKK2Zyb20gd2Via2l0cHkuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCitmcm9t
IHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCitmcm9tIHdlYmtpdHB5
Lm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IENvbW1hbmQsIEFic3RyYWN0RGVjbGFyYXRpdmVDb21t
bWFuZAogCiAjIEZJWE1FOiBSZXF1aXJlcyB1bml0IHRlc3QuCiBjbGFzcyBDb21taXRNZXNzYWdl
Rm9yQ3VycmVudERpZmYoQ29tbWFuZCk6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1hbmRzL3VwbG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3VwbG9hZF91bml0dGVzdC5weQkocmV2aXNpb24g
NTI3MDIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL3VwbG9hZF91
bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiBpbXBvcnQgdW5p
dHRlc3QKIAotZnJvbSBtb2R1bGVzLmNvbW1hbmRzLmNvbW1hbmR0ZXN0IGltcG9ydCBDb21tYW5k
c1Rlc3QKLWZyb20gbW9kdWxlcy5jb21tYW5kcy51cGxvYWQgaW1wb3J0ICoKLWZyb20gbW9kdWxl
cy5tb2NrX2J1Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbAorZnJvbSB3ZWJraXRw
eS5jb21tYW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Citmcm9tIHdlYmtpdHB5
LmNvbW1hbmRzLnVwbG9hZCBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5tb2NrX2J1Z3ppbGxhdG9v
bCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbAogCiBjbGFzcyBVcGxvYWRDb21tYW5kc1Rlc3QoQ29t
bWFuZHNUZXN0KToKICAgICBkZWYgdGVzdF9hc3NpZ25fdG9fY29tbWl0dGVyKHNlbGYpOgo=
</data>
<flag name="review"
          id="27888"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>