<?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>58213</bug_id>
          
          <creation_ts>2011-04-10 21:32:49 -0700</creation_ts>
          <short_desc>Enable waf to be used to build other ports</short_desc>
          <delta_ts>2011-04-26 18:22:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin Ollivier">kevino</reporter>
          <assigned_to name="Kevin Ollivier">kevino</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>383022</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2011-04-10 21:32:49 -0700</bug_when>
    <thetext>waf is currently only used by wx, but most of the build system logic would work regardless of port, so it&apos;d be nice to make it easier for other ports to try waf out if they so choose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391645</commentid>
    <comment_count>1</comment_count>
      <attachid>90889</attachid>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2011-04-24 15:08:57 -0700</bug_when>
    <thetext>Created attachment 90889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391646</commentid>
    <comment_count>2</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2011-04-24 15:12:34 -0700</bug_when>
    <thetext>The patch above does two main things:

1) Moves Tools/wx/build to Tools/waf/build and puts waf in Tools/waf instead of Tools/wx. (90% of the patch, and the reason it&apos;s so large.)

2) Turns build_port define into a runtime option, so that you can pass --port=&quot;wx&quot; or any other to waf. To make this work, some port-specific logic that was calculated at load time needed to be moved into the configure and build methods. 

I&apos;ve tested that the wx port, which is the only port currently using this, builds correctly everywhere we support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393026</commentid>
    <comment_count>3</comment_count>
      <attachid>90889</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-26 16:34:24 -0700</bug_when>
    <thetext>Comment on attachment 90889
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393222</commentid>
    <comment_count>4</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2011-04-26 18:22:41 -0700</bug_when>
    <thetext>Landed in r84994, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90889</attachid>
            <date>2011-04-24 15:08:57 -0700</date>
            <delta_ts>2011-04-26 16:34:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58213-20110424150856.patch</filename>
            <type>text/plain</type>
            <size>52244</size>
            <attacher name="Kevin Ollivier">kevino</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDg0NzYx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDQt
MjQgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHdhZiB0byBiZSB1
c2VkIHRvIGJ1aWxkIG90aGVyIHBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01ODIxMworCisgICAgICAgICogd3NjcmlwdDoKKwogMjAxMS0wNC0y
MiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg0NjI3LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA4NDc1OCkKKysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDk4ICsyOSwxMSBAQCBpbXBvcnQgT3B0aW9ucwogCiBmcm9tIHNldHRpbmdzIGltcG9y
dCAqCiAKLWlmIGJ1aWxkX3BvcnQgPT0gInd4IjoKLSAgICB3ZWJjb3JlX2RpcnMuZXh0ZW5kKFsn
U291cmNlL1dlYktpdC93eCcsICdTb3VyY2UvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQnXSkKLQot
d2tfaW5jbHVkZXMgPSBbJy4nLAotICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih3a19yb290
LCAnU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJyksCi0gICAgICAgICAgICAgICAgb3MucGF0aC5q
b2luKHdrX3Jvb3QsICdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnd3RmJywgJ3RleHQnKSwK
LSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4od2tfcm9vdCwgJ1NvdXJjZScsICdXZWJDb3Jl
JyksCi0gICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdrX3Jvb3QsICdTb3VyY2UnLCAnV2Vi
Q29yZScsICdEZXJpdmVkU291cmNlcycpLAotICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih3
a19yb290LCAnU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnaW1hZ2UtZGVjb2RlcnMn
KSwKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4od2tfcm9vdCwgJ1NvdXJjZScsICdXZWJD
b3JlJywgJ3BsYXRmb3JtJywgJ3dpbicpLAotICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih3
a19yb290LCAnU291cmNlJywgJ1dlYkNvcmUnLCAnd29ya2VycycpLAotICAgICAgICAgICAgICAg
IG9zLnBhdGguam9pbihvdXRwdXRfZGlyKSwKLSAgICAgICAgXQotCi1pZiBidWlsZF9wb3J0ID09
ICJ3eCI6Ci0gICAgd2tfaW5jbHVkZXMuYXBwZW5kKG9zLnBhdGguam9pbih3a19yb290LCAnU291
cmNlJywgJ1dlYktpdCcsICd3eCcpKQotICAgIHdrX2luY2x1ZGVzLmFwcGVuZChvcy5wYXRoLmpv
aW4od2tfcm9vdCwgJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ3d4JywgJ3d4Y29k
ZScpKQotCi1pZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6Ci0gICAgd2tfaW5jbHVk
ZXMuYXBwZW5kKG9zLnBhdGguam9pbih3a19yb290LCAnU291cmNlJywgJ1dlYkNvcmUnLCAncGxh
dGZvcm0nLCAnd2luJykpCi0gICAgd2tfaW5jbHVkZXMuYXBwZW5kKG9zLnBhdGguam9pbih3a19y
b290LCAnU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnd2luJykp
Ci0KLXdpbmRvd3NfZGVwcyA9IFsKLSAgICAgICAgICAgICAgICAnbGliL3B0aHJlYWRWQzIuZGxs
JywKLSAgICAgICAgICAgICAgICAnYmluL2ljdXVjNDAuZGxsJywgJ2Jpbi9pY3VkdDQwLmRsbCcs
ICdiaW4vaWN1aW40MC5kbGwnLAotICAgICAgICAgICAgICAgICdiaW4vbGliY3VybC5kbGwnLCAn
YmluL2xpYmVheTMyLmRsbCcsICdiaW4vc3NsZWF5MzIuZGxsJywgJ2Jpbi96bGliMS5kbGwnLAot
ICAgICAgICAgICAgICAgICdsaWIvc3FsaXRlMy5kbGwnLCAnYmluL2xpYnhtbDIuZGxsJywgJ2Jp
bi9saWJ4c2x0LmRsbCcsICdiaW4vaWNvbnYuZGxsJywKLSAgICAgICAgICAgICAgICBdCi0KLXdl
YmNvcmVfc291cmNlcyA9IHt9Ci0KLWlmIGJ1aWxkX3BvcnQgPT0gInd4IjoKLSAgICB3ZWJjb3Jl
X3NvdXJjZXNbJ3d4J10gPSBbCi0gICAgICAgICdTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAv
V2ViRE9NRXZlbnRUYXJnZXQuY3BwJywKLSAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tpbGxSaW5nTm9uZS5jcHAnLCAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAnU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJOb25lLmNwcCcKLSAgICBdICAK
LQotICAgIGlmIGJ1aWxkaW5nX29uX3dpbjMyOgotICAgICAgICAjIG1ha2Ugc3VyZSBwbGF0Zm9y
bS93eCBjb21lcyBhZnRlciB0aGlzIHNvIHdlIGdldCB0aGUgcmlnaHQKLSAgICAgICAgIyBGb250
UGxhdGZvcm1EYXRhLmgKLSAgICAgICAgd2ViY29yZV9kaXJzLmV4dGVuZChbJ1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93aW4nLCAnU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4n
XSkKLSAgICAgICAgd2ViY29yZV9zb3VyY2VzWyd3eC13aW4nXSA9IFsKLSAgICAgICAgICAgICAg
ICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyb1dpbi5jcHAnLAotICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAotICAgICAgICAgICAgICAg
J1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCi0gICAgICAg
ICAgICAgICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8g
ZWF0IGNyYXNoZXMgaW4gY2FsbGJhY2tzCi0gICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8g
dXNlIHRoZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlz
Ci0gICAgICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjgu
MTApLgotICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRU
aW1lcldpbi5jcHAnLAotICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuY3BwJywKLSAgICAgICAgICAgICAgICMgVXNlIHRoZSBX
aW5kb3dzIHBsdWdpbiBhcmNoaXRlY3R1cmUKLSAgICAgICAgICAgICAgICMnU291cmNlL1dlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YVdpbi5jcHAnLAotICAgICAgICAgICAgICAgJ1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCcsCi0gICAgICAgICAg
ICAgICAnU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bi5jcHAnLAotICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
blBhY2thZ2VXaW4uY3BwJywKLSAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmNwcCcsCi0gICAgICAgIF0KLSAgICBlbGlmIHN5cy5wbGF0Zm9y
bS5zdGFydHN3aXRoKCdkYXJ3aW4nKToKLSAgICAgICAgd2ViY29yZV9kaXJzLmFwcGVuZCgnU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMnKQotICAgICAgICB3ZWJjb3JlX2RpcnMuYXBwZW5kKCdT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbicpCi0gICAgICAgIHdl
YmNvcmVfZGlycy5hcHBlbmQoJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYycpCi0gICAgICAg
IHdlYmNvcmVfZGlycy5hcHBlbmQoJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjJykK
LSAgICAgICAgd2ViY29yZV9zb3VyY2VzWyd3eC1tYWMnXSA9IFsKLSAgICAgICAgICAgICAgICdT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCcsCi0gICAg
ICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4
dHJhcy5tbScsCi0gICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0nLAotICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcCcsCi0gICAgICAgICAgICAgICAn
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAnLAotICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5jcHAnLAotICAgICAgICAgICAgICAg
J1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXJBVFNVSS5jcHAnLAotICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAnLAotICAgICAgICAgICAgICAgJ1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUFUU1VJLm1t
JywKLSAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
U2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAnLAotICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9ybURhdGFXeE1hYy5tbScsCi0gICAg
ICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU2hhcGVBcmFiaWMu
YycsCi0gICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21h
Yy9jYXJib24vZm9udHByb3BzLm1tJywKLSAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcCcsCi0gICAgICAgICAgICAgICAnU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbScKLSAgICAgICAgXQotICAgIGVs
c2U6Ci0gICAgICAgIHdlYmNvcmVfc291cmNlc1snd3gtZ3RrJ10gPSBbCi0gICAgICAgICAgICAg
ICAnU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAnLAotICAgICAgICAg
ICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZU5vbmUuY3BwJwotICAg
ICAgICBdCi0gICAgICAgIHdlYmNvcmVfZGlycy5hcHBlbmQoJ1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3d4L3d4Y29kZS9ndGsnKQotICAgICAgICAKIGltcG9ydCBUYXNrR2VuCiBmcm9tIFRhc2tH
ZW4gaW1wb3J0IHRhc2tnZW4sIGZlYXR1cmUsIGFmdGVyCiBpbXBvcnQgVGFzaywgY2Nyb290CiAK
LWRlZiBnZW5lcmF0ZV93ZWJjb3JlX2Rlcml2ZWRfc291cmNlcygpOgorZGVmIGdlbmVyYXRlX3dl
YmNvcmVfZGVyaXZlZF9zb3VyY2VzKGNvbmYpOgogICAgICMgYnVpbGQgdGhlIGRlcml2ZWQgc291
cmNlcwogICAgIGRlcml2ZWRfc291cmNlc19kaXIgPSBvcy5wYXRoLmpvaW4od2ViY29yZV9kaXIs
ICdEZXJpdmVkU291cmNlcycpCiAgICAgd2NfZGlyID0gd2ViY29yZV9kaXIKQEAgLTEzNiwxMiAr
NDksMTIgQEAgZGVmIGdlbmVyYXRlX3dlYmNvcmVfZGVyaXZlZF9zb3VyY2VzKCk6CiAgICAgaWYg
YnVpbGRpbmdfb25fd2luMzI6CiAgICAgICAgIG9sZHBhdGggPSBvcy5lbnZpcm9uWyJQQVRIIl0K
ICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gIi91c3IvYmluIiArIG9zLnBhdGhzZXAgKyBv
cy5lbnZpcm9uWyJQQVRIIl0KLSAgICBvcy5zeXN0ZW0oJ21ha2UgLWYgJXMvRGVyaXZlZFNvdXJj
ZXMubWFrZSBXZWJDb3JlPSVzIFNPVVJDRV9ST09UPSVzIGFsbCBGRUFUVVJFX0RFRklORVM9IiVz
IicgJSAod2NfZGlyLCB3Y19kaXIsIHdjX2RpciwgJyAnLmpvaW4oZmVhdHVyZV9kZWZpbmVzKSkp
CisgICAgb3Muc3lzdGVtKCdtYWtlIC1mICVzL0Rlcml2ZWRTb3VyY2VzLm1ha2UgV2ViQ29yZT0l
cyBTT1VSQ0VfUk9PVD0lcyBhbGwgRkVBVFVSRV9ERUZJTkVTPSIlcyInICUgKHdjX2Rpciwgd2Nf
ZGlyLCB3Y19kaXIsIGNvbmYuZW52WyJGRUFUVVJFX0RFRklORVMiXSkpCiAgICAgaWYgYnVpbGRp
bmdfb25fd2luMzI6CiAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9IG9sZHBhdGgKICAgICBv
cy5jaGRpcihvbGRkaXIpCiAKLWRlZiBnZW5lcmF0ZV9qc2NvcmVfZGVyaXZlZF9zb3VyY2VzKCk6
CitkZWYgZ2VuZXJhdGVfanNjb3JlX2Rlcml2ZWRfc291cmNlcyhjb25mKToKICAgICAjIGJ1aWxk
IHRoZSBkZXJpdmVkIHNvdXJjZXMKICAgICBqc19kaXIgPSBqc2NvcmVfZGlyCiAgICAgaWYgYnVp
bGRpbmdfb25fd2luMzI6CkBAIC0xNTcsNyArNzAsNyBAQCBkZWYgZ2VuZXJhdGVfanNjb3JlX2Rl
cml2ZWRfc291cmNlcygpOgogICAgIGlmIGJ1aWxkaW5nX29uX3dpbjMyOgogICAgICAgICBvbGRw
YXRoID0gb3MuZW52aXJvblsiUEFUSCJdCiAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9ICIv
dXNyL2JpbiIgKyBvcy5wYXRoc2VwICsgb3MuZW52aXJvblsiUEFUSCJdCi0gICAgY29tbWFuZCA9
ICdtYWtlIC1mICVzL0Rlcml2ZWRTb3VyY2VzLm1ha2UgSmF2YVNjcmlwdENvcmU9JXMgQlVJTFRf
UFJPRFVDVFNfRElSPSVzIGFsbCBGRUFUVVJFX0RFRklORVM9IiVzIicgJSAoanNfZGlyLCBqc19k
aXIsIGpzX2RpciwgJyAnLmpvaW4oZmVhdHVyZV9kZWZpbmVzKSkKKyAgICBjb21tYW5kID0gJ21h
a2UgLWYgJXMvRGVyaXZlZFNvdXJjZXMubWFrZSBKYXZhU2NyaXB0Q29yZT0lcyBCVUlMVF9QUk9E
VUNUU19ESVI9JXMgYWxsIEZFQVRVUkVfREVGSU5FUz0iJXMiJyAlIChqc19kaXIsIGpzX2Rpciwg
anNfZGlyLCBjb25mLmVudlsiRkVBVFVSRV9ERUZJTkVTIl0pCiAgICAgb3Muc3lzdGVtKGNvbW1h
bmQpCiAgICAgaWYgYnVpbGRpbmdfb25fd2luMzI6CiAgICAgICAgIG9zLmVudmlyb25bIlBBVEgi
XSA9IG9sZHBhdGgKQEAgLTE2OCw5ICs4MSw5IEBAIGRlZiBzZXRfb3B0aW9ucyhvcHQpOgogCiBk
ZWYgY29uZmlndXJlKGNvbmYpOgogICAgIGNvbW1vbl9jb25maWd1cmUoY29uZikKLSAgICBnZW5l
cmF0ZV9qc2NvcmVfZGVyaXZlZF9zb3VyY2VzKCkKLSAgICBnZW5lcmF0ZV93ZWJjb3JlX2Rlcml2
ZWRfc291cmNlcygpCi0gICAgaWYgYnVpbGRfcG9ydCA9PSAid3giIGFuZCBzeXMucGxhdGZvcm0u
c3RhcnRzd2l0aCgnd2luJyk6CisgICAgZ2VuZXJhdGVfanNjb3JlX2Rlcml2ZWRfc291cmNlcyhj
b25mKQorICAgIGdlbmVyYXRlX3dlYmNvcmVfZGVyaXZlZF9zb3VyY2VzKGNvbmYpCisgICAgaWYg
T3B0aW9ucy5vcHRpb25zLnBvcnQgPT0gInd4IiBhbmQgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgo
J3dpbicpOgogICAgICAgICBncmFwaGljc19kaXIgPSBvcy5wYXRoLmpvaW4od2tfcm9vdCwgJ1Nv
dXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJykKICAgICAgICAgIyBIQUNL
IEFMRVJUOiBNU1ZDIGF1dG9tYXRpY2FsbHkgYWRkcyB0aGUgc291cmNlIGZpbGUncyBkaXJlY3Rv
cnkgYXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZQogICAgICAgICAjIHBhdGguIFVuZm9ydHVuYXRl
bHksIHRoYXQgbWVhbnMgd2hlbiBjb21waWxpbmcgdGhlc2UgZmlsZXMgd2Ugd2lsbCBlbmQgdXAg
aW5jbHVkaW5nCkBAIC0xODgsMTQgKzEwMSwxMDQgQEAgZGVmIGNvbmZpZ3VyZShjb25mKToKICAg
ICBmb3IgYXBpX2ZpbGUgaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihqc2NvcmVfZGlyLCAnQVBJ
LyouaCcpKToKICAgICAgICAgc2h1dGlsLmNvcHkoYXBpX2ZpbGUsIG9zLnBhdGguam9pbihqc2Nv
cmVfb3V0X2Rpciwgb3MucGF0aC5iYXNlbmFtZShhcGlfZmlsZSkpKQogCi0gICAgaWYgYnVpbGRf
cG9ydCA9PSAid3giIGFuZCBPcHRpb25zLm9wdGlvbnMud3hweXRob246CisgICAgaWYgT3B0aW9u
cy5vcHRpb25zLnBvcnQgPT0gInd4IiBhbmQgT3B0aW9ucy5vcHRpb25zLnd4cHl0aG9uOgogICAg
ICAgICBjb21tb25fY29uZmlndXJlKGNvbmYpCiAgICAgICAgIGNvbmYuY2hlY2tfdG9vbCgnc3dp
ZycsIHRvb2xkaXI9J1NvdXJjZS9XZWJLaXQvd3gvYmluZGluZ3MvcHl0aG9uJykKICAgICAgICAg
Y29uZi5jaGVja19zd2lnX3ZlcnNpb24oJzEuMy4yOScpCiAKLWRlZiBidWlsZChibGQpOiAgCitk
ZWYgYnVpbGQoYmxkKToKKworICAgIHdlYmNvcmVfZGlycyA9IGxpc3Qod2ViY29yZV9kaXJzX2Nv
bW1vbikKKworICAgIGlmIE9wdGlvbnMub3B0aW9ucy5wb3J0ID09ICJ3eCI6CisgICAgICAgIHdl
YmNvcmVfZGlycy5leHRlbmQoWydTb3VyY2UvV2ViS2l0L3d4JywgJ1NvdXJjZS9XZWJLaXQvd3gv
V2ViS2l0U3VwcG9ydCddKQorICAgIAorICAgIHdrX2luY2x1ZGVzID0gWycuJywKKyAgICAgICAg
ICAgICAgICAgICAgb3MucGF0aC5qb2luKHdrX3Jvb3QsICdTb3VyY2UnLCAnSmF2YVNjcmlwdENv
cmUnKSwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdrX3Jvb3QsICdTb3VyY2Un
LCAnSmF2YVNjcmlwdENvcmUnLCAnd3RmJywgJ3RleHQnKSwKKyAgICAgICAgICAgICAgICAgICAg
b3MucGF0aC5qb2luKHdrX3Jvb3QsICdTb3VyY2UnLCAnV2ViQ29yZScpLAorICAgICAgICAgICAg
ICAgICAgICBvcy5wYXRoLmpvaW4od2tfcm9vdCwgJ1NvdXJjZScsICdXZWJDb3JlJywgJ0Rlcml2
ZWRTb3VyY2VzJyksCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih3a19yb290LCAn
U291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnaW1hZ2UtZGVjb2RlcnMnKSwKKyAgICAg
ICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdrX3Jvb3QsICdTb3VyY2UnLCAnV2ViQ29yZScs
ICdwbGF0Zm9ybScsICd3aW4nKSwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdr
X3Jvb3QsICdTb3VyY2UnLCAnV2ViQ29yZScsICd3b3JrZXJzJyksCisgICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbihvdXRwdXRfZGlyKSwKKyAgICAgICAgICAgIF0KKyAgICAKKyAgICBp
ZiBPcHRpb25zLm9wdGlvbnMucG9ydCA9PSAid3giOgorICAgICAgICB3a19pbmNsdWRlcy5hcHBl
bmQob3MucGF0aC5qb2luKHdrX3Jvb3QsICdTb3VyY2UnLCAnV2ViS2l0JywgJ3d4JykpCisgICAg
ICAgIHdrX2luY2x1ZGVzLmFwcGVuZChvcy5wYXRoLmpvaW4od2tfcm9vdCwgJ1NvdXJjZScsICdX
ZWJDb3JlJywgJ3BsYXRmb3JtJywgJ3d4JywgJ3d4Y29kZScpKQorICAgIAorICAgIGlmIHN5cy5w
bGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKKyAgICAgICAgd2tfaW5jbHVkZXMuYXBwZW5kKG9z
LnBhdGguam9pbih3a19yb290LCAnU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnd2lu
JykpCisgICAgICAgIHdrX2luY2x1ZGVzLmFwcGVuZChvcy5wYXRoLmpvaW4od2tfcm9vdCwgJ1Nv
dXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ3dpbicpKQorICAgIAor
ICAgIHdpbmRvd3NfZGVwcyA9IFsKKyAgICAgICAgICAgICAgICAgICAgJ2xpYi9wdGhyZWFkVkMy
LmRsbCcsCisgICAgICAgICAgICAgICAgICAgICdiaW4vaWN1dWM0MC5kbGwnLCAnYmluL2ljdWR0
NDAuZGxsJywgJ2Jpbi9pY3VpbjQwLmRsbCcsCisgICAgICAgICAgICAgICAgICAgICdiaW4vbGli
Y3VybC5kbGwnLCAnYmluL2xpYmVheTMyLmRsbCcsICdiaW4vc3NsZWF5MzIuZGxsJywgJ2Jpbi96
bGliMS5kbGwnLAorICAgICAgICAgICAgICAgICAgICAnbGliL3NxbGl0ZTMuZGxsJywgJ2Jpbi9s
aWJ4bWwyLmRsbCcsICdiaW4vbGlieHNsdC5kbGwnLCAnYmluL2ljb252LmRsbCcsCisgICAgICAg
ICAgICAgICAgICAgIF0KKyAgICAKKyAgICB3ZWJjb3JlX3NvdXJjZXMgPSB7fQorICAgIAorICAg
IGlmIE9wdGlvbnMub3B0aW9ucy5wb3J0ID09ICJ3eCI6CisgICAgICAgIHdlYmNvcmVfc291cmNl
c1snd3gnXSA9IFsKKyAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2Vi
RE9NRXZlbnRUYXJnZXQuY3BwJywKKyAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9LaWxsUmluZ05vbmUuY3BwJywgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICdT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlck5vbmUuY3BwJworICAg
ICAgICBdICAKKyAgICAKKyAgICAgICAgaWYgYnVpbGRpbmdfb25fd2luMzI6CisgICAgICAgICAg
ICAjIG1ha2Ugc3VyZSBwbGF0Zm9ybS93eCBjb21lcyBhZnRlciB0aGlzIHNvIHdlIGdldCB0aGUg
cmlnaHQKKyAgICAgICAgICAgICMgRm9udFBsYXRmb3JtRGF0YS5oCisgICAgICAgICAgICB3ZWJj
b3JlX2RpcnMuZXh0ZW5kKFsnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dpbics
ICdTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbiddKQorICAgICAgICAgICAgd2ViY29yZV9zb3Vy
Y2VzWyd3eC13aW4nXSA9IFsKKyAgICAgICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwJywKKyAgICAg
ICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5z
Zm9ybWF0aW9uTWF0cml4V2luLmNwcCcsCisgICAgICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAgICAgICAg
IyB3eFRpbWVyIG9uIFdpbmRvd3MgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIGVhdCBjcmFz
aGVzIGluIGNhbGxiYWNrcworICAgICAgICAgICAgICAgICAgICMgc28gd2UgbmVlZCB0byB1c2Ug
dGhlIFdpbiBwb3J0J3MgaW1wbGVtZW50YXRpb24gdW50aWwgdGhlIHd4IGJ1ZyBmaXggaXMKKyAg
ICAgICAgICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjgu
MTApLgorICAgICAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hh
cmVkVGltZXJXaW4uY3BwJywKKyAgICAgICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5jcHAnLAorICAgICAgICAgICAgICAgICAg
ICMgVXNlIHRoZSBXaW5kb3dzIHBsdWdpbiBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAg
ICAjJ1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFXaW4uY3BwJywKKyAgICAg
ICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VX
aW4uY3BwJywKKyAgICAgICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAnLAorICAgICAgICAgICAgICAgICAgICdTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCcsCisgICAgICAgICAg
ICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwJywK
KyAgICAgICAgICAgIF0KKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnZGFy
d2luJyk6CisgICAgICAgICAgICB3ZWJjb3JlX2RpcnMuYXBwZW5kKCdTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL21hYycpCisgICAgICAgICAgICB3ZWJjb3JlX2RpcnMuYXBwZW5kKCdTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbicpCisgICAgICAgICAgICB3ZWJjb3Jl
X2RpcnMuYXBwZW5kKCdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMnKQorICAgICAgICAgICAg
d2ViY29yZV9kaXJzLmFwcGVuZCgnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMnKQor
ICAgICAgICAgICAgd2ViY29yZV9zb3VyY2VzWyd3eC1tYWMnXSA9IFsKKyAgICAgICAgICAgICAg
ICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1B1cmdlYWJsZUJ1ZmZlck1hYy5jcHAn
LAorICAgICAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29y
ZU5TU3RyaW5nRXh0cmFzLm1tJywKKyAgICAgICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0nLAorICAgICAgICAgICAgICAg
ICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5jcHAn
LAorICAgICAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAgICAgICAgJ1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3Jl
VGV4dC5jcHAnLAorICAgICAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQVRTVUkuY3BwJywKKyAgICAgICAgICAg
ICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRy
ZWVOb2RlTWFjLmNwcCcsCisgICAgICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUFUU1VJLm1tJywKKyAgICAgICAgICAgICAg
ICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
Q29yZVRleHQuY3BwJywKKyAgICAgICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRmb3JtRGF0YVd4TWFjLm1tJywKKyAgICAgICAgICAgICAg
ICAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU2hhcGVBcmFiaWMuYycsCisg
ICAgICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMv
Y2FyYm9uL2ZvbnRwcm9wcy5tbScsCisgICAgICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3BwJywKKyAgICAgICAgICAgICAgICAgICAn
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbScKKyAgICAgICAgICAg
IF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdlYmNvcmVfc291cmNlc1snd3gtZ3RrJ10g
PSBbCisgICAgICAgICAgICAgICAgICAgJ1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
d05vbmUuY3BwJywKKyAgICAgICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5QYWNrYWdlTm9uZS5jcHAnCisgICAgICAgICAgICBdCisgICAgICAgICAgICB3ZWJjb3Jl
X2RpcnMuYXBwZW5kKCdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvZ3RrJykKKyAg
ICAgICAgCisKICAgICBpbXBvcnQgVGFza0dlbgotICAgIGdsb2JhbCB3a19pbmNsdWRlcwogCiAg
ICAgIyBGSVhNRTogRG9lcyB0aGlzIG5lZWQgdG8gYmUgU291cmNlL0phdmFTY3JpcHRDb3JlPwog
ICAgIGJsZC5hZGRfc3ViZGlycygnU291cmNlL0phdmFTY3JpcHRDb3JlJykKQEAgLTIwNCwxMSAr
MjA3LDExIEBAIGRlZiBidWlsZChibGQpOiAgCiAgICAgICAgIFRhc2tHZW4udGFza19nZW4ubWFw
cGluZ3NbJy5tbSddID0gVGFza0dlbi50YXNrX2dlbi5tYXBwaW5nc1snLmN4eCddCiAgICAgICAg
IFRhc2tHZW4udGFza19nZW4ubWFwcGluZ3NbJy5tJ10gPSBUYXNrR2VuLnRhc2tfZ2VuLm1hcHBp
bmdzWycuY3h4J10KIAotICAgIGZlYXR1cmVzID0gW2J1aWxkX3BvcnRdCisgICAgZmVhdHVyZXMg
PSBbT3B0aW9ucy5vcHRpb25zLnBvcnQubG93ZXIoKV0KICAgICBleGNsdWRlX3BhdHRlcm5zID0g
WycqQWxsSW5PbmUuY3BwJywgJypCcmV3LmNwcCcsICcqQ0ZOZXQuY3BwJywgJypDaHJvbWl1bSou
Y3BwJywgCiAgICAgICAgICAgICAnKkVmbC5jcHAnLCAnKkd0ay5jcHAnLCAnKkhhaWt1LmNwcCcs
ICcqTWFjLmNwcCcsICcqTm9uZS5jcHAnLCAnKlF0LmNwcCcsICcqU2FmYXJpLmNwcCcsCiAgICAg
ICAgICAgICAndGVzdCpiaW5kaW5ncy4qJywgJypXaW5DRS5jcHAnLCAiV2ViRE9NQ2FudmFzKi5j
cHAiLCAiV2ViRE9NU1ZHKi5jcHAiXQotICAgIGlmIGJ1aWxkX3BvcnQgPT0gJ3d4JzoKKyAgICBp
ZiBPcHRpb25zLm9wdGlvbnMucG9ydCA9PSAnd3gnOgogICAgICAgICBmZWF0dXJlcy5hcHBlbmQo
J2N1cmwnKQogICAgICAgICBleGNsdWRlX3BhdHRlcm5zLmFwcGVuZCgnKldpbi5jcHAnKQogICAg
ICAgICAKQEAgLTI2MSw3ICsyNjQsNyBAQCBkZWYgYnVpbGQoYmxkKTogIAogICAgICAgICAKICAg
ICBleGNsdWRlcyA9IFtdCiAgICAgCi0gICAgaWYgYnVpbGRfcG9ydCA9PSAnd3gnOgorICAgIGlm
IE9wdGlvbnMub3B0aW9ucy5wb3J0ID09ICd3eCc6CiAgICAgICAgIGV4Y2x1ZGVzID0gZ2V0X2V4
Y2x1ZGVzKHdlYmNvcmVfZGlyLCBleGNsdWRlX3BhdHRlcm5zKQogICAgICAgICBleGNsdWRlcy5l
eHRlbmQoWydVc2VyU3R5bGVTaGVldExvYWRlci5jcHAnLCAnUmVuZGVyTWVkaWFDb250cm9scy5j
cHAnXSkKIApAQCAtMzQzLDUgKzM0Niw1IEBAIGRlZiBidWlsZChibGQpOiAgCiAKICAgICBibGQu
YWRkX2dyb3VwKCkKICAgICAKLSAgICBpZiBidWlsZF9wb3J0ID09ICJ3eCI6ICAgIAorICAgIGlm
IE9wdGlvbnMub3B0aW9ucy5wb3J0ID09ICJ3eCI6ICAgIAogICAgICAgICBibGQuYWRkX3N1YmRp
cnMoWydUb29scy9EdW1wUmVuZGVyVHJlZScsICdUb29scy93eC9icm93c2VyJywgJ1NvdXJjZS9X
ZWJLaXQvd3gvYmluZGluZ3MvcHl0aG9uJ10pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDg0NzYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDExLTA0LTI0ICBLZXZpbiBPbGxpdmllciAg
PGtldmlub0B0aGVvbGxpdmllcnMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEVuYWJsZSB3YWYgdG8gYmUgdXNlZCB0byBidWlsZCBvdGhlciBw
b3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgy
MTMKKworICAgICAgICAqIHdzY3JpcHQ6CisKIDIwMTEtMDQtMjMgIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBI
dW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dzY3JpcHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dzY3JpcHQJKHJldmlzaW9uIDg0NzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTI5LDI1ICsyOSwyNiBA
QCBpbXBvcnQgY29tbWFuZHMKIAogZnJvbSBzZXR0aW5ncyBpbXBvcnQgKgogCi1qc2NvcmVfZXhj
bHVkZXMgPSBbJ2pzYy5jcHAnLCAnUHJvZmlsZXJTZXJ2ZXIubW0nLCAnRXhlY3V0YWJsZUFsbG9j
YXRvclBvc2l4LmNwcCddCi1qc2NvcmVfZXhjbHVkZXMuZXh0ZW5kKGdldF9leGNsdWRlcyhqc2Nv
cmVfZGlyLCBbJypCcmV3LmNwcCcsICcqQ0YuY3BwJywgJypTeW1iaWFuLmNwcCddKSkKK2RlZiBi
dWlsZChibGQpOgogCi1zb3VyY2VzID0gW10KKyAgICBpbXBvcnQgT3B0aW9ucwogCi1qc2NvcmVf
ZXhjbHVkZXMuZXh0ZW5kKGdldF9leGNsdWRlcyhqc2NvcmVfZGlyLCBbJypOb25lLmNwcCddKSkK
KyAgICBqc2NvcmVfZXhjbHVkZXMgPSBbJ2pzYy5jcHAnLCAnUHJvZmlsZXJTZXJ2ZXIubW0nLCAn
RXhlY3V0YWJsZUFsbG9jYXRvclBvc2l4LmNwcCddCisgICAganNjb3JlX2V4Y2x1ZGVzLmV4dGVu
ZChnZXRfZXhjbHVkZXMoanNjb3JlX2RpciwgWycqQnJldy5jcHAnLCAnKkNGLmNwcCcsICcqU3lt
Ymlhbi5jcHAnXSkpCiAKLWlmIGJ1aWxkX3BvcnQgPT0gInd4IjoKLSAgICBpZiBidWlsZGluZ19v
bl93aW4zMjoKLSAgICAgICAganNjb3JlX2V4Y2x1ZGVzICs9IFsnTWFya1N0YWNrUG9zaXguY3Bw
JywgJ09TQWxsb2NhdG9yUG9zaXguY3BwJywgJ1RocmVhZGluZ1B0aHJlYWRzLmNwcCddCi0gICAg
ICAgIHNvdXJjZXMgKz0gWydoZWFwL01hcmtTdGFja1dpbi5jcHAnXQotICAgIGVsc2U6Ci0gICAg
ICAgIGpzY29yZV9leGNsdWRlcy5hcHBlbmQoJ0pTU3RyaW5nUmVmQlNUUi5jcHAnKQotICAgICAg
ICBqc2NvcmVfZXhjbHVkZXMuZXh0ZW5kKGdldF9leGNsdWRlcyhqc2NvcmVfZGlyLCBbJypXaW4u
Y3BwJ10pKQotICAgIAotZGVmIGJ1aWxkKGJsZCk6Ci0gICAgaW1wb3J0IE9wdGlvbnMKKyAgICBq
c2NvcmVfZXhjbHVkZXMuZXh0ZW5kKGdldF9leGNsdWRlcyhqc2NvcmVfZGlyLCBbJypOb25lLmNw
cCddKSkKKworICAgIHNvdXJjZXMgPSBbXQorCisgICAgaWYgT3B0aW9ucy5vcHRpb25zLnBvcnQg
PT0gInd4IjoKKyAgICAgICAgaWYgYnVpbGRpbmdfb25fd2luMzI6CisgICAgICAgICAgICBqc2Nv
cmVfZXhjbHVkZXMgKz0gWydNYXJrU3RhY2tQb3NpeC5jcHAnLCAnT1NBbGxvY2F0b3JQb3NpeC5j
cHAnLCAnVGhyZWFkaW5nUHRocmVhZHMuY3BwJ10KKyAgICAgICAgICAgIHNvdXJjZXMgKz0gWydo
ZWFwL01hcmtTdGFja1dpbi5jcHAnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAganNjb3Jl
X2V4Y2x1ZGVzLmFwcGVuZCgnSlNTdHJpbmdSZWZCU1RSLmNwcCcpCisgICAgICAgICAgICBqc2Nv
cmVfZXhjbHVkZXMuZXh0ZW5kKGdldF9leGNsdWRlcyhqc2NvcmVfZGlyLCBbJypXaW4uY3BwJ10p
KQogCi0gICAgZnVsbF9kaXJzID0gZ2V0X2RpcnNfZm9yX2ZlYXR1cmVzKGpzY29yZV9kaXIsIGZl
YXR1cmVzPVtidWlsZF9wb3J0XSwgZGlycz1qc2NvcmVfZGlycykKKyAgICBmdWxsX2RpcnMgPSBn
ZXRfZGlyc19mb3JfZmVhdHVyZXMoanNjb3JlX2RpciwgZmVhdHVyZXM9W09wdGlvbnMub3B0aW9u
cy5wb3J0Lmxvd2VyKCldLCBkaXJzPWpzY29yZV9kaXJzKQogCiAgICAgaW5jbHVkZXMgPSBjb21t
b25faW5jbHVkZXMgKyBmdWxsX2RpcnMKICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgn
ZGFyd2luJyk6CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA4NDc2MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTA0LTI0ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0
aGVvbGxpdmllcnMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEVuYWJsZSB3YWYgdG8gYmUgdXNlZCB0byBidWlsZCBvdGhlciBwb3J0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgyMTMKKworICAg
ICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0ZGly
cy5wbToKKyAgICAgICAgKiB3YWY6IEFkZGVkLgorICAgICAgICAqIHdhZi9idWlsZDogQWRkZWQu
CisgICAgICAgICogd2FmL2J1aWxkL2J1aWxkX3V0aWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3
YWYvYnVpbGQvc2V0dGluZ3MucHk6IEFkZGVkLgorICAgICAgICAqIHdhZi9idWlsZC93YWZfZXh0
ZW5zaW9ucy5weTogQWRkZWQuCisgICAgICAgICogd2FmL2J1aWxkL3d4cHJlc2V0cy5weTogQWRk
ZWQuCisKIDIwMTEtMDQtMjMgIERvbWluaWMgQ29vbmV5ICA8ZG9taW5pY2NAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0CShyZXZpc2lvbiA4NDc1OCkKKysrIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3Jr
aW5nIGNvcHkpCkBAIC01NDYsNiArNTQ2LDggQEAgaWYgKGlzSW5zcGVjdG9yRnJvbnRlbmQoKSkg
ewogfQogCiBpZiAoaXNXeCgpKSB7CisgICAgJG1ha2VBcmdzIC49ICIgLS1wb3J0PXd4IjsKKwog
ICAgIGRvd25sb2FkV2FmSWZOZWVkZWQoKTsKICAgICBAb3B0aW9ucyA9IHNwbGl0KC8gLywgJG1h
a2VBcmdzKTsKICAgICBAcHJvamVjdHMgPSAoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
ZGlycy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHJldmlz
aW9uIDg0NzU4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzIyLDcgKzEzMjIsNyBAQCBzdWIgYnVpbGRWaXN1YWxTdHVkaW9Qcm9qZWN0CiBzdWIg
ZG93bmxvYWRXYWZJZk5lZWRlZAogewogICAgICMgZ2V0IC8gdXBkYXRlIHdhZiBpZiBuZWVkZWQK
LSAgICBteSAkd2FmID0gIiRzb3VyY2VEaXIvVG9vbHMvd3gvd2FmIjsKKyAgICBteSAkd2FmID0g
IiRzb3VyY2VEaXIvVG9vbHMvd2FmL3dhZiI7CiAgICAgbXkgJHdhZlVSTCA9ICdodHRwOi8vd3h3
ZWJraXQua29zb2Z0d29ya3MuY29tL2Rvd25sb2Fkcy9kZXBzL3dhZic7CiAgICAgaWYgKCEtZiAk
d2FmKSB7CiAgICAgICAgIG15ICRyZXN1bHQgPSBzeXN0ZW0gImN1cmwgLW8gJHdhZiAkd2FmVVJM
IjsKQEAgLTEzNDAsNyArMTM0MCw3IEBAIHN1YiBidWlsZFdhZlByb2plY3QKICAgICAgICAgJHB5
dGhvblBhdGggPSAnJzsKICAgICB9CiAgICAgbXkgJHNvdXJjZURpciA9IHNvdXJjZURpcigpOwot
ICAgIG15ICRuZXdQeXRob25QYXRoID0gIiRzb3VyY2VEaXIvVG9vbHMvd3gvYnVpbGQ6JHB5dGhv
blBhdGgiOworICAgIG15ICRuZXdQeXRob25QYXRoID0gIiRzb3VyY2VEaXIvVG9vbHMvd2FmL2J1
aWxkOiRweXRob25QYXRoIjsKICAgICBpZiAoaXNDeWd3aW4oKSkgewogICAgICAgICAkbmV3UHl0
aG9uUGF0aCA9IGBjeWdwYXRoIC0tbWl4ZWQgLS1wYXRoICRuZXdQeXRob25QYXRoYDsKICAgICB9
CkBAIC0xMzQ4LDcgKzEzNDgsNyBAQCBzdWIgYnVpbGRXYWZQcm9qZWN0CiAgICAgCiAgICAgcHJp
bnQgIkJ1aWxkaW5nICRwcm9qZWN0XG4iOwogCi0gICAgbXkgJHdhZkNvbW1hbmQgPSAiJHNvdXJj
ZURpci9Ub29scy93eC93YWYiOworICAgIG15ICR3YWZDb21tYW5kID0gIiRzb3VyY2VEaXIvVG9v
bHMvd2FmL3dhZiI7CiAgICAgaWYgKCRFTlZ7J1dYV0VCS0lUX1dBRid9KSB7CiAgICAgICAgICR3
YWZDb21tYW5kID0gJEVOVnsnV1hXRUJLSVRfV0FGJ307CiAgICAgfQpJbmRleDogVG9vbHMvd2Fm
L2J1aWxkL2J1aWxkX3V0aWxzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3dhZi9idWlsZC9idWls
ZF91dGlscy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL3dhZi9idWlsZC9idWlsZF91dGlscy5w
eQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEtl
dmluIE9sbGl2aWVyICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisjIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisjIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyMgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorIworIyBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgV2ViS2l0IGJ1aWxk
LgorCitpbXBvcnQgY29tbWFuZHMKK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0
Zm9ybQoraW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdXJsbGli
CitpbXBvcnQgdXJscGFyc2UKKworCitkZWYgZ2V0X291dHB1dChjb21tYW5kKToKKyAgICAiIiIK
KyAgICBXaW5kb3dzLWNvbXBhdGlibGUgZnVuY3Rpb24gZm9yIGdldHRpbmcgb3V0cHV0IGZyb20g
YSBjb21tYW5kLgorICAgICIiIgorICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4n
KToKKyAgICAgICAgZiA9IG9zLnBvcGVuKGNvbW1hbmQpCisgICAgICAgIHJldHVybiBmLnJlYWQo
KS5zdHJpcCgpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGNvbW1hbmRzLmdldG91dHB1dChj
b21tYW5kKQorCisKK2RlZiBnZXRfZXhjbHVkZXMocm9vdCwgcGF0dGVybnMpOgorICAgICIiIgor
ICAgIEdldCBhIGxpc3Qgb2YgZXhjbHVkZSBwYXR0ZXJucyBnb2luZyBkb3duIHNldmVyYWwgZGly
cy4KKyAgICBUT0RPOiBNYWtlIHRoaXMgZnVsbHkgcmVjdXJzaXZlLgorICAgICIiIgorICAgIGV4
Y2x1ZGVzID0gW10KKworICAgIGZvciBwYXR0ZXJuIGluIHBhdHRlcm5zOgorICAgICAgICBzdWJk
aXJfcGF0dGVybiA9IG9zLnNlcCArICcqJworICAgICAgICBmb3Igc3ViZGlyIGluIFtzdWJkaXJf
cGF0dGVybiwgc3ViZGlyX3BhdHRlcm4gKiAyLCBzdWJkaXJfcGF0dGVybiAqIDNdOgorICAgICAg
ICAgICAgYWRpciA9IHJvb3QgKyBzdWJkaXIgKyBvcy5zZXAgKyBwYXR0ZXJuCisgICAgICAgICAg
ICBmaWxlcyA9IGdsb2IuZ2xvYihhZGlyKQorICAgICAgICAgICAgZm9yIGFmaWxlIGluIGZpbGVz
OgorICAgICAgICAgICAgICAgIGV4Y2x1ZGVzLmFwcGVuZChvcy5wYXRoLmJhc2VuYW1lKGFmaWxl
KSkKKworICAgIHJldHVybiBleGNsdWRlcworCisKK2RlZiBnZXRfZGlyc19mb3JfZmVhdHVyZXMo
cm9vdCwgZmVhdHVyZXMsIGRpcnMpOgorICAgICIiIgorICAgIEZpbmQgd2hpY2ggZGlyZWN0b3Jp
ZXMgdG8gaW5jbHVkZSBpbiB0aGUgbGlzdCBvZiBidWlsZCBkaXJzIGJhc2VkIHVwb24gdGhlCisg
ICAgZW5hYmxlZCBwb3J0KHMpIGFuZCBmZWF0dXJlcy4KKyAgICAiIiIKKyAgICBvdXRkaXJzID0g
ZGlycworICAgIGZvciBhZGlyIGluIGRpcnM6CisgICAgICAgIGZvciBmZWF0dXJlIGluIGZlYXR1
cmVzOgorICAgICAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbihhZGlyLCBmZWF0dXJlKQor
ICAgICAgICAgICAgZmVhdHVyZWRpciA9IG9zLnBhdGguam9pbihyb290LCByZWxwYXRoKQorICAg
ICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmVhdHVyZWRpcikgYW5kIG5vdCByZWxwYXRoIGlu
IG91dGRpcnM6CisgICAgICAgICAgICAgICAgb3V0ZGlycy5hcHBlbmQocmVscGF0aCkKKworICAg
IHJldHVybiBvdXRkaXJzCisKKworZGVmIGRvd25sb2FkX2lmX25ld2VyKHVybCwgZGVzdGRpcik6
CisgICAgIiIiCisgICAgQ2hlY2tzIGlmIHRoZSBmaWxlIG9uIHRoZSBzZXJ2ZXIgaXMgbmV3ZXIg
dGhhbiB0aGUgb25lIGluIHRoZSB1c2VyJ3MgdHJlZSwKKyAgICBhbmQgaWYgc28sIGRvd25sb2Fk
cyBpdC4KKworICAgIFJldHVybnMgdGhlIGZpbGVuYW1lIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUg
aWYgZG93bmxvYWRlZCwgb3IgTm9uZSBpZgorICAgIHRoZSBleGlzdGluZyBmaWxlIG1hdGNoZXMg
dGhlIG9uZSBvbiB0aGUgc2VydmVyLgorICAgICIiIgorICAgIG9iaiA9IHVybHBhcnNlLnVybHBh
cnNlKHVybCkKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob2JqLnBhdGgpCisgICAg
ZGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgZmlsZW5hbWUpCisKKyAgICB1cmxvYmog
PSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgc2l6ZSA9IGxvbmcodXJsb2JqLmluZm8oKS5nZXRo
ZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykpCisKKyAgICBkZWYgZG93bmxvYWRfY2FsbGJhY2soZG93
bmxvYWRlZCwgYmxvY2tfc2l6ZSwgdG90YWxfc2l6ZSk6CisgICAgICAgIGRvd25sb2FkZWQgPSBi
bG9ja19zaXplICogZG93bmxvYWRlZAorICAgICAgICBpZiBkb3dubG9hZGVkID4gdG90YWxfc2l6
ZToKKyAgICAgICAgICAgIGRvd25sb2FkZWQgPSB0b3RhbF9zaXplCisgICAgICAgIHN5cy5zdGRv
dXQud3JpdGUoJyVzICVkIG9mICVkIGJ5dGVzIGRvd25sb2FkZWRccicgJSAoZmlsZW5hbWUsIGRv
d25sb2FkZWQsIHRvdGFsX3NpemUpKQorCisgICAgIyBOQjogV2UgZG9uJ3QgY2hlY2sgbW9kaWZp
ZWQgdGltZSBhcyBQeXRob24gZG9lc24ndCB5ZXQgaGFuZGxlIHRpbWV6b25lIGNvbnZlcnNpb24K
KyAgICAjIHByb3Blcmx5IHdoZW4gY29udmVydGluZyBzdHJpbmdzIHRvIHRpbWUgb2JqZWN0cy4K
KyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdGZpbGUpIG9yIG9zLnBhdGguZ2V0c2l6ZShk
ZXN0ZmlsZSkgIT0gc2l6ZToKKyAgICAgICAgdXJsbGliLnVybHJldHJpZXZlKHVybCwgZGVzdGZp
bGUsIGRvd25sb2FkX2NhbGxiYWNrKQorICAgICAgICBwcmludCAnJworICAgICAgICByZXR1cm4g
ZGVzdGZpbGUKKworICAgIHJldHVybiBOb25lCisKKworZGVmIHVwZGF0ZV93eF9kZXBzKGNvbmYs
IHdrX3Jvb3QsIG1zdmNfdmVyc2lvbj0nbXN2YzIwMDgnKToKKyAgICAiIiIKKyAgICBEb3dubG9h
ZCBhbmQgdXBkYXRlIHRvb2xzIG5lZWRlZCB0byBidWlsZCB0aGUgd3ggcG9ydC4KKyAgICAiIiIK
KyAgICBpbXBvcnQgTG9ncworICAgIExvZ3MuaW5mbygnRW5zdXJpbmcgd3hXZWJLaXQgZGVwZW5k
ZW5jaWVzIGFyZSB1cC10by1kYXRlLicpCisKKyAgICB3a2xpYnNfZGlyID0gb3MucGF0aC5qb2lu
KHdrX3Jvb3QsICdXZWJLaXRMaWJyYXJpZXMnKQorICAgIHdhZiA9IGRvd25sb2FkX2lmX25ld2Vy
KCdodHRwOi8vd3h3ZWJraXQud3hjb21tdW5pdHkuY29tL2Rvd25sb2Fkcy9kZXBzL3dhZicsIG9z
LnBhdGguam9pbih3a19yb290LCAnVG9vbHMnLCAnd3gnKSkKKyAgICBpZiB3YWY6CisgICAgICAg
ICMgVE9ETzogTWFrZSB0aGUgYnVpbGQgcmVzdGFydCBpdHNlbGYgYWZ0ZXIgYW4gdXBkYXRlLgor
ICAgICAgICBMb2dzLndhcm4oJ0J1aWxkIHN5c3RlbSB1cGRhdGVkLCBwbGVhc2UgcmVzdGFydCBi
dWlsZC4nKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgIyBzaW5jZSB0aGlzIG1vZHVsZSBp
cyBzdGlsbCBleHBlcmltZW50YWwKKyAgICB3eHB5X2RpciA9IG9zLnBhdGguam9pbih3a19yb290
LCAnU291cmNlJywgJ1dlYktpdCcsICd3eCcsICdiaW5kaW5ncycsICdweXRob24nKQorICAgIHN3
aWdfbW9kdWxlID0gZG93bmxvYWRfaWZfbmV3ZXIoJ2h0dHA6Ly93eHdlYmtpdC53eGNvbW11bml0
eS5jb20vZG93bmxvYWRzL2RlcHMvc3dpZy5weS50eHQnLCB3eHB5X2RpcikKKyAgICBpZiBzd2ln
X21vZHVsZToKKyAgICAgICAgc2h1dGlsLmNvcHkob3MucGF0aC5qb2luKHd4cHlfZGlyLCAnc3dp
Zy5weS50eHQnKSwgb3MucGF0aC5qb2luKHd4cHlfZGlyLCAnc3dpZy5weScpKQorCisgICAgaWYg
c3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICBMb2dzLmluZm8oJ2Rvd25s
b2FkaW5nIGRlcHMgcGFja2FnZScpCisgICAgICAgIGFyY2hpdmUgPSBkb3dubG9hZF9pZl9uZXdl
cignaHR0cDovL3d4d2Via2l0Lnd4Y29tbXVuaXR5LmNvbS9kb3dubG9hZHMvZGVwcy93eFdlYktp
dERlcHMtJXMuemlwJyAlIG1zdmNfdmVyc2lvbiwgd2tsaWJzX2RpcikKKyAgICAgICAgaWYgYXJj
aGl2ZSBhbmQgb3MucGF0aC5leGlzdHMoYXJjaGl2ZSk6CisgICAgICAgICAgICBvcy5zeXN0ZW0o
J3VuemlwIC1vICVzIC1kICVzJyAlIChhcmNoaXZlLCBvcy5wYXRoLmpvaW4od2tsaWJzX2Rpciwg
bXN2Y192ZXJzaW9uKSkpCisKKyAgICBlbGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdkYXJ3
aW4nKToKKyAgICAgICAgIyBleHBvcnQgdGhlIHJpZ2h0IGNvbXBpbGVyIGZvciBidWlsZGluZyB0
aGUgZGVwZW5kZW5jaWVzCisgICAgICAgIGlmIHBsYXRmb3JtLnJlbGVhc2UoKS5zdGFydHN3aXRo
KCcxMCcpOiAgIyBTbm93IExlb3BhcmQKKyAgICAgICAgICAgIG9zLmVudmlyb25bJ0NDJ10gPSBj
b25mLmVudlsnQ0MnXVswXQorICAgICAgICAgICAgb3MuZW52aXJvblsnQ1hYJ10gPSBjb25mLmVu
dlsnQ1hYJ11bMF0KKyAgICAgICAgb3Muc3lzdGVtKCclcy9Ub29scy93eC9pbnN0YWxsLXVuaXgt
ZXh0cmFzJyAlIHdrX3Jvb3QpCisKKworZGVmIGluY2x1ZGVEaXJzRm9yU291cmNlcyhzb3VyY2Vz
KToKKyAgICBpbmNsdWRlX2RpcnMgPSBbXQorICAgIGZvciBncm91cCBpbiBzb3VyY2VzOgorICAg
ICAgICBmb3Igc291cmNlIGluIGdyb3VwOgorICAgICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGgu
ZGlybmFtZShzb3VyY2UpCisgICAgICAgICAgICBpZiBub3QgZGlybmFtZSBpbiBpbmNsdWRlX2Rp
cnM6CisgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZChkaXJuYW1lKQorCisgICAg
cmV0dXJuIGluY2x1ZGVfZGlycworCisKK2RlZiBmbGF0dGVuU291cmNlcyhzb3VyY2VzKToKKyAg
ICBmbGF0X3NvdXJjZXMgPSBbXQorICAgIGZvciBncm91cCBpbiBzb3VyY2VzOgorICAgICAgICBm
bGF0X3NvdXJjZXMuZXh0ZW5kKGdyb3VwKQorCisgICAgcmV0dXJuIGZsYXRfc291cmNlcworCisK
K2RlZiBnaXRfYnJhbmNoX25hbWUoKToKKyAgICB0cnk6CisgICAgICAgIGJyYW5jaGVzID0gY29t
bWFuZHMuZ2V0b3V0cHV0KCJnaXQgYnJhbmNoIC0tbm8tY29sb3IiKQorICAgICAgICBtYXRjaCA9
IHJlLnNlYXJjaCgnXlwqICguKiknLCBicmFuY2hlcywgcmUuTVVMVElMSU5FKQorICAgICAgICBp
ZiBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiAiLiVzIiAlIG1hdGNoLmdyb3VwKDEpCisgICAg
ZXhjZXB0OgorICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gIiIKKworCitkZWYgZ2V0X2NvbmZp
Zyh3a19yb290KToKKyAgICBjb25maWdfZmlsZSA9IG9zLnBhdGguam9pbih3a19yb290LCAnV2Vi
S2l0QnVpbGQnLCAnQ29uZmlndXJhdGlvbicpCisgICAgY29uZmlnID0gJ0RlYnVnJworCisgICAg
aWYgb3MucGF0aC5leGlzdHMoY29uZmlnX2ZpbGUpOgorICAgICAgICBjb25maWcgPSBvcGVuKGNv
bmZpZ19maWxlKS5yZWFkKCkKKworICAgIHJldHVybiBjb25maWcKKworCitkZWYgZ2V0X2FyY2go
d2tfcm9vdCk6CisgICAgYXJjaF9maWxlID0gb3MucGF0aC5qb2luKHdrX3Jvb3QsICdXZWJLaXRC
dWlsZCcsICdBcmNoaXRlY3R1cmUnKQorICAgIGFyY2ggPSAneDg2XzY0JworCisgICAgaWYgb3Mu
cGF0aC5leGlzdHMoYXJjaF9maWxlKToKKyAgICAgICAgYXJjaCA9IG9wZW4oYXJjaF9maWxlKS5y
ZWFkKCkKKworICAgIHJldHVybiBhcmNoCisKKworZGVmIHN2bl9yZXZpc2lvbigpOgorICAgIGlm
IG9zLnN5c3RlbSgiZ2l0LXN2biBpbmZvIikgPT0gMDoKKyAgICAgICAgaW5mbyA9IGNvbW1hbmRz
LmdldG91dHB1dCgiZ2l0LXN2biBpbmZvIC4uLy4uIikKKyAgICBlbHNlOgorICAgICAgICBpbmZv
ID0gY29tbWFuZHMuZ2V0b3V0cHV0KCJzdm4gaW5mbyIpCisKKyAgICBmb3IgbGluZSBpbiBpbmZv
LnNwbGl0KCJcbiIpOgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlJldmlzaW9uOiAiKToK
KyAgICAgICAgICAgIHJldHVybiBsaW5lLnJlcGxhY2UoIlJldmlzaW9uOiAiLCAiIikuc3RyaXAo
KQorCisgICAgcmV0dXJuICIiCkluZGV4OiBUb29scy93YWYvYnVpbGQvc2V0dGluZ3MucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvd2FmL2J1aWxkL3NldHRpbmdzLnB5CShyZXZpc2lvbiAwKQorKysg
VG9vbHMvd2FmL2J1aWxkL3NldHRpbmdzLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyOSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgS2V2aW4gT2xsaXZpZXIgIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorIyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyMgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyMgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorIyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisjIENvbW1vbiBlbGVt
ZW50cyBvZiB0aGUgd2FmIGJ1aWxkIHN5c3RlbSBzaGFyZWQgYnkgYWxsIHByb2plY3RzLgorCitp
bXBvcnQgY29tbWFuZHMKK2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgcmUKK2lt
cG9ydCBzeXMKKworaW1wb3J0IE9wdGlvbnMKKworZnJvbSBidWlsZF91dGlscyBpbXBvcnQgKgor
ZnJvbSB3YWZfZXh0ZW5zaW9ucyBpbXBvcnQgKgorCisjIHRvIGJlIG1vdmVkIHRvIHd4IHdoZW4g
aXQgc3VwcG9ydHMgbW9yZSBjb25maWdzCitmcm9tIHd4cHJlc2V0cyBpbXBvcnQgKgorCit3a19y
b290ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxl
X18pLCAnLi4vLi4vLi4nKSkKKworaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgor
ICAgIGlmIG5vdCAnV1hXSU4nIGluIG9zLmVudmlyb246CisgICAgICAgIHByaW50ICJQbGVhc2Ug
c2V0IFdYV0lOIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB3eFdpZGdldHMuIgorICAgICAg
ICBzeXMuZXhpdCgxKQorCisgICAgd3hfcm9vdCA9IG9zLmVudmlyb25bJ1dYV0lOJ10KK2Vsc2U6
CisgICAgd3hfcm9vdCA9IGNvbW1hbmRzLmdldG91dHB1dCgnd3gtY29uZmlnIC0tcHJlZml4JykK
KworanNjb3JlX2RpciA9IG9zLnBhdGguam9pbih3a19yb290LCAnU291cmNlJywgJ0phdmFTY3Jp
cHRDb3JlJykKK3dlYmNvcmVfZGlyID0gb3MucGF0aC5qb2luKHdrX3Jvb3QsICdTb3VyY2UnLCAn
V2ViQ29yZScpCit3a2xpYnNfZGlyID0gb3MucGF0aC5qb2luKHdrX3Jvb3QsICdXZWJLaXRMaWJy
YXJpZXMnKQorCitjb21tb25fZGVmaW5lcyA9IFtdCitjb21tb25fY3h4ZmxhZ3MgPSBbXQorY29t
bW9uX2luY2x1ZGVzID0gW10KK2NvbW1vbl9saWJzID0gW10KK2NvbW1vbl9saWJwYXRocyA9IFtd
Citjb21tb25fZnJhbWV3b3JrcyA9IFtdCisKK3BvcnRzID0gWworICAgICdCcmV3JywKKyAgICAn
Q2hyb21pdW0nLAorICAgICdHdGsnLAorICAgICdIYWlrdScsCisgICAgJ01hYycsCisgICAgJ05v
bmUnLAorICAgICdRdCcsCisgICAgJ1NhZmFyaScsCisgICAgJ1dpbicsCisgICAgJ1dpbmNlJywK
KyAgICAnd3gnLAorXQorCitwb3J0X3VzZXMgPSB7CisgICAgJ3d4JzogWydDVVJMJywgJ1dYR0Mn
XSwKK30KKworanNjb3JlX2RpcnMgPSBbCisgICAgJ0FQSScsCisgICAgJ2J5dGVjb2RlJywKKyAg
ICAnYnl0ZWNvbXBpbGVyJywKKyAgICAnZGVidWdnZXInLAorICAgICdEZXJpdmVkU291cmNlcycs
CisgICAgJ2hlYXAnLAorICAgICdpbnRlcnByZXRlcicsCisgICAgJ2ppdCcsCisgICAgJ3BhcnNl
cicsCisgICAgJ3Byb2ZpbGVyJywKKyAgICAncnVudGltZScsCisgICAgJ3d0ZicsCisgICAgJ3d0
Zi90ZXh0JywKKyAgICAnd3RmL3VuaWNvZGUnLAorICAgICd3dGYvdW5pY29kZS9pY3UnLAorICAg
ICd5YXJyJywKK10KKword2ViY29yZV9kaXJzX2NvbW1vbiA9IFsKKyAgICAnU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eScsCisgICAgJ1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzJywKKyAgICAn
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwJywKKyAgICAnU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ2VuZXJpYycsCisgICAgJ1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzJywKKyAgICAnU291
cmNlL1dlYkNvcmUvYnJpZGdlJywKKyAgICAnU291cmNlL1dlYkNvcmUvYnJpZGdlL2MnLAorICAg
ICdTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjJywKKyAgICAnU291cmNlL1dlYkNvcmUvY3NzJywK
KyAgICAnU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMnLAorICAgICdTb3VyY2UvV2ViQ29y
ZS9kb20nLAorICAgICdTb3VyY2UvV2ViQ29yZS9kb20vZGVmYXVsdCcsCisgICAgJ1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcnLAorICAgICdTb3VyY2UvV2ViQ29yZS9maWxlYXBpJywKKyAgICAnU291
cmNlL1dlYkNvcmUvaGlzdG9yeScsCisgICAgJ1NvdXJjZS9XZWJDb3JlL2h0bWwnLAorICAgICdT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcycsCisgICAgJ1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyJywKKyAgICAnU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cnLAorICAgICdTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3InLAorICAgICdTb3VyY2UvV2ViQ29yZS9sb2FkZXInLAorICAgICdTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUnLAorICAgICdTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZScsCisgICAgJ1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZScsCisgICAgJ1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9pY29uJywKKyAgICAnU291cmNlL1dlYkNvcmUvbm90aWZpY2F0aW9u
cycsCisgICAgJ1NvdXJjZS9XZWJDb3JlL3BhZ2UnLAorICAgICdTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbicsCisgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtJywKKyAgICAnU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uJywKKyAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MnLAorICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzJywKKyAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcycs
CisgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzJywKKyAgICAnU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wJywKKyAgICAnU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmJywKKyAgICAnU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvJywKKyAgICAnU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZycsCisgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZycsCisgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3dlYnAnLAorICAgICdTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrJywKKyAgICAn
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yaycsCisgICAgJ1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbCcsCisgICAgJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQnLAorICAgICdT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXInLAorICAgICdTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zJywKKyAgICAnU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nJywKKyAgICAnU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlJywKKyAgICAnU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2ZycsCisgICAgJ1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UnLAorICAgICdTb3VyY2UvV2Vi
Q29yZS9zdmcnLAorICAgICdTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uJywKKyAgICAnU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzJywKKyAgICAnU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMnLAorICAgICdTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcycsCisgICAg
J1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMnLAorICAgICdTb3VyY2UvV2ViQ29yZS94bWwnLAor
XQorCitjb25maWcgPSBnZXRfY29uZmlnKHdrX3Jvb3QpCithcmNoID0gZ2V0X2FyY2god2tfcm9v
dCkKK2NvbmZpZ19kaXIgPSBjb25maWcgKyBnaXRfYnJhbmNoX25hbWUoKQorCitvdXRwdXRfZGly
ID0gb3MucGF0aC5qb2luKHdrX3Jvb3QsICdXZWJLaXRCdWlsZCcsIGNvbmZpZ19kaXIpCisKK2J1
aWxkaW5nX29uX3dpbjMyID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisKK2RlZmF1
bHRfcG9ydCA9ICdNYWMnCitpZiBidWlsZGluZ19vbl93aW4zMjoKKyAgICBkZWFmdWx0X3BvcnQg
PSAiV2luIgorCitidWlsZF9wb3J0ID0gZGVmYXVsdF9wb3J0CisKKworZGVmIGdldF9jb25maWco
KToKKyAgICB3YWZfY29uZmlnbmFtZSA9IGNvbmZpZy51cHBlcigpLnN0cmlwKCkKKyAgICBpZiBi
dWlsZGluZ19vbl93aW4zMjoKKyAgICAgICAgaXNSZWxlYXNlQ1JUID0gKGNvbmZpZyA9PSAnUmVs
ZWFzZScpCisgICAgICAgIGlmIGJ1aWxkX3BvcnQgPT0gJ3d4JzoKKyAgICAgICAgICAgIGlmIE9w
dGlvbnMub3B0aW9ucy53eHB5dGhvbjoKKyAgICAgICAgICAgICAgICBpc1JlbGVhc2VDUlQgPSBU
cnVlCisKKyAgICAgICAgaWYgaXNSZWxlYXNlQ1JUOgorICAgICAgICAgICAgd2FmX2NvbmZpZ25h
bWUgPSB3YWZfY29uZmlnbmFtZSArICcgQ1JUX01VTFRJVEhSRUFERURfRExMJworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgd2FmX2NvbmZpZ25hbWUgPSB3YWZfY29uZmlnbmFtZSArICcgQ1JU
X01VTFRJVEhSRUFERURfRExMX0RCRycKKworICAgIHJldHVybiB3YWZfY29uZmlnbmFtZQorCitj
cmVhdGVfaGFzaF90YWJsZSA9IHdrX3Jvb3QgKyAiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jcmVh
dGVfaGFzaF90YWJsZSIKK2lmIGJ1aWxkaW5nX29uX3dpbjMyOgorICAgIGNyZWF0ZV9oYXNoX3Rh
YmxlID0gZ2V0X291dHB1dCgnY3lncGF0aCAtLXVuaXggIiVzIicgJSBjcmVhdGVfaGFzaF90YWJs
ZSkKK29zLmVudmlyb25bJ0NSRUFURV9IQVNIX1RBQkxFJ10gPSBjcmVhdGVfaGFzaF90YWJsZQor
CitmZWF0dXJlX2RlZmluZXMgPSBbXQorCittc3ZjX3ZlcnNpb24gPSAnbXN2YzIwMDgnCisKK21z
dmNsaWJzX2RpciA9IG9zLnBhdGguam9pbih3a2xpYnNfZGlyLCBtc3ZjX3ZlcnNpb24sICd3aW4n
KQorCisKK2RlZiBnZXRfcGF0aF90b193eGNvbmZpZygpOgorICAgIGlmICdXWF9DT05GSUcnIGlu
IG9zLmVudmlyb246CisgICAgICAgIHJldHVybiBvcy5lbnZpcm9uWydXWF9DT05GSUcnXQorICAg
IGVsc2U6CisgICAgICAgIHJldHVybiAnd3gtY29uZmlnJworCisKK2RlZiBjb21tb25fc2V0X29w
dGlvbnMob3B0KToKKyAgICAiIiIKKyAgICBJbml0aWFsaXplIGNvbW1vbiBvcHRpb25zIHByb3Zp
ZGVkIHRvIHRoZSB1c2VyLgorICAgICIiIgorICAgIG9wdC50b29sX29wdGlvbnMoJ2NvbXBpbGVy
X2N4eCcpCisgICAgb3B0LnRvb2xfb3B0aW9ucygnY29tcGlsZXJfY2MnKQorICAgIG9wdC50b29s
X29wdGlvbnMoJ3B5dGhvbicpCisKKyAgICBvcHQuYWRkX29wdGlvbignLS1wb3J0JywgYWN0aW9u
PSdzdG9yZScsIGRlZmF1bHQ9ZGVmYXVsdF9wb3J0LCBoZWxwPSdXaGljaCBXZWJLaXQgcG9ydCB0
byBidWlsZC4nKQorICAgIG9wdC5hZGRfb3B0aW9uKCctLXd4cHl0aG9uJywgYWN0aW9uPSdzdG9y
ZV90cnVlJywgZGVmYXVsdD1GYWxzZSwgaGVscD0nQ3JlYXRlIHRoZSB3eFB5dGhvbiBiaW5kaW5n
cy4nKQorICAgIG9wdC5hZGRfb3B0aW9uKCctLXd4LWNvbXBpbGVyLXByZWZpeCcsIGFjdGlvbj0n
c3RvcmUnLCBkZWZhdWx0PSd2YycsCisgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmeSBh
IGRpZmZlcmVudCBjb21waWxlciBwcmVmaXggKGRvIHRoaXMgaWYgeW91IHVzZWQgQ09NUElMRVJf
UFJFRklYIHdoZW4gYnVpbGRpbmcgd3ggaXRzZWxmKScpCisgICAgb3B0LmFkZF9vcHRpb24oJy0t
bWFjb3N4LXZlcnNpb24nLCBhY3Rpb249J3N0b3JlJywgZGVmYXVsdD0nJywgaGVscD0iVmVyc2lv
biBvZiBPUyBYIHRvIGJ1aWxkIGZvci4iKQorICAgIG9wdC5hZGRfb3B0aW9uKCctLW1zdmMtdmVy
c2lvbicsIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PScnLCBoZWxwPSJNU1ZDIHZlcnNpb24gdG8g
dXNlIHRvIGJ1aWxkLiBVc2UgOCBmb3IgMjAwNSwgOSBmb3IgMjAwOCIpCisKKworZGVmIGNvbW1v
bl9jb25maWd1cmUoY29uZik6CisgICAgIiIiCisgICAgQ29uZmlndXJhdGlvbiB1c2VkIGJ5IGFs
bCB0YXJnZXRzLCBjYWxsZWQgZnJvbSB0aGUgdGFyZ2V0J3MgY29uZmlndXJlKCkgc3RlcC4KKyAg
ICAiIiIKKworICAgIGNvbmYuZW52WydNU1ZDX1RBUkdFVFMnXSA9IFsneDg2J10KKworICAgIGJ1
aWxkX3BvcnQgPSBPcHRpb25zLm9wdGlvbnMucG9ydAorCisgICAgZmVhdHVyZV9kZWZpbmVzID0g
WydFTkFCTEVfREFUQUJBU0UnLCAnRU5BQkxFX1hTTFQnLCAnRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVInLAorICAgICAgICAgICAgICAgICAgICAnRU5BQkxFX1NWRycsICdFTkFCTEVfU1ZHX1VT
RScsICdFTkFCTEVfRklMVEVSUycsICdFTkFCTEVfU1ZHX0ZPTlRTJywKKyAgICAgICAgICAgICAg
ICAgICAgJ0VOQUJMRV9TVkdfQU5JTUFUSU9OJywgJ0VOQUJMRV9TVkdfQVNfSU1BR0UnLCAnRU5B
QkxFX1NWR19GT1JFSUdOX09CSkVDVCcsCisgICAgICAgICAgICAgICAgICAgICdFTkFCTEVfSklU
JywgJ0VOQUJMRV9ET01fU1RPUkFHRScsICdCVUlMRElOR18lcycgJSBidWlsZF9wb3J0LnVwcGVy
KCldCisKKyAgICBjb25mLmVudlsiRkVBVFVSRV9ERUZJTkVTIl0gPSAnICcuam9pbihmZWF0dXJl
X2RlZmluZXMpCisKKyAgICBpZiBPcHRpb25zLm9wdGlvbnMubXN2Y192ZXJzaW9uIGFuZCBPcHRp
b25zLm9wdGlvbnMubXN2Y192ZXJzaW9uICE9ICcnOgorICAgICAgICBwcmludCAibXN2YyB2ZXJz
aW9uID0gJXMiICUgT3B0aW9ucy5vcHRpb25zLm1zdmNfdmVyc2lvbgorICAgICAgICBjb25mLmVu
dlsnTVNWQ19WRVJTSU9OUyddID0gWydtc3ZjICVzLjAnICUgT3B0aW9ucy5vcHRpb25zLm1zdmNf
dmVyc2lvbl0KKyAgICBlbHNlOgorICAgICAgICBwcmludCAibXN2YyBub3Qgc2V0ISIKKyAgICAg
ICAgY29uZi5lbnZbJ01TVkNfVkVSU0lPTlMnXSA9IFsnbXN2YyA5LjAnLCAnbXN2YyA4LjAnXQor
CisgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2N5Z3dpbicpOgorICAgICAgICBwcmlu
dCAiRVJST1I6IFlvdSBtdXN0IHVzZSB0aGUgV2luMzIgUHl0aG9uIGZyb20gcHl0aG9uLm9yZywg
bm90IEN5Z3dpbiBQeXRob24sIHdoZW4gYnVpbGRpbmcgb24gV2luZG93cy4iCisgICAgICAgIHN5
cy5leGl0KDEpCisKKyAgICBjb25mLmNoZWNrX3Rvb2woJ2NvbXBpbGVyX2N4eCcpCisgICAgY29u
Zi5jaGVja190b29sKCdjb21waWxlcl9jYycpCisKKyAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRz
d2l0aCgnZGFyd2luJyk6CisgICAgICAgIGNvbmYuY2hlY2tfdG9vbCgnb3N4JykKKworICAgIGds
b2JhbCBtc3ZjX3ZlcnNpb24KKyAgICBnbG9iYWwgbXN2Y2xpYnNfZGlyCisKKyAgICBsaWJwcmVm
aXggPSAnJworCisgICAgaWYgYnVpbGRpbmdfb25fd2luMzI6CisgICAgICAgIGxpYnByZWZpeCA9
ICdsaWInCisKKyAgICAgICAgZm91bmQgPSBjb25mLmdldF9tc3ZjX3ZlcnNpb25zKCkKKyAgICAg
ICAgZm91bmRfdmVyc2lvbnMgPSBbXQorICAgICAgICBmb3IgdmVyc2lvbiBpbiBmb3VuZDoKKyAg
ICAgICAgICAgIGZvdW5kX3ZlcnNpb25zLmFwcGVuZCh2ZXJzaW9uWzBdKQorCisgICAgICAgIGlm
ICdtc3ZjIDkuMCcgaW4gY29uZi5lbnZbJ01TVkNfVkVSU0lPTlMnXSBhbmQgJ21zdmMgOS4wJyBp
biBmb3VuZF92ZXJzaW9uczoKKyAgICAgICAgICAgIG1zdmNfdmVyc2lvbiA9ICdtc3ZjMjAwOCcK
KyAgICAgICAgZWxpZiAnbXN2YyA4LjAnIGluIGNvbmYuZW52WydNU1ZDX1ZFUlNJT05TJ10gYW5k
ICdtc3ZjIDguMCcgaW4gZm91bmRfdmVyc2lvbnM6CisgICAgICAgICAgICBtc3ZjX3ZlcnNpb24g
PSAnbXN2YzIwMDUnCisKKyAgICAgICAgbXN2Y2xpYnNfZGlyID0gb3MucGF0aC5qb2luKHdrbGli
c19kaXIsIG1zdmNfdmVyc2lvbiwgJ3dpbicpCisKKyAgICAgICAgIyBEaXNhYmxlIHNldmVyYWwg
d2FybmluZ3Mgd2hpY2ggb2NjdXIgbWFueSB0aW1lcyBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAg
ICAjIFNvbWUgb2YgdGhlbSBhcmUgaGFybWxlc3MgKDQwOTksIDQzNDQsIDQzOTYsIDQ4MDApIGFu
ZCB3b3JraW5nIGFyb3VuZAorICAgICAgICAjIHRoZW0gaW4gV2ViS2l0IGNvZGUgaXMgcHJvYmFi
bHkganVzdCBub3Qgd29ydGggaXQuIFdlIGNhbiBzaW1wbHkgZG8KKyAgICAgICAgIyBub3RoaW5n
IGFib3V0IHRoZSBvdGhlcnMgKDQ1MDMpLiBBIGNvdXBsZSBhcmUgcG9zc2libHkgdmFsaWQgYnV0
CisgICAgICAgICMgdGhlcmUgYXJlIGp1c3QgdG9vIG1hbnkgb2YgdGhlbSBpbiB0aGUgY29kZSBz
byBmaXhpbmcgdGhlbSBpcworICAgICAgICAjIGltcG9zc2libGUgaW4gcHJhY3RpY2UgYW5kIGp1
c3QgcmVzdWx0cyBpbiB0b25zIG9mIGRpc3RyYWN0aW5nIG91dHB1dAorICAgICAgICAjICg0MjQ0
LCA0MjkxKS4gRmluYWxseSA0OTk2IGlzIGFjdGl2ZWx5IGhhcm1mdWwgYXMgaXQgaXMgZ2l2ZW4g
Zm9yCisgICAgICAgICMganVzdCBhYm91dCBhbnkgdXNlIG9mIHN0YW5kYXJkIEMvQysrIGxpYnJh
cnkgZmFjaWxpdGllcy4KKyAgICAgICAgY29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdDWFhGTEFHUycs
IFsKKyAgICAgICAgICAgICcvd2Q0MDk5JywgICMgdHlwZSBuYW1lIGZpcnN0IHNlZW4gdXNpbmcg
J3N0cnVjdCcgbm93IHNlZW4gdXNpbmcgJ2NsYXNzJworICAgICAgICAgICAgJy93ZDQyNDQnLCAg
IyBjb252ZXJzaW9uIGZyb20gJ3h4eCcgdG8gJ3l5eScsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YToK
KyAgICAgICAgICAgICcvd2Q0MjkxJywgICMgbm8gbWF0Y2hpbmcgb3BlcmF0b3IgZGVsZXRlIGZv
dW5kIChmb3IgcGxhY2VtZW50IG5ldykKKyAgICAgICAgICAgICcvd2Q0MzQ0JywgICMgYmVoYXZp
b3VyIGNoYW5nZSBpbiB0ZW1wbGF0ZSBkZWR1Y3Rpb24KKyAgICAgICAgICAgICcvd2Q0Mzk2Jywg
ICMgaW5saW5lIGNhbid0IGJlIHVzZWQgaW4gZnJpZW5kIGRlY2xhcmF0aW9uCisgICAgICAgICAg
ICAnL3dkNDUwMycsICAjIGRlY29yYXRlZCBuYW1lIGxlbmd0aCBleGNlZWRlZCwgbmFtZSB3YXMg
dHJ1bmNhdGVkCisgICAgICAgICAgICAnL3dkNDgwMCcsICAjIGZvcmNpbmcgdmFsdWUgdG8gYm9v
bCAndHJ1ZScgb3IgJ2ZhbHNlJworICAgICAgICAgICAgJy93ZDQ5OTYnLCAgIyBkZXByZWNhdGVk
IGZ1bmN0aW9uCisgICAgICAgIF0pCisKKyAgICAgICAgIyBUaGlzIG9uZSBhbHNvIG9jY3VycyBp
biBDIGNvZGUsIHNvIGRpc2FibGUgaXQgdGhlcmUgYXMgd2VsbC4KKyAgICAgICAgY29uZi5lbnYu
YXBwZW5kX3ZhbHVlKCdDQ0ZMQUdTJywgWycvd2Q0OTk2J10pCisKKyAgICBpZiBidWlsZF9wb3J0
ID09ICJ3eCI6CisgICAgICAgIHVwZGF0ZV93eF9kZXBzKGNvbmYsIHdrX3Jvb3QsIG1zdmNfdmVy
c2lvbikKKworICAgICAgICBjb25mLmVudi5hcHBlbmRfdmFsdWUoJ0NYWERFRklORVMnLCBbJ0JV
SUxESU5HX1dYX189MScsICdKU19OT19FWFBPUlQnXSkKKworICAgICAgICBpZiBidWlsZGluZ19v
bl93aW4zMjoKKyAgICAgICAgICAgIGNvbmYuZW52LmFwcGVuZF92YWx1ZSgnTElCUEFUSCcsIG9z
LnBhdGguam9pbihtc3ZjbGlic19kaXIsICdsaWInKSkKKyAgICAgICAgICAgICMgd3ggc2V0dGlu
Z3MKKyAgICAgICAgICAgIGdsb2JhbCBjb25maWcKKyAgICAgICAgICAgIGlzX2RlYnVnID0gKGNv
bmZpZyA9PSAnRGVidWcnKQorICAgICAgICAgICAgd3hkZWZpbmVzLCB3eGluY2x1ZGVzLCB3eGxp
YnMsIHd4bGlicGF0aHMgPSBnZXRfd3htc3dfc2V0dGluZ3Mod3hfcm9vdCwgc2hhcmVkPVRydWUs
IHVuaWNvZGU9VHJ1ZSwgZGVidWc9aXNfZGVidWcsIHd4UHl0aG9uPU9wdGlvbnMub3B0aW9ucy53
eHB5dGhvbikKKyAgICAgICAgICAgIGNvbmYuZW52WydDWFhERUZJTkVTX1dYJ10gPSB3eGRlZmlu
ZXMKKyAgICAgICAgICAgIGNvbmYuZW52WydDUFBQQVRIX1dYJ10gPSB3eGluY2x1ZGVzCisgICAg
ICAgICAgICBjb25mLmVudlsnTElCX1dYJ10gPSB3eGxpYnMKKyAgICAgICAgICAgIGNvbmYuZW52
WydMSUJQQVRIX1dYJ10gPSB3eGxpYnBhdGhzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBj
b25mLmNoZWNrX2NmZyhwYXRoPWdldF9wYXRoX3RvX3d4Y29uZmlnKCksIGFyZ3M9Jy0tY3h4Zmxh
Z3MgLS1saWJzJywgcGFja2FnZT0nJywgdXNlbGliX3N0b3JlPSdXWCcsIG1hbmRhdG9yeT1UcnVl
KQorCisgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2RhcndpbicpOgorICAgICAgICBj
b25mLmVudlsnTElCX0lDVSddID0gWydpY3Vjb3JlJ10KKworICAgICAgICBjb25mLmVudi5hcHBl
bmRfdmFsdWUoJ0NQUFBBVEgnLCB3a2xpYnNfZGlyKQorICAgICAgICBjb25mLmVudi5hcHBlbmRf
dmFsdWUoJ0xJQlBBVEgnLCB3a2xpYnNfZGlyKQorCisgICAgICAgIG1pbl92ZXJzaW9uID0gTm9u
ZQorCisgICAgICAgIG1hY190YXJnZXQgPSAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJworICAg
ICAgICBpZiBPcHRpb25zLm9wdGlvbnMubWFjb3N4X3ZlcnNpb24gIT0gJyc6CisgICAgICAgICAg
ICBtaW5fdmVyc2lvbiA9IE9wdGlvbnMub3B0aW9ucy5tYWNvc3hfdmVyc2lvbgorCisgICAgICAg
ICMgV2ViS2l0IG9ubHkgc3VwcG9ydHMgMTAuNCssIGJ1dCBwcGMgc3lzdGVtcyBvZnRlbiBzZXQg
dGhpcyB0byBlYXJsaWVyIHN5c3RlbXMKKyAgICAgICAgaWYgbm90IG1pbl92ZXJzaW9uOgorICAg
ICAgICAgICAgbWluX3ZlcnNpb24gPSBjb21tYW5kcy5nZXRvdXRwdXQoJ3N3X3ZlcnMgLXByb2R1
Y3RWZXJzaW9uJylbOjRdCisgICAgICAgICAgICBpZiBtaW5fdmVyc2lvbiBpbiBbJzEwLjEnLCAn
MTAuMicsICcxMC4zJ106CisgICAgICAgICAgICAgICAgbWluX3ZlcnNpb24gPSAnMTAuNCcKKwor
ICAgICAgICBzZGtfdmVyc2lvbiA9IG1pbl92ZXJzaW9uCisgICAgICAgIGlmIG1pbl92ZXJzaW9u
ID09ICIxMC40IjoKKyAgICAgICAgICAgIHNka192ZXJzaW9uICs9ICJ1IgorICAgICAgICAgICAg
Y29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdMSUJfV0tJTlRFUkZBQ0UnLCBbJ1dlYktpdFN5c3RlbUlu
dGVyZmFjZVRpZ2VyJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE5PVEU6IFRoZXJl
IGlzIGEgV2ViS2l0U3lzdGVtSW50ZXJmYWNlU25vd0xlb3BhcmQsIGJ1dCB3aGVuIHdlIHVzZSB0
aGF0CisgICAgICAgICAgICAjIG9uIDEwLjYsIHdlIGdldCBhIHN0cmFuZ2UgbWlzc2luZyBzeW1i
b2wgZXJyb3IsIGFuZCB0aGlzIGxpYnJhcnkgc2VlbXMgdG8KKyAgICAgICAgICAgICMgd29yayBm
aW5lIGZvciB3eCdzIHB1cnBvc2VzLgorICAgICAgICAgICAgY29uZi5lbnYuYXBwZW5kX3ZhbHVl
KCdMSUJfV0tJTlRFUkZBQ0UnLCBbJ1dlYktpdFN5c3RlbUludGVyZmFjZUxlb3BhcmQnXSkKKwor
ICAgICAgICAjIG1hdGNoIFdlYktpdCBNYWMncyBkZWZhdWx0IGhlcmUgdW5sZXNzIHdlJ3JlIGJ1
aWxkaW5nIG9uIHBsYXRmb3JtcyB0aGF0IHdvbid0IHN1cHBvcnQgNjQtYml0LgorICAgICAgICBn
bG9iYWwgYXJjaAorICAgICAgICBpc19jb2NvYSA9ICJfX1dYT1NYX0NPQ09BX18iIGluIGNvbmYu
ZW52WyJDWFhERUZJTkVTX1dYIl0KKyAgICAgICAgaWYgbWluX3ZlcnNpb24gPT0gIjEwLjQiIG9y
IG5vdCBpc19jb2NvYToKKyAgICAgICAgICAgIGFyY2ggPSAiaTM4NiIKKworICAgICAgICBzZGty
b290ID0gJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1glcy5zZGsnICUgc2RrX3ZlcnNpb24KKyAgICAg
ICAgc2RrZmxhZ3MgPSBbJy1hcmNoJywgYXJjaCwgJy1pc3lzcm9vdCcsIHNka3Jvb3RdCisKKyAg
ICAgICAgY29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdDUFBGTEFHUycsIHNka2ZsYWdzKQorICAgICAg
ICBjb25mLmVudi5hcHBlbmRfdmFsdWUoJ0xJTktGTEFHUycsIHNka2ZsYWdzKQorCisgICAgICAg
IGNvbmYuZW52LmFwcGVuZF92YWx1ZSgnTElOS0ZMQUdTJywgWyctZnJhbWV3b3JrJywgJ1NlY3Vy
aXR5J10pCisKKyAgICAgICAgY29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdDUFBQQVRIX1NRTElURTMn
LCBbb3MucGF0aC5qb2luKHdrbGlic19kaXIsICdXZWJDb3JlU1FMaXRlMycpXSkKKyAgICAgICAg
Y29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdMSUJfU1FMSVRFMycsIFsnV2ViQ29yZVNRTGl0ZTMnXSkK
KworICAgICMgTk9URTogVGhlIG9yZGVyIGhlcmUgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHB5dGhv
biBzZXRzIHRoZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8KKyAgICAjIDEwLjMgZXZlbiBv
biBpbnRlbC4gU28gd2UgbXVzdCBmaXJzdCBzZXQgdGhlIFNESyBhbmQgYXJjaCBmbGFncywgdGhl
biBsb2FkIFB5dGhvbidzIGNvbmZpZywKKyAgICAjIGFuZCBmaW5hbGx5IG92ZXJyaWRlIHRoZSB2
YWx1ZSBQeXRob24gc2V0IGZvciBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKKyAgICBpZiBPcHRp
b25zLm9wdGlvbnMud3hweXRob246CisgICAgICAgIGNvbmYuY2hlY2tfdG9vbCgncHl0aG9uJykK
KyAgICAgICAgY29uZi5jaGVja19weXRob25faGVhZGVycygpCisKKyAgICBpZiBzeXMucGxhdGZv
cm0uc3RhcnRzd2l0aCgnZGFyd2luJyk6CisgICAgICAgIG9zLmVudmlyb25bbWFjX3RhcmdldF0g
PSBjb25mLmVudlttYWNfdGFyZ2V0XSA9IG1pbl92ZXJzaW9uCisKKyAgICBjb25mLmVudi5hcHBl
bmRfdmFsdWUoJ0NYWERFRklORVMnLCBmZWF0dXJlX2RlZmluZXMpCisgICAgaWYgY29uZmlnID09
ICdSZWxlYXNlJzoKKyAgICAgICAgY29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdDUFBERUZJTkVTJywg
J05ERUJVRycpCisKKyAgICBpZiBidWlsZGluZ19vbl93aW4zMjoKKyAgICAgICAgY29uZi5lbnYu
YXBwZW5kX3ZhbHVlKCdDUFBQQVRIJywgWworICAgICAgICAgICAgb3MucGF0aC5qb2luKGpzY29y
ZV9kaXIsICdvcy13aW4zMicpLAorICAgICAgICAgICAgb3MucGF0aC5qb2luKG1zdmNsaWJzX2Rp
ciwgJ2luY2x1ZGUnKSwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihtc3ZjbGlic19kaXIsICdp
bmNsdWRlJywgJ3B0aHJlYWRzJyksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4obXN2Y2xpYnNf
ZGlyLCAnbGliJyksCisgICAgICAgICAgICBdKQorCisgICAgICAgIGNvbmYuZW52LmFwcGVuZF92
YWx1ZSgnTElCJywgWydsaWJwbmcnLCAnbGlianBlZycsICdwdGhyZWFkVkMyJ10pCisgICAgICAg
ICMgY29tbW9uIHdpbiBsaWJzCisgICAgICAgIGNvbmYuZW52LmFwcGVuZF92YWx1ZSgnTElCJywg
WworICAgICAgICAgICAgJ2tlcm5lbDMyJywgJ3VzZXIzMicsICdnZGkzMicsICdjb21kbGczMics
ICd3aW5zcG9vbCcsICd3aW5tbScsCisgICAgICAgICAgICAnc2hlbGwzMicsICdzaGx3YXBpJywg
J2NvbWN0bDMyJywgJ29sZTMyJywgJ29sZWF1dDMyJywgJ3V1aWQnLCAnYWR2YXBpMzInLAorICAg
ICAgICAgICAgJ3dzb2NrMzInLCAnZ2RpcGx1cycsICd1c3AxMCcsICd2ZXJzaW9uJ10pCisKKyAg
ICAgICAgY29uZi5lbnZbJ0xJQl9JQ1UnXSA9IFsnaWN1ZHQnLCAnaWN1bGUnLCAnaWN1bHgnLCAn
aWN1dWMnLCAnaWN1aW4nLCAnaWN1aW8nLCAnaWN1dHUnXQorCisgICAgICAgICNjdXJsCisgICAg
ICAgIGNvbmYuZW52WydMSUJfQ1VSTCddID0gWydsaWJjdXJsJ10KKworICAgICAgICAjc3FsaXRl
MworICAgICAgICBjb25mLmVudlsnQ1BQUEFUSF9TUUxJVEUzJ10gPSBbb3MucGF0aC5qb2luKG1z
dmNsaWJzX2RpciwgJ2luY2x1ZGUnLCAnU1FMaXRlJyldCisgICAgICAgIGNvbmYuZW52WydMSUJf
U1FMSVRFMyddID0gWydzcWxpdGUzJ10KKworICAgICAgICAjbGlieG1sMgorICAgICAgICBjb25m
LmVudlsnTElCX1hNTCddID0gWydsaWJ4bWwyJ10KKworICAgICAgICAjbGlieHNsdAorICAgICAg
ICBjb25mLmVudlsnTElCX1hTTFQnXSA9IFsnbGlieHNsdCddCisgICAgZWxzZToKKyAgICAgICAg
aWYgYnVpbGRfcG9ydCA9PSAnd3gnOgorICAgICAgICAgICAgcG9ydF91c2VzWyd3eCddLmFwcGVu
ZCgnUFRIUkVBRFMnKQorICAgICAgICAgICAgY29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdMSUInLCBb
J2pwZWcnLCAncG5nJywgJ3B0aHJlYWQnXSkKKyAgICAgICAgICAgIGNvbmYuZW52LmFwcGVuZF92
YWx1ZSgnTElCUEFUSCcsIG9zLnBhdGguam9pbih3a2xpYnNfZGlyLCAndW5peCcsICdsaWInKSkK
KyAgICAgICAgICAgIGNvbmYuZW52LmFwcGVuZF92YWx1ZSgnQ1BQUEFUSCcsIG9zLnBhdGguam9p
bih3a2xpYnNfZGlyLCAndW5peCcsICdpbmNsdWRlJykpCisgICAgICAgICAgICBjb25mLmVudi5h
cHBlbmRfdmFsdWUoJ0NYWEZMQUdTJywgWyctZlBJQycsICctRFBJQyddKQorCisgICAgICAgIGNv
bmYuY2hlY2tfY2ZnKG1zZz0nQ2hlY2tpbmcgZm9yIGxpYnhzbHQnLCBwYXRoPSd4c2x0LWNvbmZp
ZycsIGFyZ3M9Jy0tY2ZsYWdzIC0tbGlicycsIHBhY2thZ2U9JycsIHVzZWxpYl9zdG9yZT0nWFNM
VCcsIG1hbmRhdG9yeT1UcnVlKQorICAgICAgICBjb25mLmNoZWNrX2NmZyhwYXRoPSd4bWwyLWNv
bmZpZycsIGFyZ3M9Jy0tY2ZsYWdzIC0tbGlicycsIHBhY2thZ2U9JycsIHVzZWxpYl9zdG9yZT0n
WE1MJywgbWFuZGF0b3J5PVRydWUpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRo
KCdkYXJ3aW4nKSBhbmQgbWluX3ZlcnNpb24gYW5kIG1pbl92ZXJzaW9uID09ICcxMC40JzoKKyAg
ICAgICAgICAgIGNvbmYuY2hlY2tfY2ZnKHBhdGg9b3MucGF0aC5qb2luKHdrbGlic19kaXIsICd1
bml4JywgJ2JpbicsICdjdXJsLWNvbmZpZycpLCBhcmdzPSctLWNmbGFncyAtLWxpYnMnLCBwYWNr
YWdlPScnLCB1c2VsaWJfc3RvcmU9J0NVUkwnLCBtYW5kYXRvcnk9VHJ1ZSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGNvbmYuY2hlY2tfY2ZnKHBhdGg9J2N1cmwtY29uZmlnJywgYXJncz0n
LS1jZmxhZ3MgLS1saWJzJywgcGFja2FnZT0nJywgdXNlbGliX3N0b3JlPSdDVVJMJywgbWFuZGF0
b3J5PVRydWUpCisKKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdkYXJ3
aW4nKToKKyAgICAgICAgICAgIGNvbmYuY2hlY2tfY2ZnKHBhY2thZ2U9J2NhaXJvJywgYXJncz0n
LS1jZmxhZ3MgLS1saWJzJywgdXNlbGliX3N0b3JlPSdXWCcsIG1hbmRhdG9yeT1UcnVlKQorICAg
ICAgICAgICAgY29uZi5jaGVja19jZmcocGFja2FnZT0ncGFuZ28nLCBhcmdzPSctLWNmbGFncyAt
LWxpYnMnLCB1c2VsaWJfc3RvcmU9J1dYJywgbWFuZGF0b3J5PVRydWUpCisgICAgICAgICAgICBj
b25mLmNoZWNrX2NmZyhwYWNrYWdlPSdndGsrLTIuMCcsIGFyZ3M9Jy0tY2ZsYWdzIC0tbGlicycs
IHVzZWxpYl9zdG9yZT0nV1gnLCBtYW5kYXRvcnk9VHJ1ZSkKKyAgICAgICAgICAgIGNvbmYuY2hl
Y2tfY2ZnKHBhY2thZ2U9J3NxbGl0ZTMnLCBhcmdzPSctLWNmbGFncyAtLWxpYnMnLCB1c2VsaWJf
c3RvcmU9J1NRTElURTMnLCBtYW5kYXRvcnk9VHJ1ZSkKKyAgICAgICAgICAgIGNvbmYuY2hlY2tf
Y2ZnKHBhdGg9J2ljdS1jb25maWcnLCBhcmdzPSctLWNmbGFncyAtLWxkZmxhZ3MnLCBwYWNrYWdl
PScnLCB1c2VsaWJfc3RvcmU9J0lDVScsIG1hbmRhdG9yeT1UcnVlKQorCisgICAgaWYgYnVpbGRf
cG9ydCBpbiBwb3J0X3VzZXM6CisgICAgICAgIGZvciB1c2UgaW4gcG9ydF91c2VzW2J1aWxkX3Bv
cnRdOgorICAgICAgICAgICAgY29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdDWFhERUZJTkVTJywgWydX
VEZfVVNFXyVzJyAlIHVzZV0pCkluZGV4OiBUb29scy93YWYvYnVpbGQvd2FmX2V4dGVuc2lvbnMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvd2FmL2J1aWxkL3dhZl9leHRlbnNpb25zLnB5CShyZXZp
c2lvbiAwKQorKysgVG9vbHMvd2FmL2J1aWxkL3dhZl9leHRlbnNpb25zLnB5CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgS2V2aW4gT2xsaXZpZXIg
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorIyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyMgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyMgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorIyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisjCisjIFRoaXMgbW9kdWxlIGlzIGZvciBjb2RlIHdoZXJlIHdlIG92ZXJyaWRlIHdhZidzIGRl
ZmF1bHQgYmVoYXZpb3Igb3IgZXh0ZW5kIHdhZgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9j
ZXNzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBVdGlscworCisKKyMgdmVyc2lvbiBvZiBleGVjX2Nv
bW1hbmQgdGhhdCBoYW5kbGVzIFdpbmRvd3MgY29tbWFuZCBsaW5lcyBsb25nZXIgdGhhbiAzMjAw
MCBjaGFycworZGVmIGV4ZWNfY29tbWFuZChzLCAqKmt3KToKKyAgICBmaWxlbmFtZSA9ICcnCisg
ICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpIGFuZCBsZW4oJyAnLmpvaW4ocykp
ID4gMzIwMDA6CisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICAoZmQsIGZpbGVuYW1l
KSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0ID0gW10KKyAgICAgICAgZm9yIGkgaW4g
czoKKyAgICAgICAgICAgIGlmIGkuZmluZCgiICIpICE9IC0xOgorICAgICAgICAgICAgICAgIGkg
PSAnIiVzIicgJSBpCisgICAgICAgICAgICB0LmFwcGVuZChpKQorCisgICAgICAgIHQxID0gdFsx
Ol0KKyAgICAgICAgIyBGaXggZm9yIExOSzExNzAgZXJyb3IKKyAgICAgICAgZmlsZW5hbWVfc3Ry
ID0gJ0AnICsgZmlsZW5hbWUKKyAgICAgICAgZmlsZW5hbWUyX3N0ciA9IE5vbmUKKyAgICAgICAg
aWYgbGVuKCcgJy5qb2luKHMpKSA+IDEzMTA3MDoKKyAgICAgICAgICAgIHQyID0gdFtsZW4odCkg
LyAyOl0KKyAgICAgICAgICAgIHQxID0gdFsxOmxlbih0KSAvIDJdCisgICAgICAgICAgICAoZmQy
LCBmaWxlbmFtZTIpID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgICAgICBvcy53cml0ZShm
ZDIsICcgJy5qb2luKHQyKSkKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMikKKyAgICAgICAgICAg
IGZpbGVuYW1lMl9zdHIgPSAnQCcgKyBmaWxlbmFtZTIKKyAgICAgICAgb3Mud3JpdGUoZmQsICcg
Jy5qb2luKHQxKSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICAgICAgcyA9IFtzWzBdXQor
ICAgICAgICBzLmFwcGVuZChmaWxlbmFtZV9zdHIpCisgICAgICAgIGlmIGZpbGVuYW1lMl9zdHI6
CisgICAgICAgICAgICBzLmFwcGVuZChmaWxlbmFtZTJfc3RyKQorCisgICAgaWYgJ2xvZycgaW4g
a3c6CisgICAgICAgIGt3WydzdGRvdXQnXSA9IGt3WydzdGRlcnInXSA9IGt3Wydsb2cnXQorICAg
ICAgICBkZWwoa3dbJ2xvZyddKQorICAgIGt3WydzaGVsbCddID0gaXNpbnN0YW5jZShzLCBzdHIp
CisKKyAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBvcy5w
YXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVuYW1l
KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICB0cnk6CisgICAgICAg
IHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKHMsICoqa3cpCisgICAgICAgIHJlc3VsdCA9IHByb2Mu
d2FpdCgpCisgICAgICAgIGNsZWFudXAoKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBl
eGNlcHQgT1NFcnJvcjoKKyAgICAgICAgY2xlYW51cCgpCisgICAgICAgIHJhaXNlCisKK1V0aWxz
LmV4ZWNfY29tbWFuZCA9IGV4ZWNfY29tbWFuZAorCisjIEJldHRlciBwZXJmb3JtaW5nIGhfZmls
ZSB0byBrZWVwIGhhc2hpbmcgZnJvbSBjb25zdW1pbmcgbG90cyBvZiB0aW1lCitpbXBvcnQgc3Rh
dAorCisKK2RlZiBoX2ZpbGUoZmlsZW5hbWUpOgorICAgIHN0ID0gb3Muc3RhdChmaWxlbmFtZSkK
KyAgICBpZiBzdGF0LlNfSVNESVIoc3Rbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgIHJhaXNlIElP
RXJyb3IoJ25vdCBhIGZpbGUnKQorICAgIG0gPSBVdGlscy5tZDUoKQorICAgIG0udXBkYXRlKHN0
cihzdC5zdF9tdGltZSkpCisgICAgbS51cGRhdGUoc3RyKHN0LnN0X3NpemUpKQorICAgIG0udXBk
YXRlKGZpbGVuYW1lKQorICAgIHJldHVybiBtLmRpZ2VzdCgpCisKK1V0aWxzLmhfZmlsZSA9IGhf
ZmlsZQpJbmRleDogVG9vbHMvd2FmL2J1aWxkL3d4cHJlc2V0cy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy93YWYvYnVpbGQvd3hwcmVzZXRzLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvd2FmL2J1
aWxkL3d4cHJlc2V0cy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDA5IEtldmluIE9sbGl2aWVyICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisjIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisjIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyMgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyBMaWJyYXJ5IGZvciBmdW5jdGlvbnMg
dG8gZGV0ZXJtaW5lIHd4IHNldHRpbmdzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24KKworaW1wb3J0
IG9zCitpbXBvcnQgcmUKKworaW1wb3J0IE9wdGlvbnMKKworCitkZWYgcGFyc2VfYnVpbGRfY2Zn
KGZpbGVuYW1lKToKKyAgICBjZmdfZmlsZSA9IG9wZW4oZmlsZW5hbWUsICdyJykKKyAgICBjZmcg
PSB7fQorICAgIGZvciBjZmdfbGluZSBpbiBjZmdfZmlsZS5yZWFkbGluZXMoKToKKyAgICAgICAg
a2V5ID0gTm9uZQorICAgICAgICB2YWx1ZSA9IE5vbmUKKyAgICAgICAgcGFydHMgPSBjZmdfbGlu
ZS5zcGxpdCgnPScpCisgICAgICAgIGlmIGxlbihwYXJ0cykgPj0gMToKKyAgICAgICAgICAgIGtl
eSA9IHBhcnRzWzBdLnN0cmlwKCkKKworICAgICAgICBpZiBsZW4ocGFydHMpID49IDI6CisgICAg
ICAgICAgICB2YWx1ZSA9IHBhcnRzWzFdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHZhbHVlLmlz
ZGlnaXQoKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGludCh2YWx1ZSkKKworICAgICAgICBp
ZiBrZXk6CisgICAgICAgICAgICBjZmdba2V5XSA9IHZhbHVlCisKKyAgICByZXR1cm4gY2ZnCisK
KworZGVmIGdldF93eF92ZXJzaW9uKHd4X3Jvb3QpOgorICAgIHZlcnNpb25UZXh0ID0gb3Blbihv
cy5wYXRoLmpvaW4od3hfcm9vdCwgImluY2x1ZGUiLCAid3giLCAidmVyc2lvbi5oIiksICJyIiku
cmVhZCgpCisKKyAgICBtYWpvclZlcnNpb24gPSByZS5zZWFyY2goIiNkZWZpbmVcc3d4TUFKT1Jf
VkVSU0lPTlxzKyhcZCspIiwgdmVyc2lvblRleHQpLmdyb3VwKDEpCisgICAgbWlub3JWZXJzaW9u
ID0gcmUuc2VhcmNoKCIjZGVmaW5lXHN3eE1JTk9SX1ZFUlNJT05ccysoXGQrKSIsIHZlcnNpb25U
ZXh0KS5ncm91cCgxKQorICAgIHJlbGVhc2VWZXJzaW9uID0gcmUuc2VhcmNoKCIjZGVmaW5lXHN3
eFJFTEVBU0VfTlVNQkVSXHMrKFxkKykiLCB2ZXJzaW9uVGV4dCkuZ3JvdXAoMSkKKworICAgIHJl
bGVhc2UgPSBbbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb25dCisgICAgaWYgaW50KG1pbm9yVmVy
c2lvbikgJSAyID09IDE6CisgICAgICAgIHJlbGVhc2UuYXBwZW5kKHJlbGVhc2VWZXJzaW9uKQor
ICAgIHJldHVybiByZWxlYXNlCisKKworZGVmIGdldF93eG1zd19zZXR0aW5ncyh3eF9yb290LCBz
aGFyZWQ9RmFsc2UsIHVuaWNvZGU9RmFsc2UsIGRlYnVnPUZhbHNlLCB3eFB5dGhvbj1GYWxzZSk6
CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHd4X3Jvb3QpOgorICAgICAgICBwcmludCAiRGly
ZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0LiIgJSB3eF9yb290CisgICAgICAgIHN5cy5leGl0KDEp
CisKKyAgICBkZWZpbmVzID0gWydfX1dYTVNXX18nXQorICAgIGluY2x1ZGVzID0gW29zLnBhdGgu
am9pbih3eF9yb290LCAnaW5jbHVkZScpXQorICAgIGN4eGZsYWdzID0gW10KKyAgICBsaWJzID0g
W10KKyAgICBsaWJwYXRocyA9IFtdCisKKyAgICBsaWJkaXIgPSBvcy5wYXRoLmpvaW4od3hfcm9v
dCwgJ2xpYicpCisgICAgZXh0ID0gJycKKyAgICBwb3N0Zml4ID0gJ3ZjJworCisgICAgdmVyc2lv
bl9zdHJfbm9kb3QgPSAnJy5qb2luKGdldF93eF92ZXJzaW9uKHd4X3Jvb3QpWzA6Ml0pCisKKyAg
ICBpZiBzaGFyZWQ6CisgICAgICAgIGRlZmluZXMuYXBwZW5kKCdXWFVTSU5HRExMJykKKyAgICAg
ICAgbGliZGlyID0gb3MucGF0aC5qb2luKGxpYmRpciwgT3B0aW9ucy5vcHRpb25zLnd4X2NvbXBp
bGVyX3ByZWZpeCArICdfZGxsJykKKyAgICBlbHNlOgorICAgICAgICBsaWJkaXIgPSBvcy5wYXRo
LmpvaW4obGliZGlyLCBPcHRpb25zLm9wdGlvbnMud3hfY29tcGlsZXJfcHJlZml4ICsgJ19saWIn
KQorCisgICAgaWYgdW5pY29kZToKKyAgICAgICAgZGVmaW5lcy5hcHBlbmQoJ19VTklDT0RFJykK
KyAgICAgICAgZXh0ICs9ICd1JworCisgICAgZGVwZXh0ID0gJycKKyAgICBpZiB3eFB5dGhvbiBh
bmQgbm90IHZlcnNpb25fc3RyX25vZG90LnN0YXJ0c3dpdGgoJzI5Jyk6CisgICAgICAgIGV4dCAr
PSAnaCcKKyAgICAgICAgZGVwZXh0ICs9ICdoJworICAgIGVsaWYgZGVidWc6CisgICAgICAgIGV4
dCArPSAnZCcKKyAgICAgICAgZGVwZXh0ICs9ICdkJworCisgICAgY29uZmlnZGlyID0gb3MucGF0
aC5qb2luKGxpYmRpciwgJ21zdycgKyBleHQpCisKKyAgICBtb25vbGl0aGljID0gRmFsc2UKKyAg
ICBjZmdfZmlsZSA9IG9zLnBhdGguam9pbihjb25maWdkaXIsICdidWlsZC5jZmcnKQorICAgIGlm
IG9zLnBhdGguZXhpc3RzKGNmZ19maWxlKToKKyAgICAgICAgY2ZnID0gcGFyc2VfYnVpbGRfY2Zn
KGNmZ19maWxlKQorICAgICAgICBpZiAiTU9OT0xJVEhJQyIgaW4gY2ZnOgorICAgICAgICAgICAg
bW9ub2xpdGhpYyA9IGNmZ1siTU9OT0xJVEhJQyJdCisgICAgbGlicGF0aHMuYXBwZW5kKGxpYmRp
cikKKyAgICBpbmNsdWRlcy5hcHBlbmQoY29uZmlnZGlyKQorCisgICAgZGVmIGdldF93eGxpYl9u
YW1lKG5hbWUpOgorICAgICAgICBpZiBuYW1lID09ICdiYXNlJzoKKyAgICAgICAgICAgIHJldHVy
biAnd3hiYXNlJXMlcycgJSAodmVyc2lvbl9zdHJfbm9kb3QsIGV4dCkKKworICAgICAgICByZXR1
cm4gInd4bXN3JXMlc18lcyIgJSAodmVyc2lvbl9zdHJfbm9kb3QsIGV4dCwgbmFtZSkKKworICAg
IGxpYnMuZXh0ZW5kKFsnd3h6bGliJyArIGRlcGV4dCwgJ3d4anBlZycgKyBkZXBleHQsICd3eHBu
ZycgKyBkZXBleHQsICd3eGV4cGF0JyArIGRlcGV4dF0pCisgICAgaWYgbW9ub2xpdGhpYzoKKyAg
ICAgICAgbGlicy5leHRlbmQoWyJ3eG1zdyVzJXMiICUgKHZlcnNpb25fc3RyX25vZG90LCBleHQp
XSkKKyAgICBlbHNlOgorICAgICAgICBsaWJzLmV4dGVuZChbZ2V0X3d4bGliX25hbWUoJ2Jhc2Un
KSwgZ2V0X3d4bGliX25hbWUoJ2NvcmUnKV0pCisKKyAgICBpZiB3eFB5dGhvbiBvciBkZWJ1ZzoK
KyAgICAgICAgZGVmaW5lcy5hcHBlbmQoJ19fV1hERUJVR19fJykKKworICAgIHJldHVybiAoZGVm
aW5lcywgaW5jbHVkZXMsIGxpYnMsIGxpYnBhdGhzKQo=
</data>
<flag name="review"
          id="83658"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>