<?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>220369</bug_id>
          
          <creation_ts>2021-01-06 10:32:49 -0800</creation_ts>
          <short_desc>[webkitscmpy] Split program into separate files</short_desc>
          <delta_ts>2021-01-07 17:02:28 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=219982</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>dewei_zhu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1717696</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-06 10:32:49 -0800</bug_when>
    <thetext>As per a comment by Dewei on https://bugs.webkit.org/show_bug.cgi?id=219982, we considered doing this originally, but there was not enough code to justify the change. Now there is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717697</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-06 10:33:03 -0800</bug_when>
    <thetext>&lt;rdar://problem/72856906&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717701</commentid>
    <comment_count>2</comment_count>
      <attachid>417099</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-06 10:40:33 -0800</bug_when>
    <thetext>Created attachment 417099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718102</commentid>
    <comment_count>3</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2021-01-07 15:14:49 -0800</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718111</commentid>
    <comment_count>4</comment_count>
      <attachid>417218</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-07 15:37:45 -0800</bug_when>
    <thetext>Created attachment 417218
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718138</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-07 16:35:47 -0800</bug_when>
    <thetext>Committed r271274: &lt;https://trac.webkit.org/changeset/271274&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417218.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718154</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-07 17:02:28 -0800</bug_when>
    <thetext>Committed r271278: &lt;https://trac.webkit.org/changeset/271278&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417099</attachid>
            <date>2021-01-06 10:40:33 -0800</date>
            <delta_ts>2021-01-07 15:37:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220369-20210106104031.patch</filename>
            <type>text/plain</type>
            <size>52683</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTIwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDIxLTAxLTA2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFNwbGl0IHByb2dyYW0gaW50byBzZXBhcmF0ZSBm
aWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIw
MzY5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83Mjg1NjkwNj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5OiBCdW1wIHZlcnNpb24uCisgICAgICAgICog
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplOiBN
b3ZlIHRvIHdlYmtpdHNjbXB5L3Byb2dyYW0vY2Fub25pY2FsaXplLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weTog
VXBkYXRlIGltcG9ydHMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvcHJvZ3JhbTogTW92ZWQgZnJvbSB3ZWJraXRzY21weS9wcm9ncmFtLnB5Lgor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dy
YW0ucHk6IE1vdmVkIHRvIHdlYmtpdHNjbXB5L3Byb2dyYW0uCisgICAgICAgICogU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9fX2luaXRfXy5weTogTW92
ZWQgZnJvbSB3ZWJraXRzY21weS9wcm9ncmFtLnB5LgorICAgICAgICAqIFNjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY2Fub25pY2FsaXplOiBNb3ZlZCBm
cm9tIHdlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIu
cHk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW0vY2Fub25pY2FsaXplL21lc3NhZ2UucHk6IERpdHRvLgorICAgICAgICAq
IFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY2hlY2tv
dXQucHk6IE1vdmVkIGZyb20gd2Via2l0c2NtcHkvcHJvZ3JhbS5weS4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQucHk6
IE1vdmVkIGZyb20gd2Via2l0c2NtcHkvcHJvZ3JhbS5weS4KKyAgICAgICAgKiBTY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHk6IE1vdmVkIGZy
b20gd2Via2l0c2NtcHkvcHJvZ3JhbS5weS4KKwogMjAyMS0wMS0wNiAgSm9uYXRoYW4gQmVkYXJk
IDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBjb21tYW5k
IHRvIGNhbm9uaWNhbGl6ZSB1bnB1c2hlZCBjb21taXRzIChGb2xsb3ctdXAgZml4KQpJbmRleDog
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI3MTIwMykKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3
ICs0Niw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdl
YmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11
cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA3
LCAxKQordmVyc2lvbiA9IFZlcnNpb24oMCwgNywgMikKIAogQXV0b0luc3RhbGwucmVnaXN0ZXIo
UGFja2FnZSgnZmFzdGVuZXJzJywgVmVyc2lvbigwLCAxNSwgMCkpKQogQXV0b0luc3RhbGwucmVn
aXN0ZXIoUGFja2FnZSgnbW9ub3RvbmljJywgVmVyc2lvbigxLCA1KSkpCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19p
bml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzEyMDMp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5v
bmljYWxpemUvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTMgKzAsMCBAQAotIyBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9y
dCBvcwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotCi1m
cm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgYXJndW1lbnRzLCBydW4sIHN0cmluZ191dGlscwotZnJv
bSB3ZWJraXRzY21weSBpbXBvcnQgbG9nCi1mcm9tIHdlYmtpdHNjbXB5LnByb2dyYW0gaW1wb3J0
IENvbW1hbmQKLQotCi1jbGFzcyBDYW5vbmljYWxpemUoQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICdj
YW5vbmljYWxpemUnCi0gICAgaGVscCA9ICdUYWtlIHRoZSBzZXQgb2YgY29tbWl0cyB3aGljaCBo
YXZlIG5vdCB5ZXQgYmVlbiBwdXNoZWQgYW5kIGVkaXQgaGlzdG9yeSB0byBub3JtYWxpemUgdGhl
ICcgK1wKLSAgICAgICAgICAgJ2NvbW1pdHRlcnMgd2l0aCBleGlzdGluZyBjb250cmlidXRvciBt
YXBwaW5nIGFuZCBhZGQgaWRlbnRpZmllcnMgdG8gY29tbWl0IG1lc3NhZ2VzJwotCi0gICAgQGNs
YXNzbWV0aG9kCi0gICAgZGVmIHBhcnNlcihjbHMsIHBhcnNlciwgbG9nZ2Vycz1Ob25lKToKLSAg
ICAgICAgb3V0cHV0X2FyZ3MgPSBhcmd1bWVudHMuTG9nZ2luZ0dyb3VwKAotICAgICAgICAgICAg
cGFyc2VyLAotICAgICAgICAgICAgbG9nZ2Vycz1sb2dnZXJzLAotICAgICAgICAgICAgaGVscD0n
e30gYW1vdW50IG9mIGxvZ2dpbmcgYW5kIGBnaXQgcmViYXNlYCBpbmZvcm1hdGlvbiBkaXNwbGF5
ZWQnCi0gICAgICAgICkKLSAgICAgICAgb3V0cHV0X2FyZ3MuYWRkX2FyZ3VtZW50KAotICAgICAg
ICAgICAgJy0taWRlbnRpZmllcicsICctLW5vLWlkZW50aWZpZXInLAotICAgICAgICAgICAgaGVs
cD0nQWRkIGluIHRoZSBpZGVudGlmaWVyIHRvIGNvbW1pdCBtZXNzYWdlcywgdHJ1ZSBieSBkZWZh
dWx0JywKLSAgICAgICAgICAgIGFjdGlvbj1hcmd1bWVudHMuTm9BY3Rpb24sCi0gICAgICAgICAg
ICBkZXN0PSdpZGVudGlmaWVyJywKLSAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwKLSAgICAgICAg
KQotICAgICAgICBvdXRwdXRfYXJncy5hZGRfYXJndW1lbnQoCi0gICAgICAgICAgICAnLS1yZW1v
dGUnLAotICAgICAgICAgICAgaGVscD0nQ29tcGFyZSBhZ2FpbnN0IGEgZGlmZmVyZW50IHJlbW90
ZScsCi0gICAgICAgICAgICBkZXN0PSdyZW1vdGUnLAotICAgICAgICAgICAgZGVmYXVsdD0nb3Jp
Z2luJywKLSAgICAgICAgKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1haW4oY2xzLCBh
cmdzLCByZXBvc2l0b3J5LCBpZGVudGlmaWVyX3RlbXBsYXRlPU5vbmUsICoqa3dhcmdzKToKLSAg
ICAgICAgaWYgbm90IHJlcG9zaXRvcnkucGF0aDoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoJ0Nhbm5vdCBjYW5vbmljYWxpemUgY29tbWl0cyBvbiBhIHJlbW90ZSByZXBvc2l0b3J5XG4n
KQotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgaWYgbm90IHJlcG9zaXRvcnkuaXNfZ2l0
OgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQ29tbWl0cyBjYW4gb25seSBiZSBjYW5v
bmljYWxpemVkIG9uIGEgR2l0IHJlcG9zaXRvcnlcbicpCi0gICAgICAgICAgICByZXR1cm4gMQot
Ci0gICAgICAgIGJyYW5jaCA9IHJlcG9zaXRvcnkuYnJhbmNoCi0gICAgICAgIGlmIG5vdCBicmFu
Y2g6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGN1
cnJlbnQgYnJhbmNoXG4nKQotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIHJlc3VsdCA9
IHJ1bihbCi0gICAgICAgICAgICByZXBvc2l0b3J5LmV4ZWN1dGFibGUoKSwgJ3Jldi1saXN0JywK
LSAgICAgICAgICAgICctLWNvdW50JywgJy0tbm8tbWVyZ2VzJywKLSAgICAgICAgICAgICd7cmVt
b3RlfS97YnJhbmNofS4ue2JyYW5jaH0nLmZvcm1hdChyZW1vdGU9YXJncy5yZW1vdGUsIGJyYW5j
aD1icmFuY2gpLAotICAgICAgICBdLCBjYXB0dXJlX291dHB1dD1UcnVlLCBjd2Q9cmVwb3NpdG9y
eS5yb290X3BhdGgpCi0gICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgotICAgICAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgnRmFpbGVkIHRvIGZpbmQgbG9jYWwgY29tbWl0c1xuJykKLSAgICAg
ICAgICAgIHJldHVybiAtMQotICAgICAgICBkaWZmZXJlbmNlID0gaW50KHJlc3VsdC5zdGRvdXQu
cnN0cmlwKCkpCi0gICAgICAgIGlmIGRpZmZlcmVuY2UgPD0gMDoKLSAgICAgICAgICAgIHByaW50
KCdObyBsb2NhbCBjb21taXRzIHRvIGJlIGVkaXRlZCcpCi0gICAgICAgICAgICByZXR1cm4gMAot
ICAgICAgICBsb2cud2FybmluZygne30gdG8gYmUgZWRpdHRlZC4uLicuZm9ybWF0KHN0cmluZ191
dGlscy5wbHVyYWxpemUoZGlmZmVyZW5jZSwgJ2NvbW1pdCcpKSkKLQotICAgICAgICBiYXNlID0g
cmVwb3NpdG9yeS5maW5kKCd7fX57fScuZm9ybWF0KGJyYW5jaCwgZGlmZmVyZW5jZSkpCi0gICAg
ICAgIGxvZy5pbmZvKCdCYXNlIGNvbW1pdCBpcyB7fSAocmVmIHt9KScuZm9ybWF0KGJhc2UsIGJh
c2UuaGFzaCkpCi0KLSAgICAgICAgbG9nLmRlYnVnKCdTYXZpbmcgY29udHJpYnV0b3JzIHRvIHRl
bXAgZmlsZSB0byBiZSBwaWNrZWQgdXAgYnkgY2hpbGQgcHJvY2Vzc2VzJykKLSAgICAgICAgY29u
dHJpYnV0b3JzID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3t9LWNvbnRy
aWJ1dG9ycy5qc29uJy5mb3JtYXQob3MuZ2V0cGlkKCkpKQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICB3aXRoIG9wZW4oY29udHJpYnV0b3JzLCAndycpIGFzIGZpbGU6Ci0gICAgICAgICAgICAg
ICAgcmVwb3NpdG9yeS5jb250cmlidXRvcnMuc2F2ZShmaWxlKQotCi0gICAgICAgICAgICBtZXNz
YWdlX2ZpbHRlciA9IFsKLSAgICAgICAgICAgICAgICAnLS1tc2ctZmlsdGVyJywKLSAgICAgICAg
ICAgICAgICAie30ge30gJ3t9JyIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICBzeXMuZXhl
Y3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFt
ZShfX2ZpbGVfXyksICdtZXNzYWdlLnB5JyksCi0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXJfdGVtcGxhdGUgb3IgJ0lkZW50aWZpZXI6IHt9JywKLSAgICAgICAgICAgICAgICApLAotICAg
ICAgICAgICAgXSBpZiBhcmdzLmlkZW50aWZpZXIgZWxzZSBbXQotCi0gICAgICAgICAgICB3aXRo
IG9wZW4ob3MuZGV2bnVsbCwgJ3cnKSBhcyBkZXZudWxsOgotICAgICAgICAgICAgICAgIHN1YnBy
b2Nlc3MuY2hlY2tfY2FsbChbCi0gICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuZXhlY3V0
YWJsZSgpLCAnZmlsdGVyLWJyYW5jaCcsICctZicsCi0gICAgICAgICAgICAgICAgICAgICctLWVu
di1maWx0ZXInLCAnJyd7b3ZlcndyaXRlX21lc3NhZ2V9Ci1jb21taXR0ZXJPdXRwdXQ9JCh7cHl0
aG9ufSB7Y29tbWl0dGVyX3B5fSB7Y29udHJpYnV0b3JfanNvbn0pCi1LRVk9JycKLVZBTFVFPScn
Ci1mb3Igd29yZCBpbiAkY29tbWl0dGVyT3V0cHV0OyBkbwotICAgIGlmIFtbICR3b3JkID09IEdJ
VF8qIF1dIDsgdGhlbgotICAgICAgICBpZiBbWyAkS0VZID09IEdJVF8qIF1dIDsgdGhlbgotICAg
ICAgICAgICAge3NldHRpbmdfbWVzc2FnZX0KLSAgICAgICAgICAgIHByaW50ZiAtdiAkS0VZICIk
e3tWQUxVRTo6JCgoJHt7I1ZBTFVFfX0gLSAxKSl9fSIKLSAgICAgICAgICAgIEtFWT0nJwotICAg
ICAgICAgICAgVkFMVUU9JycKLSAgICAgICAgZmkKLSAgICBmaQotICAgIGlmIFtbICIkS0VZIiA9
PSAiIiBdXSA7IHRoZW4KLSAgICAgICAgS0VZPSIkd29yZCIKLSAgICBlbHNlCi0gICAgICAgIFZB
TFVFPSIkVkFMVUUkd29yZCAiCi0gICAgZmkKLWRvbmUKLWlmIFtbICRLRVkgPT0gR0lUXyogXV0g
OyB0aGVuCi0gICAge3NldHRpbmdfbWVzc2FnZX0KLSAgICBwcmludGYgLXYgJEtFWSAiJHt7VkFM
VUU6OiQoKCR7eyNWQUxVRX19IC0gMSkpfX0iCi1maScnJy5mb3JtYXQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvdmVyd3JpdGVfbWVzc2FnZT0nJyBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLklO
Rk8gZWxzZSAnZWNobyAiT3ZlcndyaXRpbmcgJEdJVF9DT01NSVQiJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB5dGhvbj1zeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbW1pdHRlcl9weT1vcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2Nv
bW1pdHRlci5weScpLAotICAgICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0b3JfanNvbj1j
b250cmlidXRvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nX21lc3NhZ2U9Jycg
aWYgbG9nLmxldmVsID4gbG9nZ2luZy5ERUJVRyBlbHNlICdlY2hvICIgICAgJEtFWT0kVkFMVUUi
JywKLSAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICBdICsgbWVzc2FnZV9m
aWx0ZXIgKyBbJ3t9Li4ue30nLmZvcm1hdChicmFuY2gsIGJhc2UuaGFzaCldLAotICAgICAgICAg
ICAgICAgICAgICBjd2Q9cmVwb3NpdG9yeS5yb290X3BhdGgsCi0gICAgICAgICAgICAgICAgICAg
IGVudj17J0ZJTFRFUl9CUkFOQ0hfU1FVRUxDSF9XQVJOSU5HJzogJzEnLCAnUFlUSE9OUEFUSCc6
ICc6Jy5qb2luKHN5cy5wYXRoKX0sCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1kZXZudWxs
IGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5vbmUsCi0gICAgICAgICAgICAg
ICAgICAgIHN0ZGVycj1kZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBlbHNl
IE5vbmUsCi0gICAgICAgICAgICAgICAgKQotCi0gICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNh
bGxlZFByb2Nlc3NFcnJvcjoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0
byBtb2RpZnkgbG9jYWwgY29tbWl0IG1lc3NhZ2VzXG4nKQotICAgICAgICAgICAgcmV0dXJuIC0x
Ci0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnJlbW92ZShjb250cmlidXRvcnMp
Ci0KLSAgICAgICAgcHJpbnQoJ3t9IHN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIScuZm9ybWF0
KHN0cmluZ191dGlscy5wbHVyYWxpemUoZGlmZmVyZW5jZSwgJ2NvbW1pdCcpKSkKLQotICAgICAg
ICByZXR1cm4gMApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvY2Fub25pY2FsaXplL2NvbW1pdHRlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvY29t
bWl0dGVyLnB5CShyZXZpc2lvbiAyNzEyMDMpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5CShub25leGlz
dGVudCkKQEAgLTEsOTIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
Ci0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBv
cnQgc3lzCi0KLWZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBydW4KLWZyb20gd2Via2l0c2NtcHkg
aW1wb3J0IENvbnRyaWJ1dG9yLCBsb2NhbAotCi1FTUFJTF9SRSA9IHJlLmNvbXBpbGUocicoP1A8
ZW1haWw+W15AXStAW15AXSspKEAuKik/JykKLQotCi1kZWYgY2Fub25pY2FsaXplKG5hbWUsIGVt
YWlsLCBjb250cmlidXRvcnMpOgotICAgIG1hdGNoID0gRU1BSUxfUkUubWF0Y2goZW1haWwpCi0g
ICAgaWYgbWF0Y2g6Ci0gICAgICAgIGVtYWlsID0gbWF0Y2guZ3JvdXAoJ2VtYWlsJykKLQotICAg
IGNvbnRyaWJ1dG9yID0gY29udHJpYnV0b3JzLmdldChlbWFpbCwgY29udHJpYnV0b3JzLmdldChl
bWFpbC5sb3dlcigpKSkKLSAgICBpZiBjb250cmlidXRvcjoKLSAgICAgICAgcmV0dXJuIGNvbnRy
aWJ1dG9yLm5hbWUsIGVtYWlsIGlmIG1hdGNoIGVsc2UgY29udHJpYnV0b3IuZW1haWwKLSAgICBj
b250cmlidXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQobmFtZSkKLSAgICBpZiBjb250cmlidXRvcjoK
LSAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dG9yLm5hbWUsIGNvbnRyaWJ1dG9yLmVtYWlsCi0gICAg
cmV0dXJuIG5hbWUsIGVtYWlsCi0KLQotZGVmIG1haW4oY29udHJpYnV0b3JfZmlsZSk6Ci0gICAg
UkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCi0gICAgR0lUX0NPTU1J
VCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKLQotICAgIHdpdGggb3Blbihjb250cmli
dXRvcl9maWxlLCAncicpIGFzIGZpbGU6Ci0gICAgICAgIGNvbnRyaWJ1dG9ycyA9IENvbnRyaWJ1
dG9yLk1hcHBpbmcubG9hZChmaWxlKQotCi0gICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5v
bmljYWxpemUoCi0gICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQVVUSE9SX05BTUUnLCAnVW5r
bm93bicpLAotICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0FVVEhPUl9FTUFJTCcsICdudWxs
JyksCi0gICAgICAgIGNvbnRyaWJ1dG9ycywKLSAgICApCi0gICAgY29tbWl0dGVyLCBjb21taXR0
ZXJfZW1haWwgPSBjYW5vbmljYWxpemUoCi0gICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQ09N
TUlUVEVSX05BTUUnLCAnVW5rbm93bicpLAotICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0NP
TU1JVFRFUl9FTUFJTCcsICdudWxsJyksCi0gICAgICAgIGNvbnRyaWJ1dG9ycywKLSAgICApCi0K
LSAgICAjIEF0dGVtcHQgdG8gZXh0cmFjdCBwYXRjaC1ieQotICAgIGlmIGF1dGhvcl9lbWFpbCA9
PSBjb21taXR0ZXJfZW1haWwgYW5kIFJFUE9TSVRPUllfUEFUSCBhbmQgR0lUX0NPTU1JVDoKLSAg
ICAgICAgbG9nID0gcnVuKAotICAgICAgICAgICAgW2xvY2FsLkdpdC5leGVjdXRhYmxlKCksICds
b2cnLCBHSVRfQ09NTUlULCAnLTEnXSwKLSAgICAgICAgICAgIGN3ZD1SRVBPU0lUT1JZX1BBVEgs
IGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcsCi0gICAgICAgICkKLQotICAg
ICAgICBwYXRjaF9ieSA9IHJlLnNlYXJjaCgKLSAgICAgICAgICAgIHInXHMrUGF0Y2ggYnkgKD9Q
PGF1dGhvcj5bXjxdKykgXDwoP1A8ZW1haWw+W148XSspXD4uKiBvbiBcZCstXGQrLVxkKycsCi0g
ICAgICAgICAgICBsb2cuc3Rkb3V0LAotICAgICAgICApCi0gICAgICAgIGlmIHBhdGNoX2J5Ogot
ICAgICAgICAgICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxpemUoCi0gICAgICAg
ICAgICAgICAgcGF0Y2hfYnkuZ3JvdXAoJ2F1dGhvcicpLAotICAgICAgICAgICAgICAgIHBhdGNo
X2J5Lmdyb3VwKCdlbWFpbCcpLAotICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycywKLSAgICAg
ICAgICAgICkKLQotICAgIHByaW50KHUnR0lUX0FVVEhPUl9OQU1FIHt9Jy5mb3JtYXQoYXV0aG9y
KSkKLSAgICBwcmludCh1J0dJVF9BVVRIT1JfRU1BSUwge30nLmZvcm1hdChhdXRob3JfZW1haWwp
KQotICAgIHByaW50KHUnR0lUX0NPTU1JVFRFUl9OQU1FIHt9Jy5mb3JtYXQoY29tbWl0dGVyKSkK
LSAgICBwcmludCh1J0dJVF9DT01NSVRURVJfRU1BSUwge30nLmZvcm1hdChjb21taXR0ZXJfZW1h
aWwpKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lzLmV4aXQobWFpbihz
eXMuYXJndlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVz
c2FnZS5weQkocmV2aXNpb24gMjcxMjAzKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL21lc3NhZ2UucHkJKG5vbmV4aXN0ZW50
KQpAQCAtMSw2OSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWZyb20g
d2Via2l0c2NtcHkubG9jYWwgaW1wb3J0IEdpdAotCi0KLWRlZiBtYWluKGlucHV0ZmlsZSwgaWRl
bnRpZmllcl90ZW1wbGF0ZSk6Ci0gICAgUkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQo
J09MRFBXRCcpCi0gICAgR0lUX0NPTU1JVCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykK
LQotICAgIGlmIG5vdCBSRVBPU0lUT1JZX1BBVEg6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUo
J0ZhaWxlZCB0byByZXRyaWV2ZSByZXBvc2l0b3J5IHBhdGhcbicpCi0gICAgICAgIHJldHVybiAt
MQotICAgIGlmIG5vdCBHSVRfQ09NTUlUOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWls
ZWQgdG8gcmV0cmlldmUgZ2l0IGhhc2hcbicpCi0gICAgICAgIHJldHVybiAtMQotCi0gICAgcmVw
b3NpdG9yeSA9IEdpdChSRVBPU0lUT1JZX1BBVEgpCi0gICAgY29tbWl0ID0gcmVwb3NpdG9yeS5j
b21taXQoaGFzaD1HSVRfQ09NTUlUKQotICAgIGlmIG5vdCBjb21taXQ6Ci0gICAgICAgIHN5cy5z
dGRlcnIud3JpdGUoIkZhaWxlZCB0byBmaW5kICd7fScgaW4gdGhlIHJlcG9zaXRvcnkiLmZvcm1h
dChHSVRfQ09NTUlUKSkKLSAgICAgICAgcmV0dXJuIC0xCi0gICAgaWYgbm90IGNvbW1pdC5pZGVu
dGlmaWVyIG9yIG5vdCBjb21taXQuYnJhbmNoOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJG
YWlsZWQgdG8gY29tcHV0ZSB0aGUgaWRlbnRpZmllciBmb3IgJ3t9JyIuZm9ybWF0KEdJVF9DT01N
SVQpKQotICAgICAgICByZXR1cm4gLTEKLQotICAgIGxpbmVzID0gW10KLSAgICBmb3IgbGluZSBp
biBpbnB1dGZpbGUucmVhZGxpbmVzKCk6Ci0gICAgICAgIGxpbmVzLmFwcGVuZChsaW5lLnJzdHJp
cCgpKQotCi0gICAgaWRlbnRpZmllcl9pbmRleCA9IGxlbihsaW5lcykKLSAgICBpZiBpZGVudGlm
aWVyX2luZGV4IGFuZCByZXBvc2l0b3J5LkdJVF9TVk5fUkVWSVNJT04ubWF0Y2gobGluZXNbLTFd
KToKLSAgICAgICAgaWRlbnRpZmllcl9pbmRleCAtPSAxCi0KLSAgICBpZiBpZGVudGlmaWVyX2lu
ZGV4IGFuZCBsaW5lc1tpZGVudGlmaWVyX2luZGV4IC0gMV0uc3RhcnRzd2l0aChpZGVudGlmaWVy
X3RlbXBsYXRlLmZvcm1hdCgnJykuc3BsaXQoJzonKVswXSk6Ci0gICAgICAgIGxpbmVzW2lkZW50
aWZpZXJfaW5kZXggLSAxXSA9IGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkKLSAg
ICBlbHNlOgotICAgICAgICBsaW5lcy5pbnNlcnQoaWRlbnRpZmllcl9pbmRleCwgaWRlbnRpZmll
cl90ZW1wbGF0ZS5mb3JtYXQoY29tbWl0KSkKLQotICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAg
ICAgICBwcmludChsaW5lKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lz
LmV4aXQobWFpbihzeXMuc3RkaW4sIHN5cy5hcmd2WzFdKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS5weQkocmV2aXNpb24gMjcxMjAzKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMCArMCww
IEBACi0jIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSMgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSMgQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBhcmdwYXJz
ZQotaW1wb3J0IGpzb24KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQot
ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKLWZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBh
cmd1bWVudHMsIGxvZyBhcyB3ZWJraXRjb3JlcHlfbG9nCi1mcm9tIHdlYmtpdHNjbXB5IGltcG9y
dCBDb21taXQsIGxvY2FsLCBsb2csIHJlbW90ZQotCi0KLWNsYXNzIENvbW1hbmQob2JqZWN0KToK
LSAgICBuYW1lID0gTm9uZQotICAgIGhlbHAgPSBOb25lCi0KLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgcGFyc2VyKGNscywgcGFyc2VyKToKLSAgICAgICAgaWYgY2xzLm5hbWUgaXMgTm9uZToK
LSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0NvbW1hbmQgZG9lcyBub3Qg
aGF2ZSBhIG5hbWUnKQotICAgICAgICBpZiBjbHMuaGVscCBpcyBOb25lOgotICAgICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiJ3t9JyBkb2VzIG5vdCBoYXZlIGEgaGVscCBtZXNz
YWdlIikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3Np
dG9yeSwgKiprd2FyZ3MpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdObyBjb21tYW5kIHNw
ZWNpZmllZFxuJykKLSAgICAgICAgcmV0dXJuIC0xCi0KLQotY2xhc3MgRmluZChDb21tYW5kKToK
LSAgICBuYW1lID0gJ2ZpbmQnCi0gICAgaGVscCA9ICdHaXZlbiBhbiBpZGVudGlmaWVyLCByZXZp
c2lvbiBvciBoYXNoLCBub3JtYWxpemUgYW5kIHByaW50IHRoZSBjb21taXQnCi0KLSAgICBAY2xh
c3NtZXRob2QKLSAgICBkZWYgcGFyc2VyKGNscywgcGFyc2VyLCBsb2dnZXJzPU5vbmUpOgotICAg
ICAgICBvdXRwdXRfYXJncyA9IGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCi0gICAgICAgICAgICBw
YXJzZXIsCi0gICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCi0gICAgICAgICAgICBoZWxwPSd7
fSBhbW91bnQgb2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRpc3BsYXllZCcKLSAg
ICAgICAgKQotICAgICAgICBvdXRwdXRfYXJncy5hZGRfYXJndW1lbnQoCi0gICAgICAgICAgICAn
LS1qc29uJywgJy1qJywKLSAgICAgICAgICAgIGhlbHA9J0NvbnZlcnQgdGhlIGNvbW1pdCB0byBh
IG1hY2hpbmUtcmVhZGFibGUgSlNPTiBvYmplY3QnLAotICAgICAgICAgICAgYWN0aW9uPSdzdG9y
ZV90cnVlJywKLSAgICAgICAgICAgIGRlc3Q9J2pzb24nLAotICAgICAgICAgICAgZGVmYXVsdD1G
YWxzZSwKLSAgICAgICAgKQotICAgICAgICBvdXRwdXRfYXJncy5hZGRfYXJndW1lbnQoCi0gICAg
ICAgICAgICAnLS1sb2cnLCAnLS1uby1sb2cnLAotICAgICAgICAgICAgaGVscD0nSW5jbHVkZSB0
aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSByZXF1ZXN0ZWQgY29tbWl0JywKLSAgICAgICAgICAg
IGFjdGlvbj1hcmd1bWVudHMuTm9BY3Rpb24sCi0gICAgICAgICAgICBkZXN0PSdpbmNsdWRlX2xv
ZycsCi0gICAgICAgICAgICBkZWZhdWx0PVRydWUsCi0gICAgICAgICkKLQotICAgICAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KAotICAgICAgICAgICAgJ2FyZ3VtZW50JywgbmFyZ3M9MSwKLSAgICAg
ICAgICAgIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICBoZWxwPSdTdHJpbmcg
cmVwcmVzZW50YXRpb24gb2YgYSBjb21taXQgb3IgYnJhbmNoIHRvIGJlIG5vcm1hbGl6ZWQnLAot
ICAgICAgICApCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJl
cG9zaXRvcnksICoqa3dhcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29tbWl0ID0g
cmVwb3NpdG9yeS5maW5kKGFyZ3MuYXJndW1lbnRbMF0sIGluY2x1ZGVfbG9nPWFyZ3MuaW5jbHVk
ZV9sb2cpCi0gICAgICAgIGV4Y2VwdCAobG9jYWwuU2NtLkV4Y2VwdGlvbiwgVmFsdWVFcnJvcikg
YXMgZXhjZXB0aW9uOgotICAgICAgICAgICAgIyBWYWx1ZUVycm9ycyBhbmQgU2NtIGV4Y2VwdGlv
bnMgdXN1YWxseSBjb250YWluIGVub3VnaCBpbmZvcm1hdGlvbiB0byBiZSBkaXNwbGF5ZWQKLSAg
ICAgICAgICAgICMgdG8gdGhlIHVzZXIgYXMgYW4gZXJyb3IKLSAgICAgICAgICAgIHN5cy5zdGRl
cnIud3JpdGUoc3RyKGV4Y2VwdGlvbikgKyAnXG4nKQotICAgICAgICAgICAgcmV0dXJuIDEKLQot
ICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAwIGFuZCBub3QgY29tbWl0Lm1lc3NhZ2U6Ci0gICAg
ICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gZmluZCB0aGUgIGNvbW1pdCBtZXNz
YWdlIGZvciAne30nXG4iLmZvcm1hdChjb21taXQpKQotICAgICAgICAgICAgcmV0dXJuIDEKLQot
ICAgICAgICBpZiBhcmdzLmpzb246Ci0gICAgICAgICAgICBwcmludChqc29uLmR1bXBzKGNvbW1p
dCwgY2xzPUNvbW1pdC5FbmNvZGVyLCBpbmRlbnQ9NCkpCi0gICAgICAgICAgICByZXR1cm4gMAot
Ci0gICAgICAgIGlmIGFyZ3MudmVyYm9zZSA8IDA6Ci0gICAgICAgICAgICBwcmludCgne2lkZW50
aWZpZXJ9IHwge2hhc2h9e3JldmlzaW9ufXt0aXRsZX0nLmZvcm1hdCgKLSAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyPWNvbW1pdCwKLSAgICAgICAgICAgICAgICBoYXNoPWNvbW1pdC5oYXNoWzpD
b21taXQuSEFTSF9MQUJFTF9TSVpFXSBpZiBjb21taXQuaGFzaCBlbHNlICcnLAotICAgICAgICAg
ICAgICAgIHJldmlzaW9uPSd7fXJ7fScuZm9ybWF0KCcsICcgaWYgY29tbWl0Lmhhc2ggZWxzZSAn
JywgY29tbWl0LnJldmlzaW9uKSBpZiBjb21taXQucmV2aXNpb24gZWxzZSAnJywKLSAgICAgICAg
ICAgICAgICB0aXRsZT0nIHwge30nLmZvcm1hdChjb21taXQubWVzc2FnZS5zcGxpdGxpbmVzKClb
MF0pIGlmIGNvbW1pdC5tZXNzYWdlIGVsc2UgJycKLSAgICAgICAgICAgICkpCi0gICAgICAgICAg
ICByZXR1cm4gMAotCi0gICAgICAgIGlmIGNvbW1pdC5tZXNzYWdlOgotICAgICAgICAgICAgcHJp
bnQoJ1RpdGxlOiB7fScuZm9ybWF0KGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKVswXSkpCi0g
ICAgICAgIHByaW50KCdBdXRob3I6IHt9Jy5mb3JtYXQoY29tbWl0LmF1dGhvcikpCi0gICAgICAg
IHByaW50KCdJZGVudGlmaWVyOiB7fScuZm9ybWF0KGNvbW1pdCkpCi0gICAgICAgIHByaW50KGRh
dGV0aW1lLmZyb210aW1lc3RhbXAoY29tbWl0LnRpbWVzdGFtcCkuc3RyZnRpbWUoJ0RhdGU6ICVh
ICViICVkICVIOiVNOiVTICVZJykpCi0gICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDAgb3IgY29t
bWl0LnJldmlzaW9uOgotICAgICAgICAgICAgcHJpbnQoJ1JldmlzaW9uOiB7fScuZm9ybWF0KGNv
bW1pdC5yZXZpc2lvbiBvciAnTi9BJykpCi0gICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDAgb3Ig
Y29tbWl0Lmhhc2g6Ci0gICAgICAgICAgICBwcmludCgnSGFzaDoge30nLmZvcm1hdChjb21taXQu
aGFzaFs6Q29tbWl0LkhBU0hfTEFCRUxfU0laRV0gaWYgY29tbWl0Lmhhc2ggZWxzZSAnTi9BJykp
Ci0KLSAgICAgICAgaWYgYXJncy52ZXJib3NlID4gMDoKLSAgICAgICAgICAgIGZvciBsaW5lIGlu
IGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICBwcmludCgnICAg
IHt9Jy5mb3JtYXQobGluZSkpCi0KLSAgICAgICAgcmV0dXJuIDAKLQotCi1jbGFzcyBDaGVja291
dChDb21tYW5kKToKLSAgICBuYW1lID0gJ2NoZWNrb3V0JwotICAgIGhlbHAgPSAnR2l2ZW4gYW4g
aWRlbnRpZmllciwgcmV2aXNpb24gb3IgaGFzaCwgbm9ybWFsaXplIGFuZCBjaGVja291dCB0aGF0
IGNvbW1pdCcKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIs
IGxvZ2dlcnM9Tm9uZSk6Ci0gICAgICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCi0gICAgICAg
ICAgICBwYXJzZXIsCi0gICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCi0gICAgICAgICAgICBo
ZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRpc3BsYXll
ZCcKLSAgICAgICAgKQotCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAgICAg
ICAnYXJndW1lbnQnLCBuYXJncz0xLAotICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9u
ZSwKLSAgICAgICAgICAgIGhlbHA9J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1pdCBv
ciBicmFuY2ggdG8gYmUgbm9ybWFsaXplZCcsCi0gICAgICAgICkKLQotICAgIEBjbGFzc21ldGhv
ZAotICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgotICAgICAg
ICBpZiBub3QgcmVwb3NpdG9yeS5wYXRoOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi
Q2Fubm90IGNoZWNrb3V0IG9uIHJlbW90ZSByZXBvc2l0b3J5IikKLSAgICAgICAgICAgIHJldHVy
biAxCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5jaGVj
a291dChhcmdzLmFyZ3VtZW50WzBdKQotICAgICAgICBleGNlcHQgKGxvY2FsLlNjbS5FeGNlcHRp
b24sIFZhbHVlRXJyb3IpIGFzIGV4Y2VwdGlvbjoKLSAgICAgICAgICAgICMgVmFsdWVFcnJvcnMg
YW5kIFNjbSBleGNlcHRpb25zIHVzdWFsbHkgY29udGFpbiBlbm91Z2ggaW5mb3JtYXRpb24gdG8g
YmUgZGlzcGxheWVkCi0gICAgICAgICAgICAjIHRvIHRoZSB1c2VyIGFzIGFuIGVycm9yCi0gICAg
ICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihleGNlcHRpb24pICsgJ1xuJykKLSAgICAgICAg
ICAgIHJldHVybiAxCi0KLSAgICAgICAgaWYgbm90IGNvbW1pdDoKLSAgICAgICAgICAgIHN5cy5z
dGRlcnIud3JpdGUoIkZhaWxlZCB0byBtYXAgJ3t9J1xuIi5mb3JtYXQoYXJncy5hcmd1bWVudFsw
XSkpCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICByZXR1cm4gMAotCi0KLWRlZiBtYWlu
KGFyZ3M9Tm9uZSwgcGF0aD1Ob25lLCBsb2dnZXJzPU5vbmUsIGNvbnRyaWJ1dG9ycz1Ob25lLCBp
ZGVudGlmaWVyX3RlbXBsYXRlPU5vbmUpOgotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9
bG9nZ2luZy5XQVJOSU5HKQotCi0gICAgbG9nZ2VycyA9IFtsb2dnaW5nLmdldExvZ2dlcigpLCB3
ZWJraXRjb3JlcHlfbG9nLCAgbG9nXSArIChsb2dnZXJzIG9yIFtdKQotCi0gICAgcGFyc2VyID0g
YXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCi0gICAgICAgIGRlc2NyaXB0aW9uPSdDdXN0b20gZ2l0
IHRvb2xpbmcgZnJvbSB0aGUgV2ViS2l0IHRlYW0gdG8gaW50ZXJhY3Qgd2l0aCBhICcgKwotICAg
ICAgICAgICAgICAgICAgICAncmVwb3NpdG9yeSB1c2luZyBpZGVudGlmZXJzJywKLSAgICApCi0g
ICAgYXJndW1lbnRzLkxvZ2dpbmdHcm91cChwYXJzZXIpCi0KLSAgICBncm91cCA9IHBhcnNlci5h
ZGRfYXJndW1lbnRfZ3JvdXAoJ1JlcG9zaXRvcnknKQotICAgIGdyb3VwLmFkZF9hcmd1bWVudCgK
LSAgICAgICAgJy0tcGF0aCcsICctcCcsICctQycsCi0gICAgICAgIGRlc3Q9J3JlcG9zaXRvcnkn
LCBkZWZhdWx0PXBhdGggb3Igb3MuZ2V0Y3dkKCksCi0gICAgICAgIGhlbHA9J1NldCB0aGUgcmVw
b3NpdG9yeSBwYXRoIG9yIFVSTCB0byBiZSB1c2VkJywKLSAgICAgICAgYWN0aW9uPSdzdG9yZScs
Ci0gICAgKQotCi0gICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdz
dWItY29tbWFuZCBoZWxwJykKLQotICAgIGZyb20gd2Via2l0c2NtcHkuY2Fub25pY2FsaXplIGlt
cG9ydCBDYW5vbmljYWxpemUKLQotICAgIGZvciBwcm9ncmFtIGluIFtGaW5kLCBDaGVja291dCwg
Q2Fub25pY2FsaXplXToKLSAgICAgICAgc3VicGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2Vy
KHByb2dyYW0ubmFtZSwgaGVscD1wcm9ncmFtLmhlbHApCi0gICAgICAgIHN1YnBhcnNlci5zZXRf
ZGVmYXVsdHMobWFpbj1wcm9ncmFtLm1haW4pCi0gICAgICAgIHByb2dyYW0ucGFyc2VyKHN1YnBh
cnNlciwgbG9nZ2Vycz1sb2dnZXJzKQotCi0gICAgcGFyc2VkID0gcGFyc2VyLnBhcnNlX2FyZ3Mo
YXJncz1hcmdzKQotCi0gICAgaWYgcGFyc2VkLnJlcG9zaXRvcnkuc3RhcnRzd2l0aCgoJ2h0dHBz
Oi8vJywgJ2h0dHA6Ly8nKSk6Ci0gICAgICAgIHJlcG9zaXRvcnkgPSByZW1vdGUuU2NtLmZyb21f
dXJsKHBhcnNlZC5yZXBvc2l0b3J5LCBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzKQotICAgIGVs
c2U6Ci0gICAgICAgIHJlcG9zaXRvcnkgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHBhdGg9cGFyc2Vk
LnJlcG9zaXRvcnksIGNvbnRyaWJ1dG9ycz1jb250cmlidXRvcnMpCi0KLSAgICByZXR1cm4gcGFy
c2VkLm1haW4oYXJncz1wYXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSwgaWRlbnRpZmllcl90
ZW1wbGF0ZT1pZGVudGlmaWVyX3RlbXBsYXRlKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tz
L2xvY2FsL2dpdC5weQkocmV2aXNpb24gMjcxMjAzKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4ICsyNyw4IEBAIGltcG9ydCByZQogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKIGZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2NrcywgT3V0cHV0Q2FwdHVyZSwgU3Ry
aW5nSU8KIGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBDb21taXQsIENvbnRyaWJ1dG9y
Ci1mcm9tIHdlYmtpdHNjbXB5LmNhbm9uaWNhbGl6ZS5jb21taXR0ZXIgaW1wb3J0IG1haW4gYXMg
Y29tbWl0dGVyX21haW4KLWZyb20gd2Via2l0c2NtcHkuY2Fub25pY2FsaXplLm1lc3NhZ2UgaW1w
b3J0IG1haW4gYXMgbWVzc2FnZV9tYWluCitmcm9tIHdlYmtpdHNjbXB5LnByb2dyYW0uY2Fub25p
Y2FsaXplLmNvbW1pdHRlciBpbXBvcnQgbWFpbiBhcyBjb21taXR0ZXJfbWFpbgorZnJvbSB3ZWJr
aXRzY21weS5wcm9ncmFtLmNhbm9uaWNhbGl6ZS5tZXNzYWdlIGltcG9ydCBtYWluIGFzIG1lc3Nh
Z2VfbWFpbgogCiAKIGNsYXNzIEdpdChtb2Nrcy5TdWJwcm9jZXNzKToKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvcHJvZ3JhbS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwLCAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgYXJndW1lbnRz
LCBsb2cgYXMgd2Via2l0Y29yZXB5X2xvZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWws
IGxvZywgcmVtb3RlCisKK2Zyb20gLmNhbm9uaWNhbGl6ZSBpbXBvcnQgQ2Fub25pY2FsaXplCitm
cm9tIC5jb21tYW5kIGltcG9ydCBDb21tYW5kCitmcm9tIC5jaGVja291dCBpbXBvcnQgQ2hlY2tv
dXQKK2Zyb20gLmZpbmQgaW1wb3J0IEZpbmQKKworCitkZWYgbWFpbihhcmdzPU5vbmUsIHBhdGg9
Tm9uZSwgbG9nZ2Vycz1Ob25lLCBjb250cmlidXRvcnM9Tm9uZSwgaWRlbnRpZmllcl90ZW1wbGF0
ZT1Ob25lKToKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuV0FSTklORykK
KworICAgIGxvZ2dlcnMgPSBbbG9nZ2luZy5nZXRMb2dnZXIoKSwgd2Via2l0Y29yZXB5X2xvZywg
IGxvZ10gKyAobG9nZ2VycyBvciBbXSkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50
UGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbj0nQ3VzdG9tIGdpdCB0b29saW5nIGZyb20gdGhl
IFdlYktpdCB0ZWFtIHRvIGludGVyYWN0IHdpdGggYSAnICsKKyAgICAgICAgICAgICAgICAgICAg
J3JlcG9zaXRvcnkgdXNpbmcgaWRlbnRpZmVycycsCisgICAgKQorICAgIGFyZ3VtZW50cy5Mb2dn
aW5nR3JvdXAocGFyc2VyKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3Vw
KCdSZXBvc2l0b3J5JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICctLXBhdGgn
LCAnLXAnLCAnLUMnLAorICAgICAgICBkZXN0PSdyZXBvc2l0b3J5JywgZGVmYXVsdD1wYXRoIG9y
IG9zLmdldGN3ZCgpLAorICAgICAgICBoZWxwPSdTZXQgdGhlIHJlcG9zaXRvcnkgcGF0aCBvciBV
UkwgdG8gYmUgdXNlZCcsCisgICAgICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICkKKworICAgIHN1
YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nc3ViLWNvbW1hbmQgaGVscCcp
CisKKyAgICBmb3IgcHJvZ3JhbSBpbiBbRmluZCwgQ2hlY2tvdXQsIENhbm9uaWNhbGl6ZV06Cisg
ICAgICAgIHN1YnBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcihwcm9ncmFtLm5hbWUsIGhl
bHA9cHJvZ3JhbS5oZWxwKQorICAgICAgICBzdWJwYXJzZXIuc2V0X2RlZmF1bHRzKG1haW49cHJv
Z3JhbS5tYWluKQorICAgICAgICBwcm9ncmFtLnBhcnNlcihzdWJwYXJzZXIsIGxvZ2dlcnM9bG9n
Z2VycykKKworICAgIHBhcnNlZCA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9YXJncykKKworICAg
IGlmIHBhcnNlZC5yZXBvc2l0b3J5LnN0YXJ0c3dpdGgoKCdodHRwczovLycsICdodHRwOi8vJykp
OgorICAgICAgICByZXBvc2l0b3J5ID0gcmVtb3RlLlNjbS5mcm9tX3VybChwYXJzZWQucmVwb3Np
dG9yeSwgY29udHJpYnV0b3JzPWNvbnRyaWJ1dG9ycykKKyAgICBlbHNlOgorICAgICAgICByZXBv
c2l0b3J5ID0gbG9jYWwuU2NtLmZyb21fcGF0aChwYXRoPXBhcnNlZC5yZXBvc2l0b3J5LCBjb250
cmlidXRvcnM9Y29udHJpYnV0b3JzKQorCisgICAgcmV0dXJuIHBhcnNlZC5tYWluKGFyZ3M9cGFy
c2VkLCByZXBvc2l0b3J5PXJlcG9zaXRvcnksIGlkZW50aWZpZXJfdGVtcGxhdGU9aWRlbnRpZmll
cl90ZW1wbGF0ZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3Byb2dyYW0vY2hlY2tvdXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jaGVja291dC5weQko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9wcm9ncmFtL2NoZWNrb3V0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBz
eXMKKworZnJvbSAuY29tbWFuZCBpbXBvcnQgQ29tbWFuZAorZnJvbSB3ZWJraXRjb3JlcHkgaW1w
b3J0IGFyZ3VtZW50cworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwKKworCitjbGFzcyBD
aGVja291dChDb21tYW5kKToKKyAgICBuYW1lID0gJ2NoZWNrb3V0JworICAgIGhlbHAgPSAnR2l2
ZW4gYW4gaWRlbnRpZmllciwgcmV2aXNpb24gb3IgaGFzaCwgbm9ybWFsaXplIGFuZCBjaGVja291
dCB0aGF0IGNvbW1pdCcKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBw
YXJzZXIsIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCisg
ICAgICAgICAgICBwYXJzZXIsCisgICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCisgICAgICAg
ICAgICBoZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRp
c3BsYXllZCcKKyAgICAgICAgKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAg
ICAgICAgICAnYXJndW1lbnQnLCBuYXJncz0xLAorICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1
bHQ9Tm9uZSwKKyAgICAgICAgICAgIGhlbHA9J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNv
bW1pdCBvciBicmFuY2ggdG8gYmUgbm9ybWFsaXplZCcsCisgICAgICAgICkKKworICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgor
ICAgICAgICBpZiBub3QgcmVwb3NpdG9yeS5wYXRoOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53
cml0ZSgiQ2Fubm90IGNoZWNrb3V0IG9uIHJlbW90ZSByZXBvc2l0b3J5IikKKyAgICAgICAgICAg
IHJldHVybiAxCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tbWl0ID0gcmVwb3NpdG9y
eS5jaGVja291dChhcmdzLmFyZ3VtZW50WzBdKQorICAgICAgICBleGNlcHQgKGxvY2FsLlNjbS5F
eGNlcHRpb24sIFZhbHVlRXJyb3IpIGFzIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICMgVmFsdWVF
cnJvcnMgYW5kIFNjbSBleGNlcHRpb25zIHVzdWFsbHkgY29udGFpbiBlbm91Z2ggaW5mb3JtYXRp
b24gdG8gYmUgZGlzcGxheWVkCisgICAgICAgICAgICAjIHRvIHRoZSB1c2VyIGFzIGFuIGVycm9y
CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihleGNlcHRpb24pICsgJ1xuJykKKyAg
ICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgaWYgbm90IGNvbW1pdDoKKyAgICAgICAgICAg
IHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBtYXAgJ3t9J1xuIi5mb3JtYXQoYXJncy5hcmd1
bWVudFswXSkpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gMApJbmRleDog
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9j
b21tYW5kLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY29tbWFuZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1h
bmQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MjAsIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworCisKK2NsYXNzIENvbW1hbmQo
b2JqZWN0KToKKyAgICBuYW1lID0gTm9uZQorICAgIGhlbHAgPSBOb25lCisKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgcGFyc2VyKGNscywgcGFyc2VyKToKKyAgICAgICAgaWYgY2xzLm5hbWUg
aXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0NvbW1hbmQg
ZG9lcyBub3QgaGF2ZSBhIG5hbWUnKQorICAgICAgICBpZiBjbHMuaGVscCBpcyBOb25lOgorICAg
ICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiJ3t9JyBkb2VzIG5vdCBoYXZlIGEg
aGVscCBtZXNzYWdlIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgYXJn
cywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdObyBj
b21tYW5kIHNwZWNpZmllZFxuJykKKyAgICAgICAgcmV0dXJuIC0xCkluZGV4OiBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvcHJvZ3JhbS9maW5kLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vZmluZC5weQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCBzeXMKKworZnJvbSAuY29tbWFuZCBpbXBvcnQg
Q29tbWFuZAorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5
IGltcG9ydCBhcmd1bWVudHMKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbW1pdCwgbG9jYWwK
KworCitjbGFzcyBGaW5kKENvbW1hbmQpOgorICAgIG5hbWUgPSAnZmluZCcKKyAgICBoZWxwID0g
J0dpdmVuIGFuIGlkZW50aWZpZXIsIHJldmlzaW9uIG9yIGhhc2gsIG5vcm1hbGl6ZSBhbmQgcHJp
bnQgdGhlIGNvbW1pdCcKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBw
YXJzZXIsIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIG91dHB1dF9hcmdzID0gYXJndW1lbnRzLkxv
Z2dpbmdHcm91cCgKKyAgICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgIGxvZ2dlcnM9bG9n
Z2VycywKKyAgICAgICAgICAgIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5nIGFuZCBjb21taXQg
aW5mb3JtYXRpb24gZGlzcGxheWVkJworICAgICAgICApCisgICAgICAgIG91dHB1dF9hcmdzLmFk
ZF9hcmd1bWVudCgKKyAgICAgICAgICAgICctLWpzb24nLCAnLWonLAorICAgICAgICAgICAgaGVs
cD0nQ29udmVydCB0aGUgY29tbWl0IHRvIGEgbWFjaGluZS1yZWFkYWJsZSBKU09OIG9iamVjdCcs
CisgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgZGVzdD0nanNv
bicsCisgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICApCisgICAgICAgIG91dHB1
dF9hcmdzLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICctLWxvZycsICctLW5vLWxvZycsCisg
ICAgICAgICAgICBoZWxwPSdJbmNsdWRlIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIHJlcXVl
c3RlZCBjb21taXQnLAorICAgICAgICAgICAgYWN0aW9uPWFyZ3VtZW50cy5Ob0FjdGlvbiwKKyAg
ICAgICAgICAgIGRlc3Q9J2luY2x1ZGVfbG9nJywKKyAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwK
KyAgICAgICAgKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAn
YXJndW1lbnQnLCBuYXJncz0xLAorICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwK
KyAgICAgICAgICAgIGhlbHA9J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1pdCBvciBi
cmFuY2ggdG8gYmUgbm9ybWFsaXplZCcsCisgICAgICAgICkKKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICBjb21taXQgPSByZXBvc2l0b3J5LmZpbmQoYXJncy5hcmd1bWVudFsw
XSwgaW5jbHVkZV9sb2c9YXJncy5pbmNsdWRlX2xvZykKKyAgICAgICAgZXhjZXB0IChsb2NhbC5T
Y20uRXhjZXB0aW9uLCBWYWx1ZUVycm9yKSBhcyBleGNlcHRpb246CisgICAgICAgICAgICAjIFZh
bHVlRXJyb3JzIGFuZCBTY20gZXhjZXB0aW9ucyB1c3VhbGx5IGNvbnRhaW4gZW5vdWdoIGluZm9y
bWF0aW9uIHRvIGJlIGRpc3BsYXllZAorICAgICAgICAgICAgIyB0byB0aGUgdXNlciBhcyBhbiBl
cnJvcgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShzdHIoZXhjZXB0aW9uKSArICdcbicp
CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDAgYW5k
IG5vdCBjb21taXQubWVzc2FnZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxl
ZCB0byBmaW5kIHRoZSAgY29tbWl0IG1lc3NhZ2UgZm9yICd7fSdcbiIuZm9ybWF0KGNvbW1pdCkp
CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGlmIGFyZ3MuanNvbjoKKyAgICAgICAg
ICAgIHByaW50KGpzb24uZHVtcHMoY29tbWl0LCBjbHM9Q29tbWl0LkVuY29kZXIsIGluZGVudD00
KSkKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgYXJncy52ZXJib3NlIDwgMDoK
KyAgICAgICAgICAgIHByaW50KCd7aWRlbnRpZmllcn0gfCB7aGFzaH17cmV2aXNpb259e3RpdGxl
fScuZm9ybWF0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9Y29tbWl0LAorICAgICAgICAg
ICAgICAgIGhhc2g9Y29tbWl0Lmhhc2hbOkNvbW1pdC5IQVNIX0xBQkVMX1NJWkVdIGlmIGNvbW1p
dC5oYXNoIGVsc2UgJycsCisgICAgICAgICAgICAgICAgcmV2aXNpb249J3t9cnt9Jy5mb3JtYXQo
JywgJyBpZiBjb21taXQuaGFzaCBlbHNlICcnLCBjb21taXQucmV2aXNpb24pIGlmIGNvbW1pdC5y
ZXZpc2lvbiBlbHNlICcnLAorICAgICAgICAgICAgICAgIHRpdGxlPScgfCB7fScuZm9ybWF0KGNv
bW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKVswXSkgaWYgY29tbWl0Lm1lc3NhZ2UgZWxzZSAnJwor
ICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgY29tbWl0
Lm1lc3NhZ2U6CisgICAgICAgICAgICBwcmludCgnVGl0bGU6IHt9Jy5mb3JtYXQoY29tbWl0Lm1l
c3NhZ2Uuc3BsaXRsaW5lcygpWzBdKSkKKyAgICAgICAgcHJpbnQoJ0F1dGhvcjoge30nLmZvcm1h
dChjb21taXQuYXV0aG9yKSkKKyAgICAgICAgcHJpbnQoJ0lkZW50aWZpZXI6IHt9Jy5mb3JtYXQo
Y29tbWl0KSkKKyAgICAgICAgcHJpbnQoZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21taXQudGlt
ZXN0YW1wKS5zdHJmdGltZSgnRGF0ZTogJWEgJWIgJWQgJUg6JU06JVMgJVknKSkKKyAgICAgICAg
aWYgYXJncy52ZXJib3NlID4gMCBvciBjb21taXQucmV2aXNpb246CisgICAgICAgICAgICBwcmlu
dCgnUmV2aXNpb246IHt9Jy5mb3JtYXQoY29tbWl0LnJldmlzaW9uIG9yICdOL0EnKSkKKyAgICAg
ICAgaWYgYXJncy52ZXJib3NlID4gMCBvciBjb21taXQuaGFzaDoKKyAgICAgICAgICAgIHByaW50
KCdIYXNoOiB7fScuZm9ybWF0KGNvbW1pdC5oYXNoWzpDb21taXQuSEFTSF9MQUJFTF9TSVpFXSBp
ZiBjb21taXQuaGFzaCBlbHNlICdOL0EnKSkKKworICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAw
OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29tbWl0Lm1lc3NhZ2Uuc3BsaXRsaW5lcygpOgor
ICAgICAgICAgICAgICAgIHByaW50KCcgICAge30nLmZvcm1hdChsaW5lKSkKKworICAgICAgICBy
ZXR1cm4gMApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvcHJvZ3JhbS9jYW5vbmljYWxpemUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jYW5v
bmljYWxpemUvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jYW5vbmljYWxpemUvX19pbml0
X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDIwLCAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2lt
cG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJr
aXRjb3JlcHkgaW1wb3J0IGFyZ3VtZW50cywgcnVuLCBzdHJpbmdfdXRpbHMKK2Zyb20gd2Via2l0
c2NtcHkgaW1wb3J0IGxvZworZnJvbSAuLmNvbW1hbmQgaW1wb3J0IENvbW1hbmQKKworCitjbGFz
cyBDYW5vbmljYWxpemUoQ29tbWFuZCk6CisgICAgbmFtZSA9ICdjYW5vbmljYWxpemUnCisgICAg
aGVscCA9ICdUYWtlIHRoZSBzZXQgb2YgY29tbWl0cyB3aGljaCBoYXZlIG5vdCB5ZXQgYmVlbiBw
dXNoZWQgYW5kIGVkaXQgaGlzdG9yeSB0byBub3JtYWxpemUgdGhlICcgK1wKKyAgICAgICAgICAg
J2NvbW1pdHRlcnMgd2l0aCBleGlzdGluZyBjb250cmlidXRvciBtYXBwaW5nIGFuZCBhZGQgaWRl
bnRpZmllcnMgdG8gY29tbWl0IG1lc3NhZ2VzJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVm
IHBhcnNlcihjbHMsIHBhcnNlciwgbG9nZ2Vycz1Ob25lKToKKyAgICAgICAgb3V0cHV0X2FyZ3Mg
PSBhcmd1bWVudHMuTG9nZ2luZ0dyb3VwKAorICAgICAgICAgICAgcGFyc2VyLAorICAgICAgICAg
ICAgbG9nZ2Vycz1sb2dnZXJzLAorICAgICAgICAgICAgaGVscD0ne30gYW1vdW50IG9mIGxvZ2dp
bmcgYW5kIGBnaXQgcmViYXNlYCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQnCisgICAgICAgICkKKyAg
ICAgICAgb3V0cHV0X2FyZ3MuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJy0taWRlbnRpZmll
cicsICctLW5vLWlkZW50aWZpZXInLAorICAgICAgICAgICAgaGVscD0nQWRkIGluIHRoZSBpZGVu
dGlmaWVyIHRvIGNvbW1pdCBtZXNzYWdlcywgdHJ1ZSBieSBkZWZhdWx0JywKKyAgICAgICAgICAg
IGFjdGlvbj1hcmd1bWVudHMuTm9BY3Rpb24sCisgICAgICAgICAgICBkZXN0PSdpZGVudGlmaWVy
JywKKyAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgKQorICAgICAgICBvdXRwdXRf
YXJncy5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnLS1yZW1vdGUnLAorICAgICAgICAgICAg
aGVscD0nQ29tcGFyZSBhZ2FpbnN0IGEgZGlmZmVyZW50IHJlbW90ZScsCisgICAgICAgICAgICBk
ZXN0PSdyZW1vdGUnLAorICAgICAgICAgICAgZGVmYXVsdD0nb3JpZ2luJywKKyAgICAgICAgKQor
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5LCBp
ZGVudGlmaWVyX3RlbXBsYXRlPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IHJlcG9z
aXRvcnkucGF0aDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0Nhbm5vdCBjYW5vbmlj
YWxpemUgY29tbWl0cyBvbiBhIHJlbW90ZSByZXBvc2l0b3J5XG4nKQorICAgICAgICAgICAgcmV0
dXJuIDEKKyAgICAgICAgaWYgbm90IHJlcG9zaXRvcnkuaXNfZ2l0OgorICAgICAgICAgICAgc3lz
LnN0ZGVyci53cml0ZSgnQ29tbWl0cyBjYW4gb25seSBiZSBjYW5vbmljYWxpemVkIG9uIGEgR2l0
IHJlcG9zaXRvcnlcbicpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGJyYW5jaCA9
IHJlcG9zaXRvcnkuYnJhbmNoCisgICAgICAgIGlmIG5vdCBicmFuY2g6CisgICAgICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoXG4nKQor
ICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIHJlc3VsdCA9IHJ1bihbCisgICAgICAgICAg
ICByZXBvc2l0b3J5LmV4ZWN1dGFibGUoKSwgJ3Jldi1saXN0JywKKyAgICAgICAgICAgICctLWNv
dW50JywgJy0tbm8tbWVyZ2VzJywKKyAgICAgICAgICAgICd7cmVtb3RlfS97YnJhbmNofS4ue2Jy
YW5jaH0nLmZvcm1hdChyZW1vdGU9YXJncy5yZW1vdGUsIGJyYW5jaD1icmFuY2gpLAorICAgICAg
ICBdLCBjYXB0dXJlX291dHB1dD1UcnVlLCBjd2Q9cmVwb3NpdG9yeS5yb290X3BhdGgpCisgICAg
ICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgn
RmFpbGVkIHRvIGZpbmQgbG9jYWwgY29tbWl0c1xuJykKKyAgICAgICAgICAgIHJldHVybiAtMQor
ICAgICAgICBkaWZmZXJlbmNlID0gaW50KHJlc3VsdC5zdGRvdXQucnN0cmlwKCkpCisgICAgICAg
IGlmIGRpZmZlcmVuY2UgPD0gMDoKKyAgICAgICAgICAgIHByaW50KCdObyBsb2NhbCBjb21taXRz
IHRvIGJlIGVkaXRlZCcpCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBsb2cud2Fybmlu
Zygne30gdG8gYmUgZWRpdHRlZC4uLicuZm9ybWF0KHN0cmluZ191dGlscy5wbHVyYWxpemUoZGlm
ZmVyZW5jZSwgJ2NvbW1pdCcpKSkKKworICAgICAgICBiYXNlID0gcmVwb3NpdG9yeS5maW5kKCd7
fX57fScuZm9ybWF0KGJyYW5jaCwgZGlmZmVyZW5jZSkpCisgICAgICAgIGxvZy5pbmZvKCdCYXNl
IGNvbW1pdCBpcyB7fSAocmVmIHt9KScuZm9ybWF0KGJhc2UsIGJhc2UuaGFzaCkpCisKKyAgICAg
ICAgbG9nLmRlYnVnKCdTYXZpbmcgY29udHJpYnV0b3JzIHRvIHRlbXAgZmlsZSB0byBiZSBwaWNr
ZWQgdXAgYnkgY2hpbGQgcHJvY2Vzc2VzJykKKyAgICAgICAgY29udHJpYnV0b3JzID0gb3MucGF0
aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3t9LWNvbnRyaWJ1dG9ycy5qc29uJy5mb3Jt
YXQob3MuZ2V0cGlkKCkpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oY29u
dHJpYnV0b3JzLCAndycpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5jb250
cmlidXRvcnMuc2F2ZShmaWxlKQorCisgICAgICAgICAgICBtZXNzYWdlX2ZpbHRlciA9IFsKKyAg
ICAgICAgICAgICAgICAnLS1tc2ctZmlsdGVyJywKKyAgICAgICAgICAgICAgICAie30ge30gJ3t9
JyIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdtZXNz
YWdlLnB5JyksCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGUgb3IgJ0lk
ZW50aWZpZXI6IHt9JywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgXSBpZiBhcmdz
LmlkZW50aWZpZXIgZWxzZSBbXQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwg
J3cnKSBhcyBkZXZudWxsOgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChb
CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuZXhlY3V0YWJsZSgpLCAnZmlsdGVyLWJy
YW5jaCcsICctZicsCisgICAgICAgICAgICAgICAgICAgICctLWVudi1maWx0ZXInLCAnJyd7b3Zl
cndyaXRlX21lc3NhZ2V9Citjb21taXR0ZXJPdXRwdXQ9JCh7cHl0aG9ufSB7Y29tbWl0dGVyX3B5
fSB7Y29udHJpYnV0b3JfanNvbn0pCitLRVk9JycKK1ZBTFVFPScnCitmb3Igd29yZCBpbiAkY29t
bWl0dGVyT3V0cHV0OyBkbworICAgIGlmIFtbICR3b3JkID09IEdJVF8qIF1dIDsgdGhlbgorICAg
ICAgICBpZiBbWyAkS0VZID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICAgICAge3NldHRpbmdf
bWVzc2FnZX0KKyAgICAgICAgICAgIHByaW50ZiAtdiAkS0VZICIke3tWQUxVRTo6JCgoJHt7I1ZB
TFVFfX0gLSAxKSl9fSIKKyAgICAgICAgICAgIEtFWT0nJworICAgICAgICAgICAgVkFMVUU9JycK
KyAgICAgICAgZmkKKyAgICBmaQorICAgIGlmIFtbICIkS0VZIiA9PSAiIiBdXSA7IHRoZW4KKyAg
ICAgICAgS0VZPSIkd29yZCIKKyAgICBlbHNlCisgICAgICAgIFZBTFVFPSIkVkFMVUUkd29yZCAi
CisgICAgZmkKK2RvbmUKK2lmIFtbICRLRVkgPT0gR0lUXyogXV0gOyB0aGVuCisgICAge3NldHRp
bmdfbWVzc2FnZX0KKyAgICBwcmludGYgLXYgJEtFWSAiJHt7VkFMVUU6OiQoKCR7eyNWQUxVRX19
IC0gMSkpfX0iCitmaScnJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3Jp
dGVfbWVzc2FnZT0nJyBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLklORk8gZWxzZSAnZWNobyAiT3Zl
cndyaXRpbmcgJEdJVF9DT01NSVQiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbj1z
eXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlcl9weT1vcy5w
YXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2NvbW1pdHRlci5weScpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0b3JfanNvbj1jb250cmlidXRvcnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXR0aW5nX21lc3NhZ2U9JycgaWYgbG9nLmxldmVsID4gbG9n
Z2luZy5ERUJVRyBlbHNlICdlY2hvICIgICAgJEtFWT0kVkFMVUUiJywKKyAgICAgICAgICAgICAg
ICAgICAgKSwKKyAgICAgICAgICAgICAgICBdICsgbWVzc2FnZV9maWx0ZXIgKyBbJ3t9Li4ue30n
LmZvcm1hdChicmFuY2gsIGJhc2UuaGFzaCldLAorICAgICAgICAgICAgICAgICAgICBjd2Q9cmVw
b3NpdG9yeS5yb290X3BhdGgsCisgICAgICAgICAgICAgICAgICAgIGVudj17J0ZJTFRFUl9CUkFO
Q0hfU1FVRUxDSF9XQVJOSU5HJzogJzEnLCAnUFlUSE9OUEFUSCc6ICc6Jy5qb2luKHN5cy5wYXRo
KX0sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1kZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxv
Z2dpbmcuV0FSTklORyBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZu
dWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5vbmUsCisgICAgICAgICAg
ICAgICAgKQorCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoK
KyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byBtb2RpZnkgbG9jYWwgY29t
bWl0IG1lc3NhZ2VzXG4nKQorICAgICAgICAgICAgcmV0dXJuIC0xCisKKyAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb250cmlidXRvcnMpCisKKyAgICAgICAgcHJpbnQo
J3t9IHN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIScuZm9ybWF0KHN0cmluZ191dGlscy5wbHVy
YWxpemUoZGlmZmVyZW5jZSwgJ2NvbW1pdCcpKSkKKworICAgICAgICByZXR1cm4gMApJbmRleDog
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9j
YW5vbmljYWxpemUvY29tbWl0dGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY2Fub25pY2FsaXplL2NvbW1p
dHRlci5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9wcm9ncmFtL2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwLCAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0
IHJlCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBydW4KK2Zyb20gd2Vi
a2l0c2NtcHkgaW1wb3J0IENvbnRyaWJ1dG9yLCBsb2NhbAorCitFTUFJTF9SRSA9IHJlLmNvbXBp
bGUocicoP1A8ZW1haWw+W15AXStAW15AXSspKEAuKik/JykKKworCitkZWYgY2Fub25pY2FsaXpl
KG5hbWUsIGVtYWlsLCBjb250cmlidXRvcnMpOgorICAgIG1hdGNoID0gRU1BSUxfUkUubWF0Y2go
ZW1haWwpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIGVtYWlsID0gbWF0Y2guZ3JvdXAoJ2VtYWls
JykKKworICAgIGNvbnRyaWJ1dG9yID0gY29udHJpYnV0b3JzLmdldChlbWFpbCwgY29udHJpYnV0
b3JzLmdldChlbWFpbC5sb3dlcigpKSkKKyAgICBpZiBjb250cmlidXRvcjoKKyAgICAgICAgcmV0
dXJuIGNvbnRyaWJ1dG9yLm5hbWUsIGVtYWlsIGlmIG1hdGNoIGVsc2UgY29udHJpYnV0b3IuZW1h
aWwKKyAgICBjb250cmlidXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQobmFtZSkKKyAgICBpZiBjb250
cmlidXRvcjoKKyAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dG9yLm5hbWUsIGNvbnRyaWJ1dG9yLmVt
YWlsCisgICAgcmV0dXJuIG5hbWUsIGVtYWlsCisKKworZGVmIG1haW4oY29udHJpYnV0b3JfZmls
ZSk6CisgICAgUkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCisgICAg
R0lUX0NPTU1JVCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIHdpdGggb3Bl
bihjb250cmlidXRvcl9maWxlLCAncicpIGFzIGZpbGU6CisgICAgICAgIGNvbnRyaWJ1dG9ycyA9
IENvbnRyaWJ1dG9yLk1hcHBpbmcubG9hZChmaWxlKQorCisgICAgYXV0aG9yLCBhdXRob3JfZW1h
aWwgPSBjYW5vbmljYWxpemUoCisgICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQVVUSE9SX05B
TUUnLCAnVW5rbm93bicpLAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0FVVEhPUl9FTUFJ
TCcsICdudWxsJyksCisgICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICApCisgICAgY29tbWl0dGVy
LCBjb21taXR0ZXJfZW1haWwgPSBjYW5vbmljYWxpemUoCisgICAgICAgIG9zLmVudmlyb24uZ2V0
KCdHSVRfQ09NTUlUVEVSX05BTUUnLCAnVW5rbm93bicpLAorICAgICAgICBvcy5lbnZpcm9uLmdl
dCgnR0lUX0NPTU1JVFRFUl9FTUFJTCcsICdudWxsJyksCisgICAgICAgIGNvbnRyaWJ1dG9ycywK
KyAgICApCisKKyAgICAjIEF0dGVtcHQgdG8gZXh0cmFjdCBwYXRjaC1ieQorICAgIGlmIGF1dGhv
cl9lbWFpbCA9PSBjb21taXR0ZXJfZW1haWwgYW5kIFJFUE9TSVRPUllfUEFUSCBhbmQgR0lUX0NP
TU1JVDoKKyAgICAgICAgbG9nID0gcnVuKAorICAgICAgICAgICAgW2xvY2FsLkdpdC5leGVjdXRh
YmxlKCksICdsb2cnLCBHSVRfQ09NTUlULCAnLTEnXSwKKyAgICAgICAgICAgIGN3ZD1SRVBPU0lU
T1JZX1BBVEgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcsCisgICAgICAg
ICkKKworICAgICAgICBwYXRjaF9ieSA9IHJlLnNlYXJjaCgKKyAgICAgICAgICAgIHInXHMrUGF0
Y2ggYnkgKD9QPGF1dGhvcj5bXjxdKykgXDwoP1A8ZW1haWw+W148XSspXD4uKiBvbiBcZCstXGQr
LVxkKycsCisgICAgICAgICAgICBsb2cuc3Rkb3V0LAorICAgICAgICApCisgICAgICAgIGlmIHBh
dGNoX2J5OgorICAgICAgICAgICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxpemUo
CisgICAgICAgICAgICAgICAgcGF0Y2hfYnkuZ3JvdXAoJ2F1dGhvcicpLAorICAgICAgICAgICAg
ICAgIHBhdGNoX2J5Lmdyb3VwKCdlbWFpbCcpLAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9y
cywKKyAgICAgICAgICAgICkKKworICAgIHByaW50KHUnR0lUX0FVVEhPUl9OQU1FIHt9Jy5mb3Jt
YXQoYXV0aG9yKSkKKyAgICBwcmludCh1J0dJVF9BVVRIT1JfRU1BSUwge30nLmZvcm1hdChhdXRo
b3JfZW1haWwpKQorICAgIHByaW50KHUnR0lUX0NPTU1JVFRFUl9OQU1FIHt9Jy5mb3JtYXQoY29t
bWl0dGVyKSkKKyAgICBwcmludCh1J0dJVF9DT01NSVRURVJfRU1BSUwge30nLmZvcm1hdChjb21t
aXR0ZXJfZW1haWwpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4
aXQobWFpbihzeXMuYXJndlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2Nhbm9uaWNhbGl6ZS9tZXNzYWdlLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Byb2dyYW0vY2Fub25pY2FsaXplL21lc3NhZ2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jYW5vbmlj
YWxpemUvbWVzc2FnZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0c2NtcHkubG9jYWwgaW1w
b3J0IEdpdAorCisKK2RlZiBtYWluKGlucHV0ZmlsZSwgaWRlbnRpZmllcl90ZW1wbGF0ZSk6Cisg
ICAgUkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCisgICAgR0lUX0NP
TU1JVCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIGlmIG5vdCBSRVBPU0lU
T1JZX1BBVEg6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byByZXRyaWV2ZSBy
ZXBvc2l0b3J5IHBhdGhcbicpCisgICAgICAgIHJldHVybiAtMQorICAgIGlmIG5vdCBHSVRfQ09N
TUlUOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0cmlldmUgZ2l0IGhh
c2hcbicpCisgICAgICAgIHJldHVybiAtMQorCisgICAgcmVwb3NpdG9yeSA9IEdpdChSRVBPU0lU
T1JZX1BBVEgpCisgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5jb21taXQoaGFzaD1HSVRfQ09NTUlU
KQorICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0
byBmaW5kICd7fScgaW4gdGhlIHJlcG9zaXRvcnkiLmZvcm1hdChHSVRfQ09NTUlUKSkKKyAgICAg
ICAgcmV0dXJuIC0xCisgICAgaWYgbm90IGNvbW1pdC5pZGVudGlmaWVyIG9yIG5vdCBjb21taXQu
YnJhbmNoOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gY29tcHV0ZSB0aGUg
aWRlbnRpZmllciBmb3IgJ3t9JyIuZm9ybWF0KEdJVF9DT01NSVQpKQorICAgICAgICByZXR1cm4g
LTEKKworICAgIGxpbmVzID0gW10KKyAgICBmb3IgbGluZSBpbiBpbnB1dGZpbGUucmVhZGxpbmVz
KCk6CisgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lLnJzdHJpcCgpKQorCisgICAgaWRlbnRpZmll
cl9pbmRleCA9IGxlbihsaW5lcykKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCByZXBvc2l0
b3J5LkdJVF9TVk5fUkVWSVNJT04ubWF0Y2gobGluZXNbLTFdKToKKyAgICAgICAgaWRlbnRpZmll
cl9pbmRleCAtPSAxCisKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCBsaW5lc1tpZGVudGlm
aWVyX2luZGV4IC0gMV0uc3RhcnRzd2l0aChpZGVudGlmaWVyX3RlbXBsYXRlLmZvcm1hdCgnJyku
c3BsaXQoJzonKVswXSk6CisgICAgICAgIGxpbmVzW2lkZW50aWZpZXJfaW5kZXggLSAxXSA9IGlk
ZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkKKyAgICBlbHNlOgorICAgICAgICBsaW5l
cy5pbnNlcnQoaWRlbnRpZmllcl9pbmRleCwgaWRlbnRpZmllcl90ZW1wbGF0ZS5mb3JtYXQoY29t
bWl0KSkKKworICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBwcmludChsaW5lKQorCisK
K2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuc3RkaW4s
IHN5cy5hcmd2WzFdKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417218</attachid>
            <date>2021-01-07 15:37:45 -0800</date>
            <delta_ts>2021-01-07 16:35:47 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-220369-20210107153744.patch</filename>
            <type>text/plain</type>
            <size>52383</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTI2NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDIxLTAxLTA3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFNwbGl0IHByb2dyYW0gaW50byBzZXBhcmF0ZSBm
aWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIw
MzY5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83Mjg1NjkwNj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEZXdlaSBaaHUuCisKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZTogTW92ZSB0
byB3ZWJraXRzY21weS9wcm9ncmFtL2Nhbm9uaWNhbGl6ZS4KKyAgICAgICAgKiBTY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHk6IFVwZGF0
ZSBpbXBvcnRzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW06IE1vdmVkIGZyb20gd2Via2l0c2NtcHkvcHJvZ3JhbS5weS4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5
OiBNb3ZlZCB0byB3ZWJraXRzY21weS9wcm9ncmFtLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHk6IE1vdmVkIGZy
b20gd2Via2l0c2NtcHkvcHJvZ3JhbS5weS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2Nhbm9uaWNhbGl6ZTogTW92ZWQgZnJvbSB3
ZWJraXRzY21weS9jYW5vbmljYWxpemUuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5OiBE
aXR0by4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9wcm9ncmFtL2Nhbm9uaWNhbGl6ZS9tZXNzYWdlLnB5OiBEaXR0by4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2NoZWNrb3V0LnB5
OiBNb3ZlZCBmcm9tIHdlYmtpdHNjbXB5L3Byb2dyYW0ucHkuCisgICAgICAgICogU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jb21tYW5kLnB5OiBNb3Zl
ZCBmcm9tIHdlYmtpdHNjbXB5L3Byb2dyYW0ucHkuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9maW5kLnB5OiBNb3ZlZCBmcm9tIHdl
YmtpdHNjbXB5L3Byb2dyYW0ucHkuCisKIDIwMjEtMDEtMDcgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgVGV4dCBmaWVsZHMgc2hvdWxkIG5vdCBiZSB0
cmFuc2xhdGVkIHdoaWxlIHR5cGluZwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlz
aW9uIDI3MTI2NykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4Y2Vw
dCBJbXBvcnRFcnJvcjoKICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRo
IGBwaXAgaW5zdGFsbCB3ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5k
ZXggVVJMPmAiCiAgICAgKQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA3LCAyKQordmVyc2lvbiA9
IFZlcnNpb24oMCwgNywgMykKIAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZmFzdGVu
ZXJzJywgVmVyc2lvbigwLCAxNSwgMCkpKQogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgn
bW9ub3RvbmljJywgVmVyc2lvbigxLCA1KSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
Y2Fub25pY2FsaXplL19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzEyNjcpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0
X18ucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHRl
bXBmaWxlCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotCi1mcm9tIHdlYmtpdGNvcmVw
eSBpbXBvcnQgYXJndW1lbnRzLCBydW4sIHN0cmluZ191dGlscwotZnJvbSB3ZWJraXRzY21weSBp
bXBvcnQgbG9nCi1mcm9tIHdlYmtpdHNjbXB5LnByb2dyYW0gaW1wb3J0IENvbW1hbmQKLQotCi1j
bGFzcyBDYW5vbmljYWxpemUoQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICdjYW5vbmljYWxpemUnCi0g
ICAgaGVscCA9ICdUYWtlIHRoZSBzZXQgb2YgY29tbWl0cyB3aGljaCBoYXZlIG5vdCB5ZXQgYmVl
biBwdXNoZWQgYW5kIGVkaXQgaGlzdG9yeSB0byBub3JtYWxpemUgdGhlICcgK1wKLSAgICAgICAg
ICAgJ2NvbW1pdHRlcnMgd2l0aCBleGlzdGluZyBjb250cmlidXRvciBtYXBwaW5nIGFuZCBhZGQg
aWRlbnRpZmllcnMgdG8gY29tbWl0IG1lc3NhZ2VzJwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAg
ZGVmIHBhcnNlcihjbHMsIHBhcnNlciwgbG9nZ2Vycz1Ob25lKToKLSAgICAgICAgb3V0cHV0X2Fy
Z3MgPSBhcmd1bWVudHMuTG9nZ2luZ0dyb3VwKAotICAgICAgICAgICAgcGFyc2VyLAotICAgICAg
ICAgICAgbG9nZ2Vycz1sb2dnZXJzLAotICAgICAgICAgICAgaGVscD0ne30gYW1vdW50IG9mIGxv
Z2dpbmcgYW5kIGBnaXQgcmViYXNlYCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQnCi0gICAgICAgICkK
LSAgICAgICAgb3V0cHV0X2FyZ3MuYWRkX2FyZ3VtZW50KAotICAgICAgICAgICAgJy0taWRlbnRp
ZmllcicsICctLW5vLWlkZW50aWZpZXInLAotICAgICAgICAgICAgaGVscD0nQWRkIGluIHRoZSBp
ZGVudGlmaWVyIHRvIGNvbW1pdCBtZXNzYWdlcywgdHJ1ZSBieSBkZWZhdWx0JywKLSAgICAgICAg
ICAgIGFjdGlvbj1hcmd1bWVudHMuTm9BY3Rpb24sCi0gICAgICAgICAgICBkZXN0PSdpZGVudGlm
aWVyJywKLSAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwKLSAgICAgICAgKQotICAgICAgICBvdXRw
dXRfYXJncy5hZGRfYXJndW1lbnQoCi0gICAgICAgICAgICAnLS1yZW1vdGUnLAotICAgICAgICAg
ICAgaGVscD0nQ29tcGFyZSBhZ2FpbnN0IGEgZGlmZmVyZW50IHJlbW90ZScsCi0gICAgICAgICAg
ICBkZXN0PSdyZW1vdGUnLAotICAgICAgICAgICAgZGVmYXVsdD0nb3JpZ2luJywKLSAgICAgICAg
KQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5
LCBpZGVudGlmaWVyX3RlbXBsYXRlPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgaWYgbm90IHJl
cG9zaXRvcnkucGF0aDoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0Nhbm5vdCBjYW5v
bmljYWxpemUgY29tbWl0cyBvbiBhIHJlbW90ZSByZXBvc2l0b3J5XG4nKQotICAgICAgICAgICAg
cmV0dXJuIDEKLSAgICAgICAgaWYgbm90IHJlcG9zaXRvcnkuaXNfZ2l0OgotICAgICAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgnQ29tbWl0cyBjYW4gb25seSBiZSBjYW5vbmljYWxpemVkIG9uIGEg
R2l0IHJlcG9zaXRvcnlcbicpCi0gICAgICAgICAgICByZXR1cm4gMQotCi0gICAgICAgIGJyYW5j
aCA9IHJlcG9zaXRvcnkuYnJhbmNoCi0gICAgICAgIGlmIG5vdCBicmFuY2g6Ci0gICAgICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoXG4n
KQotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIHJlc3VsdCA9IHJ1bihbCi0gICAgICAg
ICAgICByZXBvc2l0b3J5LmV4ZWN1dGFibGUoKSwgJ3Jldi1saXN0JywKLSAgICAgICAgICAgICct
LWNvdW50JywgJy0tbm8tbWVyZ2VzJywKLSAgICAgICAgICAgICd7cmVtb3RlfS97YnJhbmNofS4u
e2JyYW5jaH0nLmZvcm1hdChyZW1vdGU9YXJncy5yZW1vdGUsIGJyYW5jaD1icmFuY2gpLAotICAg
ICAgICBdLCBjYXB0dXJlX291dHB1dD1UcnVlLCBjd2Q9cmVwb3NpdG9yeS5yb290X3BhdGgpCi0g
ICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgnRmFpbGVkIHRvIGZpbmQgbG9jYWwgY29tbWl0c1xuJykKLSAgICAgICAgICAgIHJldHVybiAt
MQotICAgICAgICBkaWZmZXJlbmNlID0gaW50KHJlc3VsdC5zdGRvdXQucnN0cmlwKCkpCi0gICAg
ICAgIGlmIGRpZmZlcmVuY2UgPD0gMDoKLSAgICAgICAgICAgIHByaW50KCdObyBsb2NhbCBjb21t
aXRzIHRvIGJlIGVkaXRlZCcpCi0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBsb2cud2Fy
bmluZygne30gdG8gYmUgZWRpdHRlZC4uLicuZm9ybWF0KHN0cmluZ191dGlscy5wbHVyYWxpemUo
ZGlmZmVyZW5jZSwgJ2NvbW1pdCcpKSkKLQotICAgICAgICBiYXNlID0gcmVwb3NpdG9yeS5maW5k
KCd7fX57fScuZm9ybWF0KGJyYW5jaCwgZGlmZmVyZW5jZSkpCi0gICAgICAgIGxvZy5pbmZvKCdC
YXNlIGNvbW1pdCBpcyB7fSAocmVmIHt9KScuZm9ybWF0KGJhc2UsIGJhc2UuaGFzaCkpCi0KLSAg
ICAgICAgbG9nLmRlYnVnKCdTYXZpbmcgY29udHJpYnV0b3JzIHRvIHRlbXAgZmlsZSB0byBiZSBw
aWNrZWQgdXAgYnkgY2hpbGQgcHJvY2Vzc2VzJykKLSAgICAgICAgY29udHJpYnV0b3JzID0gb3Mu
cGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3t9LWNvbnRyaWJ1dG9ycy5qc29uJy5m
b3JtYXQob3MuZ2V0cGlkKCkpKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIG9wZW4o
Y29udHJpYnV0b3JzLCAndycpIGFzIGZpbGU6Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5j
b250cmlidXRvcnMuc2F2ZShmaWxlKQotCi0gICAgICAgICAgICBtZXNzYWdlX2ZpbHRlciA9IFsK
LSAgICAgICAgICAgICAgICAnLS1tc2ctZmlsdGVyJywKLSAgICAgICAgICAgICAgICAie30ge30g
J3t9JyIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwKLSAgICAg
ICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdt
ZXNzYWdlLnB5JyksCi0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGUgb3Ig
J0lkZW50aWZpZXI6IHt9JywKLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgXSBpZiBh
cmdzLmlkZW50aWZpZXIgZWxzZSBbXQotCi0gICAgICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVs
bCwgJ3cnKSBhcyBkZXZudWxsOgotICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2Fs
bChbCi0gICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuZXhlY3V0YWJsZSgpLCAnZmlsdGVy
LWJyYW5jaCcsICctZicsCi0gICAgICAgICAgICAgICAgICAgICctLWVudi1maWx0ZXInLCAnJyd7
b3ZlcndyaXRlX21lc3NhZ2V9Ci1jb21taXR0ZXJPdXRwdXQ9JCh7cHl0aG9ufSB7Y29tbWl0dGVy
X3B5fSB7Y29udHJpYnV0b3JfanNvbn0pCi1LRVk9JycKLVZBTFVFPScnCi1mb3Igd29yZCBpbiAk
Y29tbWl0dGVyT3V0cHV0OyBkbwotICAgIGlmIFtbICR3b3JkID09IEdJVF8qIF1dIDsgdGhlbgot
ICAgICAgICBpZiBbWyAkS0VZID09IEdJVF8qIF1dIDsgdGhlbgotICAgICAgICAgICAge3NldHRp
bmdfbWVzc2FnZX0KLSAgICAgICAgICAgIHByaW50ZiAtdiAkS0VZICIke3tWQUxVRTo6JCgoJHt7
I1ZBTFVFfX0gLSAxKSl9fSIKLSAgICAgICAgICAgIEtFWT0nJwotICAgICAgICAgICAgVkFMVUU9
JycKLSAgICAgICAgZmkKLSAgICBmaQotICAgIGlmIFtbICIkS0VZIiA9PSAiIiBdXSA7IHRoZW4K
LSAgICAgICAgS0VZPSIkd29yZCIKLSAgICBlbHNlCi0gICAgICAgIFZBTFVFPSIkVkFMVUUkd29y
ZCAiCi0gICAgZmkKLWRvbmUKLWlmIFtbICRLRVkgPT0gR0lUXyogXV0gOyB0aGVuCi0gICAge3Nl
dHRpbmdfbWVzc2FnZX0KLSAgICBwcmludGYgLXYgJEtFWSAiJHt7VkFMVUU6OiQoKCR7eyNWQUxV
RX19IC0gMSkpfX0iCi1maScnJy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBvdmVy
d3JpdGVfbWVzc2FnZT0nJyBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLklORk8gZWxzZSAnZWNobyAi
T3ZlcndyaXRpbmcgJEdJVF9DT01NSVQiJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhv
bj1zeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlcl9weT1v
cy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2NvbW1pdHRlci5weScpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0b3JfanNvbj1jb250cmlidXRvcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nX21lc3NhZ2U9JycgaWYgbG9nLmxldmVsID4g
bG9nZ2luZy5ERUJVRyBlbHNlICdlY2hvICIgICAgJEtFWT0kVkFMVUUiJywKLSAgICAgICAgICAg
ICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICBdICsgbWVzc2FnZV9maWx0ZXIgKyBbJ3t9Li4u
e30nLmZvcm1hdChicmFuY2gsIGJhc2UuaGFzaCldLAotICAgICAgICAgICAgICAgICAgICBjd2Q9
cmVwb3NpdG9yeS5yb290X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgIGVudj17J0ZJTFRFUl9C
UkFOQ0hfU1FVRUxDSF9XQVJOSU5HJzogJzEnLCAnUFlUSE9OUEFUSCc6ICc6Jy5qb2luKHN5cy5w
YXRoKX0sCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1kZXZudWxsIGlmIGxvZy5sZXZlbCA+
IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVycj1k
ZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5vbmUsCi0gICAgICAg
ICAgICAgICAgKQotCi0gICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJv
cjoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byBtb2RpZnkgbG9jYWwg
Y29tbWl0IG1lc3NhZ2VzXG4nKQotICAgICAgICAgICAgcmV0dXJuIC0xCi0KLSAgICAgICAgZmlu
YWxseToKLSAgICAgICAgICAgIG9zLnJlbW92ZShjb250cmlidXRvcnMpCi0KLSAgICAgICAgcHJp
bnQoJ3t9IHN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIScuZm9ybWF0KHN0cmluZ191dGlscy5w
bHVyYWxpemUoZGlmZmVyZW5jZSwgJ2NvbW1pdCcpKSkKLQotICAgICAgICByZXR1cm4gMApJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25p
Y2FsaXplL2NvbW1pdHRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5CShyZXZp
c2lvbiAyNzEyNjcpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5CShub25leGlzdGVudCkKQEAgLTEsOTIg
KzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
LSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi0KLWZyb20g
d2Via2l0Y29yZXB5IGltcG9ydCBydW4KLWZyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbnRyaWJ1
dG9yLCBsb2NhbAotCi1FTUFJTF9SRSA9IHJlLmNvbXBpbGUocicoP1A8ZW1haWw+W15AXStAW15A
XSspKEAuKik/JykKLQotCi1kZWYgY2Fub25pY2FsaXplKG5hbWUsIGVtYWlsLCBjb250cmlidXRv
cnMpOgotICAgIG1hdGNoID0gRU1BSUxfUkUubWF0Y2goZW1haWwpCi0gICAgaWYgbWF0Y2g6Ci0g
ICAgICAgIGVtYWlsID0gbWF0Y2guZ3JvdXAoJ2VtYWlsJykKLQotICAgIGNvbnRyaWJ1dG9yID0g
Y29udHJpYnV0b3JzLmdldChlbWFpbCwgY29udHJpYnV0b3JzLmdldChlbWFpbC5sb3dlcigpKSkK
LSAgICBpZiBjb250cmlidXRvcjoKLSAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dG9yLm5hbWUsIGVt
YWlsIGlmIG1hdGNoIGVsc2UgY29udHJpYnV0b3IuZW1haWwKLSAgICBjb250cmlidXRvciA9IGNv
bnRyaWJ1dG9ycy5nZXQobmFtZSkKLSAgICBpZiBjb250cmlidXRvcjoKLSAgICAgICAgcmV0dXJu
IGNvbnRyaWJ1dG9yLm5hbWUsIGNvbnRyaWJ1dG9yLmVtYWlsCi0gICAgcmV0dXJuIG5hbWUsIGVt
YWlsCi0KLQotZGVmIG1haW4oY29udHJpYnV0b3JfZmlsZSk6Ci0gICAgUkVQT1NJVE9SWV9QQVRI
ID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCi0gICAgR0lUX0NPTU1JVCA9IG9zLmVudmlyb24u
Z2V0KCdHSVRfQ09NTUlUJykKLQotICAgIHdpdGggb3Blbihjb250cmlidXRvcl9maWxlLCAncicp
IGFzIGZpbGU6Ci0gICAgICAgIGNvbnRyaWJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1hcHBpbmcubG9h
ZChmaWxlKQotCi0gICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxpemUoCi0gICAg
ICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQVVUSE9SX05BTUUnLCAnVW5rbm93bicpLAotICAgICAg
ICBvcy5lbnZpcm9uLmdldCgnR0lUX0FVVEhPUl9FTUFJTCcsICdudWxsJyksCi0gICAgICAgIGNv
bnRyaWJ1dG9ycywKLSAgICApCi0gICAgY29tbWl0dGVyLCBjb21taXR0ZXJfZW1haWwgPSBjYW5v
bmljYWxpemUoCi0gICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUVEVSX05BTUUnLCAn
VW5rbm93bicpLAotICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVFRFUl9FTUFJTCcs
ICdudWxsJyksCi0gICAgICAgIGNvbnRyaWJ1dG9ycywKLSAgICApCi0KLSAgICAjIEF0dGVtcHQg
dG8gZXh0cmFjdCBwYXRjaC1ieQotICAgIGlmIGF1dGhvcl9lbWFpbCA9PSBjb21taXR0ZXJfZW1h
aWwgYW5kIFJFUE9TSVRPUllfUEFUSCBhbmQgR0lUX0NPTU1JVDoKLSAgICAgICAgbG9nID0gcnVu
KAotICAgICAgICAgICAgW2xvY2FsLkdpdC5leGVjdXRhYmxlKCksICdsb2cnLCBHSVRfQ09NTUlU
LCAnLTEnXSwKLSAgICAgICAgICAgIGN3ZD1SRVBPU0lUT1JZX1BBVEgsIGNhcHR1cmVfb3V0cHV0
PVRydWUsIGVuY29kaW5nPSd1dGYtOCcsCi0gICAgICAgICkKLQotICAgICAgICBwYXRjaF9ieSA9
IHJlLnNlYXJjaCgKLSAgICAgICAgICAgIHInXHMrUGF0Y2ggYnkgKD9QPGF1dGhvcj5bXjxdKykg
XDwoP1A8ZW1haWw+W148XSspXD4uKiBvbiBcZCstXGQrLVxkKycsCi0gICAgICAgICAgICBsb2cu
c3Rkb3V0LAotICAgICAgICApCi0gICAgICAgIGlmIHBhdGNoX2J5OgotICAgICAgICAgICAgYXV0
aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxpemUoCi0gICAgICAgICAgICAgICAgcGF0Y2hf
YnkuZ3JvdXAoJ2F1dGhvcicpLAotICAgICAgICAgICAgICAgIHBhdGNoX2J5Lmdyb3VwKCdlbWFp
bCcpLAotICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycywKLSAgICAgICAgICAgICkKLQotICAg
IHByaW50KHUnR0lUX0FVVEhPUl9OQU1FIHt9Jy5mb3JtYXQoYXV0aG9yKSkKLSAgICBwcmludCh1
J0dJVF9BVVRIT1JfRU1BSUwge30nLmZvcm1hdChhdXRob3JfZW1haWwpKQotICAgIHByaW50KHUn
R0lUX0NPTU1JVFRFUl9OQU1FIHt9Jy5mb3JtYXQoY29tbWl0dGVyKSkKLSAgICBwcmludCh1J0dJ
VF9DT01NSVRURVJfRU1BSUwge30nLmZvcm1hdChjb21taXR0ZXJfZW1haWwpKQotCi0KLWlmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxXSkpCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5v
bmljYWxpemUvbWVzc2FnZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQkocmV2aXNp
b24gMjcxMjY3KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvY2Fub25pY2FsaXplL21lc3NhZ2UucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OSArMCww
IEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0j
IGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
Ci0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWZyb20gd2Via2l0c2NtcHkubG9j
YWwgaW1wb3J0IEdpdAotCi0KLWRlZiBtYWluKGlucHV0ZmlsZSwgaWRlbnRpZmllcl90ZW1wbGF0
ZSk6Ci0gICAgUkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCi0gICAg
R0lUX0NPTU1JVCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKLQotICAgIGlmIG5vdCBS
RVBPU0lUT1JZX1BBVEg6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byByZXRy
aWV2ZSByZXBvc2l0b3J5IHBhdGhcbicpCi0gICAgICAgIHJldHVybiAtMQotICAgIGlmIG5vdCBH
SVRfQ09NTUlUOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0cmlldmUg
Z2l0IGhhc2hcbicpCi0gICAgICAgIHJldHVybiAtMQotCi0gICAgcmVwb3NpdG9yeSA9IEdpdChS
RVBPU0lUT1JZX1BBVEgpCi0gICAgY29tbWl0ID0gcmVwb3NpdG9yeS5jb21taXQoaGFzaD1HSVRf
Q09NTUlUKQotICAgIGlmIG5vdCBjb21taXQ6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZh
aWxlZCB0byBmaW5kICd7fScgaW4gdGhlIHJlcG9zaXRvcnkiLmZvcm1hdChHSVRfQ09NTUlUKSkK
LSAgICAgICAgcmV0dXJuIC0xCi0gICAgaWYgbm90IGNvbW1pdC5pZGVudGlmaWVyIG9yIG5vdCBj
b21taXQuYnJhbmNoOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gY29tcHV0
ZSB0aGUgaWRlbnRpZmllciBmb3IgJ3t9JyIuZm9ybWF0KEdJVF9DT01NSVQpKQotICAgICAgICBy
ZXR1cm4gLTEKLQotICAgIGxpbmVzID0gW10KLSAgICBmb3IgbGluZSBpbiBpbnB1dGZpbGUucmVh
ZGxpbmVzKCk6Ci0gICAgICAgIGxpbmVzLmFwcGVuZChsaW5lLnJzdHJpcCgpKQotCi0gICAgaWRl
bnRpZmllcl9pbmRleCA9IGxlbihsaW5lcykKLSAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCBy
ZXBvc2l0b3J5LkdJVF9TVk5fUkVWSVNJT04ubWF0Y2gobGluZXNbLTFdKToKLSAgICAgICAgaWRl
bnRpZmllcl9pbmRleCAtPSAxCi0KLSAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCBsaW5lc1tp
ZGVudGlmaWVyX2luZGV4IC0gMV0uc3RhcnRzd2l0aChpZGVudGlmaWVyX3RlbXBsYXRlLmZvcm1h
dCgnJykuc3BsaXQoJzonKVswXSk6Ci0gICAgICAgIGxpbmVzW2lkZW50aWZpZXJfaW5kZXggLSAx
XSA9IGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkKLSAgICBlbHNlOgotICAgICAg
ICBsaW5lcy5pbnNlcnQoaWRlbnRpZmllcl9pbmRleCwgaWRlbnRpZmllcl90ZW1wbGF0ZS5mb3Jt
YXQoY29tbWl0KSkKLQotICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICBwcmludChsaW5l
KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lzLmV4aXQobWFpbihzeXMu
c3RkaW4sIHN5cy5hcmd2WzFdKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weQkocmV2aXNpb24g
MjcxMjY3KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvcHJvZ3JhbS5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMCArMCwwIEBACi0jIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IGpzb24K
LWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotZnJvbSBkYXRldGltZSBp
bXBvcnQgZGF0ZXRpbWUKLWZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMsIGxvZyBh
cyB3ZWJraXRjb3JlcHlfbG9nCi1mcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIGxvY2Fs
LCBsb2csIHJlbW90ZQotCi0KLWNsYXNzIENvbW1hbmQob2JqZWN0KToKLSAgICBuYW1lID0gTm9u
ZQotICAgIGhlbHAgPSBOb25lCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcGFyc2VyKGNs
cywgcGFyc2VyKToKLSAgICAgICAgaWYgY2xzLm5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0NvbW1hbmQgZG9lcyBub3QgaGF2ZSBhIG5hbWUnKQot
ICAgICAgICBpZiBjbHMuaGVscCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigiJ3t9JyBkb2VzIG5vdCBoYXZlIGEgaGVscCBtZXNzYWdlIikKLQotICAgIEBj
bGFzc21ldGhvZAotICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3Mp
OgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdObyBjb21tYW5kIHNwZWNpZmllZFxuJykKLSAg
ICAgICAgcmV0dXJuIC0xCi0KLQotY2xhc3MgRmluZChDb21tYW5kKToKLSAgICBuYW1lID0gJ2Zp
bmQnCi0gICAgaGVscCA9ICdHaXZlbiBhbiBpZGVudGlmaWVyLCByZXZpc2lvbiBvciBoYXNoLCBu
b3JtYWxpemUgYW5kIHByaW50IHRoZSBjb21taXQnCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBk
ZWYgcGFyc2VyKGNscywgcGFyc2VyLCBsb2dnZXJzPU5vbmUpOgotICAgICAgICBvdXRwdXRfYXJn
cyA9IGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCi0gICAgICAgICAgICBwYXJzZXIsCi0gICAgICAg
ICAgICBsb2dnZXJzPWxvZ2dlcnMsCi0gICAgICAgICAgICBoZWxwPSd7fSBhbW91bnQgb2YgbG9n
Z2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRpc3BsYXllZCcKLSAgICAgICAgKQotICAgICAg
ICBvdXRwdXRfYXJncy5hZGRfYXJndW1lbnQoCi0gICAgICAgICAgICAnLS1qc29uJywgJy1qJywK
LSAgICAgICAgICAgIGhlbHA9J0NvbnZlcnQgdGhlIGNvbW1pdCB0byBhIG1hY2hpbmUtcmVhZGFi
bGUgSlNPTiBvYmplY3QnLAotICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAg
ICAgICAgIGRlc3Q9J2pzb24nLAotICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAg
KQotICAgICAgICBvdXRwdXRfYXJncy5hZGRfYXJndW1lbnQoCi0gICAgICAgICAgICAnLS1sb2cn
LCAnLS1uby1sb2cnLAotICAgICAgICAgICAgaGVscD0nSW5jbHVkZSB0aGUgY29tbWl0IG1lc3Nh
Z2UgZm9yIHRoZSByZXF1ZXN0ZWQgY29tbWl0JywKLSAgICAgICAgICAgIGFjdGlvbj1hcmd1bWVu
dHMuTm9BY3Rpb24sCi0gICAgICAgICAgICBkZXN0PSdpbmNsdWRlX2xvZycsCi0gICAgICAgICAg
ICBkZWZhdWx0PVRydWUsCi0gICAgICAgICkKLQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50
KAotICAgICAgICAgICAgJ2FyZ3VtZW50JywgbmFyZ3M9MSwKLSAgICAgICAgICAgIHR5cGU9c3Ry
LCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICBoZWxwPSdTdHJpbmcgcmVwcmVzZW50YXRpb24g
b2YgYSBjb21taXQgb3IgYnJhbmNoIHRvIGJlIG5vcm1hbGl6ZWQnLAotICAgICAgICApCi0KLSAg
ICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnksICoqa3dh
cmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5maW5k
KGFyZ3MuYXJndW1lbnRbMF0sIGluY2x1ZGVfbG9nPWFyZ3MuaW5jbHVkZV9sb2cpCi0gICAgICAg
IGV4Y2VwdCAobG9jYWwuU2NtLkV4Y2VwdGlvbiwgVmFsdWVFcnJvcikgYXMgZXhjZXB0aW9uOgot
ICAgICAgICAgICAgIyBWYWx1ZUVycm9ycyBhbmQgU2NtIGV4Y2VwdGlvbnMgdXN1YWxseSBjb250
YWluIGVub3VnaCBpbmZvcm1hdGlvbiB0byBiZSBkaXNwbGF5ZWQKLSAgICAgICAgICAgICMgdG8g
dGhlIHVzZXIgYXMgYW4gZXJyb3IKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGV4
Y2VwdGlvbikgKyAnXG4nKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotICAgICAgICBpZiBhcmdz
LnZlcmJvc2UgPiAwIGFuZCBub3QgY29tbWl0Lm1lc3NhZ2U6Ci0gICAgICAgICAgICBzeXMuc3Rk
ZXJyLndyaXRlKCJGYWlsZWQgdG8gZmluZCB0aGUgIGNvbW1pdCBtZXNzYWdlIGZvciAne30nXG4i
LmZvcm1hdChjb21taXQpKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotICAgICAgICBpZiBhcmdz
Lmpzb246Ci0gICAgICAgICAgICBwcmludChqc29uLmR1bXBzKGNvbW1pdCwgY2xzPUNvbW1pdC5F
bmNvZGVyLCBpbmRlbnQ9NCkpCi0gICAgICAgICAgICByZXR1cm4gMAotCi0gICAgICAgIGlmIGFy
Z3MudmVyYm9zZSA8IDA6Ci0gICAgICAgICAgICBwcmludCgne2lkZW50aWZpZXJ9IHwge2hhc2h9
e3JldmlzaW9ufXt0aXRsZX0nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyPWNv
bW1pdCwKLSAgICAgICAgICAgICAgICBoYXNoPWNvbW1pdC5oYXNoWzpDb21taXQuSEFTSF9MQUJF
TF9TSVpFXSBpZiBjb21taXQuaGFzaCBlbHNlICcnLAotICAgICAgICAgICAgICAgIHJldmlzaW9u
PSd7fXJ7fScuZm9ybWF0KCcsICcgaWYgY29tbWl0Lmhhc2ggZWxzZSAnJywgY29tbWl0LnJldmlz
aW9uKSBpZiBjb21taXQucmV2aXNpb24gZWxzZSAnJywKLSAgICAgICAgICAgICAgICB0aXRsZT0n
IHwge30nLmZvcm1hdChjb21taXQubWVzc2FnZS5zcGxpdGxpbmVzKClbMF0pIGlmIGNvbW1pdC5t
ZXNzYWdlIGVsc2UgJycKLSAgICAgICAgICAgICkpCi0gICAgICAgICAgICByZXR1cm4gMAotCi0g
ICAgICAgIGlmIGNvbW1pdC5tZXNzYWdlOgotICAgICAgICAgICAgcHJpbnQoJ1RpdGxlOiB7fScu
Zm9ybWF0KGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKVswXSkpCi0gICAgICAgIHByaW50KCdB
dXRob3I6IHt9Jy5mb3JtYXQoY29tbWl0LmF1dGhvcikpCi0gICAgICAgIHByaW50KCdJZGVudGlm
aWVyOiB7fScuZm9ybWF0KGNvbW1pdCkpCi0gICAgICAgIHByaW50KGRhdGV0aW1lLmZyb210aW1l
c3RhbXAoY29tbWl0LnRpbWVzdGFtcCkuc3RyZnRpbWUoJ0RhdGU6ICVhICViICVkICVIOiVNOiVT
ICVZJykpCi0gICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDAgb3IgY29tbWl0LnJldmlzaW9uOgot
ICAgICAgICAgICAgcHJpbnQoJ1JldmlzaW9uOiB7fScuZm9ybWF0KGNvbW1pdC5yZXZpc2lvbiBv
ciAnTi9BJykpCi0gICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDAgb3IgY29tbWl0Lmhhc2g6Ci0g
ICAgICAgICAgICBwcmludCgnSGFzaDoge30nLmZvcm1hdChjb21taXQuaGFzaFs6Q29tbWl0LkhB
U0hfTEFCRUxfU0laRV0gaWYgY29tbWl0Lmhhc2ggZWxzZSAnTi9BJykpCi0KLSAgICAgICAgaWYg
YXJncy52ZXJib3NlID4gMDoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbW1pdC5tZXNzYWdl
LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICBwcmludCgnICAgIHt9Jy5mb3JtYXQobGlu
ZSkpCi0KLSAgICAgICAgcmV0dXJuIDAKLQotCi1jbGFzcyBDaGVja291dChDb21tYW5kKToKLSAg
ICBuYW1lID0gJ2NoZWNrb3V0JwotICAgIGhlbHAgPSAnR2l2ZW4gYW4gaWRlbnRpZmllciwgcmV2
aXNpb24gb3IgaGFzaCwgbm9ybWFsaXplIGFuZCBjaGVja291dCB0aGF0IGNvbW1pdCcKLQotICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIGxvZ2dlcnM9Tm9uZSk6
Ci0gICAgICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCi0gICAgICAgICAgICBwYXJzZXIsCi0g
ICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCi0gICAgICAgICAgICBoZWxwPSd7fSBhbW91bnQg
b2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRpc3BsYXllZCcKLSAgICAgICAgKQot
Ci0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAgICAgICAnYXJndW1lbnQnLCBu
YXJncz0xLAotICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAg
IGhlbHA9J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1pdCBvciBicmFuY2ggdG8gYmUg
bm9ybWFsaXplZCcsCi0gICAgICAgICkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtYWlu
KGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgotICAgICAgICBpZiBub3QgcmVwb3Np
dG9yeS5wYXRoOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IGNoZWNrb3V0
IG9uIHJlbW90ZSByZXBvc2l0b3J5IikKLSAgICAgICAgICAgIHJldHVybiAxCi0KLSAgICAgICAg
dHJ5OgotICAgICAgICAgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5jaGVja291dChhcmdzLmFyZ3Vt
ZW50WzBdKQotICAgICAgICBleGNlcHQgKGxvY2FsLlNjbS5FeGNlcHRpb24sIFZhbHVlRXJyb3Ip
IGFzIGV4Y2VwdGlvbjoKLSAgICAgICAgICAgICMgVmFsdWVFcnJvcnMgYW5kIFNjbSBleGNlcHRp
b25zIHVzdWFsbHkgY29udGFpbiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxheWVkCi0g
ICAgICAgICAgICAjIHRvIHRoZSB1c2VyIGFzIGFuIGVycm9yCi0gICAgICAgICAgICBzeXMuc3Rk
ZXJyLndyaXRlKHN0cihleGNlcHRpb24pICsgJ1xuJykKLSAgICAgICAgICAgIHJldHVybiAxCi0K
LSAgICAgICAgaWYgbm90IGNvbW1pdDoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZh
aWxlZCB0byBtYXAgJ3t9J1xuIi5mb3JtYXQoYXJncy5hcmd1bWVudFswXSkpCi0gICAgICAgICAg
ICByZXR1cm4gMQotICAgICAgICByZXR1cm4gMAotCi0KLWRlZiBtYWluKGFyZ3M9Tm9uZSwgcGF0
aD1Ob25lLCBsb2dnZXJzPU5vbmUsIGNvbnRyaWJ1dG9ycz1Ob25lLCBpZGVudGlmaWVyX3RlbXBs
YXRlPU5vbmUpOgotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5XQVJOSU5H
KQotCi0gICAgbG9nZ2VycyA9IFtsb2dnaW5nLmdldExvZ2dlcigpLCB3ZWJraXRjb3JlcHlfbG9n
LCAgbG9nXSArIChsb2dnZXJzIG9yIFtdKQotCi0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1l
bnRQYXJzZXIoCi0gICAgICAgIGRlc2NyaXB0aW9uPSdDdXN0b20gZ2l0IHRvb2xpbmcgZnJvbSB0
aGUgV2ViS2l0IHRlYW0gdG8gaW50ZXJhY3Qgd2l0aCBhICcgKwotICAgICAgICAgICAgICAgICAg
ICAncmVwb3NpdG9yeSB1c2luZyBpZGVudGlmZXJzJywKLSAgICApCi0gICAgYXJndW1lbnRzLkxv
Z2dpbmdHcm91cChwYXJzZXIpCi0KLSAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3Jv
dXAoJ1JlcG9zaXRvcnknKQotICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKLSAgICAgICAgJy0tcGF0
aCcsICctcCcsICctQycsCi0gICAgICAgIGRlc3Q9J3JlcG9zaXRvcnknLCBkZWZhdWx0PXBhdGgg
b3Igb3MuZ2V0Y3dkKCksCi0gICAgICAgIGhlbHA9J1NldCB0aGUgcmVwb3NpdG9yeSBwYXRoIG9y
IFVSTCB0byBiZSB1c2VkJywKLSAgICAgICAgYWN0aW9uPSdzdG9yZScsCi0gICAgKQotCi0gICAg
c3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdzdWItY29tbWFuZCBoZWxw
JykKLQotICAgIGZyb20gd2Via2l0c2NtcHkuY2Fub25pY2FsaXplIGltcG9ydCBDYW5vbmljYWxp
emUKLQotICAgIGZvciBwcm9ncmFtIGluIFtGaW5kLCBDaGVja291dCwgQ2Fub25pY2FsaXplXToK
LSAgICAgICAgc3VicGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKHByb2dyYW0ubmFtZSwg
aGVscD1wcm9ncmFtLmhlbHApCi0gICAgICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMobWFpbj1w
cm9ncmFtLm1haW4pCi0gICAgICAgIHByb2dyYW0ucGFyc2VyKHN1YnBhcnNlciwgbG9nZ2Vycz1s
b2dnZXJzKQotCi0gICAgcGFyc2VkID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1hcmdzKQotCi0g
ICAgaWYgcGFyc2VkLnJlcG9zaXRvcnkuc3RhcnRzd2l0aCgoJ2h0dHBzOi8vJywgJ2h0dHA6Ly8n
KSk6Ci0gICAgICAgIHJlcG9zaXRvcnkgPSByZW1vdGUuU2NtLmZyb21fdXJsKHBhcnNlZC5yZXBv
c2l0b3J5LCBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzKQotICAgIGVsc2U6Ci0gICAgICAgIHJl
cG9zaXRvcnkgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHBhdGg9cGFyc2VkLnJlcG9zaXRvcnksIGNv
bnRyaWJ1dG9ycz1jb250cmlidXRvcnMpCi0KLSAgICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1w
YXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSwgaWRlbnRpZmllcl90ZW1wbGF0ZT1pZGVudGlm
aWVyX3RlbXBsYXRlKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQko
cmV2aXNpb24gMjcxMjY3KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsy
Nyw4IEBAIGltcG9ydCByZQogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKIGZyb20gd2Vi
a2l0Y29yZXB5IGltcG9ydCBtb2NrcywgT3V0cHV0Q2FwdHVyZSwgU3RyaW5nSU8KIGZyb20gd2Vi
a2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBDb21taXQsIENvbnRyaWJ1dG9yCi1mcm9tIHdlYmtpdHNj
bXB5LmNhbm9uaWNhbGl6ZS5jb21taXR0ZXIgaW1wb3J0IG1haW4gYXMgY29tbWl0dGVyX21haW4K
LWZyb20gd2Via2l0c2NtcHkuY2Fub25pY2FsaXplLm1lc3NhZ2UgaW1wb3J0IG1haW4gYXMgbWVz
c2FnZV9tYWluCitmcm9tIHdlYmtpdHNjbXB5LnByb2dyYW0uY2Fub25pY2FsaXplLmNvbW1pdHRl
ciBpbXBvcnQgbWFpbiBhcyBjb21taXR0ZXJfbWFpbgorZnJvbSB3ZWJraXRzY21weS5wcm9ncmFt
LmNhbm9uaWNhbGl6ZS5tZXNzYWdlIGltcG9ydCBtYWluIGFzIG1lc3NhZ2VfbWFpbgogCiAKIGNs
YXNzIEdpdChtb2Nrcy5TdWJwcm9jZXNzKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0
IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgYXJndW1lbnRzLCBsb2cgYXMgd2Via2l0
Y29yZXB5X2xvZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIGxvZywgcmVtb3RlCisK
K2Zyb20gLmNhbm9uaWNhbGl6ZSBpbXBvcnQgQ2Fub25pY2FsaXplCitmcm9tIC5jb21tYW5kIGlt
cG9ydCBDb21tYW5kCitmcm9tIC5jaGVja291dCBpbXBvcnQgQ2hlY2tvdXQKK2Zyb20gLmZpbmQg
aW1wb3J0IEZpbmQKKworCitkZWYgbWFpbihhcmdzPU5vbmUsIHBhdGg9Tm9uZSwgbG9nZ2Vycz1O
b25lLCBjb250cmlidXRvcnM9Tm9uZSwgaWRlbnRpZmllcl90ZW1wbGF0ZT1Ob25lKToKKyAgICBs
b2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuV0FSTklORykKKworICAgIGxvZ2dlcnMg
PSBbbG9nZ2luZy5nZXRMb2dnZXIoKSwgd2Via2l0Y29yZXB5X2xvZywgIGxvZ10gKyAobG9nZ2Vy
cyBvciBbXSkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAg
ICBkZXNjcmlwdGlvbj0nQ3VzdG9tIGdpdCB0b29saW5nIGZyb20gdGhlIFdlYktpdCB0ZWFtIHRv
IGludGVyYWN0IHdpdGggYSAnICsKKyAgICAgICAgICAgICAgICAgICAgJ3JlcG9zaXRvcnkgdXNp
bmcgaWRlbnRpZmVycycsCisgICAgKQorICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAocGFyc2Vy
KQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdSZXBvc2l0b3J5JykK
KyAgICBncm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICctLXBhdGgnLCAnLXAnLCAnLUMnLAor
ICAgICAgICBkZXN0PSdyZXBvc2l0b3J5JywgZGVmYXVsdD1wYXRoIG9yIG9zLmdldGN3ZCgpLAor
ICAgICAgICBoZWxwPSdTZXQgdGhlIHJlcG9zaXRvcnkgcGF0aCBvciBVUkwgdG8gYmUgdXNlZCcs
CisgICAgICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICkKKworICAgIHN1YnBhcnNlcnMgPSBwYXJz
ZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nc3ViLWNvbW1hbmQgaGVscCcpCisKKyAgICBmb3IgcHJv
Z3JhbSBpbiBbRmluZCwgQ2hlY2tvdXQsIENhbm9uaWNhbGl6ZV06CisgICAgICAgIHN1YnBhcnNl
ciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcihwcm9ncmFtLm5hbWUsIGhlbHA9cHJvZ3JhbS5oZWxw
KQorICAgICAgICBzdWJwYXJzZXIuc2V0X2RlZmF1bHRzKG1haW49cHJvZ3JhbS5tYWluKQorICAg
ICAgICBwcm9ncmFtLnBhcnNlcihzdWJwYXJzZXIsIGxvZ2dlcnM9bG9nZ2VycykKKworICAgIHBh
cnNlZCA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9YXJncykKKworICAgIGlmIHBhcnNlZC5yZXBv
c2l0b3J5LnN0YXJ0c3dpdGgoKCdodHRwczovLycsICdodHRwOi8vJykpOgorICAgICAgICByZXBv
c2l0b3J5ID0gcmVtb3RlLlNjbS5mcm9tX3VybChwYXJzZWQucmVwb3NpdG9yeSwgY29udHJpYnV0
b3JzPWNvbnRyaWJ1dG9ycykKKyAgICBlbHNlOgorICAgICAgICByZXBvc2l0b3J5ID0gbG9jYWwu
U2NtLmZyb21fcGF0aChwYXRoPXBhcnNlZC5yZXBvc2l0b3J5LCBjb250cmlidXRvcnM9Y29udHJp
YnV0b3JzKQorCisgICAgcmV0dXJuIHBhcnNlZC5tYWluKGFyZ3M9cGFyc2VkLCByZXBvc2l0b3J5
PXJlcG9zaXRvcnksIGlkZW50aWZpZXJfdGVtcGxhdGU9aWRlbnRpZmllcl90ZW1wbGF0ZSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dy
YW0vY2hlY2tvdXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jaGVja291dC5weQkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFt
L2NoZWNrb3V0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwLCAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKKworZnJvbSAuY29t
bWFuZCBpbXBvcnQgQ29tbWFuZAorZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGFyZ3VtZW50cwor
ZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwKKworCitjbGFzcyBDaGVja291dChDb21tYW5k
KToKKyAgICBuYW1lID0gJ2NoZWNrb3V0JworICAgIGhlbHAgPSAnR2l2ZW4gYW4gaWRlbnRpZmll
ciwgcmV2aXNpb24gb3IgaGFzaCwgbm9ybWFsaXplIGFuZCBjaGVja291dCB0aGF0IGNvbW1pdCcK
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIGxvZ2dlcnM9
Tm9uZSk6CisgICAgICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCisgICAgICAgICAgICBwYXJz
ZXIsCisgICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCisgICAgICAgICAgICBoZWxwPSd7fSBh
bW91bnQgb2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRpc3BsYXllZCcKKyAgICAg
ICAgKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnYXJndW1l
bnQnLCBuYXJncz0xLAorICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAg
ICAgICAgIGhlbHA9J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1pdCBvciBicmFuY2gg
dG8gYmUgbm9ybWFsaXplZCcsCisgICAgICAgICkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgorICAgICAgICBpZiBub3Qg
cmVwb3NpdG9yeS5wYXRoOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IGNo
ZWNrb3V0IG9uIHJlbW90ZSByZXBvc2l0b3J5IikKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5jaGVja291dChhcmdz
LmFyZ3VtZW50WzBdKQorICAgICAgICBleGNlcHQgKGxvY2FsLlNjbS5FeGNlcHRpb24sIFZhbHVl
RXJyb3IpIGFzIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICMgVmFsdWVFcnJvcnMgYW5kIFNjbSBl
eGNlcHRpb25zIHVzdWFsbHkgY29udGFpbiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxh
eWVkCisgICAgICAgICAgICAjIHRvIHRoZSB1c2VyIGFzIGFuIGVycm9yCisgICAgICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKHN0cihleGNlcHRpb24pICsgJ1xuJykKKyAgICAgICAgICAgIHJldHVy
biAxCisKKyAgICAgICAgaWYgbm90IGNvbW1pdDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkZhaWxlZCB0byBtYXAgJ3t9J1xuIi5mb3JtYXQoYXJncy5hcmd1bWVudFswXSkpCisgICAg
ICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gMApJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jb21tYW5kLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Byb2dyYW0vY29tbWFuZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IHN5cworCisKK2NsYXNzIENvbW1hbmQob2JqZWN0KToKKyAgICBu
YW1lID0gTm9uZQorICAgIGhlbHAgPSBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
cGFyc2VyKGNscywgcGFyc2VyKToKKyAgICAgICAgaWYgY2xzLm5hbWUgaXMgTm9uZToKKyAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0NvbW1hbmQgZG9lcyBub3QgaGF2ZSBh
IG5hbWUnKQorICAgICAgICBpZiBjbHMuaGVscCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcigiJ3t9JyBkb2VzIG5vdCBoYXZlIGEgaGVscCBtZXNzYWdlIikK
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwg
Kiprd2FyZ3MpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdObyBjb21tYW5kIHNwZWNpZmll
ZFxuJykKKyAgICAgICAgcmV0dXJuIC0xCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9maW5k
LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Byb2dyYW0vZmluZC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IGpzb24KK2ltcG9ydCBzeXMKKworZnJvbSAuY29tbWFuZCBpbXBvcnQgQ29tbWFuZAorZnJvbSBk
YXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVu
dHMKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbW1pdCwgbG9jYWwKKworCitjbGFzcyBGaW5k
KENvbW1hbmQpOgorICAgIG5hbWUgPSAnZmluZCcKKyAgICBoZWxwID0gJ0dpdmVuIGFuIGlkZW50
aWZpZXIsIHJldmlzaW9uIG9yIGhhc2gsIG5vcm1hbGl6ZSBhbmQgcHJpbnQgdGhlIGNvbW1pdCcK
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIGxvZ2dlcnM9
Tm9uZSk6CisgICAgICAgIG91dHB1dF9hcmdzID0gYXJndW1lbnRzLkxvZ2dpbmdHcm91cCgKKyAg
ICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgIGxvZ2dlcnM9bG9nZ2VycywKKyAgICAgICAg
ICAgIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5nIGFuZCBjb21taXQgaW5mb3JtYXRpb24gZGlz
cGxheWVkJworICAgICAgICApCisgICAgICAgIG91dHB1dF9hcmdzLmFkZF9hcmd1bWVudCgKKyAg
ICAgICAgICAgICctLWpzb24nLCAnLWonLAorICAgICAgICAgICAgaGVscD0nQ29udmVydCB0aGUg
Y29tbWl0IHRvIGEgbWFjaGluZS1yZWFkYWJsZSBKU09OIG9iamVjdCcsCisgICAgICAgICAgICBh
Y3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgZGVzdD0nanNvbicsCisgICAgICAgICAg
ICBkZWZhdWx0PUZhbHNlLAorICAgICAgICApCisgICAgICAgIG91dHB1dF9hcmdzLmFkZF9hcmd1
bWVudCgKKyAgICAgICAgICAgICctLWxvZycsICctLW5vLWxvZycsCisgICAgICAgICAgICBoZWxw
PSdJbmNsdWRlIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIHJlcXVlc3RlZCBjb21taXQnLAor
ICAgICAgICAgICAgYWN0aW9uPWFyZ3VtZW50cy5Ob0FjdGlvbiwKKyAgICAgICAgICAgIGRlc3Q9
J2luY2x1ZGVfbG9nJywKKyAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgKQorCisg
ICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnYXJndW1lbnQnLCBuYXJn
cz0xLAorICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgIGhl
bHA9J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1pdCBvciBicmFuY2ggdG8gYmUgbm9y
bWFsaXplZCcsCisgICAgICAgICkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNs
cywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBjb21taXQgPSByZXBvc2l0b3J5LmZpbmQoYXJncy5hcmd1bWVudFswXSwgaW5jbHVkZV9sb2c9
YXJncy5pbmNsdWRlX2xvZykKKyAgICAgICAgZXhjZXB0IChsb2NhbC5TY20uRXhjZXB0aW9uLCBW
YWx1ZUVycm9yKSBhcyBleGNlcHRpb246CisgICAgICAgICAgICAjIFZhbHVlRXJyb3JzIGFuZCBT
Y20gZXhjZXB0aW9ucyB1c3VhbGx5IGNvbnRhaW4gZW5vdWdoIGluZm9ybWF0aW9uIHRvIGJlIGRp
c3BsYXllZAorICAgICAgICAgICAgIyB0byB0aGUgdXNlciBhcyBhbiBlcnJvcgorICAgICAgICAg
ICAgc3lzLnN0ZGVyci53cml0ZShzdHIoZXhjZXB0aW9uKSArICdcbicpCisgICAgICAgICAgICBy
ZXR1cm4gMQorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDAgYW5kIG5vdCBjb21taXQubWVz
c2FnZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBmaW5kIHRoZSAg
Y29tbWl0IG1lc3NhZ2UgZm9yICd7fSdcbiIuZm9ybWF0KGNvbW1pdCkpCisgICAgICAgICAgICBy
ZXR1cm4gMQorCisgICAgICAgIGlmIGFyZ3MuanNvbjoKKyAgICAgICAgICAgIHByaW50KGpzb24u
ZHVtcHMoY29tbWl0LCBjbHM9Q29tbWl0LkVuY29kZXIsIGluZGVudD00KSkKKyAgICAgICAgICAg
IHJldHVybiAwCisKKyAgICAgICAgaWYgYXJncy52ZXJib3NlIDwgMDoKKyAgICAgICAgICAgIHBy
aW50KCd7aWRlbnRpZmllcn0gfCB7aGFzaH17cmV2aXNpb259e3RpdGxlfScuZm9ybWF0KAorICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXI9Y29tbWl0LAorICAgICAgICAgICAgICAgIGhhc2g9Y29t
bWl0Lmhhc2hbOkNvbW1pdC5IQVNIX0xBQkVMX1NJWkVdIGlmIGNvbW1pdC5oYXNoIGVsc2UgJycs
CisgICAgICAgICAgICAgICAgcmV2aXNpb249J3t9cnt9Jy5mb3JtYXQoJywgJyBpZiBjb21taXQu
aGFzaCBlbHNlICcnLCBjb21taXQucmV2aXNpb24pIGlmIGNvbW1pdC5yZXZpc2lvbiBlbHNlICcn
LAorICAgICAgICAgICAgICAgIHRpdGxlPScgfCB7fScuZm9ybWF0KGNvbW1pdC5tZXNzYWdlLnNw
bGl0bGluZXMoKVswXSkgaWYgY29tbWl0Lm1lc3NhZ2UgZWxzZSAnJworICAgICAgICAgICAgKSkK
KyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgY29tbWl0Lm1lc3NhZ2U6CisgICAg
ICAgICAgICBwcmludCgnVGl0bGU6IHt9Jy5mb3JtYXQoY29tbWl0Lm1lc3NhZ2Uuc3BsaXRsaW5l
cygpWzBdKSkKKyAgICAgICAgcHJpbnQoJ0F1dGhvcjoge30nLmZvcm1hdChjb21taXQuYXV0aG9y
KSkKKyAgICAgICAgcHJpbnQoJ0lkZW50aWZpZXI6IHt9Jy5mb3JtYXQoY29tbWl0KSkKKyAgICAg
ICAgcHJpbnQoZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21taXQudGltZXN0YW1wKS5zdHJmdGlt
ZSgnRGF0ZTogJWEgJWIgJWQgJUg6JU06JVMgJVknKSkKKyAgICAgICAgaWYgYXJncy52ZXJib3Nl
ID4gMCBvciBjb21taXQucmV2aXNpb246CisgICAgICAgICAgICBwcmludCgnUmV2aXNpb246IHt9
Jy5mb3JtYXQoY29tbWl0LnJldmlzaW9uIG9yICdOL0EnKSkKKyAgICAgICAgaWYgYXJncy52ZXJi
b3NlID4gMCBvciBjb21taXQuaGFzaDoKKyAgICAgICAgICAgIHByaW50KCdIYXNoOiB7fScuZm9y
bWF0KGNvbW1pdC5oYXNoWzpDb21taXQuSEFTSF9MQUJFTF9TSVpFXSBpZiBjb21taXQuaGFzaCBl
bHNlICdOL0EnKSkKKworICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAwOgorICAgICAgICAgICAg
Zm9yIGxpbmUgaW4gY29tbWl0Lm1lc3NhZ2Uuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAg
IHByaW50KCcgICAge30nLmZvcm1hdChsaW5lKSkKKworICAgICAgICByZXR1cm4gMApJbmRleDog
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9j
YW5vbmljYWxpemUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jYW5vbmljYWxpemUvX19pbml0
X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jYW5vbmljYWxpemUvX19pbml0X18ucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQor
aW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0
IGFyZ3VtZW50cywgcnVuLCBzdHJpbmdfdXRpbHMKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxv
ZworZnJvbSAuLmNvbW1hbmQgaW1wb3J0IENvbW1hbmQKKworCitjbGFzcyBDYW5vbmljYWxpemUo
Q29tbWFuZCk6CisgICAgbmFtZSA9ICdjYW5vbmljYWxpemUnCisgICAgaGVscCA9ICdUYWtlIHRo
ZSBzZXQgb2YgY29tbWl0cyB3aGljaCBoYXZlIG5vdCB5ZXQgYmVlbiBwdXNoZWQgYW5kIGVkaXQg
aGlzdG9yeSB0byBub3JtYWxpemUgdGhlICcgK1wKKyAgICAgICAgICAgJ2NvbW1pdHRlcnMgd2l0
aCBleGlzdGluZyBjb250cmlidXRvciBtYXBwaW5nIGFuZCBhZGQgaWRlbnRpZmllcnMgdG8gY29t
bWl0IG1lc3NhZ2VzJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlcihjbHMsIHBh
cnNlciwgbG9nZ2Vycz1Ob25lKToKKyAgICAgICAgb3V0cHV0X2FyZ3MgPSBhcmd1bWVudHMuTG9n
Z2luZ0dyb3VwKAorICAgICAgICAgICAgcGFyc2VyLAorICAgICAgICAgICAgbG9nZ2Vycz1sb2dn
ZXJzLAorICAgICAgICAgICAgaGVscD0ne30gYW1vdW50IG9mIGxvZ2dpbmcgYW5kIGBnaXQgcmVi
YXNlYCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQnCisgICAgICAgICkKKyAgICAgICAgb3V0cHV0X2Fy
Z3MuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJy0taWRlbnRpZmllcicsICctLW5vLWlkZW50
aWZpZXInLAorICAgICAgICAgICAgaGVscD0nQWRkIGluIHRoZSBpZGVudGlmaWVyIHRvIGNvbW1p
dCBtZXNzYWdlcywgdHJ1ZSBieSBkZWZhdWx0JywKKyAgICAgICAgICAgIGFjdGlvbj1hcmd1bWVu
dHMuTm9BY3Rpb24sCisgICAgICAgICAgICBkZXN0PSdpZGVudGlmaWVyJywKKyAgICAgICAgICAg
IGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgKQorICAgICAgICBvdXRwdXRfYXJncy5hZGRfYXJndW1l
bnQoCisgICAgICAgICAgICAnLS1yZW1vdGUnLAorICAgICAgICAgICAgaGVscD0nQ29tcGFyZSBh
Z2FpbnN0IGEgZGlmZmVyZW50IHJlbW90ZScsCisgICAgICAgICAgICBkZXN0PSdyZW1vdGUnLAor
ICAgICAgICAgICAgZGVmYXVsdD0nb3JpZ2luJywKKyAgICAgICAgKQorCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5LCBpZGVudGlmaWVyX3RlbXBs
YXRlPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IHJlcG9zaXRvcnkucGF0aDoKKyAg
ICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0Nhbm5vdCBjYW5vbmljYWxpemUgY29tbWl0cyBv
biBhIHJlbW90ZSByZXBvc2l0b3J5XG4nKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAg
aWYgbm90IHJlcG9zaXRvcnkuaXNfZ2l0OgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgn
Q29tbWl0cyBjYW4gb25seSBiZSBjYW5vbmljYWxpemVkIG9uIGEgR2l0IHJlcG9zaXRvcnlcbicp
CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGJyYW5jaCA9IHJlcG9zaXRvcnkuYnJh
bmNoCisgICAgICAgIGlmIG5vdCBicmFuY2g6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoXG4nKQorICAgICAgICAgICAgcmV0
dXJuIC0xCisgICAgICAgIHJlc3VsdCA9IHJ1bihbCisgICAgICAgICAgICByZXBvc2l0b3J5LmV4
ZWN1dGFibGUoKSwgJ3Jldi1saXN0JywKKyAgICAgICAgICAgICctLWNvdW50JywgJy0tbm8tbWVy
Z2VzJywKKyAgICAgICAgICAgICd7cmVtb3RlfS97YnJhbmNofS4ue2JyYW5jaH0nLmZvcm1hdChy
ZW1vdGU9YXJncy5yZW1vdGUsIGJyYW5jaD1icmFuY2gpLAorICAgICAgICBdLCBjYXB0dXJlX291
dHB1dD1UcnVlLCBjd2Q9cmVwb3NpdG9yeS5yb290X3BhdGgpCisgICAgICAgIGlmIHJlc3VsdC5y
ZXR1cm5jb2RlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnRmFpbGVkIHRvIGZpbmQg
bG9jYWwgY29tbWl0c1xuJykKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBkaWZmZXJl
bmNlID0gaW50KHJlc3VsdC5zdGRvdXQucnN0cmlwKCkpCisgICAgICAgIGlmIGRpZmZlcmVuY2Ug
PD0gMDoKKyAgICAgICAgICAgIHByaW50KCdObyBsb2NhbCBjb21taXRzIHRvIGJlIGVkaXRlZCcp
CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBsb2cud2FybmluZygne30gdG8gYmUgZWRp
dHRlZC4uLicuZm9ybWF0KHN0cmluZ191dGlscy5wbHVyYWxpemUoZGlmZmVyZW5jZSwgJ2NvbW1p
dCcpKSkKKworICAgICAgICBiYXNlID0gcmVwb3NpdG9yeS5maW5kKCd7fX57fScuZm9ybWF0KGJy
YW5jaCwgZGlmZmVyZW5jZSkpCisgICAgICAgIGxvZy5pbmZvKCdCYXNlIGNvbW1pdCBpcyB7fSAo
cmVmIHt9KScuZm9ybWF0KGJhc2UsIGJhc2UuaGFzaCkpCisKKyAgICAgICAgbG9nLmRlYnVnKCdT
YXZpbmcgY29udHJpYnV0b3JzIHRvIHRlbXAgZmlsZSB0byBiZSBwaWNrZWQgdXAgYnkgY2hpbGQg
cHJvY2Vzc2VzJykKKyAgICAgICAgY29udHJpYnV0b3JzID0gb3MucGF0aC5qb2luKHRlbXBmaWxl
LmdldHRlbXBkaXIoKSwgJ3t9LWNvbnRyaWJ1dG9ycy5qc29uJy5mb3JtYXQob3MuZ2V0cGlkKCkp
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oY29udHJpYnV0b3JzLCAndycp
IGFzIGZpbGU6CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5jb250cmlidXRvcnMuc2F2ZShm
aWxlKQorCisgICAgICAgICAgICBtZXNzYWdlX2ZpbHRlciA9IFsKKyAgICAgICAgICAgICAgICAn
LS1tc2ctZmlsdGVyJywKKyAgICAgICAgICAgICAgICAie30ge30gJ3t9JyIuZm9ybWF0KAorICAg
ICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgb3Mu
cGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdtZXNzYWdlLnB5JyksCisgICAg
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGUgb3IgJ0lkZW50aWZpZXI6IHt9JywK
KyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgXSBpZiBhcmdzLmlkZW50aWZpZXIgZWxz
ZSBbXQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgJ3cnKSBhcyBkZXZudWxs
OgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnkuZXhlY3V0YWJsZSgpLCAnZmlsdGVyLWJyYW5jaCcsICctZicsCisg
ICAgICAgICAgICAgICAgICAgICctLWVudi1maWx0ZXInLCAnJyd7b3ZlcndyaXRlX21lc3NhZ2V9
Citjb21taXR0ZXJPdXRwdXQ9JCh7cHl0aG9ufSB7Y29tbWl0dGVyX3B5fSB7Y29udHJpYnV0b3Jf
anNvbn0pCitLRVk9JycKK1ZBTFVFPScnCitmb3Igd29yZCBpbiAkY29tbWl0dGVyT3V0cHV0OyBk
bworICAgIGlmIFtbICR3b3JkID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICBpZiBbWyAkS0VZ
ID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICAgICAge3NldHRpbmdfbWVzc2FnZX0KKyAgICAg
ICAgICAgIHByaW50ZiAtdiAkS0VZICIke3tWQUxVRTo6JCgoJHt7I1ZBTFVFfX0gLSAxKSl9fSIK
KyAgICAgICAgICAgIEtFWT0nJworICAgICAgICAgICAgVkFMVUU9JycKKyAgICAgICAgZmkKKyAg
ICBmaQorICAgIGlmIFtbICIkS0VZIiA9PSAiIiBdXSA7IHRoZW4KKyAgICAgICAgS0VZPSIkd29y
ZCIKKyAgICBlbHNlCisgICAgICAgIFZBTFVFPSIkVkFMVUUkd29yZCAiCisgICAgZmkKK2RvbmUK
K2lmIFtbICRLRVkgPT0gR0lUXyogXV0gOyB0aGVuCisgICAge3NldHRpbmdfbWVzc2FnZX0KKyAg
ICBwcmludGYgLXYgJEtFWSAiJHt7VkFMVUU6OiQoKCR7eyNWQUxVRX19IC0gMSkpfX0iCitmaScn
Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGVfbWVzc2FnZT0nJyBp
ZiBsb2cubGV2ZWwgPiBsb2dnaW5nLklORk8gZWxzZSAnZWNobyAiT3ZlcndyaXRpbmcgJEdJVF9D
T01NSVQiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbj1zeXMuZXhlY3V0YWJsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlcl9weT1vcy5wYXRoLmpvaW4ob3MucGF0
aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2NvbW1pdHRlci5weScpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udHJpYnV0b3JfanNvbj1jb250cmlidXRvcnMsCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZXR0aW5nX21lc3NhZ2U9JycgaWYgbG9nLmxldmVsID4gbG9nZ2luZy5ERUJVRyBlbHNl
ICdlY2hvICIgICAgJEtFWT0kVkFMVUUiJywKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAg
ICAgICAgICAgICBdICsgbWVzc2FnZV9maWx0ZXIgKyBbJ3t9Li4ue30nLmZvcm1hdChicmFuY2gs
IGJhc2UuaGFzaCldLAorICAgICAgICAgICAgICAgICAgICBjd2Q9cmVwb3NpdG9yeS5yb290X3Bh
dGgsCisgICAgICAgICAgICAgICAgICAgIGVudj17J0ZJTFRFUl9CUkFOQ0hfU1FVRUxDSF9XQVJO
SU5HJzogJzEnLCAnUFlUSE9OUEFUSCc6ICc6Jy5qb2luKHN5cy5wYXRoKX0sCisgICAgICAgICAg
ICAgICAgICAgIHN0ZG91dD1kZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBl
bHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsIGlmIGxvZy5sZXZl
bCA+IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgKQorCisgICAg
ICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHN5
cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byBtb2RpZnkgbG9jYWwgY29tbWl0IG1lc3NhZ2VzXG4n
KQorICAgICAgICAgICAgcmV0dXJuIC0xCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IG9zLnJlbW92ZShjb250cmlidXRvcnMpCisKKyAgICAgICAgcHJpbnQoJ3t9IHN1Y2Nlc3NmdWxs
eSBjYW5vbmljYWxpemVkIScuZm9ybWF0KHN0cmluZ191dGlscy5wbHVyYWxpemUoZGlmZmVyZW5j
ZSwgJ2NvbW1pdCcpKSkKKworICAgICAgICByZXR1cm4gMApJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jYW5vbmljYWxpemUvY29t
bWl0dGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY2Fub25pY2FsaXplL2NvbW1pdHRlci5weQkobm9uZXhp
c3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9wcm9ncmFtL2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDIw
LCAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lz
CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBydW4KK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0
IENvbnRyaWJ1dG9yLCBsb2NhbAorCitFTUFJTF9SRSA9IHJlLmNvbXBpbGUocicoP1A8ZW1haWw+
W15AXStAW15AXSspKEAuKik/JykKKworCitkZWYgY2Fub25pY2FsaXplKG5hbWUsIGVtYWlsLCBj
b250cmlidXRvcnMpOgorICAgIG1hdGNoID0gRU1BSUxfUkUubWF0Y2goZW1haWwpCisgICAgaWYg
bWF0Y2g6CisgICAgICAgIGVtYWlsID0gbWF0Y2guZ3JvdXAoJ2VtYWlsJykKKworICAgIGNvbnRy
aWJ1dG9yID0gY29udHJpYnV0b3JzLmdldChlbWFpbCwgY29udHJpYnV0b3JzLmdldChlbWFpbC5s
b3dlcigpKSkKKyAgICBpZiBjb250cmlidXRvcjoKKyAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dG9y
Lm5hbWUsIGVtYWlsIGlmIG1hdGNoIGVsc2UgY29udHJpYnV0b3IuZW1haWwKKyAgICBjb250cmli
dXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQobmFtZSkKKyAgICBpZiBjb250cmlidXRvcjoKKyAgICAg
ICAgcmV0dXJuIGNvbnRyaWJ1dG9yLm5hbWUsIGNvbnRyaWJ1dG9yLmVtYWlsCisgICAgcmV0dXJu
IG5hbWUsIGVtYWlsCisKKworZGVmIG1haW4oY29udHJpYnV0b3JfZmlsZSk6CisgICAgUkVQT1NJ
VE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCisgICAgR0lUX0NPTU1JVCA9IG9z
LmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIHdpdGggb3Blbihjb250cmlidXRvcl9m
aWxlLCAncicpIGFzIGZpbGU6CisgICAgICAgIGNvbnRyaWJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1h
cHBpbmcubG9hZChmaWxlKQorCisgICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxp
emUoCisgICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQVVUSE9SX05BTUUnLCAnVW5rbm93bicp
LAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0FVVEhPUl9FTUFJTCcsICdudWxsJyksCisg
ICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICApCisgICAgY29tbWl0dGVyLCBjb21taXR0ZXJfZW1h
aWwgPSBjYW5vbmljYWxpemUoCisgICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUVEVS
X05BTUUnLCAnVW5rbm93bicpLAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVFRF
Ul9FTUFJTCcsICdudWxsJyksCisgICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICApCisKKyAgICAj
IEF0dGVtcHQgdG8gZXh0cmFjdCBwYXRjaC1ieQorICAgIGlmIGF1dGhvcl9lbWFpbCA9PSBjb21t
aXR0ZXJfZW1haWwgYW5kIFJFUE9TSVRPUllfUEFUSCBhbmQgR0lUX0NPTU1JVDoKKyAgICAgICAg
bG9nID0gcnVuKAorICAgICAgICAgICAgW2xvY2FsLkdpdC5leGVjdXRhYmxlKCksICdsb2cnLCBH
SVRfQ09NTUlULCAnLTEnXSwKKyAgICAgICAgICAgIGN3ZD1SRVBPU0lUT1JZX1BBVEgsIGNhcHR1
cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcsCisgICAgICAgICkKKworICAgICAgICBw
YXRjaF9ieSA9IHJlLnNlYXJjaCgKKyAgICAgICAgICAgIHInXHMrUGF0Y2ggYnkgKD9QPGF1dGhv
cj5bXjxdKykgXDwoP1A8ZW1haWw+W148XSspXD4uKiBvbiBcZCstXGQrLVxkKycsCisgICAgICAg
ICAgICBsb2cuc3Rkb3V0LAorICAgICAgICApCisgICAgICAgIGlmIHBhdGNoX2J5OgorICAgICAg
ICAgICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxpemUoCisgICAgICAgICAgICAg
ICAgcGF0Y2hfYnkuZ3JvdXAoJ2F1dGhvcicpLAorICAgICAgICAgICAgICAgIHBhdGNoX2J5Lmdy
b3VwKCdlbWFpbCcpLAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICAgICAgICAg
ICkKKworICAgIHByaW50KHUnR0lUX0FVVEhPUl9OQU1FIHt9Jy5mb3JtYXQoYXV0aG9yKSkKKyAg
ICBwcmludCh1J0dJVF9BVVRIT1JfRU1BSUwge30nLmZvcm1hdChhdXRob3JfZW1haWwpKQorICAg
IHByaW50KHUnR0lUX0NPTU1JVFRFUl9OQU1FIHt9Jy5mb3JtYXQoY29tbWl0dGVyKSkKKyAgICBw
cmludCh1J0dJVF9DT01NSVRURVJfRU1BSUwge30nLmZvcm1hdChjb21taXR0ZXJfZW1haWwpKQor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJn
dlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9wcm9ncmFtL2Nhbm9uaWNhbGl6ZS9tZXNzYWdlLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY2Fub25p
Y2FsaXplL21lc3NhZ2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jYW5vbmljYWxpemUvbWVzc2FnZS5w
eQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KworIyBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9z
CitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0c2NtcHkubG9jYWwgaW1wb3J0IEdpdAorCisKK2Rl
ZiBtYWluKGlucHV0ZmlsZSwgaWRlbnRpZmllcl90ZW1wbGF0ZSk6CisgICAgUkVQT1NJVE9SWV9Q
QVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCisgICAgR0lUX0NPTU1JVCA9IG9zLmVudmly
b24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIGlmIG5vdCBSRVBPU0lUT1JZX1BBVEg6CisgICAg
ICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byByZXRyaWV2ZSByZXBvc2l0b3J5IHBhdGhc
bicpCisgICAgICAgIHJldHVybiAtMQorICAgIGlmIG5vdCBHSVRfQ09NTUlUOgorICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0cmlldmUgZ2l0IGhhc2hcbicpCisgICAgICAg
IHJldHVybiAtMQorCisgICAgcmVwb3NpdG9yeSA9IEdpdChSRVBPU0lUT1JZX1BBVEgpCisgICAg
Y29tbWl0ID0gcmVwb3NpdG9yeS5jb21taXQoaGFzaD1HSVRfQ09NTUlUKQorICAgIGlmIG5vdCBj
b21taXQ6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBmaW5kICd7fScgaW4g
dGhlIHJlcG9zaXRvcnkiLmZvcm1hdChHSVRfQ09NTUlUKSkKKyAgICAgICAgcmV0dXJuIC0xCisg
ICAgaWYgbm90IGNvbW1pdC5pZGVudGlmaWVyIG9yIG5vdCBjb21taXQuYnJhbmNoOgorICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gY29tcHV0ZSB0aGUgaWRlbnRpZmllciBmb3Ig
J3t9JyIuZm9ybWF0KEdJVF9DT01NSVQpKQorICAgICAgICByZXR1cm4gLTEKKworICAgIGxpbmVz
ID0gW10KKyAgICBmb3IgbGluZSBpbiBpbnB1dGZpbGUucmVhZGxpbmVzKCk6CisgICAgICAgIGxp
bmVzLmFwcGVuZChsaW5lLnJzdHJpcCgpKQorCisgICAgaWRlbnRpZmllcl9pbmRleCA9IGxlbihs
aW5lcykKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCByZXBvc2l0b3J5LkdJVF9TVk5fUkVW
SVNJT04ubWF0Y2gobGluZXNbLTFdKToKKyAgICAgICAgaWRlbnRpZmllcl9pbmRleCAtPSAxCisK
KyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCBsaW5lc1tpZGVudGlmaWVyX2luZGV4IC0gMV0u
c3RhcnRzd2l0aChpZGVudGlmaWVyX3RlbXBsYXRlLmZvcm1hdCgnJykuc3BsaXQoJzonKVswXSk6
CisgICAgICAgIGxpbmVzW2lkZW50aWZpZXJfaW5kZXggLSAxXSA9IGlkZW50aWZpZXJfdGVtcGxh
dGUuZm9ybWF0KGNvbW1pdCkKKyAgICBlbHNlOgorICAgICAgICBsaW5lcy5pbnNlcnQoaWRlbnRp
Zmllcl9pbmRleCwgaWRlbnRpZmllcl90ZW1wbGF0ZS5mb3JtYXQoY29tbWl0KSkKKworICAgIGZv
ciBsaW5lIGluIGxpbmVzOgorICAgICAgICBwcmludChsaW5lKQorCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuc3RkaW4sIHN5cy5hcmd2WzFdKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>