<?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>71593</bug_id>
          
          <creation_ts>2011-11-04 16:29:12 -0700</creation_ts>
          <short_desc>Remove Python 2.5 support from WebKit</short_desc>
          <delta_ts>2012-03-19 16:17:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>78156</dependson>
    
    <dependson>78161</dependson>
    
    <dependson>78164</dependson>
    
    <dependson>78170</dependson>
    
    <dependson>78173</dependson>
    
    <dependson>78176</dependson>
    
    <dependson>78178</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>levin</cc>
    
    <cc>leviw</cc>
    
    <cc>ojan</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>496540</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-04 16:29:12 -0700</bug_when>
    <thetext>Remove Python 2.5 support from WebKIt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496542</commentid>
    <comment_count>1</comment_count>
      <attachid>113730</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-04 16:29:54 -0700</bug_when>
    <thetext>Created attachment 113730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496726</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-05 16:27:12 -0700</bug_when>
    <thetext>*** Bug 48614 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542676</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-25 15:06:05 -0800</bug_when>
    <thetext>My understanding is all the bots are ready for 2.6+ now.  I&apos;m going to commit a small change which requires 2.6 and we can back it out if we have trouble.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542683</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-25 15:11:55 -0800</bug_when>
    <thetext>Committed r105931: &lt;http://trac.webkit.org/changeset/105931&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542684</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-25 15:12:17 -0800</bug_when>
    <thetext>This is not actually fixed yet. :)  I forgot to use --no-close.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542685</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-25 15:13:32 -0800</bug_when>
    <thetext>As we discussed, we&apos;re going to make this change in small pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552514</commentid>
    <comment_count>7</comment_count>
      <attachid>113730</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-08 14:55:11 -0800</bug_when>
    <thetext>Comment on attachment 113730
Patch

This patch is too large.  Let&apos;s do this in smaller pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552630</commentid>
    <comment_count>8</comment_count>
      <attachid>126188</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-08 16:49:19 -0800</bug_when>
    <thetext>Created attachment 126188
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552632</commentid>
    <comment_count>9</comment_count>
      <attachid>126188</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-08 16:50:07 -0800</bug_when>
    <thetext>Comment on attachment 126188
Patch

OK.  I suspect this isn&apos;t everythign, but we can close this. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552634</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-08 16:50:55 -0800</bug_when>
    <thetext>Committed r107156: &lt;http://trac.webkit.org/changeset/107156&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582400</commentid>
    <comment_count>11</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-03-19 16:15:21 -0700</bug_when>
    <thetext>I&apos;ve updated https://trac.webkit.org/wiki/PythonGuidelines removing comments about Python 2.5 being supported, and what cannot be used without upgrading to 2.6. I don&apos;t have access to a Mac to update the Mac upgrade instructions, though (dunno if they should cover upgrading from 2.5 too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582402</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-19 16:17:19 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I&apos;ve updated https://trac.webkit.org/wiki/PythonGuidelines removing comments about Python 2.5 being supported, and what cannot be used without upgrading to 2.6. I don&apos;t have access to a Mac to update the Mac upgrade instructions, though (dunno if they should cover upgrading from 2.5 too).

Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113730</attachid>
            <date>2011-11-04 16:29:54 -0700</date>
            <delta_ts>2012-02-08 16:49:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71593-20111104162952.patch</filename>
            <type>text/plain</type>
            <size>217214</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkzMjYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5OTgxMDc5ODI1MmM4YTBhMWI4YTQ1OWE1M2MxMWYzNDIz
M2Y3MDE0Li43MmFkZWMzMTEzMWRiNjYxM2Q2MGFmM2VhMjk2OGE1ODgzODJmYzg0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzgg
QEAKIDIwMTEtMTEtMDQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCisgICAgICAg
IFJlbW92ZSBQeXRob24gMi41IHN1cHBvcnQgZnJvbSBXZWJLSXQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNTkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydGluZyBQeXRob24gMi41IHdhcyBv
bmUgZXBpYyBoYWNrLCBidXQgbm8gbW9yZS4gOikKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGVja291dF91bml0dGVzdC5weToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVydmFsaWRh
dG9yLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9i
dWlsZGJvdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvY3JlZGVu
dGlhbHNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0
L3Jlc3VsdHNqc29ucGFyc2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L25ld3N0cmluZ2lvX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9hdXRvaW5zdGFsbC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9maWxlc2V0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlc3lzdGVtLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL29zcGF0aC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3NwYXRoX3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wYXRoLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3RocmVhZC90aHJlYWRlZG1lc3NhZ2VxdWV1ZS5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRl
c3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvdGVzdF9leHBlY3RhdGlvbnNfZWRpdG9yLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
anNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3Jlc3VsdHNfdXBsb2FkZXIu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3Rf
Y29uZmlndXJhdGlvbi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0
aW9udGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2
ZXJzL2h0dHBfc2VydmVyX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdmlld3MvbWV0ZXJlZF9zdHJlYW0ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9weXRob24yNC92ZXJzaW9uaW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cHl0aG9uMjQvdmVyc2lvbmluZ191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2ZpbGVyZWFkZXJfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9tYWluLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFp
bl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19p
bml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vY2sucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vTElDRU5T
RS50eHQ6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3Np
bXBsZWpzb24vUkVBRE1FLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvc2ltcGxlanNvbi9fX2luaXRfXy5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9fc3BlZWR1cHMuYzogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9kZWNv
ZGVyLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9z
aW1wbGVqc29uL2VuY29kZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3NpbXBsZWpzb24vanNvbmZpbHRlci5weTogUmVtb3ZlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9vcmRlcmVkX2RpY3QucHk6
IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpz
b24vc2Nhbm5lci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvc2ltcGxlanNvbi90b29sLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC91cGRhdGVfd2ViZ2xfY29uZm9y
bWFuY2VfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L3F1ZXVlcy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVl
dWVzX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJz
L2dhcmRlbmluZ3NlcnZlcl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvc2VydmVycy9yZWJhc2VsaW5lc2VydmVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL3JlZmxlY3Rpb25oYW5kbGVyLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9wcmVwYXJlY2hhbmdlbG9nZm9ycmV2ZXJ0
X3VuaXR0ZXN0LnB5OgorCisyMDExLTExLTA0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKwogICAgICAgICBuZXctcnVuLXdlYmtpdC10ZXN0cyBhdXRvaW5zdGFsbHMgcHl0aG9uLWly
Y2xpYiBldmVuIHRob3VnaCBpdCBkb2Vzbid0IG5lZWQgdG8KICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNTQ5CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0dGVzdC5w
eQppbmRleCAyNmI1ZjkyNjU1YzA3OGI1NTQ0Yzk1YjRlMGRiNmRiNzMyNGYzYzYyLi45YmE2MTlk
ZGZlMmJmMDUyZmU0NzYwMTc5ZGEwNTVjMjExODNjY2ZjIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5pdHRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nX3VuaXR0ZXN0
LnB5CkBAIC0yNiw3ICsyNiw2IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1m
cm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiAKIGltcG9ydCBjb2RlY3MKIGlt
cG9ydCBvcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvY2hlY2tvdXRfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9jaGVja291dF91bml0dGVzdC5weQppbmRleCAzNjZhNDQyMzVjYjAxMzI1Y2JmNWU3
YzA5ZGYzOWZmM2FhZjc4ODJjLi4xMGNhY2NhOTRjODU0Y2JiNWVkNTU0M2VkYzQyNTZlNjM4NjM4
ZWZhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9j
aGVja291dF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9jaGVja291dF91bml0dGVzdC5weQpAQCAtMjYsNyArMjYsNiBAQAogIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRl
bWVudAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgb3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CmluZGV4IDkzNGE1YzYxMjA5ZDlhYzU2
OTg4ZDlhMzI3MWY0YWJhNWE2OTZmZWEuLjkxYTNmNmQxNzJlMTEyMzY2YmZmYzA1NDNkZTM2NTg0
MDJkMGFhNGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL2dpdC5weQpAQCAtMzQsNyArMzQsNiBAQCBpbXBvcnQgcmUKIGZyb20gd2Via2l0cHku
Y29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9nCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCi1mcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG9zcGF0aAogCiBmcm9tIC5jb21taXRtZXNzYWdlIGlt
cG9ydCBDb21taXRNZXNzYWdlCiBmcm9tIC5zY20gaW1wb3J0IEF1dGhlbnRpY2F0aW9uRXJyb3Is
IFNDTSwgY29tbWl0X2Vycm9yX2hhbmRsZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CmluZGV4IGViMGFi
NTY1NzAzNThhNDIyNDkwNjgyZjU1Y2RkM2ZlYzc4YTA1YTYuLjg2MTFiODliYjRlZGFhOTE3MGFl
MDdmYTNlZDkzNmI1MThjZmNiMmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQpAQCAtMjgsNyArMjgs
NiBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotZnJvbSBfX2Z1dHVyZV9fIGlt
cG9ydCB3aXRoX3N0YXRlbWVudAogCiBpbXBvcnQgYXRleGl0CiBpbXBvcnQgYmFzZTY0CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQppbmRl
eCA2Y2RiNmY3Y2U4YzNiMGZjYjllYjRmZjFiMTU0ZTc4OTI3ZGE0MTk3Li41YWJkZTMxZmQ5MjI1
ZTIzZTA4YTQ2YmVlZTEzNDFmYmU3NDU3N2E4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKQEAgLTM2LDcgKzM2LDYgQEAgaW1wb3J0
IHN5cwogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBsb2cKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2Ny
aXB0RXJyb3IKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3NwYXRoCiAKIGZy
b20gLnNjbSBpbXBvcnQgQXV0aGVudGljYXRpb25FcnJvciwgU0NNLCBjb21taXRfZXJyb3JfaGFu
ZGxlcgogCkBAIC03OSw3ICs3OCw3IEBAIGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgog
ICAgICAgICAgICAgIyBGSVhNRTogU2NyaXB0RXJyb3IgaXMgZm9yIEV4ZWN1dGl2ZSwgdGhpcyBz
aG91bGQgcHJvYmFibHkgYmUgYSBub3JtYWwgRXhjZXB0aW9uLgogICAgICAgICAgICAgcmFpc2Ug
U2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9c3ZuX2luZm9fYXJncywgbWVzc2FnZT0nRW1wdHkgbGlz
dCBvZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKICAgICAgICAg
ZWxpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBOb25lOgotICAgICAgICAgICAgc2VsZi5fcGF0Y2hf
ZGlyZWN0b3JpZXMgPSBbb3NwYXRoLnJlbHBhdGgoY3dkLCBzZWxmLmNoZWNrb3V0X3Jvb3QpXQor
ICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMgPSBbc2VsZi5fZmlsZXN5c3RlbS5y
ZWxwYXRoKGN3ZCwgc2VsZi5jaGVja291dF9yb290KV0KICAgICAgICAgZWxzZToKICAgICAgICAg
ICAgIHNlbGYuX3BhdGNoX2RpcmVjdG9yaWVzID0gcGF0Y2hfZGlyZWN0b3JpZXMKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnZhbGlk
YXRvci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJ2
YWxpZGF0b3IucHkKaW5kZXggZTU0MzM3M2M3ODFmMGUxMWRlYmZmMjlkMzA3OWU4ZDAxMDE0OGU1
Yi4uMDYxZGQwOGY4MDVlMDZkYThiNjFmNWQ5MDNiYWUxYmNlMzFjODFiMyAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnZhbGlkYXRvci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVydmFs
aWRhdG9yLnB5CkBAIC0zMCwxMiArMzAsMTAgQEAKIAogaW1wb3J0IG9zCiAKLWZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5vc3BhdGggaW1wb3J0IHJlbHBhdGgKIGZyb20gd2Via2l0cHkuY29t
bW9uLmNvbmZpZyBpbXBvcnQgY29tbWl0dGVycywgdXJscwogCiAKIGNsYXNzIENvbW1pdHRlclZh
bGlkYXRvcihvYmplY3QpOgotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1Z3ppbGxhKToKICAg
ICAgICAgc2VsZi5fYnVnemlsbGEgPSBidWd6aWxsYQogCkBAIC00OSw5ICs0Nyw3IEBAIGNsYXNz
IENvbW1pdHRlclZhbGlkYXRvcihvYmplY3QpOgogICAgIGRlZiBfY29tbWl0dGVyc19weV9wYXRo
KHNlbGYpOgogICAgICAgICAjIGV4dGVuc2lvbiBjYW4gc29tZXRpbWVzIGJlIC5weWMsIHdlIGFs
d2F5cyB3YW50IC5weQogICAgICAgICAocGF0aCwgZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRl
eHQoY29tbWl0dGVycy5fX2ZpbGVfXykKLSAgICAgICAgIyBGSVhNRTogV2hlbiB3ZSdyZSBhbGxv
d2VkIHRvIHVzZSBweXRob24gMi42IHdlIGNhbiB1c2UgdGhlIHJlYWwKLSAgICAgICAgIyBvcy5w
YXRoLnJlbHBhdGgKLSAgICAgICAgcGF0aCA9IHJlbHBhdGgocGF0aCwgc2VsZi5fY2hlY2tvdXRf
cm9vdCgpKQorICAgICAgICBwYXRoID0gb3MucGF0aC5yZWxwYXRoKHBhdGgsIHNlbGYuX2NoZWNr
b3V0X3Jvb3QoKSkKICAgICAgICAgcmV0dXJuICIuIi5qb2luKFtwYXRoLCAicHkiXSkKIAogICAg
IGRlZiBfZmxhZ19wZXJtaXNzaW9uX3JlamVjdGlvbl9tZXNzYWdlKHNlbGYsIHNldHRlcl9lbWFp
bCwgZmxhZ19uYW1lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L25ldC9idWlsZGJvdC9idWlsZGJvdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L25ldC9idWlsZGJvdC9idWlsZGJvdC5weQppbmRleCBiNTgxYWM4NjdkYTFmMWUyODYzNjllMTdm
NmRlYzE2MTI2Mzk1YjBjLi41MjcwNTFkZmJlMTU4MGFlMjgxNjU5M2RmM2IyYzAzNWI1ZTE5ZGYz
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3Qv
YnVpbGRib3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxk
Ym90L2J1aWxkYm90LnB5CkBAIC0yOCwxMSArMjgsNyBAQAogIwogIyBXZWJLaXQncyBQeXRob24g
bW9kdWxlIGZvciBpbnRlcmFjdGluZyB3aXRoIFdlYktpdCdzIGJ1aWxkYm90CiAKLXRyeToKLSAg
ICBpbXBvcnQganNvbgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgcHl0aG9uIDIuNSBjb21w
YXRpYmlsaXR5Ci0gICAgaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuc2ltcGxlanNvbiBhcyBq
c29uCitpbXBvcnQganNvbgogCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCByZQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2NyZWRlbnRpYWxzX3VuaXR0ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2NyZWRlbnRpYWxzX3VuaXR0
ZXN0LnB5CmluZGV4IDAwNzVkZDk2MDFhMmM2M2Y4YmY5ZmQzMTYxNzQzMzMwYzRmNGQ5NWMuLjZl
ZTc0NmMyNjk4ZmU5ZDM0NzZlYTg3MzAzMjI0ZjkyZGQ3ZWIzOWQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9jcmVkZW50aWFsc191bml0dGVzdC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvY3JlZGVudGlhbHNfdW5pdHRlc3Qu
cHkKQEAgLTI2LDcgKzI2LDYgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWZy
b20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAogaW1wb3J0IG9zCiBpbXBvcnQg
dGVtcGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9y
ZXN1bHRzanNvbnBhcnNlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9y
ZXN1bHRzanNvbnBhcnNlci5weQppbmRleCA2MTIwNzEzZWI2NDdhMzNmNTVkYWY1YWExZjg4MTMw
MzQyMmZjYzA2Li45OWU4NTI4ZGUxN2U3YTE4YzMwMjgxYzg5N2ZmYTZmMjdiMmYyM2FmIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvcmVzdWx0c2pzb25wYXJz
ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3Jlc3VsdHNqc29u
cGFyc2VyLnB5CkBAIC0yNywxMSArMjcsNyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAKLXRyeToKLSAg
ICBpbXBvcnQganNvbgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgcHl0aG9uIDIuNSBjb21w
YXRpYmlsaXR5Ci0gICAgaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuc2ltcGxlanNvbiBhcyBq
c29uCitpbXBvcnQganNvbgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQg
bWVtb2l6ZWQKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcg
aW1wb3J0IGxvZwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV3
c3RyaW5naW9fdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdz
dHJpbmdpb191bml0dGVzdC5weQppbmRleCA1NzU1Yzk4MTQzZGQzNDg5YjZlMDUxZTNmOWQ5OTZl
ZDVmMDhiZDA5Li5jZmJjYTEyOTQzMjA2NGNhZTUwZDRhNDMxZjYzNzJmN2YzNTQzNzY4IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdzdHJpbmdpb191bml0dGVz
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdzdHJpbmdpb191bml0
dGVzdC5weQpAQCAtMjksNyArMjksNiBAQAogCiAiIiJVbml0IHRlc3RzIGZvciBuZXdzdHJpbmdp
byBtb2R1bGUuIiIiCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAog
aW1wb3J0IHVuaXR0ZXN0CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9hdXRvaW5zdGFsbC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9hdXRvaW5zdGFsbC5weQppbmRleCA0ZmZjY2NjNjQ2NTU3NjNjYjdkYzNjN2RiNmYz
NzRjZDRiZTI0N2IxLi4wNTkwZTQyMTUyMmMwN2Y5MDcxZTM0ZGNiZmJjZmNhODc4M2RhOTc5IDEw
MDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vYXV0b2luc3Rh
bGwucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2F1dG9pbnN0
YWxsLnB5CkBAIC0zMSw3ICszMSw2IEBACiAiIiJTdXBwb3J0IGZvciBhdXRvbWF0aWNhbGx5IGRv
d25sb2FkaW5nIFB5dGhvbiBwYWNrYWdlcyBmcm9tIGFuIFVSTC4iIiIKIAogCi1mcm9tIF9fZnV0
dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBsb2dn
aW5nCkBAIC0yNjEsNDMgKzI2MCw2IEBAIGNsYXNzIEF1dG9JbnN0YWxsZXIob2JqZWN0KToKIAog
ICAgICAgICByZXR1cm4gdGFyZ2V0X3BhdGgKIAotICAgICMgVGhpcyBpcyBhIHJlcGxhY2VtZW50
IGZvciBaaXBGaWxlLmV4dHJhY3RhbGwoKSwgd2hpY2ggaXMKLSAgICAjIGF2YWlsYWJsZSBpbiBQ
eXRob24gMi42IGJ1dCBub3QgaW4gZWFybGllciB2ZXJzaW9ucy4KLSAgICBkZWYgX2V4dHJhY3Rf
YWxsKHNlbGYsIHppcF9maWxlLCB0YXJnZXRfZGlyKToKLSAgICAgICAgc2VsZi5fbG9nX3RyYW5z
ZmVyKCJFeHRyYWN0aW5nIHppcCBmaWxlLi4uIiwgemlwX2ZpbGUsIHRhcmdldF9kaXIpCi0KLSAg
ICAgICAgIyBUaGlzIGlzIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICAgICAg
X2xvZy5kZWJ1ZygiTGlzdGluZyB6aXAgZmlsZSBjb250ZW50cy4uLiIpCi0gICAgICAgIGZvciBu
YW1lIGluIHppcF9maWxlLm5hbWVsaXN0KCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgICAg
KiAiJXMiJyAlIG5hbWUpCi0KLSAgICAgICAgZm9yIG5hbWUgaW4gemlwX2ZpbGUubmFtZWxpc3Qo
KToKLSAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgbmFtZSkKLSAg
ICAgICAgICAgIHNlbGYuX2xvZ190cmFuc2ZlcigiRXh0cmFjdGluZy4uLiIsIG5hbWUsIHBhdGgp
Ci0KLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpOgotICAgICAgICAg
ICAgICAgICMgVGhlbiB0aGUgcGF0aCBlbmRzIGluIGEgc2xhc2gsIHNvIGl0IGlzIGEgZGlyZWN0
b3J5LgotICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kaXJlY3RvcnkocGF0aCkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgIyBPdGhlcndpc2UsIGl0IGlzIGEgZmls
ZS4KLQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgV2Ugb3BlbiB0aGlzIGZp
bGUgdy9vIGVuY29kaW5nLCBhcyB3ZSdyZSByZWFkaW5nL3dyaXRpbmcKLSAgICAgICAgICAgICAg
ICAjIHRoZSByYXcgYnl0ZS1zdHJlYW0gZnJvbSB0aGUgemlwIGZpbGUuCi0gICAgICAgICAgICAg
ICAgb3V0ZmlsZSA9IG9wZW4ocGF0aCwgJ3diJykKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9y
LCBlcnI6Ci0gICAgICAgICAgICAgICAgIyBOb3QgYWxsIHppcCBmaWxlcyBzZWVtIHRvIGxpc3Qg
dGhlIGRpcmVjdG9yaWVzIGV4cGxpY2l0bHksCi0gICAgICAgICAgICAgICAgIyBzbyB0cnkgYWdh
aW4gYWZ0ZXIgY3JlYXRpbmcgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgotICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoIkdvdCBJT0Vycm9yOiByZXRyeWluZyBhZnRlciBjcmVhdGluZyBkaXJl
Y3RvcnkuLi4iKQotICAgICAgICAgICAgICAgIGRpciA9IG9zLnBhdGguZGlybmFtZShwYXRoKQot
ICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kaXJlY3RvcnkoZGlyKQotICAgICAgICAgICAg
ICAgIG91dGZpbGUgPSBvcGVuKHBhdGgsICd3YicpCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICBvdXRmaWxlLndyaXRlKHppcF9maWxlLnJlYWQobmFtZSkpCi0gICAgICAgICAg
ICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG91dGZpbGUuY2xvc2UoKQotCiAgICAgZGVmIF91
bnppcChzZWxmLCBwYXRoLCBzY3JhdGNoX2Rpcik6CiAgICAgICAgICMgemlwZmlsZS5leHRyYWN0
YWxsKCkgZXh0cmFjdHMgdG8gYSBwYXRoIHdpdGhvdXQgdGhlCiAgICAgICAgICMgdHJhaWxpbmcg
Ii56aXAiLgpAQCAtMzE1LDcgKzI3Nyw3IEBAIGNsYXNzIEF1dG9JbnN0YWxsZXIob2JqZWN0KToK
ICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihtZXNzYWdlKQogCiAgICAgICAgIHRyeToKLSAg
ICAgICAgICAgIHNlbGYuX2V4dHJhY3RfYWxsKHppcF9maWxlLCBzY3JhdGNoX2RpcikKKyAgICAg
ICAgICAgIHppcF9maWxlLmV4dHJhY3RhbGwoc2NyYXRjaF9kaXIpCiAgICAgICAgIGZpbmFsbHk6
CiAgICAgICAgICAgICB6aXBfZmlsZS5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CmluZGV4IGZiYjdlZjA2N2IzZDUwMzVk
NmU2NTJjZTIyZjI4M2ExNTkyMGUxMWIuLjhhMDJmM2I3YjQzMTkyZWEzMzIyNjMxZWNlMGU2YzJj
MWRhMmY4ZGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9leGVjdXRpdmUucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2V4ZWN1dGl2ZS5weQpAQCAtMjcsMTIgKzI3LDggQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAKLXRyeToKLSAgICAjIFRoaXMgQVBJIGV4aXN0cyBvbmx5IGluIFB5dGhvbiAyLjYg
YW5kIGhpZ2hlci4gIDooCi0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZXhjZXB0IEltcG9y
dEVycm9yOgotICAgIG11bHRpcHJvY2Vzc2luZyA9IE5vbmUKIAoraW1wb3J0IG11bHRpcHJvY2Vz
c2luZwogaW1wb3J0IGN0eXBlcwogaW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwpAQCAtMTYx
LDIxICsxNTcsNyBAQCBjbGFzcyBFeGVjdXRpdmUob2JqZWN0KToKICAgICAgICAgcmV0dXJuIGNo
aWxkX291dHB1dAogCiAgICAgZGVmIGNwdV9jb3VudChzZWxmKToKLSAgICAgICAgaWYgbXVsdGlw
cm9jZXNzaW5nOgotICAgICAgICAgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQo
KQotICAgICAgICAjIERhcm4uICBXZSBkb24ndCBoYXZlIHRoZSBtdWx0aXByb2Nlc3NpbmcgcGFj
a2FnZS4KLSAgICAgICAgc3lzdGVtX25hbWUgPSBwbGF0Zm9ybS5zeXN0ZW0oKQotICAgICAgICBp
ZiBzeXN0ZW1fbmFtZSA9PSAiRGFyd2luIjoKLSAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZi5y
dW5fY29tbWFuZChbInN5c2N0bCIsICItbiIsICJody5uY3B1Il0pKQotICAgICAgICBlbGlmIHN5
c3RlbV9uYW1lID09ICJXaW5kb3dzIjoKLSAgICAgICAgICAgIHJldHVybiBpbnQob3MuZW52aXJv
bi5nZXQoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJywgMSkpCi0gICAgICAgIGVsaWYgc3lzdGVtX25h
bWUgPT0gIkxpbnV4IjoKLSAgICAgICAgICAgIG51bV9jb3JlcyA9IG9zLnN5c2NvbmYoIlNDX05Q
Uk9DRVNTT1JTX09OTE4iKQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShudW1fY29yZXMsIGlu
dCkgYW5kIG51bV9jb3JlcyA+IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bV9jb3Jlcwot
ICAgICAgICAjIFRoaXMgcXVhbnRpdHkgaXMgYSBsaWUgYnV0IHByb2JhYmx5IGEgcmVhc29uYWJs
ZSBndWVzcyBmb3IgbW9kZXJuCi0gICAgICAgICMgbWFjaGluZXMuCi0gICAgICAgIHJldHVybiAy
CisgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKIAogICAgIEBzdGF0
aWNtZXRob2QKICAgICBkZWYgaW50ZXJwcmV0ZXJfZm9yX3NjcmlwdChzY3JpcHRfcGF0aCwgZnM9
Tm9uZSk6CkBAIC0zNzYsOCArMzU4LDExIEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogICAg
ICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc1MjgK
ICAgICAgICAgIyBmb3IgYW4gZXhhbXBsZSBvZiBhIHJlZ3Jlc2lvbiBjYXVzZWQgYnkgcGFzc2lu
ZyBhIHVuaWNvZGUgc3RyaW5nIGRpcmVjdGx5LgogICAgICAgICAjIEZJWE1FOiBXZSBtYXkgbmVl
ZCB0byBlbmNvZGUgZGlmZmVyZW50bHkgb24gZGlmZmVyZW50IHBsYXRmb3Jtcy4KKyAgICAgICAg
IyBGSVhNRTogUHl0aG9uIDIuNyBzZWVtcyB0byByZXF1aXJlIHRoaXMgY29kZSB0b28sIGF0IGxl
YXN0CisgICAgICAgICMgdG8gcGFzcyB0ZXN0X3J1bl9jb21tYW5kX3dpdGhfdW5pY29kZS4KICAg
ICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dCwgdW5pY29kZSk6CiAgICAgICAgICAgICBpbnB1dCA9
IGlucHV0LmVuY29kZShzZWxmLl9jaGlsZF9wcm9jZXNzX2VuY29kaW5nKCkpCisKICAgICAgICAg
cmV0dXJuIChzZWxmLlBJUEUsIGlucHV0KQogCiAgICAgZGVmIF9jb21tYW5kX2Zvcl9wcmludGlu
ZyhzZWxmLCBhcmdzKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlc2V0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2ZpbGVzZXQucHkKaW5kZXggNTk4YzFjNTk1ZGU3NTJjOTUyMmZmMWU3MjZkOTZhZjY0ZjAxODMy
Ni4uNzk1NzIyYzU1ZTBjN2Y3MTEwMzliMGFjOWExYjE2MGYxODIzN2M0MCAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKQEAgLTIxLDcgKzIx
LDYgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWZyb20gX19mdXR1cmVfXyBp
bXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVz
eXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQppbmRleCA3ZGU0MWE0MjRkMWJiY2Y5NTFiZWNh
MmZlOGU0YTU0OTQyMWE2ZDgyLi44ZDZmZTY5ZWU4MWQzY2Q5Y2MzMDM3ZGI4ZTI5MjVlNjRhMzNi
MTlkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXN5c3RlbS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXN5c3RlbS5weQpAQCAtMjgsNyArMjgsNiBAQAogCiAiIiJXcmFwcGVyIG9iamVjdCBmb3IgdGhl
IGZpbGUgc3lzdGVtIC8gc291cmNlIHRyZWUuIiIiCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQg
d2l0aF9zdGF0ZW1lbnQKIAogaW1wb3J0IGNvZGVjcwogaW1wb3J0IGVycm5vCkBAIC00MSw3ICs0
MCw2IEBAIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRpbWUKIAotZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvc3BhdGgKIAogY2xhc3MgRmlsZVN5c3RlbShv
YmplY3QpOgogICAgICIiIkZpbGVTeXN0ZW0gaW50ZXJmYWNlIGZvciB3ZWJraXRweS4KQEAgLTIy
OSw3ICsyMjcsNyBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBo
YXNobGliLnNoYTEoY29udGVudHMpLmhleGRpZ2VzdCgpCiAKICAgICBkZWYgcmVscGF0aChzZWxm
LCBwYXRoLCBzdGFydD0nLicpOgotICAgICAgICByZXR1cm4gb3NwYXRoLnJlbHBhdGgocGF0aCwg
c3RhcnQpCisgICAgICAgIHJldHVybiBvcy5wYXRoLnJlbHBhdGgocGF0aCwgc3RhcnQpCiAKICAg
ICBjbGFzcyBfV2luZG93c0Vycm9yKGV4Y2VwdGlvbnMuT1NFcnJvcik6CiAgICAgICAgICIiIkZh
a2UgZXhjZXB0aW9uIGZvciBMaW51eCBhbmQgTWFjLiIiIgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKaW5kZXggZjRl
YTRhYjIyMjEzNDUxNjAyZjRiNDQwZTEyODFmMTk0YTc1NjY2NS4uZTE3NDU0MDY2ZWY0YmRhMjA1
MjRhMjZkMTJhNDQxMTI1ZTJkYTc0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CkBAIC0zMiw3ICszMiw2IEBA
IGltcG9ydCBvcwogaW1wb3J0IHJlCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBv
cnQgcGF0aAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvc3BhdGgKIAogCiBj
bGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgpAQCAtMjk2LDcgKzI5NSwzMyBAQCBjbGFzcyBN
b2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICByZXR1cm4gaGFzaGxpYi5zaGExKGNvbnRl
bnRzKS5oZXhkaWdlc3QoKQogCiAgICAgZGVmIHJlbHBhdGgoc2VsZiwgcGF0aCwgc3RhcnQ9Jy4n
KToKLSAgICAgICAgcmV0dXJuIG9zcGF0aC5yZWxwYXRoKHBhdGgsIHN0YXJ0LCBzZWxmLmFic3Bh
dGgsIHNlbGYuc2VwKQorICAgICAgICAjIFNpbmNlIG9zLnBhdGgucmVscGF0aCgpIGNhbGxzIG9z
LnBhdGgubm9ybXBhdGgoKQorICAgICAgICAjIChzZWUgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9s
aWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmFic3BhdGggKQorICAgICAgICAjIGl0IGFsc28g
cmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzIGFuZCBjb252ZXJ0cyBmb3J3YXJkIGFuZCBiYWNrd2Fy
ZAorICAgICAgICAjIHNsYXNoZXMgdG8gdGhlIHByZWZlcnJlZCBzbGFzaCBvcy5zZXAuCisgICAg
ICAgIHN0YXJ0ID0gc2VsZi5hYnNwYXRoKHN0YXJ0KQorICAgICAgICBwYXRoID0gc2VsZi5hYnNw
YXRoKHBhdGgpCisKKyAgICAgICAgaWYgbm90IHBhdGgubG93ZXIoKS5zdGFydHN3aXRoKHN0YXJ0
Lmxvd2VyKCkpOgorICAgICAgICAgICAgIyBUaGVuIHBhdGggaXMgb3V0c2lkZSB0aGUgZGlyZWN0
b3J5IGdpdmVuIGJ5IHN0YXJ0LgorICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgRklYTUU6IG9z
LnJlbHBhdGggc3RpbGwgcmV0dXJucyBhIHBhdGggaGVyZS4KKworICAgICAgICByZWxfcGF0aCA9
IHBhdGhbbGVuKHN0YXJ0KTpdCisKKyAgICAgICAgaWYgbm90IHJlbF9wYXRoOgorICAgICAgICAg
ICAgIyBUaGVuIHRoZSBwYXRocyBhcmUgdGhlIHNhbWUuCisgICAgICAgICAgICBwYXNzCisgICAg
ICAgIGVsaWYgcmVsX3BhdGhbMF0gPT0gc2VsZi5zZXA6CisgICAgICAgICAgICAjIEl0IGlzIHBy
b2JhYmx5IHN1ZmZpY2llbnQgdG8gcmVtb3ZlIGp1c3QgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAg
ICAgICAgICAgIyBzaW5jZSBvcy5wYXRoLm5vcm1wYXRoKCkgY29sbGFwc2VzIHNlcGFyYXRvcnMs
IGJ1dCB3ZSB1c2UKKyAgICAgICAgICAgICMgbHN0cmlwKCkganVzdCB0byBiZSBzdXJlLgorICAg
ICAgICAgICAgcmVsX3BhdGggPSByZWxfcGF0aC5sc3RyaXAoc2VsZi5zZXApCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAjIFdlIGFyZSBpbiB0aGUgY2FzZSB0eXBpZmllZCBieSB0aGUgZm9s
bG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAjIHBhdGggPSAiL3RtcC9mb29iYXIiLCBzdGFy
dCA9ICIvdG1wL2ZvbyIgLT4gcmVsX3BhdGggPSAiYmFyIgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgICAgICByZXR1cm4gcmVsX3BhdGgKIAogICAgIGRlZiByZW1vdmUoc2VsZiwgcGF0
aCk6CiAgICAgICAgIGlmIHNlbGYuZmlsZXNbcGF0aF0gaXMgTm9uZToKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRl
c3QucHkKaW5kZXggYzI0MzQ0Yzc2OTZhNDM2YzU4M2MxODdkYjNmY2IzYjY0OGQ5MDExMC4uZjU0
MDQ2ZTRiMmY5NWFmODBlMmNjNjQ1NmIzMjE5ZWRlYTk4NmM3NCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRl
c3QucHkKQEAgLTMxLDcgKzMxLDYgQEAKICMgaW1wb3J0YW50OyB3aXRob3V0IGl0LCBQeXRob24g
d2lsbCBjaG9rZSB3aGlsZSB0cnlpbmcgdG8gcGFyc2UgdGhlIGZpbGUsCiAjIHNpbmNlIGl0IGlu
Y2x1ZGVzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdp
dGhfc3RhdGVtZW50CiAKIGltcG9ydCBvcwogaW1wb3J0IHN0YXQKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vc3BhdGgucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3NwYXRoLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyNTA0NjQ1YzA0Y2E1YTk3MWJmYmU5YTc0NDczOWZlNDg4OWU5MjU4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9vc3BhdGgucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCww
IEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtp
dC5vcmcpCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIkNv
bnRhaW5zIGEgc3Vic3RpdHV0ZSBmb3IgUHl0aG9uIDIuNidzIG9zLnBhdGgucmVscGF0aCgpLiIi
IgotCi1pbXBvcnQgb3MKLQotCi0jIFRoaXMgZnVuY3Rpb24gaXMgYSByZXBsYWNlbWVudCBmb3Ig
b3MucGF0aC5yZWxwYXRoKCksIHdoaWNoIGlzIG9ubHkKLSMgYXZhaWxhYmxlIGluIFB5dGhvbiAy
LjY6Ci0jCi0jIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3Mu
cGF0aC5yZWxwYXRoCi0jCi0jIEl0IHNob3VsZCBiZWhhdmUgZXNzZW50aWFsbHkgdGhlIHNhbWUg
YXMgb3MucGF0aC5yZWxwYXRoKCksIGV4Y2VwdCBmb3IKLSMgcmV0dXJuaW5nIE5vbmUgb24gcGF0
aHMgbm90IGNvbnRhaW5lZCBpbiBhYnNfc3RhcnRfcGF0aC4KLWRlZiByZWxwYXRoKHBhdGgsIHN0
YXJ0X3BhdGgsIG9zX3BhdGhfYWJzcGF0aD1Ob25lLCBzZXA9Tm9uZSk6Ci0gICAgIiIiUmV0dXJu
IGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gc3RhcnQgcGF0aCwgb3IgTm9uZS4KLQotICAg
IFJldHVybnMgTm9uZSBpZiB0aGUgcGF0aCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBkaXJlY3Rv
cnkgc3RhcnRfcGF0aC4KLQotICAgIEFyZ3M6Ci0gICAgICBwYXRoOiBBbiBhYnNvbHV0ZSBvciBy
ZWxhdGl2ZSBwYXRoIHRvIGNvbnZlcnQgdG8gYSByZWxhdGl2ZSBwYXRoLgotICAgICAgc3RhcnRf
cGF0aDogVGhlIHBhdGggcmVsYXRpdmUgdG8gd2hpY2ggdGhlIGdpdmVuIHBhdGggc2hvdWxkIGJl
Ci0gICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuCi0gICAgICBvc19wYXRoX2Fic3BhdGg6IEEg
cmVwbGFjZW1lbnQgZnVuY3Rpb24gZm9yIHVuaXQgdGVzdGluZy4gIFRoaXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gc2hvdWxkIHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMganVzdCBs
aWtlCi0gICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aCgpLiAgRGVmYXVsdHMg
dG8gb3MucGF0aC5hYnNwYXRoLgotICAgICAgc2VwOiBQYXRoIHNlcGFyYXRvci4gIERlZmF1bHRz
IHRvIG9zLnBhdGguc2VwCi0KLSAgICAiIiIKLSAgICBpZiBvc19wYXRoX2Fic3BhdGggaXMgTm9u
ZToKLSAgICAgICAgb3NfcGF0aF9hYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoCi0gICAgc2VwID0g
c2VwIG9yIG9zLnNlcAotCi0gICAgIyBTaW5jZSBvc19wYXRoX2Fic3BhdGgoKSBjYWxscyBvcy5w
YXRoLm5vcm1wYXRoKCktLQotICAgICMKLSAgICAjIChzZWUgaHR0cDovL2RvY3MucHl0aG9uLm9y
Zy9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmFic3BhdGggKQotICAgICMKLSAgICAjIGl0
IGFsc28gcmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzIGFuZCBjb252ZXJ0cyBmb3J3YXJkIGFuZCBi
YWNrd2FyZAotICAgICMgc2xhc2hlcyB0byB0aGUgcHJlZmVycmVkIHNsYXNoIG9zLnNlcC4KLSAg
ICBzdGFydF9wYXRoID0gb3NfcGF0aF9hYnNwYXRoKHN0YXJ0X3BhdGgpCi0gICAgcGF0aCA9IG9z
X3BhdGhfYWJzcGF0aChwYXRoKQotCi0gICAgaWYgbm90IHBhdGgubG93ZXIoKS5zdGFydHN3aXRo
KHN0YXJ0X3BhdGgubG93ZXIoKSk6Ci0gICAgICAgICMgVGhlbiBwYXRoIGlzIG91dHNpZGUgdGhl
IGRpcmVjdG9yeSBnaXZlbiBieSBzdGFydF9wYXRoLgotICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgcmVsX3BhdGggPSBwYXRoW2xlbihzdGFydF9wYXRoKTpdCi0KLSAgICBpZiBub3QgcmVsX3Bh
dGg6Ci0gICAgICAgICMgVGhlbiB0aGUgcGF0aHMgYXJlIHRoZSBzYW1lLgotICAgICAgICBwYXNz
Ci0gICAgZWxpZiByZWxfcGF0aFswXSA9PSBzZXA6Ci0gICAgICAgICMgSXQgaXMgcHJvYmFibHkg
c3VmZmljaWVudCB0byByZW1vdmUganVzdCB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gICAgICAgICMg
c2luY2Ugb3MucGF0aC5ub3JtcGF0aCgpIGNvbGxhcHNlcyBzZXBhcmF0b3JzLCBidXQgd2UgdXNl
Ci0gICAgICAgICMgbHN0cmlwKCkganVzdCB0byBiZSBzdXJlLgotICAgICAgICByZWxfcGF0aCA9
IHJlbF9wYXRoLmxzdHJpcChzZXApCi0gICAgZWxzZToKLSAgICAgICAgIyBXZSBhcmUgaW4gdGhl
IGNhc2UgdHlwaWZpZWQgYnkgdGhlIGZvbGxvd2luZyBleGFtcGxlOgotICAgICAgICAjCi0gICAg
ICAgICMgc3RhcnRfcGF0aCA9ICIvdG1wL2ZvbyIKLSAgICAgICAgIyBwYXRoID0gIi90bXAvZm9v
YmFyIgotICAgICAgICAjIHJlbF9wYXRoID0gImJhciIKLSAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgIHJldHVybiByZWxfcGF0aApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL29zcGF0aF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9vc3BhdGhfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQ4NGMyYzY0Y2NiMTE5YzJjNTYzOTU1M2IxMWJmODJkNWZmMjU4YTIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL29zcGF0aF91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0x
LDYyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9u
ZWtAd2Via2l0Lm9yZykKLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotIiIiVW5pdCB0ZXN0cyBmb3Igb3NwYXRoLnB5LiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCB1
bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3NwYXRoIGltcG9ydCByZWxw
YXRoCi0KLQotIyBNYWtlIHN1cmUgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MgYXJlIHBsYXRmb3Jt
IGluZGVwZW5kZW50LgotY2xhc3MgUmVsUGF0aFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0g
ICAgIiIiVGVzdHMgcmVscGF0aCgpLiIiIgotCi0gICAgb3NfcGF0aF9hYnNwYXRoID0gbGFtYmRh
IHNlbGYsIHBhdGg6IHBhdGgKLQotICAgIGRlZiBfcmVsX3BhdGgoc2VsZiwgcGF0aCwgYWJzX3N0
YXJ0X3BhdGgpOgotICAgICAgICByZXR1cm4gcmVscGF0aChwYXRoLCBhYnNfc3RhcnRfcGF0aCwg
c2VsZi5vc19wYXRoX2Fic3BhdGgpCi0KLSAgICBkZWYgdGVzdF9zYW1lX3BhdGgoc2VsZik6Ci0g
ICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIldlYktpdCIsICJXZWJLaXQiKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWxfcGF0aCwgIiIpCi0KLSAgICBkZWYgdGVzdF9sb25n
X3JlbF9wYXRoKHNlbGYpOgotICAgICAgICBzdGFydF9wYXRoID0gIldlYktpdCIKLSAgICAgICAg
ZXhwZWN0ZWRfcmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oInRlc3QiLCAiRm9vLnR4dCIpCi0gICAg
ICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRfcGF0aCwgZXhwZWN0ZWRfcmVsX3BhdGgpCi0K
LSAgICAgICAgcmVsX3BhdGggPSBzZWxmLl9yZWxfcGF0aChwYXRoLCBzdGFydF9wYXRoKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9yZWxfcGF0aCwgcmVsX3BhdGgpCi0KLSAg
ICBkZWYgdGVzdF9ub25lX3JlbF9wYXRoKHNlbGYpOgotICAgICAgICAiIiJUZXN0IF9yZWxfcGF0
aCgpIHdpdGggTm9uZSByZXR1cm4gdmFsdWUuIiIiCi0gICAgICAgIHN0YXJ0X3BhdGggPSAiV2Vi
S2l0IgotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCJvdGhlcl9kaXIiLCAiZm9vLnR4dCIp
Ci0KLSAgICAgICAgcmVsX3BhdGggPSBzZWxmLl9yZWxfcGF0aChwYXRoLCBzdGFydF9wYXRoKQot
ICAgICAgICBzZWxmLmFzc2VydFRydWUocmVsX3BhdGggaXMgTm9uZSkKLQotICAgICAgICByZWxf
cGF0aCA9IHNlbGYuX3JlbF9wYXRoKCJUb29scyIsICJXZWJLaXQiKQotICAgICAgICBzZWxmLmFz
c2VydFRydWUocmVsX3BhdGggaXMgTm9uZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wYXRoLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3BhdGgucHkKaW5kZXggMDk3ODdkN2U4MmRkYWE0NWM4MDIzZTZkOTBiYzBhMGEw
NTFhNDU3Yy4uYjdhZDM3MjNhMzA2MDA2NDk3MDY0ZWQ3ZWY4Zjk0ZDRlMTA4ZWE3NCAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BhdGgucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BhdGgucHkKQEAgLTI3LDcgKzI3
LDYgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAogIiIiZ2VuZXJpYyByb3V0aW5lcyB0byBjb252ZXJ0IHBs
YXRmb3JtLXNwZWNpZmljIHBhdGhzIHRvIFVSSXMuIiIiCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0
IHdpdGhfc3RhdGVtZW50CiAKIGltcG9ydCBhdGV4aXQKIGltcG9ydCBzdWJwcm9jZXNzCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi90aHJlYWQvdGhyZWFkZWRtZXNz
YWdlcXVldWUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi90aHJlYWQvdGhyZWFk
ZWRtZXNzYWdlcXVldWUucHkKaW5kZXggMTdiNjI3NzNjZGJmMzQxMjA0OTczN2U0YWRhN2U4YjIz
NjgyOTYxZi4uY2NjMjg3MGE5YjM3Y2U5NjBjYzI2NzJmNzQ3ODNiMTUwYjA3ZjMzNSAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdGhyZWFkL3RocmVhZGVkbWVzc2Fn
ZXF1ZXVlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3RocmVhZC90aHJl
YWRlZG1lc3NhZ2VxdWV1ZS5weQpAQCAtMjYsNyArMjYsNiBAQAogIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogCiBp
bXBvcnQgdGhyZWFkaW5nCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CmluZGV4IGNiMjU1MmNlNWVhMDY2
MWI4ZGI1MmEyZDQwYjM2NDk4ZjA2Njg1MjEuLmJhYWYzOGYzMTRhYjk1YjE3NjJkMzBiODQyNWY4
OTRjZjk4NDYxZDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpAQCAtMzUsNyArMzUsNiBAQCBvYmpl
Y3RzIHRvIHRoZSBNYW5hZ2VyLiBUaGUgTWFuYWdlciB0aGVuIGFnZ3JlZ2F0ZXMgdGhlIFRlc3RG
YWlsdXJlcyB0bwogY3JlYXRlIGEgZmluYWwgcmVwb3J0LgogIiIiCiAKLWZyb20gX19mdXR1cmVf
XyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CmluZGV4IGU4YTUx
MTRhYmUzMTQ1NGFkZmIxZjNmNjM4MTAwYzQzZmM5MGY0M2EuLjM3ZTNhZTYzZDRjZDJjY2Y0NGNk
YmM3ZmM5Y2Y5OWNmZmJkY2ExZTIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dv
cmtlcl9icm9rZXIucHkKQEAgLTQ2LDExICs0Niw3IEBAIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0
IFF1ZXVlCiBpbXBvcnQgc3lzCiAKLSMgSGFuZGxlIFB5dGhvbiA8IDIuNiB3aGVyZSBtdWx0aXBy
b2Nlc3NpbmcgaXNuJ3QgYXZhaWxhYmxlLgotdHJ5OgotICAgIGltcG9ydCBtdWx0aXByb2Nlc3Np
bmcKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBtdWx0aXByb2Nlc3NpbmcgPSBOb25lCitpbXBv
cnQgbXVsdGlwcm9jZXNzaW5nCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZmFj
dG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRy
b2xsZXJzIGltcG9ydCBtZXNzYWdlX2Jyb2tlcgpAQCAtOTUsNyArOTEsNyBAQCBkZWYgZ2V0KHBv
cnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKICAgICBpZiB3b3JrZXJfbW9kZWwg
PT0gJ2lubGluZSc6CiAgICAgICAgIHF1ZXVlX2NsYXNzID0gUXVldWUuUXVldWUKICAgICAgICAg
bWFuYWdlcl9jbGFzcyA9IF9JbmxpbmVNYW5hZ2VyCi0gICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0g
J3Byb2Nlc3NlcycgYW5kIG11bHRpcHJvY2Vzc2luZzoKKyAgICBlbGlmIHdvcmtlcl9tb2RlbCA9
PSAncHJvY2Vzc2VzJzoKICAgICAgICAgcXVldWVfY2xhc3MgPSBtdWx0aXByb2Nlc3NpbmcuUXVl
dWUKICAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9NdWx0aVByb2Nlc3NNYW5hZ2VyCiAgICAgZWxz
ZToKQEAgLTI0MCwzMiArMjM2LDMwIEBAIGNsYXNzIF9JbmxpbmVXb3JrZXJDb25uZWN0aW9uKF9X
b3JrZXJDb25uZWN0aW9uKToKICAgICAgICAgcmFpc2UgZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFd
LCBleGNfaW5mb1syXQogCiAKLWlmIG11bHRpcHJvY2Vzc2luZzoKLQotICAgIGNsYXNzIF9Qcm9j
ZXNzKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHdvcmtlcl9jb25uZWN0aW9uLCBwbGF0Zm9ybV9uYW1lLCBvcHRpb25zLCBjbGllbnQpOgotICAg
ICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZikKLSAgICAgICAg
ICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KLSAgICAgICAg
ICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1lCi0gICAgICAgICAgICBzZWxm
Ll9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICAgICAgc2VsZi5fY2xpZW50ID0gY2xpZW50Ci0K
LSAgICAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRp
b25zCi0gICAgICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBnZXQgdGhlIFBvcnRGYWN0b3J5
IGZyb20gdGhlIEhvc3QuCi0gICAgICAgICAgICBwb3J0X29iaiA9IFBvcnRGYWN0b3J5KCkuZ2V0
KHNlbGYuX3BsYXRmb3JtX25hbWUsIG9wdGlvbnMpCi0KLSAgICAgICAgICAgICMgVGhlIHVuaXgg
bXVsdGlwcm9jZXNzaW5nIGltcGxlbWVudGF0aW9uIGNsb25lcyB0aGUKLSAgICAgICAgICAgICMg
bG9nIGhhbmRsZXIgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzZXMsCi0gICAg
ICAgICAgICAjIGJ1dCB0aGUgd2luIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QuCi0gICAgICAgICAg
ICBjb25maWd1cmVfbG9nZ2luZyA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykKLQotICAgICAg
ICAgICAgIyBGSVhNRTogdGhpcyB3b24ndCB3b3JrIGlmIHRoZSBjYWxsaW5nIHByb2Nlc3MgaXMg
bG9nZ2luZwotICAgICAgICAgICAgIyBzb21ld2hlcmUgb3RoZXIgdGhhbiBzeXMuc3RkZXJyIGFu
ZCBzeXMuc3Rkb3V0LCBidXQgSSdtIG5vdCBzdXJlCi0gICAgICAgICAgICAjIGlmIHRoaXMgd2ls
bCBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZS4KLSAgICAgICAgICAgIHByaW50ZXIgPSBwcmludGlu
Zy5QcmludGVyKHBvcnRfb2JqLCBvcHRpb25zLCBzeXMuc3RkZXJyLCBzeXMuc3Rkb3V0LCBjb25m
aWd1cmVfbG9nZ2luZykKLSAgICAgICAgICAgIHNlbGYuX2NsaWVudC5ydW4ocG9ydF9vYmopCi0g
ICAgICAgICAgICBwcmludGVyLmNsZWFudXAoKQorY2xhc3MgX1Byb2Nlc3MobXVsdGlwcm9jZXNz
aW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwg
cGxhdGZvcm1fbmFtZSwgb3B0aW9ucywgY2xpZW50KToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5n
LlByb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24g
PSB3b3JrZXJfY29ubmVjdGlvbgorICAgICAgICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0gcGxhdGZv
cm1fbmFtZQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9j
bGllbnQgPSBjbGllbnQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBz
ZWxmLl9vcHRpb25zCisgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIGdldCB0aGUgUG9ydEZh
Y3RvcnkgZnJvbSB0aGUgSG9zdC4KKyAgICAgICAgcG9ydF9vYmogPSBQb3J0RmFjdG9yeSgpLmdl
dChzZWxmLl9wbGF0Zm9ybV9uYW1lLCBvcHRpb25zKQorCisgICAgICAgICMgVGhlIHVuaXggbXVs
dGlwcm9jZXNzaW5nIGltcGxlbWVudGF0aW9uIGNsb25lcyB0aGUKKyAgICAgICAgIyBsb2cgaGFu
ZGxlciBjb25maWd1cmF0aW9uIGludG8gdGhlIGNoaWxkIHByb2Nlc3NlcywKKyAgICAgICAgIyBi
dXQgdGhlIHdpbiBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0LgorICAgICAgICBjb25maWd1cmVfbG9n
Z2luZyA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykKKworICAgICAgICAjIEZJWE1FOiB0aGlz
IHdvbid0IHdvcmsgaWYgdGhlIGNhbGxpbmcgcHJvY2VzcyBpcyBsb2dnaW5nCisgICAgICAgICMg
c29tZXdoZXJlIG90aGVyIHRoYW4gc3lzLnN0ZGVyciBhbmQgc3lzLnN0ZG91dCwgYnV0IEknbSBu
b3Qgc3VyZQorICAgICAgICAjIGlmIHRoaXMgd2lsbCBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZS4K
KyAgICAgICAgcHJpbnRlciA9IHByaW50aW5nLlByaW50ZXIocG9ydF9vYmosIG9wdGlvbnMsIHN5
cy5zdGRlcnIsIHN5cy5zdGRvdXQsIGNvbmZpZ3VyZV9sb2dnaW5nKQorICAgICAgICBzZWxmLl9j
bGllbnQucnVuKHBvcnRfb2JqKQorICAgICAgICBwcmludGVyLmNsZWFudXAoKQogCiAKIGNsYXNz
IF9NdWx0aVByb2Nlc3NXb3JrZXJDb25uZWN0aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21h
bmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5w
eQppbmRleCBlODA3NjVhOTkzOWJiOWQ2NTVhNWE4MTU5NjkxM2I4YmE1ZDhiZWRlLi4wOTk0MjFm
ZWU2ZjNlNDU3ZTMyY2JhYWFkNDVhY2UzOTQ3NzAzMDk2IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9r
ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0zMSwxMSAr
MzEsNyBAQCBpbXBvcnQgUXVldWUKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi10cnk6
Ci0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIG11
bHRpcHJvY2Vzc2luZyA9IE5vbmUKLQoraW1wb3J0IG11bHRpcHJvY2Vzc2luZwogCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKIGZyb20gd2Via2l0cHku
Y29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKQEAgLTEyOCwxMCArMTI0LDcgQEAgY2xh
c3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGlmIHN5cy5wbGF0
Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAg
ICAgaWYgbXVsdGlwcm9jZXNzaW5nOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2Vf
YnJva2VyKHNlbGYsICdwcm9jZXNzZXMnKSBpcyBub3QgTm9uZSkKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ha2VfYnJva2VyLCBzZWxm
LCAncHJvY2Vzc2VzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYs
ICdwcm9jZXNzZXMnKSBpcyBub3QgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2dldF9fdW5rbm93bihz
ZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFrZV9icm9rZXIs
IHNlbGYsICd1bmtub3duJykKQEAgLTIwNSw3ICsxOTgsNyBAQCBjbGFzcyBfVGVzdHNNaXhpbihv
YmplY3QpOgogCiAKICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDUyMC4KLWlmIG11bHRpcHJvY2Vzc2luZyBhbmQgc3lzLnBsYXRmb3JtIG5vdCBpbiAo
J2N5Z3dpbicsICd3aW4zMicpOgoraWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ2N5Z3dpbicsICd3
aW4zMicpOgogCiAgICAgY2xhc3MgTXVsdGlQcm9jZXNzQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4s
IHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvdGVzdF9l
eHBlY3RhdGlvbnNfZWRpdG9yLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvdGVzdF9leHBlY3RhdGlvbnNfZWRpdG9yLnB5CmluZGV4IDFiMjE4ODM2
MjEyMGQzMjQwYzhkYmZkMTgyN2I1MzYxODU4NjEyN2UuLjdmMTk5ZGZjNGNlMTc5ZTg2ZmY2MTJk
ZWM0NTcyZjlhMjhlNTgwMWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3Rlc3RfZXhwZWN0YXRpb25zX2VkaXRvci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy90ZXN0X2V4cGVj
dGF0aW9uc19lZGl0b3IucHkKQEAgLTM1LDExICszNSw3IEBAIGltcG9ydCBpdGVydG9vbHMKIGlt
cG9ydCBsb2dnaW5nCiBpbXBvcnQgcmUKIAotdHJ5OgotICAgIGltcG9ydCBqc29uCi1leGNlcHQg
SW1wb3J0RXJyb3I6Ci0gICAgIyBweXRob24gMi41IGNvbXBhdGliaWxpdHkKLSAgICBpbXBvcnQg
d2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIGpzb24KK2ltcG9ydCBqc29uCiAKIGZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0
IFRlc3RDb25maWd1cmF0aW9uLCBUZXN0Q29uZmlndXJhdGlvbkNvbnZlcnRlcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
anNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKaW5kZXggY2Iz
ZDIzZGRjYjlhZTdlMTcxYjFiODNmYzI5NDM1ZDYzZGE3NzI5Ni4uZmQyMDliMjQ3NjhkNTYwMjlk
NzJlMjlmMmM3NDU5ZWRiMjIwYjE4NiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0zNiwxMSArMzYsNyBAQCBpbXBvcnQgeG1sLmRv
bS5taW5pZG9tCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCB0ZXN0X3Jlc3VsdHNfdXBsb2FkZXIKIAotdHJ5OgotICAgIGltcG9ydCBqc29uCi1leGNl
cHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBweXRob24gMi41IGNvbXBhdGliaWxpdHkKLSAgICBpbXBv
cnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIGpzb24KK2ltcG9ydCBqc29uCiAK
ICMgQSBKU09OIHJlc3VsdHMgZ2VuZXJhdG9yIGZvciBnZW5lcmljIHRlc3RzLgogIyBGSVhNRTog
bW92ZSB0aGlzIGNvZGUgb3V0IG9mIHRoZSBsYXlvdXRfcGFja2FnZSBkaXJlY3RvcnkuCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91
bml0dGVzdC5weQppbmRleCA2YWRiZjk0MTQ0MmFlMGFiNWI5NDg1YWUyNjY5MTJiZjA5MmMwMTBl
Li5kMzQ1NmIxOTE3ZGE4NzZmMzA3NDMzZmZhMTExMmIwNzkxMTU0ZGExIDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jl
c3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRl
c3QucHkKQEAgLTI4LDYgKzI4LDcgQEAKIAogIiIiVW5pdCB0ZXN0cyBmb3IganNvbl9yZXN1bHRz
X2dlbmVyYXRvci5weS4iIiIKIAoraW1wb3J0IGpzb24KIGltcG9ydCB1bml0dGVzdAogaW1wb3J0
IG9wdHBhcnNlCiBpbXBvcnQgcmFuZG9tCkBAIC0zNyw3ICszOCw3IEBAIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9y
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRp
b25zCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCB0ZXN0CiBmcm9tIHdl
YmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawotZnJvbSB3ZWJraXRweS50aGlyZHBh
cnR5IGltcG9ydCBzaW1wbGVqc29uCisKIAogY2xhc3MgSlNPTkdlbmVyYXRvclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTIyMyw3ICsyMjQsNyBAQCBj
bGFzcyBKU09OR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgfQog
ICAgICAgICB9CiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW1wbGVqc29uLmR1bXBzKHRy
aWUpLCBzaW1wbGVqc29uLmR1bXBzKGV4cGVjdGVkX3RyaWUpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGpzb24uZHVtcHModHJpZSksIGpzb24uZHVtcHMoZXhwZWN0ZWRfdHJpZSkpCiAKIAog
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X3Jlc3VsdHNfdXBsb2FkZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3Jlc3VsdHNfdXBsb2FkZXIucHkKaW5k
ZXggMDMzYzhjNjNlYTQxN2JkMTQxMDg2YzBmOTM1NjIzZTRiMmE4ZWU5My4uNGQ2MTI5ODlkMzMx
MTY2YmMzODE4N2E3NDZjNzQyYzM3ODAwZjkzNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9yZXN1bHRzX3VwbG9hZGVy
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfcmVzdWx0c191cGxvYWRlci5weQpAQCAtMjcsNyArMjcsNiBAQAogIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRl
bWVudAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgbWltZXR5cGVzCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9jb25maWd1cmF0aW9u
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfY29u
ZmlndXJhdGlvbi5weQppbmRleCBlMDVjMzQzOGY3OTIzY2UxNzI3Y2U5MTNiNDEwZTY0Y2IzZWQy
MmIxLi4yYjBmMGJiOTAzY2MzYjk2ZTE2NWQ4NjRkYzViZjg3OWRiNTM5ZjE2IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9jb25maWd1
cmF0aW9uLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVs
cy90ZXN0X2NvbmZpZ3VyYXRpb24ucHkKQEAgLTI3LDYgKzI3LDggQEAKICMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICIiIlJlcHJlc2VudGF0aW9uIG9mIGEgbGF5b3V0IHRlc3QgY29uZmlndXJhdGlvbi4iIiIKIAor
aW1wb3J0IGl0ZXJ0b29scworCiAKIGNsYXNzIFRlc3RDb25maWd1cmF0aW9uKG9iamVjdCk6CiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24sIGFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZSwg
Z3JhcGhpY3NfdHlwZSk6CkBAIC0xOTgsMjYgKzIwMCw2IEBAIGNsYXNzIFRlc3RDb25maWd1cmF0
aW9uQ29udmVydGVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAtPSBqdW5r
X3NwZWNpZmllcl9zZXQKICAgICAgICAgICAgIHNwZWNpZmllcnNfbGlzdC5hcHBlbmQoZnJvemVu
c2V0KHZhbHVlcykpCiAKLSAgICAgICAgIyBGSVhNRTogUmVwbGFjZSB3aXRoIGl0ZXJpdG9vbHMu
Y29tYmluYXRpb25zIHdoZW4gd2Ugb2Jzb2xldGUgUHl0aG9uIDIuNS4KLSAgICAgICAgZGVmIGNv
bWJpbmF0aW9ucyhpdGVyYWJsZSwgcik6Ci0gICAgICAgICAgICAiIiJUaGlzIGZ1bmN0aW9uIGlz
IGJvcnJvd2VkIHZlcmJhdGltIGZyb20gaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2l0
ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5jb21iaW5hdGlvbnMuIiIiCi0gICAgICAgICAgICBwb29s
ID0gdHVwbGUoaXRlcmFibGUpCi0gICAgICAgICAgICBuID0gbGVuKHBvb2wpCi0gICAgICAgICAg
ICBpZiByID4gbjoKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGluZGljZXMg
PSByYW5nZShyKQotICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRp
Y2VzKQotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiBy
ZXZlcnNlZChyYW5nZShyKSk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGluZGljZXNbaV0gIT0g
aSArIG4gLSByOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBpbmRp
Y2VzW2ldICs9IDEKLSAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShpICsgMSwgcik6Ci0g
ICAgICAgICAgICAgICAgICAgIGluZGljZXNbal0gPSBpbmRpY2VzW2ogLSAxXSArIDEKLSAgICAg
ICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCi0KICAgICAg
ICAgZGVmIGludGVyc2VjdF9jb21iaW5hdGlvbihjb21iaW5hdGlvbik6CiAgICAgICAgICAgICBy
ZXR1cm4gcmVkdWNlKHNldC5pbnRlcnNlY3Rpb24sIFtzZXQoc3BlY2lmaWVycykgZm9yIHNwZWNp
ZmllcnMgaW4gY29tYmluYXRpb25dKQogCkBAIC0yMjcsNyArMjA5LDcgQEAgY2xhc3MgVGVzdENv
bmZpZ3VyYXRpb25Db252ZXJ0ZXIob2JqZWN0KToKICAgICAgICAgZGVmIHRyeV9jb2xsYXBzaW5n
KHNpemUsIGNvbGxhcHNpbmdfc2V0cyk6CiAgICAgICAgICAgICBpZiBsZW4oc3BlY2lmaWVyc19s
aXN0KSA8IHNpemU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBm
b3IgY29tYmluYXRpb24gaW4gY29tYmluYXRpb25zKHNwZWNpZmllcnNfbGlzdCwgc2l6ZSk6Cisg
ICAgICAgICAgICBmb3IgY29tYmluYXRpb24gaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhzcGVj
aWZpZXJzX2xpc3QsIHNpemUpOgogICAgICAgICAgICAgICAgIGlmIHN5bW1ldHJpY19kaWZmZXJl
bmNlKGNvbWJpbmF0aW9uKSBpbiBjb2xsYXBzaW5nX3NldHM6CiAgICAgICAgICAgICAgICAgICAg
IGZvciBpdGVtIGluIGNvbWJpbmF0aW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lm
aWVyc19saXN0LnJlbW92ZShpdGVtKQpAQCAtMjQ0LDcgKzIyNiw3IEBAIGNsYXNzIFRlc3RDb25m
aWd1cmF0aW9uQ29udmVydGVyKG9iamVjdCk6CiAgICAgICAgIGRlZiB0cnlfYWJicmV2aWF0aW5n
KCk6CiAgICAgICAgICAgICBpZiBsZW4oc3BlY2lmaWVyc19saXN0KSA8IDI6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBmb3IgY29tYmluYXRpb24gaW4gY29tYmlu
YXRpb25zKHNwZWNpZmllcnNfbGlzdCwgMik6CisgICAgICAgICAgICBmb3IgY29tYmluYXRpb24g
aW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhzcGVjaWZpZXJzX2xpc3QsIDIpOgogICAgICAgICAg
ICAgICAgIGZvciBjb2xsYXBzaW5nX3NldCBpbiBjb2xsYXBzaW5nX3NldHM6CiAgICAgICAgICAg
ICAgICAgICAgIGRpZmYgPSBzeW1tZXRyaWNfZGlmZmVyZW5jZShjb21iaW5hdGlvbikKICAgICAg
ICAgICAgICAgICAgICAgaWYgZGlmZiA8PSBjb2xsYXBzaW5nX3NldDoKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9u
cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4
cGVjdGF0aW9ucy5weQppbmRleCA1M2IzZDc3ZTQwOTg1YTY1Mzg3YTc4OTMxZjg3NjNhYmMyYmE3
NTJjLi5mNTMwZWE1MGUwMmVkZWYzNzk3ZTU5Y2EzN2Y1MGQzMGY2ZGI0YjRiIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3Rh
dGlvbnMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxz
L3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC0zNSwxMSArMzUsNyBAQCBpbXBvcnQgaXRlcnRvb2xz
CiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCiAKLXRyeToKLSAgICBpbXBvcnQganNvbgotZXhj
ZXB0IEltcG9ydEVycm9yOgotICAgICMgcHl0aG9uIDIuNSBjb21wYXRpYmlsaXR5Ci0gICAgaW1w
b3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuc2ltcGxlanNvbiBhcyBqc29uCitpbXBvcnQganNvbgog
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGlt
cG9ydCBUZXN0Q29uZmlndXJhdGlvbiwgVGVzdENvbmZpZ3VyYXRpb25Db252ZXJ0ZXIKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4
IDJlNDlhNjYwNzEyMzI2MDZjZGYyYmQ1YWM0YmU4NDZkMzViYzE5ZDUuLjIwZTY0Mzc5ZTRlYTRj
Yjg4ODk0MzU5ZTgzNDBlNTcwMTA1MDIyNDMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTMwLDcgKzMwLDYgQEAKICIiIkFic3Ry
YWN0IGJhc2UgY2xhc3Mgb2YgUG9ydC1zcGVjaWZpYyBlbnRyeXBvaW50cyBmb3IgdGhlIGxheW91
dCB0ZXN0cwogdGVzdCBpbmZyYXN0cnVjdHVyZSAodGhlIFBvcnQgYW5kIERyaXZlciBjbGFzc2Vz
KS4iIiIKIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogCiBpbXBvcnQg
Y2dpCiBpbXBvcnQgZGlmZmxpYgpAQCAtNDEsMTIgKzQwLDYgQEAgZnJvbSB3ZWJraXRweS5jb21t
b24uY2hlY2tvdXQuc2NtIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQogZnJvbSB3ZWJraXRweS5j
b21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiAKIAotIyBIYW5kbGUgUHl0aG9uIDwgMi42
IHdoZXJlIG11bHRpcHJvY2Vzc2luZyBpc24ndCBhdmFpbGFibGUuCi10cnk6Ci0gICAgaW1wb3J0
IG11bHRpcHJvY2Vzc2luZwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIG11bHRpcHJvY2Vzc2lu
ZyA9IE5vbmUKLQogZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IHN5c3RlbQogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d1dGlscwogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtIGltcG9ydCBwYXRoCkBAIC0xNDUsNyArMTM4LDYgQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogCiAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCdjb25maWd1cmF0aW9uJywgc2Vs
Zi5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSkKICAgICAgICAgc2VsZi5fdGVzdF9jb25maWd1cmF0
aW9uID0gTm9uZQotICAgICAgICBzZWxmLl9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlID0g
KG11bHRpcHJvY2Vzc2luZyBpcyBub3QgTm9uZSkKICAgICAgICAgc2VsZi5fcmVzdWx0c19kaXJl
Y3RvcnkgPSBOb25lCiAKICAgICBkZWYgd2RpZmZfYXZhaWxhYmxlKHNlbGYpOgpAQCAtMTYzLDkg
KzE1NSw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1
dGl2ZS5jcHVfY291bnQoKQogCiAgICAgZGVmIGRlZmF1bHRfd29ya2VyX21vZGVsKHNlbGYpOgot
ICAgICAgICBpZiBzZWxmLl9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgotICAgICAgICAg
ICAgcmV0dXJuICdwcm9jZXNzZXMnCi0gICAgICAgIHJldHVybiAnaW5saW5lJworICAgICAgICBy
ZXR1cm4gJ3Byb2Nlc3NlcycKIAogICAgIGRlZiBiYXNlbGluZV9wYXRoKHNlbGYpOgogICAgICAg
ICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0byBzdG9yZSBu
ZXcgYmFzZWxpbmVzIGluIGZvciB0aGlzIHBvcnQuIiIiCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CmluZGV4IDk5
ZTQ0MzdkZWMyZDQ1OGI4MTJhMjgxN2U5MDM2NjRhZmUzMDkwODQuLjUzOGU3MDQ4M2VmMzI0OTQz
MDJlNGMwODIxMzM4NGU1M2ZmYzFhOTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CkBAIC0xNDMsMTMgKzE0
Myw2IEBAIGNsYXNzIENocm9taXVtTWFjUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogCiAg
ICAgICAgIHJldHVybiByZXN1bHQKIAotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3Nlcyhz
ZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX211bHRpcHJvY2Vzc2luZ19pc19hdmFpbGFibGU6
Ci0gICAgICAgICAgICAjIFJ1bm5pbmcgbXVsdGlwbGUgdGhyZWFkcyBpbiBNYWMgUHl0aG9uIGlz
IHVuc3RhYmxlIChTZWUKLSAgICAgICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4NTUzIGZvciBtb3JlIGluZm8pLgotICAgICAgICAgICAgcmV0dXJuIDEK
LSAgICAgICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtUG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nl
c3NlcyhzZWxmKQotCiAgICAgIwogICAgICMgUFJPVEVDVEVEIE1FVEhPRFMKICAgICAjCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5Cmlu
ZGV4IDA4NTM0NzQ2NjNjMjMxZmVmMTgxY2M3OWM1MDYxMWQ5MDQzYWY2MTMuLjdkZGI0N2I4YWMz
ZGZlY2IxMmRlZWY2ZWM3MTMwNzVjM2E5MTRiYzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5CkBAIC00NCw3ICs0NCw2IEBACiAg
ICBUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gbW9kaWZpZXMgdGhlIHRlc3QgZXhwZWN0YXRpb25z
IHNvIHRoYXQgYWxsCiAgICB0ZXN0cyBhcmUgZWl0aGVyIFNLSVBQRUQgb3IgZXhwZWN0ZWQgdG8g
UEFTUy4iIiIKIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogCiBpbXBv
cnQgb3MKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQppbmRleCA3OWY3NmExOTYzY2NjYmZj
Njg2Y2UxZTAwMDdkNWUwNDljNDQ5YmQwLi5lZTUzMWIzZmViNzM0Mjk5MWRiNzJiYzQ3OWJmNWM5
NTlmMzIzMzBjIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CkBAIC0zNSwxMiArMzUsNiBAQCBpbXBvcnQg
c3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKLSMgSGFuZGxlIFB5dGhvbiA8IDIu
NiB3aGVyZSBtdWx0aXByb2Nlc3NpbmcgaXNuJ3QgYXZhaWxhYmxlLgotdHJ5OgotICAgIGltcG9y
dCBtdWx0aXByb2Nlc3NpbmcKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBtdWx0aXByb2Nlc3Np
bmcgPSBOb25lCi0KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0
dHBfc2VydmVyX2Jhc2UKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1f
bW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KQEAgLTc1LDEwICs2OSw3IEBAIGNsYXNzIFBvcnRU
ZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAg
ICAgICAgcmV0dXJuCiAKLSAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nOgotICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1bHRfd29ya2VyX21vZGVsKCksICdwcm9jZXNzZXMn
KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1
bHRfd29ya2VyX21vZGVsKCksICdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBv
cnQuZGVmYXVsdF93b3JrZXJfbW9kZWwoKSwgJ3Byb2Nlc3NlcycpCiAKICAgICBkZWYgdGVzdF9k
cml2ZXJfY21kX2xpbmUoc2VsZik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZl
cl9wcm9jZXNzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9z
ZXJ2ZXJfcHJvY2Vzcy5weQppbmRleCA1YWY2MzRkY2NjNjhkMjE2Y2IxYWMzNmI5ZjMzNTVlYjdk
ODA5MmQwLi5lYzZlM2YxNDEzMWNkZmYzNGMzOTE2ZmI5YzNjNTRjYjYzM2M5ZWRhIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2Vy
dmVyX3Byb2Nlc3MucHkKQEAgLTY4LDggKzY4LDggQEAgY2xhc3MgU2VydmVyUHJvY2VzczoKIAog
ICAgIGRlZiBfcmVzZXQoc2VsZik6CiAgICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCi0gICAgICAg
IHNlbGYuX291dHB1dCA9IHN0cigpICAjIGJ5dGVzYXJyYXkoKSBvbmNlIHdlIHJlcXVpcmUgUHl0
aG9uIDIuNgotICAgICAgICBzZWxmLl9lcnJvciA9IHN0cigpICAjIGJ5dGVzYXJyYXkoKSBvbmNl
IHdlIHJlcXVpcmUgUHl0aG9uIDIuNgorICAgICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBi
eXRlYXJyYXkoKSBvbmNlIHdlIHJlcXVpcmUgUHl0aG9uIDIuNgorICAgICAgICBzZWxmLl9lcnJv
ciA9IHN0cigpICAjIGJ5dGVhcnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42CiAgICAg
ICAgIHNlbGYuY3Jhc2hlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90
ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5
CmluZGV4IDE4ZTBlNDgwNGM0MTY1MmRkYjMxODIyMDJmZjE4NzIwYzdmMGMzOWQuLjI1ODQ2ZDI1
ZTM3ZjFmNmZkYmI1NTZkMWMxOGE4NjE3ZjAyM2FkYjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTI4LDcgKzI4LDYgQEAKICMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KIAogIiIiRHVtbXkgUG9ydCBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0
aW5nLiIiIgotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogCiBpbXBvcnQg
YmFzZTY0CiBpbXBvcnQgdGltZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9u
dGVzdC5weQppbmRleCA3YWI3YmRlNzkwOTA2MGRlOWQ0NTcwMmVmM2UxMWY1Mzk5MGUyOGQ0Li5h
Y2Y4ZmRmNjEzYmRiNjYwY2EzYTAyNzdjNDk5OWFiMTZkMTJkOTdiIDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0
aW9udGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQpAQCAtMzEsNyArMzEsNiBAQAogCiAiIiJV
bml0IHRlc3RzIGZvciBydW5fd2Via2l0X3Rlc3RzLiIiIgogCi1mcm9tIF9fZnV0dXJlX18gaW1w
b3J0IHdpdGhfc3RhdGVtZW50CiAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBpdGVydG9vbHMKQEAg
LTQzLDIxICs0MiwxMSBAQCBpbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGltZQogaW1wb3J0IHRocmVh
ZGluZwogaW1wb3J0IHVuaXR0ZXN0Ci0KLXRyeToKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5n
Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQotCi10cnk6
Ci0gICAgaW1wb3J0IGpzb24KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIHB5dGhvbiAyLjUg
Y29tcGF0aWJpbGl0eQotICAgIGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpzb24g
YXMganNvbgoraW1wb3J0IGpzb24KIAogIyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXgg
dGVzdC13ZWJraXRweSB0byB3b3JrIHByb3Blcmx5IG9uIGN5Z3dpbgogIyAoYnVnIDYzODQ2KS4K
LVNIT1VMRF9URVNUX1BST0NFU1NFUyA9IG11bHRpcHJvY2Vzc2luZyBhbmQgc3lzLnBsYXRmb3Jt
IG5vdCBpbiAoJ2N5Z3dpbicsICd3aW4zMicpCitTSE9VTERfVEVTVF9QUk9DRVNTRVMgPSBzeXMu
cGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJykKIAogZnJvbSB3ZWJraXRweS5jb21t
b24gaW1wb3J0IGFycmF5X3N0cmVhbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9y
dCBvdXRwdXRjYXB0dXJlCkBAIC02OSw3ICs1OCw2IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzIGltcG9ydCBydW5fd2Via2l0X3Rlc3RzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0LnRlc3QgaW1wb3J0IFRlc3RQb3J0LCBUZXN0RHJpdmVyLCB1bml0X3Rlc3RfZmlsZXN5c3Rl
bQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0X2ZpbGVzIGltcG9ydCBpc19y
ZWZlcmVuY2VfaHRtbF9maWxlCiBmcm9tIHdlYmtpdHB5LnB5dGhvbjI0LnZlcnNpb25pbmcgaW1w
b3J0IGNvbXBhcmVfdmVyc2lvbgotZnJvbSB3ZWJraXRweS50ZXN0LnNraXAgaW1wb3J0IHNraXBf
aWYKIAogCiBkZWYgcGFyc2VfYXJncyhleHRyYV9hcmdzPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZh
bHNlLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSwgbmV3X3Jlc3VsdHM9RmFsc2UsIHByaW50X25vdGhp
bmc9VHJ1ZSk6CkBAIC03MTcsOCArNzA1LDYgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoTWFpblRlc3QuaGFzX3Rlc3Rfb2ZfdHlw
ZShiYXRjaF90ZXN0c19ydW5faHR0cCwgJ2h0dHAnKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KE1haW5UZXN0Lmhhc190ZXN0X29mX3R5cGUoYmF0Y2hfdGVzdHNfcnVuX2h0dHAsICd3ZWJzb2Nr
ZXQnKSkKIAotTWFpblRlc3QgPSBza2lwX2lmKE1haW5UZXN0LCBzeXMucGxhdGZvcm0gPT0gJ2N5
Z3dpbicgYW5kIGNvbXBhcmVfdmVyc2lvbihzeXMsICcyLjYnKVswXSA8IDAsICduZXctcnVuLXdl
YmtpdC10ZXN0cyB0ZXN0cyBoYW5nIG9uIEN5Z3dpbiBQeXRob24gMi41LjInKQotCiAKIGNsYXNz
IEVuZFRvRW5kVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHBhcnNlX2Z1bGxfcmVz
dWx0cyhzZWxmLCBmdWxsX3Jlc3VsdHNfdGV4dCk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyX2Jhc2UucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyX2Jhc2Uu
cHkKaW5kZXggOGY2Yzk1NzQ4NDI4NjU0NmUxZTE3OWE0NGI5NGNlYzgzMDE2NjQ1OS4uZWUxM2My
NWMyZjdkMmVkYWVlMDYwOTc0ZjllODEyOTAzYjY4MTM3MiAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy9odHRwX3NlcnZlcl9iYXNlLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvaHR0cF9zZXJ2
ZXJfYmFzZS5weQpAQCAtMTc2LDYgKzE3Niw3IEBAIGNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIHJ1bm5pbmcgb24gJWQiICUg
cG9ydCkKICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CiAgICAgICAgICAgICAg
ICAgIyB0aGlzIGJyYW5jaCBpcyBuZWVkZWQgb24gTWFjIDEwLjUgLyBweXRob24gMi41CisgICAg
ICAgICAgICAgICAgIyBGSVhNRTogQ2FuIGl0IGJlIHJlbW92ZWQgbm93IHRoYXQgd2UgZG9uJ3Qg
c3VwcG9ydCBQeXRob24gMi41PwogICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSBub3QgaW4g
KGVycm5vLkVDT05OUkVGVVNFRCwgZXJybm8uRUNPTk5SRVNFVCk6CiAgICAgICAgICAgICAgICAg
ICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIE5PVCBydW5uaW5n
IG9uICVkOiAlcyIgJSAocG9ydCwgZSkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL21ldGVyZWRfc3RyZWFtLnB5CmluZGV4IGEzYzJk
ZjQ0MTA2OTRkMTYwZTIzMzM1ZTllNTBiZWFmMjM4ZDVhZjIuLjJlYzIxZDM4NjE5NjU1ZjU5MDUy
ZDhiOTk5MGE1N2FlM2Q5ZGJlZGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3ZpZXdzL21ldGVyZWRfc3RyZWFtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL21ldGVyZWRfc3RyZWFtLnB5CkBAIC02OSw2ICs2
OSw3IEBAIGNsYXNzIE1ldGVyZWRTdHJlYW06CiAKICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAg
ICAgICMgVGhpcyBzZWVtcyB0byBiZSBuZWVkZWQgb24gUHl0aG9uIDIuNSBmb3Igc29tZSByZWFz
b24uCisgICAgICAgICMgRklYTUU6IENhbiB0aGlzIGJlIHJlbW92ZWQgbm93IHRoYXQgd2UgZG8g
bm90IHN1cHBvcnQgUHl0aG9uIDIuNT8KICAgICAgICAgc2VsZi5fc3RyZWFtLmZsdXNoKCkKIAog
ICAgIGRlZiBfb3ZlcndyaXRlKHNlbGYsIHR4dCk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3B5dGhvbjI0L3ZlcnNpb25pbmcucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3B5dGhvbjI0L3ZlcnNpb25pbmcucHkKaW5kZXggYjIzOTIxN2RmZjA0ZDYyNTJmNTg5YmUxYzJh
NDk2M2U5ZjM1MzQ2Ny4uMjViNDMwZmU3YjkxNTU1ZjQxNGU4NzhjYmZiMGJmYzFkNDYzM2RmNSAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9weXRob24yNC92ZXJzaW9uaW5nLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcHl0aG9uMjQvdmVyc2lvbmluZy5weQpAQCAt
MzAsNyArMzAsNyBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAogIyBU
aGUgbWluaW11bSBQeXRob24gdmVyc2lvbiB0aGUgd2Via2l0cHkgcGFja2FnZSBzdXBwb3J0cy4K
LV9NSU5JTVVNX1NVUFBPUlRFRF9QWVRIT05fVkVSU0lPTiA9ICIyLjUiCitfTUlOSU1VTV9TVVBQ
T1JURURfUFlUSE9OX1ZFUlNJT04gPSAiMi42IgogCiAKIGRlZiBjb21wYXJlX3ZlcnNpb24oc3lz
bW9kdWxlPU5vbmUsIHRhcmdldF92ZXJzaW9uPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9weXRob24yNC92ZXJzaW9uaW5nX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9weXRob24yNC92ZXJzaW9uaW5nX3VuaXR0ZXN0LnB5CmluZGV4IDY5Mzll
MmQ5MmQyMGY3MGZhMTIwMWExOTgyMGI4ODA2YzU0YWZlMTcuLjg0YzkyODU3Y2M3YzNhODk2N2E1
ZWZhNmQ4YzRlMDQ4OTRmMGM3ZWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cHl0aG9uMjQvdmVyc2lvbmluZ191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3B5dGhvbjI0L3ZlcnNpb25pbmdfdW5pdHRlc3QucHkKQEAgLTU3LDcgKzU3LDcgQEAgY2xh
c3MgQ29tcGFyZVZlcnNpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9k
ZWZhdWx0X21pbmltdW1fdmVyc2lvbihzZWxmKToKICAgICAgICAgIiIiVGVzdCB0aGUgY29uZmln
dXJlZCBtaW5pbXVtIHZlcnNpb24gdGhhdCB3ZWJraXRweSBzdXBwb3J0cy4iIiIKICAgICAgICAg
KGNvbXBhcmlzb24sIGN1cnJlbnRfdmVyc2lvbiwgbWluX3ZlcnNpb24pID0gY29tcGFyZV92ZXJz
aW9uKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWluX3ZlcnNpb24sICIyLjUiKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhtaW5fdmVyc2lvbiwgIjIuNiIpCiAKICAgICBkZWYgY29t
cGFyZV92ZXJzaW9uKHNlbGYsIHRhcmdldF92ZXJzaW9uLCBjdXJyZW50X3ZlcnNpb249Tm9uZSk6
CiAgICAgICAgICIiIkNhbGwgY29tcGFyZV92ZXJzaW9uKCkuIiIiCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXJfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXJfdW5pdHRlc3QucHkKaW5kZXggNjMyODMz
NzY1ZTk2ZGQwMmM2NWVjOTUyNDdhOGRiNmRhZDUzNmQxMi4uYzJlNzE5NzhjODhmODRlNTY3NWQ1
YTFlYWNkYjlkMjE3MjQ0ZjYzMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9maWxlcmVhZGVyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvZmlsZXJlYWRlcl91bml0dGVzdC5weQpAQCAtMjIsNyArMjIsNiBAQAogCiAiIiJDb250
YWlucyB1bml0IHRlc3RzIGZvciBmaWxlcmVhZGVyLnB5LiIiIgogCi1mcm9tIF9fZnV0dXJlX18g
aW1wb3J0IHdpdGhfc3RhdGVtZW50CiAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBvcwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CmluZGV4IDgzYzAzMjM2ZGZkYjY2ODQyYzgwZWY4NjM0
MjdkZDhmNWFhZjhiMGUuLmUyZjdhYzY1Yjg2ZTg1YTU5ZWM0YTEyZDQ5ZjBmYmE1YmI4YjZlZWQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHkKQEAgLTI0LDggKzI0LDYgQEAgaW1w
b3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0ub3NwYXRoIGltcG9ydCByZWxwYXRoIGFzIF9yZWxwYXRoCi0KIAogX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBAIC05Nyw4ICs5NSw4IEBAIGRlZiBjaGFuZ2Vf
ZGlyZWN0b3J5KGNoZWNrb3V0X3Jvb3QsIHBhdGhzLCBtb2NrX29zPU5vbmUpOgogICAgICAgICAj
IHRoZSBjaGVja291dCByb290LgogICAgICAgICByZWxfcGF0aHMgPSBbXQogICAgICAgICBmb3Ig
cGF0aCBpbiBwYXRoczoKLSAgICAgICAgICAgIHJlbF9wYXRoID0gX3JlbHBhdGgocGF0aCwgY2hl
Y2tvdXRfcm9vdCkKLSAgICAgICAgICAgIGlmIHJlbF9wYXRoIGlzIE5vbmU6CisgICAgICAgICAg
ICByZWxfcGF0aCA9IG9zLnBhdGgucmVscGF0aChwYXRoLCBjaGVja291dF9yb290KQorICAgICAg
ICAgICAgaWYgcmVsX3BhdGggaXMgTm9uZSBvciByZWxfcGF0aC5zdGFydHN3aXRoKCcuLicpOgog
ICAgICAgICAgICAgICAgICMgVGhlbiB0aGUgcGF0aCBpcyBub3QgYmVsb3cgdGhlIGNoZWNrb3V0
IHJvb3QuICBTaW5jZSBhbGwKICAgICAgICAgICAgICAgICAjIHBhdGhzIHNob3VsZCBiZSBpbnRl
cnByZXRlZCByZWxhdGl2ZSB0byB0aGUgc2FtZSByb290LAogICAgICAgICAgICAgICAgICMgZG8g
bm90IGludGVycHJldCBhbnkgb2YgdGhlIHBhdGhzIGFzIHJlbGF0aXZlIHRvIHRoZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluX3VuaXR0ZXN0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluX3VuaXR0ZXN0LnB5CmluZGV4IDI4MWM2YTdj
MWE5ZDZmYTdkMzY2MWFjMmFiNmU2MjZjOWZkMDRiYTguLjFmNzA3MjM0MTliODY2Y2U3N2VhYWNj
MzJjNGI3ZDE0OTNiNjVlZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvbWFpbl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21h
aW5fdW5pdHRlc3QucHkKQEAgLTEwMywxMCArMTAzLDggQEAgY2xhc3MgQ2hhbmdlRGlyZWN0b3J5
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fY2hlY2tvdXRfcm9vdCkKIAogICAgIGRlZiB0ZXN0X3dpdGhfc2NtX3BhdGhzX3VuY29udmVy
dGlibGUoc2VsZik6Ci0gICAgICAgIHBhdGhzPVsiL1dlYktpdC9mb28xLnR4dCIsCi0gICAgICAg
ICAgICAgICAiL291dHNpZGUvZm9vMi50eHQiXQotICAgICAgICBwYXRocyA9IHNlbGYuX2NoYW5n
ZV9kaXJlY3RvcnkoY2hlY2tvdXRfcm9vdD1zZWxmLl9jaGVja291dF9yb290LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM9cGF0aHMpCisgICAgICAgIHBhdGhz
ID0gWyIvV2ViS2l0L2ZvbzEudHh0IiwgIi9vdXRzaWRlL2ZvbzIudHh0Il0KKyAgICAgICAgcGF0
aHMgPSBzZWxmLl9jaGFuZ2VfZGlyZWN0b3J5KGNoZWNrb3V0X3Jvb3Q9c2VsZi5fY2hlY2tvdXRf
cm9vdCwgcGF0aHM9cGF0aHMpCiAgICAgICAgIGxvZ19tZXNzYWdlcyA9IFsKICIiIldBUk5JTkc6
IFBhdGgtZGVwZW5kZW50IHN0eWxlIGNoZWNrcyBtYXkgbm90IHdvcmsgY29ycmVjdGx5OgogCkBA
IC0xMjAsNSArMTE4LDQgQEAgY2xhc3MgQ2hhbmdlRGlyZWN0b3J5VGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgIFNlZSB0aGUgaGVscCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm8uCiAKICIi
Il0KLSAgICAgICAgc2VsZi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgcGF0aHMsIGxvZ19tZXNzYWdl
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9kaXJlY3Rvcnkp
CisgICAgICAgIHNlbGYuX2Fzc2VydF9yZXN1bHQocGF0aHMsIHBhdGhzLCBsb2dfbWVzc2FnZXMs
IHNlbGYuX29yaWdpbmFsX2RpcmVjdG9yeSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9fX2luaXRfXy5weQppbmRleCA4ZWQ0Yzc1NGExOTgzYzQ0NDk5MTUzZDU2ZDE5YWQ2
ZWU4YzhlNDk0Li40Nzc0NTA5ZDVjOWRlYzg2MTZmNmM0YWI5ODVjYzJmZGIxMGJjNWIzIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5CkBAIC0yNCw3
ICsyNCw2IEBACiAKICIiIkF1dG9pbnN0YWxscyB0aGlyZC1wYXJ0eSBjb2RlIHJlcXVpcmVkIGJ5
IFdlYktpdC4iIiIKIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogCiBp
bXBvcnQgY29kZWNzCiBpbXBvcnQgb3MKQEAgLTg1LDIxICs4NCw4IEBAIGNsYXNzIEF1dG9pbnN0
YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9idWlsZGJv
dCgpCiAKICAgICBkZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgotICAgICAgICAjIFRoZSBt
ZWNoYW5pemUgcGFja2FnZSB1c2VzIENsaWVudEZvcm0sIGZvciBleGFtcGxlLCBpbiBfaHRtbC5w
eS4KLSAgICAgICAgIyBTaW5jZSBtZWNoYW5pemUgaW1wb3J0cyBDbGllbnRGb3JtIGluIHRoZSBm
b2xsb3dpbmcgd2F5LAotICAgICAgICAjCi0gICAgICAgICMgPiBpbXBvcnQgc2dtbGxpYiwgQ2xp
ZW50Rm9ybQotICAgICAgICAjCi0gICAgICAgICMgdGhlIHNlYXJjaCBwYXRoIG5lZWRzIHRvIGlu
Y2x1ZGUgQ2xpZW50Rm9ybS4gIFdlIHB1dCBDbGllbnRGb3JtIGluCi0gICAgICAgICMgaXRzIG93
biBkaXJlY3Rvcnkgc28gdGhhdCB3ZSBjYW4gaW5jbHVkZSBpdCBpbiB0aGUgc2VhcmNoIHBhdGgK
LSAgICAgICAgIyB3aXRob3V0IGluY2x1ZGluZyBvdGhlciBtb2R1bGVzIGFzIGEgc2lkZSBlZmZl
Y3QuCi0gICAgICAgIGNsaWVudGZvcm1fZGlyID0gc2VsZi5fZnMuam9pbihfQVVUT0lOU1RBTExF
RF9ESVIsICJjbGllbnRmb3JtIikKLSAgICAgICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcihh
cHBlbmRfdG9fc2VhcmNoX3BhdGg9VHJ1ZSwgdGFyZ2V0X2Rpcj1jbGllbnRmb3JtX2RpcikKLSAg
ICAgICAgaW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2th
Z2VzL3NvdXJjZS9DL0NsaWVudEZvcm0vQ2xpZW50Rm9ybS0wLjIuMTAuemlwIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9IkNsaWVudEZvcm0ucHkiKQotCi0gICAgICAg
IHNlbGYuX2luc3RhbGwoImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL20v
bWVjaGFuaXplL21lY2hhbml6ZS0wLjIuNC56aXAiLAotICAgICAgICAgICAgICAgICAgICAgICJt
ZWNoYW5pemUiKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwOi8vcHlwaS5weXRob24ub3Jn
L3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4yLjUudGFyLmd6IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAibWVjaGFuaXplLTAuMi41L21lY2hhbml6ZSIpCiAKICAgICBk
ZWYgX2luc3RhbGxfcGVwOChzZWxmKToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cDovL3B5
cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXA4L3BlcDgtMC41LjAudGFyLmd6I21k
NT01MTJhODE4YWY5OTc5MjkwY2Q2MTljY2U4ZTljMmUyYiIsCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS9tb2NrLnB5CmluZGV4IDAxNWMxOWU5NGE2ZjU0YTMzMzAxOGViMmQyMWY5
ODFhMGRmYTFkZTkuLmYzOGRkNGMyOTExODE2YjE3MWY0MjdhYzBjZDU4ZGEyZDIyMWZkMTcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2NrLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2NrLnB5CkBAIC0yMjQsNiArMjI0
LDcgQEAgY2xhc3MgX3BhdGNoKG9iamVjdCk6CiAKICAgICAgICAgZGVmIHBhdGNoZWQoKmFyZ3Ms
ICoqa2V5d2FyZ3MpOgogICAgICAgICAgICAgIyBkb24ndCB1c2UgYSB3aXRoIGhlcmUgKGJhY2t3
YXJkcyBjb21wYXRhYmlsaXR5IHdpdGggMi41KQorICAgICAgICAgICAgIyBGSVhNRTogV2Ugbm8g
bG9uZ2VyIHN1cHBvcnQgUHl0aG9uIDIuNSBhbmQgdGhpcyBjYW4gYmUgcmV3cml0dGVuLgogICAg
ICAgICAgICAgZXh0cmFfYXJncyA9IFtdCiAgICAgICAgICAgICBmb3IgcGF0Y2hpbmcgaW4gcGF0
Y2hlZC5wYXRjaGluZ3M6CiAgICAgICAgICAgICAgICAgYXJnID0gcGF0Y2hpbmcuX19lbnRlcl9f
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVq
c29uL0xJQ0VOU0UudHh0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBs
ZWpzb24vTElDRU5TRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkOTVmMjlj
MTcyYWFmMjU5ZmMzYWRiMDg3YjJkM2RkMDIxZjEwYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3NpbXBsZWpzb24vTElDRU5TRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1D
b3B5cmlnaHQgKGMpIDIwMDYgQm9iIElwcG9saXRvCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy
YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YK
LXRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT
b2Z0d2FyZSIpLCB0byBkZWFsIGluCi10aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg
aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi11c2UsIGNvcHksIG1v
ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxs
IGNvcGllcwotb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0
aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi1zbywgc3ViamVjdCB0byB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl
cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotY29waWVzIG9yIHN1YnN0
YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJ
REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlN
UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO
RlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdIVCBI
T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg
QVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg
T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLVNPRlRXQVJFLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vUkVBRE1FLnR4
dCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL1JFQURNRS50
eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODM3MTQ0ZGVhZjEyOTVhN2ZmNzVh
YTkxN2M1OGM1OTIwZTg5NmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vUkVB
RE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLVVSTDogaHR0cDovL3VuZGVm
aW5lZC5vcmcvcHl0aG9uLyNzaW1wbGVqc29uCi1WZXJzaW9uOiAyLjEuNgotTGljZW5zZTogTUlU
Ci1MaWNlbnNlIEZpbGU6IExJQ0VOU0UudHh0Ci0KLURlc2NyaXB0aW9uOgotc2ltcGxlanNvbiBp
cyBhIEpTT04gZW5jb2RlciBhbmQgZGVjb2RlciBmb3IgUHl0aG9uLgotCi0KLUxvY2FsIE1vZGlm
aWNhdGlvbnM6Ci1SZW1vdmVkIHVuaXQgdGVzdHMgZnJvbSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29u
L19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpz
b24vX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMGI5NTdhOWRh
NGRlZjg5YjZkYmU4YmQwMGFhMGFkYWU0MjE5MDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3Np
bXBsZWpzb24vX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MzggKzAsMCBAQAotciIi
IkpTT04gKEphdmFTY3JpcHQgT2JqZWN0IE5vdGF0aW9uKSA8aHR0cDovL2pzb24ub3JnPiBpcyBh
IHN1YnNldCBvZgotSmF2YVNjcmlwdCBzeW50YXggKEVDTUEtMjYyIDNyZCBlZGl0aW9uKSB1c2Vk
IGFzIGEgbGlnaHR3ZWlnaHQgZGF0YQotaW50ZXJjaGFuZ2UgZm9ybWF0LgotCi06bW9kOmBzaW1w
bGVqc29uYCBleHBvc2VzIGFuIEFQSSBmYW1pbGlhciB0byB1c2VycyBvZiB0aGUgc3RhbmRhcmQg
bGlicmFyeQotOm1vZDpgbWFyc2hhbGAgYW5kIDptb2Q6YHBpY2tsZWAgbW9kdWxlcy4gSXQgaXMg
dGhlIGV4dGVybmFsbHkgbWFpbnRhaW5lZAotdmVyc2lvbiBvZiB0aGUgOm1vZDpganNvbmAgbGli
cmFyeSBjb250YWluZWQgaW4gUHl0aG9uIDIuNiwgYnV0IG1haW50YWlucwotY29tcGF0aWJpbGl0
eSB3aXRoIFB5dGhvbiAyLjQgYW5kIFB5dGhvbiAyLjUgYW5kIChjdXJyZW50bHkpIGhhcwotc2ln
bmlmaWNhbnQgcGVyZm9ybWFuY2UgYWR2YW50YWdlcywgZXZlbiB3aXRob3V0IHVzaW5nIHRoZSBv
cHRpb25hbCBDCi1leHRlbnNpb24gZm9yIHNwZWVkdXBzLgotCi1FbmNvZGluZyBiYXNpYyBQeXRo
b24gb2JqZWN0IGhpZXJhcmNoaWVzOjoKLQotICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbiBhcyBq
c29uCi0gICAgPj4+IGpzb24uZHVtcHMoWydmb28nLCB7J2Jhcic6ICgnYmF6JywgTm9uZSwgMS4w
LCAyKX1dKQotICAgICdbImZvbyIsIHsiYmFyIjogWyJiYXoiLCBudWxsLCAxLjAsIDJdfV0nCi0g
ICAgPj4+IHByaW50IGpzb24uZHVtcHMoIlwiZm9vXGJhciIpCi0gICAgIlwiZm9vXGJhciIKLSAg
ICA+Pj4gcHJpbnQganNvbi5kdW1wcyh1J1x1MTIzNCcpCi0gICAgIlx1MTIzNCIKLSAgICA+Pj4g
cHJpbnQganNvbi5kdW1wcygnXFwnKQotICAgICJcXCIKLSAgICA+Pj4gcHJpbnQganNvbi5kdW1w
cyh7ImMiOiAwLCAiYiI6IDAsICJhIjogMH0sIHNvcnRfa2V5cz1UcnVlKQotICAgIHsiYSI6IDAs
ICJiIjogMCwgImMiOiAwfQotICAgID4+PiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwot
ICAgID4+PiBpbyA9IFN0cmluZ0lPKCkKLSAgICA+Pj4ganNvbi5kdW1wKFsnc3RyZWFtaW5nIEFQ
SSddLCBpbykKLSAgICA+Pj4gaW8uZ2V0dmFsdWUoKQotICAgICdbInN0cmVhbWluZyBBUEkiXScK
LQotQ29tcGFjdCBlbmNvZGluZzo6Ci0KLSAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24gYXMganNv
bgotICAgID4+PiBqc29uLmR1bXBzKFsxLDIsMyx7JzQnOiA1LCAnNic6IDd9XSwgc2VwYXJhdG9y
cz0oJywnLCc6JykpCi0gICAgJ1sxLDIsMyx7IjQiOjUsIjYiOjd9XScKLQotUHJldHR5IHByaW50
aW5nOjoKLQotICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0gICAgPj4+IHMgPSBq
c29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9JyAgICAn
KQotICAgID4+PiBwcmludCAnXG4nLmpvaW4oW2wucnN0cmlwKCkgZm9yIGwgaW4gIHMuc3BsaXRs
aW5lcygpXSkKLSAgICB7Ci0gICAgICAgICI0IjogNSwKLSAgICAgICAgIjYiOiA3Ci0gICAgfQot
Ci1EZWNvZGluZyBKU09OOjoKLQotICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0g
ICAgPj4+IG9iaiA9IFt1J2ZvbycsIHt1J2Jhcic6IFt1J2JheicsIE5vbmUsIDEuMCwgMl19XQot
ICAgID4+PiBqc29uLmxvYWRzKCdbImZvbyIsIHsiYmFyIjpbImJheiIsIG51bGwsIDEuMCwgMl19
XScpID09IG9iagotICAgIFRydWUKLSAgICA+Pj4ganNvbi5sb2FkcygnIlxcImZvb1xcYmFyIicp
ID09IHUnImZvb1x4MDhhcicKLSAgICBUcnVlCi0gICAgPj4+IGZyb20gU3RyaW5nSU8gaW1wb3J0
IFN0cmluZ0lPCi0gICAgPj4+IGlvID0gU3RyaW5nSU8oJ1sic3RyZWFtaW5nIEFQSSJdJykKLSAg
ICA+Pj4ganNvbi5sb2FkKGlvKVswXSA9PSAnc3RyZWFtaW5nIEFQSScKLSAgICBUcnVlCi0KLVNw
ZWNpYWxpemluZyBKU09OIG9iamVjdCBkZWNvZGluZzo6Ci0KLSAgICA+Pj4gaW1wb3J0IHNpbXBs
ZWpzb24gYXMganNvbgotICAgID4+PiBkZWYgYXNfY29tcGxleChkY3QpOgotICAgIC4uLiAgICAg
aWYgJ19fY29tcGxleF9fJyBpbiBkY3Q6Ci0gICAgLi4uICAgICAgICAgcmV0dXJuIGNvbXBsZXgo
ZGN0WydyZWFsJ10sIGRjdFsnaW1hZyddKQotICAgIC4uLiAgICAgcmV0dXJuIGRjdAotICAgIC4u
LgotICAgID4+PiBqc29uLmxvYWRzKCd7Il9fY29tcGxleF9fIjogdHJ1ZSwgInJlYWwiOiAxLCAi
aW1hZyI6IDJ9JywKLSAgICAuLi4gICAgIG9iamVjdF9ob29rPWFzX2NvbXBsZXgpCi0gICAgKDEr
MmopCi0gICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAotICAgID4+PiBqc29uLmxv
YWRzKCcxLjEnLCBwYXJzZV9mbG9hdD1EZWNpbWFsKSA9PSBEZWNpbWFsKCcxLjEnKQotICAgIFRy
dWUKLQotU3BlY2lhbGl6aW5nIEpTT04gb2JqZWN0IGVuY29kaW5nOjoKLQotICAgID4+PiBpbXBv
cnQgc2ltcGxlanNvbiBhcyBqc29uCi0gICAgPj4+IGRlZiBlbmNvZGVfY29tcGxleChvYmopOgot
ICAgIC4uLiAgICAgaWYgaXNpbnN0YW5jZShvYmosIGNvbXBsZXgpOgotICAgIC4uLiAgICAgICAg
IHJldHVybiBbb2JqLnJlYWwsIG9iai5pbWFnXQotICAgIC4uLiAgICAgcmFpc2UgVHlwZUVycm9y
KHJlcHIobykgKyAiIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZSIpCi0gICAgLi4uCi0gICAgPj4+
IGpzb24uZHVtcHMoMiArIDFqLCBkZWZhdWx0PWVuY29kZV9jb21wbGV4KQotICAgICdbMi4wLCAx
LjBdJwotICAgID4+PiBqc29uLkpTT05FbmNvZGVyKGRlZmF1bHQ9ZW5jb2RlX2NvbXBsZXgpLmVu
Y29kZSgyICsgMWopCi0gICAgJ1syLjAsIDEuMF0nCi0gICAgPj4+ICcnLmpvaW4oanNvbi5KU09O
RW5jb2RlcihkZWZhdWx0PWVuY29kZV9jb21wbGV4KS5pdGVyZW5jb2RlKDIgKyAxaikpCi0gICAg
J1syLjAsIDEuMF0nCi0KLQotVXNpbmcgc2ltcGxlanNvbi50b29sIGZyb20gdGhlIHNoZWxsIHRv
IHZhbGlkYXRlIGFuZCBwcmV0dHktcHJpbnQ6OgotCi0gICAgJCBlY2hvICd7Impzb24iOiJvYmoi
fScgfCBweXRob24gLW0gc2ltcGxlanNvbi50b29sCi0gICAgewotICAgICAgICAianNvbiI6ICJv
YmoiCi0gICAgfQotICAgICQgZWNobyAneyAxLjI6My40fScgfCBweXRob24gLW0gc2ltcGxlanNv
bi50b29sCi0gICAgRXhwZWN0aW5nIHByb3BlcnR5IG5hbWU6IGxpbmUgMSBjb2x1bW4gMiAoY2hh
ciAyKQotIiIiCi1fX3ZlcnNpb25fXyA9ICcyLjEuNicKLV9fYWxsX18gPSBbCi0gICAgJ2R1bXAn
LCAnZHVtcHMnLCAnbG9hZCcsICdsb2FkcycsCi0gICAgJ0pTT05EZWNvZGVyJywgJ0pTT05EZWNv
ZGVFcnJvcicsICdKU09ORW5jb2RlcicsCi0gICAgJ09yZGVyZWREaWN0JywKLV0KLQotX19hdXRo
b3JfXyA9ICdCb2IgSXBwb2xpdG8gPGJvYkByZWRpdmkuY29tPicKLQotZnJvbSBkZWNpbWFsIGlt
cG9ydCBEZWNpbWFsCi0KLWZyb20gZGVjb2RlciBpbXBvcnQgSlNPTkRlY29kZXIsIEpTT05EZWNv
ZGVFcnJvcgotZnJvbSBlbmNvZGVyIGltcG9ydCBKU09ORW5jb2RlcgotZGVmIF9pbXBvcnRfT3Jk
ZXJlZERpY3QoKToKLSAgICBpbXBvcnQgY29sbGVjdGlvbnMKLSAgICB0cnk6Ci0gICAgICAgIHJl
dHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdAotICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoK
LSAgICAgICAgaW1wb3J0IG9yZGVyZWRfZGljdAotICAgICAgICByZXR1cm4gb3JkZXJlZF9kaWN0
Lk9yZGVyZWREaWN0Ci1PcmRlcmVkRGljdCA9IF9pbXBvcnRfT3JkZXJlZERpY3QoKQotCi1kZWYg
X2ltcG9ydF9jX21ha2VfZW5jb2RlcigpOgotICAgIHRyeToKLSAgICAgICAgZnJvbSBzaW1wbGVq
c29uLl9zcGVlZHVwcyBpbXBvcnQgbWFrZV9lbmNvZGVyCi0gICAgICAgIHJldHVybiBtYWtlX2Vu
Y29kZXIKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLV9k
ZWZhdWx0X2VuY29kZXIgPSBKU09ORW5jb2RlcigKLSAgICBza2lwa2V5cz1GYWxzZSwKLSAgICBl
bnN1cmVfYXNjaWk9VHJ1ZSwKLSAgICBjaGVja19jaXJjdWxhcj1UcnVlLAotICAgIGFsbG93X25h
bj1UcnVlLAotICAgIGluZGVudD1Ob25lLAotICAgIHNlcGFyYXRvcnM9Tm9uZSwKLSAgICBlbmNv
ZGluZz0ndXRmLTgnLAotICAgIGRlZmF1bHQ9Tm9uZSwKLSAgICB1c2VfZGVjaW1hbD1GYWxzZSwK
LSkKLQotZGVmIGR1bXAob2JqLCBmcCwgc2tpcGtleXM9RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVl
LCBjaGVja19jaXJjdWxhcj1UcnVlLAotICAgICAgICBhbGxvd19uYW49VHJ1ZSwgY2xzPU5vbmUs
IGluZGVudD1Ob25lLCBzZXBhcmF0b3JzPU5vbmUsCi0gICAgICAgIGVuY29kaW5nPSd1dGYtOCcs
IGRlZmF1bHQ9Tm9uZSwgdXNlX2RlY2ltYWw9RmFsc2UsICoqa3cpOgotICAgICIiIlNlcmlhbGl6
ZSBgYG9iamBgIGFzIGEgSlNPTiBmb3JtYXR0ZWQgc3RyZWFtIHRvIGBgZnBgYCAoYQotICAgIGBg
LndyaXRlKClgYC1zdXBwb3J0aW5nIGZpbGUtbGlrZSBvYmplY3QpLgotCi0gICAgSWYgYGBza2lw
a2V5c2BgIGlzIHRydWUgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBl
cwotICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRg
YCwgYGBib29sYGAsIGBgTm9uZWBgKQotICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0ZWFkIG9mIHJh
aXNpbmcgYSBgYFR5cGVFcnJvcmBgLgotCi0gICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBmYWxz
ZSwgdGhlbiB0aGUgc29tZSBjaHVua3Mgd3JpdHRlbiB0byBgYGZwYGAKLSAgICBtYXkgYmUgYGB1
bmljb2RlYGAgaW5zdGFuY2VzLCBzdWJqZWN0IHRvIG5vcm1hbCBQeXRob24gYGBzdHJgYCB0bwot
ICAgIGBgdW5pY29kZWBgIGNvZXJjaW9uIHJ1bGVzLiBVbmxlc3MgYGBmcC53cml0ZSgpYGAgZXhw
bGljaXRseQotICAgIHVuZGVyc3RhbmRzIGBgdW5pY29kZWBgIChhcyBpbiBgYGNvZGVjcy5nZXR3
cml0ZXIoKWBgKSB0aGlzIGlzIGxpa2VseQotICAgIHRvIGNhdXNlIGFuIGVycm9yLgotCi0gICAg
SWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGZhbHNlLCB0aGVuIHRoZSBjaXJjdWxhciByZWZlcmVu
Y2UgY2hlY2sKLSAgICBmb3IgY29udGFpbmVyIHR5cGVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgYSBj
aXJjdWxhciByZWZlcmVuY2Ugd2lsbAotICAgIHJlc3VsdCBpbiBhbiBgYE92ZXJmbG93RXJyb3Jg
YCAob3Igd29yc2UpLgotCi0gICAgSWYgYGBhbGxvd19uYW5gYCBpcyBmYWxzZSwgdGhlbiBpdCB3
aWxsIGJlIGEgYGBWYWx1ZUVycm9yYGAgdG8KLSAgICBzZXJpYWxpemUgb3V0IG9mIHJhbmdlIGBg
ZmxvYXRgYCB2YWx1ZXMgKGBgbmFuYGAsIGBgaW5mYGAsIGBgLWluZmBgKQotICAgIGluIHN0cmlj
dCBjb21wbGlhbmNlIG9mIHRoZSBKU09OIHNwZWNpZmljYXRpb24sIGluc3RlYWQgb2YgdXNpbmcg
dGhlCi0gICAgSmF2YVNjcmlwdCBlcXVpdmFsZW50cyAoYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBg
YC1JbmZpbml0eWBgKS4KLQotICAgIElmICppbmRlbnQqIGlzIGEgc3RyaW5nLCB0aGVuIEpTT04g
YXJyYXkgZWxlbWVudHMgYW5kIG9iamVjdCBtZW1iZXJzCi0gICAgd2lsbCBiZSBwcmV0dHktcHJp
bnRlZCB3aXRoIGEgbmV3bGluZSBmb2xsb3dlZCBieSB0aGF0IHN0cmluZyByZXBlYXRlZAotICAg
IGZvciBlYWNoIGxldmVsIG9mIG5lc3RpbmcuIGBgTm9uZWBgICh0aGUgZGVmYXVsdCkgc2VsZWN0
cyB0aGUgbW9zdCBjb21wYWN0Ci0gICAgcmVwcmVzZW50YXRpb24gd2l0aG91dCBhbnkgbmV3bGlu
ZXMuIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCi0gICAgdmVyc2lvbnMgb2Ygc2lt
cGxlanNvbiBlYXJsaWVyIHRoYW4gMi4xLjAsIGFuIGludGVnZXIgaXMgYWxzbyBhY2NlcHRlZAot
ICAgIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgd2l0aCB0aGF0IG1hbnkgc3BhY2VzLgot
Ci0gICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2Vw
YXJhdG9yKWBgIHR1cGxlCi0gICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUg
ZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCi0gICAgYGAoJywnLCAnOicpYGAg
aXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgotCi0gICAgYGBlbmNvZGlu
Z2BgIGlzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIHN0ciBpbnN0YW5jZXMsIGRlZmF1bHQg
aXMgVVRGLTguCi0KLSAgICBgYGRlZmF1bHQob2JqKWBgIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91
bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24KLSAgICBvZiBvYmogb3IgcmFpc2UgVHlw
ZUVycm9yLiBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIFR5cGVFcnJvci4KLQotICAgIElmICp1
c2VfZGVjaW1hbCogaXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSB0aGVuIGRlY2ltYWwuRGVj
aW1hbAotICAgIHdpbGwgYmUgbmF0aXZlbHkgc2VyaWFsaXplZCB0byBKU09OIHdpdGggZnVsbCBw
cmVjaXNpb24uCi0KLSAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORW5jb2RlcmBgIHN1YmNsYXNz
IChlLmcuIG9uZSB0aGF0IG92ZXJyaWRlcyB0aGUKLSAgICBgYC5kZWZhdWx0KClgYCBtZXRob2Qg
dG8gc2VyaWFsaXplIGFkZGl0aW9uYWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGgKLSAgICB0aGUg
YGBjbHNgYCBrd2FyZy4KLQotICAgICIiIgotICAgICMgY2FjaGVkIGVuY29kZXIKLSAgICBpZiAo
bm90IHNraXBrZXlzIGFuZCBlbnN1cmVfYXNjaWkgYW5kCi0gICAgICAgIGNoZWNrX2NpcmN1bGFy
IGFuZCBhbGxvd19uYW4gYW5kCi0gICAgICAgIGNscyBpcyBOb25lIGFuZCBpbmRlbnQgaXMgTm9u
ZSBhbmQgc2VwYXJhdG9ycyBpcyBOb25lIGFuZAotICAgICAgICBlbmNvZGluZyA9PSAndXRmLTgn
IGFuZCBkZWZhdWx0IGlzIE5vbmUgYW5kIG5vdCB1c2VfZGVjaW1hbAotICAgICAgICBhbmQgbm90
IGt3KToKLSAgICAgICAgaXRlcmFibGUgPSBfZGVmYXVsdF9lbmNvZGVyLml0ZXJlbmNvZGUob2Jq
KQotICAgIGVsc2U6Ci0gICAgICAgIGlmIGNscyBpcyBOb25lOgotICAgICAgICAgICAgY2xzID0g
SlNPTkVuY29kZXIKLSAgICAgICAgaXRlcmFibGUgPSBjbHMoc2tpcGtleXM9c2tpcGtleXMsIGVu
c3VyZV9hc2NpaT1lbnN1cmVfYXNjaWksCi0gICAgICAgICAgICBjaGVja19jaXJjdWxhcj1jaGVj
a19jaXJjdWxhciwgYWxsb3dfbmFuPWFsbG93X25hbiwgaW5kZW50PWluZGVudCwKLSAgICAgICAg
ICAgIHNlcGFyYXRvcnM9c2VwYXJhdG9ycywgZW5jb2Rpbmc9ZW5jb2RpbmcsCi0gICAgICAgICAg
ICBkZWZhdWx0PWRlZmF1bHQsIHVzZV9kZWNpbWFsPXVzZV9kZWNpbWFsLCAqKmt3KS5pdGVyZW5j
b2RlKG9iaikKLSAgICAjIGNvdWxkIGFjY2VsZXJhdGUgd2l0aCB3cml0ZWxpbmVzIGluIHNvbWUg
dmVyc2lvbnMgb2YgUHl0aG9uLCBhdAotICAgICMgYSBkZWJ1Z2dhYmlsaXR5IGNvc3QKLSAgICBm
b3IgY2h1bmsgaW4gaXRlcmFibGU6Ci0gICAgICAgIGZwLndyaXRlKGNodW5rKQotCi0KLWRlZiBk
dW1wcyhvYmosIHNraXBrZXlzPUZhbHNlLCBlbnN1cmVfYXNjaWk9VHJ1ZSwgY2hlY2tfY2lyY3Vs
YXI9VHJ1ZSwKLSAgICAgICAgYWxsb3dfbmFuPVRydWUsIGNscz1Ob25lLCBpbmRlbnQ9Tm9uZSwg
c2VwYXJhdG9ycz1Ob25lLAotICAgICAgICBlbmNvZGluZz0ndXRmLTgnLCBkZWZhdWx0PU5vbmUs
IHVzZV9kZWNpbWFsPUZhbHNlLCAqKmt3KToKLSAgICAiIiJTZXJpYWxpemUgYGBvYmpgYCB0byBh
IEpTT04gZm9ybWF0dGVkIGBgc3RyYGAuCi0KLSAgICBJZiBgYHNraXBrZXlzYGAgaXMgZmFsc2Ug
dGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcwotICAgIChgYHN0cmBg
LCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRgYCwgYGBib29sYGAsIGBg
Tm9uZWBgKQotICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBgYFR5cGVF
cnJvcmBgLgotCi0gICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBmYWxzZSwgdGhlbiB0aGUgcmV0
dXJuIHZhbHVlIHdpbGwgYmUgYQotICAgIGBgdW5pY29kZWBgIGluc3RhbmNlIHN1YmplY3QgdG8g
bm9ybWFsIFB5dGhvbiBgYHN0cmBgIHRvIGBgdW5pY29kZWBgCi0gICAgY29lcmNpb24gcnVsZXMg
aW5zdGVhZCBvZiBiZWluZyBlc2NhcGVkIHRvIGFuIEFTQ0lJIGBgc3RyYGAuCi0KLSAgICBJZiBg
YGNoZWNrX2NpcmN1bGFyYGAgaXMgZmFsc2UsIHRoZW4gdGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBj
aGVjawotICAgIGZvciBjb250YWluZXIgdHlwZXMgd2lsbCBiZSBza2lwcGVkIGFuZCBhIGNpcmN1
bGFyIHJlZmVyZW5jZSB3aWxsCi0gICAgcmVzdWx0IGluIGFuIGBgT3ZlcmZsb3dFcnJvcmBgIChv
ciB3b3JzZSkuCi0KLSAgICBJZiBgYGFsbG93X25hbmBgIGlzIGZhbHNlLCB0aGVuIGl0IHdpbGwg
YmUgYSBgYFZhbHVlRXJyb3JgYCB0bwotICAgIHNlcmlhbGl6ZSBvdXQgb2YgcmFuZ2UgYGBmbG9h
dGBgIHZhbHVlcyAoYGBuYW5gYCwgYGBpbmZgYCwgYGAtaW5mYGApIGluCi0gICAgc3RyaWN0IGNv
bXBsaWFuY2Ugb2YgdGhlIEpTT04gc3BlY2lmaWNhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyB0aGUK
LSAgICBKYXZhU2NyaXB0IGVxdWl2YWxlbnRzIChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUlu
ZmluaXR5YGApLgotCi0gICAgSWYgYGBpbmRlbnRgYCBpcyBhIHN0cmluZywgdGhlbiBKU09OIGFy
cmF5IGVsZW1lbnRzIGFuZCBvYmplY3QgbWVtYmVycwotICAgIHdpbGwgYmUgcHJldHR5LXByaW50
ZWQgd2l0aCBhIG5ld2xpbmUgZm9sbG93ZWQgYnkgdGhhdCBzdHJpbmcgcmVwZWF0ZWQKLSAgICBm
b3IgZWFjaCBsZXZlbCBvZiBuZXN0aW5nLiBgYE5vbmVgYCAodGhlIGRlZmF1bHQpIHNlbGVjdHMg
dGhlIG1vc3QgY29tcGFjdAotICAgIHJlcHJlc2VudGF0aW9uIHdpdGhvdXQgYW55IG5ld2xpbmVz
LiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAotICAgIHZlcnNpb25zIG9mIHNpbXBs
ZWpzb24gZWFybGllciB0aGFuIDIuMS4wLCBhbiBpbnRlZ2VyIGlzIGFsc28gYWNjZXB0ZWQKLSAg
ICBhbmQgaXMgY29udmVydGVkIHRvIGEgc3RyaW5nIHdpdGggdGhhdCBtYW55IHNwYWNlcy4KLQot
ICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFy
YXRvcilgYCB0dXBsZQotICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRl
ZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgotICAgIGBgKCcsJywgJzonKWBgIGlz
IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KLQotICAgIGBgZW5jb2Rpbmdg
YCBpcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBzdHIgaW5zdGFuY2VzLCBkZWZhdWx0IGlz
IFVURi04LgotCi0gICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxk
IHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCi0gICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVF
cnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCi0KLSAgICBJZiAqdXNl
X2RlY2ltYWwqIGlzIHRydWUgKGRlZmF1bHQ6IGBgRmFsc2VgYCkgdGhlbiBkZWNpbWFsLkRlY2lt
YWwKLSAgICB3aWxsIGJlIG5hdGl2ZWx5IHNlcmlhbGl6ZWQgdG8gSlNPTiB3aXRoIGZ1bGwgcHJl
Y2lzaW9uLgotCi0gICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkVuY29kZXJgYCBzdWJjbGFzcyAo
ZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCi0gICAgYGAuZGVmYXVsdCgpYGAgbWV0aG9kIHRv
IHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwgc3BlY2lmeSBpdCB3aXRoCi0gICAgdGhlIGBg
Y2xzYGAga3dhcmcuCi0KLSAgICAiIiIKLSAgICAjIGNhY2hlZCBlbmNvZGVyCi0gICAgaWYgKG5v
dCBza2lwa2V5cyBhbmQgZW5zdXJlX2FzY2lpIGFuZAotICAgICAgICBjaGVja19jaXJjdWxhciBh
bmQgYWxsb3dfbmFuIGFuZAotICAgICAgICBjbHMgaXMgTm9uZSBhbmQgaW5kZW50IGlzIE5vbmUg
YW5kIHNlcGFyYXRvcnMgaXMgTm9uZSBhbmQKLSAgICAgICAgZW5jb2RpbmcgPT0gJ3V0Zi04JyBh
bmQgZGVmYXVsdCBpcyBOb25lIGFuZCBub3QgdXNlX2RlY2ltYWwKLSAgICAgICAgYW5kIG5vdCBr
dyk6Ci0gICAgICAgIHJldHVybiBfZGVmYXVsdF9lbmNvZGVyLmVuY29kZShvYmopCi0gICAgaWYg
Y2xzIGlzIE5vbmU6Ci0gICAgICAgIGNscyA9IEpTT05FbmNvZGVyCi0gICAgcmV0dXJuIGNscygK
LSAgICAgICAgc2tpcGtleXM9c2tpcGtleXMsIGVuc3VyZV9hc2NpaT1lbnN1cmVfYXNjaWksCi0g
ICAgICAgIGNoZWNrX2NpcmN1bGFyPWNoZWNrX2NpcmN1bGFyLCBhbGxvd19uYW49YWxsb3dfbmFu
LCBpbmRlbnQ9aW5kZW50LAotICAgICAgICBzZXBhcmF0b3JzPXNlcGFyYXRvcnMsIGVuY29kaW5n
PWVuY29kaW5nLCBkZWZhdWx0PWRlZmF1bHQsCi0gICAgICAgIHVzZV9kZWNpbWFsPXVzZV9kZWNp
bWFsLCAqKmt3KS5lbmNvZGUob2JqKQotCi0KLV9kZWZhdWx0X2RlY29kZXIgPSBKU09ORGVjb2Rl
cihlbmNvZGluZz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdF9wYWlyc19ob29rPU5vbmUpCi0KLQotZGVmIGxvYWQoZnAsIGVuY29k
aW5nPU5vbmUsIGNscz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLCBwYXJzZV9mbG9hdD1Ob25lLAot
ICAgICAgICBwYXJzZV9pbnQ9Tm9uZSwgcGFyc2VfY29uc3RhbnQ9Tm9uZSwgb2JqZWN0X3BhaXJz
X2hvb2s9Tm9uZSwKLSAgICAgICAgdXNlX2RlY2ltYWw9RmFsc2UsICoqa3cpOgotICAgICIiIkRl
c2VyaWFsaXplIGBgZnBgYCAoYSBgYC5yZWFkKClgYC1zdXBwb3J0aW5nIGZpbGUtbGlrZSBvYmpl
Y3QgY29udGFpbmluZwotICAgIGEgSlNPTiBkb2N1bWVudCkgdG8gYSBQeXRob24gb2JqZWN0Lgot
Ci0gICAgKmVuY29kaW5nKiBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyB1c2VkIHRvIGludGVycHJl
dCBhbnkKLSAgICA6Y2xhc3M6YHN0cmAgb2JqZWN0cyBkZWNvZGVkIGJ5IHRoaXMgaW5zdGFuY2Ug
KGBgJ3V0Zi04J2BgIGJ5Ci0gICAgZGVmYXVsdCkuICBJdCBoYXMgbm8gZWZmZWN0IHdoZW4gZGVj
b2RpbmcgOmNsYXNzOmB1bmljb2RlYCBvYmplY3RzLgotCi0gICAgTm90ZSB0aGF0IGN1cnJlbnRs
eSBvbmx5IGVuY29kaW5ncyB0aGF0IGFyZSBhIHN1cGVyc2V0IG9mIEFTQ0lJIHdvcmssCi0gICAg
c3RyaW5ncyBvZiBvdGhlciBlbmNvZGluZ3Mgc2hvdWxkIGJlIHBhc3NlZCBpbiBhcyA6Y2xhc3M6
YHVuaWNvZGVgLgotCi0gICAgKm9iamVjdF9ob29rKiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNh
bGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgZXZlcnkKLSAgICBKU09OIG9iamVjdCBkZWNvZGVkIGFu
ZCBpdHMgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUKLSAgICBnaXZl
biA6Y2xhc3M6YGRpY3RgLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGN1c3RvbQotICAg
IGRlc2VyaWFsaXphdGlvbnMgKGUuZy4gdG8gc3VwcG9ydCBKU09OLVJQQyBjbGFzcyBoaW50aW5n
KS4KLQotICAgICpvYmplY3RfcGFpcnNfaG9vayogaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhh
dCB3aWxsIGJlIGNhbGxlZCB3aXRoCi0gICAgdGhlIHJlc3VsdCBvZiBhbnkgb2JqZWN0IGxpdGVy
YWwgZGVjb2RlIHdpdGggYW4gb3JkZXJlZCBsaXN0IG9mIHBhaXJzLgotICAgIFRoZSByZXR1cm4g
dmFsdWUgb2YgKm9iamVjdF9wYWlyc19ob29rKiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUK
LSAgICA6Y2xhc3M6YGRpY3RgLiAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVu
dCBjdXN0b20gZGVjb2RlcnMKLSAgICB0aGF0IHJlbHkgb24gdGhlIG9yZGVyIHRoYXQgdGhlIGtl
eSBhbmQgdmFsdWUgcGFpcnMgYXJlIGRlY29kZWQgKGZvcgotICAgIGV4YW1wbGUsIDpmdW5jOmBj
b2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgd2lsbCByZW1lbWJlciB0aGUgb3JkZXIgb2YKLSAgICBp
bnNlcnRpb24pLiBJZiAqb2JqZWN0X2hvb2sqIGlzIGFsc28gZGVmaW5lZCwgdGhlICpvYmplY3Rf
cGFpcnNfaG9vayoKLSAgICB0YWtlcyBwcmlvcml0eS4KLQotICAgICpwYXJzZV9mbG9hdCosIGlm
IHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc3RyaW5nIG9mIGV2ZXJ5Ci0gICAg
SlNPTiBmbG9hdCB0byBiZSBkZWNvZGVkLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBlcXVpdmFsZW50
IHRvCi0gICAgYGBmbG9hdChudW1fc3RyKWBgLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHVzZSBhbm90
aGVyIGRhdGF0eXBlIG9yIHBhcnNlcgotICAgIGZvciBKU09OIGZsb2F0cyAoZS5nLiA6Y2xhc3M6
YGRlY2ltYWwuRGVjaW1hbGApLgotCi0gICAgKnBhcnNlX2ludCosIGlmIHNwZWNpZmllZCwgd2ls
bCBiZSBjYWxsZWQgd2l0aCB0aGUgc3RyaW5nIG9mIGV2ZXJ5Ci0gICAgSlNPTiBpbnQgdG8gYmUg
ZGVjb2RlZC4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwotICAgIGBgaW50KG51
bV9zdHIpYGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHVzZSBhbm90aGVyIGRhdGF0eXBlIG9yIHBh
cnNlcgotICAgIGZvciBKU09OIGludGVnZXJzIChlLmcuIDpjbGFzczpgZmxvYXRgKS4KLQotICAg
ICpwYXJzZV9jb25zdGFudCosIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUg
b2YgdGhlCi0gICAgZm9sbG93aW5nIHN0cmluZ3M6IGBgJy1JbmZpbml0eSdgYCwgYGAnSW5maW5p
dHknYGAsIGBgJ05hTidgYC4gIFRoaXMKLSAgICBjYW4gYmUgdXNlZCB0byByYWlzZSBhbiBleGNl
cHRpb24gaWYgaW52YWxpZCBKU09OIG51bWJlcnMgYXJlCi0gICAgZW5jb3VudGVyZWQuCi0KLSAg
ICBJZiAqdXNlX2RlY2ltYWwqIGlzIHRydWUgKGRlZmF1bHQ6IGBgRmFsc2VgYCkgdGhlbiBpdCBp
bXBsaWVzCi0gICAgcGFyc2VfZmxvYXQ9ZGVjaW1hbC5EZWNpbWFsIGZvciBwYXJpdHkgd2l0aCBg
YGR1bXBgYC4KLQotICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05EZWNvZGVyYGAgc3ViY2xhc3Ms
IHNwZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAotICAgIGt3YXJnLgotCi0gICAgIiIiCi0gICAg
cmV0dXJuIGxvYWRzKGZwLnJlYWQoKSwKLSAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGNscz1j
bHMsIG9iamVjdF9ob29rPW9iamVjdF9ob29rLAotICAgICAgICBwYXJzZV9mbG9hdD1wYXJzZV9m
bG9hdCwgcGFyc2VfaW50PXBhcnNlX2ludCwKLSAgICAgICAgcGFyc2VfY29uc3RhbnQ9cGFyc2Vf
Y29uc3RhbnQsIG9iamVjdF9wYWlyc19ob29rPW9iamVjdF9wYWlyc19ob29rLAotICAgICAgICB1
c2VfZGVjaW1hbD11c2VfZGVjaW1hbCwgKiprdykKLQotCi1kZWYgbG9hZHMocywgZW5jb2Rpbmc9
Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsIHBhcnNlX2Zsb2F0PU5vbmUsCi0gICAg
ICAgIHBhcnNlX2ludD1Ob25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBvYmplY3RfcGFpcnNfaG9v
az1Ob25lLAotICAgICAgICB1c2VfZGVjaW1hbD1GYWxzZSwgKiprdyk6Ci0gICAgIiIiRGVzZXJp
YWxpemUgYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYCBpbnN0YW5jZSBjb250YWluaW5n
IGEgSlNPTgotICAgIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCi0KLSAgICAqZW5jb2Rp
bmcqIGRldGVybWluZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gaW50ZXJwcmV0IGFueQotICAgIDpj
bGFzczpgc3RyYCBvYmplY3RzIGRlY29kZWQgYnkgdGhpcyBpbnN0YW5jZSAoYGAndXRmLTgnYGAg
YnkKLSAgICBkZWZhdWx0KS4gIEl0IGhhcyBubyBlZmZlY3Qgd2hlbiBkZWNvZGluZyA6Y2xhc3M6
YHVuaWNvZGVgIG9iamVjdHMuCi0KLSAgICBOb3RlIHRoYXQgY3VycmVudGx5IG9ubHkgZW5jb2Rp
bmdzIHRoYXQgYXJlIGEgc3VwZXJzZXQgb2YgQVNDSUkgd29yaywKLSAgICBzdHJpbmdzIG9mIG90
aGVyIGVuY29kaW5ncyBzaG91bGQgYmUgcGFzc2VkIGluIGFzIDpjbGFzczpgdW5pY29kZWAuCi0K
LSAgICAqb2JqZWN0X2hvb2sqLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhl
IHJlc3VsdCBvZiBldmVyeQotICAgIEpTT04gb2JqZWN0IGRlY29kZWQgYW5kIGl0cyByZXR1cm4g
dmFsdWUgd2lsbCBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZQotICAgIGdpdmVuIDpjbGFzczpgZGlj
dGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tCi0gICAgZGVzZXJpYWxpemF0
aW9ucyAoZS5nLiB0byBzdXBwb3J0IEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgotCi0gICAgKm9i
amVjdF9wYWlyc19ob29rKiBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2Fs
bGVkIHdpdGgKLSAgICB0aGUgcmVzdWx0IG9mIGFueSBvYmplY3QgbGl0ZXJhbCBkZWNvZGUgd2l0
aCBhbiBvcmRlcmVkIGxpc3Qgb2YgcGFpcnMuCi0gICAgVGhlIHJldHVybiB2YWx1ZSBvZiAqb2Jq
ZWN0X3BhaXJzX2hvb2sqIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQotICAgIDpjbGFzczpg
ZGljdGAuICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNv
ZGVycwotICAgIHRoYXQgcmVseSBvbiB0aGUgb3JkZXIgdGhhdCB0aGUga2V5IGFuZCB2YWx1ZSBw
YWlycyBhcmUgZGVjb2RlZCAoZm9yCi0gICAgZXhhbXBsZSwgOmZ1bmM6YGNvbGxlY3Rpb25zLk9y
ZGVyZWREaWN0YCB3aWxsIHJlbWVtYmVyIHRoZSBvcmRlciBvZgotICAgIGluc2VydGlvbikuIElm
ICpvYmplY3RfaG9vayogaXMgYWxzbyBkZWZpbmVkLCB0aGUgKm9iamVjdF9wYWlyc19ob29rKgot
ICAgIHRha2VzIHByaW9yaXR5LgotCi0gICAgKnBhcnNlX2Zsb2F0KiwgaWYgc3BlY2lmaWVkLCB3
aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBzdHJpbmcgb2YgZXZlcnkKLSAgICBKU09OIGZsb2F0IHRv
IGJlIGRlY29kZWQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgICBgYGZs
b2F0KG51bV9zdHIpYGAuIFRoaXMgY2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUg
b3IgcGFyc2VyCi0gICAgZm9yIEpTT04gZmxvYXRzIChlLmcuIDpjbGFzczpgZGVjaW1hbC5EZWNp
bWFsYCkuCi0KLSAgICAqcGFyc2VfaW50KiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3
aXRoIHRoZSBzdHJpbmcgb2YgZXZlcnkKLSAgICBKU09OIGludCB0byBiZSBkZWNvZGVkLiAgQnkg
ZGVmYXVsdCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCi0gICAgYGBpbnQobnVtX3N0cilgYC4gIFRo
aXMgY2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUgb3IgcGFyc2VyCi0gICAgZm9y
IEpTT04gaW50ZWdlcnMgKGUuZy4gOmNsYXNzOmBmbG9hdGApLgotCi0gICAgKnBhcnNlX2NvbnN0
YW50KiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIG9uZSBvZiB0aGUKLSAgICBm
b2xsb3dpbmcgc3RyaW5nczogYGAnLUluZmluaXR5J2BgLCBgYCdJbmZpbml0eSdgYCwgYGAnTmFO
J2BgLiAgVGhpcwotICAgIGNhbiBiZSB1c2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpbnZh
bGlkIEpTT04gbnVtYmVycyBhcmUKLSAgICBlbmNvdW50ZXJlZC4KLQotICAgIElmICp1c2VfZGVj
aW1hbCogaXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSB0aGVuIGl0IGltcGxpZXMKLSAgICBw
YXJzZV9mbG9hdD1kZWNpbWFsLkRlY2ltYWwgZm9yIHBhcml0eSB3aXRoIGBgZHVtcGBgLgotCi0g
ICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBpdCB3
aXRoIHRoZSBgYGNsc2BgCi0gICAga3dhcmcuCi0KLSAgICAiIiIKLSAgICBpZiAoY2xzIGlzIE5v
bmUgYW5kIGVuY29kaW5nIGlzIE5vbmUgYW5kIG9iamVjdF9ob29rIGlzIE5vbmUgYW5kCi0gICAg
ICAgICAgICBwYXJzZV9pbnQgaXMgTm9uZSBhbmQgcGFyc2VfZmxvYXQgaXMgTm9uZSBhbmQKLSAg
ICAgICAgICAgIHBhcnNlX2NvbnN0YW50IGlzIE5vbmUgYW5kIG9iamVjdF9wYWlyc19ob29rIGlz
IE5vbmUKLSAgICAgICAgICAgIGFuZCBub3QgdXNlX2RlY2ltYWwgYW5kIG5vdCBrdyk6Ci0gICAg
ICAgIHJldHVybiBfZGVmYXVsdF9kZWNvZGVyLmRlY29kZShzKQotICAgIGlmIGNscyBpcyBOb25l
OgotICAgICAgICBjbHMgPSBKU09ORGVjb2RlcgotICAgIGlmIG9iamVjdF9ob29rIGlzIG5vdCBO
b25lOgotICAgICAgICBrd1snb2JqZWN0X2hvb2snXSA9IG9iamVjdF9ob29rCi0gICAgaWYgb2Jq
ZWN0X3BhaXJzX2hvb2sgaXMgbm90IE5vbmU6Ci0gICAgICAgIGt3WydvYmplY3RfcGFpcnNfaG9v
ayddID0gb2JqZWN0X3BhaXJzX2hvb2sKLSAgICBpZiBwYXJzZV9mbG9hdCBpcyBub3QgTm9uZToK
LSAgICAgICAga3dbJ3BhcnNlX2Zsb2F0J10gPSBwYXJzZV9mbG9hdAotICAgIGlmIHBhcnNlX2lu
dCBpcyBub3QgTm9uZToKLSAgICAgICAga3dbJ3BhcnNlX2ludCddID0gcGFyc2VfaW50Ci0gICAg
aWYgcGFyc2VfY29uc3RhbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgIGt3WydwYXJzZV9jb25zdGFu
dCddID0gcGFyc2VfY29uc3RhbnQKLSAgICBpZiB1c2VfZGVjaW1hbDoKLSAgICAgICAgaWYgcGFy
c2VfZmxvYXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVzZV9k
ZWNpbWFsPVRydWUgaW1wbGllcyBwYXJzZV9mbG9hdD1EZWNpbWFsIikKLSAgICAgICAga3dbJ3Bh
cnNlX2Zsb2F0J10gPSBEZWNpbWFsCi0gICAgcmV0dXJuIGNscyhlbmNvZGluZz1lbmNvZGluZywg
KiprdykuZGVjb2RlKHMpCi0KLQotZGVmIF90b2dnbGVfc3BlZWR1cHMoZW5hYmxlZCk6Ci0gICAg
aW1wb3J0IHNpbXBsZWpzb24uZGVjb2RlciBhcyBkZWMKLSAgICBpbXBvcnQgc2ltcGxlanNvbi5l
bmNvZGVyIGFzIGVuYwotICAgIGltcG9ydCBzaW1wbGVqc29uLnNjYW5uZXIgYXMgc2NhbgotICAg
IGNfbWFrZV9lbmNvZGVyID0gX2ltcG9ydF9jX21ha2VfZW5jb2RlcigpCi0gICAgaWYgZW5hYmxl
ZDoKLSAgICAgICAgZGVjLnNjYW5zdHJpbmcgPSBkZWMuY19zY2Fuc3RyaW5nIG9yIGRlYy5weV9z
Y2Fuc3RyaW5nCi0gICAgICAgIGVuYy5jX21ha2VfZW5jb2RlciA9IGNfbWFrZV9lbmNvZGVyCi0g
ICAgICAgIGVuYy5lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSA9IChlbmMuY19lbmNvZGVfYmFzZXN0
cmluZ19hc2NpaSBvciAKLSAgICAgICAgICAgIGVuYy5weV9lbmNvZGVfYmFzZXN0cmluZ19hc2Np
aSkKLSAgICAgICAgc2Nhbi5tYWtlX3NjYW5uZXIgPSBzY2FuLmNfbWFrZV9zY2FubmVyIG9yIHNj
YW4ucHlfbWFrZV9zY2FubmVyCi0gICAgZWxzZToKLSAgICAgICAgZGVjLnNjYW5zdHJpbmcgPSBk
ZWMucHlfc2NhbnN0cmluZwotICAgICAgICBlbmMuY19tYWtlX2VuY29kZXIgPSBOb25lCi0gICAg
ICAgIGVuYy5lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSA9IGVuYy5weV9lbmNvZGVfYmFzZXN0cmlu
Z19hc2NpaQotICAgICAgICBzY2FuLm1ha2Vfc2Nhbm5lciA9IHNjYW4ucHlfbWFrZV9zY2FubmVy
Ci0gICAgZGVjLm1ha2Vfc2Nhbm5lciA9IHNjYW4ubWFrZV9zY2FubmVyCi0gICAgZ2xvYmFsIF9k
ZWZhdWx0X2RlY29kZXIKLSAgICBfZGVmYXVsdF9kZWNvZGVyID0gSlNPTkRlY29kZXIoCi0gICAg
ICAgIGVuY29kaW5nPU5vbmUsCi0gICAgICAgIG9iamVjdF9ob29rPU5vbmUsCi0gICAgICAgIG9i
amVjdF9wYWlyc19ob29rPU5vbmUsCi0gICAgKQotICAgIGdsb2JhbCBfZGVmYXVsdF9lbmNvZGVy
Ci0gICAgX2RlZmF1bHRfZW5jb2RlciA9IEpTT05FbmNvZGVyKAotICAgICAgIHNraXBrZXlzPUZh
bHNlLAotICAgICAgIGVuc3VyZV9hc2NpaT1UcnVlLAotICAgICAgIGNoZWNrX2NpcmN1bGFyPVRy
dWUsCi0gICAgICAgYWxsb3dfbmFuPVRydWUsCi0gICAgICAgaW5kZW50PU5vbmUsCi0gICAgICAg
c2VwYXJhdG9ycz1Ob25lLAotICAgICAgIGVuY29kaW5nPSd1dGYtOCcsCi0gICAgICAgZGVmYXVs
dD1Ob25lLAotICAgKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3NpbXBsZWpzb24vX3NwZWVkdXBzLmMgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvc2ltcGxlanNvbi9fc3BlZWR1cHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGIzNDc0NzAyZWQ0MjUxNTdkOGU3MWRiODgzNGUxYWZiNGNjOTc1ZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvc2ltcGxlanNvbi9fc3BlZWR1cHMuYworKysgL2Rldi9udWxsCkBAIC0xLDI2
NTIgKzAsMCBAQAotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgInN0cnVjdG1lbWJlci5o
IgotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA3MDAwMCAmJiAhZGVmaW5lZChQeU9TX3N0cmlu
Z190b19kb3VibGUpCi0jZGVmaW5lIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZSBqc29uX1B5T1Nfc3Ry
aW5nX3RvX2RvdWJsZQotc3RhdGljIGRvdWJsZQotanNvbl9QeU9TX3N0cmluZ190b19kb3VibGUo
Y29uc3QgY2hhciAqcywgY2hhciAqKmVuZHB0ciwgUHlPYmplY3QgKm92ZXJmbG93X2V4Y2VwdGlv
bik7Ci1zdGF0aWMgZG91YmxlCi1qc29uX1B5T1Nfc3RyaW5nX3RvX2RvdWJsZShjb25zdCBjaGFy
ICpzLCBjaGFyICoqZW5kcHRyLCBQeU9iamVjdCAqb3ZlcmZsb3dfZXhjZXB0aW9uKSB7Ci0gICAg
ZG91YmxlIHg7Ci0gICAgYXNzZXJ0KGVuZHB0ciA9PSBOVUxMKTsKLSAgICBhc3NlcnQob3ZlcmZs
b3dfZXhjZXB0aW9uID09IE5VTEwpOwotICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImpzb25fUHlP
U19zdHJpbmdfdG9fZG91YmxlIiwgcmV0dXJuIC0xLjA7KQotICAgIHggPSBQeU9TX2FzY2lpX2F0
b2Yocyk7Ci0gICAgUHlGUEVfRU5EX1BST1RFQ1QoeCkKLSAgICByZXR1cm4geDsKLX0KLSNlbmRp
ZgotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA2MDAwMCAmJiAhZGVmaW5lZChQeV9UWVBFKQot
I2RlZmluZSBQeV9UWVBFKG9iKSAgICAgKCgoUHlPYmplY3QqKShvYikpLT5vYl90eXBlKQotI2Vu
ZGlmCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwICYmICFkZWZpbmVkKFB5X1NJWkUp
Ci0jZGVmaW5lIFB5X1NJWkUob2IpICAgICAoKChQeVZhck9iamVjdCopKG9iKSktPm9iX3NpemUp
Ci0jZW5kaWYKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAgJiYgIWRlZmluZWQoUFlf
U1NJWkVfVF9NSU4pCi10eXBlZGVmIGludCBQeV9zc2l6ZV90OwotI2RlZmluZSBQWV9TU0laRV9U
X01BWCBJTlRfTUFYCi0jZGVmaW5lIFBZX1NTSVpFX1RfTUlOIElOVF9NSU4KLSNkZWZpbmUgUHlJ
bnRfRnJvbVNzaXplX3QgUHlJbnRfRnJvbUxvbmcKLSNkZWZpbmUgUHlJbnRfQXNTc2l6ZV90IFB5
SW50X0FzTG9uZwotI2VuZGlmCi0jaWZuZGVmIFB5X0lTX0ZJTklURQotI2RlZmluZSBQeV9JU19G
SU5JVEUoWCkgKCFQeV9JU19JTkZJTklUWShYKSAmJiAhUHlfSVNfTkFOKFgpKQotI2VuZGlmCi0K
LSNpZmRlZiBfX0dOVUNfXwotI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRf
XykpCi0jZWxzZQotI2RlZmluZSBVTlVTRUQKLSNlbmRpZgotCi0jZGVmaW5lIERFRkFVTFRfRU5D
T0RJTkcgInV0Zi04IgotCi0jZGVmaW5lIFB5U2Nhbm5lcl9DaGVjayhvcCkgUHlPYmplY3RfVHlw
ZUNoZWNrKG9wLCAmUHlTY2FubmVyVHlwZSkKLSNkZWZpbmUgUHlTY2FubmVyX0NoZWNrRXhhY3Qo
b3ApIChQeV9UWVBFKG9wKSA9PSAmUHlTY2FubmVyVHlwZSkKLSNkZWZpbmUgUHlFbmNvZGVyX0No
ZWNrKG9wKSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsICZQeUVuY29kZXJUeXBlKQotI2RlZmluZSBQ
eUVuY29kZXJfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeUVuY29kZXJUeXBlKQot
I2RlZmluZSBEZWNpbWFsX0NoZWNrKG9wKSAoUHlPYmplY3RfVHlwZUNoZWNrKG9wLCBEZWNpbWFs
VHlwZVB0cikpCi0KLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlTY2FubmVyVHlwZTsKLXN0YXRpYyBQ
eVR5cGVPYmplY3QgUHlFbmNvZGVyVHlwZTsKLXN0YXRpYyBQeVR5cGVPYmplY3QgKkRlY2ltYWxU
eXBlUHRyOwotCi10eXBlZGVmIHN0cnVjdCBfUHlTY2FubmVyT2JqZWN0IHsKLSAgICBQeU9iamVj
dF9IRUFECi0gICAgUHlPYmplY3QgKmVuY29kaW5nOwotICAgIFB5T2JqZWN0ICpzdHJpY3Q7Ci0g
ICAgUHlPYmplY3QgKm9iamVjdF9ob29rOwotICAgIFB5T2JqZWN0ICpwYWlyc19ob29rOwotICAg
IFB5T2JqZWN0ICpwYXJzZV9mbG9hdDsKLSAgICBQeU9iamVjdCAqcGFyc2VfaW50OwotICAgIFB5
T2JqZWN0ICpwYXJzZV9jb25zdGFudDsKLSAgICBQeU9iamVjdCAqbWVtbzsKLX0gUHlTY2FubmVy
T2JqZWN0OwotCi1zdGF0aWMgUHlNZW1iZXJEZWYgc2Nhbm5lcl9tZW1iZXJzW10gPSB7Ci0gICAg
eyJlbmNvZGluZyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIGVuY29kaW5n
KSwgUkVBRE9OTFksICJlbmNvZGluZyJ9LAotICAgIHsic3RyaWN0IiwgVF9PQkpFQ1QsIG9mZnNl
dG9mKFB5U2Nhbm5lck9iamVjdCwgc3RyaWN0KSwgUkVBRE9OTFksICJzdHJpY3QifSwKLSAgICB7
Im9iamVjdF9ob29rIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgb2JqZWN0
X2hvb2spLCBSRUFET05MWSwgIm9iamVjdF9ob29rIn0sCi0gICAgeyJvYmplY3RfcGFpcnNfaG9v
ayIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIHBhaXJzX2hvb2spLCBSRUFE
T05MWSwgIm9iamVjdF9wYWlyc19ob29rIn0sCi0gICAgeyJwYXJzZV9mbG9hdCIsIFRfT0JKRUNU
LCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIHBhcnNlX2Zsb2F0KSwgUkVBRE9OTFksICJwYXJz
ZV9mbG9hdCJ9LAotICAgIHsicGFyc2VfaW50IiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5l
ck9iamVjdCwgcGFyc2VfaW50KSwgUkVBRE9OTFksICJwYXJzZV9pbnQifSwKLSAgICB7InBhcnNl
X2NvbnN0YW50IiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgcGFyc2VfY29u
c3RhbnQpLCBSRUFET05MWSwgInBhcnNlX2NvbnN0YW50In0sCi0gICAge05VTEx9Ci19OwotCi10
eXBlZGVmIHN0cnVjdCBfUHlFbmNvZGVyT2JqZWN0IHsKLSAgICBQeU9iamVjdF9IRUFECi0gICAg
UHlPYmplY3QgKm1hcmtlcnM7Ci0gICAgUHlPYmplY3QgKmRlZmF1bHRmbjsKLSAgICBQeU9iamVj
dCAqZW5jb2RlcjsKLSAgICBQeU9iamVjdCAqaW5kZW50OwotICAgIFB5T2JqZWN0ICprZXlfc2Vw
YXJhdG9yOwotICAgIFB5T2JqZWN0ICppdGVtX3NlcGFyYXRvcjsKLSAgICBQeU9iamVjdCAqc29y
dF9rZXlzOwotICAgIFB5T2JqZWN0ICpza2lwa2V5czsKLSAgICBQeU9iamVjdCAqa2V5X21lbW87
Ci0gICAgaW50IGZhc3RfZW5jb2RlOwotICAgIGludCBhbGxvd19uYW47Ci0gICAgaW50IHVzZV9k
ZWNpbWFsOwotfSBQeUVuY29kZXJPYmplY3Q7Ci0KLXN0YXRpYyBQeU1lbWJlckRlZiBlbmNvZGVy
X21lbWJlcnNbXSA9IHsKLSAgICB7Im1hcmtlcnMiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNv
ZGVyT2JqZWN0LCBtYXJrZXJzKSwgUkVBRE9OTFksICJtYXJrZXJzIn0sCi0gICAgeyJkZWZhdWx0
IiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5jb2Rlck9iamVjdCwgZGVmYXVsdGZuKSwgUkVBRE9O
TFksICJkZWZhdWx0In0sCi0gICAgeyJlbmNvZGVyIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5j
b2Rlck9iamVjdCwgZW5jb2RlciksIFJFQURPTkxZLCAiZW5jb2RlciJ9LAotICAgIHsiaW5kZW50
IiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5jb2Rlck9iamVjdCwgaW5kZW50KSwgUkVBRE9OTFks
ICJpbmRlbnQifSwKLSAgICB7ImtleV9zZXBhcmF0b3IiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlF
bmNvZGVyT2JqZWN0LCBrZXlfc2VwYXJhdG9yKSwgUkVBRE9OTFksICJrZXlfc2VwYXJhdG9yIn0s
Ci0gICAgeyJpdGVtX3NlcGFyYXRvciIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmpl
Y3QsIGl0ZW1fc2VwYXJhdG9yKSwgUkVBRE9OTFksICJpdGVtX3NlcGFyYXRvciJ9LAotICAgIHsi
c29ydF9rZXlzIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5jb2Rlck9iamVjdCwgc29ydF9rZXlz
KSwgUkVBRE9OTFksICJzb3J0X2tleXMifSwKLSAgICB7InNraXBrZXlzIiwgVF9PQkpFQ1QsIG9m
ZnNldG9mKFB5RW5jb2Rlck9iamVjdCwgc2tpcGtleXMpLCBSRUFET05MWSwgInNraXBrZXlzIn0s
Ci0gICAgeyJrZXlfbWVtbyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIGtl
eV9tZW1vKSwgUkVBRE9OTFksICJrZXlfbWVtbyJ9LAotICAgIHtOVUxMfQotfTsKLQotc3RhdGlj
IFB5X3NzaXplX3QKLWFzY2lpX2VzY2FwZV9jaGFyKFB5X1VOSUNPREUgYywgY2hhciAqb3V0cHV0
LCBQeV9zc2l6ZV90IGNoYXJzKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1hc2NpaV9lc2NhcGVfdW5p
Y29kZShQeU9iamVjdCAqcHlzdHIpOwotc3RhdGljIFB5T2JqZWN0ICoKLWFzY2lpX2VzY2FwZV9z
dHIoUHlPYmplY3QgKnB5c3RyKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1weV9lbmNvZGVfYmFzZXN0
cmluZ19hc2NpaShQeU9iamVjdCogc2VsZiBVTlVTRUQsIFB5T2JqZWN0ICpweXN0cik7Ci12b2lk
IGluaXRfc3BlZWR1cHModm9pZCk7Ci1zdGF0aWMgUHlPYmplY3QgKgotc2Nhbl9vbmNlX3N0cihQ
eVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3Nz
aXplX3QgKm5leHRfaWR4X3B0cik7Ci1zdGF0aWMgUHlPYmplY3QgKgotc2Nhbl9vbmNlX3VuaWNv
ZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQ
eV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpOwotc3RhdGljIFB5T2JqZWN0ICoKLV9idWlsZF9ydmFs
X2luZGV4X3R1cGxlKFB5T2JqZWN0ICpydmFsLCBQeV9zc2l6ZV90IGlkeCk7Ci1zdGF0aWMgUHlP
YmplY3QgKgotc2Nhbm5lcl9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywg
UHlPYmplY3QgKmt3ZHMpOwotc3RhdGljIGludAotc2Nhbm5lcl9pbml0KFB5T2JqZWN0ICpzZWxm
LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOwotc3RhdGljIHZvaWQKLXNjYW5uZXJf
ZGVhbGxvYyhQeU9iamVjdCAqc2VsZik7Ci1zdGF0aWMgaW50Ci1zY2FubmVyX2NsZWFyKFB5T2Jq
ZWN0ICpzZWxmKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1lbmNvZGVyX25ldyhQeVR5cGVPYmplY3Qg
KnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7Ci1zdGF0aWMgaW50Ci1lbmNv
ZGVyX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7
Ci1zdGF0aWMgdm9pZAotZW5jb2Rlcl9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKTsKLXN0YXRpYyBp
bnQKLWVuY29kZXJfY2xlYXIoUHlPYmplY3QgKnNlbGYpOwotc3RhdGljIGludAotZW5jb2Rlcl9s
aXN0ZW5jb2RlX2xpc3QoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcnZhbCwgUHlPYmpl
Y3QgKnNlcSwgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWwpOwotc3RhdGljIGludAotZW5jb2Rlcl9s
aXN0ZW5jb2RlX29iaihQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVj
dCAqb2JqLCBQeV9zc2l6ZV90IGluZGVudF9sZXZlbCk7Ci1zdGF0aWMgaW50Ci1lbmNvZGVyX2xp
c3RlbmNvZGVfZGljdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVj
dCAqZGN0LCBQeV9zc2l6ZV90IGluZGVudF9sZXZlbCk7Ci1zdGF0aWMgUHlPYmplY3QgKgotX2Vu
Y29kZWRfY29uc3QoUHlPYmplY3QgKm9iaik7Ci1zdGF0aWMgdm9pZAotcmFpc2VfZXJybXNnKGNo
YXIgKm1zZywgUHlPYmplY3QgKnMsIFB5X3NzaXplX3QgZW5kKTsKLXN0YXRpYyBQeU9iamVjdCAq
Ci1lbmNvZGVyX2VuY29kZV9zdHJpbmcoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2Jq
KTsKLXN0YXRpYyBpbnQKLV9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90KFB5T2JqZWN0ICpvLCBQeV9z
c2l6ZV90ICpzaXplX3B0cik7Ci1zdGF0aWMgUHlPYmplY3QgKgotX2NvbnZlcnRQeUludF9Gcm9t
U3NpemVfdChQeV9zc2l6ZV90ICpzaXplX3B0cik7Ci1zdGF0aWMgUHlPYmplY3QgKgotZW5jb2Rl
cl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKLQotI2Rl
ZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9
ICciJykKLSNkZWZpbmUgSVNfV0hJVEVTUEFDRShjKSAoKChjKSA9PSAnICcpIHx8ICgoYykgPT0g
J1x0JykgfHwgKChjKSA9PSAnXG4nKSB8fCAoKGMpID09ICdccicpKQotCi0jZGVmaW5lIE1JTl9F
WFBBTlNJT04gNgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotI2RlZmluZSBNQVhfRVhQQU5TSU9O
ICgyICogTUlOX0VYUEFOU0lPTikKLSNlbHNlCi0jZGVmaW5lIE1BWF9FWFBBTlNJT04gTUlOX0VY
UEFOU0lPTgotI2VuZGlmCi0KLXN0YXRpYyBpbnQKLV9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90KFB5
T2JqZWN0ICpvLCBQeV9zc2l6ZV90ICpzaXplX3B0cikKLXsKLSAgICAvKiBQeU9iamVjdCB0byBQ
eV9zc2l6ZV90IGNvbnZlcnRlciAqLwotICAgICpzaXplX3B0ciA9IFB5SW50X0FzU3NpemVfdChv
KTsKLSAgICBpZiAoKnNpemVfcHRyID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotX2NvbnZl
cnRQeUludF9Gcm9tU3NpemVfdChQeV9zc2l6ZV90ICpzaXplX3B0cikKLXsKLSAgICAvKiBQeV9z
c2l6ZV90IHRvIFB5T2JqZWN0IGNvbnZlcnRlciAqLwotICAgIHJldHVybiBQeUludF9Gcm9tU3Np
emVfdCgqc2l6ZV9wdHIpOwotfQotCi1zdGF0aWMgUHlfc3NpemVfdAotYXNjaWlfZXNjYXBlX2No
YXIoUHlfVU5JQ09ERSBjLCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpCi17Ci0gICAg
LyogRXNjYXBlIHVuaWNvZGUgY29kZSBwb2ludCBjIHRvIEFTQ0lJIGVzY2FwZSBzZXF1ZW5jZXMK
LSAgICBpbiBjaGFyICpvdXRwdXQuIG91dHB1dCBtdXN0IGhhdmUgYXQgbGVhc3QgMTIgYnl0ZXMg
dW51c2VkIHRvCi0gICAgYWNjb21tb2RhdGUgYW4gZXNjYXBlZCBzdXJyb2dhdGUgcGFpciAiXHVY
WFhYXHVYWFhYIiAqLwotICAgIG91dHB1dFtjaGFycysrXSA9ICdcXCc7Ci0gICAgc3dpdGNoIChj
KSB7Ci0gICAgICAgIGNhc2UgJ1xcJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgJyInOiBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOyBicmVhazsKLSAg
ICAgICAgY2FzZSAnXGInOiBvdXRwdXRbY2hhcnMrK10gPSAnYic7IGJyZWFrOwotICAgICAgICBj
YXNlICdcZic6IG91dHB1dFtjaGFycysrXSA9ICdmJzsgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xu
Jzogb3V0cHV0W2NoYXJzKytdID0gJ24nOyBicmVhazsKLSAgICAgICAgY2FzZSAnXHInOiBvdXRw
dXRbY2hhcnMrK10gPSAncic7IGJyZWFrOwotICAgICAgICBjYXNlICdcdCc6IG91dHB1dFtjaGFy
cysrXSA9ICd0JzsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0jaWZkZWYgUHlfVU5JQ09ERV9X
SURFCi0gICAgICAgICAgICBpZiAoYyA+PSAweDEwMDAwKSB7Ci0gICAgICAgICAgICAgICAgLyog
VVRGLTE2IHN1cnJvZ2F0ZSBwYWlyICovCi0gICAgICAgICAgICAgICAgUHlfVU5JQ09ERSB2ID0g
YyAtIDB4MTAwMDA7Ci0gICAgICAgICAgICAgICAgYyA9IDB4ZDgwMCB8ICgodiA+PiAxMCkgJiAw
eDNmZik7Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwotICAgICAgICAg
ICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAxMikgJiAw
eGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVm
IlsoYyA+PiAgOCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIw
MTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAgNCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1
dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyAgICAgICkgJiAweGZdOwotICAgICAg
ICAgICAgICAgIGMgPSAweGRjMDAgfCAodiAmIDB4M2ZmKTsKLSAgICAgICAgICAgICAgICBvdXRw
dXRbY2hhcnMrK10gPSAnXFwnOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBv
dXRwdXRbY2hhcnMrK10gPSAndSc7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEy
MzQ1Njc4OWFiY2RlZiJbKGMgPj4gMTIpICYgMHhmXTsKLSAgICAgICAgICAgIG91dHB1dFtjaGFy
cysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAgOCkgJiAweGZdOwotICAgICAgICAgICAg
b3V0cHV0W2NoYXJzKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyhjID4+ICA0KSAmIDB4Zl07Ci0g
ICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgICAgICAp
ICYgMHhmXTsKLSAgICB9Ci0gICAgcmV0dXJuIGNoYXJzOwotfQotCi1zdGF0aWMgUHlPYmplY3Qg
KgotYXNjaWlfZXNjYXBlX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyKQotewotICAgIC8qIFRha2Ug
YSBQeVVuaWNvZGUgcHlzdHIgYW5kIHJldHVybiBhIG5ldyBBU0NJSS1vbmx5IGVzY2FwZWQgUHlT
dHJpbmcgKi8KLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlfc3NpemVfdCBpbnB1dF9jaGFyczsK
LSAgICBQeV9zc2l6ZV90IG91dHB1dF9zaXplOwotICAgIFB5X3NzaXplX3QgbWF4X291dHB1dF9z
aXplOwotICAgIFB5X3NzaXplX3QgY2hhcnM7Ci0gICAgUHlPYmplY3QgKnJ2YWw7Ci0gICAgY2hh
ciAqb3V0cHV0OwotICAgIFB5X1VOSUNPREUgKmlucHV0X3VuaWNvZGU7Ci0KLSAgICBpbnB1dF9j
aGFycyA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cik7Ci0gICAgaW5wdXRfdW5pY29kZSA9IFB5
VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKLQotICAgIC8qIE9uZSBjaGFyIGlucHV0IGNhbiBi
ZSB1cCB0byA2IGNoYXJzIG91dHB1dCwgZXN0aW1hdGUgNCBvZiB0aGVzZSAqLwotICAgIG91dHB1
dF9zaXplID0gMiArIChNSU5fRVhQQU5TSU9OICogNCkgKyBpbnB1dF9jaGFyczsKLSAgICBtYXhf
b3V0cHV0X3NpemUgPSAyICsgKGlucHV0X2NoYXJzICogTUFYX0VYUEFOU0lPTik7Ci0gICAgcnZh
bCA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dHB1dF9zaXplKTsKLSAgICBp
ZiAocnZhbCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBvdXRw
dXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7Ci0gICAgY2hhcnMgPSAwOwotICAgIG91dHB1
dFtjaGFycysrXSA9ICciJzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfY2hhcnM7IGkrKykg
ewotICAgICAgICBQeV9VTklDT0RFIGMgPSBpbnB1dF91bmljb2RlW2ldOwotICAgICAgICBpZiAo
U19DSEFSKGMpKSB7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhcnMgPSBhc2NpaV9lc2NhcGVf
Y2hhcihjLCBvdXRwdXQsIGNoYXJzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob3V0cHV0X3Np
emUgLSBjaGFycyA8ICgxICsgTUFYX0VYUEFOU0lPTikpIHsKLSAgICAgICAgICAgIC8qIFRoZXJl
J3MgbW9yZSB0aGFuIGZvdXIsIHNvIGxldCdzIHJlc2l6ZSBieSBhIGxvdCAqLwotICAgICAgICAg
ICAgUHlfc3NpemVfdCBuZXdfb3V0cHV0X3NpemUgPSBvdXRwdXRfc2l6ZSAqIDI7Ci0gICAgICAg
ICAgICAvKiBUaGlzIGlzIGFuIHVwcGVyIGJvdW5kICovCi0gICAgICAgICAgICBpZiAobmV3X291
dHB1dF9zaXplID4gbWF4X291dHB1dF9zaXplKSB7Ci0gICAgICAgICAgICAgICAgbmV3X291dHB1
dF9zaXplID0gbWF4X291dHB1dF9zaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyog
TWFrZSBzdXJlIHRoYXQgdGhlIG91dHB1dCBzaXplIGNoYW5nZWQgYmVmb3JlIHJlc2l6aW5nICov
Ci0gICAgICAgICAgICBpZiAobmV3X291dHB1dF9zaXplICE9IG91dHB1dF9zaXplKSB7Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0X3NpemUgPSBuZXdfb3V0cHV0X3NpemU7Ci0gICAgICAgICAgICAg
ICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2YWwsIG91dHB1dF9zaXplKSA9PSAtMSkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIG91dHB1dFtjaGFycysrXSA9ICciJzsKLSAgICBpZiAo
X1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgY2hhcnMpID09IC0xKSB7Ci0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIH0KLSAgICByZXR1cm4gcnZhbDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWFz
Y2lpX2VzY2FwZV9zdHIoUHlPYmplY3QgKnB5c3RyKQotewotICAgIC8qIFRha2UgYSBQeVN0cmlu
ZyBweXN0ciBhbmQgcmV0dXJuIGEgbmV3IEFTQ0lJLW9ubHkgZXNjYXBlZCBQeVN0cmluZyAqLwot
ICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeV9zc2l6ZV90IGlucHV0X2NoYXJzOwotICAgIFB5X3Nz
aXplX3Qgb3V0cHV0X3NpemU7Ci0gICAgUHlfc3NpemVfdCBjaGFyczsKLSAgICBQeU9iamVjdCAq
cnZhbDsKLSAgICBjaGFyICpvdXRwdXQ7Ci0gICAgY2hhciAqaW5wdXRfc3RyOwotCi0gICAgaW5w
dXRfY2hhcnMgPSBQeVN0cmluZ19HRVRfU0laRShweXN0cik7Ci0gICAgaW5wdXRfc3RyID0gUHlT
dHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKLQotICAgIC8qIEZhc3QgcGF0aCBmb3IgYSBzdHJpbmcg
dGhhdCdzIGFscmVhZHkgQVNDSUkgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfY2hhcnM7
IGkrKykgewotICAgICAgICBQeV9VTklDT0RFIGMgPSAoUHlfVU5JQ09ERSkodW5zaWduZWQgY2hh
cilpbnB1dF9zdHJbaV07Ci0gICAgICAgIGlmICghU19DSEFSKGMpKSB7Ci0gICAgICAgICAgICAv
KiBJZiB3ZSBoYXZlIHRvIGVzY2FwZSBzb21ldGhpbmcsIHNjYW4gdGhlIHN0cmluZyBmb3IgdW5p
Y29kZSAqLwotICAgICAgICAgICAgUHlfc3NpemVfdCBqOwotICAgICAgICAgICAgZm9yIChqID0g
aTsgaiA8IGlucHV0X2NoYXJzOyBqKyspIHsKLSAgICAgICAgICAgICAgICBjID0gKFB5X1VOSUNP
REUpKHVuc2lnbmVkIGNoYXIpaW5wdXRfc3RyW2pdOwotICAgICAgICAgICAgICAgIGlmIChjID4g
MHg3ZikgewotICAgICAgICAgICAgICAgICAgICAvKiBXZSBoaXQgYSBub24tQVNDSUkgY2hhcmFj
dGVyLCBiYWlsIHRvIHVuaWNvZGUgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICBQeU9iamVj
dCAqdW5pOwotICAgICAgICAgICAgICAgICAgICB1bmkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChp
bnB1dF9zdHIsIGlucHV0X2NoYXJzLCAic3RyaWN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh1bmkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnZhbCA9IGFzY2lpX2Vz
Y2FwZV91bmljb2RlKHVuaSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmkpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnZhbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChpID09IGlucHV0X2NoYXJzKSB7Ci0gICAgICAgIC8qIElucHV0IGlzIGFscmVhZHkgQVNDSUkg
Ki8KLSAgICAgICAgb3V0cHV0X3NpemUgPSAyICsgaW5wdXRfY2hhcnM7Ci0gICAgfQotICAgIGVs
c2UgewotICAgICAgICAvKiBPbmUgY2hhciBpbnB1dCBjYW4gYmUgdXAgdG8gNiBjaGFycyBvdXRw
dXQsIGVzdGltYXRlIDQgb2YgdGhlc2UgKi8KLSAgICAgICAgb3V0cHV0X3NpemUgPSAyICsgKE1J
Tl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJzOwotICAgIH0KLSAgICBydmFsID0gUHlTdHJp
bmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0cHV0X3NpemUpOwotICAgIGlmIChydmFsID09
IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG91dHB1dCA9IFB5U3Ry
aW5nX0FTX1NUUklORyhydmFsKTsKLSAgICBvdXRwdXRbMF0gPSAnIic7Ci0KLSAgICAvKiBXZSBr
bm93IHRoYXQgZXZlcnl0aGluZyB1cCB0byBpIGlzIEFTQ0lJIGFscmVhZHkgKi8KLSAgICBjaGFy
cyA9IGkgKyAxOwotICAgIG1lbWNweSgmb3V0cHV0WzFdLCBpbnB1dF9zdHIsIGkpOwotCi0gICAg
Zm9yICg7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IChQ
eV9VTklDT0RFKSh1bnNpZ25lZCBjaGFyKWlucHV0X3N0cltpXTsKLSAgICAgICAgaWYgKFNfQ0hB
UihjKSkgewotICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXJzID0gYXNjaWlfZXNjYXBlX2NoYXIo
Yywgb3V0cHV0LCBjaGFycyk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogQW4gQVNDSUkgY2hhciBj
YW4ndCBwb3NzaWJseSBleHBhbmQgdG8gYSBzdXJyb2dhdGUhICovCi0gICAgICAgIGlmIChvdXRw
dXRfc2l6ZSAtIGNoYXJzIDwgKDEgKyBNSU5fRVhQQU5TSU9OKSkgewotICAgICAgICAgICAgLyog
VGhlcmUncyBtb3JlIHRoYW4gZm91ciwgc28gbGV0J3MgcmVzaXplIGJ5IGEgbG90ICovCi0gICAg
ICAgICAgICBvdXRwdXRfc2l6ZSAqPSAyOwotICAgICAgICAgICAgaWYgKG91dHB1dF9zaXplID4g
MiArIChpbnB1dF9jaGFycyAqIE1JTl9FWFBBTlNJT04pKSB7Ci0gICAgICAgICAgICAgICAgb3V0
cHV0X3NpemUgPSAyICsgKGlucHV0X2NoYXJzICogTUlOX0VYUEFOU0lPTik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgb3V0cHV0X3NpemUp
ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBvdXRwdXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgb3V0cHV0W2NoYXJzKytdID0gJyInOwotICAgIGlmIChfUHlTdHJpbmdfUmVz
aXplKCZydmFsLCBjaGFycykgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
ICAgIHJldHVybiBydmFsOwotfQotCi1zdGF0aWMgdm9pZAotcmFpc2VfZXJybXNnKGNoYXIgKm1z
ZywgUHlPYmplY3QgKnMsIFB5X3NzaXplX3QgZW5kKQotewotICAgIC8qIFVzZSB0aGUgUHl0aG9u
IGZ1bmN0aW9uIHNpbXBsZWpzb24uZGVjb2Rlci5lcnJtc2cgdG8gcmFpc2UgYSBuaWNlCi0gICAg
bG9va2luZyBWYWx1ZUVycm9yIGV4Y2VwdGlvbiAqLwotICAgIHN0YXRpYyBQeU9iamVjdCAqSlNP
TkRlY29kZUVycm9yID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZXhjOwotICAgIGlmIChKU09ORGVj
b2RlRXJyb3IgPT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqZGVjb2RlciA9IFB5SW1wb3J0
X0ltcG9ydE1vZHVsZSgic2ltcGxlanNvbi5kZWNvZGVyIik7Ci0gICAgICAgIGlmIChkZWNvZGVy
ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTT05EZWNvZGVFcnJvciA9
IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZGVjb2RlciwgIkpTT05EZWNvZGVFcnJvciIpOwotICAg
ICAgICBQeV9ERUNSRUYoZGVjb2Rlcik7Ci0gICAgICAgIGlmIChKU09ORGVjb2RlRXJyb3IgPT0g
TlVMTCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZXhjID0gUHlPYmplY3RfQ2Fs
bEZ1bmN0aW9uKEpTT05EZWNvZGVFcnJvciwgIih6T08mKSIsIG1zZywgcywgX2NvbnZlcnRQeUlu
dF9Gcm9tU3NpemVfdCwgJmVuZCk7Ci0gICAgaWYgKGV4YykgewotICAgICAgICBQeUVycl9TZXRP
YmplY3QoSlNPTkRlY29kZUVycm9yLCBleGMpOwotICAgICAgICBQeV9ERUNSRUYoZXhjKTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1qb2luX2xpc3RfdW5pY29kZShQeU9iamVjdCAq
bHN0KQotewotICAgIC8qIHJldHVybiB1Jycuam9pbihsc3QpICovCi0gICAgc3RhdGljIFB5T2Jq
ZWN0ICpqb2luZm4gPSBOVUxMOwotICAgIGlmIChqb2luZm4gPT0gTlVMTCkgewotICAgICAgICBQ
eU9iamVjdCAqdXN0ciA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCAwKTsKLSAgICAgICAg
aWYgKHVzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIGpv
aW5mbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodXN0ciwgImpvaW4iKTsKLSAgICAgICAgUHlf
REVDUkVGKHVzdHIpOwotICAgICAgICBpZiAoam9pbmZuID09IE5VTEwpCi0gICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFy
Z3Moam9pbmZuLCBsc3QsIE5VTEwpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotam9pbl9saXN0
X3N0cmluZyhQeU9iamVjdCAqbHN0KQotewotICAgIC8qIHJldHVybiAnJy5qb2luKGxzdCkgKi8K
LSAgICBzdGF0aWMgUHlPYmplY3QgKmpvaW5mbiA9IE5VTEw7Ci0gICAgaWYgKGpvaW5mbiA9PSBO
VUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp1c3RyID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNp
emUoTlVMTCwgMCk7Ci0gICAgICAgIGlmICh1c3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1
cm4gTlVMTDsKLQotICAgICAgICBqb2luZm4gPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHVzdHIs
ICJqb2luIik7Ci0gICAgICAgIFB5X0RFQ1JFRih1c3RyKTsKLSAgICAgICAgaWYgKGpvaW5mbiA9
PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBQeU9i
amVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGpvaW5mbiwgbHN0LCBOVUxMKTsKLX0KLQotc3RhdGlj
IFB5T2JqZWN0ICoKLV9idWlsZF9ydmFsX2luZGV4X3R1cGxlKFB5T2JqZWN0ICpydmFsLCBQeV9z
c2l6ZV90IGlkeCkgewotICAgIC8qIHJldHVybiAocnZhbCwgaWR4KSB0dXBsZSwgc3RlYWxpbmcg
cmVmZXJlbmNlIHRvIHJ2YWwgKi8KLSAgICBQeU9iamVjdCAqdHBsOwotICAgIFB5T2JqZWN0ICpw
eWlkeDsKLSAgICAvKgotICAgIHN0ZWFsIGEgcmVmZXJlbmNlIHRvIHJ2YWwsIHJldHVybnMgKHJ2
YWwsIGlkeCkKLSAgICAqLwotICAgIGlmIChydmFsID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgfQotICAgIHB5aWR4ID0gUHlJbnRfRnJvbVNzaXplX3QoaWR4KTsKLSAgICBp
ZiAocHlpZHggPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYocnZhbCk7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLSAgICB0cGwgPSBQeVR1cGxlX05ldygyKTsKLSAgICBpZiAodHBs
ID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHB5aWR4KTsKLSAgICAgICAgUHlfREVDUkVG
KHJ2YWwpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlUdXBsZV9TRVRfSVRF
TSh0cGwsIDAsIHJ2YWwpOwotICAgIFB5VHVwbGVfU0VUX0lURU0odHBsLCAxLCBweWlkeCk7Ci0g
ICAgcmV0dXJuIHRwbDsKLX0KLQotI2RlZmluZSBBUFBFTkRfT0xEX0NIVU5LIFwKLSAgICBpZiAo
Y2h1bmsgIT0gTlVMTCkgeyBcCi0gICAgICAgIGlmIChjaHVua3MgPT0gTlVMTCkgeyBcCi0gICAg
ICAgICAgICBjaHVua3MgPSBQeUxpc3RfTmV3KDApOyBcCi0gICAgICAgICAgICBpZiAoY2h1bmtz
ID09IE5VTEwpIHsgXAotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsgXAotICAgICAgICAgICAg
fSBcCi0gICAgICAgIH0gXAotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjaHVua3MsIGNodW5r
KSkgeyBcCi0gICAgICAgICAgICBnb3RvIGJhaWw7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIFB5
X0NMRUFSKGNodW5rKTsgXAotICAgIH0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXNjYW5zdHJpbmdf
c3RyKFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBlbmQsIGNoYXIgKmVuY29kaW5nLCBpbnQg
c3RyaWN0LCBQeV9zc2l6ZV90ICpuZXh0X2VuZF9wdHIpCi17Ci0gICAgLyogUmVhZCB0aGUgSlNP
TiBzdHJpbmcgZnJvbSBQeVN0cmluZyBweXN0ci4KLSAgICBlbmQgaXMgdGhlIGluZGV4IG9mIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHF1b3RlLgotICAgIGVuY29kaW5nIGlzIHRoZSBl
bmNvZGluZyBvZiBweXN0ciAobXVzdCBiZSBhbiBBU0NJSSBzdXBlcnNldCkKLSAgICBpZiBzdHJp
Y3QgaXMgemVybyB0aGVuIGxpdGVyYWwgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkCi0g
ICAgKm5leHRfZW5kX3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggb2YgdGhlIGNo
YXJhY3RlcgotICAgICAgICBhZnRlciB0aGUgZW5kIHF1b3RlCi0KLSAgICBSZXR1cm4gdmFsdWUg
aXMgYSBuZXcgUHlTdHJpbmcgKGlmIEFTQ0lJLW9ubHkpIG9yIFB5VW5pY29kZQotICAgICovCi0g
ICAgUHlPYmplY3QgKnJ2YWw7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBQeVN0cmluZ19HRVRfU0la
RShweXN0cik7Ci0gICAgUHlfc3NpemVfdCBiZWdpbiA9IGVuZCAtIDE7Ci0gICAgUHlfc3NpemVf
dCBuZXh0ID0gYmVnaW47Ci0gICAgaW50IGhhc191bmljb2RlID0gMDsKLSAgICBjaGFyICpidWYg
PSBQeVN0cmluZ19BU19TVFJJTkcocHlzdHIpOwotICAgIFB5T2JqZWN0ICpjaHVua3MgPSBOVUxM
OwotICAgIFB5T2JqZWN0ICpjaHVuayA9IE5VTEw7Ci0KLSAgICBpZiAoZW5kIDwgMCB8fCBsZW4g
PD0gZW5kKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW5k
IGlzIG91dCBvZiBib3VuZHMiKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLSAgICB3aGls
ZSAoMSkgewotICAgICAgICAvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBvciB0aGUgbmV4
dCBlc2NhcGUgKi8KLSAgICAgICAgUHlfVU5JQ09ERSBjID0gMDsKLSAgICAgICAgZm9yIChuZXh0
ID0gZW5kOyBuZXh0IDwgbGVuOyBuZXh0KyspIHsKLSAgICAgICAgICAgIGMgPSAodW5zaWduZWQg
Y2hhcilidWZbbmV4dF07Ci0gICAgICAgICAgICBpZiAoYyA9PSAnIicgfHwgYyA9PSAnXFwnKSB7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmIChzdHJpY3QgJiYgYyA8PSAweDFmKSB7Ci0gICAgICAgICAgICAgICAgcmFpc2VfZXJybXNn
KCJJbnZhbGlkIGNvbnRyb2wgY2hhcmFjdGVyIGF0IiwgcHlzdHIsIG5leHQpOwotICAgICAgICAg
ICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMg
PiAweDdmKSB7Ci0gICAgICAgICAgICAgICAgaGFzX3VuaWNvZGUgPSAxOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmICghKGMgPT0gJyInIHx8IGMgPT0gJ1xcJykpIHsKLSAg
ICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCIs
IHB5c3RyLCBiZWdpbik7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAg
ICAgLyogUGljayB1cCB0aGlzIGNodW5rIGlmIGl0J3Mgbm90IHplcm8gbGVuZ3RoICovCi0gICAg
ICAgIGlmIChuZXh0ICE9IGVuZCkgewotICAgICAgICAgICAgUHlPYmplY3QgKnN0cmNodW5rOwot
ICAgICAgICAgICAgQVBQRU5EX09MRF9DSFVOSwotICAgICAgICAgICAgc3RyY2h1bmsgPSBQeVN0
cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgmYnVmW2VuZF0sIG5leHQgLSBlbmQpOwotICAgICAgICAg
ICAgaWYgKHN0cmNodW5rID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzX3VuaWNvZGUpIHsKLSAgICAgICAgICAg
ICAgICBjaHVuayA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChzdHJjaHVuaywgZW5jb2Rp
bmcsIE5VTEwpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHJjaHVuayk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNodW5rID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBi
YWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGNodW5rID0gc3RyY2h1bms7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgbmV4dCsrOwotICAgICAgICBpZiAoYyA9PSAnIicpIHsKLSAgICAgICAg
ICAgIGVuZCA9IG5leHQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobmV4dCA9PSBsZW4pIHsKLSAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW50ZXJtaW5hdGVk
IHN0cmluZyBzdGFydGluZyBhdCIsIHB5c3RyLCBiZWdpbik7Ci0gICAgICAgICAgICBnb3RvIGJh
aWw7Ci0gICAgICAgIH0KLSAgICAgICAgYyA9IGJ1ZltuZXh0XTsKLSAgICAgICAgaWYgKGMgIT0g
J3UnKSB7Ci0gICAgICAgICAgICAvKiBOb24tdW5pY29kZSBiYWNrc2xhc2ggZXNjYXBlcyAqLwot
ICAgICAgICAgICAgZW5kID0gbmV4dCArIDE7Ci0gICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlICciJzogYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnXFwn
OiBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICcvJzogYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAnYic6IGMgPSAnXGInOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICdmJzog
YyA9ICdcZic7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJ24nOiBjID0gJ1xuJzsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAncic6IGMgPSAnXHInOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlICd0JzogYyA9ICdcdCc7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IGMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGMgPT0gMCkgewotICAg
ICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXGVzY2FwZSIsIHB5c3RyLCBlbmQg
LSAyKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjID0gMDsKLSAgICAgICAgICAgIG5leHQr
KzsKLSAgICAgICAgICAgIGVuZCA9IG5leHQgKyA0OwotICAgICAgICAgICAgaWYgKGVuZCA+PSBs
ZW4pIHsKLSAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2Nh
cGUiLCBweXN0ciwgbmV4dCAtIDEpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIC8qIERlY29kZSA0IGhleCBkaWdpdHMgKi8KLSAgICAgICAg
ICAgIGZvciAoOyBuZXh0IDwgZW5kOyBuZXh0KyspIHsKLSAgICAgICAgICAgICAgICBQeV9VTklD
T0RFIGRpZ2l0ID0gYnVmW25leHRdOwotICAgICAgICAgICAgICAgIGMgPDw9IDQ7Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChkaWdpdCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzog
Y2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJzAnKTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNl
ICdlJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjIHw9IChkaWdpdCAtICdhJyArIDEwKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChk
aWdpdCAtICdBJyArIDEwKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2Nh
cGUiLCBweXN0ciwgZW5kIC0gNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2lmZGVmIFB5X1VOSUNPREVfV0lE
RQotICAgICAgICAgICAgLyogU3Vycm9nYXRlIHBhaXIgKi8KLSAgICAgICAgICAgIGlmICgoYyAm
IDB4ZmMwMCkgPT0gMHhkODAwKSB7Ci0gICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjMiA9IDA7
Ci0gICAgICAgICAgICAgICAgaWYgKGVuZCArIDYgPj0gbGVuKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0g
NSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKGJ1ZltuZXh0KytdICE9ICdcXCcgfHwgYnVmW25leHQrK10gIT0g
J3UnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBz
dXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFp
bDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZW5kICs9IDY7Ci0gICAgICAg
ICAgICAgICAgLyogRGVjb2RlIDQgaGV4IGRpZ2l0cyAqLwotICAgICAgICAgICAgICAgIGZvciAo
OyBuZXh0IDwgZW5kOyBuZXh0KyspIHsKLSAgICAgICAgICAgICAgICAgICAgYzIgPDw9IDQ7Ci0g
ICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgZGlnaXQgPSBidWZbbmV4dF07Ci0gICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoZGlnaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBj
YXNlICc5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnMCcp
OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2Fz
ZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J2YnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICdhJyArIDEw
KTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdBJzogY2FzZSAnQic6IGNh
c2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdGJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnQScgKyAx
MCk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBw
eXN0ciwgZW5kIC0gNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICgoYzIgJiAweGZjMDApICE9IDB4ZGMwMCkgewotICAgICAgICAgICAgICAgICAgICByYWlz
ZV9lcnJtc2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOwotICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAtIDB4ZDgwMCkgPDwgMTApIHwgKGMyIC0gMHhkYzAw
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICgoYyAmIDB4ZmMwMCkgPT0g
MHhkYzAwKSB7Ci0gICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBsb3cgc3Vy
cm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAg
ICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGlmIChjID4gMHg3Zikgewot
ICAgICAgICAgICAgaGFzX3VuaWNvZGUgPSAxOwotICAgICAgICB9Ci0gICAgICAgIEFQUEVORF9P
TERfQ0hVTksKLSAgICAgICAgaWYgKGhhc191bmljb2RlKSB7Ci0gICAgICAgICAgICBjaHVuayA9
IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgmYywgMSk7Ci0gICAgICAgICAgICBpZiAoY2h1bmsgPT0g
TlVMTCkgewotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgY19jaGFyID0gUHlfQ0hBUk1B
U0soYyk7Ci0gICAgICAgICAgICBjaHVuayA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCZj
X2NoYXIsIDEpOwotICAgICAgICAgICAgaWYgKGNodW5rID09IE5VTEwpIHsKLSAgICAgICAgICAg
ICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoY2h1bmtzID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGNodW5rICE9IE5VTEwpCi0gICAgICAg
ICAgICBydmFsID0gY2h1bms7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJ2YWwgPSBQeVN0
cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAg
ICBBUFBFTkRfT0xEX0NIVU5LCi0gICAgICAgIHJ2YWwgPSBqb2luX2xpc3Rfc3RyaW5nKGNodW5r
cyk7Ci0gICAgICAgIGlmIChydmFsID09IE5VTEwpIHsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsK
LSAgICAgICAgfQotICAgICAgICBQeV9DTEVBUihjaHVua3MpOwotICAgIH0KLQotICAgICpuZXh0
X2VuZF9wdHIgPSBlbmQ7Ci0gICAgcmV0dXJuIHJ2YWw7Ci1iYWlsOgotICAgICpuZXh0X2VuZF9w
dHIgPSAtMTsKLSAgICBQeV9YREVDUkVGKGNodW5rKTsKLSAgICBQeV9YREVDUkVGKGNodW5rcyk7
Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXNjYW5zdHJpbmdf
dW5pY29kZShQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgZW5kLCBpbnQgc3RyaWN0LCBQeV9z
c2l6ZV90ICpuZXh0X2VuZF9wdHIpCi17Ci0gICAgLyogUmVhZCB0aGUgSlNPTiBzdHJpbmcgZnJv
bSBQeVVuaWNvZGUgcHlzdHIuCi0gICAgZW5kIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hh
cmFjdGVyIGFmdGVyIHRoZSBxdW90ZS4KLSAgICBpZiBzdHJpY3QgaXMgemVybyB0aGVuIGxpdGVy
YWwgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkCi0gICAgKm5leHRfZW5kX3B0ciBpcyBh
IHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggb2YgdGhlIGNoYXJhY3RlcgotICAgICAgICBhZnRl
ciB0aGUgZW5kIHF1b3RlCi0KLSAgICBSZXR1cm4gdmFsdWUgaXMgYSBuZXcgUHlVbmljb2RlCi0g
ICAgKi8KLSAgICBQeU9iamVjdCAqcnZhbDsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IFB5VW5pY29k
ZV9HRVRfU0laRShweXN0cik7Ci0gICAgUHlfc3NpemVfdCBiZWdpbiA9IGVuZCAtIDE7Ci0gICAg
UHlfc3NpemVfdCBuZXh0ID0gYmVnaW47Ci0gICAgY29uc3QgUHlfVU5JQ09ERSAqYnVmID0gUHlV
bmljb2RlX0FTX1VOSUNPREUocHlzdHIpOwotICAgIFB5T2JqZWN0ICpjaHVua3MgPSBOVUxMOwot
ICAgIFB5T2JqZWN0ICpjaHVuayA9IE5VTEw7Ci0KLSAgICBpZiAoZW5kIDwgMCB8fCBsZW4gPD0g
ZW5kKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW5kIGlz
IG91dCBvZiBib3VuZHMiKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLSAgICB3aGlsZSAo
MSkgewotICAgICAgICAvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBvciB0aGUgbmV4dCBl
c2NhcGUgKi8KLSAgICAgICAgUHlfVU5JQ09ERSBjID0gMDsKLSAgICAgICAgZm9yIChuZXh0ID0g
ZW5kOyBuZXh0IDwgbGVuOyBuZXh0KyspIHsKLSAgICAgICAgICAgIGMgPSBidWZbbmV4dF07Ci0g
ICAgICAgICAgICBpZiAoYyA9PSAnIicgfHwgYyA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzdHJpY3QgJiYgYyA8
PSAweDFmKSB7Ci0gICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIGNvbnRyb2wg
Y2hhcmFjdGVyIGF0IiwgcHlzdHIsIG5leHQpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIShjID09ICciJyB8fCBjID09
ICdcXCcpKSB7Ci0gICAgICAgICAgICByYWlzZV9lcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcg
c3RhcnRpbmcgYXQiLCBweXN0ciwgYmVnaW4pOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAg
ICAgICB9Ci0gICAgICAgIC8qIFBpY2sgdXAgdGhpcyBjaHVuayBpZiBpdCdzIG5vdCB6ZXJvIGxl
bmd0aCAqLwotICAgICAgICBpZiAobmV4dCAhPSBlbmQpIHsKLSAgICAgICAgICAgIEFQUEVORF9P
TERfQ0hVTksKLSAgICAgICAgICAgIGNodW5rID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKCZidWZb
ZW5kXSwgbmV4dCAtIGVuZCk7Ci0gICAgICAgICAgICBpZiAoY2h1bmsgPT0gTlVMTCkgewotICAg
ICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBuZXh0Kys7Ci0gICAgICAgIGlmIChjID09ICciJykgewotICAgICAgICAgICAgZW5kID0gbmV4
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuZXh0ID09IGxl
bikgewotICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0
aW5nIGF0IiwgcHlzdHIsIGJlZ2luKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAg
fQotICAgICAgICBjID0gYnVmW25leHRdOwotICAgICAgICBpZiAoYyAhPSAndScpIHsKLSAgICAg
ICAgICAgIC8qIE5vbi11bmljb2RlIGJhY2tzbGFzaCBlc2NhcGVzICovCi0gICAgICAgICAgICBl
bmQgPSBuZXh0ICsgMTsKLSAgICAgICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAgICAg
IGNhc2UgJyInOiBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICdcXCc6IGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgJy8nOiBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICdiJzog
YyA9ICdcYic7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJ2YnOiBjID0gJ1xmJzsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnbic6IGMgPSAnXG4nOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlICdyJzogYyA9ICdccic7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
J3QnOiBjID0gJ1x0JzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDogYyA9IDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg
cmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcZXNjYXBlIiwgcHlzdHIsIGVuZCAtIDIpOwotICAgICAg
ICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGMgPSAwOwotICAgICAgICAgICAgbmV4dCsrOwotICAgICAgICAg
ICAgZW5kID0gbmV4dCArIDQ7Ci0gICAgICAgICAgICBpZiAoZW5kID49IGxlbikgewotICAgICAg
ICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhYIGVzY2FwZSIsIHB5c3RyLCBu
ZXh0IC0gMSk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLyogRGVjb2RlIDQgaGV4IGRpZ2l0cyAqLwotICAgICAgICAgICAgZm9yICg7IG5l
eHQgPCBlbmQ7IG5leHQrKykgewotICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgZGlnaXQgPSBi
dWZbbmV4dF07Ci0gICAgICAgICAgICAgICAgYyA8PD0gNDsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKGRpZ2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2Fz
ZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6
IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotICAgICAgICAgICAgICAg
ICAgICAgICAgYyB8PSAoZGlnaXQgLSAnMCcpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRp
Z2l0IC0gJ2EnICsgMTApOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IGNh
c2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJ0EnICsg
MTApOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhYIGVzY2FwZSIsIHB5c3RyLCBl
bmQgLSA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgICAgICAg
ICAvKiBTdXJyb2dhdGUgcGFpciAqLwotICAgICAgICAgICAgaWYgKChjICYgMHhmYzAwKSA9PSAw
eGQ4MDApIHsKLSAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGMyID0gMDsKLSAgICAgICAgICAg
ICAgICBpZiAoZW5kICsgNiA+PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJy
bXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKLSAgICAgICAg
ICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoYnVmW25leHQrK10gIT0gJ1xcJyB8fCBidWZbbmV4dCsrXSAhPSAndScpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5
c3RyLCBlbmQgLSA1KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbmQgKz0gNjsKLSAgICAgICAgICAgICAgICAvKiBE
ZWNvZGUgNCBoZXggZGlnaXRzICovCi0gICAgICAgICAgICAgICAgZm9yICg7IG5leHQgPCBlbmQ7
IG5leHQrKykgewotICAgICAgICAgICAgICAgICAgICBjMiA8PD0gNDsKLSAgICAgICAgICAgICAg
ICAgICAgUHlfVU5JQ09ERSBkaWdpdCA9IGJ1ZltuZXh0XTsKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChkaWdpdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6IGNhc2Ug
JzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICcwJyk7IGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAn
ZCc6IGNhc2UgJ2UnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ2EnICsgMTApOyBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2Ug
J0QnOiBjYXNlICdFJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICdBJyArIDEwKTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhYIGVzY2FwZSIsIHB5c3RyLCBlbmQgLSA1
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChjMiAmIDB4
ZmMwMCkgIT0gMHhkYzAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5w
YWlyZWQgaGlnaCBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYyA9IDB4
MTAwMDAgKyAoKChjIC0gMHhkODAwKSA8PCAxMCkgfCAoYzIgLSAweGRjMDApKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKChjICYgMHhmYzAwKSA9PSAweGRjMDApIHsKLSAg
ICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGxvdyBzdXJyb2dhdGUiLCBweXN0
ciwgZW5kIC0gNSk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQot
I2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgQVBQRU5EX09MRF9DSFVOSwotICAgICAgICBjaHVu
ayA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgmYywgMSk7Ci0gICAgICAgIGlmIChjaHVuayA9PSBO
VUxMKSB7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoY2h1bmtzID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGNodW5rICE9IE5VTEwpCi0gICAgICAg
ICAgICBydmFsID0gY2h1bms7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJ2YWwgPSBQeVVu
aWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgMCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBB
UFBFTkRfT0xEX0NIVU5LCi0gICAgICAgIHJ2YWwgPSBqb2luX2xpc3RfdW5pY29kZShjaHVua3Mp
OwotICAgICAgICBpZiAocnZhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0g
ICAgICAgIH0KLSAgICAgICAgUHlfQ0xFQVIoY2h1bmtzKTsKLSAgICB9Ci0gICAgKm5leHRfZW5k
X3B0ciA9IGVuZDsKLSAgICByZXR1cm4gcnZhbDsKLWJhaWw6Ci0gICAgKm5leHRfZW5kX3B0ciA9
IC0xOwotICAgIFB5X1hERUNSRUYoY2h1bmspOwotICAgIFB5X1hERUNSRUYoY2h1bmtzKTsKLSAg
ICByZXR1cm4gTlVMTDsKLX0KLQotUHlEb2NfU1RSVkFSKHB5ZG9jX3NjYW5zdHJpbmcsCi0gICAg
InNjYW5zdHJpbmcoYmFzZXN0cmluZywgZW5kLCBlbmNvZGluZywgc3RyaWN0PVRydWUpIC0+IChz
dHIsIGVuZClcbiIKLSAgICAiXG4iCi0gICAgIlNjYW4gdGhlIHN0cmluZyBzIGZvciBhIEpTT04g
c3RyaW5nLiBFbmQgaXMgdGhlIGluZGV4IG9mIHRoZVxuIgotICAgICJjaGFyYWN0ZXIgaW4gcyBh
ZnRlciB0aGUgcXVvdGUgdGhhdCBzdGFydGVkIHRoZSBKU09OIHN0cmluZy5cbiIKLSAgICAiVW5l
c2NhcGVzIGFsbCB2YWxpZCBKU09OIHN0cmluZyBlc2NhcGUgc2VxdWVuY2VzIGFuZCByYWlzZXMg
VmFsdWVFcnJvclxuIgotICAgICJvbiBhdHRlbXB0IHRvIGRlY29kZSBhbiBpbnZhbGlkIHN0cmlu
Zy4gSWYgc3RyaWN0IGlzIEZhbHNlIHRoZW4gbGl0ZXJhbFxuIgotICAgICJjb250cm9sIGNoYXJh
Y3RlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIHN0cmluZy5cbiIKLSAgICAiXG4iCi0gICAgIlJldHVy
bnMgYSB0dXBsZSBvZiB0aGUgZGVjb2RlZCBzdHJpbmcgYW5kIHRoZSBpbmRleCBvZiB0aGUgY2hh
cmFjdGVyIGluIHNcbiIKLSAgICAiYWZ0ZXIgdGhlIGVuZCBxdW90ZS4iCi0pOwotCi1zdGF0aWMg
UHlPYmplY3QgKgotcHlfc2NhbnN0cmluZyhQeU9iamVjdCogc2VsZiBVTlVTRUQsIFB5T2JqZWN0
ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpweXN0cjsKLSAgICBQeU9iamVjdCAqcnZhbDsKLSAg
ICBQeV9zc2l6ZV90IGVuZDsKLSAgICBQeV9zc2l6ZV90IG5leHRfZW5kID0gLTE7Ci0gICAgY2hh
ciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIGludCBzdHJpY3QgPSAxOwotICAgIGlmICghUHlBcmdf
UGFyc2VUdXBsZShhcmdzLCAiT08mfHppOnNjYW5zdHJpbmciLCAmcHlzdHIsIF9jb252ZXJ0UHlJ
bnRfQXNTc2l6ZV90LCAmZW5kLCAmZW5jb2RpbmcsICZzdHJpY3QpKSB7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLSAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICBlbmNv
ZGluZyA9IERFRkFVTFRfRU5DT0RJTkc7Ci0gICAgfQotICAgIGlmIChQeVN0cmluZ19DaGVjayhw
eXN0cikpIHsKLSAgICAgICAgcnZhbCA9IHNjYW5zdHJpbmdfc3RyKHB5c3RyLCBlbmQsIGVuY29k
aW5nLCBzdHJpY3QsICZuZXh0X2VuZCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VW5pY29kZV9D
aGVjayhweXN0cikpIHsKLSAgICAgICAgcnZhbCA9IHNjYW5zdHJpbmdfdW5pY29kZShweXN0ciwg
ZW5kLCBzdHJpY3QsICZuZXh0X2VuZCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeUVy
cl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGFy
Z3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIG5vdCAlLjgwcyIsCi0gICAgICAgICAgICAgICAgICAg
ICBQeV9UWVBFKHB5c3RyKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LSAgICByZXR1cm4gX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUocnZhbCwgbmV4dF9lbmQpOwotfQot
Ci1QeURvY19TVFJWQVIocHlkb2NfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWksCi0gICAgImVuY29k
ZV9iYXNlc3RyaW5nX2FzY2lpKGJhc2VzdHJpbmcpIC0+IHN0clxuIgotICAgICJcbiIKLSAgICAi
UmV0dXJuIGFuIEFTQ0lJLW9ubHkgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJp
bmciCi0pOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWko
UHlPYmplY3QqIHNlbGYgVU5VU0VELCBQeU9iamVjdCAqcHlzdHIpCi17Ci0gICAgLyogUmV0dXJu
IGFuIEFTQ0lJLW9ubHkgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJpbmcgKi8K
LSAgICAvKiBNRVRIX08gKi8KLSAgICBpZiAoUHlTdHJpbmdfQ2hlY2socHlzdHIpKSB7Ci0gICAg
ICAgIHJldHVybiBhc2NpaV9lc2NhcGVfc3RyKHB5c3RyKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
UHlVbmljb2RlX0NoZWNrKHB5c3RyKSkgewotICAgICAgICByZXR1cm4gYXNjaWlfZXNjYXBlX3Vu
aWNvZGUocHlzdHIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5
RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0
IGJlIGEgc3RyaW5nLCBub3QgJS44MHMiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShw
eXN0ciktPnRwX25hbWUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLXN0YXRp
YyB2b2lkCi1zY2FubmVyX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgLyogRGVhbGxv
Y2F0ZSBzY2FubmVyIG9iamVjdCAqLwotICAgIHNjYW5uZXJfY2xlYXIoc2VsZik7Ci0gICAgUHlf
VFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKLX0KLQotc3RhdGljIGludAotc2Nhbm5lcl90cmF2
ZXJzZShQeU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCi17Ci0gICAg
UHlTY2FubmVyT2JqZWN0ICpzOwotICAgIGFzc2VydChQeVNjYW5uZXJfQ2hlY2soc2VsZikpOwot
ICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICopc2VsZjsKLSAgICBQeV9WSVNJVChzLT5lbmNvZGlu
Zyk7Ci0gICAgUHlfVklTSVQocy0+c3RyaWN0KTsKLSAgICBQeV9WSVNJVChzLT5vYmplY3RfaG9v
ayk7Ci0gICAgUHlfVklTSVQocy0+cGFpcnNfaG9vayk7Ci0gICAgUHlfVklTSVQocy0+cGFyc2Vf
ZmxvYXQpOwotICAgIFB5X1ZJU0lUKHMtPnBhcnNlX2ludCk7Ci0gICAgUHlfVklTSVQocy0+cGFy
c2VfY29uc3RhbnQpOwotICAgIFB5X1ZJU0lUKHMtPm1lbW8pOwotICAgIHJldHVybiAwOwotfQot
Ci1zdGF0aWMgaW50Ci1zY2FubmVyX2NsZWFyKFB5T2JqZWN0ICpzZWxmKQotewotICAgIFB5U2Nh
bm5lck9iamVjdCAqczsKLSAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKLSAgICBz
ID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7Ci0gICAgUHlfQ0xFQVIocy0+ZW5jb2RpbmcpOwot
ICAgIFB5X0NMRUFSKHMtPnN0cmljdCk7Ci0gICAgUHlfQ0xFQVIocy0+b2JqZWN0X2hvb2spOwot
ICAgIFB5X0NMRUFSKHMtPnBhaXJzX2hvb2spOwotICAgIFB5X0NMRUFSKHMtPnBhcnNlX2Zsb2F0
KTsKLSAgICBQeV9DTEVBUihzLT5wYXJzZV9pbnQpOwotICAgIFB5X0NMRUFSKHMtPnBhcnNlX2Nv
bnN0YW50KTsKLSAgICBQeV9DTEVBUihzLT5tZW1vKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh
dGljIFB5T2JqZWN0ICoKLV9wYXJzZV9vYmplY3Rfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlP
YmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7
Ci0gICAgLyogUmVhZCBhIEpTT04gb2JqZWN0IGZyb20gUHlTdHJpbmcgcHlzdHIuCi0gICAgaWR4
IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGN1
cmx5IGJyYWNlLgotICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGlu
ZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKLSAgICAgICAgdGhlIGNsb3NpbmcgY3Vy
bHkgYnJhY2UuCi0KLSAgICBSZXR1cm5zIGEgbmV3IFB5T2JqZWN0ICh1c3VhbGx5IGEgZGljdCwg
YnV0IG9iamVjdF9ob29rIG9yCi0gICAgb2JqZWN0X3BhaXJzX2hvb2sgY2FuIGNoYW5nZSB0aGF0
KQotICAgICovCi0gICAgY2hhciAqc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKLSAg
ICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVN0cmluZ19HRVRfU0laRShweXN0cikgLSAxOwotICAg
IFB5T2JqZWN0ICpydmFsID0gTlVMTDsKLSAgICBQeU9iamVjdCAqcGFpcnMgPSBOVUxMOwotICAg
IFB5T2JqZWN0ICppdGVtOwotICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMOwotICAgIFB5T2JqZWN0
ICp2YWwgPSBOVUxMOwotICAgIGNoYXIgKmVuY29kaW5nID0gUHlTdHJpbmdfQVNfU1RSSU5HKHMt
PmVuY29kaW5nKTsKLSAgICBpbnQgc3RyaWN0ID0gUHlPYmplY3RfSXNUcnVlKHMtPnN0cmljdCk7
Ci0gICAgaW50IGhhc19wYWlyc19ob29rID0gKHMtPnBhaXJzX2hvb2sgIT0gUHlfTm9uZSk7Ci0g
ICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKLSAgICBpZiAoaGFzX3BhaXJzX2hvb2spIHsKLSAgICAg
ICAgcGFpcnMgPSBQeUxpc3RfTmV3KDApOwotICAgICAgICBpZiAocGFpcnMgPT0gTlVMTCkKLSAg
ICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcnZhbCA9
IFB5RGljdF9OZXcoKTsKLSAgICAgICAgaWYgKHJ2YWwgPT0gTlVMTCkKLSAgICAgICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciB7ICovCi0g
ICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgr
KzsKLQotICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgb2JqZWN0IGlzIG5vbi1lbXB0eSAqLwotICAg
IGlmIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSAhPSAnfScpIHsKLSAgICAgICAgd2hpbGUg
KGlkeCA8PSBlbmRfaWR4KSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbWVtb2tleTsKLQotICAg
ICAgICAgICAgLyogcmVhZCBrZXkgKi8KLSAgICAgICAgICAgIGlmIChzdHJbaWR4XSAhPSAnIicp
IHsKLSAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1l
IiwgcHlzdHIsIGlkeCk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAga2V5ID0gc2NhbnN0cmluZ19zdHIocHlzdHIsIGlkeCArIDEsIGVuY29k
aW5nLCBzdHJpY3QsICZuZXh0X2lkeCk7Ci0gICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCi0g
ICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgbWVtb2tleSA9IFB5RGljdF9H
ZXRJdGVtKHMtPm1lbW8sIGtleSk7Ci0gICAgICAgICAgICBpZiAobWVtb2tleSAhPSBOVUxMKSB7
Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1lbW9rZXkpOwotICAgICAgICAgICAgICAgIFB5
X0RFQ1JFRihrZXkpOwotICAgICAgICAgICAgICAgIGtleSA9IG1lbW9rZXk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0
ZW0ocy0+bWVtbywga2V5LCBrZXkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWls
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7Ci0KLSAgICAgICAg
ICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZXR3ZWVuIGtleSBhbmQgOiBkZWxpbWl0ZXIsIHJlYWQg
Oiwgc2tpcCB3aGl0ZXNwYWNlICovCi0gICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgg
JiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwotICAgICAgICAgICAgaWYgKGlkeCA+
IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgcmFpc2VfZXJy
bXNnKCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKLSAgICAgICAgICAgICAg
ICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZHgrKzsKLSAgICAgICAg
ICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4
Kys7Ci0KLSAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gZGF0YSB0eXBlICovCi0gICAgICAg
ICAgICB2YWwgPSBzY2FuX29uY2Vfc3RyKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7Ci0gICAg
ICAgICAgICBpZiAodmFsID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotCi0g
ICAgICAgICAgICBpZiAoaGFzX3BhaXJzX2hvb2spIHsKLSAgICAgICAgICAgICAgICBpdGVtID0g
UHlUdXBsZV9QYWNrKDIsIGtleSwgdmFsKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBO
VUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgUHlf
Q0xFQVIoa2V5KTsKLSAgICAgICAgICAgICAgICBQeV9DTEVBUih2YWwpOwotICAgICAgICAgICAg
ICAgIGlmIChQeUxpc3RfQXBwZW5kKHBhaXJzLCBpdGVtKSA9PSAtMSkgewotICAgICAgICAgICAg
ICAgICAgICBQeV9ERUNSRUYoaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RGlj
dF9TZXRJdGVtKHJ2YWwsIGtleSwgdmFsKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFpbDsKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihrZXkpOwotICAgICAgICAgICAgICAgIFB5
X0NMRUFSKHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsK
LQotICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJlZm9yZSB9IG9yICwgKi8KLSAgICAg
ICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkg
aWR4Kys7Ci0KLSAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3Ig
d2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBl
bmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChzdHJbaWR4XSA9PSAnfScpIHsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHN0
cltpZHhdICE9ICcsJykgewotICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5n
ICwgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWR4Kys7Ci0KLSAgICAgICAgICAgIC8qIHNraXAg
d2hpdGVzcGFjZSBhZnRlciAsIGRlbGltaXRlciAqLwotICAgICAgICAgICAgd2hpbGUgKGlkeCA8
PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQg
YmUgJ30nICovCi0gICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJ30nKSB7Ci0g
ICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsK
LSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qIGlmIHBhaXJzX2hvb2sgaXMgbm90
IE5vbmU6IHJ2YWwgPSBvYmplY3RfcGFpcnNfaG9vayhwYWlycykgKi8KLSAgICBpZiAocy0+cGFp
cnNfaG9vayAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIHZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bk9iakFyZ3Mocy0+cGFpcnNfaG9vaywgcGFpcnMsIE5VTEwpOwotICAgICAgICBpZiAodmFsID09
IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIFB5X0RFQ1JFRihwYWlycyk7
Ci0gICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOwotICAgICAgICByZXR1cm4gdmFsOwot
ICAgIH0KLQotICAgIC8qIGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOiBydmFsID0gb2JqZWN0
X2hvb2socnZhbCkgKi8KLSAgICBpZiAocy0+b2JqZWN0X2hvb2sgIT0gUHlfTm9uZSkgewotICAg
ICAgICB2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPm9iamVjdF9ob29rLCBy
dmFsLCBOVUxMKTsKLSAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBi
YWlsOwotICAgICAgICBQeV9ERUNSRUYocnZhbCk7Ci0gICAgICAgIHJ2YWwgPSB2YWw7Ci0gICAg
ICAgIHZhbCA9IE5VTEw7Ci0gICAgfQotICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOwotICAg
IHJldHVybiBydmFsOwotYmFpbDoKLSAgICBQeV9YREVDUkVGKHJ2YWwpOwotICAgIFB5X1hERUNS
RUYoa2V5KTsKLSAgICBQeV9YREVDUkVGKHZhbCk7Ci0gICAgUHlfWERFQ1JFRihwYWlycyk7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1fcGFyc2Vfb2JqZWN0X3Vu
aWNvZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4
LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKLSAgICAvKiBSZWFkIGEgSlNPTiBvYmplY3Qg
ZnJvbSBQeVVuaWNvZGUgcHlzdHIuCi0gICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGN1cmx5IGJyYWNlLgotICAgICpuZXh0X2lkeF9w
dHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIg
YWZ0ZXIKLSAgICAgICAgdGhlIGNsb3NpbmcgY3VybHkgYnJhY2UuCi0KLSAgICBSZXR1cm5zIGEg
bmV3IFB5T2JqZWN0ICh1c3VhbGx5IGEgZGljdCwgYnV0IG9iamVjdF9ob29rIGNhbiBjaGFuZ2Ug
dGhhdCkKLSAgICAqLwotICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19VTklDT0RF
KHB5c3RyKTsKLSAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlz
dHIpIC0gMTsKLSAgICBQeU9iamVjdCAqcnZhbCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnBhaXJz
ID0gTlVMTDsKLSAgICBQeU9iamVjdCAqaXRlbTsKLSAgICBQeU9iamVjdCAqa2V5ID0gTlVMTDsK
LSAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKLSAgICBpbnQgc3RyaWN0ID0gUHlPYmplY3RfSXNU
cnVlKHMtPnN0cmljdCk7Ci0gICAgaW50IGhhc19wYWlyc19ob29rID0gKHMtPnBhaXJzX2hvb2sg
IT0gUHlfTm9uZSk7Ci0gICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKLQotICAgIGlmIChoYXNfcGFp
cnNfaG9vaykgewotICAgICAgICBwYWlycyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgICAgIGlmIChw
YWlycyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2Ug
ewotICAgICAgICBydmFsID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAocnZhbCA9PSBOVUxM
KQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIAotICAgIC8qIHNraXAgd2hp
dGVzcGFjZSBhZnRlciB7ICovCi0gICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRF
U1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKLQotICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgb2JqZWN0
IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSAhPSAn
fScpIHsKLSAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4KSB7Ci0gICAgICAgICAgICBQeU9i
amVjdCAqbWVtb2tleTsKLQotICAgICAgICAgICAgLyogcmVhZCBrZXkgKi8KLSAgICAgICAgICAg
IGlmIChzdHJbaWR4XSAhPSAnIicpIHsKLSAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4
cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcHlzdHIsIGlkeCk7Ci0gICAgICAgICAgICAgICAgZ290
byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAga2V5ID0gc2NhbnN0cmluZ191bmlj
b2RlKHB5c3RyLCBpZHggKyAxLCBzdHJpY3QsICZuZXh0X2lkeCk7Ci0gICAgICAgICAgICBpZiAo
a2V5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgbWVt
b2tleSA9IFB5RGljdF9HZXRJdGVtKHMtPm1lbW8sIGtleSk7Ci0gICAgICAgICAgICBpZiAobWVt
b2tleSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1lbW9rZXkpOwotICAg
ICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICAgICAgICAgIGtleSA9IG1lbW9r
ZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoUHlEaWN0X1NldEl0ZW0ocy0+bWVtbywga2V5LCBrZXkpIDwgMCkKLSAgICAgICAgICAgICAg
ICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWR4ID0gbmV4dF9p
ZHg7Ci0KLSAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZXR3ZWVuIGtleSBhbmQgOiBk
ZWxpbWl0ZXIsIHJlYWQgOiwgc2tpcCB3aGl0ZXNwYWNlICovCi0gICAgICAgICAgICB3aGlsZSAo
aWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwotICAgICAg
ICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJzonKSB7Ci0gICAgICAgICAg
ICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsK
LSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZHgrKzsKLSAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNF
KHN0cltpZHhdKSkgaWR4Kys7Ci0KLSAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gdGVybSAq
LwotICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgJm5l
eHRfaWR4KTsKLSAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBn
b3RvIGJhaWw7Ci0KLSAgICAgICAgICAgIGlmIChoYXNfcGFpcnNfaG9vaykgewotICAgICAgICAg
ICAgICAgIGl0ZW0gPSBQeVR1cGxlX1BhY2soMiwga2V5LCB2YWwpOwotICAgICAgICAgICAgICAg
IGlmIChpdGVtID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAg
ICAgICAgICAgICBQeV9DTEVBUihrZXkpOwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7
Ci0gICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocGFpcnMsIGl0ZW0pID09IC0xKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNS
RUYoaXRlbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoUHlEaWN0X1NldEl0ZW0ocnZhbCwga2V5LCB2YWwpIDwgMCkKLSAgICAgICAgICAg
ICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKGtleSk7Ci0gICAg
ICAgICAgICAgICAgUHlfQ0xFQVIodmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlk
eCA9IG5leHRfaWR4OwotCi0gICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYmVmb3JlIH0g
b3IgLCAqLwotICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BB
Q0Uoc3RyW2lkeF0pKSBpZHgrKzsKLQotICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgb2JqZWN0
IGlzIGNsb3NlZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLwotICAgICAgICAg
ICAgaWYgKGlkeCA+IGVuZF9pZHgpIGJyZWFrOwotICAgICAgICAgICAgaWYgKHN0cltpZHhdID09
ICd9JykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAoc3RyW2lkeF0gIT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgcmFpc2VfZXJy
bXNnKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKLSAgICAgICAgICAgICAg
ICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZHgrKzsKLQotICAgICAg
ICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyICwgZGVsaW1pdGVyICovCi0gICAgICAgICAg
ICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsr
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwg
c3RyW2lkeF0gc2hvdWxkIGJlICd9JyAqLwotICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IHN0cltp
ZHhdICE9ICd9JykgewotICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBw
eXN0ciwgZW5kX2lkeCk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKiBpZiBw
YWlyc19ob29rIGlzIG5vdCBOb25lOiBydmFsID0gb2JqZWN0X3BhaXJzX2hvb2socGFpcnMpICov
Ci0gICAgaWYgKHMtPnBhaXJzX2hvb2sgIT0gUHlfTm9uZSkgewotICAgICAgICB2YWwgPSBQeU9i
amVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPnBhaXJzX2hvb2ssIHBhaXJzLCBOVUxMKTsKLSAg
ICAgICAgaWYgKHZhbCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBQ
eV9ERUNSRUYocGFpcnMpOwotICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKLSAgICAg
ICAgcmV0dXJuIHZhbDsKLSAgICB9Ci0KLSAgICAvKiBpZiBvYmplY3RfaG9vayBpcyBub3QgTm9u
ZTogcnZhbCA9IG9iamVjdF9ob29rKHJ2YWwpICovCi0gICAgaWYgKHMtPm9iamVjdF9ob29rICE9
IFB5X05vbmUpIHsKLSAgICAgICAgdmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhz
LT5vYmplY3RfaG9vaywgcnZhbCwgTlVMTCk7Ci0gICAgICAgIGlmICh2YWwgPT0gTlVMTCkKLSAg
ICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgUHlfREVDUkVGKHJ2YWwpOwotICAgICAgICBy
dmFsID0gdmFsOwotICAgICAgICB2YWwgPSBOVUxMOwotICAgIH0KLSAgICAqbmV4dF9pZHhfcHRy
ID0gaWR4ICsgMTsKLSAgICByZXR1cm4gcnZhbDsKLWJhaWw6Ci0gICAgUHlfWERFQ1JFRihydmFs
KTsKLSAgICBQeV9YREVDUkVGKGtleSk7Ci0gICAgUHlfWERFQ1JFRih2YWwpOwotICAgIFB5X1hE
RUNSRUYocGFpcnMpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgot
X3BhcnNlX2FycmF5X3N0cihQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlf
c3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgewotICAgIC8qIFJlYWQgYSBK
U09OIGFycmF5IGZyb20gUHlTdHJpbmcgcHlzdHIuCi0gICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0
aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGJyYWNlLgotICAgICpuZXh0X2lk
eF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0
ZXIgYWZ0ZXIKLSAgICAgICAgdGhlIGNsb3NpbmcgYnJhY2UuCi0KLSAgICBSZXR1cm5zIGEgbmV3
IFB5TGlzdAotICAgICovCi0gICAgY2hhciAqc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5c3Ry
KTsKLSAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVN0cmluZ19HRVRfU0laRShweXN0cikgLSAx
OwotICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpydmFsID0gUHlMaXN0
X05ldygwKTsKLSAgICBQeV9zc2l6ZV90IG5leHRfaWR4OwotICAgIGlmIChydmFsID09IE5VTEwp
Ci0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyIFsg
Ki8KLSAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkp
IGlkeCsrOwotCi0gICAgLyogb25seSBsb29wIGlmIHRoZSBhcnJheSBpcyBub24tZW1wdHkgKi8K
LSAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gIT0gJ10nKSB7Ci0gICAgICAgIHdo
aWxlIChpZHggPD0gZW5kX2lkeCkgewotCi0gICAgICAgICAgICAvKiByZWFkIGFueSBKU09OIHRl
cm0gYW5kIGRlLXR1cGxlZnkgdGhlIChydmFsLCBpZHgpICovCi0gICAgICAgICAgICB2YWwgPSBz
Y2FuX29uY2Vfc3RyKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7Ci0gICAgICAgICAgICBpZiAo
dmFsID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hl
cyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVh
cigpOwotICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3Qi
LCBweXN0ciwgaWR4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ290byBi
YWlsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFs
LCB2YWwpID09IC0xKQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLQotICAgICAgICAgICAg
UHlfQ0xFQVIodmFsKTsKLSAgICAgICAgICAgIGlkeCA9IG5leHRfaWR4OwotCi0gICAgICAgICAg
ICAvKiBza2lwIHdoaXRlc3BhY2UgYmV0d2VlbiB0ZXJtIGFuZCAsICovCi0gICAgICAgICAgICB3
aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwot
Ci0gICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBhcnJheSBpcyBjbG9zZWQgb3Igd2UgZGlkbid0
IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBi
cmVhazsKLSAgICAgICAgICAgIGlmIChzdHJbaWR4XSA9PSAnXScpIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHN0cltpZHhdICE9
ICcsJykgewotICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICwgZGVsaW1p
dGVyIiwgcHlzdHIsIGlkeCk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWR4Kys7Ci0KLSAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFj
ZSBhZnRlciAsICovCi0gICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJ
VEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogdmVy
aWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgc3RyW2lkeF0gc2hvdWxkIGJlICddJyAqLwotICAgIGlm
IChpZHggPiBlbmRfaWR4IHx8IHN0cltpZHhdICE9ICddJykgewotICAgICAgICByYWlzZV9lcnJt
c2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgZW5kX2lkeCk7Ci0gICAgICAgIGdvdG8gYmFp
bDsKLSAgICB9Ci0gICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7Ci0gICAgcmV0dXJuIHJ2YWw7
Ci1iYWlsOgotICAgIFB5X1hERUNSRUYodmFsKTsKLSAgICBQeV9ERUNSRUYocnZhbCk7Ci0gICAg
cmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1fcGFyc2VfYXJyYXlfdW5pY29k
ZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5
X3NzaXplX3QgKm5leHRfaWR4X3B0cikgewotICAgIC8qIFJlYWQgYSBKU09OIGFycmF5IGZyb20g
UHlTdHJpbmcgcHlzdHIuCi0gICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFj
dGVyIGFmdGVyIHRoZSBvcGVuaW5nIGJyYWNlLgotICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1
cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKLSAgICAg
ICAgdGhlIGNsb3NpbmcgYnJhY2UuCi0KLSAgICBSZXR1cm5zIGEgbmV3IFB5TGlzdAotICAgICov
Ci0gICAgUHlfVU5JQ09ERSAqc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOwotICAg
IFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cikgLSAxOwotICAg
IFB5T2JqZWN0ICp2YWwgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpydmFsID0gUHlMaXN0X05ldygw
KTsKLSAgICBQeV9zc2l6ZV90IG5leHRfaWR4OwotICAgIGlmIChydmFsID09IE5VTEwpCi0gICAg
ICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyIFsgKi8KLSAg
ICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsr
OwotCi0gICAgLyogb25seSBsb29wIGlmIHRoZSBhcnJheSBpcyBub24tZW1wdHkgKi8KLSAgICBp
ZiAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gIT0gJ10nKSB7Ci0gICAgICAgIHdoaWxlIChp
ZHggPD0gZW5kX2lkeCkgewotCi0gICAgICAgICAgICAvKiByZWFkIGFueSBKU09OIHRlcm0gICov
Ci0gICAgICAgICAgICB2YWwgPSBzY2FuX29uY2VfdW5pY29kZShzLCBweXN0ciwgaWR4LCAmbmV4
dF9pZHgpOwotICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgcmFpc2Vf
ZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGlkeCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgdmFsKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBn
b3RvIGJhaWw7Ci0KLSAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7Ci0gICAgICAgICAgICBpZHgg
PSBuZXh0X2lkeDsKLQotICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4gdGVy
bSBhbmQgLCAqLwotICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRF
U1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKLQotICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgYXJy
YXkgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCi0gICAgICAg
ICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoc3RyW2lkeF0g
PT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChzdHJbaWR4XSAhPSAnLCcpIHsKLSAgICAgICAgICAgICAgICByYWlzZV9l
cnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOwotICAgICAgICAgICAg
ICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkeCsrOwotCi0gICAg
ICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgLCAqLwotICAgICAgICAgICAgd2hpbGUg
KGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8qIHZlcmlmeSB0aGF0IGlkeCA8IGVuZF9pZHgsIHN0cltpZHhd
IHNob3VsZCBiZSAnXScgKi8KLSAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAn
XScpIHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVu
ZF9pZHgpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgICpuZXh0X2lkeF9wdHIgPSBp
ZHggKyAxOwotICAgIHJldHVybiBydmFsOwotYmFpbDoKLSAgICBQeV9YREVDUkVGKHZhbCk7Ci0g
ICAgUHlfREVDUkVGKHJ2YWwpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgUHlPYmpl
Y3QgKgotX3BhcnNlX2NvbnN0YW50KFB5U2Nhbm5lck9iamVjdCAqcywgY2hhciAqY29uc3RhbnQs
IFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKLSAgICAvKiBSZWFk
IGEgSlNPTiBjb25zdGFudCBmcm9tIFB5U3RyaW5nIHB5c3RyLgotICAgIGNvbnN0YW50IGlzIHRo
ZSBjb25zdGFudCBzdHJpbmcgdGhhdCB3YXMgZm91bmQKLSAgICAgICAgKCJOYU4iLCAiSW5maW5p
dHkiLCAiLUluZmluaXR5IikuCi0gICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hh
cmFjdGVyIG9mIHRoZSBjb25zdGFudAotICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnkt
cmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKLSAgICAgICAgdGhl
IGNvbnN0YW50LgotCi0gICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHBhcnNlX2NvbnN0YW50Ci0g
ICAgKi8KLSAgICBQeU9iamVjdCAqY3N0cjsKLSAgICBQeU9iamVjdCAqcnZhbDsKLSAgICAvKiBj
b25zdGFudCBpcyAiTmFOIiwgIkluZmluaXR5Iiwgb3IgIi1JbmZpbml0eSIgKi8KLSAgICBjc3Ry
ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZyhjb25zdGFudCk7Ci0gICAgaWYgKGNzdHIgPT0g
TlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBydmFsID0gcGFyc2VfY29uc3Rh
bnQoY29uc3RhbnQpICovCi0gICAgcnZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mo
cy0+cGFyc2VfY29uc3RhbnQsIGNzdHIsIE5VTEwpOwotICAgIGlkeCArPSBQeVN0cmluZ19HRVRf
U0laRShjc3RyKTsKLSAgICBQeV9ERUNSRUYoY3N0cik7Ci0gICAgKm5leHRfaWR4X3B0ciA9IGlk
eDsKLSAgICByZXR1cm4gcnZhbDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9tYXRjaF9udW1i
ZXJfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IHN0
YXJ0LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKLSAgICAvKiBSZWFkIGEgSlNPTiBudW1i
ZXIgZnJvbSBQeVN0cmluZyBweXN0ci4KLSAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgb2YgdGhlIG51bWJlcgotICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4t
YnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKLSAgICAgICAg
dGhlIG51bWJlci4KLQotICAgIFJldHVybnMgYSBuZXcgUHlPYmplY3QgcmVwcmVzZW50YXRpb24g
b2YgdGhhdCBudW1iZXI6Ci0gICAgICAgIFB5SW50LCBQeUxvbmcsIG9yIFB5RmxvYXQuCi0gICAg
ICAgIE1heSByZXR1cm4gb3RoZXIgdHlwZXMgaWYgcGFyc2VfaW50IG9yIHBhcnNlX2Zsb2F0IGFy
ZSBzZXQKLSAgICAqLwotICAgIGNoYXIgKnN0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7
Ci0gICAgUHlfc3NpemVfdCBlbmRfaWR4ID0gUHlTdHJpbmdfR0VUX1NJWkUocHlzdHIpIC0gMTsK
LSAgICBQeV9zc2l6ZV90IGlkeCA9IHN0YXJ0OwotICAgIGludCBpc19mbG9hdCA9IDA7Ci0gICAg
UHlPYmplY3QgKnJ2YWw7Ci0gICAgUHlPYmplY3QgKm51bXN0cjsKLQotICAgIC8qIHJlYWQgYSBz
aWduIGlmIGl0J3MgdGhlcmUsIG1ha2Ugc3VyZSBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSBzdHJp
bmcgKi8KLSAgICBpZiAoc3RyW2lkeF0gPT0gJy0nKSB7Ci0gICAgICAgIGlkeCsrOwotICAgICAg
ICBpZiAoaWR4ID4gZW5kX2lkeCkgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19T
dG9wSXRlcmF0aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLyogcmVhZCBhcyBtYW55IGludGVnZXIgZGlnaXRzIGFzIHdlIGZpbmQgYXMgbG9u
ZyBhcyBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggMCAqLwotICAgIGlmIChzdHJbaWR4XSA+PSAnMScg
JiYgc3RyW2lkeF0gPD0gJzknKSB7Ci0gICAgICAgIGlkeCsrOwotICAgICAgICB3aGlsZSAoaWR4
IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7
Ci0gICAgfQotICAgIC8qIGlmIGl0IHN0YXJ0cyB3aXRoIDAgd2Ugb25seSBleHBlY3Qgb25lIGlu
dGVnZXIgZGlnaXQgKi8KLSAgICBlbHNlIGlmIChzdHJbaWR4XSA9PSAnMCcpIHsKLSAgICAgICAg
aWR4Kys7Ci0gICAgfQotICAgIC8qIG5vIGludGVnZXIgZGlnaXRzLCBlcnJvciAqLwotICAgIGVs
c2UgewotICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOwotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBpZiB0aGUgbmV4dCBjaGFyIGlzICcuJyBm
b2xsb3dlZCBieSBhIGRpZ2l0IHRoZW4gcmVhZCBhbGwgZmxvYXQgZGlnaXRzICovCi0gICAgaWYg
KGlkeCA8IGVuZF9pZHggJiYgc3RyW2lkeF0gPT0gJy4nICYmIHN0cltpZHggKyAxXSA+PSAnMCcg
JiYgc3RyW2lkeCArIDFdIDw9ICc5JykgewotICAgICAgICBpc19mbG9hdCA9IDE7Ci0gICAgICAg
IGlkeCArPSAyOwotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0g
JzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7Ci0gICAgfQotCi0gICAgLyogaWYgdGhlIG5l
eHQgY2hhciBpcyAnZScgb3IgJ0UnIHRoZW4gbWF5YmUgcmVhZCB0aGUgZXhwb25lbnQgKG9yIGJh
Y2t0cmFjaykgKi8KLSAgICBpZiAoaWR4IDwgZW5kX2lkeCAmJiAoc3RyW2lkeF0gPT0gJ2UnIHx8
IHN0cltpZHhdID09ICdFJykpIHsKLQotICAgICAgICAvKiBzYXZlIHRoZSBpbmRleCBvZiB0aGUg
J2UnIG9yICdFJyBqdXN0IGluIGNhc2Ugd2UgbmVlZCB0byBiYWNrdHJhY2sgKi8KLSAgICAgICAg
UHlfc3NpemVfdCBlX3N0YXJ0ID0gaWR4OwotICAgICAgICBpZHgrKzsKLQotICAgICAgICAvKiBy
ZWFkIGFuIGV4cG9uZW50IHNpZ24gaWYgcHJlc2VudCAqLwotICAgICAgICBpZiAoaWR4IDwgZW5k
X2lkeCAmJiAoc3RyW2lkeF0gPT0gJy0nIHx8IHN0cltpZHhdID09ICcrJykpIGlkeCsrOwotCi0g
ICAgICAgIC8qIHJlYWQgYWxsIGRpZ2l0cyAqLwotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9p
ZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7Ci0KLSAgICAg
ICAgLyogaWYgd2UgZ290IGEgZGlnaXQsIHRoZW4gcGFyc2UgYXMgZmxvYXQuIGlmIG5vdCwgYmFj
a3RyYWNrICovCi0gICAgICAgIGlmIChzdHJbaWR4IC0gMV0gPj0gJzAnICYmIHN0cltpZHggLSAx
XSA8PSAnOScpIHsKLSAgICAgICAgICAgIGlzX2Zsb2F0ID0gMTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGlkeCA9IGVfc3RhcnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvKiBjb3B5IHRoZSBzZWN0aW9uIHdlIGRldGVybWluZWQgdG8gYmUgYSBudW1iZXIgKi8K
LSAgICBudW1zdHIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgmc3RyW3N0YXJ0XSwgaWR4
IC0gc3RhcnQpOwotICAgIGlmIChudW1zdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgaWYgKGlzX2Zsb2F0KSB7Ci0gICAgICAgIC8qIHBhcnNlIGFzIGEgZmxvYXQgdXNpbmcg
YSBmYXN0IHBhdGggaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY2FsbCB1c2VyIGRlZmluZWQgbWV0
aG9kICovCi0gICAgICAgIGlmIChzLT5wYXJzZV9mbG9hdCAhPSAoUHlPYmplY3QgKikmUHlGbG9h
dF9UeXBlKSB7Ci0gICAgICAgICAgICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJn
cyhzLT5wYXJzZV9mbG9hdCwgbnVtc3RyLCBOVUxMKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIC8qIHJ2YWwgPSBQeUZsb2F0X0Zyb21Eb3VibGUoUHlPU19hc2NpaV9h
dG9mKFB5U3RyaW5nX0FTX1NUUklORyhudW1zdHIpKSk7ICovCi0gICAgICAgICAgICBkb3VibGUg
ZCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShQeVN0cmluZ19BU19TVFJJTkcobnVtc3RyKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwot
ICAgICAgICAgICAgaWYgKGQgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcnZhbCA9IFB5RmxvYXRfRnJvbURvdWJs
ZShkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogcGFyc2UgYXMg
YW4gaW50IHVzaW5nIGEgZmFzdCBwYXRoIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNhbGwgdXNl
ciBkZWZpbmVkIG1ldGhvZCAqLwotICAgICAgICBpZiAocy0+cGFyc2VfaW50ICE9IChQeU9iamVj
dCAqKSZQeUludF9UeXBlKSB7Ci0gICAgICAgICAgICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0
aW9uT2JqQXJncyhzLT5wYXJzZV9pbnQsIG51bXN0ciwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBydmFsID0gUHlJbnRfRnJvbVN0cmluZyhQeVN0cmluZ19B
U19TVFJJTkcobnVtc3RyKSwgTlVMTCwgMTApOwotICAgICAgICB9Ci0gICAgfQotICAgIFB5X0RF
Q1JFRihudW1zdHIpOwotICAgICpuZXh0X2lkeF9wdHIgPSBpZHg7Ci0gICAgcmV0dXJuIHJ2YWw7
Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1fbWF0Y2hfbnVtYmVyX3VuaWNvZGUoUHlTY2FubmVy
T2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3Qg
Km5leHRfaWR4X3B0cikgewotICAgIC8qIFJlYWQgYSBKU09OIG51bWJlciBmcm9tIFB5VW5pY29k
ZSBweXN0ci4KLSAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2Yg
dGhlIG51bWJlcgotICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGlu
ZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKLSAgICAgICAgdGhlIG51bWJlci4KLQot
ICAgIFJldHVybnMgYSBuZXcgUHlPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhhdCBudW1iZXI6
Ci0gICAgICAgIFB5SW50LCBQeUxvbmcsIG9yIFB5RmxvYXQuCi0gICAgICAgIE1heSByZXR1cm4g
b3RoZXIgdHlwZXMgaWYgcGFyc2VfaW50IG9yIHBhcnNlX2Zsb2F0IGFyZSBzZXQKLSAgICAqLwot
ICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKLSAgICBQ
eV9zc2l6ZV90IGVuZF9pZHggPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpIC0gMTsKLSAgICBQ
eV9zc2l6ZV90IGlkeCA9IHN0YXJ0OwotICAgIGludCBpc19mbG9hdCA9IDA7Ci0gICAgUHlPYmpl
Y3QgKnJ2YWw7Ci0gICAgUHlPYmplY3QgKm51bXN0cjsKLQotICAgIC8qIHJlYWQgYSBzaWduIGlm
IGl0J3MgdGhlcmUsIG1ha2Ugc3VyZSBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8K
LSAgICBpZiAoc3RyW2lkeF0gPT0gJy0nKSB7Ci0gICAgICAgIGlkeCsrOwotICAgICAgICBpZiAo
aWR4ID4gZW5kX2lkeCkgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRl
cmF0aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLyogcmVhZCBhcyBtYW55IGludGVnZXIgZGlnaXRzIGFzIHdlIGZpbmQgYXMgbG9uZyBhcyBp
dCBkb2Vzbid0IHN0YXJ0IHdpdGggMCAqLwotICAgIGlmIChzdHJbaWR4XSA+PSAnMScgJiYgc3Ry
W2lkeF0gPD0gJzknKSB7Ci0gICAgICAgIGlkeCsrOwotICAgICAgICB3aGlsZSAoaWR4IDw9IGVu
ZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7Ci0gICAg
fQotICAgIC8qIGlmIGl0IHN0YXJ0cyB3aXRoIDAgd2Ugb25seSBleHBlY3Qgb25lIGludGVnZXIg
ZGlnaXQgKi8KLSAgICBlbHNlIGlmIChzdHJbaWR4XSA9PSAnMCcpIHsKLSAgICAgICAgaWR4Kys7
Ci0gICAgfQotICAgIC8qIG5vIGludGVnZXIgZGlnaXRzLCBlcnJvciAqLwotICAgIGVsc2Ugewot
ICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOwotICAgICAgICByZXR1
cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBpZiB0aGUgbmV4dCBjaGFyIGlzICcuJyBmb2xsb3dl
ZCBieSBhIGRpZ2l0IHRoZW4gcmVhZCBhbGwgZmxvYXQgZGlnaXRzICovCi0gICAgaWYgKGlkeCA8
IGVuZF9pZHggJiYgc3RyW2lkeF0gPT0gJy4nICYmIHN0cltpZHggKyAxXSA+PSAnMCcgJiYgc3Ry
W2lkeCArIDFdIDw9ICc5JykgewotICAgICAgICBpc19mbG9hdCA9IDE7Ci0gICAgICAgIGlkeCAr
PSAyOwotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYm
IHN0cltpZHhdIDw9ICc5JykgaWR4Kys7Ci0gICAgfQotCi0gICAgLyogaWYgdGhlIG5leHQgY2hh
ciBpcyAnZScgb3IgJ0UnIHRoZW4gbWF5YmUgcmVhZCB0aGUgZXhwb25lbnQgKG9yIGJhY2t0cmFj
aykgKi8KLSAgICBpZiAoaWR4IDwgZW5kX2lkeCAmJiAoc3RyW2lkeF0gPT0gJ2UnIHx8IHN0cltp
ZHhdID09ICdFJykpIHsKLSAgICAgICAgUHlfc3NpemVfdCBlX3N0YXJ0ID0gaWR4OwotICAgICAg
ICBpZHgrKzsKLQotICAgICAgICAvKiByZWFkIGFuIGV4cG9uZW50IHNpZ24gaWYgcHJlc2VudCAq
LwotICAgICAgICBpZiAoaWR4IDwgZW5kX2lkeCAmJiAoc3RyW2lkeF0gPT0gJy0nIHx8IHN0cltp
ZHhdID09ICcrJykpIGlkeCsrOwotCi0gICAgICAgIC8qIHJlYWQgYWxsIGRpZ2l0cyAqLwotICAg
ICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhd
IDw9ICc5JykgaWR4Kys7Ci0KLSAgICAgICAgLyogaWYgd2UgZ290IGEgZGlnaXQsIHRoZW4gcGFy
c2UgYXMgZmxvYXQuIGlmIG5vdCwgYmFja3RyYWNrICovCi0gICAgICAgIGlmIChzdHJbaWR4IC0g
MV0gPj0gJzAnICYmIHN0cltpZHggLSAxXSA8PSAnOScpIHsKLSAgICAgICAgICAgIGlzX2Zsb2F0
ID0gMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlkeCA9IGVfc3Rh
cnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBjb3B5IHRoZSBzZWN0aW9uIHdlIGRldGVy
bWluZWQgdG8gYmUgYSBudW1iZXIgKi8KLSAgICBudW1zdHIgPSBQeVVuaWNvZGVfRnJvbVVuaWNv
ZGUoJnN0cltzdGFydF0sIGlkeCAtIHN0YXJ0KTsKLSAgICBpZiAobnVtc3RyID09IE5VTEwpCi0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChpc19mbG9hdCkgewotICAgICAgICAvKiBwYXJz
ZSBhcyBhIGZsb2F0IHVzaW5nIGEgZmFzdCBwYXRoIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNh
bGwgdXNlciBkZWZpbmVkIG1ldGhvZCAqLwotICAgICAgICBpZiAocy0+cGFyc2VfZmxvYXQgIT0g
KFB5T2JqZWN0ICopJlB5RmxvYXRfVHlwZSkgewotICAgICAgICAgICAgcnZhbCA9IFB5T2JqZWN0
X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFyc2VfZmxvYXQsIG51bXN0ciwgTlVMTCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydmFsID0gUHlGbG9hdF9Gcm9tU3Ry
aW5nKG51bXN0ciwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAg
IC8qIG5vIGZhc3QgcGF0aCBmb3IgdW5pY29kZSAtPiBpbnQsIGp1c3QgY2FsbCAqLwotICAgICAg
ICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5wYXJzZV9pbnQsIG51bXN0
ciwgTlVMTCk7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihudW1zdHIpOwotICAgICpuZXh0X2lkeF9w
dHIgPSBpZHg7Ci0gICAgcmV0dXJuIHJ2YWw7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1zY2Fu
X29uY2Vfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90
IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKQotewotICAgIC8qIFJlYWQgb25lIEpTT04g
dGVybSAob2YgYW55IGtpbmQpIGZyb20gUHlTdHJpbmcgcHlzdHIuCi0gICAgaWR4IGlzIHRoZSBp
bmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSB0ZXJtCi0gICAgKm5leHRfaWR4X3B0
ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBh
ZnRlcgotICAgICAgICB0aGUgbnVtYmVyLgotCi0gICAgUmV0dXJucyBhIG5ldyBQeU9iamVjdCBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVybS4KLSAgICAqLwotICAgIGNoYXIgKnN0ciA9IFB5U3Ry
aW5nX0FTX1NUUklORyhweXN0cik7Ci0gICAgUHlfc3NpemVfdCBsZW5ndGggPSBQeVN0cmluZ19H
RVRfU0laRShweXN0cik7Ci0gICAgUHlPYmplY3QgKnJ2YWwgPSBOVUxMOwotICAgIGludCBmYWxs
dGhyb3VnaCA9IDA7Ci0gICAgaWYgKGlkeCA+PSBsZW5ndGgpIHsKLSAgICAgICAgUHlFcnJfU2V0
Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
ICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBkZWNvZGluZyBhIEpTT04gZG9j
dW1lbnQiKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc3dpdGNoIChzdHJbaWR4XSkgewot
ICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgIC8qIHN0cmluZyAqLwotICAgICAgICAgICAg
cnZhbCA9IHNjYW5zdHJpbmdfc3RyKHB5c3RyLCBpZHggKyAxLAotICAgICAgICAgICAgICAgIFB5
U3RyaW5nX0FTX1NUUklORyhzLT5lbmNvZGluZyksCi0gICAgICAgICAgICAgICAgUHlPYmplY3Rf
SXNUcnVlKHMtPnN0cmljdCksCi0gICAgICAgICAgICAgICAgbmV4dF9pZHhfcHRyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgIC8qIG9iamVjdCAq
LwotICAgICAgICAgICAgcnZhbCA9IF9wYXJzZV9vYmplY3Rfc3RyKHMsIHB5c3RyLCBpZHggKyAx
LCBuZXh0X2lkeF9wdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1snOgot
ICAgICAgICAgICAgLyogYXJyYXkgKi8KLSAgICAgICAgICAgIHJ2YWwgPSBfcGFyc2VfYXJyYXlf
c3RyKHMsIHB5c3RyLCBpZHggKyAxLCBuZXh0X2lkeF9wdHIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgJ24nOgotICAgICAgICAgICAgLyogbnVsbCAqLwotICAgICAgICAgICAg
aWYgKChpZHggKyAzIDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ3UnICYmIHN0cltpZHgg
KyAyXSA9PSAnbCcgJiYgc3RyW2lkeCArIDNdID09ICdsJykgewotICAgICAgICAgICAgICAgIFB5
X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsg
NDsKLSAgICAgICAgICAgICAgICBydmFsID0gUHlfTm9uZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmYWxsdGhyb3VnaCA9IDE7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICAvKiB0cnVlICovCi0gICAg
ICAgICAgICBpZiAoKGlkeCArIDMgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAncicgJiYg
c3RyW2lkeCArIDJdID09ICd1JyAmJiBzdHJbaWR4ICsgM10gPT0gJ2UnKSB7Ci0gICAgICAgICAg
ICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwotICAgICAgICAgICAgICAgICpuZXh0X2lkeF9wdHIg
PSBpZHggKyA0OwotICAgICAgICAgICAgICAgIHJ2YWwgPSBQeV9UcnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgIC8qIGZhbHNl
ICovCi0gICAgICAgICAgICBpZiAoKGlkeCArIDQgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9
PSAnYScgJiYgc3RyW2lkeCArIDJdID09ICdsJyAmJiBzdHJbaWR4ICsgM10gPT0gJ3MnICYmIHN0
cltpZHggKyA0XSA9PSAnZScpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2Up
OwotICAgICAgICAgICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyA1OwotICAgICAgICAgICAg
ICAgIHJ2YWwgPSBQeV9GYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmYWxsdGhyb3VnaCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSAnTic6Ci0gICAgICAgICAgICAvKiBOYU4gKi8KLSAgICAgICAgICAgIGlmICgoaWR4
ICsgMiA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdhJyAmJiBzdHJbaWR4ICsgMl0gPT0g
J04nKSB7Ci0gICAgICAgICAgICAgICAgcnZhbCA9IF9wYXJzZV9jb25zdGFudChzLCAiTmFOIiwg
aWR4LCBuZXh0X2lkeF9wdHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICdJJzoKLSAgICAgICAgICAgIC8qIEluZmluaXR5ICovCi0gICAgICAgICAgICBpZiAo
KGlkeCArIDcgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnbicgJiYgc3RyW2lkeCArIDJd
ID09ICdmJyAmJiBzdHJbaWR4ICsgM10gPT0gJ2knICYmIHN0cltpZHggKyA0XSA9PSAnbicgJiYg
c3RyW2lkeCArIDVdID09ICdpJyAmJiBzdHJbaWR4ICsgNl0gPT0gJ3QnICYmIHN0cltpZHggKyA3
XSA9PSAneScpIHsKLSAgICAgICAgICAgICAgICBydmFsID0gX3BhcnNlX2NvbnN0YW50KHMsICJJ
bmZpbml0eSIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBmYWxsdGhyb3VnaCA9IDE7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAvKiAtSW5maW5pdHkgKi8KLSAgICAg
ICAgICAgIGlmICgoaWR4ICsgOCA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdJJyAmJiBz
dHJbaWR4ICsgMl0gPT0gJ24nICYmIHN0cltpZHggKyAzXSA9PSAnZicgJiYgc3RyW2lkeCArIDRd
ID09ICdpJyAmJiBzdHJbaWR4ICsgNV0gPT0gJ24nICYmIHN0cltpZHggKyA2XSA9PSAnaScgJiYg
c3RyW2lkeCArIDddID09ICd0JyAmJiBzdHJbaWR4ICsgOF0gPT0gJ3knKSB7Ci0gICAgICAgICAg
ICAgICAgcnZhbCA9IF9wYXJzZV9jb25zdGFudChzLCAiLUluZmluaXR5IiwgaWR4LCBuZXh0X2lk
eF9wdHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGZhbGx0aHJvdWdoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAxOwotICAgIH0KLSAgICAvKiBEaWRuJ3QgZmluZCBh
IHN0cmluZywgb2JqZWN0LCBhcnJheSwgb3IgbmFtZWQgY29uc3RhbnQuIExvb2sgZm9yIGEgbnVt
YmVyLiAqLwotICAgIGlmIChmYWxsdGhyb3VnaCkKLSAgICAgICAgcnZhbCA9IF9tYXRjaF9udW1i
ZXJfc3RyKHMsIHB5c3RyLCBpZHgsIG5leHRfaWR4X3B0cik7Ci0gICAgUHlfTGVhdmVSZWN1cnNp
dmVDYWxsKCk7Ci0gICAgcmV0dXJuIHJ2YWw7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1zY2Fu
X29uY2VfdW5pY29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3Np
emVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikKLXsKLSAgICAvKiBSZWFkIG9uZSBK
U09OIHRlcm0gKG9mIGFueSBraW5kKSBmcm9tIFB5VW5pY29kZSBweXN0ci4KLSAgICBpZHggaXMg
dGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHRlcm0KLSAgICAqbmV4dF9p
ZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFj
dGVyIGFmdGVyCi0gICAgICAgIHRoZSBudW1iZXIuCi0KLSAgICBSZXR1cm5zIGEgbmV3IFB5T2Jq
ZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXJtLgotICAgICovCi0gICAgUHlfVU5JQ09ERSAq
c3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOwotICAgIFB5X3NzaXplX3QgbGVuZ3Ro
ID0gUHlVbmljb2RlX0dFVF9TSVpFKHB5c3RyKTsKLSAgICBQeU9iamVjdCAqcnZhbCA9IE5VTEw7
Ci0gICAgaW50IGZhbGx0aHJvdWdoID0gMDsKLSAgICBpZiAoaWR4ID49IGxlbmd0aCkgewotICAg
ICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOwotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0gICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIGRlY29k
aW5nIGEgSlNPTiBkb2N1bWVudCIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzd2l0Y2gg
KHN0cltpZHhdKSB7Ci0gICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgLyogc3RyaW5nICov
Ci0gICAgICAgICAgICBydmFsID0gc2NhbnN0cmluZ191bmljb2RlKHB5c3RyLCBpZHggKyAxLAot
ICAgICAgICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZShzLT5zdHJpY3QpLAotICAgICAgICAgICAg
ICAgIG5leHRfaWR4X3B0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAneyc6
Ci0gICAgICAgICAgICAvKiBvYmplY3QgKi8KLSAgICAgICAgICAgIHJ2YWwgPSBfcGFyc2Vfb2Jq
ZWN0X3VuaWNvZGUocywgcHlzdHIsIGlkeCArIDEsIG5leHRfaWR4X3B0cik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAnWyc6Ci0gICAgICAgICAgICAvKiBhcnJheSAqLwotICAg
ICAgICAgICAgcnZhbCA9IF9wYXJzZV9hcnJheV91bmljb2RlKHMsIHB5c3RyLCBpZHggKyAxLCBu
ZXh0X2lkeF9wdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ24nOgotICAg
ICAgICAgICAgLyogbnVsbCAqLwotICAgICAgICAgICAgaWYgKChpZHggKyAzIDwgbGVuZ3RoKSAm
JiBzdHJbaWR4ICsgMV0gPT0gJ3UnICYmIHN0cltpZHggKyAyXSA9PSAnbCcgJiYgc3RyW2lkeCAr
IDNdID09ICdsJykgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAg
ICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgNDsKLSAgICAgICAgICAgICAgICBydmFs
ID0gUHlfTm9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmYWxsdGhyb3VnaCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAn
dCc6Ci0gICAgICAgICAgICAvKiB0cnVlICovCi0gICAgICAgICAgICBpZiAoKGlkeCArIDMgPCBs
ZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAncicgJiYgc3RyW2lkeCArIDJdID09ICd1JyAmJiBz
dHJbaWR4ICsgM10gPT0gJ2UnKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUp
OwotICAgICAgICAgICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyA0OwotICAgICAgICAgICAg
ICAgIHJ2YWwgPSBQeV9UcnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICdmJzoKLSAgICAgICAgICAgIC8qIGZhbHNlICovCi0gICAgICAgICAgICBpZiAoKGlk
eCArIDQgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnYScgJiYgc3RyW2lkeCArIDJdID09
ICdsJyAmJiBzdHJbaWR4ICsgM10gPT0gJ3MnICYmIHN0cltpZHggKyA0XSA9PSAnZScpIHsKLSAg
ICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOwotICAgICAgICAgICAgICAgICpuZXh0
X2lkeF9wdHIgPSBpZHggKyA1OwotICAgICAgICAgICAgICAgIHJ2YWwgPSBQeV9GYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmYWxsdGhyb3Vn
aCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnTic6Ci0gICAgICAgICAg
ICAvKiBOYU4gKi8KLSAgICAgICAgICAgIGlmICgoaWR4ICsgMiA8IGxlbmd0aCkgJiYgc3RyW2lk
eCArIDFdID09ICdhJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ04nKSB7Ci0gICAgICAgICAgICAgICAg
cnZhbCA9IF9wYXJzZV9jb25zdGFudChzLCAiTmFOIiwgaWR4LCBuZXh0X2lkeF9wdHIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhbGx0aHJvdWdo
ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdJJzoKLSAgICAgICAgICAg
IC8qIEluZmluaXR5ICovCi0gICAgICAgICAgICBpZiAoKGlkeCArIDcgPCBsZW5ndGgpICYmIHN0
cltpZHggKyAxXSA9PSAnbicgJiYgc3RyW2lkeCArIDJdID09ICdmJyAmJiBzdHJbaWR4ICsgM10g
PT0gJ2knICYmIHN0cltpZHggKyA0XSA9PSAnbicgJiYgc3RyW2lkeCArIDVdID09ICdpJyAmJiBz
dHJbaWR4ICsgNl0gPT0gJ3QnICYmIHN0cltpZHggKyA3XSA9PSAneScpIHsKLSAgICAgICAgICAg
ICAgICBydmFsID0gX3BhcnNlX2NvbnN0YW50KHMsICJJbmZpbml0eSIsIGlkeCwgbmV4dF9pZHhf
cHRyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBm
YWxsdGhyb3VnaCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnLSc6Ci0g
ICAgICAgICAgICAvKiAtSW5maW5pdHkgKi8KLSAgICAgICAgICAgIGlmICgoaWR4ICsgOCA8IGxl
bmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdJJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ24nICYmIHN0
cltpZHggKyAzXSA9PSAnZicgJiYgc3RyW2lkeCArIDRdID09ICdpJyAmJiBzdHJbaWR4ICsgNV0g
PT0gJ24nICYmIHN0cltpZHggKyA2XSA9PSAnaScgJiYgc3RyW2lkeCArIDddID09ICd0JyAmJiBz
dHJbaWR4ICsgOF0gPT0gJ3knKSB7Ci0gICAgICAgICAgICAgICAgcnZhbCA9IF9wYXJzZV9jb25z
dGFudChzLCAiLUluZmluaXR5IiwgaWR4LCBuZXh0X2lkeF9wdHIpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZmFsbHRocm91Z2gg
PSAxOwotICAgIH0KLSAgICAvKiBEaWRuJ3QgZmluZCBhIHN0cmluZywgb2JqZWN0LCBhcnJheSwg
b3IgbmFtZWQgY29uc3RhbnQuIExvb2sgZm9yIGEgbnVtYmVyLiAqLwotICAgIGlmIChmYWxsdGhy
b3VnaCkKLSAgICAgICAgcnZhbCA9IF9tYXRjaF9udW1iZXJfdW5pY29kZShzLCBweXN0ciwgaWR4
LCBuZXh0X2lkeF9wdHIpOwotICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgIHJldHVy
biBydmFsOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotc2Nhbm5lcl9jYWxsKFB5T2JqZWN0ICpz
ZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCi17Ci0gICAgLyogUHl0aG9uIGNh
bGxhYmxlIGludGVyZmFjZSB0byBzY2FuX29uY2Vfe3N0cix1bmljb2RlfSAqLwotICAgIFB5T2Jq
ZWN0ICpweXN0cjsKLSAgICBQeU9iamVjdCAqcnZhbDsKLSAgICBQeV9zc2l6ZV90IGlkeDsKLSAg
ICBQeV9zc2l6ZV90IG5leHRfaWR4ID0gLTE7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0g
eyJzdHJpbmciLCAiaWR4IiwgTlVMTH07Ci0gICAgUHlTY2FubmVyT2JqZWN0ICpzOwotICAgIGFz
c2VydChQeVNjYW5uZXJfQ2hlY2soc2VsZikpOwotICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICop
c2VsZjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAi
T08mOnNjYW5fb25jZSIsIGt3bGlzdCwgJnB5c3RyLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwg
JmlkeCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKFB5U3RyaW5nX0NoZWNrKHB5
c3RyKSkgewotICAgICAgICBydmFsID0gc2Nhbl9vbmNlX3N0cihzLCBweXN0ciwgaWR4LCAmbmV4
dF9pZHgpOwotICAgIH0KLSAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7Ci0g
ICAgICAgIHJ2YWwgPSBzY2FuX29uY2VfdW5pY29kZShzLCBweXN0ciwgaWR4LCAmbmV4dF9pZHgp
OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJv
ciwKLSAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIG5v
dCAlLjgwcyIsCi0gICAgICAgICAgICAgICAgIFB5X1RZUEUocHlzdHIpLT50cF9uYW1lKTsKLSAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIFB5RGljdF9DbGVhcihzLT5tZW1vKTsKLSAg
ICByZXR1cm4gX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUocnZhbCwgbmV4dF9pZHgpOwotfQotCi1z
dGF0aWMgUHlPYmplY3QgKgotc2Nhbm5lcl9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVj
dCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCi17Ci0gICAgUHlTY2FubmVyT2JqZWN0ICpzOwotICAg
IHMgPSAoUHlTY2FubmVyT2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7Ci0gICAgaWYg
KHMgIT0gTlVMTCkgewotICAgICAgICBzLT5lbmNvZGluZyA9IE5VTEw7Ci0gICAgICAgIHMtPnN0
cmljdCA9IE5VTEw7Ci0gICAgICAgIHMtPm9iamVjdF9ob29rID0gTlVMTDsKLSAgICAgICAgcy0+
cGFpcnNfaG9vayA9IE5VTEw7Ci0gICAgICAgIHMtPnBhcnNlX2Zsb2F0ID0gTlVMTDsKLSAgICAg
ICAgcy0+cGFyc2VfaW50ID0gTlVMTDsKLSAgICAgICAgcy0+cGFyc2VfY29uc3RhbnQgPSBOVUxM
OwotICAgIH0KLSAgICByZXR1cm4gKFB5T2JqZWN0ICopczsKLX0KLQotc3RhdGljIGludAotc2Nh
bm5lcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMp
Ci17Ci0gICAgLyogSW5pdGlhbGl6ZSBTY2FubmVyIG9iamVjdCAqLwotICAgIFB5T2JqZWN0ICpj
dHg7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjb250ZXh0IiwgTlVMTH07Ci0gICAg
UHlTY2FubmVyT2JqZWN0ICpzOwotCi0gICAgYXNzZXJ0KFB5U2Nhbm5lcl9DaGVjayhzZWxmKSk7
Ci0gICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKilzZWxmOwotCi0gICAgaWYgKCFQeUFyZ19QYXJz
ZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk86bWFrZV9zY2FubmVyIiwga3dsaXN0LCAm
Y3R4KSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIAotICAgIGlmIChzLT5tZW1vID09IE5VTEwp
IHsKLSAgICAgICAgcy0+bWVtbyA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgaWYgKHMtPm1lbW8g
PT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKiBQeVN0cmlu
Z19BU19TVFJJTkcgaXMgdXNlZCBvbiBlbmNvZGluZyAqLwotICAgIHMtPmVuY29kaW5nID0gUHlP
YmplY3RfR2V0QXR0clN0cmluZyhjdHgsICJlbmNvZGluZyIpOwotICAgIGlmIChzLT5lbmNvZGlu
ZyA9PSBOVUxMKQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgaWYgKHMtPmVuY29kaW5nID09IFB5
X05vbmUpIHsKLSAgICAgICAgUHlfREVDUkVGKFB5X05vbmUpOwotICAgICAgICBzLT5lbmNvZGlu
ZyA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoREVGQVVMVF9FTkNPRElORyk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhzLT5lbmNvZGluZykpIHsKLSAgICAgICAgUHlP
YmplY3QgKnRtcCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcocy0+ZW5jb2RpbmcsIE5VTEws
IE5VTEwpOwotICAgICAgICBQeV9ERUNSRUYocy0+ZW5jb2RpbmcpOwotICAgICAgICBzLT5lbmNv
ZGluZyA9IHRtcDsKLSAgICB9Ci0gICAgaWYgKHMtPmVuY29kaW5nID09IE5VTEwgfHwgIVB5U3Ry
aW5nX0NoZWNrKHMtPmVuY29kaW5nKSkKLSAgICAgICAgZ290byBiYWlsOwotCi0gICAgLyogQWxs
IG9mIHRoZXNlIHdpbGwgZmFpbCAiZ3JhY2VmdWxseSIgc28gd2UgZG9uJ3QgbmVlZCB0byB2ZXJp
ZnkgdGhlbSAqLwotICAgIHMtPnN0cmljdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAi
c3RyaWN0Iik7Ci0gICAgaWYgKHMtPnN0cmljdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGJhaWw7
Ci0gICAgcy0+b2JqZWN0X2hvb2sgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgIm9iamVj
dF9ob29rIik7Ci0gICAgaWYgKHMtPm9iamVjdF9ob29rID09IE5VTEwpCi0gICAgICAgIGdvdG8g
YmFpbDsKLSAgICBzLT5wYWlyc19ob29rID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjdHgsICJv
YmplY3RfcGFpcnNfaG9vayIpOwotICAgIGlmIChzLT5wYWlyc19ob29rID09IE5VTEwpCi0gICAg
ICAgIGdvdG8gYmFpbDsKLSAgICBzLT5wYXJzZV9mbG9hdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJp
bmcoY3R4LCAicGFyc2VfZmxvYXQiKTsKLSAgICBpZiAocy0+cGFyc2VfZmxvYXQgPT0gTlVMTCkK
LSAgICAgICAgZ290byBiYWlsOwotICAgIHMtPnBhcnNlX2ludCA9IFB5T2JqZWN0X0dldEF0dHJT
dHJpbmcoY3R4LCAicGFyc2VfaW50Iik7Ci0gICAgaWYgKHMtPnBhcnNlX2ludCA9PSBOVUxMKQot
ICAgICAgICBnb3RvIGJhaWw7Ci0gICAgcy0+cGFyc2VfY29uc3RhbnQgPSBQeU9iamVjdF9HZXRB
dHRyU3RyaW5nKGN0eCwgInBhcnNlX2NvbnN0YW50Iik7Ci0gICAgaWYgKHMtPnBhcnNlX2NvbnN0
YW50ID09IE5VTEwpCi0gICAgICAgIGdvdG8gYmFpbDsKLQotICAgIHJldHVybiAwOwotCi1iYWls
OgotICAgIFB5X0NMRUFSKHMtPmVuY29kaW5nKTsKLSAgICBQeV9DTEVBUihzLT5zdHJpY3QpOwot
ICAgIFB5X0NMRUFSKHMtPm9iamVjdF9ob29rKTsKLSAgICBQeV9DTEVBUihzLT5wYWlyc19ob29r
KTsKLSAgICBQeV9DTEVBUihzLT5wYXJzZV9mbG9hdCk7Ci0gICAgUHlfQ0xFQVIocy0+cGFyc2Vf
aW50KTsKLSAgICBQeV9DTEVBUihzLT5wYXJzZV9jb25zdGFudCk7Ci0gICAgcmV0dXJuIC0xOwot
fQotCi1QeURvY19TVFJWQVIoc2Nhbm5lcl9kb2MsICJKU09OIHNjYW5uZXIgb2JqZWN0Iik7Ci0K
LXN0YXRpYwotUHlUeXBlT2JqZWN0IFB5U2Nhbm5lclR5cGUgPSB7Ci0gICAgUHlPYmplY3RfSEVB
RF9JTklUKE5VTEwpCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ludGVybmFsICov
Ci0gICAgInNpbXBsZWpzb24uX3NwZWVkdXBzLlNjYW5uZXIiLCAgICAgICAvKiB0cF9uYW1lICov
Ci0gICAgc2l6ZW9mKFB5U2Nhbm5lck9iamVjdCksIC8qIHRwX2Jhc2ljc2l6ZSAqLwotICAgIDAs
ICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwotICAgIHNjYW5uZXJfZGVhbGxv
YywgLyogdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmlu
dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCi0gICAgMCwg
ICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAg
ICAgICAgLyogdHBfY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9y
ZXByICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwotICAg
IDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwotICAgIDAsICAgICAg
ICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCi0gICAgMCwgICAgICAgICAgICAgICAg
ICAgIC8qIHRwX2hhc2ggKi8KLSAgICBzY2FubmVyX2NhbGwsICAgICAgICAgLyogdHBfY2FsbCAq
LwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KLSAgICAwLC8qIFB5T2Jq
ZWN0X0dlbmVyaWNHZXRBdHRyLCAqLyAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8g
Ki8KLSAgICAwLC8qIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyLCAqLyAgICAgICAgICAgICAgICAg
ICAgLyogdHBfc2V0YXR0cm8gKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNf
YnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAg
IC8qIHRwX2ZsYWdzICovCi0gICAgc2Nhbm5lcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLwot
ICAgIHNjYW5uZXJfdHJhdmVyc2UsICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAq
LwotICAgIHNjYW5uZXJfY2xlYXIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwot
ICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAg
ICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwotICAgIDAsICAgICAgICAg
ICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRw
X2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8K
LSAgICBzY2FubmVyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICov
Ci0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwotICAgIDAsICAgICAg
ICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8q
IHRwX2RpY3QgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICov
Ci0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwotICAgIDAsICAg
ICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgc2Nhbm5lcl9pbml0LCAg
ICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwotICAgIDAsLyogUHlUeXBlX0dlbmVyaWNB
bGxvYywgKi8gICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgc2Nhbm5lcl9uZXcsICAgICAgICAg
IC8qIHRwX25ldyAqLwotICAgIDAsLyogUHlPYmplY3RfR0NfRGVsLCAqLyAgICAgICAgICAgICAg
LyogdHBfZnJlZSAqLwotfTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLWVuY29kZXJfbmV3KFB5VHlw
ZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQotewotICAgIFB5
RW5jb2Rlck9iamVjdCAqczsKLSAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXR5cGUtPnRwX2Fs
bG9jKHR5cGUsIDApOwotICAgIGlmIChzICE9IE5VTEwpIHsKLSAgICAgICAgcy0+bWFya2VycyA9
IE5VTEw7Ci0gICAgICAgIHMtPmRlZmF1bHRmbiA9IE5VTEw7Ci0gICAgICAgIHMtPmVuY29kZXIg
PSBOVUxMOwotICAgICAgICBzLT5pbmRlbnQgPSBOVUxMOwotICAgICAgICBzLT5rZXlfc2VwYXJh
dG9yID0gTlVMTDsKLSAgICAgICAgcy0+aXRlbV9zZXBhcmF0b3IgPSBOVUxMOwotICAgICAgICBz
LT5zb3J0X2tleXMgPSBOVUxMOwotICAgICAgICBzLT5za2lwa2V5cyA9IE5VTEw7Ci0gICAgICAg
IHMtPmtleV9tZW1vID0gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIChQeU9iamVjdCAqKXM7Ci19
Ci0KLXN0YXRpYyBpbnQKLWVuY29kZXJfaW5pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy
Z3MsIFB5T2JqZWN0ICprd2RzKQotewotICAgIC8qIGluaXRpYWxpemUgRW5jb2RlciBvYmplY3Qg
Ki8KLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im1hcmtlcnMiLCAiZGVmYXVsdCIsICJl
bmNvZGVyIiwgImluZGVudCIsICJrZXlfc2VwYXJhdG9yIiwgIml0ZW1fc2VwYXJhdG9yIiwgInNv
cnRfa2V5cyIsICJza2lwa2V5cyIsICJhbGxvd19uYW4iLCAia2V5X21lbW8iLCAidXNlX2RlY2lt
YWwiLCBOVUxMfTsKLQotICAgIFB5RW5jb2Rlck9iamVjdCAqczsKLSAgICBQeU9iamVjdCAqbWFy
a2VycywgKmRlZmF1bHRmbiwgKmVuY29kZXIsICppbmRlbnQsICprZXlfc2VwYXJhdG9yOwotICAg
IFB5T2JqZWN0ICppdGVtX3NlcGFyYXRvciwgKnNvcnRfa2V5cywgKnNraXBrZXlzLCAqYWxsb3df
bmFuLCAqa2V5X21lbW8sICp1c2VfZGVjaW1hbDsKLQotICAgIGFzc2VydChQeUVuY29kZXJfQ2hl
Y2soc2VsZikpOwotICAgIHMgPSAoUHlFbmNvZGVyT2JqZWN0ICopc2VsZjsKLQotICAgIGlmICgh
UHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT09PT09PT09PTzptYWtl
X2VuY29kZXIiLCBrd2xpc3QsCi0gICAgICAgICZtYXJrZXJzLCAmZGVmYXVsdGZuLCAmZW5jb2Rl
ciwgJmluZGVudCwgJmtleV9zZXBhcmF0b3IsICZpdGVtX3NlcGFyYXRvciwKLSAgICAgICAgJnNv
cnRfa2V5cywgJnNraXBrZXlzLCAmYWxsb3dfbmFuLCAma2V5X21lbW8sICZ1c2VfZGVjaW1hbCkp
Ci0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHMtPm1hcmtlcnMgPSBtYXJrZXJzOwotICAgIHMt
PmRlZmF1bHRmbiA9IGRlZmF1bHRmbjsKLSAgICBzLT5lbmNvZGVyID0gZW5jb2RlcjsKLSAgICBz
LT5pbmRlbnQgPSBpbmRlbnQ7Ci0gICAgcy0+a2V5X3NlcGFyYXRvciA9IGtleV9zZXBhcmF0b3I7
Ci0gICAgcy0+aXRlbV9zZXBhcmF0b3IgPSBpdGVtX3NlcGFyYXRvcjsKLSAgICBzLT5zb3J0X2tl
eXMgPSBzb3J0X2tleXM7Ci0gICAgcy0+c2tpcGtleXMgPSBza2lwa2V5czsKLSAgICBzLT5rZXlf
bWVtbyA9IGtleV9tZW1vOwotICAgIHMtPmZhc3RfZW5jb2RlID0gKFB5Q0Z1bmN0aW9uX0NoZWNr
KHMtPmVuY29kZXIpICYmIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uKHMtPmVuY29kZXIpID09IChQ
eUNGdW5jdGlvbilweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSk7Ci0gICAgcy0+YWxsb3dfbmFu
ID0gUHlPYmplY3RfSXNUcnVlKGFsbG93X25hbik7Ci0gICAgcy0+dXNlX2RlY2ltYWwgPSBQeU9i
amVjdF9Jc1RydWUodXNlX2RlY2ltYWwpOwotCi0gICAgUHlfSU5DUkVGKHMtPm1hcmtlcnMpOwot
ICAgIFB5X0lOQ1JFRihzLT5kZWZhdWx0Zm4pOwotICAgIFB5X0lOQ1JFRihzLT5lbmNvZGVyKTsK
LSAgICBQeV9JTkNSRUYocy0+aW5kZW50KTsKLSAgICBQeV9JTkNSRUYocy0+a2V5X3NlcGFyYXRv
cik7Ci0gICAgUHlfSU5DUkVGKHMtPml0ZW1fc2VwYXJhdG9yKTsKLSAgICBQeV9JTkNSRUYocy0+
c29ydF9rZXlzKTsKLSAgICBQeV9JTkNSRUYocy0+c2tpcGtleXMpOwotICAgIFB5X0lOQ1JFRihz
LT5rZXlfbWVtbyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1lbmNv
ZGVyX2NhbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykK
LXsKLSAgICAvKiBQeXRob24gY2FsbGFibGUgaW50ZXJmYWNlIHRvIGVuY29kZV9saXN0ZW5jb2Rl
X29iaiAqLwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqIiwgIl9jdXJyZW50X2lu
ZGVudF9sZXZlbCIsIE5VTEx9OwotICAgIFB5T2JqZWN0ICpvYmo7Ci0gICAgUHlPYmplY3QgKnJ2
YWw7Ci0gICAgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWw7Ci0gICAgUHlFbmNvZGVyT2JqZWN0ICpz
OwotICAgIGFzc2VydChQeUVuY29kZXJfQ2hlY2soc2VsZikpOwotICAgIHMgPSAoUHlFbmNvZGVy
T2JqZWN0ICopc2VsZjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkcyhhcmdz
LCBrd2RzLCAiT08mOl9pdGVyZW5jb2RlIiwga3dsaXN0LAotICAgICAgICAmb2JqLCBfY29udmVy
dFB5SW50X0FzU3NpemVfdCwgJmluZGVudF9sZXZlbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIHJ2YWwgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChydmFsID09IE5VTEwpCi0gICAgICAg
IHJldHVybiBOVUxMOwotICAgIGlmIChlbmNvZGVyX2xpc3RlbmNvZGVfb2JqKHMsIHJ2YWwsIG9i
aiwgaW5kZW50X2xldmVsKSkgewotICAgICAgICBQeV9ERUNSRUYocnZhbCk7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gcnZhbDsKLX0KLQotc3RhdGljIFB5T2JqZWN0
ICoKLV9lbmNvZGVkX2NvbnN0KFB5T2JqZWN0ICpvYmopCi17Ci0gICAgLyogUmV0dXJuIHRoZSBK
U09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBOb25lLCBUcnVlLCBGYWxzZSAqLwotICAgIGlm
IChvYmogPT0gUHlfTm9uZSkgewotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKnNfbnVsbCA9IE5V
TEw7Ci0gICAgICAgIGlmIChzX251bGwgPT0gTlVMTCkgewotICAgICAgICAgICAgc19udWxsID0g
UHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygibnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIFB5
X0lOQ1JFRihzX251bGwpOwotICAgICAgICByZXR1cm4gc19udWxsOwotICAgIH0KLSAgICBlbHNl
IGlmIChvYmogPT0gUHlfVHJ1ZSkgewotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKnNfdHJ1ZSA9
IE5VTEw7Ci0gICAgICAgIGlmIChzX3RydWUgPT0gTlVMTCkgewotICAgICAgICAgICAgc190cnVl
ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygidHJ1ZSIpOwotICAgICAgICB9Ci0gICAgICAg
IFB5X0lOQ1JFRihzX3RydWUpOwotICAgICAgICByZXR1cm4gc190cnVlOwotICAgIH0KLSAgICBl
bHNlIGlmIChvYmogPT0gUHlfRmFsc2UpIHsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpzX2Zh
bHNlID0gTlVMTDsKLSAgICAgICAgaWYgKHNfZmFsc2UgPT0gTlVMTCkgewotICAgICAgICAgICAg
c19mYWxzZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImZhbHNlIik7Ci0gICAgICAgIH0K
LSAgICAgICAgUHlfSU5DUkVGKHNfZmFsc2UpOwotICAgICAgICByZXR1cm4gc19mYWxzZTsKLSAg
ICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9y
LCAibm90IGEgY29uc3QiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi1zdGF0
aWMgUHlPYmplY3QgKgotZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQ
eU9iamVjdCAqb2JqKQotewotICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBv
ZiBhIFB5RmxvYXQgKi8KLSAgICBkb3VibGUgaSA9IFB5RmxvYXRfQVNfRE9VQkxFKG9iaik7Ci0g
ICAgaWYgKCFQeV9JU19GSU5JVEUoaSkpIHsKLSAgICAgICAgaWYgKCFzLT5hbGxvd19uYW4pIHsK
LSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiT3V0IG9mIHJh
bmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50Iik7Ci0gICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+IDApIHsKLSAgICAgICAgICAg
IHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKCJJbmZpbml0eSIpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0
cmluZygiLUluZmluaXR5Iik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygiTmFOIik7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgLyogVXNlIGEgYmV0dGVyIGZsb2F0IGZvcm1hdCBoZXJlPyAqLwotICAgIHJldHVybiBQeU9i
amVjdF9SZXByKG9iaik7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1lbmNvZGVyX2VuY29kZV9z
dHJpbmcoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKQotewotICAgIC8qIFJldHVy
biB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIHN0cmluZyAqLwotICAgIGlmIChzLT5mYXN0
X2VuY29kZSkKLSAgICAgICAgcmV0dXJuIHB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKE5VTEws
IG9iaik7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2Jq
QXJncyhzLT5lbmNvZGVyLCBvYmosIE5VTEwpOwotfQotCi1zdGF0aWMgaW50Ci1fc3RlYWxfbGlz
dF9hcHBlbmQoUHlPYmplY3QgKmxzdCwgUHlPYmplY3QgKnN0b2xlbikKLXsKLSAgICAvKiBBcHBl
bmQgc3RvbGVuIGFuZCB0aGVuIGRlY3JlbWVudCBpdHMgcmVmZXJlbmNlIGNvdW50ICovCi0gICAg
aW50IHJ2YWwgPSBQeUxpc3RfQXBwZW5kKGxzdCwgc3RvbGVuKTsKLSAgICBQeV9ERUNSRUYoc3Rv
bGVuKTsKLSAgICByZXR1cm4gcnZhbDsKLX0KLQotc3RhdGljIGludAotZW5jb2Rlcl9saXN0ZW5j
b2RlX29iaihQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVjdCAqb2Jq
LCBQeV9zc2l6ZV90IGluZGVudF9sZXZlbCkKLXsKLSAgICAvKiBFbmNvZGUgUHl0aG9uIG9iamVj
dCBvYmogdG8gYSBKU09OIHRlcm0sIHJ2YWwgaXMgYSBQeUxpc3QgKi8KLSAgICBpbnQgcnYgPSAt
MTsKLSAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZW5jb2RpbmcgYSBKU09O
IGRvY3VtZW50IikpCi0gICAgICAgIHJldHVybiBydjsKLSAgICBkbyB7Ci0gICAgICAgIGlmIChv
YmogPT0gUHlfTm9uZSB8fCBvYmogPT0gUHlfVHJ1ZSB8fCBvYmogPT0gUHlfRmFsc2UpIHsKLSAg
ICAgICAgICAgIFB5T2JqZWN0ICpjc3RyID0gX2VuY29kZWRfY29uc3Qob2JqKTsKLSAgICAgICAg
ICAgIGlmIChjc3RyICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcnYgPSBfc3RlYWxfbGlzdF9h
cHBlbmQocnZhbCwgY3N0cik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoUHlTdHJpbmdf
Q2hlY2sob2JqKSB8fCBQeVVuaWNvZGVfQ2hlY2sob2JqKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgUHlPYmplY3QgKmVuY29kZWQgPSBlbmNvZGVyX2VuY29kZV9zdHJpbmcocywgb2JqKTsKLSAg
ICAgICAgICAgIGlmIChlbmNvZGVkICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcnYgPSBfc3Rl
YWxfbGlzdF9hcHBlbmQocnZhbCwgZW5jb2RlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAoUHlJbnRfQ2hlY2sob2JqKSB8fCBQeUxvbmdfQ2hlY2sob2JqKSkgewotICAgICAgICAgICAg
UHlPYmplY3QgKmVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKLSAgICAgICAgICAgIGlmIChl
bmNvZGVkICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcnYgPSBfc3RlYWxfbGlzdF9hcHBlbmQo
cnZhbCwgZW5jb2RlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoUHlGbG9hdF9DaGVj
ayhvYmopKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZXJfZW5jb2Rl
X2Zsb2F0KHMsIG9iaik7Ci0gICAgICAgICAgICBpZiAoZW5jb2RlZCAhPSBOVUxMKQotICAgICAg
ICAgICAgICAgIHJ2ID0gX3N0ZWFsX2xpc3RfYXBwZW5kKHJ2YWwsIGVuY29kZWQpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKFB5TGlzdF9DaGVjayhvYmopIHx8IFB5VHVwbGVfQ2hlY2so
b2JqKSkgewotICAgICAgICAgICAgcnYgPSBlbmNvZGVyX2xpc3RlbmNvZGVfbGlzdChzLCBydmFs
LCBvYmosIGluZGVudF9sZXZlbCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoUHlEaWN0
X0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIHJ2ID0gZW5jb2Rlcl9saXN0ZW5jb2RlX2RpY3Qo
cywgcnZhbCwgb2JqLCBpbmRlbnRfbGV2ZWwpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHMtPnVzZV9kZWNpbWFsICYmIERlY2ltYWxfQ2hlY2sob2JqKSkgewotICAgICAgICAgICAgUHlP
YmplY3QgKmVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKLSAgICAgICAgICAgIGlmIChlbmNv
ZGVkICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcnYgPSBfc3RlYWxfbGlzdF9hcHBlbmQocnZh
bCwgZW5jb2RlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeU9i
amVjdCAqaWRlbnQgPSBOVUxMOwotICAgICAgICAgICAgUHlPYmplY3QgKm5ld29iajsKLSAgICAg
ICAgICAgIGlmIChzLT5tYXJrZXJzICE9IFB5X05vbmUpIHsKLSAgICAgICAgICAgICAgICBpbnQg
aGFzX2tleTsKLSAgICAgICAgICAgICAgICBpZGVudCA9IFB5TG9uZ19Gcm9tVm9pZFB0cihvYmop
OwotICAgICAgICAgICAgICAgIGlmIChpZGVudCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBoYXNfa2V5ID0gUHlEaWN0X0NvbnRhaW5zKHMtPm1h
cmtlcnMsIGlkZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzX2tleSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzX2tleSAhPSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5
RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVj
dGVkIik7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpZGVudCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
UHlEaWN0X1NldEl0ZW0ocy0+bWFya2VycywgaWRlbnQsIG9iaikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUHlfREVDUkVGKGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV3b2JqID0gUHlPYmpl
Y3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5kZWZhdWx0Zm4sIG9iaiwgTlVMTCk7Ci0gICAgICAg
ICAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGlk
ZW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJ2ID0gZW5jb2Rlcl9saXN0ZW5jb2RlX29iaihzLCBydmFsLCBuZXdvYmosIGluZGVudF9sZXZl
bCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKLSAgICAgICAgICAgIGlmIChydikg
ewotICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoaWRlbnQpOwotICAgICAgICAgICAgICAgIHJ2
ID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChpZGVudCAhPSBOVUxM
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RGljdF9EZWxJdGVtKHMtPm1hcmtlcnMsIGlkZW50
KSkgewotICAgICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGlkZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgcnYgPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlf
WERFQ1JFRihpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICgw
KTsKLSAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICByZXR1cm4gcnY7Ci19Ci0KLXN0
YXRpYyBpbnQKLWVuY29kZXJfbGlzdGVuY29kZV9kaWN0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlP
YmplY3QgKnJ2YWwsIFB5T2JqZWN0ICpkY3QsIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKQotewot
ICAgIC8qIEVuY29kZSBQeXRob24gZGljdCBkY3QgYSBKU09OIHRlcm0sIHJ2YWwgaXMgYSBQeUxp
c3QgKi8KLSAgICBzdGF0aWMgUHlPYmplY3QgKm9wZW5fZGljdCA9IE5VTEw7Ci0gICAgc3RhdGlj
IFB5T2JqZWN0ICpjbG9zZV9kaWN0ID0gTlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKmVtcHR5
X2RpY3QgPSBOVUxMOwotICAgIHN0YXRpYyBQeU9iamVjdCAqaXRlcml0ZW1zID0gTlVMTDsKLSAg
ICBQeU9iamVjdCAqa3N0ciA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmlkZW50ID0gTlVMTDsKLSAg
ICBQeU9iamVjdCAqaXRlciA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOwotICAg
IFB5T2JqZWN0ICppdGVtcyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmVuY29kZWQgPSBOVUxMOwot
ICAgIGludCBza2lwa2V5czsKLSAgICBQeV9zc2l6ZV90IGlkeDsKLQotICAgIGlmIChvcGVuX2Rp
Y3QgPT0gTlVMTCB8fCBjbG9zZV9kaWN0ID09IE5VTEwgfHwgZW1wdHlfZGljdCA9PSBOVUxMIHx8
IGl0ZXJpdGVtcyA9PSBOVUxMKSB7Ci0gICAgICAgIG9wZW5fZGljdCA9IFB5U3RyaW5nX0ludGVy
bkZyb21TdHJpbmcoInsiKTsKLSAgICAgICAgY2xvc2VfZGljdCA9IFB5U3RyaW5nX0ludGVybkZy
b21TdHJpbmcoIn0iKTsKLSAgICAgICAgZW1wdHlfZGljdCA9IFB5U3RyaW5nX0ludGVybkZyb21T
dHJpbmcoInt9Iik7Ci0gICAgICAgIGl0ZXJpdGVtcyA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJp
bmcoIml0ZXJpdGVtcyIpOwotICAgICAgICBpZiAob3Blbl9kaWN0ID09IE5VTEwgfHwgY2xvc2Vf
ZGljdCA9PSBOVUxMIHx8IGVtcHR5X2RpY3QgPT0gTlVMTCB8fCBpdGVyaXRlbXMgPT0gTlVMTCkK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKFB5RGljdF9TaXplKGRjdCkg
PT0gMCkKLSAgICAgICAgcmV0dXJuIFB5TGlzdF9BcHBlbmQocnZhbCwgZW1wdHlfZGljdCk7Ci0K
LSAgICBpZiAocy0+bWFya2VycyAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIGludCBoYXNfa2V5Owot
ICAgICAgICBpZGVudCA9IFB5TG9uZ19Gcm9tVm9pZFB0cihkY3QpOwotICAgICAgICBpZiAoaWRl
bnQgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgaGFzX2tleSA9IFB5
RGljdF9Db250YWlucyhzLT5tYXJrZXJzLCBpZGVudCk7Ci0gICAgICAgIGlmIChoYXNfa2V5KSB7
Ci0gICAgICAgICAgICBpZiAoaGFzX2tleSAhPSAtMSkKLSAgICAgICAgICAgICAgICBQeUVycl9T
ZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIp
OwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChQeURpY3Rf
U2V0SXRlbShzLT5tYXJrZXJzLCBpZGVudCwgZGN0KSkgewotICAgICAgICAgICAgZ290byBiYWls
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgb3Blbl9k
aWN0KSkKLSAgICAgICAgZ290byBiYWlsOwotCi0gICAgaWYgKHMtPmluZGVudCAhPSBQeV9Ob25l
KSB7Ci0gICAgICAgIC8qIFRPRE86IERPRVMgTk9UIFJVTiAqLwotICAgICAgICBpbmRlbnRfbGV2
ZWwgKz0gMTsKLSAgICAgICAgLyoKLSAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gJ1xuJyAr
IChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgc2VwYXJhdG9y
ID0gX2l0ZW1fc2VwYXJhdG9yICsgbmV3bGluZV9pbmRlbnQKLSAgICAgICAgICAgIGJ1ZiArPSBu
ZXdsaW5lX2luZGVudAotICAgICAgICAqLwotICAgIH0KLQotICAgIGlmIChQeU9iamVjdF9Jc1Ry
dWUocy0+c29ydF9rZXlzKSkgewotICAgICAgICAvKiBGaXJzdCBzb3J0IHRoZSBrZXlzIHRoZW4g
cmVwbGFjZSB0aGVtIHdpdGggKGtleSwgdmFsdWUpIHR1cGxlcy4gKi8KLSAgICAgICAgUHlfc3Np
emVfdCBpLCBuaXRlbXM7Ci0gICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChkY3QpKQotICAg
ICAgICAgICAgaXRlbXMgPSBQeURpY3RfS2V5cyhkY3QpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBpdGVtcyA9IFB5TWFwcGluZ19LZXlzKGRjdCk7Ci0gICAgICAgIGlmIChpdGVtcyA9PSBO
VUxMKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayhp
dGVtcykpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAi
a2V5cyBtdXN0IHJldHVybiBsaXN0Iik7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKFB5TGlzdF9Tb3J0KGl0ZW1zKSA8IDApCi0gICAgICAgICAgICBnb3Rv
IGJhaWw7Ci0gICAgICAgIG5pdGVtcyA9IFB5TGlzdF9HRVRfU0laRShpdGVtcyk7Ci0gICAgICAg
IGZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykgewotICAgICAgICAgICAgUHlPYmplY3QgKmtl
eSwgKnZhbHVlOwotICAgICAgICAgICAga2V5ID0gUHlMaXN0X0dFVF9JVEVNKGl0ZW1zLCBpKTsK
LSAgICAgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZGN0LCBrZXkpOwotICAgICAgICAg
ICAgaXRlbSA9IFB5VHVwbGVfUGFjaygyLCBrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChp
dGVtID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgUHlM
aXN0X1NFVF9JVEVNKGl0ZW1zLCBpLCBpdGVtKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBpZiAoUHlEaWN0X0NoZWNr
RXhhY3QoZGN0KSkKLSAgICAgICAgICAgIGl0ZW1zID0gUHlEaWN0X0l0ZW1zKGRjdCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGl0ZW1zID0gUHlNYXBwaW5nX0l0ZW1zKGRjdCk7Ci0gICAg
fQotICAgIGlmIChpdGVtcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgaXRlciA9
IFB5T2JqZWN0X0dldEl0ZXIoaXRlbXMpOwotICAgIFB5X0RFQ1JFRihpdGVtcyk7Ci0gICAgaWYg
KGl0ZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBiYWlsOwotCi0gICAgc2tpcGtleXMgPSBQeU9i
amVjdF9Jc1RydWUocy0+c2tpcGtleXMpOwotICAgIGlkeCA9IDA7Ci0gICAgd2hpbGUgKChpdGVt
ID0gUHlJdGVyX05leHQoaXRlcikpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqa2V5
LCAqdmFsdWU7Ci0gICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeV9TSVpFKGl0
ZW0pICE9IDIpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9y
LCAiaXRlbXMgbXVzdCByZXR1cm4gMi10dXBsZXMiKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsK
LSAgICAgICAgfQotICAgICAgICBrZXkgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDApOwotICAg
ICAgICBpZiAoa2V5ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIHZh
bHVlID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAxKTsKLSAgICAgICAgaWYgKHZhbHVlID09IE5V
TEwpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0KLSAgICAgICAgZW5jb2RlZCA9IFB5RGljdF9H
ZXRJdGVtKHMtPmtleV9tZW1vLCBrZXkpOwotICAgICAgICBpZiAoZW5jb2RlZCAhPSBOVUxMKSB7
Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZW5jb2RlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAoUHlTdHJpbmdfQ2hlY2soa2V5KSB8fCBQeVVuaWNvZGVfQ2hlY2soa2V5KSkgewotICAg
ICAgICAgICAgUHlfSU5DUkVGKGtleSk7Ci0gICAgICAgICAgICBrc3RyID0ga2V5OwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKFB5RmxvYXRfQ2hlY2soa2V5KSkgewotICAgICAgICAgICAg
a3N0ciA9IGVuY29kZXJfZW5jb2RlX2Zsb2F0KHMsIGtleSk7Ci0gICAgICAgICAgICBpZiAoa3N0
ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gUHlfVHJ1ZSB8fCBrZXkgPT0gUHlfRmFsc2UgfHwga2V5ID09IFB5
X05vbmUpIHsKLSAgICAgICAgICAgIC8qIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgUHlJbnRf
Q2hlY2sgYmVjYXVzZQotICAgICAgICAgICAgICAgVHJ1ZSBhbmQgRmFsc2UgYXJlIGFsc28gMSBh
bmQgMC4qLwotICAgICAgICAgICAga3N0ciA9IF9lbmNvZGVkX2NvbnN0KGtleSk7Ci0gICAgICAg
ICAgICBpZiAoa3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChQeUludF9DaGVjayhrZXkpIHx8IFB5TG9uZ19DaGVjayhr
ZXkpKSB7Ci0gICAgICAgICAgICBrc3RyID0gUHlPYmplY3RfU3RyKGtleSk7Ci0gICAgICAgICAg
ICBpZiAoa3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChza2lwa2V5cykgewotICAgICAgICAgICAgUHlfREVDUkVGKGl0
ZW0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAvKiBUT0RPOiBpbmNsdWRlIHJlcHIgb2Yga2V5ICovCi0gICAgICAgICAgICBQ
eUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAia2V5cyBtdXN0IGJlIGEgc3RyaW5nIik7
Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaWR4KSB7
Ci0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBzLT5pdGVtX3NlcGFyYXRvcikp
Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVu
Y29kZWQgPT0gTlVMTCkgewotICAgICAgICAgICAgZW5jb2RlZCA9IGVuY29kZXJfZW5jb2RlX3N0
cmluZyhzLCBrc3RyKTsKLSAgICAgICAgICAgIFB5X0NMRUFSKGtzdHIpOwotICAgICAgICAgICAg
aWYgKGVuY29kZWQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAg
ICAgICBpZiAoUHlEaWN0X1NldEl0ZW0ocy0+a2V5X21lbW8sIGtleSwgZW5jb2RlZCkpCi0gICAg
ICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChQeUxpc3RfQXBw
ZW5kKHJ2YWwsIGVuY29kZWQpKSB7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0K
LSAgICAgICAgUHlfQ0xFQVIoZW5jb2RlZCk7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2
YWwsIHMtPmtleV9zZXBhcmF0b3IpKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBp
ZiAoZW5jb2Rlcl9saXN0ZW5jb2RlX29iaihzLCBydmFsLCB2YWx1ZSwgaW5kZW50X2xldmVsKSkK
LSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgUHlfQ0xFQVIoaXRlbSk7Ci0gICAgICAg
IGlkeCArPSAxOwotICAgIH0KLSAgICBQeV9DTEVBUihpdGVyKTsKLSAgICBpZiAoUHlFcnJfT2Nj
dXJyZWQoKSkKLSAgICAgICAgZ290byBiYWlsOwotICAgIGlmIChpZGVudCAhPSBOVUxMKSB7Ci0g
ICAgICAgIGlmIChQeURpY3RfRGVsSXRlbShzLT5tYXJrZXJzLCBpZGVudCkpCi0gICAgICAgICAg
ICBnb3RvIGJhaWw7Ci0gICAgICAgIFB5X0NMRUFSKGlkZW50KTsKLSAgICB9Ci0gICAgaWYgKHMt
PmluZGVudCAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIC8qIFRPRE86IERPRVMgTk9UIFJVTiAqLwot
ICAgICAgICBpbmRlbnRfbGV2ZWwgLT0gMTsKLSAgICAgICAgLyoKLSAgICAgICAgICAgIHlpZWxk
ICdcbicgKyAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgKi8KLSAg
ICB9Ci0gICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgY2xvc2VfZGljdCkpCi0gICAgICAgIGdv
dG8gYmFpbDsKLSAgICByZXR1cm4gMDsKLQotYmFpbDoKLSAgICBQeV9YREVDUkVGKGVuY29kZWQp
OwotICAgIFB5X1hERUNSRUYoaXRlbXMpOwotICAgIFB5X1hERUNSRUYoaXRlcik7Ci0gICAgUHlf
WERFQ1JFRihrc3RyKTsKLSAgICBQeV9YREVDUkVGKGlkZW50KTsKLSAgICByZXR1cm4gLTE7Ci19
Ci0KLQotc3RhdGljIGludAotZW5jb2Rlcl9saXN0ZW5jb2RlX2xpc3QoUHlFbmNvZGVyT2JqZWN0
ICpzLCBQeU9iamVjdCAqcnZhbCwgUHlPYmplY3QgKnNlcSwgUHlfc3NpemVfdCBpbmRlbnRfbGV2
ZWwpCi17Ci0gICAgLyogRW5jb2RlIFB5dGhvbiBsaXN0IHNlcSB0byBhIEpTT04gdGVybSwgcnZh
bCBpcyBhIFB5TGlzdCAqLwotICAgIHN0YXRpYyBQeU9iamVjdCAqb3Blbl9hcnJheSA9IE5VTEw7
Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpjbG9zZV9hcnJheSA9IE5VTEw7Ci0gICAgc3RhdGljIFB5
T2JqZWN0ICplbXB0eV9hcnJheSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmlkZW50ID0gTlVMTDsK
LSAgICBQeU9iamVjdCAqaXRlciA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm9iaiA9IE5VTEw7Ci0g
ICAgaW50IGlzX3RydWU7Ci0gICAgaW50IGkgPSAwOwotCi0gICAgaWYgKG9wZW5fYXJyYXkgPT0g
TlVMTCB8fCBjbG9zZV9hcnJheSA9PSBOVUxMIHx8IGVtcHR5X2FycmF5ID09IE5VTEwpIHsKLSAg
ICAgICAgb3Blbl9hcnJheSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIlsiKTsKLSAgICAg
ICAgY2xvc2VfYXJyYXkgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJdIik7Ci0gICAgICAg
IGVtcHR5X2FycmF5ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiW10iKTsKLSAgICAgICAg
aWYgKG9wZW5fYXJyYXkgPT0gTlVMTCB8fCBjbG9zZV9hcnJheSA9PSBOVUxMIHx8IGVtcHR5X2Fy
cmF5ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlkZW50ID0g
TlVMTDsKLSAgICBpc190cnVlID0gUHlPYmplY3RfSXNUcnVlKHNlcSk7Ci0gICAgaWYgKGlzX3Ry
dWUgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChpc190cnVlID09IDAp
Ci0gICAgICAgIHJldHVybiBQeUxpc3RfQXBwZW5kKHJ2YWwsIGVtcHR5X2FycmF5KTsKLQotICAg
IGlmIChzLT5tYXJrZXJzICE9IFB5X05vbmUpIHsKLSAgICAgICAgaW50IGhhc19rZXk7Ci0gICAg
ICAgIGlkZW50ID0gUHlMb25nX0Zyb21Wb2lkUHRyKHNlcSk7Ci0gICAgICAgIGlmIChpZGVudCA9
PSBOVUxMKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBoYXNfa2V5ID0gUHlEaWN0
X0NvbnRhaW5zKHMtPm1hcmtlcnMsIGlkZW50KTsKLSAgICAgICAgaWYgKGhhc19rZXkpIHsKLSAg
ICAgICAgICAgIGlmIChoYXNfa2V5ICE9IC0xKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0
cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIik7Ci0g
ICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFB5RGljdF9TZXRJ
dGVtKHMtPm1hcmtlcnMsIGlkZW50LCBzZXEpKSB7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpdGVyID0gUHlPYmplY3RfR2V0SXRlcihzZXEpOwotICAg
IGlmIChpdGVyID09IE5VTEwpCi0gICAgICAgIGdvdG8gYmFpbDsKLQotICAgIGlmIChQeUxpc3Rf
QXBwZW5kKHJ2YWwsIG9wZW5fYXJyYXkpKQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgaWYgKHMt
PmluZGVudCAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIC8qIFRPRE86IERPRVMgTk9UIFJVTiAqLwot
ICAgICAgICBpbmRlbnRfbGV2ZWwgKz0gMTsKLSAgICAgICAgLyoKLSAgICAgICAgICAgIG5ld2xp
bmVfaW5kZW50ID0gJ1xuJyArIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAg
ICAgICAgICAgc2VwYXJhdG9yID0gX2l0ZW1fc2VwYXJhdG9yICsgbmV3bGluZV9pbmRlbnQKLSAg
ICAgICAgICAgIGJ1ZiArPSBuZXdsaW5lX2luZGVudAotICAgICAgICAqLwotICAgIH0KLSAgICB3
aGlsZSAoKG9iaiA9IFB5SXRlcl9OZXh0KGl0ZXIpKSkgewotICAgICAgICBpZiAoaSkgewotICAg
ICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgcy0+aXRlbV9zZXBhcmF0b3IpKQotICAg
ICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW5jb2Rlcl9s
aXN0ZW5jb2RlX29iaihzLCBydmFsLCBvYmosIGluZGVudF9sZXZlbCkpCi0gICAgICAgICAgICBn
b3RvIGJhaWw7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgUHlfQ0xFQVIob2JqKTsKLSAgICB9Ci0g
ICAgUHlfQ0xFQVIoaXRlcik7Ci0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdv
dG8gYmFpbDsKLSAgICBpZiAoaWRlbnQgIT0gTlVMTCkgewotICAgICAgICBpZiAoUHlEaWN0X0Rl
bEl0ZW0ocy0+bWFya2VycywgaWRlbnQpKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAg
ICBQeV9DTEVBUihpZGVudCk7Ci0gICAgfQotICAgIGlmIChzLT5pbmRlbnQgIT0gUHlfTm9uZSkg
ewotICAgICAgICAvKiBUT0RPOiBET0VTIE5PVCBSVU4gKi8KLSAgICAgICAgaW5kZW50X2xldmVs
IC09IDE7Ci0gICAgICAgIC8qCi0gICAgICAgICAgICB5aWVsZCAnXG4nICsgKF9pbmRlbnQgKiBf
Y3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICovCi0gICAgfQotICAgIGlmIChQeUxpc3Rf
QXBwZW5kKHJ2YWwsIGNsb3NlX2FycmF5KSkKLSAgICAgICAgZ290byBiYWlsOwotICAgIHJldHVy
biAwOwotCi1iYWlsOgotICAgIFB5X1hERUNSRUYob2JqKTsKLSAgICBQeV9YREVDUkVGKGl0ZXIp
OwotICAgIFB5X1hERUNSRUYoaWRlbnQpOwotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIHZv
aWQKLWVuY29kZXJfZGVhbGxvYyhQeU9iamVjdCAqc2VsZikKLXsKLSAgICAvKiBEZWFsbG9jYXRl
IEVuY29kZXIgKi8KLSAgICBlbmNvZGVyX2NsZWFyKHNlbGYpOwotICAgIFB5X1RZUEUoc2VsZikt
PnRwX2ZyZWUoc2VsZik7Ci19Ci0KLXN0YXRpYyBpbnQKLWVuY29kZXJfdHJhdmVyc2UoUHlPYmpl
Y3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQotewotICAgIFB5RW5jb2Rlck9i
amVjdCAqczsKLSAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKLSAgICBzID0gKFB5
RW5jb2Rlck9iamVjdCAqKXNlbGY7Ci0gICAgUHlfVklTSVQocy0+bWFya2Vycyk7Ci0gICAgUHlf
VklTSVQocy0+ZGVmYXVsdGZuKTsKLSAgICBQeV9WSVNJVChzLT5lbmNvZGVyKTsKLSAgICBQeV9W
SVNJVChzLT5pbmRlbnQpOwotICAgIFB5X1ZJU0lUKHMtPmtleV9zZXBhcmF0b3IpOwotICAgIFB5
X1ZJU0lUKHMtPml0ZW1fc2VwYXJhdG9yKTsKLSAgICBQeV9WSVNJVChzLT5zb3J0X2tleXMpOwot
ICAgIFB5X1ZJU0lUKHMtPnNraXBrZXlzKTsKLSAgICBQeV9WSVNJVChzLT5rZXlfbWVtbyk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWVuY29kZXJfY2xlYXIoUHlPYmplY3QgKnNl
bGYpCi17Ci0gICAgLyogRGVhbGxvY2F0ZSBFbmNvZGVyICovCi0gICAgUHlFbmNvZGVyT2JqZWN0
ICpzOwotICAgIGFzc2VydChQeUVuY29kZXJfQ2hlY2soc2VsZikpOwotICAgIHMgPSAoUHlFbmNv
ZGVyT2JqZWN0ICopc2VsZjsKLSAgICBQeV9DTEVBUihzLT5tYXJrZXJzKTsKLSAgICBQeV9DTEVB
UihzLT5kZWZhdWx0Zm4pOwotICAgIFB5X0NMRUFSKHMtPmVuY29kZXIpOwotICAgIFB5X0NMRUFS
KHMtPmluZGVudCk7Ci0gICAgUHlfQ0xFQVIocy0+a2V5X3NlcGFyYXRvcik7Ci0gICAgUHlfQ0xF
QVIocy0+aXRlbV9zZXBhcmF0b3IpOwotICAgIFB5X0NMRUFSKHMtPnNvcnRfa2V5cyk7Ci0gICAg
UHlfQ0xFQVIocy0+c2tpcGtleXMpOwotICAgIFB5X0NMRUFSKHMtPmtleV9tZW1vKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotUHlEb2NfU1RSVkFSKGVuY29kZXJfZG9jLCAiX2l0ZXJlbmNvZGUob2Jq
LCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpIC0+IGl0ZXJhYmxlIik7Ci0KLXN0YXRpYwotUHlUeXBl
T2JqZWN0IFB5RW5jb2RlclR5cGUgPSB7Ci0gICAgUHlPYmplY3RfSEVBRF9JTklUKE5VTEwpCi0g
ICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ludGVybmFsICovCi0gICAgInNpbXBsZWpz
b24uX3NwZWVkdXBzLkVuY29kZXIiLCAgICAgICAvKiB0cF9uYW1lICovCi0gICAgc2l6ZW9mKFB5
RW5jb2Rlck9iamVjdCksIC8qIHRwX2Jhc2ljc2l6ZSAqLwotICAgIDAsICAgICAgICAgICAgICAg
ICAgICAvKiB0cF9pdGVtc2l6ZSAqLwotICAgIGVuY29kZXJfZGVhbGxvYywgLyogdHBfZGVhbGxv
YyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwotICAgIDAsICAg
ICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAg
ICAgIC8qIHRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY29t
cGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCi0gICAgMCwg
ICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwotICAgIDAsICAgICAgICAgICAg
ICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAv
KiB0cF9hc19tYXBwaW5nICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2gg
Ki8KLSAgICBlbmNvZGVyX2NhbGwsICAgICAgICAgLyogdHBfY2FsbCAqLwotICAgIDAsICAgICAg
ICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyog
dHBfZ2V0YXR0cm8gKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8g
Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlf
VFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qIHRwX2ZsYWdzICovCi0g
ICAgZW5jb2Rlcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgIGVuY29kZXJfdHJhdmVy
c2UsICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIGVuY29kZXJfY2xlYXIsICAgICAgICAvKiB0
cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAq
LwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwotICAg
IDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgMCwgICAgICAgICAgICAg
ICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRw
X21ldGhvZHMgKi8KLSAgICBlbmNvZGVyX21lbWJlcnMsICAgICAgLyogdHBfbWVtYmVycyAqLwot
ICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KLSAgICAwLCAgICAgICAg
ICAgICAgICAgICAgLyogdHBfYmFzZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0
cF9kaWN0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwot
ICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KLSAgICAwLCAgICAg
ICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIGVuY29kZXJfaW5pdCwgICAg
ICAgICAvKiB0cF9pbml0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9j
ICovCi0gICAgZW5jb2Rlcl9uZXcsICAgICAgICAgIC8qIHRwX25ldyAqLwotICAgIDAsICAgICAg
ICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCi19OwotCi1zdGF0aWMgUHlNZXRob2REZWYgc3Bl
ZWR1cHNfbWV0aG9kc1tdID0gewotICAgIHsiZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkiLAotICAg
ICAgICAoUHlDRnVuY3Rpb24pcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWksCi0gICAgICAgIE1F
VEhfTywKLSAgICAgICAgcHlkb2NfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWl9LAotICAgIHsic2Nh
bnN0cmluZyIsCi0gICAgICAgIChQeUNGdW5jdGlvbilweV9zY2Fuc3RyaW5nLAotICAgICAgICBN
RVRIX1ZBUkFSR1MsCi0gICAgICAgIHB5ZG9jX3NjYW5zdHJpbmd9LAotICAgIHtOVUxMLCBOVUxM
LCAwLCBOVUxMfQotfTsKLQotUHlEb2NfU1RSVkFSKG1vZHVsZV9kb2MsCi0ic2ltcGxlanNvbiBz
cGVlZHVwc1xuIik7Ci0KLXZvaWQKLWluaXRfc3BlZWR1cHModm9pZCkKLXsKLSAgICBQeU9iamVj
dCAqbSwgKmRlY2ltYWw7Ci0gICAgUHlTY2FubmVyVHlwZS50cF9uZXcgPSBQeVR5cGVfR2VuZXJp
Y05ldzsKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVNjYW5uZXJUeXBlKSA8IDApCi0gICAgICAg
IHJldHVybjsKLSAgICBQeUVuY29kZXJUeXBlLnRwX25ldyA9IFB5VHlwZV9HZW5lcmljTmV3Owot
ICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RW5jb2RlclR5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZGVjaW1hbCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZGVjaW1hbCIpOwotICAg
IGlmIChkZWNpbWFsID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSAgICBEZWNpbWFsVHlwZVB0
ciA9IChQeVR5cGVPYmplY3QqKVB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZGVjaW1hbCwgIkRlY2lt
YWwiKTsKLSAgICBQeV9ERUNSRUYoZGVjaW1hbCk7Ci0gICAgaWYgKERlY2ltYWxUeXBlUHRyID09
IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIG0gPSBQeV9Jbml0TW9kdWxlMygiX3NwZWVk
dXBzIiwgc3BlZWR1cHNfbWV0aG9kcywgbW9kdWxlX2RvYyk7Ci0gICAgUHlfSU5DUkVGKChQeU9i
amVjdCopJlB5U2Nhbm5lclR5cGUpOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAibWFrZV9z
Y2FubmVyIiwgKFB5T2JqZWN0KikmUHlTY2FubmVyVHlwZSk7Ci0gICAgUHlfSU5DUkVGKChQeU9i
amVjdCopJlB5RW5jb2RlclR5cGUpOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAibWFrZV9l
bmNvZGVyIiwgKFB5T2JqZWN0KikmUHlFbmNvZGVyVHlwZSk7Ci19CmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9kZWNvZGVyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vZGVjb2Rlci5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkNGEwZTBiZmRjNTg1ODZlZThhNDlkMWNmMmJh
ZjM3YTNmYTIzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9kZWNvZGVyLnB5
CisrKyAvZGV2L251bGwKQEAgLTEsNDIxICswLDAgQEAKLSIiIkltcGxlbWVudGF0aW9uIG9mIEpT
T05EZWNvZGVyCi0iIiIKLWltcG9ydCByZQotaW1wb3J0IHN5cwotaW1wb3J0IHN0cnVjdAotCi1m
cm9tIHNjYW5uZXIgaW1wb3J0IG1ha2Vfc2Nhbm5lcgotZGVmIF9pbXBvcnRfY19zY2Fuc3RyaW5n
KCk6Ci0gICAgdHJ5OgotICAgICAgICBmcm9tIHNpbXBsZWpzb24uX3NwZWVkdXBzIGltcG9ydCBz
Y2Fuc3RyaW5nCi0gICAgICAgIHJldHVybiBzY2Fuc3RyaW5nCi0gICAgZXhjZXB0IEltcG9ydEVy
cm9yOgotICAgICAgICByZXR1cm4gTm9uZQotY19zY2Fuc3RyaW5nID0gX2ltcG9ydF9jX3NjYW5z
dHJpbmcoKQotCi1fX2FsbF9fID0gWydKU09ORGVjb2RlciddCi0KLUZMQUdTID0gcmUuVkVSQk9T
RSB8IHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTAotCi1kZWYgX2Zsb2F0Y29uc3RhbnRzKCk6Ci0g
ICAgX0JZVEVTID0gJzdGRjgwMDAwMDAwMDAwMDA3RkYwMDAwMDAwMDAwMDAwJy5kZWNvZGUoJ2hl
eCcpCi0gICAgIyBUaGUgc3RydWN0IG1vZHVsZSBpbiBQeXRob24gMi40IHdvdWxkIGdldCBmcmV4
cCgpIG91dCBvZiByYW5nZSBoZXJlCi0gICAgIyB3aGVuIGFuIGVuZGlhbiBpcyBzcGVjaWZpZWQg
aW4gdGhlIGZvcm1hdCBzdHJpbmcuIEZpeGVkIGluIFB5dGhvbiAyLjUrCi0gICAgaWYgc3lzLmJ5
dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgX0JZVEVTID0gX0JZVEVTWzo4XVs6Oi0xXSArIF9C
WVRFU1s4Ol1bOjotMV0KLSAgICBuYW4sIGluZiA9IHN0cnVjdC51bnBhY2soJ2RkJywgX0JZVEVT
KQotICAgIHJldHVybiBuYW4sIGluZiwgLWluZgotCi1OYU4sIFBvc0luZiwgTmVnSW5mID0gX2Zs
b2F0Y29uc3RhbnRzKCkKLQotCi1jbGFzcyBKU09ORGVjb2RlRXJyb3IoVmFsdWVFcnJvcik6Ci0g
ICAgIiIiU3ViY2xhc3Mgb2YgVmFsdWVFcnJvciB3aXRoIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25h
bCBwcm9wZXJ0aWVzOgotCi0gICAgbXNnOiBUaGUgdW5mb3JtYXR0ZWQgZXJyb3IgbWVzc2FnZQot
ICAgIGRvYzogVGhlIEpTT04gZG9jdW1lbnQgYmVpbmcgcGFyc2VkCi0gICAgcG9zOiBUaGUgc3Rh
cnQgaW5kZXggb2YgZG9jIHdoZXJlIHBhcnNpbmcgZmFpbGVkCi0gICAgZW5kOiBUaGUgZW5kIGlu
ZGV4IG9mIGRvYyB3aGVyZSBwYXJzaW5nIGZhaWxlZCAobWF5IGJlIE5vbmUpCi0gICAgbGluZW5v
OiBUaGUgbGluZSBjb3JyZXNwb25kaW5nIHRvIHBvcwotICAgIGNvbG5vOiBUaGUgY29sdW1uIGNv
cnJlc3BvbmRpbmcgdG8gcG9zCi0gICAgZW5kbGluZW5vOiBUaGUgbGluZSBjb3JyZXNwb25kaW5n
IHRvIGVuZCAobWF5IGJlIE5vbmUpCi0gICAgZW5kY29sbm86IFRoZSBjb2x1bW4gY29ycmVzcG9u
ZGluZyB0byBlbmQgKG1heSBiZSBOb25lKQotCi0gICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1zZywgZG9jLCBwb3MsIGVuZD1Ob25lKToKLSAgICAgICAgVmFsdWVFcnJvci5fX2luaXRf
XyhzZWxmLCBlcnJtc2cobXNnLCBkb2MsIHBvcywgZW5kPWVuZCkpCi0gICAgICAgIHNlbGYubXNn
ID0gbXNnCi0gICAgICAgIHNlbGYuZG9jID0gZG9jCi0gICAgICAgIHNlbGYucG9zID0gcG9zCi0g
ICAgICAgIHNlbGYuZW5kID0gZW5kCi0gICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmNvbG5vID0g
bGluZWNvbChkb2MsIHBvcykKLSAgICAgICAgaWYgZW5kIGlzIG5vdCBOb25lOgotICAgICAgICAg
ICAgc2VsZi5lbmRsaW5lbm8sIHNlbGYuZW5kY29sbm8gPSBsaW5lY29sKGRvYywgZW5kKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5lbmRsaW5lbm8sIHNlbGYuZW5kY29sbm8gPSBO
b25lLCBOb25lCi0KLQotZGVmIGxpbmVjb2woZG9jLCBwb3MpOgotICAgIGxpbmVubyA9IGRvYy5j
b3VudCgnXG4nLCAwLCBwb3MpICsgMQotICAgIGlmIGxpbmVubyA9PSAxOgotICAgICAgICBjb2xu
byA9IHBvcwotICAgIGVsc2U6Ci0gICAgICAgIGNvbG5vID0gcG9zIC0gZG9jLnJpbmRleCgnXG4n
LCAwLCBwb3MpCi0gICAgcmV0dXJuIGxpbmVubywgY29sbm8KLQotCi1kZWYgZXJybXNnKG1zZywg
ZG9jLCBwb3MsIGVuZD1Ob25lKToKLSAgICAjIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCBmcm9tIF9zcGVlZHVwcwotICAgIGxpbmVubywgY29sbm8gPSBsaW5lY29sKGRvYywgcG9z
KQotICAgIGlmIGVuZCBpcyBOb25lOgotICAgICAgICAjZm10ID0gJ3swfTogbGluZSB7MX0gY29s
dW1uIHsyfSAoY2hhciB7M30pJwotICAgICAgICAjcmV0dXJuIGZtdC5mb3JtYXQobXNnLCBsaW5l
bm8sIGNvbG5vLCBwb3MpCi0gICAgICAgIGZtdCA9ICclczogbGluZSAlZCBjb2x1bW4gJWQgKGNo
YXIgJWQpJwotICAgICAgICByZXR1cm4gZm10ICUgKG1zZywgbGluZW5vLCBjb2xubywgcG9zKQot
ICAgIGVuZGxpbmVubywgZW5kY29sbm8gPSBsaW5lY29sKGRvYywgZW5kKQotICAgICNmbXQgPSAn
ezB9OiBsaW5lIHsxfSBjb2x1bW4gezJ9IC0gbGluZSB7M30gY29sdW1uIHs0fSAoY2hhciB7NX0g
LSB7Nn0pJwotICAgICNyZXR1cm4gZm10LmZvcm1hdChtc2csIGxpbmVubywgY29sbm8sIGVuZGxp
bmVubywgZW5kY29sbm8sIHBvcywgZW5kKQotICAgIGZtdCA9ICclczogbGluZSAlZCBjb2x1bW4g
JWQgLSBsaW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCAtICVkKScKLSAgICByZXR1cm4gZm10ICUg
KG1zZywgbGluZW5vLCBjb2xubywgZW5kbGluZW5vLCBlbmRjb2xubywgcG9zLCBlbmQpCi0KLQot
X0NPTlNUQU5UUyA9IHsKLSAgICAnLUluZmluaXR5JzogTmVnSW5mLAotICAgICdJbmZpbml0eSc6
IFBvc0luZiwKLSAgICAnTmFOJzogTmFOLAotfQotCi1TVFJJTkdDSFVOSyA9IHJlLmNvbXBpbGUo
cicoLio/KShbIlxcXHgwMC1ceDFmXSknLCBGTEFHUykKLUJBQ0tTTEFTSCA9IHsKLSAgICAnIic6
IHUnIicsICdcXCc6IHUnXFwnLCAnLyc6IHUnLycsCi0gICAgJ2InOiB1J1xiJywgJ2YnOiB1J1xm
JywgJ24nOiB1J1xuJywgJ3InOiB1J1xyJywgJ3QnOiB1J1x0JywKLX0KLQotREVGQVVMVF9FTkNP
RElORyA9ICJ1dGYtOCIKLQotZGVmIHB5X3NjYW5zdHJpbmcocywgZW5kLCBlbmNvZGluZz1Ob25l
LCBzdHJpY3Q9VHJ1ZSwKLSAgICAgICAgX2I9QkFDS1NMQVNILCBfbT1TVFJJTkdDSFVOSy5tYXRj
aCk6Ci0gICAgIiIiU2NhbiB0aGUgc3RyaW5nIHMgZm9yIGEgSlNPTiBzdHJpbmcuIEVuZCBpcyB0
aGUgaW5kZXggb2YgdGhlCi0gICAgY2hhcmFjdGVyIGluIHMgYWZ0ZXIgdGhlIHF1b3RlIHRoYXQg
c3RhcnRlZCB0aGUgSlNPTiBzdHJpbmcuCi0gICAgVW5lc2NhcGVzIGFsbCB2YWxpZCBKU09OIHN0
cmluZyBlc2NhcGUgc2VxdWVuY2VzIGFuZCByYWlzZXMgVmFsdWVFcnJvcgotICAgIG9uIGF0dGVt
cHQgdG8gZGVjb2RlIGFuIGludmFsaWQgc3RyaW5nLiBJZiBzdHJpY3QgaXMgRmFsc2UgdGhlbiBs
aXRlcmFsCi0gICAgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkIGluIHRoZSBzdHJpbmcu
Ci0KLSAgICBSZXR1cm5zIGEgdHVwbGUgb2YgdGhlIGRlY29kZWQgc3RyaW5nIGFuZCB0aGUgaW5k
ZXggb2YgdGhlIGNoYXJhY3RlciBpbiBzCi0gICAgYWZ0ZXIgdGhlIGVuZCBxdW90ZS4iIiIKLSAg
ICBpZiBlbmNvZGluZyBpcyBOb25lOgotICAgICAgICBlbmNvZGluZyA9IERFRkFVTFRfRU5DT0RJ
TkcKLSAgICBjaHVua3MgPSBbXQotICAgIF9hcHBlbmQgPSBjaHVua3MuYXBwZW5kCi0gICAgYmVn
aW4gPSBlbmQgLSAxCi0gICAgd2hpbGUgMToKLSAgICAgICAgY2h1bmsgPSBfbShzLCBlbmQpCi0g
ICAgICAgIGlmIGNodW5rIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJy
b3IoCi0gICAgICAgICAgICAgICAgIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBz
LCBiZWdpbikKLSAgICAgICAgZW5kID0gY2h1bmsuZW5kKCkKLSAgICAgICAgY29udGVudCwgdGVy
bWluYXRvciA9IGNodW5rLmdyb3VwcygpCi0gICAgICAgICMgQ29udGVudCBpcyBjb250YWlucyB6
ZXJvIG9yIG1vcmUgdW5lc2NhcGVkIHN0cmluZyBjaGFyYWN0ZXJzCi0gICAgICAgIGlmIGNvbnRl
bnQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjb250ZW50LCB1bmljb2RlKToKLSAg
ICAgICAgICAgICAgICBjb250ZW50ID0gdW5pY29kZShjb250ZW50LCBlbmNvZGluZykKLSAgICAg
ICAgICAgIF9hcHBlbmQoY29udGVudCkKLSAgICAgICAgIyBUZXJtaW5hdG9yIGlzIHRoZSBlbmQg
b2Ygc3RyaW5nLCBhIGxpdGVyYWwgY29udHJvbCBjaGFyYWN0ZXIsCi0gICAgICAgICMgb3IgYSBi
YWNrc2xhc2ggZGVub3RpbmcgdGhhdCBhbiBlc2NhcGUgc2VxdWVuY2UgZm9sbG93cwotICAgICAg
ICBpZiB0ZXJtaW5hdG9yID09ICciJzoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsaWYg
dGVybWluYXRvciAhPSAnXFwnOgotICAgICAgICAgICAgaWYgc3RyaWN0OgotICAgICAgICAgICAg
ICAgIG1zZyA9ICJJbnZhbGlkIGNvbnRyb2wgY2hhcmFjdGVyICVyIGF0IiAlICh0ZXJtaW5hdG9y
LCkKLSAgICAgICAgICAgICAgICAjbXNnID0gIkludmFsaWQgY29udHJvbCBjaGFyYWN0ZXIgezAh
cn0gYXQiLmZvcm1hdCh0ZXJtaW5hdG9yKQotICAgICAgICAgICAgICAgIHJhaXNlIEpTT05EZWNv
ZGVFcnJvcihtc2csIHMsIGVuZCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
X2FwcGVuZCh0ZXJtaW5hdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIGVzYyA9IHNbZW5kXQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoK
LSAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigKLSAgICAgICAgICAgICAgICAiVW50
ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCIsIHMsIGJlZ2luKQotICAgICAgICAjIElmIG5v
dCBhIHVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLCBtdXN0IGJlIGluIHRoZSBsb29rdXAgdGFibGUK
LSAgICAgICAgaWYgZXNjICE9ICd1JzoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAg
ICBjaGFyID0gX2JbZXNjXQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAg
ICAgICAgIG1zZyA9ICJJbnZhbGlkIFxcZXNjYXBlOiAiICsgcmVwcihlc2MpCi0gICAgICAgICAg
ICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKG1zZywgcywgZW5kKQotICAgICAgICAgICAgZW5k
ICs9IDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVW5pY29kZSBlc2NhcGUgc2VxdWVu
Y2UKLSAgICAgICAgICAgIGVzYyA9IHNbZW5kICsgMTplbmQgKyA1XQotICAgICAgICAgICAgbmV4
dF9lbmQgPSBlbmQgKyA1Ci0gICAgICAgICAgICBpZiBsZW4oZXNjKSAhPSA0OgotICAgICAgICAg
ICAgICAgIG1zZyA9ICJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIgotICAgICAgICAgICAgICAgIHJh
aXNlIEpTT05EZWNvZGVFcnJvcihtc2csIHMsIGVuZCkKLSAgICAgICAgICAgIHVuaSA9IGludChl
c2MsIDE2KQotICAgICAgICAgICAgIyBDaGVjayBmb3Igc3Vycm9nYXRlIHBhaXIgb24gVUNTLTQg
c3lzdGVtcwotICAgICAgICAgICAgaWYgMHhkODAwIDw9IHVuaSA8PSAweGRiZmYgYW5kIHN5cy5t
YXh1bmljb2RlID4gNjU1MzU6Ci0gICAgICAgICAgICAgICAgbXNnID0gIkludmFsaWQgXFx1WFhY
WFxcdVhYWFggc3Vycm9nYXRlIHBhaXIiCi0gICAgICAgICAgICAgICAgaWYgbm90IHNbZW5kICsg
NTplbmQgKyA3XSA9PSAnXFx1JzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29k
ZUVycm9yKG1zZywgcywgZW5kKQotICAgICAgICAgICAgICAgIGVzYzIgPSBzW2VuZCArIDc6ZW5k
ICsgMTFdCi0gICAgICAgICAgICAgICAgaWYgbGVuKGVzYzIpICE9IDQ6Ci0gICAgICAgICAgICAg
ICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcihtc2csIHMsIGVuZCkKLSAgICAgICAgICAgICAg
ICB1bmkyID0gaW50KGVzYzIsIDE2KQotICAgICAgICAgICAgICAgIHVuaSA9IDB4MTAwMDAgKyAo
KCh1bmkgLSAweGQ4MDApIDw8IDEwKSB8ICh1bmkyIC0gMHhkYzAwKSkKLSAgICAgICAgICAgICAg
ICBuZXh0X2VuZCArPSA2Ci0gICAgICAgICAgICBjaGFyID0gdW5pY2hyKHVuaSkKLSAgICAgICAg
ICAgIGVuZCA9IG5leHRfZW5kCi0gICAgICAgICMgQXBwZW5kIHRoZSB1bmVzY2FwZWQgY2hhcmFj
dGVyCi0gICAgICAgIF9hcHBlbmQoY2hhcikKLSAgICByZXR1cm4gdScnLmpvaW4oY2h1bmtzKSwg
ZW5kCi0KLQotIyBVc2Ugc3BlZWR1cCBpZiBhdmFpbGFibGUKLXNjYW5zdHJpbmcgPSBjX3NjYW5z
dHJpbmcgb3IgcHlfc2NhbnN0cmluZwotCi1XSElURVNQQUNFID0gcmUuY29tcGlsZShyJ1sgXHRc
blxyXSonLCBGTEFHUykKLVdISVRFU1BBQ0VfU1RSID0gJyBcdFxuXHInCi0KLWRlZiBKU09OT2Jq
ZWN0KChzLCBlbmQpLCBlbmNvZGluZywgc3RyaWN0LCBzY2FuX29uY2UsIG9iamVjdF9ob29rLAot
ICAgICAgICBvYmplY3RfcGFpcnNfaG9vaywgbWVtbz1Ob25lLAotICAgICAgICBfdz1XSElURVNQ
QUNFLm1hdGNoLCBfd3M9V0hJVEVTUEFDRV9TVFIpOgotICAgICMgQmFja3dhcmRzIGNvbXBhdGli
aWxpdHkKLSAgICBpZiBtZW1vIGlzIE5vbmU6Ci0gICAgICAgIG1lbW8gPSB7fQotICAgIG1lbW9f
Z2V0ID0gbWVtby5zZXRkZWZhdWx0Ci0gICAgcGFpcnMgPSBbXQotICAgICMgVXNlIGEgc2xpY2Ug
dG8gcHJldmVudCBJbmRleEVycm9yIGZyb20gYmVpbmcgcmFpc2VkLCB0aGUgZm9sbG93aW5nCi0g
ICAgIyBjaGVjayB3aWxsIHJhaXNlIGEgbW9yZSBzcGVjaWZpYyBWYWx1ZUVycm9yIGlmIHRoZSBz
dHJpbmcgaXMgZW1wdHkKLSAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCi0gICAgIyBOb3Jt
YWxseSB3ZSBleHBlY3QgbmV4dGNoYXIgPT0gJyInCi0gICAgaWYgbmV4dGNoYXIgIT0gJyInOgot
ICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6Ci0gICAgICAgICAgICBlbmQgPSBfdyhzLCBlbmQp
LmVuZCgpCi0gICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCi0gICAgICAgICMg
VHJpdmlhbCBlbXB0eSBvYmplY3QKLSAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ30nOgotICAgICAg
ICAgICAgaWYgb2JqZWN0X3BhaXJzX2hvb2sgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gb2JqZWN0X3BhaXJzX2hvb2socGFpcnMpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdCwgZW5kICsgMQotICAgICAgICAgICAgcGFpcnMgPSB7fQotICAgICAgICAgICAgaWYg
b2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcGFpcnMgPSBvYmplY3Rf
aG9vayhwYWlycykKLSAgICAgICAgICAgIHJldHVybiBwYWlycywgZW5kICsgMQotICAgICAgICBl
bGlmIG5leHRjaGFyICE9ICciJzoKLSAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigi
RXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBlbmQpCi0gICAgZW5kICs9IDEKLSAgICB3aGls
ZSBUcnVlOgotICAgICAgICBrZXksIGVuZCA9IHNjYW5zdHJpbmcocywgZW5kLCBlbmNvZGluZywg
c3RyaWN0KQotICAgICAgICBrZXkgPSBtZW1vX2dldChrZXksIGtleSkKLQotICAgICAgICAjIFRv
IHNraXAgc29tZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIHdlIG9wdGltaXplIHRoZSBmYXN0IHBh
dGhzIHdoZXJlCi0gICAgICAgICMgdGhlIEpTT04ga2V5IHNlcGFyYXRvciBpcyAiOiAiIG9yIGp1
c3QgIjoiLgotICAgICAgICBpZiBzW2VuZDplbmQgKyAxXSAhPSAnOic6Ci0gICAgICAgICAgICBl
bmQgPSBfdyhzLCBlbmQpLmVuZCgpCi0gICAgICAgICAgICBpZiBzW2VuZDplbmQgKyAxXSAhPSAn
Oic6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJFeHBlY3RpbmcgOiBk
ZWxpbWl0ZXIiLCBzLCBlbmQpCi0KLSAgICAgICAgZW5kICs9IDEKLQotICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICBpZiBzW2VuZF0gaW4gX3dzOgotICAgICAgICAgICAgICAgIGVuZCArPSAxCi0g
ICAgICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKLSAgICAgICAgICAgICAgICAgICAgZW5k
ID0gX3cocywgZW5kICsgMSkuZW5kKCkKLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAg
ICAgICAgICBwYXNzCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNj
YW5fb25jZShzLCBlbmQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAg
ICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKQotICAg
ICAgICBwYWlycy5hcHBlbmQoKGtleSwgdmFsdWUpKQotCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgIG5leHRjaGFyID0gc1tlbmRdCi0gICAgICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6Ci0g
ICAgICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKLSAgICAgICAgICAgICAg
ICBuZXh0Y2hhciA9IHNbZW5kXQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAg
ICAgIG5leHRjaGFyID0gJycKLSAgICAgICAgZW5kICs9IDEKLQotICAgICAgICBpZiBuZXh0Y2hh
ciA9PSAnfSc6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBlbGlmIG5leHRjaGFyICE9ICcs
JzoKLSAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigiRXhwZWN0aW5nICwgZGVsaW1p
dGVyIiwgcywgZW5kIC0gMSkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBuZXh0Y2hhciA9
IHNbZW5kXQotICAgICAgICAgICAgaWYgbmV4dGNoYXIgaW4gX3dzOgotICAgICAgICAgICAgICAg
IGVuZCArPSAxCi0gICAgICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KLSAgICAgICAgICAg
ICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6Ci0gICAgICAgICAgICAgICAgICAgIGVuZCA9IF93KHMs
IGVuZCArIDEpLmVuZCgpCi0gICAgICAgICAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCi0g
ICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgbmV4dGNoYXIgPSAnJwotCi0g
ICAgICAgIGVuZCArPSAxCi0gICAgICAgIGlmIG5leHRjaGFyICE9ICciJzoKLSAgICAgICAgICAg
IHJhaXNlIEpTT05EZWNvZGVFcnJvcigiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBlbmQg
LSAxKQotCi0gICAgaWYgb2JqZWN0X3BhaXJzX2hvb2sgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJl
c3VsdCA9IG9iamVjdF9wYWlyc19ob29rKHBhaXJzKQotICAgICAgICByZXR1cm4gcmVzdWx0LCBl
bmQKLSAgICBwYWlycyA9IGRpY3QocGFpcnMpCi0gICAgaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5v
bmU6Ci0gICAgICAgIHBhaXJzID0gb2JqZWN0X2hvb2socGFpcnMpCi0gICAgcmV0dXJuIHBhaXJz
LCBlbmQKLQotZGVmIEpTT05BcnJheSgocywgZW5kKSwgc2Nhbl9vbmNlLCBfdz1XSElURVNQQUNF
Lm1hdGNoLCBfd3M9V0hJVEVTUEFDRV9TVFIpOgotICAgIHZhbHVlcyA9IFtdCi0gICAgbmV4dGNo
YXIgPSBzW2VuZDplbmQgKyAxXQotICAgIGlmIG5leHRjaGFyIGluIF93czoKLSAgICAgICAgZW5k
ID0gX3cocywgZW5kICsgMSkuZW5kKCkKLSAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAx
XQotICAgICMgTG9vay1haGVhZCBmb3IgdHJpdmlhbCBlbXB0eSBhcnJheQotICAgIGlmIG5leHRj
aGFyID09ICddJzoKLSAgICAgICAgcmV0dXJuIHZhbHVlcywgZW5kICsgMQotICAgIF9hcHBlbmQg
PSB2YWx1ZXMuYXBwZW5kCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRl
cmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJFeHBlY3Rpbmcgb2Jq
ZWN0IiwgcywgZW5kKQotICAgICAgICBfYXBwZW5kKHZhbHVlKQotICAgICAgICBuZXh0Y2hhciA9
IHNbZW5kOmVuZCArIDFdCi0gICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKLSAgICAgICAgICAg
IGVuZCA9IF93KHMsIGVuZCArIDEpLmVuZCgpCi0gICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5k
OmVuZCArIDFdCi0gICAgICAgIGVuZCArPSAxCi0gICAgICAgIGlmIG5leHRjaGFyID09ICddJzoK
LSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJywnOgotICAgICAg
ICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBzLCBl
bmQpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKLSAgICAg
ICAgICAgICAgICBlbmQgKz0gMQotICAgICAgICAgICAgICAgIGlmIHNbZW5kXSBpbiBfd3M6Ci0g
ICAgICAgICAgICAgICAgICAgIGVuZCA9IF93KHMsIGVuZCArIDEpLmVuZCgpCi0gICAgICAgIGV4
Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgcmV0dXJuIHZhbHVlcywg
ZW5kCi0KLWNsYXNzIEpTT05EZWNvZGVyKG9iamVjdCk6Ci0gICAgIiIiU2ltcGxlIEpTT04gPGh0
dHA6Ly9qc29uLm9yZz4gZGVjb2RlcgotCi0gICAgUGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0cmFu
c2xhdGlvbnMgaW4gZGVjb2RpbmcgYnkgZGVmYXVsdDoKLQotICAgICstLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8IEpTT04gICAgICAgICAgfCBQeXRob24gICAgICAg
ICAgICB8Ci0gICAgKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09KwotICAgIHwg
b2JqZWN0ICAgICAgICB8IGRpY3QgICAgICAgICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0t
Ky0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBhcnJheSAgICAgICAgIHwgbGlzdCAgICAgICAg
ICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8
IHN0cmluZyAgICAgICAgfCB1bmljb2RlICAgICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0t
LSstLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgIHwgbnVtYmVyIChpbnQpICB8IGludCwgbG9uZyAg
ICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAg
fCBudW1iZXIgKHJlYWwpIHwgZmxvYXQgICAgICAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0t
LS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8IHRydWUgICAgICAgICAgfCBUcnVlICAgICAg
ICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKwotICAg
IHwgZmFsc2UgICAgICAgICB8IEZhbHNlICAgICAgICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0t
LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBudWxsICAgICAgICAgIHwgTm9uZSAgICAg
ICAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQot
ICAgIEl0IGFsc28gdW5kZXJzdGFuZHMgYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBhbmQgYGAtSW5m
aW5pdHlgYCBhcwotICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYGBmbG9hdGBgIHZhbHVlcywgd2hp
Y2ggaXMgb3V0c2lkZSB0aGUgSlNPTiBzcGVjLgotCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0
X18oc2VsZiwgZW5jb2Rpbmc9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9u
ZSwKLSAgICAgICAgICAgIHBhcnNlX2ludD1Ob25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBzdHJp
Y3Q9VHJ1ZSwKLSAgICAgICAgICAgIG9iamVjdF9wYWlyc19ob29rPU5vbmUpOgotICAgICAgICAi
IiIKLSAgICAgICAgKmVuY29kaW5nKiBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyB1c2VkIHRvIGlu
dGVycHJldCBhbnkKLSAgICAgICAgOmNsYXNzOmBzdHJgIG9iamVjdHMgZGVjb2RlZCBieSB0aGlz
IGluc3RhbmNlIChgYCd1dGYtOCdgYCBieQotICAgICAgICBkZWZhdWx0KS4gIEl0IGhhcyBubyBl
ZmZlY3Qgd2hlbiBkZWNvZGluZyA6Y2xhc3M6YHVuaWNvZGVgIG9iamVjdHMuCi0KLSAgICAgICAg
Tm90ZSB0aGF0IGN1cnJlbnRseSBvbmx5IGVuY29kaW5ncyB0aGF0IGFyZSBhIHN1cGVyc2V0IG9m
IEFTQ0lJIHdvcmssCi0gICAgICAgIHN0cmluZ3Mgb2Ygb3RoZXIgZW5jb2RpbmdzIHNob3VsZCBi
ZSBwYXNzZWQgaW4gYXMgOmNsYXNzOmB1bmljb2RlYC4KLQotICAgICAgICAqb2JqZWN0X2hvb2sq
LCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiBldmVyeQot
ICAgICAgICBKU09OIG9iamVjdCBkZWNvZGVkIGFuZCBpdHMgcmV0dXJuIHZhbHVlIHdpbGwgYmUg
dXNlZCBpbiBwbGFjZSBvZiB0aGUKLSAgICAgICAgZ2l2ZW4gOmNsYXNzOmBkaWN0YC4gIFRoaXMg
Y2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBjdXN0b20KLSAgICAgICAgZGVzZXJpYWxpemF0aW9ucyAo
ZS5nLiB0byBzdXBwb3J0IEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgotCi0gICAgICAgICpvYmpl
Y3RfcGFpcnNfaG9vayogaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxl
ZCB3aXRoCi0gICAgICAgIHRoZSByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRlY29kZSB3
aXRoIGFuIG9yZGVyZWQgbGlzdCBvZiBwYWlycy4KLSAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBv
ZiAqb2JqZWN0X3BhaXJzX2hvb2sqIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQotICAgICAg
ICA6Y2xhc3M6YGRpY3RgLiAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBj
dXN0b20gZGVjb2RlcnMKLSAgICAgICAgdGhhdCByZWx5IG9uIHRoZSBvcmRlciB0aGF0IHRoZSBr
ZXkgYW5kIHZhbHVlIHBhaXJzIGFyZSBkZWNvZGVkIChmb3IKLSAgICAgICAgZXhhbXBsZSwgOmZ1
bmM6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCB3aWxsIHJlbWVtYmVyIHRoZSBvcmRlciBvZgot
ICAgICAgICBpbnNlcnRpb24pLiBJZiAqb2JqZWN0X2hvb2sqIGlzIGFsc28gZGVmaW5lZCwgdGhl
ICpvYmplY3RfcGFpcnNfaG9vayoKLSAgICAgICAgdGFrZXMgcHJpb3JpdHkuCi0KLSAgICAgICAg
KnBhcnNlX2Zsb2F0KiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBzdHJp
bmcgb2YgZXZlcnkKLSAgICAgICAgSlNPTiBmbG9hdCB0byBiZSBkZWNvZGVkLiAgQnkgZGVmYXVs
dCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCi0gICAgICAgIGBgZmxvYXQobnVtX3N0cilgYC4gVGhp
cyBjYW4gYmUgdXNlZCB0byB1c2UgYW5vdGhlciBkYXRhdHlwZSBvciBwYXJzZXIKLSAgICAgICAg
Zm9yIEpTT04gZmxvYXRzIChlLmcuIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYCkuCi0KLSAgICAg
ICAgKnBhcnNlX2ludCosIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc3Ry
aW5nIG9mIGV2ZXJ5Ci0gICAgICAgIEpTT04gaW50IHRvIGJlIGRlY29kZWQuICBCeSBkZWZhdWx0
LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgICAgICAgYGBpbnQobnVtX3N0cilgYC4gIFRoaXMg
Y2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUgb3IgcGFyc2VyCi0gICAgICAgIGZv
ciBKU09OIGludGVnZXJzIChlLmcuIDpjbGFzczpgZmxvYXRgKS4KLQotICAgICAgICAqcGFyc2Vf
Y29uc3RhbnQqLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggb25lIG9mIHRoZQot
ICAgICAgICBmb2xsb3dpbmcgc3RyaW5nczogYGAnLUluZmluaXR5J2BgLCBgYCdJbmZpbml0eSdg
YCwgYGAnTmFOJ2BgLiAgVGhpcwotICAgICAgICBjYW4gYmUgdXNlZCB0byByYWlzZSBhbiBleGNl
cHRpb24gaWYgaW52YWxpZCBKU09OIG51bWJlcnMgYXJlCi0gICAgICAgIGVuY291bnRlcmVkLgot
Ci0gICAgICAgICpzdHJpY3QqIGNvbnRyb2xzIHRoZSBwYXJzZXIncyBiZWhhdmlvciB3aGVuIGl0
IGVuY291bnRlcnMgYW4KLSAgICAgICAgaW52YWxpZCBjb250cm9sIGNoYXJhY3RlciBpbiBhIHN0
cmluZy4gVGhlIGRlZmF1bHQgc2V0dGluZyBvZgotICAgICAgICBgYFRydWVgYCBtZWFucyB0aGF0
IHVuZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMgYXJlIHBhcnNlIGVycm9ycywgaWYKLSAgICAg
ICAgYGBGYWxzZWBgIHRoZW4gY29udHJvbCBjaGFyYWN0ZXJzIHdpbGwgYmUgYWxsb3dlZCBpbiBz
dHJpbmdzLgotCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcK
LSAgICAgICAgc2VsZi5vYmplY3RfaG9vayA9IG9iamVjdF9ob29rCi0gICAgICAgIHNlbGYub2Jq
ZWN0X3BhaXJzX2hvb2sgPSBvYmplY3RfcGFpcnNfaG9vawotICAgICAgICBzZWxmLnBhcnNlX2Zs
b2F0ID0gcGFyc2VfZmxvYXQgb3IgZmxvYXQKLSAgICAgICAgc2VsZi5wYXJzZV9pbnQgPSBwYXJz
ZV9pbnQgb3IgaW50Ci0gICAgICAgIHNlbGYucGFyc2VfY29uc3RhbnQgPSBwYXJzZV9jb25zdGFu
dCBvciBfQ09OU1RBTlRTLl9fZ2V0aXRlbV9fCi0gICAgICAgIHNlbGYuc3RyaWN0ID0gc3RyaWN0
Ci0gICAgICAgIHNlbGYucGFyc2Vfb2JqZWN0ID0gSlNPTk9iamVjdAotICAgICAgICBzZWxmLnBh
cnNlX2FycmF5ID0gSlNPTkFycmF5Ci0gICAgICAgIHNlbGYucGFyc2Vfc3RyaW5nID0gc2NhbnN0
cmluZwotICAgICAgICBzZWxmLm1lbW8gPSB7fQotICAgICAgICBzZWxmLnNjYW5fb25jZSA9IG1h
a2Vfc2Nhbm5lcihzZWxmKQotCi0gICAgZGVmIGRlY29kZShzZWxmLCBzLCBfdz1XSElURVNQQUNF
Lm1hdGNoKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2Yg
YGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYAotICAgICAgICBpbnN0YW5jZSBjb250YWlu
aW5nIGEgSlNPTiBkb2N1bWVudCkKLQotICAgICAgICAiIiIKLSAgICAgICAgb2JqLCBlbmQgPSBz
ZWxmLnJhd19kZWNvZGUocywgaWR4PV93KHMsIDApLmVuZCgpKQotICAgICAgICBlbmQgPSBfdyhz
LCBlbmQpLmVuZCgpCi0gICAgICAgIGlmIGVuZCAhPSBsZW4ocyk6Ci0gICAgICAgICAgICByYWlz
ZSBKU09ORGVjb2RlRXJyb3IoIkV4dHJhIGRhdGEiLCBzLCBlbmQsIGxlbihzKSkKLSAgICAgICAg
cmV0dXJuIG9iagotCi0gICAgZGVmIHJhd19kZWNvZGUoc2VsZiwgcywgaWR4PTApOgotICAgICAg
ICAiIiJEZWNvZGUgYSBKU09OIGRvY3VtZW50IGZyb20gYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVu
aWNvZGVgYAotICAgICAgICBiZWdpbm5pbmcgd2l0aCBhIEpTT04gZG9jdW1lbnQpIGFuZCByZXR1
cm4gYSAyLXR1cGxlIG9mIHRoZSBQeXRob24KLSAgICAgICAgcmVwcmVzZW50YXRpb24gYW5kIHRo
ZSBpbmRleCBpbiBgYHNgYCB3aGVyZSB0aGUgZG9jdW1lbnQgZW5kZWQuCi0KLSAgICAgICAgVGhp
cyBjYW4gYmUgdXNlZCB0byBkZWNvZGUgYSBKU09OIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgdGhh
dCBtYXkKLSAgICAgICAgaGF2ZSBleHRyYW5lb3VzIGRhdGEgYXQgdGhlIGVuZC4KLQotICAgICAg
ICAiIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2JqLCBlbmQgPSBzZWxmLnNjYW5fb25j
ZShzLCBpZHgpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFp
c2UgSlNPTkRlY29kZUVycm9yKCJObyBKU09OIG9iamVjdCBjb3VsZCBiZSBkZWNvZGVkIiwgcywg
aWR4KQotICAgICAgICByZXR1cm4gb2JqLCBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL2VuY29kZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9lbmNvZGVyLnB5CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3MTg5ZDdmMDAyMDFlMjI5MDA0ZjljNjgwMzcxMjIxNzQxOTc2Yzg2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL2VuY29kZXIucHkKKysrIC9kZXYv
bnVsbApAQCAtMSw1MDMgKzAsMCBAQAotIiIiSW1wbGVtZW50YXRpb24gb2YgSlNPTkVuY29kZXIK
LSIiIgotaW1wb3J0IHJlCi1mcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKLQotZGVmIF9pbXBv
cnRfc3BlZWR1cHMoKToKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gc2ltcGxlanNvbiBpbXBvcnQg
X3NwZWVkdXBzCi0gICAgICAgIHJldHVybiBfc3BlZWR1cHMuZW5jb2RlX2Jhc2VzdHJpbmdfYXNj
aWksIF9zcGVlZHVwcy5tYWtlX2VuY29kZXIKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAg
ICAgIHJldHVybiBOb25lLCBOb25lCi1jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLCBjX21ha2Vf
ZW5jb2RlciA9IF9pbXBvcnRfc3BlZWR1cHMoKQotCi1mcm9tIGRlY29kZXIgaW1wb3J0IFBvc0lu
ZgotCi1FU0NBUEUgPSByZS5jb21waWxlKHInW1x4MDAtXHgxZlxcIlxiXGZcblxyXHRdJykKLUVT
Q0FQRV9BU0NJSSA9IHJlLmNvbXBpbGUocicoW1xcIl18W15cIC1+XSknKQotSEFTX1VURjggPSBy
ZS5jb21waWxlKHInW1x4ODAtXHhmZl0nKQotRVNDQVBFX0RDVCA9IHsKLSAgICAnXFwnOiAnXFxc
XCcsCi0gICAgJyInOiAnXFwiJywKLSAgICAnXGInOiAnXFxiJywKLSAgICAnXGYnOiAnXFxmJywK
LSAgICAnXG4nOiAnXFxuJywKLSAgICAnXHInOiAnXFxyJywKLSAgICAnXHQnOiAnXFx0JywKLX0K
LWZvciBpIGluIHJhbmdlKDB4MjApOgotICAgICNFU0NBUEVfRENULnNldGRlZmF1bHQoY2hyKGkp
LCAnXFx1ezA6MDR4fScuZm9ybWF0KGkpKQotICAgIEVTQ0FQRV9EQ1Quc2V0ZGVmYXVsdChjaHIo
aSksICdcXHUlMDR4JyAlIChpLCkpCi0KLUZMT0FUX1JFUFIgPSByZXByCi0KLWRlZiBlbmNvZGVf
YmFzZXN0cmluZyhzKToKLSAgICAiIiJSZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEg
UHl0aG9uIHN0cmluZwotCi0gICAgIiIiCi0gICAgaWYgaXNpbnN0YW5jZShzLCBzdHIpIGFuZCBI
QVNfVVRGOC5zZWFyY2gocykgaXMgbm90IE5vbmU6Ci0gICAgICAgIHMgPSBzLmRlY29kZSgndXRm
LTgnKQotICAgIGRlZiByZXBsYWNlKG1hdGNoKToKLSAgICAgICAgcmV0dXJuIEVTQ0FQRV9EQ1Rb
bWF0Y2guZ3JvdXAoMCldCi0gICAgcmV0dXJuIHUnIicgKyBFU0NBUEUuc3ViKHJlcGxhY2UsIHMp
ICsgdSciJwotCi0KLWRlZiBweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShzKToKLSAgICAiIiJS
ZXR1cm4gYW4gQVNDSUktb25seSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIHN0cmlu
ZwotCi0gICAgIiIiCi0gICAgaWYgaXNpbnN0YW5jZShzLCBzdHIpIGFuZCBIQVNfVVRGOC5zZWFy
Y2gocykgaXMgbm90IE5vbmU6Ci0gICAgICAgIHMgPSBzLmRlY29kZSgndXRmLTgnKQotICAgIGRl
ZiByZXBsYWNlKG1hdGNoKToKLSAgICAgICAgcyA9IG1hdGNoLmdyb3VwKDApCi0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIHJldHVybiBFU0NBUEVfRENUW3NdCi0gICAgICAgIGV4Y2VwdCBLZXlF
cnJvcjoKLSAgICAgICAgICAgIG4gPSBvcmQocykKLSAgICAgICAgICAgIGlmIG4gPCAweDEwMDAw
OgotICAgICAgICAgICAgICAgICNyZXR1cm4gJ1xcdXswOjA0eH0nLmZvcm1hdChuKQotICAgICAg
ICAgICAgICAgIHJldHVybiAnXFx1JTA0eCcgJSAobiwpCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgICMgc3Vycm9nYXRlIHBhaXIKLSAgICAgICAgICAgICAgICBuIC09IDB4MTAw
MDAKLSAgICAgICAgICAgICAgICBzMSA9IDB4ZDgwMCB8ICgobiA+PiAxMCkgJiAweDNmZikKLSAg
ICAgICAgICAgICAgICBzMiA9IDB4ZGMwMCB8IChuICYgMHgzZmYpCi0gICAgICAgICAgICAgICAg
I3JldHVybiAnXFx1ezA6MDR4fVxcdXsxOjA0eH0nLmZvcm1hdChzMSwgczIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuICdcXHUlMDR4XFx1JTA0eCcgJSAoczEsIHMyKQotICAgIHJldHVybiAnIicg
KyBzdHIoRVNDQVBFX0FTQ0lJLnN1YihyZXBsYWNlLCBzKSkgKyAnIicKLQotCi1lbmNvZGVfYmFz
ZXN0cmluZ19hc2NpaSA9ICgKLSAgICBjX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpIG9yIHB5X2Vu
Y29kZV9iYXNlc3RyaW5nX2FzY2lpKQotCi1jbGFzcyBKU09ORW5jb2RlcihvYmplY3QpOgotICAg
ICIiIkV4dGVuc2libGUgSlNPTiA8aHR0cDovL2pzb24ub3JnPiBlbmNvZGVyIGZvciBQeXRob24g
ZGF0YSBzdHJ1Y3R1cmVzLgotCi0gICAgU3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvYmplY3RzIGFu
ZCB0eXBlcyBieSBkZWZhdWx0OgotCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t
LS0tLS0tKwotICAgIHwgUHl0aG9uICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKLSAgICAr
PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCi0gICAgfCBkaWN0ICAgICAgICAg
ICAgICB8IG9iamVjdCAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t
LS0tLS0tLSsKLSAgICB8IGxpc3QsIHR1cGxlICAgICAgIHwgYXJyYXkgICAgICAgICB8Ci0gICAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgIHwgc3RyLCB1bmljb2Rl
ICAgICAgfCBzdHJpbmcgICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t
LS0tLS0tLS0rCi0gICAgfCBpbnQsIGxvbmcsIGZsb2F0ICB8IG51bWJlciAgICAgICAgfAotICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICB8IFRydWUgICAgICAg
ICAgICAgIHwgdHJ1ZSAgICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t
LS0tLS0tLS0tKwotICAgIHwgRmFsc2UgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKLSAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBOb25lICAgICAg
ICAgICAgICB8IG51bGwgICAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t
LS0tLS0tLS0tLSsKLQotICAgIFRvIGV4dGVuZCB0aGlzIHRvIHJlY29nbml6ZSBvdGhlciBvYmpl
Y3RzLCBzdWJjbGFzcyBhbmQgaW1wbGVtZW50IGEKLSAgICBgYC5kZWZhdWx0KClgYCBtZXRob2Qg
d2l0aCBhbm90aGVyIG1ldGhvZCB0aGF0IHJldHVybnMgYSBzZXJpYWxpemFibGUKLSAgICBvYmpl
Y3QgZm9yIGBgb2BgIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgaXQgc2hvdWxkIGNhbGwgdGhlIHN1
cGVyY2xhc3MKLSAgICBpbXBsZW1lbnRhdGlvbiAodG8gcmFpc2UgYGBUeXBlRXJyb3JgYCkuCi0K
LSAgICAiIiIKLSAgICBpdGVtX3NlcGFyYXRvciA9ICcsICcKLSAgICBrZXlfc2VwYXJhdG9yID0g
JzogJwotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lp
PVRydWUsCi0gICAgICAgICAgICBjaGVja19jaXJjdWxhcj1UcnVlLCBhbGxvd19uYW49VHJ1ZSwg
c29ydF9rZXlzPUZhbHNlLAotICAgICAgICAgICAgaW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9u
ZSwgZW5jb2Rpbmc9J3V0Zi04JywgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgdXNlX2RlY2lt
YWw9RmFsc2UpOgotICAgICAgICAiIiJDb25zdHJ1Y3RvciBmb3IgSlNPTkVuY29kZXIsIHdpdGgg
c2Vuc2libGUgZGVmYXVsdHMuCi0KLSAgICAgICAgSWYgc2tpcGtleXMgaXMgZmFsc2UsIHRoZW4g
aXQgaXMgYSBUeXBlRXJyb3IgdG8gYXR0ZW1wdAotICAgICAgICBlbmNvZGluZyBvZiBrZXlzIHRo
YXQgYXJlIG5vdCBzdHIsIGludCwgbG9uZywgZmxvYXQgb3IgTm9uZS4gIElmCi0gICAgICAgIHNr
aXBrZXlzIGlzIFRydWUsIHN1Y2ggaXRlbXMgYXJlIHNpbXBseSBza2lwcGVkLgotCi0gICAgICAg
IElmIGVuc3VyZV9hc2NpaSBpcyB0cnVlLCB0aGUgb3V0cHV0IGlzIGd1YXJhbnRlZWQgdG8gYmUg
c3RyCi0gICAgICAgIG9iamVjdHMgd2l0aCBhbGwgaW5jb21pbmcgdW5pY29kZSBjaGFyYWN0ZXJz
IGVzY2FwZWQuICBJZgotICAgICAgICBlbnN1cmVfYXNjaWkgaXMgZmFsc2UsIHRoZSBvdXRwdXQg
d2lsbCBiZSB1bmljb2RlIG9iamVjdC4KLQotICAgICAgICBJZiBjaGVja19jaXJjdWxhciBpcyB0
cnVlLCB0aGVuIGxpc3RzLCBkaWN0cywgYW5kIGN1c3RvbSBlbmNvZGVkCi0gICAgICAgIG9iamVj
dHMgd2lsbCBiZSBjaGVja2VkIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGR1cmluZyBlbmNvZGlu
ZyB0bwotICAgICAgICBwcmV2ZW50IGFuIGluZmluaXRlIHJlY3Vyc2lvbiAod2hpY2ggd291bGQg
Y2F1c2UgYW4gT3ZlcmZsb3dFcnJvcikuCi0gICAgICAgIE90aGVyd2lzZSwgbm8gc3VjaCBjaGVj
ayB0YWtlcyBwbGFjZS4KLQotICAgICAgICBJZiBhbGxvd19uYW4gaXMgdHJ1ZSwgdGhlbiBOYU4s
IEluZmluaXR5LCBhbmQgLUluZmluaXR5IHdpbGwgYmUKLSAgICAgICAgZW5jb2RlZCBhcyBzdWNo
LiAgVGhpcyBiZWhhdmlvciBpcyBub3QgSlNPTiBzcGVjaWZpY2F0aW9uIGNvbXBsaWFudCwKLSAg
ICAgICAgYnV0IGlzIGNvbnNpc3RlbnQgd2l0aCBtb3N0IEphdmFTY3JpcHQgYmFzZWQgZW5jb2Rl
cnMgYW5kIGRlY29kZXJzLgotICAgICAgICBPdGhlcndpc2UsIGl0IHdpbGwgYmUgYSBWYWx1ZUVy
cm9yIHRvIGVuY29kZSBzdWNoIGZsb2F0cy4KLQotICAgICAgICBJZiBzb3J0X2tleXMgaXMgdHJ1
ZSwgdGhlbiB0aGUgb3V0cHV0IG9mIGRpY3Rpb25hcmllcyB3aWxsIGJlCi0gICAgICAgIHNvcnRl
ZCBieSBrZXk7IHRoaXMgaXMgdXNlZnVsIGZvciByZWdyZXNzaW9uIHRlc3RzIHRvIGVuc3VyZQot
ICAgICAgICB0aGF0IEpTT04gc2VyaWFsaXphdGlvbnMgY2FuIGJlIGNvbXBhcmVkIG9uIGEgZGF5
LXRvLWRheSBiYXNpcy4KLQotICAgICAgICBJZiBpbmRlbnQgaXMgYSBzdHJpbmcsIHRoZW4gSlNP
TiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0IG1lbWJlcnMKLSAgICAgICAgd2lsbCBiZSBwcmV0
dHktcHJpbnRlZCB3aXRoIGEgbmV3bGluZSBmb2xsb3dlZCBieSB0aGF0IHN0cmluZyByZXBlYXRl
ZAotICAgICAgICBmb3IgZWFjaCBsZXZlbCBvZiBuZXN0aW5nLiBgYE5vbmVgYCAodGhlIGRlZmF1
bHQpIHNlbGVjdHMgdGhlIG1vc3QgY29tcGFjdAotICAgICAgICByZXByZXNlbnRhdGlvbiB3aXRo
b3V0IGFueSBuZXdsaW5lcy4gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKLSAgICAg
ICAgdmVyc2lvbnMgb2Ygc2ltcGxlanNvbiBlYXJsaWVyIHRoYW4gMi4xLjAsIGFuIGludGVnZXIg
aXMgYWxzbyBhY2NlcHRlZAotICAgICAgICBhbmQgaXMgY29udmVydGVkIHRvIGEgc3RyaW5nIHdp
dGggdGhhdCBtYW55IHNwYWNlcy4KLQotICAgICAgICBJZiBzcGVjaWZpZWQsIHNlcGFyYXRvcnMg
c2hvdWxkIGJlIGEgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKQotICAgICAgICB0dXBs
ZS4gIFRoZSBkZWZhdWx0IGlzICgnLCAnLCAnOiAnKS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0
IEpTT04KLSAgICAgICAgcmVwcmVzZW50YXRpb24geW91IHNob3VsZCBzcGVjaWZ5ICgnLCcsICc6
JykgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCi0KLSAgICAgICAgSWYgc3BlY2lmaWVkLCBkZWZh
dWx0IGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3Igb2JqZWN0cwotICAgICAgICB0
aGF0IGNhbid0IG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpT
T04gZW5jb2RhYmxlCi0gICAgICAgIHZlcnNpb24gb2YgdGhlIG9iamVjdCBvciByYWlzZSBhIGBg
VHlwZUVycm9yYGAuCi0KLSAgICAgICAgSWYgZW5jb2RpbmcgaXMgbm90IE5vbmUsIHRoZW4gYWxs
IGlucHV0IHN0cmluZ3Mgd2lsbCBiZQotICAgICAgICB0cmFuc2Zvcm1lZCBpbnRvIHVuaWNvZGUg
dXNpbmcgdGhhdCBlbmNvZGluZyBwcmlvciB0byBKU09OLWVuY29kaW5nLgotICAgICAgICBUaGUg
ZGVmYXVsdCBpcyBVVEYtOC4KLQotICAgICAgICBJZiB1c2VfZGVjaW1hbCBpcyB0cnVlIChub3Qg
dGhlIGRlZmF1bHQpLCBgYGRlY2ltYWwuRGVjaW1hbGBgIHdpbGwKLSAgICAgICAgYmUgc3VwcG9y
dGVkIGRpcmVjdGx5IGJ5IHRoZSBlbmNvZGVyLiBGb3IgdGhlIGludmVyc2UsIGRlY29kZSBKU09O
Ci0gICAgICAgIHdpdGggYGBwYXJzZV9mbG9hdD1kZWNpbWFsLkRlY2ltYWxgYC4KLQotICAgICAg
ICAiIiIKLQotICAgICAgICBzZWxmLnNraXBrZXlzID0gc2tpcGtleXMKLSAgICAgICAgc2VsZi5l
bnN1cmVfYXNjaWkgPSBlbnN1cmVfYXNjaWkKLSAgICAgICAgc2VsZi5jaGVja19jaXJjdWxhciA9
IGNoZWNrX2NpcmN1bGFyCi0gICAgICAgIHNlbGYuYWxsb3dfbmFuID0gYWxsb3dfbmFuCi0gICAg
ICAgIHNlbGYuc29ydF9rZXlzID0gc29ydF9rZXlzCi0gICAgICAgIHNlbGYudXNlX2RlY2ltYWwg
PSB1c2VfZGVjaW1hbAotICAgICAgICBpZiBpc2luc3RhbmNlKGluZGVudCwgKGludCwgbG9uZykp
OgotICAgICAgICAgICAgaW5kZW50ID0gJyAnICogaW5kZW50Ci0gICAgICAgIHNlbGYuaW5kZW50
ID0gaW5kZW50Ci0gICAgICAgIGlmIHNlcGFyYXRvcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAg
ICBzZWxmLml0ZW1fc2VwYXJhdG9yLCBzZWxmLmtleV9zZXBhcmF0b3IgPSBzZXBhcmF0b3JzCi0g
ICAgICAgIGVsaWYgaW5kZW50IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5pdGVtX3Nl
cGFyYXRvciA9ICcsJwotICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCBOb25lOgotICAgICAgICAg
ICAgc2VsZi5kZWZhdWx0ID0gZGVmYXVsdAotICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2Rp
bmcKLQotICAgIGRlZiBkZWZhdWx0KHNlbGYsIG8pOgotICAgICAgICAiIiJJbXBsZW1lbnQgdGhp
cyBtZXRob2QgaW4gYSBzdWJjbGFzcyBzdWNoIHRoYXQgaXQgcmV0dXJucwotICAgICAgICBhIHNl
cmlhbGl6YWJsZSBvYmplY3QgZm9yIGBgb2BgLCBvciBjYWxscyB0aGUgYmFzZSBpbXBsZW1lbnRh
dGlvbgotICAgICAgICAodG8gcmFpc2UgYSBgYFR5cGVFcnJvcmBgKS4KLQotICAgICAgICBGb3Ig
ZXhhbXBsZSwgdG8gc3VwcG9ydCBhcmJpdHJhcnkgaXRlcmF0b3JzLCB5b3UgY291bGQKLSAgICAg
ICAgaW1wbGVtZW50IGRlZmF1bHQgbGlrZSB0aGlzOjoKLQotICAgICAgICAgICAgZGVmIGRlZmF1
bHQoc2VsZiwgbyk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBp
dGVyYWJsZSA9IGl0ZXIobykKLSAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAg
ICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxpc3QoaXRlcmFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpT
T05FbmNvZGVyLmRlZmF1bHQoc2VsZiwgbykKLQotICAgICAgICAiIiIKLSAgICAgICAgcmFpc2Ug
VHlwZUVycm9yKHJlcHIobykgKyAiIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZSIpCi0KLSAgICBk
ZWYgZW5jb2RlKHNlbGYsIG8pOgotICAgICAgICAiIiJSZXR1cm4gYSBKU09OIHN0cmluZyByZXBy
ZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBkYXRhIHN0cnVjdHVyZS4KLQotICAgICAgICA+Pj4gZnJv
bSBzaW1wbGVqc29uIGltcG9ydCBKU09ORW5jb2RlcgotICAgICAgICA+Pj4gSlNPTkVuY29kZXIo
KS5lbmNvZGUoeyJmb28iOiBbImJhciIsICJiYXoiXX0pCi0gICAgICAgICd7ImZvbyI6IFsiYmFy
IiwgImJheiJdfScKLQotICAgICAgICAiIiIKLSAgICAgICAgIyBUaGlzIGlzIGZvciBleHRyZW1l
bHkgc2ltcGxlIGNhc2VzIGFuZCBiZW5jaG1hcmtzLgotICAgICAgICBpZiBpc2luc3RhbmNlKG8s
IGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvLCBzdHIpOgotICAgICAg
ICAgICAgICAgIF9lbmNvZGluZyA9IHNlbGYuZW5jb2RpbmcKLSAgICAgICAgICAgICAgICBpZiAo
X2VuY29kaW5nIGlzIG5vdCBOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IChf
ZW5jb2RpbmcgPT0gJ3V0Zi04JykpOgotICAgICAgICAgICAgICAgICAgICBvID0gby5kZWNvZGUo
X2VuY29kaW5nKQotICAgICAgICAgICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKG8pCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVfYmFzZXN0cmluZyhvKQotICAgICAgICAj
IFRoaXMgZG9lc24ndCBwYXNzIHRoZSBpdGVyYXRvciBkaXJlY3RseSB0byAnJy5qb2luKCkgYmVj
YXVzZSB0aGUKLSAgICAgICAgIyBleGNlcHRpb25zIGFyZW4ndCBhcyBkZXRhaWxlZC4gIFRoZSBs
aXN0IGNhbGwgc2hvdWxkIGJlIHJvdWdobHkKLSAgICAgICAgIyBlcXVpdmFsZW50IHRvIHRoZSBQ
eVNlcXVlbmNlX0Zhc3QgdGhhdCAnJy5qb2luKCkgd291bGQgZG8uCi0gICAgICAgIGNodW5rcyA9
IHNlbGYuaXRlcmVuY29kZShvLCBfb25lX3Nob3Q9VHJ1ZSkKLSAgICAgICAgaWYgbm90IGlzaW5z
dGFuY2UoY2h1bmtzLCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgIGNodW5rcyA9IGxpc3Qo
Y2h1bmtzKQotICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKLSAgICAgICAgICAgIHJldHVy
biAnJy5qb2luKGNodW5rcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB1Jycu
am9pbihjaHVua3MpCi0KLSAgICBkZWYgaXRlcmVuY29kZShzZWxmLCBvLCBfb25lX3Nob3Q9RmFs
c2UpOgotICAgICAgICAiIiJFbmNvZGUgdGhlIGdpdmVuIG9iamVjdCBhbmQgeWllbGQgZWFjaCBz
dHJpbmcKLSAgICAgICAgcmVwcmVzZW50YXRpb24gYXMgYXZhaWxhYmxlLgotCi0gICAgICAgIEZv
ciBleGFtcGxlOjoKLQotICAgICAgICAgICAgZm9yIGNodW5rIGluIEpTT05FbmNvZGVyKCkuaXRl
cmVuY29kZShiaWdvYmplY3QpOgotICAgICAgICAgICAgICAgIG15c29ja2V0LndyaXRlKGNodW5r
KQotCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLmNoZWNrX2NpcmN1bGFyOgotICAgICAg
ICAgICAgbWFya2VycyA9IHt9Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYXJrZXJzID0g
Tm9uZQotICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKLSAgICAgICAgICAgIF9lbmNvZGVy
ID0gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9l
bmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmcKLSAgICAgICAgaWYgc2VsZi5lbmNvZGluZyAhPSAn
dXRmLTgnOgotICAgICAgICAgICAgZGVmIF9lbmNvZGVyKG8sIF9vcmlnX2VuY29kZXI9X2VuY29k
ZXIsIF9lbmNvZGluZz1zZWxmLmVuY29kaW5nKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKG8sIHN0cik6Ci0gICAgICAgICAgICAgICAgICAgIG8gPSBvLmRlY29kZShfZW5jb2Rpbmcp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9vcmlnX2VuY29kZXIobykKLQotICAgICAgICBkZWYg
ZmxvYXRzdHIobywgYWxsb3dfbmFuPXNlbGYuYWxsb3dfbmFuLAotICAgICAgICAgICAgICAgIF9y
ZXByPUZMT0FUX1JFUFIsIF9pbmY9UG9zSW5mLCBfbmVnaW5mPS1Qb3NJbmYpOgotICAgICAgICAg
ICAgIyBDaGVjayBmb3Igc3BlY2lhbHMuIE5vdGUgdGhhdCB0aGlzIHR5cGUgb2YgdGVzdCBpcyBw
cm9jZXNzb3IKLSAgICAgICAgICAgICMgYW5kL29yIHBsYXRmb3JtLXNwZWNpZmljLCBzbyBkbyB0
ZXN0cyB3aGljaCBkb24ndCBkZXBlbmQgb24KLSAgICAgICAgICAgICMgdGhlIGludGVybmFscy4K
LQotICAgICAgICAgICAgaWYgbyAhPSBvOgotICAgICAgICAgICAgICAgIHRleHQgPSAnTmFOJwot
ICAgICAgICAgICAgZWxpZiBvID09IF9pbmY6Ci0gICAgICAgICAgICAgICAgdGV4dCA9ICdJbmZp
bml0eScKLSAgICAgICAgICAgIGVsaWYgbyA9PSBfbmVnaW5mOgotICAgICAgICAgICAgICAgIHRl
eHQgPSAnLUluZmluaXR5JwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gX3JlcHIobykKLQotICAgICAgICAgICAgaWYgbm90IGFsbG93X25hbjoKLSAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiT3V0IG9mIHJhbmdl
IGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50OiAiICsKLSAgICAgICAgICAgICAg
ICAgICAgcmVwcihvKSkKLQotICAgICAgICAgICAgcmV0dXJuIHRleHQKLQotCi0gICAgICAgIGtl
eV9tZW1vID0ge30KLSAgICAgICAgaWYgKF9vbmVfc2hvdCBhbmQgY19tYWtlX2VuY29kZXIgaXMg
bm90IE5vbmUKLSAgICAgICAgICAgICAgICBhbmQgc2VsZi5pbmRlbnQgaXMgTm9uZSk6Ci0gICAg
ICAgICAgICBfaXRlcmVuY29kZSA9IGNfbWFrZV9lbmNvZGVyKAotICAgICAgICAgICAgICAgIG1h
cmtlcnMsIHNlbGYuZGVmYXVsdCwgX2VuY29kZXIsIHNlbGYuaW5kZW50LAotICAgICAgICAgICAg
ICAgIHNlbGYua2V5X3NlcGFyYXRvciwgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5zb3J0X2tl
eXMsCi0gICAgICAgICAgICAgICAgc2VsZi5za2lwa2V5cywgc2VsZi5hbGxvd19uYW4sIGtleV9t
ZW1vLCBzZWxmLnVzZV9kZWNpbWFsKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2l0ZXJl
bmNvZGUgPSBfbWFrZV9pdGVyZW5jb2RlKAotICAgICAgICAgICAgICAgIG1hcmtlcnMsIHNlbGYu
ZGVmYXVsdCwgX2VuY29kZXIsIHNlbGYuaW5kZW50LCBmbG9hdHN0ciwKLSAgICAgICAgICAgICAg
ICBzZWxmLmtleV9zZXBhcmF0b3IsIHNlbGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYuc29ydF9rZXlz
LAotICAgICAgICAgICAgICAgIHNlbGYuc2tpcGtleXMsIF9vbmVfc2hvdCwgc2VsZi51c2VfZGVj
aW1hbCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIF9pdGVyZW5jb2RlKG8sIDAp
Ci0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBrZXlfbWVtby5jbGVhcigpCi0KLQotY2xh
c3MgSlNPTkVuY29kZXJGb3JIVE1MKEpTT05FbmNvZGVyKToKLSAgICAiIiJBbiBlbmNvZGVyIHRo
YXQgcHJvZHVjZXMgSlNPTiBzYWZlIHRvIGVtYmVkIGluIEhUTUwuCi0KLSAgICBUbyBlbWJlZCBK
U09OIGNvbnRlbnQgaW4sIHNheSwgYSBzY3JpcHQgdGFnIG9uIGEgd2ViIHBhZ2UsIHRoZQotICAg
IGNoYXJhY3RlcnMgJiwgPCBhbmQgPiBzaG91bGQgYmUgZXNjYXBlZC4gVGhleSBjYW5ub3QgYmUg
ZXNjYXBlZAotICAgIHdpdGggdGhlIHVzdWFsIGVudGl0aWVzIChlLmcuICZhbXA7KSBiZWNhdXNl
IHRoZXkgYXJlIG5vdCBleHBhbmRlZAotICAgIHdpdGhpbiA8c2NyaXB0PiB0YWdzLgotICAgICIi
IgotCi0gICAgZGVmIGVuY29kZShzZWxmLCBvKToKLSAgICAgICAgIyBPdmVycmlkZSBKU09ORW5j
b2Rlci5lbmNvZGUgYmVjYXVzZSBpdCBoYXMgaGFja3MgZm9yCi0gICAgICAgICMgcGVyZm9ybWFu
Y2UgdGhhdCBtYWtlIHRoaW5ncyBtb3JlIGNvbXBsaWNhdGVkLgotICAgICAgICBjaHVua3MgPSBz
ZWxmLml0ZXJlbmNvZGUobywgVHJ1ZSkKLSAgICAgICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6Ci0g
ICAgICAgICAgICByZXR1cm4gJycuam9pbihjaHVua3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICByZXR1cm4gdScnLmpvaW4oY2h1bmtzKQotCi0gICAgZGVmIGl0ZXJlbmNvZGUoc2VsZiwg
bywgX29uZV9zaG90PUZhbHNlKToKLSAgICAgICAgY2h1bmtzID0gc3VwZXIoSlNPTkVuY29kZXJG
b3JIVE1MLCBzZWxmKS5pdGVyZW5jb2RlKG8sIF9vbmVfc2hvdCkKLSAgICAgICAgZm9yIGNodW5r
IGluIGNodW5rczoKLSAgICAgICAgICAgIGNodW5rID0gY2h1bmsucmVwbGFjZSgnJicsICdcXHUw
MDI2JykKLSAgICAgICAgICAgIGNodW5rID0gY2h1bmsucmVwbGFjZSgnPCcsICdcXHUwMDNjJykK
LSAgICAgICAgICAgIGNodW5rID0gY2h1bmsucmVwbGFjZSgnPicsICdcXHUwMDNlJykKLSAgICAg
ICAgICAgIHlpZWxkIGNodW5rCi0KLQotZGVmIF9tYWtlX2l0ZXJlbmNvZGUobWFya2VycywgX2Rl
ZmF1bHQsIF9lbmNvZGVyLCBfaW5kZW50LCBfZmxvYXRzdHIsCi0gICAgICAgIF9rZXlfc2VwYXJh
dG9yLCBfaXRlbV9zZXBhcmF0b3IsIF9zb3J0X2tleXMsIF9za2lwa2V5cywgX29uZV9zaG90LAot
ICAgICAgICBfdXNlX2RlY2ltYWwsCi0gICAgICAgICMjIEhBQ0s6IGhhbmQtb3B0aW1pemVkIGJ5
dGVjb2RlOyB0dXJuIGdsb2JhbHMgaW50byBsb2NhbHMKLSAgICAgICAgRmFsc2U9RmFsc2UsCi0g
ICAgICAgIFRydWU9VHJ1ZSwKLSAgICAgICAgVmFsdWVFcnJvcj1WYWx1ZUVycm9yLAotICAgICAg
ICBiYXNlc3RyaW5nPWJhc2VzdHJpbmcsCi0gICAgICAgIERlY2ltYWw9RGVjaW1hbCwKLSAgICAg
ICAgZGljdD1kaWN0LAotICAgICAgICBmbG9hdD1mbG9hdCwKLSAgICAgICAgaWQ9aWQsCi0gICAg
ICAgIGludD1pbnQsCi0gICAgICAgIGlzaW5zdGFuY2U9aXNpbnN0YW5jZSwKLSAgICAgICAgbGlz
dD1saXN0LAotICAgICAgICBsb25nPWxvbmcsCi0gICAgICAgIHN0cj1zdHIsCi0gICAgICAgIHR1
cGxlPXR1cGxlLAotICAgICk6Ci0KLSAgICBkZWYgX2l0ZXJlbmNvZGVfbGlzdChsc3QsIF9jdXJy
ZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgIGlmIG5vdCBsc3Q6Ci0gICAgICAgICAgICB5aWVs
ZCAnW10nCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9u
ZToKLSAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobHN0KQotICAgICAgICAgICAgaWYgbWFya2Vy
aWQgaW4gbWFya2VyczoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxh
ciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQotICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBs
c3QKLSAgICAgICAgYnVmID0gJ1snCi0gICAgICAgIGlmIF9pbmRlbnQgaXMgbm90IE5vbmU6Ci0g
ICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQotICAgICAgICAgICAgbmV3bGlu
ZV9pbmRlbnQgPSAnXG4nICsgKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAg
ICAgICAgICBzZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAotICAg
ICAgICAgICAgYnVmICs9IG5ld2xpbmVfaW5kZW50Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBuZXdsaW5lX2luZGVudCA9IE5vbmUKLSAgICAgICAgICAgIHNlcGFyYXRvciA9IF9pdGVtX3Nl
cGFyYXRvcgotICAgICAgICBmaXJzdCA9IFRydWUKLSAgICAgICAgZm9yIHZhbHVlIGluIGxzdDoK
LSAgICAgICAgICAgIGlmIGZpcnN0OgotICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYnVmID0gc2VwYXJhdG9yCi0gICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICB5
aWVsZCBidWYgKyBfZW5jb2Rlcih2YWx1ZSkKLSAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgTm9u
ZToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyAnbnVsbCcKLSAgICAgICAgICAgIGVsaWYg
dmFsdWUgaXMgVHJ1ZToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyAndHJ1ZScKLSAgICAg
ICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsg
J2ZhbHNlJwotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSk6
Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgc3RyKHZhbHVlKQotICAgICAgICAgICAgZWxp
ZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsg
X2Zsb2F0c3RyKHZhbHVlKQotICAgICAgICAgICAgZWxpZiBfdXNlX2RlY2ltYWwgYW5kIGlzaW5z
dGFuY2UodmFsdWUsIERlY2ltYWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIHN0cih2
YWx1ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmCi0gICAg
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAg
ICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2xpc3QodmFsdWUsIF9jdXJyZW50X2lu
ZGVudF9sZXZlbCkKLSAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3Qp
OgotICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9kaWN0KHZhbHVlLCBf
Y3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGUodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZl
bCkKLSAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgotICAgICAgICAgICAgICAg
ICAgICB5aWVsZCBjaHVuawotICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCi0gICAgICAgICAgICB5aWVs
ZCAnXG4nICsgKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgIHlpZWxk
ICddJwotICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZGVsIG1h
cmtlcnNbbWFya2VyaWRdCi0KLSAgICBkZWYgX2l0ZXJlbmNvZGVfZGljdChkY3QsIF9jdXJyZW50
X2luZGVudF9sZXZlbCk6Ci0gICAgICAgIGlmIG5vdCBkY3Q6Ci0gICAgICAgICAgICB5aWVsZCAn
e30nCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgIG1hcmtlcmlkID0gaWQoZGN0KQotICAgICAgICAgICAgaWYgbWFya2VyaWQg
aW4gbWFya2VyczoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciBy
ZWZlcmVuY2UgZGV0ZWN0ZWQiKQotICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBkY3QK
LSAgICAgICAgeWllbGQgJ3snCi0gICAgICAgIGlmIF9pbmRlbnQgaXMgbm90IE5vbmU6Ci0gICAg
ICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQotICAgICAgICAgICAgbmV3bGluZV9p
bmRlbnQgPSAnXG4nICsgKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAg
ICAgICBpdGVtX3NlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50Ci0g
ICAgICAgICAgICB5aWVsZCBuZXdsaW5lX2luZGVudAotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgbmV3bGluZV9pbmRlbnQgPSBOb25lCi0gICAgICAgICAgICBpdGVtX3NlcGFyYXRvciA9IF9p
dGVtX3NlcGFyYXRvcgotICAgICAgICBmaXJzdCA9IFRydWUKLSAgICAgICAgaWYgX3NvcnRfa2V5
czoKLSAgICAgICAgICAgIGl0ZW1zID0gZGN0Lml0ZW1zKCkKLSAgICAgICAgICAgIGl0ZW1zLnNv
cnQoa2V5PWxhbWJkYSBrdjoga3ZbMF0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdGVt
cyA9IGRjdC5pdGVyaXRlbXMoKQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKLSAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAg
ICBwYXNzCi0gICAgICAgICAgICAjIEphdmFTY3JpcHQgaXMgd2Vha2x5IHR5cGVkIGZvciB0aGVz
ZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8KLSAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtLiAg
TWFueSBlbmNvZGVycyBzZWVtIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCi0gICAgICAgICAg
ICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gX2Zs
b2F0c3RyKGtleSkKLSAgICAgICAgICAgIGVsaWYga2V5IGlzIFRydWU6Ci0gICAgICAgICAgICAg
ICAga2V5ID0gJ3RydWUnCi0gICAgICAgICAgICBlbGlmIGtleSBpcyBGYWxzZToKLSAgICAgICAg
ICAgICAgICBrZXkgPSAnZmFsc2UnCi0gICAgICAgICAgICBlbGlmIGtleSBpcyBOb25lOgotICAg
ICAgICAgICAgICAgIGtleSA9ICdudWxsJwotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtl
eSwgKGludCwgbG9uZykpOgotICAgICAgICAgICAgICAgIGtleSA9IHN0cihrZXkpCi0gICAgICAg
ICAgICBlbGlmIF9za2lwa2V5czoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleSAiICsgcmVwcihr
ZXkpICsgIiBpcyBub3QgYSBzdHJpbmciKQotICAgICAgICAgICAgaWYgZmlyc3Q6Ci0gICAgICAg
ICAgICAgICAgZmlyc3QgPSBGYWxzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICB5aWVsZCBpdGVtX3NlcGFyYXRvcgotICAgICAgICAgICAgeWllbGQgX2VuY29kZXIoa2V5KQot
ICAgICAgICAgICAgeWllbGQgX2tleV9zZXBhcmF0b3IKLSAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodmFsdWUsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgIHlpZWxkIF9lbmNvZGVyKHZh
bHVlKQotICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHlp
ZWxkICdudWxsJwotICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBUcnVlOgotICAgICAgICAgICAg
ICAgIHlpZWxkICd0cnVlJwotICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKLSAgICAg
ICAgICAgICAgICB5aWVsZCAnZmFsc2UnCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFs
dWUsIChpbnQsIGxvbmcpKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdHIodmFsdWUpCi0gICAg
ICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgICAgICB5
aWVsZCBfZmxvYXRzdHIodmFsdWUpCi0gICAgICAgICAgICBlbGlmIF91c2VfZGVjaW1hbCBhbmQg
aXNpbnN0YW5jZSh2YWx1ZSwgRGVjaW1hbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3RyKHZh
bHVlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZh
bHVlLCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJl
bmNvZGVfbGlzdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAg
IGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6Ci0gICAgICAgICAgICAgICAgICAgIGNodW5r
cyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAg
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29k
ZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVu
ayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCi0gICAgICAgIGlm
IG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50
X2xldmVsIC09IDEKLSAgICAgICAgICAgIHlpZWxkICdcbicgKyAoX2luZGVudCAqIF9jdXJyZW50
X2luZGVudF9sZXZlbCkKLSAgICAgICAgeWllbGQgJ30nCi0gICAgICAgIGlmIG1hcmtlcnMgaXMg
bm90IE5vbmU6Ci0gICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KLQotICAgIGRlZiBf
aXRlcmVuY29kZShvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICBpZiBpc2luc3Rh
bmNlKG8sIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgeWllbGQgX2VuY29kZXIobykKLSAgICAg
ICAgZWxpZiBvIGlzIE5vbmU6Ci0gICAgICAgICAgICB5aWVsZCAnbnVsbCcKLSAgICAgICAgZWxp
ZiBvIGlzIFRydWU6Ci0gICAgICAgICAgICB5aWVsZCAndHJ1ZScKLSAgICAgICAgZWxpZiBvIGlz
IEZhbHNlOgotICAgICAgICAgICAgeWllbGQgJ2ZhbHNlJwotICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UobywgKGludCwgbG9uZykpOgotICAgICAgICAgICAgeWllbGQgc3RyKG8pCi0gICAgICAgIGVs
aWYgaXNpbnN0YW5jZShvLCBmbG9hdCk6Ci0gICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIobykK
LSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAg
Zm9yIGNodW5rIGluIF9pdGVyZW5jb2RlX2xpc3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToK
LSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuawotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobywg
ZGljdCk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfZGljdChvLCBfY3Vy
cmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCi0gICAgICAg
IGVsaWYgX3VzZV9kZWNpbWFsIGFuZCBpc2luc3RhbmNlKG8sIERlY2ltYWwpOgotICAgICAgICAg
ICAgeWllbGQgc3RyKG8pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBtYXJrZXJzIGlz
IG5vdCBOb25lOgotICAgICAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobykKLSAgICAgICAgICAg
ICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQotICAgICAgICAgICAgICAg
IG1hcmtlcnNbbWFya2VyaWRdID0gbwotICAgICAgICAgICAgbyA9IF9kZWZhdWx0KG8pCi0gICAg
ICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVs
KToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuawotICAgICAgICAgICAgaWYgbWFya2VycyBp
cyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KLQotICAg
IHJldHVybiBfaXRlcmVuY29kZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3NpbXBsZWpzb24vanNvbmZpbHRlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL2pzb25maWx0ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAxY2EyMWRmNjY4ZTUwMDIyMDVkNzdiNDAwMDlkOTI3YTViYTU2YzYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vanNvbmZpbHRlci5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDQwICswLDAgQEAKLWltcG9ydCBzaW1wbGVqc29uCi1pbXBvcnQgY2dpCi0KLWNs
YXNzIEpTT05GaWx0ZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYXBwLCBtaW1l
X3R5cGU9J3RleHQveC1qc29uJyk6Ci0gICAgICAgIHNlbGYuYXBwID0gYXBwCi0gICAgICAgIHNl
bGYubWltZV90eXBlID0gbWltZV90eXBlCi0KLSAgICBkZWYgX19jYWxsX18oc2VsZiwgZW52aXJv
biwgc3RhcnRfcmVzcG9uc2UpOgotICAgICAgICAjIFJlYWQgSlNPTiBQT1NUIGlucHV0IHRvIGpz
b25maWx0ZXIuanNvbiBpZiBtYXRjaGluZyBtaW1lIHR5cGUKLSAgICAgICAgcmVzcG9uc2UgPSB7
J3N0YXR1cyc6ICcyMDAgT0snLCAnaGVhZGVycyc6IFtdfQotICAgICAgICBkZWYganNvbl9zdGFy
dF9yZXNwb25zZShzdGF0dXMsIGhlYWRlcnMpOgotICAgICAgICAgICAgcmVzcG9uc2VbJ3N0YXR1
cyddID0gc3RhdHVzCi0gICAgICAgICAgICByZXNwb25zZVsnaGVhZGVycyddLmV4dGVuZChoZWFk
ZXJzKQotICAgICAgICBlbnZpcm9uWydqc29uZmlsdGVyLm1pbWVfdHlwZSddID0gc2VsZi5taW1l
X3R5cGUKLSAgICAgICAgaWYgZW52aXJvbi5nZXQoJ1JFUVVFU1RfTUVUSE9EJywgJycpID09ICdQ
T1NUJzoKLSAgICAgICAgICAgIGlmIGVudmlyb24uZ2V0KCdDT05URU5UX1RZUEUnLCAnJykgPT0g
c2VsZi5taW1lX3R5cGU6Ci0gICAgICAgICAgICAgICAgYXJncyA9IFtfIGZvciBfIGluIFtlbnZp
cm9uLmdldCgnQ09OVEVOVF9MRU5HVEgnKV0gaWYgX10KLSAgICAgICAgICAgICAgICBkYXRhID0g
ZW52aXJvblsnd3NnaS5pbnB1dCddLnJlYWQoKm1hcChpbnQsIGFyZ3MpKQotICAgICAgICAgICAg
ICAgIGVudmlyb25bJ2pzb25maWx0ZXIuanNvbiddID0gc2ltcGxlanNvbi5sb2FkcyhkYXRhKQot
ICAgICAgICByZXMgPSBzaW1wbGVqc29uLmR1bXBzKHNlbGYuYXBwKGVudmlyb24sIGpzb25fc3Rh
cnRfcmVzcG9uc2UpKQotICAgICAgICBqc29ucCA9IGNnaS5wYXJzZV9xcyhlbnZpcm9uLmdldCgn
UVVFUllfU1RSSU5HJywgJycpKS5nZXQoJ2pzb25wJykKLSAgICAgICAgaWYganNvbnA6Ci0gICAg
ICAgICAgICBjb250ZW50X3R5cGUgPSAndGV4dC9qYXZhc2NyaXB0JwotICAgICAgICAgICAgcmVz
ID0gJycuam9pbihqc29ucCArIFsnKCcsIHJlcywgJyknXSkKLSAgICAgICAgZWxpZiAnT3BlcmEn
IGluIGVudmlyb24uZ2V0KCdIVFRQX1VTRVJfQUdFTlQnLCAnJyk6Ci0gICAgICAgICAgICAjIE9w
ZXJhIGhhcyBidW5rIFhNTEh0dHBSZXF1ZXN0IHN1cHBvcnQgZm9yIG1vc3QgbWltZSB0eXBlcwot
ICAgICAgICAgICAgY29udGVudF90eXBlID0gJ3RleHQvcGxhaW4nCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBjb250ZW50X3R5cGUgPSBzZWxmLm1pbWVfdHlwZQotICAgICAgICBoZWFkZXJz
ID0gWwotICAgICAgICAgICAgKCdDb250ZW50LXR5cGUnLCBjb250ZW50X3R5cGUpLAotICAgICAg
ICAgICAgKCdDb250ZW50LWxlbmd0aCcsIGxlbihyZXMpKSwKLSAgICAgICAgXQotICAgICAgICBo
ZWFkZXJzLmV4dGVuZChyZXNwb25zZVsnaGVhZGVycyddKQotICAgICAgICBzdGFydF9yZXNwb25z
ZShyZXNwb25zZVsnc3RhdHVzJ10sIGhlYWRlcnMpCi0gICAgICAgIHJldHVybiBbcmVzXQotCi1k
ZWYgZmFjdG9yeShhcHAsIGdsb2JhbF9jb25mLCAqKmt3KToKLSAgICByZXR1cm4gSlNPTkZpbHRl
cihhcHAsICoqa3cpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvc2ltcGxlanNvbi9vcmRlcmVkX2RpY3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvc2ltcGxlanNvbi9vcmRlcmVkX2RpY3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDg3YWQ4ODgyNDgyY2EwMjk3MGRmNzExZjRhYTEwMzliZWNlNDVjYjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vb3JkZXJlZF9kaWN0LnB5CisrKyAvZGV2L251
bGwKQEAgLTEsMTE5ICswLDAgQEAKLSIiIkRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGNvbGxlY3Rp
b25zLk9yZGVyZWREaWN0IGJ5IFJheW1vbmQgSGV0dGluZ2VyCi0KLWh0dHA6Ly9jb2RlLmFjdGl2
ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjY5My8KLQotIiIiCi1mcm9tIFVzZXJEaWN0IGltcG9ydCBE
aWN0TWl4aW4KLQotIyBNb2RpZmllZCBmcm9tIG9yaWdpbmFsIHRvIHN1cHBvcnQgUHl0aG9uIDIu
NCwgc2VlCi0jIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9zaW1wbGVqc29uL2lzc3Vlcy9kZXRh
aWw/aWQ9NTMKLXRyeToKLSAgICBhbGwKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgZGVmIGFsbChz
ZXEpOgotICAgICAgICBmb3IgZWxlbSBpbiBzZXE6Ci0gICAgICAgICAgICBpZiBub3QgZWxlbToK
LSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotY2xh
c3MgT3JkZXJlZERpY3QoZGljdCwgRGljdE1peGluKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqYXJncywgKiprd2RzKToKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKLSAgICAgICAgICAg
IHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgYXQgbW9zdCAxIGFyZ3VtZW50cywgZ290ICVkJyAl
IGxlbihhcmdzKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fX2VuZAotICAgICAg
ICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyKCkKLSAgICAg
ICAgc2VsZi51cGRhdGUoKmFyZ3MsICoqa3dkcykKLQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAg
ICAgICAgc2VsZi5fX2VuZCA9IGVuZCA9IFtdCi0gICAgICAgIGVuZCArPSBbTm9uZSwgZW5kLCBl
bmRdICAgICAgICAgIyBzZW50aW5lbCBub2RlIGZvciBkb3VibHkgbGlua2VkIGxpc3QKLSAgICAg
ICAgc2VsZi5fX21hcCA9IHt9ICAgICAgICAgICAgICAgICAjIGtleSAtLT4gW2tleSwgcHJldiwg
bmV4dF0KLSAgICAgICAgZGljdC5jbGVhcihzZWxmKQotCi0gICAgZGVmIF9fc2V0aXRlbV9fKHNl
bGYsIGtleSwgdmFsdWUpOgotICAgICAgICBpZiBrZXkgbm90IGluIHNlbGY6Ci0gICAgICAgICAg
ICBlbmQgPSBzZWxmLl9fZW5kCi0gICAgICAgICAgICBjdXJyID0gZW5kWzFdCi0gICAgICAgICAg
ICBjdXJyWzJdID0gZW5kWzFdID0gc2VsZi5fX21hcFtrZXldID0gW2tleSwgY3VyciwgZW5kXQot
ICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpCi0KLSAgICBkZWYgX19k
ZWxpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgZGljdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkp
Ci0gICAgICAgIGtleSwgcHJldiwgbmV4dCA9IHNlbGYuX19tYXAucG9wKGtleSkKLSAgICAgICAg
cHJldlsyXSA9IG5leHQKLSAgICAgICAgbmV4dFsxXSA9IHByZXYKLQotICAgIGRlZiBfX2l0ZXJf
XyhzZWxmKToKLSAgICAgICAgZW5kID0gc2VsZi5fX2VuZAotICAgICAgICBjdXJyID0gZW5kWzJd
Ci0gICAgICAgIHdoaWxlIGN1cnIgaXMgbm90IGVuZDoKLSAgICAgICAgICAgIHlpZWxkIGN1cnJb
MF0KLSAgICAgICAgICAgIGN1cnIgPSBjdXJyWzJdCi0KLSAgICBkZWYgX19yZXZlcnNlZF9fKHNl
bGYpOgotICAgICAgICBlbmQgPSBzZWxmLl9fZW5kCi0gICAgICAgIGN1cnIgPSBlbmRbMV0KLSAg
ICAgICAgd2hpbGUgY3VyciBpcyBub3QgZW5kOgotICAgICAgICAgICAgeWllbGQgY3VyclswXQot
ICAgICAgICAgICAgY3VyciA9IGN1cnJbMV0KLQotICAgIGRlZiBwb3BpdGVtKHNlbGYsIGxhc3Q9
VHJ1ZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Io
J2RpY3Rpb25hcnkgaXMgZW1wdHknKQotICAgICAgICAjIE1vZGlmaWVkIGZyb20gb3JpZ2luYWwg
dG8gc3VwcG9ydCBQeXRob24gMi40LCBzZWUKLSAgICAgICAgIyBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3Avc2ltcGxlanNvbi9pc3N1ZXMvZGV0YWlsP2lkPTUzCi0gICAgICAgIGlmIGxhc3Q6Ci0g
ICAgICAgICAgICBrZXkgPSByZXZlcnNlZChzZWxmKS5uZXh0KCkKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIGtleSA9IGl0ZXIoc2VsZikubmV4dCgpCi0gICAgICAgIHZhbHVlID0gc2VsZi5w
b3Aoa2V5KQotICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQotCi0gICAgZGVmIF9fcmVkdWNlX18o
c2VsZik6Ci0gICAgICAgIGl0ZW1zID0gW1trLCBzZWxmW2tdXSBmb3IgayBpbiBzZWxmXQotICAg
ICAgICB0bXAgPSBzZWxmLl9fbWFwLCBzZWxmLl9fZW5kCi0gICAgICAgIGRlbCBzZWxmLl9fbWFw
LCBzZWxmLl9fZW5kCi0gICAgICAgIGluc3RfZGljdCA9IHZhcnMoc2VsZikuY29weSgpCi0gICAg
ICAgIHNlbGYuX19tYXAsIHNlbGYuX19lbmQgPSB0bXAKLSAgICAgICAgaWYgaW5zdF9kaWN0Ogot
ICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXywgKGl0ZW1zLCksIGluc3RfZGljdCkK
LSAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKQotCi0gICAgZGVmIGtleXMo
c2VsZik6Ci0gICAgICAgIHJldHVybiBsaXN0KHNlbGYpCi0KLSAgICBzZXRkZWZhdWx0ID0gRGlj
dE1peGluLnNldGRlZmF1bHQKLSAgICB1cGRhdGUgPSBEaWN0TWl4aW4udXBkYXRlCi0gICAgcG9w
ID0gRGljdE1peGluLnBvcAotICAgIHZhbHVlcyA9IERpY3RNaXhpbi52YWx1ZXMKLSAgICBpdGVt
cyA9IERpY3RNaXhpbi5pdGVtcwotICAgIGl0ZXJrZXlzID0gRGljdE1peGluLml0ZXJrZXlzCi0g
ICAgaXRlcnZhbHVlcyA9IERpY3RNaXhpbi5pdGVydmFsdWVzCi0gICAgaXRlcml0ZW1zID0gRGlj
dE1peGluLml0ZXJpdGVtcwotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBpZiBu
b3Qgc2VsZjoKLSAgICAgICAgICAgIHJldHVybiAnJXMoKScgJSAoc2VsZi5fX2NsYXNzX18uX19u
YW1lX18sKQotICAgICAgICByZXR1cm4gJyVzKCVyKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1l
X18sIHNlbGYuaXRlbXMoKSkKLQotICAgIGRlZiBjb3B5KHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5fX2NsYXNzX18oc2VsZikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmcm9ta2V5
cyhjbHMsIGl0ZXJhYmxlLCB2YWx1ZT1Ob25lKToKLSAgICAgICAgZCA9IGNscygpCi0gICAgICAg
IGZvciBrZXkgaW4gaXRlcmFibGU6Ci0gICAgICAgICAgICBkW2tleV0gPSB2YWx1ZQotICAgICAg
ICByZXR1cm4gZAotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIGlz
aW5zdGFuY2Uob3RoZXIsIE9yZGVyZWREaWN0KToKLSAgICAgICAgICAgIHJldHVybiBsZW4oc2Vs
Zik9PWxlbihvdGhlcikgYW5kIFwKLSAgICAgICAgICAgICAgICAgICBhbGwocD09cSBmb3IgcCwg
cSBpbiAgemlwKHNlbGYuaXRlbXMoKSwgb3RoZXIuaXRlbXMoKSkpCi0gICAgICAgIHJldHVybiBk
aWN0Ll9fZXFfXyhzZWxmLCBvdGhlcikKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgot
ICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL3NjYW5uZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9zY2FubmVyLnB5CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1NDU5M2EzNzFlMmIyODFkOGExNmNiOWE3ODU2ODU3YTI5YWJh
Y2Y1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL3NjYW5uZXIucHkKKysrIC9k
ZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0iIiJKU09OIHRva2VuIHNjYW5uZXIKLSIiIgotaW1w
b3J0IHJlCi1kZWYgX2ltcG9ydF9jX21ha2Vfc2Nhbm5lcigpOgotICAgIHRyeToKLSAgICAgICAg
ZnJvbSBzaW1wbGVqc29uLl9zcGVlZHVwcyBpbXBvcnQgbWFrZV9zY2FubmVyCi0gICAgICAgIHJl
dHVybiBtYWtlX3NjYW5uZXIKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVy
biBOb25lCi1jX21ha2Vfc2Nhbm5lciA9IF9pbXBvcnRfY19tYWtlX3NjYW5uZXIoKQotCi1fX2Fs
bF9fID0gWydtYWtlX3NjYW5uZXInXQotCi1OVU1CRVJfUkUgPSByZS5jb21waWxlKAotICAgIHIn
KC0/KD86MHxbMS05XVxkKikpKFwuXGQrKT8oW2VFXVstK10/XGQrKT8nLAotICAgIChyZS5WRVJC
T1NFIHwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKSkKLQotZGVmIHB5X21ha2Vfc2Nhbm5lcihj
b250ZXh0KToKLSAgICBwYXJzZV9vYmplY3QgPSBjb250ZXh0LnBhcnNlX29iamVjdAotICAgIHBh
cnNlX2FycmF5ID0gY29udGV4dC5wYXJzZV9hcnJheQotICAgIHBhcnNlX3N0cmluZyA9IGNvbnRl
eHQucGFyc2Vfc3RyaW5nCi0gICAgbWF0Y2hfbnVtYmVyID0gTlVNQkVSX1JFLm1hdGNoCi0gICAg
ZW5jb2RpbmcgPSBjb250ZXh0LmVuY29kaW5nCi0gICAgc3RyaWN0ID0gY29udGV4dC5zdHJpY3QK
LSAgICBwYXJzZV9mbG9hdCA9IGNvbnRleHQucGFyc2VfZmxvYXQKLSAgICBwYXJzZV9pbnQgPSBj
b250ZXh0LnBhcnNlX2ludAotICAgIHBhcnNlX2NvbnN0YW50ID0gY29udGV4dC5wYXJzZV9jb25z
dGFudAotICAgIG9iamVjdF9ob29rID0gY29udGV4dC5vYmplY3RfaG9vawotICAgIG9iamVjdF9w
YWlyc19ob29rID0gY29udGV4dC5vYmplY3RfcGFpcnNfaG9vawotICAgIG1lbW8gPSBjb250ZXh0
Lm1lbW8KLQotICAgIGRlZiBfc2Nhbl9vbmNlKHN0cmluZywgaWR4KToKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgbmV4dGNoYXIgPSBzdHJpbmdbaWR4XQotICAgICAgICBleGNlcHQgSW5kZXhF
cnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQotICAgICAgICBpZiBuZXh0
Y2hhciA9PSAnIic6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2Vfc3RyaW5nKHN0cmluZywgaWR4
ICsgMSwgZW5jb2RpbmcsIHN0cmljdCkKLSAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAneyc6Ci0g
ICAgICAgICAgICByZXR1cm4gcGFyc2Vfb2JqZWN0KChzdHJpbmcsIGlkeCArIDEpLCBlbmNvZGlu
Zywgc3RyaWN0LAotICAgICAgICAgICAgICAgIF9zY2FuX29uY2UsIG9iamVjdF9ob29rLCBvYmpl
Y3RfcGFpcnNfaG9vaywgbWVtbykKLSAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnWyc6Ci0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VfYXJyYXkoKHN0cmluZywgaWR4ICsgMSksIF9zY2FuX29uY2Up
Ci0gICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ24nIGFuZCBzdHJpbmdbaWR4OmlkeCArIDRdID09
ICdudWxsJzoKLSAgICAgICAgICAgIHJldHVybiBOb25lLCBpZHggKyA0Ci0gICAgICAgIGVsaWYg
bmV4dGNoYXIgPT0gJ3QnIGFuZCBzdHJpbmdbaWR4OmlkeCArIDRdID09ICd0cnVlJzoKLSAgICAg
ICAgICAgIHJldHVybiBUcnVlLCBpZHggKyA0Ci0gICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ2Yn
IGFuZCBzdHJpbmdbaWR4OmlkeCArIDVdID09ICdmYWxzZSc6Ci0gICAgICAgICAgICByZXR1cm4g
RmFsc2UsIGlkeCArIDUKLQotICAgICAgICBtID0gbWF0Y2hfbnVtYmVyKHN0cmluZywgaWR4KQot
ICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaW50ZWdlciwgZnJhYywgZXhw
ID0gbS5ncm91cHMoKQotICAgICAgICAgICAgaWYgZnJhYyBvciBleHA6Ci0gICAgICAgICAgICAg
ICAgcmVzID0gcGFyc2VfZmxvYXQoaW50ZWdlciArIChmcmFjIG9yICcnKSArIChleHAgb3IgJycp
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXMgPSBwYXJzZV9pbnQoaW50
ZWdlcikKLSAgICAgICAgICAgIHJldHVybiByZXMsIG0uZW5kKCkKLSAgICAgICAgZWxpZiBuZXh0
Y2hhciA9PSAnTicgYW5kIHN0cmluZ1tpZHg6aWR4ICsgM10gPT0gJ05hTic6Ci0gICAgICAgICAg
ICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJ05hTicpLCBpZHggKyAzCi0gICAgICAgIGVsaWYgbmV4
dGNoYXIgPT0gJ0knIGFuZCBzdHJpbmdbaWR4OmlkeCArIDhdID09ICdJbmZpbml0eSc6Ci0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJ0luZmluaXR5JyksIGlkeCArIDgKLSAgICAg
ICAgZWxpZiBuZXh0Y2hhciA9PSAnLScgYW5kIHN0cmluZ1tpZHg6aWR4ICsgOV0gPT0gJy1JbmZp
bml0eSc6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJy1JbmZpbml0eScpLCBp
ZHggKyA5Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0K
LSAgICBkZWYgc2Nhbl9vbmNlKHN0cmluZywgaWR4KToKLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgcmV0dXJuIF9zY2FuX29uY2Uoc3RyaW5nLCBpZHgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAg
ICAgICAgICBtZW1vLmNsZWFyKCkKLQotICAgIHJldHVybiBzY2FuX29uY2UKLQotbWFrZV9zY2Fu
bmVyID0gY19tYWtlX3NjYW5uZXIgb3IgcHlfbWFrZV9zY2FubmVyCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi90b29sLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vdG9vbC5weQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzMzNzBkYjU1ZWQzN2I3ZjI5MGZjZDY5ZmI4YjhlZTRkZjQ2
MDg3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi90b29sLnB5CisrKyAvZGV2
L251bGwKQEAgLTEsMzkgKzAsMCBAQAotciIiIkNvbW1hbmQtbGluZSB0b29sIHRvIHZhbGlkYXRl
IGFuZCBwcmV0dHktcHJpbnQgSlNPTgotCi1Vc2FnZTo6Ci0KLSAgICAkIGVjaG8gJ3sianNvbiI6
Im9iaiJ9JyB8IHB5dGhvbiAtbSBzaW1wbGVqc29uLnRvb2wKLSAgICB7Ci0gICAgICAgICJqc29u
IjogIm9iaiIKLSAgICB9Ci0gICAgJCBlY2hvICd7IDEuMjozLjR9JyB8IHB5dGhvbiAtbSBzaW1w
bGVqc29uLnRvb2wKLSAgICBFeHBlY3RpbmcgcHJvcGVydHkgbmFtZTogbGluZSAxIGNvbHVtbiAy
IChjaGFyIDIpCi0KLSIiIgotaW1wb3J0IHN5cwotaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgot
Ci1kZWYgbWFpbigpOgotICAgIGlmIGxlbihzeXMuYXJndikgPT0gMToKLSAgICAgICAgaW5maWxl
ID0gc3lzLnN0ZGluCi0gICAgICAgIG91dGZpbGUgPSBzeXMuc3Rkb3V0Ci0gICAgZWxpZiBsZW4o
c3lzLmFyZ3YpID09IDI6Ci0gICAgICAgIGluZmlsZSA9IG9wZW4oc3lzLmFyZ3ZbMV0sICdyYicp
Ci0gICAgICAgIG91dGZpbGUgPSBzeXMuc3Rkb3V0Ci0gICAgZWxpZiBsZW4oc3lzLmFyZ3YpID09
IDM6Ci0gICAgICAgIGluZmlsZSA9IG9wZW4oc3lzLmFyZ3ZbMV0sICdyYicpCi0gICAgICAgIG91
dGZpbGUgPSBvcGVuKHN5cy5hcmd2WzJdLCAnd2InKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNl
IFN5c3RlbUV4aXQoc3lzLmFyZ3ZbMF0gKyAiIFtpbmZpbGUgW291dGZpbGVdXSIpCi0gICAgdHJ5
OgotICAgICAgICBvYmogPSBqc29uLmxvYWQoaW5maWxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0X3BhaXJzX2hvb2s9anNvbi5PcmRlcmVkRGljdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZV9kZWNpbWFsPVRydWUpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAg
ICAgIHJhaXNlIFN5c3RlbUV4aXQoZSkKLSAgICBqc29uLmR1bXAob2JqLCBvdXRmaWxlLCBzb3J0
X2tleXM9VHJ1ZSwgaW5kZW50PScgICAgJywgdXNlX2RlY2ltYWw9VHJ1ZSkKLSAgICBvdXRmaWxl
LndyaXRlKCdcbicpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9fYmVfbW92ZWQvcmViYXNlbGlu
ZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RvX2Jl
X21vdmVkL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDc5N2U1OGY2
YjBhNmVkNzZkMTczODViMGIxMTYzMjAyYmQ3ZTE4YTcuLjIwZjFjNjdkZmM2NTZhNWI4MjY0ODcy
ZTQ0OWU0YWI1Zjk1YTNlNmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9f
YmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90
ZXN0cy5weQpAQCAtNDEsNyArNDEsNiBAQCBUaGUgc2NyaXB0IGRvZXMgdGhlIGZvbGxvd2luZyBm
b3IgZWFjaCBwbGF0Zm9ybSBzcGVjaWZpZWQ6CiBBdCB0aGUgZW5kLCB0aGUgc2NyaXB0IGdlbmVy
YXRlcyBhIGh0bWwgdGhhdCBjb21wYXJlcyBvbGQgYW5kIG5ldyBiYXNlbGluZXMuCiAiIiIKIAot
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogCiBpbXBvcnQgY29weQogaW1w
b3J0IGxvZ2dpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9fYmVfbW92
ZWQvdXBkYXRlX3dlYmdsX2NvbmZvcm1hbmNlX3Rlc3RzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b19iZV9tb3ZlZC91cGRhdGVfd2ViZ2xfY29uZm9ybWFuY2VfdGVzdHMucHkKaW5kZXgg
MDFmZmZkZWU5YjZhMmZkMGM0MzNlZDU0OThiY2EwZTdkMmFmN2NhNC4uNjcwZmY5MjUyY2VhY2Qx
MzQzOGVmMTA3Zjc5Nzk1MjAyMzQ0ZWVmYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b19iZV9tb3ZlZC91cGRhdGVfd2ViZ2xfY29uZm9ybWFuY2VfdGVzdHMucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC91cGRhdGVfd2ViZ2xfY29uZm9ybWFu
Y2VfdGVzdHMucHkKQEAgLTIzLDcgKzIzLDYgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAogaW1wb3J0IGds
b2IKIGltcG9ydCBsb2dnaW5nCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvcXVldWVzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1h
bmRzL3F1ZXVlcy5weQppbmRleCBjZTAyZDkyY2RkOWE2YmE5NmQ5OGEwYTY3OTAyYmY5NTA2YTg0
ZjhiLi4xOTlhYTQxZmE5NjIwMjRkZDUxMjllODg5NGZmMTU1ODcwM2FhZGIzIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHkKQEAgLTI3LDcgKzI3
LDYgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWZyb20gX19mdXR1cmVfXyBp
bXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAogaW1wb3J0IGNvZGVjcwogaW1wb3J0IHRpbWUKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRl
c3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0
ZXN0LnB5CmluZGV4IGFlM2JmZmVlN2Y2MDc3NjAxNzEzNjIzOTlmNjc1NDE2NzBlMzVjMzAuLjYz
NDJlODFmOTE4Yjg5YzVjMTQ5YTM2YTlmMTMxZWY3NTJhNGQ1ZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5weQpA
QCAtMTE4LDEyICsxMTgsNiBAQCBjbGFzcyBBYnN0cmFjdFF1ZXVlVGVzdChDb21tYW5kc1Rlc3Qp
OgogCiAgICAgZGVmIHRlc3RfbG9nX2Zyb21fc2NyaXB0X2Vycm9yX2Zvcl91cGxvYWQoc2VsZik6
CiAgICAgICAgIHNlbGYuX2Fzc2VydF9sb2dfbWVzc2FnZShTY3JpcHRFcnJvcigidGVzdCIpLCAi
dGVzdCIpCi0gICAgICAgICMgSW4gcHl0aG9uIDIuNSB1bmljb2RlKEV4Y2VwdGlvbikgaXMgYnVz
dGVkLiBTZWU6Ci0gICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI1MTcKLSAg
ICAgICAgIyBXaXRoIG5vIGdvb2Qgd29ya2Fyb3VuZCwgd2UganVzdCBpZ25vcmUgdGhlc2UgdGVz
dHMuCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKEV4Y2VwdGlvbiwgIl9fdW5pY29kZV9fIik6Ci0g
ICAgICAgICAgICByZXR1cm4KLQogICAgICAgICB1bmljb2RlX3RvciA9IHUiV2ViS2l0IFx1MjY2
MSBUb3IgQXJuZSBWZXN0Ylx1MDBGOCEiCiAgICAgICAgIHV0ZjhfdG9yID0gdW5pY29kZV90b3Iu
ZW5jb2RlKCJ1dGYtOCIpCiAgICAgICAgIHNlbGYuX2Fzc2VydF9sb2dfbWVzc2FnZShTY3JpcHRF
cnJvcih1bmljb2RlX3RvciksIHV0ZjhfdG9yKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5
CmluZGV4IDM0NDg2YTM3OGY0ODhkMGJlZDE1MGYxNDliMzBiMzQ4NmE2NGMzYWQuLjc3NzljOGJi
Y2UzYTNhYWY2MDRjZDRkMzdhNjUxY2Y2YTdhMThmMzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlcl91bml0dGVzdC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXJfdW5p
dHRlc3QucHkKQEAgLTI2LDExICsyNiw3IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogCi10cnk6Ci0gICAgaW1wb3J0IGpzb24KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIHB5
dGhvbiAyLjUgY29tcGF0aWJpbGl0eQotICAgIGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNp
bXBsZWpzb24gYXMganNvbgoraW1wb3J0IGpzb24KIAogaW1wb3J0IHVuaXR0ZXN0CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL3JlYmFzZWxpbmVzZXJ2
ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9yZWJh
c2VsaW5lc2VydmVyX3VuaXR0ZXN0LnB5CmluZGV4IDgwMDNkMDU5ZThiNDJjZGRiNDMwNzMwMTcy
MWI5NWFmOTg4ZWY3YWIuLmVkOWY3ZGI2YWFmMDBhYWFhMTYwZDQwYmM4NjZjZjk3OTdhYjQ2Y2Yg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL3JlYmFzZWxp
bmVzZXJ2ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3Nl
cnZlcnMvcmViYXNlbGluZXNlcnZlcl91bml0dGVzdC5weQpAQCAtMjgsMTEgKzI4LDcgQEAKIAog
aW1wb3J0IHVuaXR0ZXN0CiAKLXRyeToKLSAgICBpbXBvcnQganNvbgotZXhjZXB0IEltcG9ydEVy
cm9yOgotICAgICMgcHl0aG9uIDIuNSBjb21wYXRpYmlsaXR5Ci0gICAgaW1wb3J0IHdlYmtpdHB5
LnRoaXJkcGFydHkuc2ltcGxlanNvbiBhcyBqc29uCitpbXBvcnQganNvbgogCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5uZXQgaW1wb3J0IHJlc3VsdHNqc29ucGFyc2VyX3VuaXR0ZXN0CiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW1fbW9jawpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvcmVmbGVjdGlvbmhhbmRsZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9yZWZsZWN0aW9uaGFuZGxlci5w
eQppbmRleCBkYjExOGFmYTZjMjZhMGI5OTgwODQ2ODg4NDdjZmUyZjdjNGQ2YzMwLi41MzA3OTQw
NTllNTFkNjBkMjFlN2EyY2IwYTdkYTlkYzFhY2UyODkxIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9yZWZsZWN0aW9uaGFuZGxlci5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9yZWZsZWN0aW9uaGFuZGxlci5weQpAQCAt
MjYsMTMgKzI2LDggQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWZyb20gX19m
dXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAotdHJ5OgotICAgIGltcG9ydCBqc29uCi1l
eGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBweXRob24gMi41IGNvbXBhdGliaWxpdHkKLSAgICBp
bXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIGpzb24KK2ltcG9ydCBqc29u
CiAKIGltcG9ydCBCYXNlSFRUUFNlcnZlcgogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvc3RlcHMvcHJlcGFyZWNoYW5nZWxvZ2ZvcnJldmVydF91bml0dGVzdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9wcmVwYXJlY2hhbmdlbG9nZm9ycmV2
ZXJ0X3VuaXR0ZXN0LnB5CmluZGV4IGFhOWQ1ZTk4MTc2OGY5MTUwYzdjZGU0OGM2MmVhOWJmZDhk
Y2VmNzguLmU4NDc1YzlhOTkyZTY0OTA1NjA2Nzc2NmZiZDM3MGYzN2QwOWU2YTUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9wcmVwYXJlY2hhbmdlbG9nZm9y
cmV2ZXJ0X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVw
cy9wcmVwYXJlY2hhbmdlbG9nZm9ycmV2ZXJ0X3VuaXR0ZXN0LnB5CkBAIC0yNiw3ICsyNiw2IEBA
CiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0
IHdpdGhfc3RhdGVtZW50CiAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBvcwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126188</attachid>
            <date>2012-02-08 16:49:19 -0800</date>
            <delta_ts>2012-02-08 16:50:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71593-20120208164918.patch</filename>
            <type>text/plain</type>
            <size>1584</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwNzE1NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDEyLTAyLTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmVtb3ZlIFB5dGhvbiAyLjUgc3VwcG9ydCBmcm9tIFdlYktpdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1OTMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBsYXN0IHZl
c3RpZ2Ugb2Ygb3VyIFB5dGhvbiAyLjUgc3VwcG9ydC4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHk6CisgICAgICAgIChBYnN0cmFj
dFF1ZXVlVGVzdC50ZXN0X2xvZ19mcm9tX3NjcmlwdF9lcnJvcl9mb3JfdXBsb2FkKToKKwogMjAx
Mi0wMi0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIHZlcnNp
b25fY2hlY2sucHkgc2hvdWxkIGluZm9ybSB1c2VycyB0aGF0IHdlIGRvbid0IHN1cHBvcnQgUHl0
aG9uIDIuNSBhbnltb3JlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvcXVldWVzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEwNzE1NCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCwxMiArMTE4LDYgQEAgY2xhc3MgQWJzdHJhY3RRdWV1ZVRl
c3QoQ29tbWFuZHNUZXN0KToKIAogICAgIGRlZiB0ZXN0X2xvZ19mcm9tX3NjcmlwdF9lcnJvcl9m
b3JfdXBsb2FkKHNlbGYpOgogICAgICAgICBzZWxmLl9hc3NlcnRfbG9nX21lc3NhZ2UoU2NyaXB0
RXJyb3IoInRlc3QiKSwgInRlc3QiKQotICAgICAgICAjIEluIHB5dGhvbiAyLjUgdW5pY29kZShF
eGNlcHRpb24pIGlzIGJ1c3RlZC4gU2VlOgotICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5v
cmcvaXNzdWUyNTE3Ci0gICAgICAgICMgV2l0aCBubyBnb29kIHdvcmthcm91bmQsIHdlIGp1c3Qg
aWdub3JlIHRoZXNlIHRlc3RzLgotICAgICAgICBpZiBub3QgaGFzYXR0cihFeGNlcHRpb24sICJf
X3VuaWNvZGVfXyIpOgotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgdW5pY29kZV90b3Ig
PSB1IldlYktpdCBcdTI2NjEgVG9yIEFybmUgVmVzdGJcdTAwRjghIgogICAgICAgICB1dGY4X3Rv
ciA9IHVuaWNvZGVfdG9yLmVuY29kZSgidXRmLTgiKQogICAgICAgICBzZWxmLl9hc3NlcnRfbG9n
X21lc3NhZ2UoU2NyaXB0RXJyb3IodW5pY29kZV90b3IpLCB1dGY4X3RvcikK
</data>
<flag name="review"
          id="127933"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="127935"
          type_id="3"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>