<?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>133122</bug_id>
          
          <creation_ts>2014-05-20 09:04:20 -0700</creation_ts>
          <short_desc>[META] [GTK] Implement WebCrypto SubtleCrypto interface</short_desc>
          <delta_ts>2025-06-20 07:43:05 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>173550</dependson>
    
    <dependson>177350</dependson>
    
    <dependson>133316</dependson>
    
    <dependson>133317</dependson>
    
    <dependson>133319</dependson>
    
    <dependson>133320</dependson>
    
    <dependson>133344</dependson>
    
    <dependson>159189</dependson>
    
    <dependson>159260</dependson>
    
    <dependson>169272</dependson>
    
    <dependson>169528</dependson>
    
    <dependson>170231</dependson>
    
    <dependson>170232</dependson>
    
    <dependson>170238</dependson>
    
    <dependson>170269</dependson>
    
    <dependson>170270</dependson>
    
    <dependson>170271</dependson>
    
    <dependson>170273</dependson>
    
    <dependson>170274</dependson>
    
    <dependson>170345</dependson>
    
    <dependson>170350</dependson>
    
    <dependson>170546</dependson>
    
    <dependson>170550</dependson>
    
    <dependson>171070</dependson>
    
    <dependson>171074</dependson>
    
    <dependson>171103</dependson>
    
    <dependson>171213</dependson>
    
    <dependson>171219</dependson>
    
    <dependson>171220</dependson>
    
    <dependson>171222</dependson>
    
    <dependson>171420</dependson>
    
    <dependson>171535</dependson>
    
    <dependson>172594</dependson>
    
    <dependson>172856</dependson>
    
    <dependson>172857</dependson>
    
    <dependson>172870</dependson>
    
    <dependson>172894</dependson>
    
    <dependson>172927</dependson>
    
    <dependson>173253</dependson>
    
    <dependson>173543</dependson>
    
    <dependson>173547</dependson>
    
    <dependson>173589</dependson>
    
    <dependson>173646</dependson>
    
    <dependson>173647</dependson>
    
    <dependson>173648</dependson>
    
    <dependson>173694</dependson>
    
    <dependson>173695</dependson>
    
    <dependson>173696</dependson>
    
    <dependson>173697</dependson>
    
    <dependson>173883</dependson>
    
    <dependson>174091</dependson>
    
    <dependson>174253</dependson>
    
    <dependson>175199</dependson>
    
    <dependson>175582</dependson>
    
    <dependson>182972</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eduardo Lima Mitev">elima</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>aidanholm+webkit</cc>
    
    <cc>aperez</cc>
    
    <cc>bfulgham</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>bunhere</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpino</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1010504</commentid>
    <comment_count>0</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-20 09:04:20 -0700</bug_when>
    <thetext>http://www.w3.org/TR/2014/WD-WebCryptoAPI-20140325/

Cross platform code already exists and the Mac port has platform-specific implementation for several algorithms (bug 122679).

This bug is to track implementation for the GTK port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010517</commentid>
    <comment_count>1</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-20 09:41:00 -0700</bug_when>
    <thetext>I have a WIP implementation at:

https://github.com/Igalia/webkit/tree/subtle-crypto

which I plan to submit for review in the coming days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011954</commentid>
    <comment_count>2</comment_count>
      <attachid>232126</attachid>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 07:35:09 -0700</bug_when>
    <thetext>Created attachment 232126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011957</commentid>
    <comment_count>3</comment_count>
      <attachid>232128</attachid>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 07:37:27 -0700</bug_when>
    <thetext>Created attachment 232128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011958</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-27 07:37:34 -0700</bug_when>
    <thetext>Attachment 232126 did not pass style-queue:


ERROR: Source/WebCore/CMakeLists.txt:30:  There should be exactly one empty line instead of 0 between &quot;inspector&quot; and &quot;loader/appcache&quot;.  [list/emptyline] [5]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011964</commentid>
    <comment_count>5</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 07:52:14 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Attachment 232126 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebCore/CMakeLists.txt:30:  There should be exactly one empty line instead of 0 between &quot;inspector&quot; and &quot;loader/appcache&quot;.  [list/emptyline] [5]
&gt; Total errors found: 1 in 17 files
&gt; 

I think this is a false positive. The patch has nothing to do with the error mentioned. The occurrence of &quot;inspector&quot; and &quot;loader/appcache&quot; happens at lines 545 and 547 (not 30), and there is an empty line between them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011979</commentid>
    <comment_count>6</comment_count>
      <attachid>232132</attachid>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 08:57:43 -0700</bug_when>
    <thetext>Created attachment 232132
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011980</commentid>
    <comment_count>7</comment_count>
      <attachid>232128</attachid>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 08:59:05 -0700</bug_when>
    <thetext>Comment on attachment 232128
Patch

this is now obsolete, lacks ChangeLog updates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011995</commentid>
    <comment_count>8</comment_count>
      <attachid>232135</attachid>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 09:43:18 -0700</bug_when>
    <thetext>Created attachment 232135
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012005</commentid>
    <comment_count>9</comment_count>
      <attachid>232138</attachid>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 10:03:32 -0700</bug_when>
    <thetext>Created attachment 232138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012023</commentid>
    <comment_count>10</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 11:38:10 -0700</bug_when>
    <thetext>To make these changes easier to track and review (and for compliance and sanity), I will make this bug a metabug, cancel all uploaded patches, and create one new bug for each patch. This is a similar approach as in bug 122679. 

I&apos;m really sorry for the noise and the mess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012026</commentid>
    <comment_count>11</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 12:00:25 -0700</bug_when>
    <thetext>Adding dependency on bug 133316.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012030</commentid>
    <comment_count>12</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 12:09:47 -0700</bug_when>
    <thetext>Adding dependency on bug 133317.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012036</commentid>
    <comment_count>13</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 12:19:36 -0700</bug_when>
    <thetext>Adding dependency on bug 133319.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012044</commentid>
    <comment_count>14</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-27 12:45:43 -0700</bug_when>
    <thetext>Adding dependency on bug 133320.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012183</commentid>
    <comment_count>15</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-28 03:58:32 -0700</bug_when>
    <thetext>Adding dependency on bug 133344.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012411</commentid>
    <comment_count>16</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2014-05-29 06:40:05 -0700</bug_when>
    <thetext>Adding Carlos García Campos to CC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241180</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-10-17 14:52:54 -0700</bug_when>
    <thetext>Note that r206883 &quot;Add a dummy SubtleCrypto interface&quot; broke the tests under crypto/workers/subtle:

crypto/workers/subtle/aes-postMessage-worker.html
crypto/workers/subtle/hmac-postMessage-worker.html
crypto/workers/subtle/hrsa-postMessage-worker.html
crypto/workers/subtle/multiple-postMessage-worker.html
crypto/workers/subtle/rsa-postMessage-worker.html

I have skipped this entire test directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292055</commentid>
    <comment_count>18</comment_count>
      <attachid>305635</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-28 13:30:33 -0700</bug_when>
    <thetext>Created attachment 305635
WIP Patch

This patch implements all the symmetric cipher and public key algorithms used in the Web Crypto standard that are currently supported and tested in WebKit, not including the webkit-prefixed interfaces. The implementations leverage libgcrypt and are in majority complete, but there&apos;s still a lot of opportunities to polish and improve the existing code.

All but two relevant tests currently pass, and the two failures that are marked in the TestExpectations file fail because more sub-tests run successfully than the text baseline expects.

This patch contains the whole changeset, but is of course inconvenient to review. I&apos;ll be splitting it up into smaller patches instead. I&apos;ll try to update this patch regularly to present the set of changes that still has to be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292080</commentid>
    <comment_count>19</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2017-03-28 14:09:33 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #18)
&gt; Created attachment 305635 [details]
&gt; WIP Patch
&gt; 
&gt; This patch implements all the symmetric cipher and public key algorithms
&gt; used in the Web Crypto standard that are currently supported and tested in
&gt; WebKit, not including the webkit-prefixed interfaces. The implementations
&gt; leverage libgcrypt and are in majority complete, but there&apos;s still a lot of
&gt; opportunities to polish and improve the existing code.
&gt; 
&gt; All but two relevant tests currently pass, and the two failures that are
&gt; marked in the TestExpectations file fail because more sub-tests run
&gt; successfully than the text baseline expects.
&gt; 
&gt; This patch contains the whole changeset, but is of course inconvenient to
&gt; review. I&apos;ll be splitting it up into smaller patches instead. I&apos;ll try to
&gt; update this patch regularly to present the set of changes that still has to
&gt; be landed.

Please split it. Thanks! It will be good to split it according to specific algorithms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292264</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-03-28 19:37:44 -0700</bug_when>
    <thetext>WTF, you did all this over the weekend...? Wow! 

Why are the gcrypt headers missing license notices?

Can you delete FindGnutls.cmake and references to it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292272</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-03-28 20:14:33 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #20)
&gt; WTF, you did all this over the weekend...? Wow! 
&gt; 

I&apos;m also shocked. This is completely amazing. \o/

&gt; Why are the gcrypt headers missing license notices?
&gt; 
&gt; Can you delete FindGnutls.cmake and references to it?

Some quick comments:

I tried the patch and I&apos;m getting several timeouts on the tests.
Also this test page https://vibornoff.github.io/webcrypto-examples/index.html that I use as reference for this WebCrypto stuff loads very slow (takes several minutes to appear some of the content, and the page doesn&apos;t finish to load). Does it work for you properly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292315</commentid>
    <comment_count>22</comment_count>
    <who name="Eduardo Lima Mitev">elima</who>
    <bug_when>2017-03-28 23:25:17 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #18)
&gt; The implementations leverage libgcrypt and are in majority complete,
&gt; but there&apos;s still a lot of opportunities to polish and improve the
&gt; existing code.
&gt; 

Did you considered using libnettle instead of gcrypt? This is the first question I faced when I started implementing the first algorithms, and libnettle was a more or less clear choice:

* gnutls moved away from gcrypt in favor of libnettle,

* libnettle API is certainly easier to work with (standard C API as opposed working with to S-expressions),

* libnettle is arguably faster, though I don&apos;t have data to back that up. libnettle includes CPU-native implementations for some algos in some archs.

* libnettle is (again arguably) better maintained, hence more future proof.

But I have not worked on this for a long time, so maybe this question was already answered before, or there are other arguments in favor of gcrypt that I&apos;m not aware of (e.g, license issues). If that&apos;s the case, sorry for the noise.

I&apos;m so looking forward to see good support of WebCrypto on the WebkitGTK shipped by distros. And speaking about that, Martin Robinson once suggested that we should probably audit this code before un-flagging the feature. Any plan/idea about that?

Kudos for the awesome work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292321</commentid>
    <comment_count>23</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 01:07:35 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #20)
&gt; Why are the gcrypt headers missing license notices?
&gt; 

Forgot.

&gt; Can you delete FindGnutls.cmake and references to it?

Yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292323</commentid>
    <comment_count>24</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 01:23:41 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #21)
&gt; Some quick comments:
&gt; 
&gt; I tried the patch and I&apos;m getting several timeouts on the tests.

Forgot to mention, the implementation depends on the 8-bit cihper feedback mode, represented by the GCRY_CIPHER_MODE_CFB8 constant. That was implemented in February, after the latest 1.7.6 release:
https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=d1ee9a660571ce4a998c9ab2299d4f2419f99127</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292329</commentid>
    <comment_count>25</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 01:48:04 -0700</bug_when>
    <thetext>(In reply to Eduardo Lima Mitev from comment #22)
&gt; (In reply to Zan Dobersek from comment #18)
&gt; &gt; The implementations leverage libgcrypt and are in majority complete,
&gt; &gt; but there&apos;s still a lot of opportunities to polish and improve the
&gt; &gt; existing code.
&gt; &gt; 
&gt; 
&gt; Did you considered using libnettle instead of gcrypt? This is the first
&gt; question I faced when I started implementing the first algorithms, and
&gt; libnettle was a more or less clear choice:
&gt; 
&gt; * gnutls moved away from gcrypt in favor of libnettle,
&gt; 
&gt; * libnettle API is certainly easier to work with (standard C API as opposed
&gt; working with to S-expressions),
&gt; 
&gt; * libnettle is arguably faster, though I don&apos;t have data to back that up.
&gt; libnettle includes CPU-native implementations for some algos in some archs.
&gt; 
&gt; * libnettle is (again arguably) better maintained, hence more future proof.
&gt; 
&gt; But I have not worked on this for a long time, so maybe this question was
&gt; already answered before, or there are other arguments in favor of gcrypt
&gt; that I&apos;m not aware of (e.g, license issues). If that&apos;s the case, sorry for
&gt; the noise.
&gt; 
&gt; I&apos;m so looking forward to see good support of WebCrypto on the WebkitGTK
&gt; shipped by distros. And speaking about that, Martin Robinson once suggested
&gt; that we should probably audit this code before un-flagging the feature. Any
&gt; plan/idea about that?
&gt; 
&gt; Kudos for the awesome work!

I don&apos;t remember the specifics or conclusions from any previous discussions, but I didn&apos;t consider libnettle. libgcrypt is already being used for the digest algorithms by default, and it offers coverage of all the ciphers and modes that are required in the W3C spec.

I looked at libnettle briefly now, and there appear to be missing cipher modes that are needed to implement the AES-CFB-8 and AES-KW support. (Although the AES-CFB-8 cipher was removed from the spec, so the CFB8 might not be required in the future.)

But in general, I&apos;m OK with using libnettle if there aren&apos;t any potential licensing issues and if we&apos;re able to fill in the feature gap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292330</commentid>
    <comment_count>26</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 01:49:31 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #21)
&gt; Also this test page
&gt; https://vibornoff.github.io/webcrypto-examples/index.html that I use as
&gt; reference for this WebCrypto stuff loads very slow (takes several minutes to
&gt; appear some of the content, and the page doesn&apos;t finish to load). Does it
&gt; work for you properly?

It loads fine for me, using the libgcrypt 1.7.6 release or the more recent gcrypt build that includes the CFB8 support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292390</commentid>
    <comment_count>27</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-03-29 08:17:16 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #25)
&gt; But in general, I&apos;m OK with using libnettle if there aren&apos;t any potential
&gt; licensing issues and if we&apos;re able to fill in the feature gap.

We added libgcrypt support to allow avoiding libnettle (GPLv2+ or LGPLv3+). It&apos;s not any problem for Linux distros, but it will be a problem for customers. We should prefer libgcrypt.

(In reply to Zan Dobersek from comment #24)
&gt; (In reply to Carlos Alberto Lopez Perez from comment #21)
&gt; &gt; Some quick comments:
&gt; &gt; 
&gt; &gt; I tried the patch and I&apos;m getting several timeouts on the tests.
&gt; 
&gt; Forgot to mention, the implementation depends on the 8-bit cihper feedback
&gt; mode, represented by the GCRY_CIPHER_MODE_CFB8 constant. That was
&gt; implemented in February, after the latest 1.7.6 release:
&gt; https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;
&gt; h=d1ee9a660571ce4a998c9ab2299d4f2419f99127

Then we need to update OptionsGTK.cmake accordingly:

find_package(LibGcrypt 1.6.0 REQUIRED)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292393</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-03-29 08:20:14 -0700</bug_when>
    <thetext>(In reply to Eduardo Lima Mitev from comment #22)
&gt; I&apos;m so looking forward to see good support of WebCrypto on the WebkitGTK
&gt; shipped by distros. And speaking about that, Martin Robinson once suggested
&gt; that we should probably audit this code before un-flagging the feature. Any
&gt; plan/idea about that?

We absolutely should. Cost would be high, so I suspect it&apos;s not going to happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292704</commentid>
    <comment_count>29</comment_count>
      <attachid>305835</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 22:51:20 -0700</bug_when>
    <thetext>Created attachment 305835
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295259</commentid>
    <comment_count>30</comment_count>
      <attachid>306484</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-07 03:38:12 -0700</bug_when>
    <thetext>Created attachment 306484
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306443</commentid>
    <comment_count>31</comment_count>
      <attachid>309512</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-05-09 10:22:17 -0700</bug_when>
    <thetext>Created attachment 309512
WIP Patch

Remaining changes based on top of changes in #171219, #171220, #171222, #171420.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318126</commentid>
    <comment_count>32</comment_count>
      <attachid>312638</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-06-12 00:35:09 -0700</bug_when>
    <thetext>Created attachment 312638
WIP patch

Now with more libtasn1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325066</commentid>
    <comment_count>33</comment_count>
      <attachid>314466</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-07-03 01:59:18 -0700</bug_when>
    <thetext>Created attachment 314466
Remaining changes

Remaining changes that are spread across the blocker bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2124846</commentid>
    <comment_count>34</comment_count>
    <who name="Diego Pino">dpino</who>
    <bug_when>2025-06-20 07:38:02 -0700</bug_when>
    <thetext>As for December 5th, 2024, there were only two tests filed under this bug:

  - webkit.org/b/133122 crypto/workers/subtle/aes-indexeddb.html [ Skip ]
  - webkit.org/b/133122 crypto/workers/subtle/ec-postMessage-worker.html [ Skip ]

These tests are passing now:

  - https://results.webkit.org/?platform=GTK&amp;&amp;suite=layout-tests&amp;test=crypto/workers/subtle/aes-indexeddb.html&amp;suite=layout-tests&amp;test=crypto/workers/subtle/ec-postMessage-worker.html&amp;limit=4000

Removed tests from test expectations in 287385@main. 

Also, all tests under &apos;crypto/workers/subtle/&apos; are passing now:

```
Tools/Scripts/run-webkit-tests --no-show-results --no-new-test-results --no-sample-on-timeout --results-directory layout-test-results --debug-rwt-logging --no-retry-failures --release --gtk --force --iterations 5 crypto/workers/subtle/
```

However, there are still two bugs still open related to this bug: 173550 177350. Consider closing this bug if that makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2124848</commentid>
    <comment_count>35</comment_count>
    <who name="Diego Pino">dpino</who>
    <bug_when>2025-06-20 07:43:05 -0700</bug_when>
    <thetext>Sorry, I closed the bug by mistake.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232126</attachid>
            <date>2014-05-27 07:35:09 -0700</date>
            <delta_ts>2014-05-27 11:38:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133122-20140527163443.patch</filename>
            <type>text/plain</type>
            <size>36453</size>
            <attacher name="Eduardo Lima Mitev">elima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5Mzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODU2NjEyYTAyZWY1Nzlk
MTkwZjhkNTIzMTI4N2Q3MDBkMWRiNmZiOC4uNWM1OTYyMWYxODZlNjA1Zjk3MmU4MzEwNmQxY2M4
YTRjNWUyNDMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE0LTA1LTI3ICBFZHVh
cmRvIExpbWEgTWl0ZXYgIDxlbGltYUBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBzdHVicyBm
b3IgR1RLIG9mIGFsbCBTdWJ0bGUgQ3J5cHRvIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbnMgY3Vy
cmVudGx5IGF2YWlsYWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzEyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBubyBuZXcgZnVuY3Rpb25hbGl0eSBoYXMgYmVl
biBhZGRlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQgY3J5cHRvL2FsZ29yaXRo
bSBhbmQgY3J5cHRvL3BhcmFtZXRlcnMgdG8gV2ViQ29yZSBpbmNsdWRlZCBkaXJlY3RvcmllcyBs
aXN0CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZHMgc3VidGxlIGNyeXB0byBtb2R1
bGUgc291cmNlcyB0byBXZWJDb3JlIHNvdXJjZXMKKyAgICAgICAgKiBjcnlwdG8vZ3RrL0NyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5R3RrLmNwcDogQWxnb3JpdGhtIGltcGxlbWVudGF0aW9uIHN0dWJz
CisgICAgICAgICogY3J5cHRvL2d0ay9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR3RrLmNwcDogQWxn
b3JpdGhtIGltcGxlbWVudGF0aW9uIHN0dWJzCisgICAgICAgICogY3J5cHRvL2d0ay9DcnlwdG9B
bGdvcml0aG1BRVNfS1dHdGsuY3BwOiBBbGdvcml0aG0gaW1wbGVtZW50YXRpb24gc3R1YnMKKyAg
ICAgICAgKiBjcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobUhNQUNHdGsuY3BwOiBBbGdvcml0aG0g
aW1wbGVtZW50YXRpb24gc3R1YnMKKyAgICAgICAgKiBjcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRo
bVJTQUVTX1BLQ1MxX3YxXzVHdGsuY3BwOiBBbGdvcml0aG0gaW1wbGVtZW50YXRpb24gc3R1YnMK
KyAgICAgICAgKiBjcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQR3RrLmNwcDogQWxn
b3JpdGhtIGltcGxlbWVudGF0aW9uIHN0dWJzCisgICAgICAgICogY3J5cHRvL2d0ay9DcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUd0ay5jcHA6IEFsZ29yaXRobSBpbXBsZW1lbnRhdGlv
biBzdHVicworICAgICAgICAqIGNyeXB0by9ndGsvQ3J5cHRvRGlnZXN0R3RrLmNwcDogQWxnb3Jp
dGhtIGltcGxlbWVudGF0aW9uIHN0dWJzCisgICAgICAgICogY3J5cHRvL2d0ay9DcnlwdG9LZXlS
U0FHdGsuY3BwOiBBbGdvcml0aG0gaW1wbGVtZW50YXRpb24gc3R1YnMKKyAgICAgICAgKiBjcnlw
dG8vZ3RrL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR3RrLmNwcDogQWxnb3JpdGhtIGltcGxlbWVu
dGF0aW9uIHN0dWJzCisKIDIwMTQtMDUtMjcgIFpzb2x0IEJvcmJlbHkgIDx6c2JvcmJlbHkudS1z
emVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KIAogICAgICAgICBBbGxvdyBidWlsZGluZyBDTWFr
ZSBiYXNlZCBwb3J0cyB3aXRoIFdFQl9SRVBMQVkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZmI1
NWNjYWE3NGVlYWFjOGVjMDVlNjdiMTNkMjE4ZTA0NTU3MWEzOC4uN2I5ZGM3ZTQ0Y2JkYzFhMWZh
YWRkNjM1NDcyYTdlMDViZDFlNzVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTI3LDcgKzI3
LDkgQEAgc2V0KFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9icmlkZ2UvYyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYnJpZGdlL2pzYyIKICAgICAiJHtXRUJD
T1JFX0RJUn0vY3J5cHRvIgorICAgICIke1dFQkNPUkVfRElSfS9jcnlwdG8vYWxnb3JpdGhtcyIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vY3J5cHRvL2tleXMiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2Ny
eXB0by9wYXJhbWV0ZXJzIgogICAgICIke1dFQkNPUkVfRElSfS9jc3MiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L2Nzc2ppdCIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCA2N2IwYmFjOTVlMTk5MWM2ZGU4YzAyZThhN2FhZTEzMjk3MzY2MDdiLi5i
YmUyMDc2ZjM4MzQ3ZTA3YmRiNGU0YmJiYTRjOGU3ODZlNTkyN2FlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQpAQCAtNzE3LDMgKzcxNyw0MSBAQCBsaXN0KFJFTU9WRV9JVEVNIEdPYmplY3RE
T01CaW5kaW5nc19HSVJfSEVBREVSUwogCiAjIFByb3BhZ2F0ZSB0aGlzIHZhcmlhYmxlIHRvIHRo
ZSBwYXJlbnQgc2NvcGUsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgcGFydHMgb2Yg
dGhlIGJ1aWxkLgogc2V0KEdPYmplY3RET01CaW5kaW5nc19HSVJfSEVBREVSUyAke0dPYmplY3RE
T01CaW5kaW5nc19HSVJfSEVBREVSU30gUEFSRU5UX1NDT1BFKQorCitpZiAoRU5BQkxFX1NVQlRM
RV9DUllQVE8pCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIGNyeXB0
by9DcnlwdG9BbGdvcml0aG0uY3BwCisgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuY3BwCisgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eS5jcHAKKyAgICAgICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKKyAgICAgICAgY3J5cHRvL0NyeXB0
b0tleVBhaXIuY3BwCisgICAgICAgIGNyeXB0by9TdWJ0bGVDcnlwdG8uY3BwCisgICAgICAgIGNy
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCisgICAgICAgIGNyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAKKyAgICAgICAgY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKKyAgICAgICAgY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5jcHAKKyAgICAgICAgY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVAuY3BwCisgICAgICAgIGNyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAorICAgICAgICBjcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEExLmNwcAorICAgICAgICBjcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEEyMjQuY3BwCisgICAgICAgIGNyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobVNIQTI1Ni5jcHAKKyAgICAgICAgY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtU0hBMzg0LmNwcAorICAgICAgICBjcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1TSEE1MTIuY3BwCisgICAgICAgIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5j
cHAKKyAgICAgICAgY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuY3BwCisg
ICAgICAgIGNyeXB0by9rZXlzL0NyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmNwcAorICAgICAg
ICBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAorICAgICAgICBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlTZXJpYWxpemF0aW9uUmF3LmNwcAorCisgICAgICAgIGNyeXB0by9ndGsvQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnlHdGsuY3BwCisgICAgICAgIGNyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQ0d0ay5jcHAKKyAgICAgICAgY3J5cHRvL2d0ay9DcnlwdG9BbGdvcml0aG1BRVNfS1dH
dGsuY3BwCisgICAgICAgIGNyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGhtSE1BQ0d0ay5jcHAKKyAg
ICAgICAgY3J5cHRvL2d0ay9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R3RrLmNwcAor
ICAgICAgICBjcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQR3RrLmNwcAorICAgICAg
ICBjcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81R3RrLmNwcAorICAg
ICAgICBjcnlwdG8vZ3RrL0NyeXB0b0RpZ2VzdEd0ay5jcHAKKyAgICAgICAgY3J5cHRvL2d0ay9D
cnlwdG9LZXlSU0FHdGsuY3BwCisgICAgICAgIGNyeXB0by9ndGsvU2VyaWFsaXplZENyeXB0b0tl
eVdyYXBHdGsuY3BwCisgICAgKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobUFFU19DQkNHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRi
MDJiYTY2NTY4ZTgzNzdiNDhmNjA4NjgzZDNlYWE1M2E1ZDEyMDkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobUFFU19DQkNHdGsuY3Bw
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZ
UFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmgiCisjaW5jbHVk
ZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNy
eXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyYgcGFyYW1ldGVycywgY29uc3Qg
Q3J5cHRvS2V5QUVTJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3Rv
ckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICAvLyBVbmltcGxlbWVudGVkIGFsZ29yaXRobSBzdHViCisgICAg
ZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKworICAgIFVO
VVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICBVTlVT
RURfUEFSQU0oZGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNrKTsKK30KKwordm9pZCBD
cnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtQWVzQ2JjUGFyYW1zJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXlBRVMmIGtleSwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZv
aWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8v
IFVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OworICAgIGZhaWx1cmVDYWxsYmFjaygpOworCisgICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMp
OworICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FsbGJhY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWYz
Nzk3ZTA3MzBjYjU1YzUyNGY3ODRjZWRkZTRkNzJlY2U1MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2d0ay9DcnlwdG9BbGdvcml0aG1BRVNfS1dHdGsuY3BwCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19LVy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
CisKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBs
YXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9LZXlBRVMmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0
aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWls
dXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIHVuaW1wbGVtZW50ZWQg
YWxnb3JpdGhtIHN0dWIKKyAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgIGZhaWx1cmVD
YWxsYmFjaygpOworCisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BBUkFNKGRh
dGEpOworICAgIFVOVVNFRF9QQVJBTShjYWxsYmFjayk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0tXOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvS2V5QUVTJiBrZXksIGNvbnN0
IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lk
Q2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyB1
bmltcGxlbWVudGVkIGFsZ29yaXRobSBzdHViCisgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsK
KyAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKworICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgIFVO
VVNFRF9QQVJBTShkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbGJhY2spOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGhtSE1BQ0d0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobUhNQUNHdGsu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRmNDE0MzcwZGM4OTc4Y2VlYmYxNmMyMzE4ZWRhZTM0MzNjMjk2YjkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29y
aXRobUhNQUNHdGsuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhNQUMuaCIKKworI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcy5o
IgorI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0
Zm9ybVNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyYgcGFyYW1ldGVycywgY29u
c3QgQ3J5cHRvS2V5SE1BQyYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBW
ZWN0b3JDYWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gVW5pbXBsZW1lbnRlZCBhbGdvcml0aG0gc3R1Ygor
ICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgZmFpbHVyZUNhbGxiYWNrKCk7CisKKyAg
ICBVTlVTRURfUEFSQU0ocGFyYW1ldGVycyk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAg
VU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNFRF9QQVJBTShjYWxsYmFjayk7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVZl
cmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBwYXJhbWV0ZXJzLCBjb25zdCBD
cnlwdG9LZXlITUFDJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGV4cGVjdGVkU2ln
bmF0dXJlLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBCb29sQ2FsbGJhY2sgY2Fs
bGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIC8vIFVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBlYyA9IE5PVF9TVVBQ
T1JURURfRVJSOworICAgIGZhaWx1cmVDYWxsYmFjaygpOworCisgICAgVU5VU0VEX1BBUkFNKHBh
cmFtZXRlcnMpOworICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgIFVOVVNFRF9QQVJBTShleHBl
Y3RlZFNpZ25hdHVyZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKK30KKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Z3RrL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2d0ay9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R3RrLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMmZjZGNhNDgwMWZiYTI4ZGZjYTI5NGRmNjViYjM4YjRlMTMwOWI3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2d0ay9DcnlwdG9BbGdvcml0aG1SU0FF
U19QS0NTMV92MV81R3RrLmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81
LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1ZGUgIkNyeXB0b0tleVJT
QS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRW5jcnlwdChj
b25zdCBDcnlwdG9LZXlSU0EmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwg
VmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIFVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIK
KyAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgIGZhaWx1cmVDYWxsYmFjaygpOworCisg
ICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNF
RF9QQVJBTShjYWxsYmFjayk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFf
djFfNTo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0b0tleVJTQSYga2V5LCBjb25zdCBDcnlw
dG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxi
YWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gVW5pbXBs
ZW1lbnRlZCBhbGdvcml0aG0gc3R1YgorICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAg
ZmFpbHVyZUNhbGxiYWNrKCk7CisKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICBVTlVTRURf
UEFSQU0oZGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNrKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGht
UlNBU1NBX1BLQ1MxX3YxXzVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiMDhhMjEyZDQzNzliNWYxNTU5
YjljZDE0ODA1YTE2N2RkZDUzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81R3RrLmNwcApAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9D
UllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMuaCIKKyNpbmNs
dWRlICJDcnlwdG9LZXlSU0EuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6
cGxhdGZvcm1TaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyYgcGFyYW1ldGVy
cywgY29uc3QgQ3J5cHRvS2V5UlNBJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRh
dGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNr
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBVbmltcGxlbWVudGVkIGFsZ29yaXRobSBz
dHViCisgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICBmYWlsdXJlQ2FsbGJhY2soKTsK
KworICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsK
KyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNrKTsKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81OjpwbGF0Zm9ybVZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMm
IHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleVJTQSYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRp
b25EYXRhJiBzaWduYXR1cmUsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIEJvb2xD
YWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgLy8gVW5pbXBsZW1lbnRlZCBhbGdvcml0aG0gc3R1YgorICAgIGVj
ID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgZmFpbHVyZUNhbGxiYWNrKCk7CisKKyAgICBVTlVT
RURfUEFSQU0ocGFyYW1ldGVycyk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VE
X1BBUkFNKHNpZ25hdHVyZSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsYmFjayk7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBHdGsu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc5OTQ2MTczM2YyMTU2ZTZjZWNiYmYzNzc2N2E0NDc3MGEyMjNiYzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29y
aXRobVJTQV9PQUVQR3RrLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5oIgorCisj
aWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FP
YWVwUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGht
UlNBX09BRVA6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFy
YW1zJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXlSU0EmIGtleSwgY29uc3QgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayBm
YWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIFVuaW1wbGVtZW50
ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgIGZhaWx1
cmVDYWxsYmFjaygpOworCisgICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOworICAgIFVOVVNF
RF9QQVJBTShrZXkpOworICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FsbGJhY2spOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpwbGF0Zm9ybURl
Y3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNhT2FlcFBhcmFtcyYgcGFyYW1ldGVycywgY29u
c3QgQ3J5cHRvS2V5UlNBJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZl
Y3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBVbmltcGxlbWVudGVkIGFsZ29yaXRobSBzdHViCisg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKworICAg
IFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICBV
TlVTRURfUEFSQU0oZGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNrKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0Y2JmOWQxNGNkZWI5YTA1OWNjOWYyMjNjOTY3MmVj
YTgwNTkxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0Ny
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5R3RrLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eS5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmgiCisjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtSE1BQy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJT
QUVTX1BLQ1MxX3YxXzUuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFf
djFfNS5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmgiCisjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtU0hBMS5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNIQTIyNC5o
IgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNIQTI1Ni5oIgorI2luY2x1ZGUgIkNyeXB0b0Fs
Z29yaXRobVNIQTM4NC5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNIQTUxMi5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnBsYXRm
b3JtUmVnaXN0ZXJBbGdvcml0aG1zKCkKK3sKKyAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDPigpOworICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRo
bUFFU19LVz4oKTsKKyAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1ITUFDPigp
OworICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU+
KCk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzU+KCk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtUlNBX09BRVA+KCk7
CisgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtU0hBMT4oKTsKKyAgICByZWdp
c3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1TSEEyMjQ+KCk7CisgICAgcmVnaXN0ZXJBbGdv
cml0aG08Q3J5cHRvQWxnb3JpdGhtU0hBMjU2PigpOworICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENy
eXB0b0FsZ29yaXRobVNIQTM4ND4oKTsKKyAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdv
cml0aG1TSEE1MTI+KCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2d0ay9DcnlwdG9EaWdlc3RHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2d0ay9DcnlwdG9EaWdlc3RHdGsuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY3ZDBjMjUxOGU0YzhiNmM4YWIyNjAwZmFkNDlmMTNkMDRkYmZlMTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0RpZ2VzdEd0ay5jcHAK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ3J5cHRvRGlnZXN0LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ3J5cHRvRGlnZXN0Q29udGV4dCB7CisgICAgLy8g
dW5pbXBsZW1lbnRlZCBhbGdvcml0aG0gc3R1YgorfTsKKworQ3J5cHRvRGlnZXN0OjpDcnlwdG9E
aWdlc3QoKQorICAgIDogbV9jb250ZXh0KG5ldyBDcnlwdG9EaWdlc3RDb250ZXh0KQoreworICAg
IC8vIHVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKK30KKworQ3J5cHRvRGlnZXN0Ojp+Q3J5
cHRvRGlnZXN0KCkKK3sKKyAgICAvLyB1bmltcGxlbWVudGVkIGFsZ29yaXRobSBzdHViCit9CisK
Kworc3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gQ3J5cHRvRGlnZXN0OjpjcmVhdGUoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0pCit7CisgICAgLy8gdW5pbXBsZW1lbnRl
ZCBhbGdvcml0aG0gc3R1YgorICAgIFVOVVNFRF9QQVJBTShhbGdvcml0aG0pOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgQ3J5cHRvRGlnZXN0OjphZGRCeXRlcyhjb25zdCB2b2lkKiBpbnB1
dCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICAvLyB1bmltcGxlbWVudGVkIGFsZ29yaXRobSBzdHVi
CisgICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKK30K
KworVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQoreworICAgIC8v
IHVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0
KDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2d0ay9DcnlwdG9LZXlSU0FHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2d0ay9DcnlwdG9LZXlSU0FHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0Y2E3ZDRkYTI1ZTU1YzNjOGE3
Y2JkMDdiYjFhODRhMjUzZTMxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ3RrL0NyeXB0b0tleVJTQUd0ay5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleVJTQS5oIgorCisj
aWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgor
I2luY2x1ZGUgIkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ3J5cHRv
S2V5UGFpci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBfUGxhdGZvcm1SU0FL
ZXlHdGsgeworICAgIC8vIHVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKK307CisKK0NyeXB0
b0tleVJTQTo6Q3J5cHRvS2V5UlNBKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgQ3J5cHRvS2V5VHlwZSB0eXBlLCBQbGF0Zm9ybVJTQUtleSBwbGF0Zm9ybUtleSwgYm9vbCBl
eHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCisgICAgOiBDcnlwdG9LZXkoaWRlbnRp
ZmllciwgdHlwZSwgZXh0cmFjdGFibGUsIHVzYWdlKQorICAgICwgbV9wbGF0Zm9ybUtleShwbGF0
Zm9ybUtleSkKKyAgICAsIG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKGZhbHNlKQoreworICAg
IC8vIHVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKK30KKworUGFzc1JlZlB0cjxDcnlwdG9L
ZXlSU0E+IENyeXB0b0tleVJTQTo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRl
bnRpZmllciwgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmIGtleURhdGEsIGJvb2wg
ZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQoreworICAgIC8vIHVuaW1wbGVtZW50
ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBVTlVTRURfUEFSQU0oaWRlbnRpZmllcik7CisgICAgVU5V
U0VEX1BBUkFNKGtleURhdGEpOworICAgIFVOVVNFRF9QQVJBTShleHRyYWN0YWJsZSk7CisgICAg
VU5VU0VEX1BBUkFNKHVzYWdlKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCitDcnlwdG9L
ZXlSU0E6On5DcnlwdG9LZXlSU0EoKQoreworICAgIC8vIHVuaW1wbGVtZW50ZWQgYWxnb3JpdGht
IHN0dWIKK30KKwordm9pZCBDcnlwdG9LZXlSU0E6OnJlc3RyaWN0VG9IYXNoKENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX3Jlc3RyaWN0ZWRUb1NwZWNpZmlj
SGFzaCA9IHRydWU7CisgICAgbV9oYXNoID0gaWRlbnRpZmllcjsKK30KKworYm9vbCBDcnlwdG9L
ZXlSU0E6OmlzUmVzdHJpY3RlZFRvSGFzaChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyJiBpZGVu
dGlmaWVyKSBjb25zdAoreworICAgIGlmICghbV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlkZW50aWZpZXIgPSBtX2hhc2g7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3NpemVfdCBDcnlwdG9LZXlSU0E6OmtleVNpemVJbkJpdHMoKSBjb25z
dAoreworICAgIC8vIHVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBjb25zdAoreworICAgIC8vIHVu
aW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBVTlVTRURfUEFSQU0oYnVpbGRlcik7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlSU0E6OmV4cG9ydERh
dGEoKSBjb25zdAoreworICAgIEFTU0VSVChleHRyYWN0YWJsZSgpKTsKKyAgICBBU1NFUlQobV9w
bGF0Zm9ybUtleS0+cHViS2V5KTsKKworICAgIC8vIHVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0
dWIKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBDcnlwdG9LZXlSU0E6OmdlbmVyYXRl
UGFpcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgdW5zaWduZWQgbW9kdWx1
c0xlbmd0aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwdWJsaWNFeHBvbmVudCwgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIEtleVBhaXJDYWxsYmFjayBjYWxsYmFjaywg
Vm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKK3sKKyAgICAvLyB1bmltcGxlbWVudGVkIGFs
Z29yaXRobSBzdHViCisgICAgZmFpbHVyZUNhbGxiYWNrKCk7CisKKyAgICBVTlVTRURfUEFSQU0o
YWxnb3JpdGhtKTsKKyAgICBVTlVTRURfUEFSQU0obW9kdWx1c0xlbmd0aCk7CisgICAgVU5VU0VE
X1BBUkFNKHB1YmxpY0V4cG9uZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXh0cmFjdGFibGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNrKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL1NlcmlhbGl6ZWRDcnlw
dG9LZXlXcmFwR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9ndGsvU2VyaWFsaXplZENy
eXB0b0tleVdyYXBHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4ZWE4OTk0ZDhjMGQwZTAxNjQ1YmNhMWY1
MmFhZWU3NGQ4NGNlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Z3RrL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR3RrLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcC5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90
PiYgbWFzdGVyS2V5KQoreworICAgIC8vIFVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAg
ICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCB3cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIG1hc3Rlcktl
eSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KQor
eworICAgIC8vIFVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBVTlVTRURfUEFSQU0o
bWFzdGVyS2V5KTsKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICBVTlVTRURfUEFSQU0ocmVz
dWx0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCB1bndyYXBTZXJpYWxpemVkQ3J5
cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHdyYXBwZWRLZXksIFZlY3Rvcjx1aW50OF90PiYga2V5KQoreworICAgIC8vIFVuaW1w
bGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKKyAg
ICBVTlVTRURfUEFSQU0od3JhcHBlZEtleSk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuaAppbmRleCBjMzNkMjQz
Y2UxNmU5M2M1Njc5MjVlZDY2YTAzOWE3YmVhNWI3MGNmLi4xYzVlN2JkMzMyNjA1NTM0M2M2YjEw
NGFhZjc5ZDE2YjZkOThmMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlSU0EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlSU0EuaApAQCAtMzYsNiArMzYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgX0NDUlNBQ3J5cHRvciAq
Q0NSU0FDcnlwdG9yUmVmOwogdHlwZWRlZiBDQ1JTQUNyeXB0b3JSZWYgUGxhdGZvcm1SU0FLZXk7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9QbGF0Zm9ybVJT
QUtleUd0ayBQbGF0Zm9ybVJTQUtleUd0azsKK3R5cGVkZWYgUGxhdGZvcm1SU0FLZXlHdGsgKlBs
YXRmb3JtUlNBS2V5OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3J5
cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDg1MzkwYmZm
ZDkzZjQzZWRmM2ZmNGMwNTdhMDQ0MjcxY2VmZjc0NjUuLjhmNDcwZGM4Y2Q2MmM0NWI2ZTJlNjNl
NjU2MGRhNGU2Mzc4YTAyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC01NSw2ICs1NSw3IEBA
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TRUND
T01QX0ZJTFRFUlMgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1NIQVJFRF9XT1JLRVJTIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1NQRUxMQ0hFQ0sgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfU1VCVExFX0NSWVBUTyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9URU1QTEFURV9FTEVNRU5UIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1RPVUNIX0VWRU5UUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCBPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9X
ZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpp
bmRleCBhMmQ5Yzc3YzJkMmQ5ODc1NDE5ODZjODE1NmE4NTBkNDI5MThlYzk3Li43ZmM2MmUzMTBm
NmVkYTUyNTlmNDk5NTg4YzYxZTgwY2Y4ZmRlNzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Uv
V2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNt
YWtlCkBAIC0xMDcsNiArMTA3LDcgQEAgbWFjcm8oV0VCS0lUX09QVElPTl9CRUdJTikKICAgICBX
RUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0hBUkVEX1dPUktFUlMgIlRvZ2dsZSBTaGFyZWRX
b3JrZXJzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1BF
TExDSEVDSyAiVG9nZ2xlIFNwZWxsY2hlY2tpbmcgc3VwcG9ydCAocmVxdWlyZXMgRW5jaGFudCki
IE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1FMX0RBVEFCQVNFICJUb2dn
bGUgU1FMIERhdGFiYXNlIFN1cHBvcnQiIE9OKQorICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9TVUJUTEVfQ1JZUFRPICJUb2dnbGUgU3VidGxlIENyeXB0byBzdXBwb3J0IiBPRkYpCiAg
ICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NWR19GT05UUyAiVG9nZ2xlIFNWRyBmb250
cyBzdXBwb3J0IChpbXBsZXMgU1ZHIHN1cHBvcnQpIiBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RF
RklORShFTkFCTEVfVEVNUExBVEVfRUxFTUVOVCAiVG9nZ2xlIFRlbXBsYXRlIHN1cHBvcnQiIE9O
KQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcgIlRvZ2ds
ZSBUZXh0IGF1dG8gc2l6aW5nIHN1cHBvcnQiIE9GRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZWNvbmZpZy5oLmNtYWtlIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKaW5kZXggZjU4ODQz
OWQ5ZDA0YTk1ZmQzMGI3YWE2ODFiZjQzM2IwMTczNjE1MS4uYWExZDRiMzQ5MmU4ZjZjMGNhYjFh
YjVjYzJiZjg3YTk3MTY0NWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2UKKysrIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKQEAgLTEwMiw2ICsxMDIsNyBAQAog
I2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NNT09USF9TQ1JPTExJTkcKICNjbWFrZWRlZmluZTAxIEVO
QUJMRV9TUEVMTENIRUNLCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU1FMX0RBVEFCQVNFCisjY21h
a2VkZWZpbmUwMSBFTkFCTEVfU1VCVExFX0NSWVBUTwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NW
R19GT05UUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1RFTVBMQVRFX0VMRU1FTlQKICNjbWFrZWRl
ZmluZTAxIEVOQUJMRV9URVhUX0FVVE9TSVpJTkcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232128</attachid>
            <date>2014-05-27 07:37:27 -0700</date>
            <delta_ts>2014-05-27 09:03:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133122-20140527163702.patch</filename>
            <type>text/plain</type>
            <size>3635</size>
            <attacher name="Eduardo Lima Mitev">elima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5Mzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4
IGJiZTIwNzZmMzgzNDdlMDdiZGI0ZTRiYmJhNGM4ZTc4NmU1OTI3YWUuLjRlYzY5YjZhNWIyOGIz
ZTIyNWNiOTExZDhiOTFjNjVjZjQyMzY4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBA
IC03NTQsNCArNzU0LDExIEBAIGlmIChFTkFCTEVfU1VCVExFX0NSWVBUTykKICAgICAgICAgY3J5
cHRvL2d0ay9DcnlwdG9LZXlSU0FHdGsuY3BwCiAgICAgICAgIGNyeXB0by9ndGsvU2VyaWFsaXpl
ZENyeXB0b0tleVdyYXBHdGsuY3BwCiAgICAgKQorCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9J
TkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7R05VVExTX0lOQ0xVREVfRElSU30KKyAgICAp
CisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgJHtHTlVUTFNfTElC
UkFSSUVTfQorICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZEdu
dVRMUy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kR251VExTLmNtYWtlCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2
NjQwZWI3NDQzYTFkZThlN2JkNDgwYjJhYTgxZjczNDQ5YWZkMGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvY21ha2UvRmluZEdudVRMUy5jbWFrZQpAQCAtMCwwICsxLDU0IEBACisjIC0gVHJ5
IHRvIGZpbmQgR251VExTIDMuMCBvciBhYm92ZQorIyBPbmNlIGRvbmUsIHRoaXMgd2lsbCBkZWZp
bmUKKyMKKyMgIEdOVVRMU19GT1VORCAtIEdudVRMUyAzLjAgb3IgYWJvdmUgZm91bmQKKyMgIEdO
VVRMU19JTkNMVURFX0RJUlMgLSB0aGUgR251dFRMUyBpbmNsdWRlIGRpcmVjdG9yaWVzCisjICBH
TlVUTFNfTElCUkFSSUVTIC0gdGhlIEdudVRMUyBsaW5raW5nIGxpYnJhcmllcworIworIyBDb3B5
cmlnaHQgKEMpIDIwMTQgRWR1YXJkbyBMaW1hIE1pdGV2IDxlbGltYUBpZ2FsaWEuY29tPgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUworIyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SIElUUworIyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyMgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsKKyMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisjIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisj
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYKKyMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ZpbmRfcGFja2FnZShQa2dDb25maWcpCitwa2dfY2hlY2tfbW9kdWxlcyhQQ19HTlVU
TFMgUkVRVUlSRUQgUVVJRVQgZ251dGxzKQorCitmaW5kX3BhdGgoR05VVExTX0lOQ0xVREVfRElS
UworICAgIE5BTUVTIGdudXRscy9nbnV0bHMuaAorICAgIEhJTlRTICR7UENfR05VVExTX0lOQ0xV
REVESVJ9CisgICAgICAgICAgJHtQQ19HTlVUTFNfSU5DTFVERV9ESVJTfQorICAgIFBBVEhfU1VG
RklYRVMgZ251dGxzCispCisKK2ZpbmRfbGlicmFyeShHTlVUTFNfTElCUkFSSUVTCisgICAgTkFN
RVMgZ251dGxzCisgICAgSElOVFMgJHtQQ19HTlVUTFNfTElCRElSfQorICAgICAgICAgICR7UENf
R05VVExTX0xJQlJBUllfRElSU30KKykKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5k
YXJkQXJncykKK0ZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhHbnVUTFMgUkVRVUlS
RURfVkFSUyBHTlVUTFNfSU5DTFVERV9ESVJTIEdOVVRMU19MSUJSQVJJRVMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSICAgUENfR05VVExTX1ZF
UlNJT04pCisKK21hcmtfYXNfYWR2YW5jZWQoCisgICAgR05VVExTX0lOQ0xVREVfRElSUworICAg
IEdOVVRMU19MSUJSQVJJRVMKKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RL
LmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggOGY0NzBkYzhjZDYy
YzQ1YjZlMmU2M2U2NTYwZGE0ZTYzNzhhMDJkZS4uMzg4NjZhMDQwYzQ1NGYwMGY3OWUzNTVmZDRk
OGUzOGViYzdiNmNjOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UK
KysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTMyNywzICszMjcsNyBAQCBm
aWxlKFdSSVRFCiBmaWxlKENPUFkgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElS
RUNUT1JZfS9idWlsZC5zaAogICBERVNUSU5BVElPTiAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgIEZJ
TEVfUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQ
X1JFQUQgR1JPVVBfRVhFQ1VURSkKKworaWYgKEVOQUJMRV9TVUJUTEVfQ1JZUFRPKQorICAgIGZp
bmRfcGFja2FnZShHbnVUTFMgMy4wLjAgUkVRVUlSRUQpCitlbmRpZiAoKQo=
</data>
<flag name="review"
          id="256604"
          type_id="1"
          status="-"
          setter="elima"
    />
    <flag name="commit-queue"
          id="256605"
          type_id="3"
          status="-"
          setter="elima"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232132</attachid>
            <date>2014-05-27 08:57:43 -0700</date>
            <delta_ts>2014-05-27 11:39:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133122-20140527175718.patch</filename>
            <type>text/plain</type>
            <size>5306</size>
            <attacher name="Eduardo Lima Mitev">elima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5Mzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWM1OTYyMWYxODZlNjA1
Zjk3MmU4MzEwNmQxY2M4YTRjNWUyNDMzMC4uN2U4ZjczNjQyZWVmYzRjOTgyMDg5MTM4MjE0ZGI4
OGUwN2MyOWQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2IEBACiAyMDE0LTA1LTI3ICBFZHVh
cmRvIExpbWEgTWl0ZXYgIDxlbGltYUBpZ2FsaWEuY29tPgogCisgICAgICAgIFtHVEtdIEFkZCBH
bnVUTFMgbGlicmFyaWVzIGFuZCBpbmNsdWRlZCBkaXJzIHRvIFdlYkNvcmUgdGFyZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMTIyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IHNpbmNlIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGFkZGVkLgorCisgICAgICAgICog
UGxhdGZvcm1HVEsuY21ha2U6IEFkZCBHbnVUTFMgbGlicmFyaWVzIGFuZCBpbmNsdWRlZCBkaXJz
IHRvIFdlYkNvcmUgdGFyZ2V0cworCisyMDE0LTA1LTI3ICBFZHVhcmRvIExpbWEgTWl0ZXYgIDxl
bGltYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIEFkZCBzdHVicyBmb3IgR1RLIG9mIGFsbCBTdWJ0
bGUgQ3J5cHRvIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbnMgY3VycmVudGx5IGF2YWlsYWJsZS4K
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzEyMgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGJiZTIwNzZmMzgzNDdlMDdiZGI0ZTRiYmJh
NGM4ZTc4NmU1OTI3YWUuLjRlYzY5YjZhNWIyOGIzZTIyNWNiOTExZDhiOTFjNjVjZjQyMzY4OTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC03NTQsNCArNzU0LDExIEBAIGlmIChFTkFC
TEVfU1VCVExFX0NSWVBUTykKICAgICAgICAgY3J5cHRvL2d0ay9DcnlwdG9LZXlSU0FHdGsuY3Bw
CiAgICAgICAgIGNyeXB0by9ndGsvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHdGsuY3BwCiAgICAg
KQorCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAg
ICR7R05VVExTX0lOQ0xVREVfRElSU30KKyAgICApCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9M
SUJSQVJJRVMKKyAgICAgICAgJHtHTlVUTFNfTElCUkFSSUVTfQorICAgICkKIGVuZGlmICgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZEdudVRMUy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9G
aW5kR251VExTLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2NjQwZWI3NDQzYTFkZThlN2JkNDgwYjJhYTgx
ZjczNDQ5YWZkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZEdudVRMUy5j
bWFrZQpAQCAtMCwwICsxLDU0IEBACisjIC0gVHJ5IHRvIGZpbmQgR251VExTIDMuMCBvciBhYm92
ZQorIyBPbmNlIGRvbmUsIHRoaXMgd2lsbCBkZWZpbmUKKyMKKyMgIEdOVVRMU19GT1VORCAtIEdu
dVRMUyAzLjAgb3IgYWJvdmUgZm91bmQKKyMgIEdOVVRMU19JTkNMVURFX0RJUlMgLSB0aGUgR251
dFRMUyBpbmNsdWRlIGRpcmVjdG9yaWVzCisjICBHTlVUTFNfTElCUkFSSUVTIC0gdGhlIEdudVRM
UyBsaW5raW5nIGxpYnJhcmllcworIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgRWR1YXJkbyBMaW1h
IE1pdGV2IDxlbGltYUBpZ2FsaWEuY29tPgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUwor
IyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIElUUworIyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyMgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKyMgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksCisjIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisjIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyMgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ZpbmRfcGFja2FnZShQa2dDb25m
aWcpCitwa2dfY2hlY2tfbW9kdWxlcyhQQ19HTlVUTFMgUkVRVUlSRUQgUVVJRVQgZ251dGxzKQor
CitmaW5kX3BhdGgoR05VVExTX0lOQ0xVREVfRElSUworICAgIE5BTUVTIGdudXRscy9nbnV0bHMu
aAorICAgIEhJTlRTICR7UENfR05VVExTX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQQ19HTlVU
TFNfSU5DTFVERV9ESVJTfQorICAgIFBBVEhfU1VGRklYRVMgZ251dGxzCispCisKK2ZpbmRfbGli
cmFyeShHTlVUTFNfTElCUkFSSUVTCisgICAgTkFNRVMgZ251dGxzCisgICAgSElOVFMgJHtQQ19H
TlVUTFNfTElCRElSfQorICAgICAgICAgICR7UENfR05VVExTX0xJQlJBUllfRElSU30KKykKKwor
aW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK0ZJTkRfUEFDS0FHRV9IQU5E
TEVfU1RBTkRBUkRfQVJHUyhHbnVUTFMgUkVRVUlSRURfVkFSUyBHTlVUTFNfSU5DTFVERV9ESVJT
IEdOVVRMU19MSUJSQVJJRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZFUlNJT05fVkFSICAgUENfR05VVExTX1ZFUlNJT04pCisKK21hcmtfYXNfYWR2YW5jZWQo
CisgICAgR05VVExTX0lOQ0xVREVfRElSUworICAgIEdOVVRMU19MSUJSQVJJRVMKKykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlv
bnNHVEsuY21ha2UKaW5kZXggOGY0NzBkYzhjZDYyYzQ1YjZlMmU2M2U2NTYwZGE0ZTYzNzhhMDJk
ZS4uMzg4NjZhMDQwYzQ1NGYwMGY3OWUzNTVmZDRkOGUzOGViYzdiNmNjOSAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UKQEAgLTMyNywzICszMjcsNyBAQCBmaWxlKFdSSVRFCiBmaWxlKENPUFkgJHtDTUFL
RV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9idWlsZC5zaAogICBERVNUSU5B
VElPTiAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgIEZJTEVfUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBP
V05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSkKKworaWYg
KEVOQUJMRV9TVUJUTEVfQ1JZUFRPKQorICAgIGZpbmRfcGFja2FnZShHbnVUTFMgMy4wLjAgUkVR
VUlSRUQpCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4
IDVlZDc1Njg3N2Y4ZDVmZDlmNWRkZGRkZjM5MGU3YTI4ODBiZjg3ZGYuLmQ4MTljZmRiOGQ1ZTFj
NGQ2YTQ4MWNhYTNjMDM0ODQ5ZGY0N2YxODggMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNC0wNS0yNyAgRWR1YXJkbyBMaW1hIE1pdGV2
ICA8ZWxpbWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGRzIGRlcGVuZGVuY3kgb24g
R251VExTIDMuMCsgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzdWJ0bGUgY3J5cHRvIGFsZ29y
aXRobXMKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMzMTIyCisKKyAgICAgICAgR251VExTIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QgZGVwZW5kZW5j
eSB0aHJvdWdoIGxpYnNvdXAtPmdsaWItbmV0d29ya2luZy4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2Ugbm8gbmV3IGZ1
bmN0aW9uYWxpdHkgaGFzIGJlZW4gYWRkZWQuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvRmlu
ZEdudVRMUy5jbWFrZTogQWRkZWQKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5j
bWFrZTogQWRkIHNlYXJjaCBmb3IgcmVxdWlyZWQgR251VExTIHBhY2thZ2UKKwogMjAxNC0wNS0y
NyAgWnNvbHQgQm9yYmVseSAgPHpzYm9yYmVseS51LXN6ZWdlZEBwYXJ0bmVyLnNhbXN1bmcuY29t
PgogCiAgICAgICAgIEFsbG93IGJ1aWxkaW5nIENNYWtlIGJhc2VkIHBvcnRzIHdpdGggV0VCX1JF
UExBWQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232135</attachid>
            <date>2014-05-27 09:43:18 -0700</date>
            <delta_ts>2014-05-27 11:39:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133122-20140527184253.patch</filename>
            <type>text/plain</type>
            <size>3495</size>
            <attacher name="Eduardo Lima Mitev">elima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5Mzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2U4ZjczNjQyZWVmYzRj
OTgyMDg5MTM4MjE0ZGI4OGUwN2MyOWQxZi4uZDJmNWMzNTI3ZDdhMjQzZDIyOWQ4ZjNjMDJkODc1
YjBhODM3YzkxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIxIEBACiAyMDE0LTA1LTI3ICBFZHVh
cmRvIExpbWEgTWl0ZXYgIDxlbGltYUBpZ2FsaWEuY29tPgogCisgICAgICAgIFtHVEtdIEFkZHMg
aW1wbGVtZW50YXRpb24gb2YgU3VidGxlIENyeXB0byBkaWdlc3QgYWxnb3JpdGhtcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMTIyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYXJlIGFscmVh
ZHkgaW4gcGxhY2UgdW5kZXIgY3J5cHRvL3N1YnRsZS9zaGEtKi5odG1sCisKKyAgICAgICAgKiBj
cnlwdG8vZ3RrL0NyeXB0b0RpZ2VzdEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9E
aWdlc3Q6OkNyeXB0b0RpZ2VzdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9EaWdlc3Q6On5D
cnlwdG9EaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvRGlnZXN0OjphZGRCeXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9EaWdlc3Q6OmNvbXB1dGVIYXNoKToKKworMjAxNC0wNS0yNyAgRWR1YXJkbyBM
aW1hIE1pdGV2ICA8ZWxpbWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1RLXSBBZGQgR251VExT
IGxpYnJhcmllcyBhbmQgaW5jbHVkZWQgZGlycyB0byBXZWJDb3JlIHRhcmdldHMKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzEyMgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0RpZ2VzdEd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0RpZ2VzdEd0ay5jcHAKaW5kZXggZjdkMGMyNTE4
ZTRjOGI2YzhhYjI2MDBmYWQ0OWYxM2QwNGRiZmUxOC4uMDdlNjc5MDY5MDg1YjFhYzc3Y2NkZjU2
YTRkYzc0OGRmMGNjZTMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2d0ay9D
cnlwdG9EaWdlc3RHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9ndGsvQ3J5cHRv
RGlnZXN0R3RrLmNwcApAQCAtMjgsNDMgKzI4LDc5IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NS
WVBUTykKIAorI2luY2x1ZGUgPGdudXRscy9nbnV0bHMuaD4KKyNpbmNsdWRlIDxnbnV0bHMvY3J5
cHRvLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IENyeXB0b0RpZ2VzdENvbnRl
eHQgewotICAgIC8vIHVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBnbnV0bHNfZGln
ZXN0X2FsZ29yaXRobV90IGFsZ29yaXRobTsKKyAgICBnbnV0bHNfaGFzaF9oZF90IGhhc2g7CiB9
OwogCiBDcnlwdG9EaWdlc3Q6OkNyeXB0b0RpZ2VzdCgpCiAgICAgOiBtX2NvbnRleHQobmV3IENy
eXB0b0RpZ2VzdENvbnRleHQpCiB7Ci0gICAgLy8gdW5pbXBsZW1lbnRlZCBhbGdvcml0aG0gc3R1
YgogfQogCiBDcnlwdG9EaWdlc3Q6On5DcnlwdG9EaWdlc3QoKQogewotICAgIC8vIHVuaW1wbGVt
ZW50ZWQgYWxnb3JpdGhtIHN0dWIKKyAgICBnbnV0bHNfaGFzaF9kZWluaXQobV9jb250ZXh0LT5o
YXNoLCAwKTsKIH0KIAogCiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvRGlnZXN0PiBDcnlwdG9EaWdl
c3Q6OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSkKIHsKLSAgICAv
LyB1bmltcGxlbWVudGVkIGFsZ29yaXRobSBzdHViCi0gICAgVU5VU0VEX1BBUkFNKGFsZ29yaXRo
bSk7CisgICAgZ251dGxzX2RpZ2VzdF9hbGdvcml0aG1fdCBnbnV0bHNBbGdvOworCisgICAgc3dp
dGNoIChhbGdvcml0aG0pIHsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNI
QV8xOiB7CisgICAgICAgIGdudXRsc0FsZ28gPSBHTlVUTFNfRElHX1NIQTE7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yMjQ6
IHsKKyAgICAgICAgZ251dGxzQWxnbyA9IEdOVVRMU19ESUdfU0hBMjI0OworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjU2OiB7
CisgICAgICAgIGdudXRsc0FsZ28gPSBHTlVUTFNfRElHX1NIQTI1NjsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDogewor
ICAgICAgICBnbnV0bHNBbGdvID0gR05VVExTX0RJR19TSEEzODQ7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTI6IHsKKyAg
ICAgICAgZ251dGxzQWxnbyA9IEdOVVRMU19ESUdfU0hBNTEyOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0KG5ldyBDcnlwdG9EaWdlc3QpOwor
ICAgIGRpZ2VzdC0+bV9jb250ZXh0LT5hbGdvcml0aG0gPSBnbnV0bHNBbGdvOwogCi0gICAgcmV0
dXJuIDA7CisgICAgaW50IHJldCA9IGdudXRsc19oYXNoX2luaXQoJmRpZ2VzdC0+bV9jb250ZXh0
LT5oYXNoLCBnbnV0bHNBbGdvKTsKKyAgICBpZiAocmV0ICE9IEdOVVRMU19FX1NVQ0NFU1MpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGRpZ2VzdDsKIH0KIAogdm9pZCBD
cnlwdG9EaWdlc3Q6OmFkZEJ5dGVzKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQog
ewotICAgIC8vIHVuaW1wbGVtZW50ZWQgYWxnb3JpdGhtIHN0dWIKLSAgICBVTlVTRURfUEFSQU0o
aW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworICAgIGdudXRsc19oYXNoKG1fY29u
dGV4dC0+aGFzaCwgaW5wdXQsIGxlbmd0aCk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBDcnlwdG9E
aWdlc3Q6OmNvbXB1dGVIYXNoKCkKIHsKLSAgICAvLyB1bmltcGxlbWVudGVkIGFsZ29yaXRobSBz
dHViCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCgwKTsKKyAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0OworICAgIGludCBkaWdlc3RMZW4gPSBnbnV0bHNfaGFzaF9nZXRfbGVuKG1fY29udGV4
dC0+YWxnb3JpdGhtKTsKKyAgICByZXN1bHQucmVzaXplKGRpZ2VzdExlbik7CisKKyAgICBnbnV0
bHNfaGFzaF9vdXRwdXQobV9jb250ZXh0LT5oYXNoLCByZXN1bHQuZGF0YSgpKTsKKwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232138</attachid>
            <date>2014-05-27 10:03:32 -0700</date>
            <delta_ts>2014-05-27 11:41:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133122-20140527190307.patch</filename>
            <type>text/plain</type>
            <size>4925</size>
            <attacher name="Eduardo Lima Mitev">elima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5Mzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJmNWMzNTI3ZDdhMjQz
ZDIyOWQ4ZjNjMDJkODc1YjBhODM3YzkxNi4uMjRlNDFlZjhiNTQ3NGFlMTNlMGIxNmQ5YmIxNDAx
YTk5NjM5MGE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAyMDE0LTA1LTI3ICBFZHVh
cmRvIExpbWEgTWl0ZXYgIDxlbGltYUBpZ2FsaWEuY29tPgogCisgICAgICAgIFtHVEtdIEFkZHMg
aW1wbGVtZW50YXRpb24gb2Ygc3VidGxlIGNyeXB0byBITUFDIGFsZ29yaXRobQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMTIyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYXJlIGFscmVhZHkg
aW4gcGxhY2UgdW5kZXIgY3J5cHRvL3N1YnRsZS9obWFjLSouaHRtbAorCisgICAgICAgICogY3J5
cHRvL2d0ay9DcnlwdG9BbGdvcml0aG1ITUFDR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEdudXRsc0RpZ2VzdEFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVTaWdu
YXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6cGxhdGZvcm1T
aWduKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OnBsYXRmb3JtVmVy
aWZ5KToKKworMjAxNC0wNS0yNyAgRWR1YXJkbyBMaW1hIE1pdGV2ICA8ZWxpbWFAaWdhbGlhLmNv
bT4KKwogICAgICAgICBbR1RLXSBBZGRzIGltcGxlbWVudGF0aW9uIG9mIFN1YnRsZSBDcnlwdG8g
ZGlnZXN0IGFsZ29yaXRobXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzEyMgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3Rr
L0NyeXB0b0FsZ29yaXRobUhNQUNHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2d0ay9D
cnlwdG9BbGdvcml0aG1ITUFDR3RrLmNwcAppbmRleCA0ZjQxNDM3MGRjODk3OGNlZWJmMTZjMjMx
OGVkYWUzNDMzYzI5NmI5Li41YjM5M2I1MzBlM2FkZTlhOWRkZGE4MGRjMWJkMzlhMTIzOWI2ZjVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ3RrL0NyeXB0b0FsZ29yaXRobUhN
QUNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9ndGsvQ3J5cHRvQWxnb3JpdGht
SE1BQ0d0ay5jcHAKQEAgLTMxLDM0ICszMSw3MCBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRo
bUhtYWNQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgPGdudXRscy9nbnV0bHMuaD4KKyNpbmNsdWRlIDxnbnV0
bHMvY3J5cHRvLmg+CisjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnBsYXRmb3Jt
U2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBwYXJhbWV0ZXJzLCBjb25zdCBD
cnlwdG9LZXlITUFDJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3Rv
ckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRp
b25Db2RlJiBlYykKK3N0YXRpYyBnbnV0bHNfbWFjX2FsZ29yaXRobV90IGdldEdudXRsc0RpZ2Vz
dEFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hGdW5jdGlvbikKIHsKLSAg
ICAvLyBVbmltcGxlbWVudGVkIGFsZ29yaXRobSBzdHViCi0gICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKLSAgICBmYWlsdXJlQ2FsbGJhY2soKTsKLQotICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0
ZXJzKTsKLSAgICBVTlVTRURfUEFSQU0oa2V5KTsKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNrKTsKLSAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHN3
aXRjaCAoaGFzaEZ1bmN0aW9uKSB7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMToKKyAgICAgICAgcmV0dXJuIEdOVVRMU19NQUNfU0hBMTsKKyAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yMjQ6CisgICAgICAgIHJldHVybiBHTlVUTFNfTUFD
X1NIQTIyNDsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6Cisg
ICAgICAgIHJldHVybiBHTlVUTFNfTUFDX1NIQTI1NjsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OlNIQV8zODQ6CisgICAgICAgIHJldHVybiBHTlVUTFNfTUFDX1NIQTM4NDsK
KyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTI6CisgICAgICAgIHJl
dHVybiBHTlVUTFNfTUFDX1NIQTUxMjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gR05V
VExTX01BQ19VTktOT1dOOworICAgIH0KIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpw
bGF0Zm9ybVZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBwYXJhbWV0ZXJz
LCBjb25zdCBDcnlwdG9LZXlITUFDJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGV4
cGVjdGVkU2lnbmF0dXJlLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBCb29sQ2Fs
bGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBjYWxjdWxhdGVTaWduYXR1cmUoZ251dGxz
X21hY19hbGdvcml0aG1fdCBhbGdvcml0aG0sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhKQogewotICAgIC8vIFVuaW1wbGVtZW50ZWQg
YWxnb3JpdGhtIHN0dWIKLSAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgIGZhaWx1cmVD
YWxsYmFjaygpOwotCi0gICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOwotICAgIFVOVVNFRF9Q
QVJBTShrZXkpOwotICAgIFVOVVNFRF9QQVJBTShleHBlY3RlZFNpZ25hdHVyZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRhdGEpOwotICAgIFVOVVNFRF9QQVJBTShjYWxsYmFjayk7Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBzaXplX3QgZGlnZXN0TGVuZ3RoID0gZ251dGxzX2htYWNfZ2V0X2xl
bihhbGdvcml0aG0pOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChkaWdlc3RMZW5ndGgp
OworICAgIGNvbnN0IHZvaWQqIGtleURhdGEgPSBrZXkuZGF0YSgpID8ga2V5LmRhdGEoKSA6IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCIiKTsKKyAgICBpbnQgcmV0ID0gZ251dGxz
X2htYWNfZmFzdChhbGdvcml0aG0sIGtleURhdGEsIGtleS5zaXplKCksIGRhdGEuZmlyc3QsIGRh
dGEuc2Vjb25kLCByZXN1bHQuZGF0YSgpKTsKKyAgICBBU1NFUlQocmV0ID09IEdOVVRMU19FX1NV
Q0NFU1MpOworICAgIFVOVVNFRF9QQVJBTShyZXQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVNpZ24oY29uc3QgQ3J5cHRvQWxn
b3JpdGhtSG1hY1BhcmFtcyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5SE1BQyYga2V5LCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayBjYWxsYmFjaywg
Vm9pZENhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBnbnV0bHNfbWFjX2FsZ29y
aXRobV90IGFsZ29yaXRobSA9IGdldEdudXRsc0RpZ2VzdEFsZ29yaXRobShwYXJhbWV0ZXJzLmhh
c2gpOworICAgIGlmIChhbGdvcml0aG0gPT0gR05VVExTX01BQ19VTktOT1dOKSB7CisgICAgICAg
IGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwg
a2V5LmtleSgpLCBkYXRhKTsKKworICAgIGNhbGxiYWNrKHNpZ25hdHVyZSk7Cit9CisKK3ZvaWQg
Q3J5cHRvQWxnb3JpdGhtSE1BQzo6cGxhdGZvcm1WZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGht
SG1hY1BhcmFtcyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5SE1BQyYga2V5LCBjb25zdCBD
cnlwdG9PcGVyYXRpb25EYXRhJiBleHBlY3RlZFNpZ25hdHVyZSwgY29uc3QgQ3J5cHRvT3BlcmF0
aW9uRGF0YSYgZGF0YSwgQm9vbENhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2ssIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGdudXRsc19tYWNfYWxnb3JpdGhtX3QgYWxnb3JpdGhtID0g
Z2V0R251dGxzRGlnZXN0QWxnb3JpdGhtKHBhcmFtZXRlcnMuaGFzaCk7CisgICAgaWYgKGFsZ29y
aXRobSA9PSBHTlVUTFNfTUFDX1VOS05PV04pIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBzaWdu
YXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBrZXkua2V5KCksIGRhdGEpOwor
CisgICAgLy8gVXNpbmcgYSBjb25zdGFudCB0aW1lIGNvbXBhcmlzb24gdG8gcHJldmVudCB0aW1p
bmcgYXR0YWNrcy4KKyAgICBib29sIHJlc3VsdCA9IHNpZ25hdHVyZS5zaXplKCkgPT0gZXhwZWN0
ZWRTaWduYXR1cmUuc2Vjb25kICYmICFjb25zdGFudFRpbWVNZW1jbXAoc2lnbmF0dXJlLmRhdGEo
KSwgZXhwZWN0ZWRTaWduYXR1cmUuZmlyc3QsIHNpZ25hdHVyZS5zaXplKCkpOworCisgICAgY2Fs
bGJhY2socmVzdWx0KTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305635</attachid>
            <date>2017-03-28 13:30:33 -0700</date>
            <delta_ts>2017-03-29 22:51:20 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>213151</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">RnJvbSBhNjUxNTEyMDA3MWFhMGQwY2YyN2EzMDRmOGYzNzFjNDgzYWIyMzBkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBaYW4gRG9iZXJzZWsgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgpE
YXRlOiBUdWUsIDI4IE1hciAyMDE3IDE2OjMyOjU0ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gV0lQ
LgoKLS0tCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyAgICAgICAg
ICB8ICA3NyArLQogU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaCAg
ICAgICAgfCAgNTQgKysKIC4uLi9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9HQ3J5cHRI
YW5kbGUuaCAgIHwgMTA1ICsrKwogLi4uL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9HQ3J5cHRVdGls
aXRpZXMuaCAgICAgICAgfCAgMTggKwogLi4uL1BBTC9wYWwvY3J5cHRvL2dudXRscy9DcnlwdG9E
aWdlc3RHbnVUTFMuY3BwICAgfCAxMDIgLS0tCiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZSAgICAgICAgICAgICAgICAgICB8ICAyNyArLQogLi4uL2NyeXB0by9nY3J5cHQvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAgfCAxOTIgKysrKwogLi4uL2NyeXB0by9nY3J5cHQv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAgfCAxNTcgKysrKwogLi4uL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHAgfCAxOTAgKysrKwogLi4uL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcCAgfCAxMzUgKysrCiAu
Li4vY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1FQ0RIR0NyeXB0LmNwcCAgICB8IDExNyAr
KysKIC4uLi9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVBCS0RGMkdDcnlwdC5jcHAgIHwg
MTAwICsrKwogLi4uL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwICAg
ICAgfCAxODcgKysrKwogLi4uL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81R0NyeXB0
LmNwcCAgICAgfCAyMjAgKysrKy0KIC4uLi9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBH
Q3J5cHQuY3BwICAgICAgIHwgMjMxICsrKysrCiAuLi4vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlH
Q3J5cHQuY3BwfSAgICAgICAgICAgICB8ICAgOCArCiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcCB8IDgyMSArKysrKysrKysrKysrKysrKwogLi4uL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwICAgfCA5ODIgKysrKysr
KysrKysrKysrKysrKysrCiAuLi4vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0
LmNwcCAgICAgICB8IDE4MiArKysrCiAuLi4vY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDR251VExTLmNwcCB8ICA2MCAtLQogLi4uL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NGQkdudVRMUy5jcHAgfCAgNDggLQogLi4uL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0dDTUdudVRMUy5jcHAgfCAgNDggLQogLi4uL2NyeXB0by9nbnV0bHMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXR251VExTLmNwcCAgfCAgNjAgLS0KIC4uLi9jcnlwdG8vZ251dGxzL0Ny
eXB0b0FsZ29yaXRobUVDREhHbnVUTFMuY3BwICAgIHwgIDQyIC0KIC4uLi9jcnlwdG8vZ251dGxz
L0NyeXB0b0FsZ29yaXRobUhNQUNHbnVUTFMuY3BwICAgIHwgMTA5IC0tLQogLi4uL2NyeXB0by9n
bnV0bHMvQ3J5cHRvQWxnb3JpdGhtUEJLREYyR251VExTLmNwcCAgfCAgNDIgLQogLi4uL0NyeXB0
b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVHbnVUTFMuY3BwICAgICAgfCAgNjEgLS0KIC4uLi9D
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUdudVRMUy5jcHAgICAgIHwgIDYyIC0tCiAu
Li4vZ251dGxzL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQR251VExTLmNwcCAgICAgICB8ICA2MCAt
LQogU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9LZXlFQ0dudVRMUy5jcHAgfCAx
MjEgLS0tCiAuLi4vV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0tleVJTQUdudVRMUy5jcHAg
ICB8IDE0NSAtLS0KIC4uLi9nbnV0bHMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHbnVUTFMuY3Bw
ICAgICAgIHwgIDY1IC0tCiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5o
ICAgICAgICAgICB8ICAgNCArLQogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5
UlNBLmggICAgICAgICAgfCAgIDQgKy0KIDM0IGZpbGVzIGNoYW5nZWQsIDM3MTIgaW5zZXJ0aW9u
cygrKSwgMTEyNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvQVNOMS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdEhhbmRsZS5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxp
dGllcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8v
Z251dGxzL0NyeXB0b0RpZ2VzdEdudVRMUy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdv
cml0aG1BRVNfQ0ZCR0NyeXB0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFF
U19LV0dDcnlwdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Z2NyeXB0L0NyeXB0b0FsZ29yaXRobUVDREhHQ3J5cHQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9Dcnlw
dG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R0NyeXB0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBHQ3J5
cHQuY3BwCiByZW5hbWUgU291cmNlL1dlYkNvcmUvY3J5cHRvL3tnbnV0bHMvQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnlHbnVUTFMuY3BwID0+IGdjcnlwdC9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeUdD
cnlwdC5jcHB9ICg4OCUpCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlX
cmFwR0NyeXB0LmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9n
bnV0bHMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dudVRMUy5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobUFFU19DRkJHbnVU
TFMuY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9D
cnlwdG9BbGdvcml0aG1BRVNfR0NNR251VExTLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR251VExTLmNwcAog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxn
b3JpdGhtRUNESEdudVRMUy5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobUhNQUNHbnVUTFMuY3BwCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1QQktERjJH
bnVUTFMuY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRs
cy9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R251VExTLmNwcAogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NB
X1BLQ1MxX3YxXzVHbnVUTFMuY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUEdudVRMUy5jcHAKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0tleUVDR251VExT
LmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5
cHRvS2V5UlNBR251VExTLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nbnV0bHMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHbnVUTFMuY3BwCgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBkMjU3NzYxYWM2Yi4uMTAxMmFm
NmQ3NTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC03
MTIsNDkgKzcxMiw4IEBAIEJ1ZyhHVEspIGVkaXRpbmcvc2VjdXJlLWlucHV0IFsgRmFpbHVyZSBd
CiAKICMgY3J5cHRvLnN1YnRsZSBpcyBub3QgeWV0IGVuYWJsZWQsIGJ1dCBkaWdlc3QgYWxnb3Jp
dGhtcyBhcmUgYWxyZWFkeSBpbXBsZW1lbnRlZAogIyBhbmQgdGhlaXIgdGVzdHMgYXJlIHdoaXRl
bGlzdGVkCi13ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUgWyBTa2lwIF0KIHdlYmtp
dC5vcmcvYi8xMzMxMjIgY3J5cHRvL3dlYmtpdFN1YnRsZSBbIFNraXAgXQotd2Via2l0Lm9yZy9i
LzEzMzEyMiBjcnlwdG8vd29ya2Vycy9zdWJ0bGUgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvaG1h
Yy1leHBvcnQta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9z
dWJ0bGUvaG1hYy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1zaGExLmh0bWwgWyBQYXNzIF0KLWNy
eXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1zaGEyMjQuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWV4cG9ydC1rZXktandrLXNoYTI1Ni5o
dG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2st
c2hhMzg0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1leHBvcnQt
a2V5LWp3ay1zaGE1MTIuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRl
LWV4cG9ydC1yYXcta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0
ZS1rZXktY3VzdG9taXplZC1sZW5ndGguaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFj
LWdlbmVyYXRlLWtleS1oYXNoLW9iamVjdC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2ht
YWMtZ2VuZXJhdGUta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0
by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXktc2hhMS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2htYWMtZ2VuZXJhdGUta2V5LXNoYTIyNC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxl
L2htYWMtZ2VuZXJhdGUta2V5LXNoYTI1Ni5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2ht
YWMtZ2VuZXJhdGUta2V5LXNoYTM4NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMt
Z2VuZXJhdGUta2V5LXNoYTUxMi5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2Vu
ZXJhdGUta2V5LXNpZ24tdmVyaWZ5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1p
bXBvcnQtandrLWtleS1leHBvcnQtandrLWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxl
L2htYWMtaW1wb3J0LWp3ay1rZXktZXhwb3J0LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LW1pbmltdW0uaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LW5vbi1leHRyYWN0YWJsZS5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWp3ay1rZXktc2hhMS5odG1sIFsgUGFzcyBdCi1j
cnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWp3ay1rZXktc2hhMjI0Lmh0bWwgWyBQYXNzIF0KLWNy
eXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtandrLWtleS1zaGEyNTYuaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LXNoYTM4NC5odG1sIFsgUGFzcyBdCi1jcnlw
dG8vc3VidGxlL2htYWMtaW1wb3J0LWp3ay1rZXktc2hhNTEyLmh0bWwgWyBQYXNzIF0KLWNyeXB0
by9zdWJ0bGUvaG1hYy1pbXBvcnQta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNz
IF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQta2V5LXNpZ24tc2hhMS5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTIyNC5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTI1Ni5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTM4NC5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTUxMi5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS12ZXJpZnktc2hhMS5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS12ZXJpZnktc2hhMjI0Lmh0bWwgWyBQYXNz
IF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQta2V5LXZlcmlmeS1zaGEyNTYuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktdmVyaWZ5LXNoYTM4NC5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS12ZXJpZnktc2hhNTEyLmh0bWwg
WyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtcmF3LWtleS1jdXN0b21pemVkLWxl
bmd0aC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LXJhdy1rZXktZXhw
b3J0LWp3ay1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1yYXct
a2V5LWV4cG9ydC1yYXcta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBv
cnQtcmF3LWtleS5odG1sIFsgUGFzcyBdCisKIHdlYmtpdC5vcmcvYi8xMzMzMTkgY3J5cHRvL3dl
YmtpdFN1YnRsZS9zaGEtMS5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTMzMzE5IGNyeXB0
by93ZWJraXRTdWJ0bGUvc2hhLTIyNC5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTMzMzE5
IGNyeXB0by93ZWJraXRTdWJ0bGUvc2hhLTI1Ni5odG1sIFsgUGFzcyBdCkBAIC03NjcsNDEgKzcy
Niw5IEBAIHdlYmtpdC5vcmcvYi8xMzMzMjAgY3J5cHRvL3dlYmtpdFN1YnRsZS9obWFjLWltcG9y
dC1qd2suaHRtbCBbIFBhc3MgXQogd2Via2l0Lm9yZy9iLzEzMzMyMCBjcnlwdG8vd2Via2l0U3Vi
dGxlL2htYWMtc2lnbi12ZXJpZnktZW1wdHkta2V5Lmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcv
Yi8xMzMzMjAgY3J5cHRvL3dlYmtpdFN1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwgWyBQYXNz
IF0KIAorIyBXZSdyZSBhY3R1YWxseSBwYXNzaW5nIG1vcmUgc3ViLXRlc3RzIGhlcmUgdGhhbiB0
aGUgYmFzZWxpbmVzIGV4cGVjdC4KIHdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L2Flc19jYmMud29y
a2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L2Flc19nY20ud29y
a2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L3JzYS53b3JrZXIu
aHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9lbmNyeXB0X2RlY3J5cHQvdGVzdF9hZXNfY2JjLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L3Rlc3RfYWVzX2djbS5odG1s
IFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC90ZXN0X3JzYV9vYWVwLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvZmFpbHVyZXNfQUVTLUdDTS53b3JrZXIu
aHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS9mYWlsdXJlc19SU0EtT0FFUC53
b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS9mYWlsdXJlc19SU0FT
U0EtUEtDUzEtdjFfNS53b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEy
MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtl
eS9zdWNjZXNzZXNfQUVTLUdDTS53b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9i
LzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5l
cmF0ZUtleS9zdWNjZXNzZXNfUlNBU1NBLVBLQ1MxLXYxXzUud29ya2VyLmh0bWwgWyBGYWlsdXJl
IF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9X
ZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9mYWlsdXJlc19BRVMtR0NNLmh0bWwgWyBGYWls
dXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9mYWlsdXJlc19SU0EtT0FFUC5odG1sIFsg
RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvV2ViQ3J5cHRvQVBJL2dlbmVyYXRlS2V5L3Rlc3RfZmFpbHVyZXNfUlNBU1NBLVBLQ1Mx
LXYxXzUuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS90ZXN0X3N1Y2Nlc3Nl
c19BRVMtR0NNLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9zdWNj
ZXNzZXNfUlNBU1NBLVBLQ1MxLXYxXzUuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEz
MzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9pbXBvcnRf
ZXhwb3J0L3JzYV9pbXBvcnRLZXkud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcv
Yi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvaW1w
b3J0X2V4cG9ydC9zeW1tZXRyaWNfaW1wb3J0S2V5Lndvcmtlci5odG1sIFsgRmFpbHVyZSBdCi13
ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5
cHRvQVBJL2ltcG9ydF9leHBvcnQvdGVzdF9yc2FfaW1wb3J0S2V5Lmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJD
cnlwdG9BUEkvaW1wb3J0X2V4cG9ydC90ZXN0X3N5bW1ldHJpY19pbXBvcnRLZXkuaHRtbCBbIEZh
aWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1dlYkNyeXB0b0FQSS9zaWduX3ZlcmlmeS9yc2FfcGtjcy53b3JrZXIuaHRtbCBbIEZhaWx1
cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L1dlYkNyeXB0b0FQSS9zaWduX3ZlcmlmeS9yc2FfcHNzLndvcmtlci5odG1sIFsgRmFpbHVyZSBd
Ci13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2Vi
Q3J5cHRvQVBJL3NpZ25fdmVyaWZ5L3Rlc3RfcnNhX3BrY3MuaHRtbCBbIEZhaWx1cmUgXQotd2Vi
a2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0
b0FQSS9zaWduX3ZlcmlmeS90ZXN0X3JzYV9wc3MuaHRtbCBbIEZhaWx1cmUgXQotIyBXZSBkb24n
dCBzdXBwb3J0IEVDREggZnVuY3Rpb25zCi13ZWJraXQub3JnL2IvMTY5MjcyIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2dlbmVyYXRlS2V5L2ZhaWx1cmVzX0VD
REgud29ya2VyLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xNjkyNzIgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvc3VjY2Vzc2VzX0VD
REgud29ya2VyLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xNjkyNzIgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9mYWlsdXJl
c19FQ0RILmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xNjkyNzIgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9zdWNjZXNzZXNf
RUNESC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTY5MjcyIGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2ltcG9ydF9leHBvcnQvZWNfaW1wb3J0S2V5Lndv
cmtlci5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTY5MjcyIGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2ltcG9ydF9leHBvcnQvdGVzdF9lY19pbXBvcnRL
ZXkuaHRtbCBbIFNraXAgXQotIyBXZSBkb24ndCBzdXBwb3J0IFBCS0RGMgotd2Via2l0Lm9yZy9i
LzE2OTUyOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9kZXJp
dmVfYml0c19rZXlzL3Bia2RmMi53b3JrZXIuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzE2
OTUyOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9kZXJpdmVf
Yml0c19rZXlzL3Rlc3RfcGJrZGYyLmh0bWwgWyBTa2lwIF0KLQogCiAjIEdUSyBkb2VzIG5vdCBp
bXBsZW1lbnQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQKIGVkaXRpbmcvaW5zZXJ0
aW5nL3R5cGluZy1zcGFjZS10by10cmlnZ2VyLXNtYXJ0LWxpbmsuaHRtbCBbIFNraXAgXQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaCBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9BU04xLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE1MWM1ZTEyOTNmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaApAQCAtMCwwICsxLDU0
IEBACisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFj
ZSBBU04xIHsKKworZW51bSBUYWcgOiB1aW50OF90IHsKKyAgICBJbnRlZ2VyID0gMHgwMiwKKyAg
ICBCaXRTdHJpbmcgPSAweDAzLAorICAgIE9jdGV0U3RyaW5nID0gMHgwNCwKKyAgICBPYmplY3RJ
ZGVudGlmaWVyID0gMHgwNiwKKyAgICBTZXF1ZW5jZSA9IDB4MzAsCit9OworCitzdHJ1Y3QgVExW
IHsKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSB7IDAgfTsKKyAgICBzaXplX3QgYnVmZmVyT2Zmc2V0
IHsgMCB9OworCisgICAgdWludDhfdCB0YWcgeyAwIH07CisgICAgc2l6ZV90IGxlbmd0aCB7IDAg
fTsKKyAgICBzaXplX3Qgb2Zmc2V0IHsgMCB9OworCisgICAgc2l6ZV90IHZhbHVlT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gYnVmZmVyT2Zmc2V0ICsgb2Zmc2V0OyB9CisgICAgYm9vbCBoYXNUYWco
VGFnIHRhcmdldFRhZykgY29uc3QgeyByZXR1cm4gdGFnID09IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHRhcmdldFRhZyk7IH0KK307CisKK3N0YXRpYyBUTFYgcGFyc2VUTFYoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBidWZmZXIsIGNvbnN0IHNpemVfdCBvZmZzZXQpCit7CisgICAgaWYgKG9mZnNldCAr
IDIgPiBidWZmZXIuc2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgdWludDhfdCB0
YWcgPSBidWZmZXJbb2Zmc2V0XTsKKyAgICBzaXplX3QgbGVuZ3RoID0gYnVmZmVyW29mZnNldCAr
IDFdOworICAgIHNpemVfdCBsZW5ndGhCeXRlcyA9IDE7CisKKyAgICBpZiAobGVuZ3RoID4gMTI4
KSB7CisgICAgICAgIGxlbmd0aEJ5dGVzID0gbGVuZ3RoIC0gMTI4OworICAgICAgICBpZiAob2Zm
c2V0ICsgMiArIGxlbmd0aEJ5dGVzID4gYnVmZmVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biB7IH07CisKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGhCeXRlczsgKytpKQorICAgICAgICAgICAgbGVuZ3RoICs9IGJ1ZmZlcltvZmZz
ZXQgKyAyICsgaV0gPDwgKChsZW5ndGhCeXRlcyAtIGkgLSAxKSAqIDgpOworCisgICAgICAgIGxl
bmd0aEJ5dGVzICs9IDE7CisgICAgfQorCisgICAgaWYgKG9mZnNldCArIDEgKyBsZW5ndGhCeXRl
cyArIGxlbmd0aCA+IGJ1ZmZlci5zaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBy
ZXR1cm4geyAxICsgbGVuZ3RoQnl0ZXMgKyBsZW5ndGgsIG9mZnNldCwgdGFnLCBsZW5ndGgsIDEg
KyBsZW5ndGhCeXRlcyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBBU04xCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0SGFuZGxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0SGFuZGxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYxZTA5MWQ5NjRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdEhhbmRsZS5o
CkBAIC0wLDAgKzEsMTA1IEBACisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGdjcnlwdC5oPgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEdDcnlwdERlbGV0ZXIgeworcHVibGljOgor
ICAgIHZvaWQgb3BlcmF0b3IoKShUIGhhbmRsZSkgPSBkZWxldGU7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgR0NyeXB0SGFuZGxlIHsKK3B1YmxpYzoKKyAgICBHQ3J5cHRIYW5k
bGUoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBHQ3J5cHRIYW5kbGUoVCBoYW5kbGUpCisg
ICAgICAgIDogbV9oYW5kbGUoaGFuZGxlKQorICAgIHsgfQorCisgICAgfkdDcnlwdEhhbmRsZSgp
CisgICAgeworICAgICAgICBjbGVhcigpOworICAgIH0KKworICAgIEdDcnlwdEhhbmRsZShjb25z
dCBHQ3J5cHRIYW5kbGUmKSA9IGRlbGV0ZTsKKyAgICBHQ3J5cHRIYW5kbGUmIG9wZXJhdG9yPShj
b25zdCBHQ3J5cHRIYW5kbGUmKSA9IGRlbGV0ZTsKKworICAgIEdDcnlwdEhhbmRsZShHQ3J5cHRI
YW5kbGUmJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1faGFuZGxlID0gb3RoZXIubV9oYW5kbGU7
CisgICAgICAgIG90aGVyLm1faGFuZGxlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHQ3J5cHRI
YW5kbGUmIG9wZXJhdG9yPShHQ3J5cHRIYW5kbGUmJiBvdGhlcikKKyAgICB7CisgICAgICAgIGNs
ZWFyKCk7CisgICAgICAgIG1faGFuZGxlID0gb3RoZXIubV9oYW5kbGU7CisgICAgICAgIG90aGVy
Lm1faGFuZGxlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgICAgIEdDcnlwdERlbGV0ZXI8VD4oKShtX2hh
bmRsZSk7CisgICAgICAgIG1faGFuZGxlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBUIHJlbGVh
c2UoKQorICAgIHsKKyAgICAgICAgVCBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICAgICAgbV9oYW5k
bGUgPSBudWxscHRyOworICAgICAgICByZXR1cm4gaGFuZGxlOworICAgIH0KKworICAgIFQqIHB0
cigpIGNvbnN0IHsgcmV0dXJuICZtX2hhbmRsZTsgfQorICAgIFQqIG9wZXJhdG9yJigpIHsgcmV0
dXJuICZtX2hhbmRsZTsgfQorCisgICAgVCBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRs
ZTsgfQorICAgIG9wZXJhdG9yIFQoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZTsgfQorCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9oYW5kbGU7IH0KKworcHJpdmF0ZToK
KyAgICBUIG1faGFuZGxlIHsgbnVsbHB0ciB9OworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEdD
cnlwdERlbGV0ZXI8Z2NyeV9jaXBoZXJfaGRfdD4geworICAgIHZvaWQgb3BlcmF0b3IoKShnY3J5
X2NpcGhlcl9oZF90IGhhbmRsZSkKKyAgICB7CisgICAgICAgIGdjcnlfY2lwaGVyX2Nsb3NlKGhh
bmRsZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEdDcnlwdERlbGV0ZXI8Z2Ny
eV9zZXhwX3Q+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoZ2NyeV9zZXhwX3QgaGFuZGxlKQorICAg
IHsKKyAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgR0NyeXB0RGVsZXRlcjxnY3J5X21waV90PiB7CisgICAgdm9pZCBvcGVy
YXRvcigpKGdjcnlfbXBpX3QgaGFuZGxlKQorICAgIHsKKyAgICAgICAgZ2NyeV9tcGlfcmVsZWFz
ZShoYW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBHQ3J5cHREZWxldGVy
PGdjcnlfbXBpX3BvaW50X3Q+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoZ2NyeV9tcGlfcG9pbnRf
dCBoYW5kbGUpCisgICAgeworICAgICAgICBnY3J5X21waV9wb2ludF9yZWxlYXNlKGhhbmRsZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEdDcnlwdERlbGV0ZXI8Z2NyeV9jdHhf
dD4geworICAgIHZvaWQgb3BlcmF0b3IoKShnY3J5X2N0eF90IGhhbmRsZSkKKyAgICB7CisgICAg
ICAgIGdjcnlfY3R4X3JlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NGJkMDI1YjY3ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9HQ3J5cHRVdGls
aXRpZXMuaApAQCAtMCwwICsxLDE4IEBACisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGdjcnlw
dC5oPgorI2luY2x1ZGUgPFdURi93dGYvT3B0aW9uYWwuaD4KKworc3RhdGljIHN0ZDo6b3B0aW9u
YWw8aW50PiBhZXNBbGdvcml0aG1Gb3JLZXlTaXplKHNpemVfdCBrZXlTaXplKQoreworICAgIHN3
aXRjaCAoa2V5U2l6ZSkgeworICAgIGNhc2UgMTI4OgorICAgICAgICByZXR1cm4gR0NSWV9DSVBI
RVJfQUVTMTI4OworICAgIGNhc2UgMTkyOgorICAgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfQUVT
MTkyOworICAgIGNhc2UgMjU2OgorICAgICAgICByZXR1cm4gR0NSWV9DSVBIRVJfQUVTMjU2Owor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ251dGxzL0NyeXB0b0RpZ2Vz
dEdudVRMUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nbnV0bHMvQ3J5cHRv
RGlnZXN0R251VExTLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU2YjhmYmJk
YTAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2dudXRs
cy9DcnlwdG9EaWdlc3RHbnVUTFMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNyeXB0b0RpZ2Vz
dC5oIgotCi0jaW5jbHVkZSA8Z251dGxzL2dudXRscy5oPgotI2luY2x1ZGUgPGdudXRscy9jcnlw
dG8uaD4KLQotbmFtZXNwYWNlIFBBTCB7Ci0KLXN0cnVjdCBDcnlwdG9EaWdlc3RDb250ZXh0IHsK
LSAgICBnbnV0bHNfZGlnZXN0X2FsZ29yaXRobV90IGFsZ29yaXRobTsKLSAgICBnbnV0bHNfaGFz
aF9oZF90IGhhc2g7Ci19OwotCi1DcnlwdG9EaWdlc3Q6OkNyeXB0b0RpZ2VzdCgpCi0gICAgOiBt
X2NvbnRleHQobmV3IENyeXB0b0RpZ2VzdENvbnRleHQpCi17Ci19Ci0KLUNyeXB0b0RpZ2VzdDo6
fkNyeXB0b0RpZ2VzdCgpCi17Ci0gICAgZ251dGxzX2hhc2hfZGVpbml0KG1fY29udGV4dC0+aGFz
aCwgMCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IENyeXB0b0RpZ2VzdDo6
Y3JlYXRlKENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobSkKLXsKLSAgICBnbnV0bHNf
ZGlnZXN0X2FsZ29yaXRobV90IGdudXRsc0FsZ29yaXRobTsKLQotICAgIHN3aXRjaCAoYWxnb3Jp
dGhtKSB7Ci0gICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzE6IHsKLSAgICAg
ICAgZ251dGxzQWxnb3JpdGhtID0gR05VVExTX0RJR19TSEExOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzIyNDogewotICAgICAg
ICBnbnV0bHNBbGdvcml0aG0gPSBHTlVUTFNfRElHX1NIQTIyNDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTY6IHsKLSAgICAg
ICAgZ251dGxzQWxnb3JpdGhtID0gR05VVExTX0RJR19TSEEyNTY7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMzg0OiB7Ci0gICAg
ICAgIGdudXRsc0FsZ29yaXRobSA9IEdOVVRMU19ESUdfU0hBMzg0OwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzUxMjogewotICAg
ICAgICBnbnV0bHNBbGdvcml0aG0gPSBHTlVUTFNfRElHX1NIQTUxMjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2Vz
dChuZXcgQ3J5cHRvRGlnZXN0KTsKLSAgICBkaWdlc3QtPm1fY29udGV4dC0+YWxnb3JpdGhtID0g
Z251dGxzQWxnb3JpdGhtOwotCi0gICAgaW50IHJldCA9IGdudXRsc19oYXNoX2luaXQoJmRpZ2Vz
dC0+bV9jb250ZXh0LT5oYXNoLCBnbnV0bHNBbGdvcml0aG0pOwotICAgIGlmIChyZXQgIT0gR05V
VExTX0VfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gZGln
ZXN0OwotfQotCi12b2lkIENyeXB0b0RpZ2VzdDo6YWRkQnl0ZXMoY29uc3Qgdm9pZCogaW5wdXQs
IHNpemVfdCBsZW5ndGgpCi17Ci0gICAgZ251dGxzX2hhc2gobV9jb250ZXh0LT5oYXNoLCBpbnB1
dCwgbGVuZ3RoKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhh
c2goKQotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7Ci0gICAgaW50IGRpZ2VzdExlbiA9
IGdudXRsc19oYXNoX2dldF9sZW4obV9jb250ZXh0LT5hbGdvcml0aG0pOwotICAgIHJlc3VsdC5y
ZXNpemUoZGlnZXN0TGVuKTsKLQotICAgIGdudXRsc19oYXNoX291dHB1dChtX2NvbnRleHQtPmhh
c2gsIHJlc3VsdC5kYXRhKCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDY3YjkyYzZiOTZlLi40ZWEw
ZjA4MGY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTQwMCwxOSArNDAwLDIwIEBA
IGlmIChFTkFCTEVfU1VCVExFX0NSWVBUTykKIAogICAgICAgICBjcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUhNQUNHQ3J5cHQuY3BwCiAKLSAgICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDR251VExTLmNwcAotICAgICAgICBjcnlwdG8vZ251dGxzL0NyeXB0b0Fs
Z29yaXRobUFFU19DRkJHbnVUTFMuY3BwCi0gICAgICAgIGNyeXB0by9nbnV0bHMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0dDTUdudVRMUy5jcHAKLSAgICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9BbGdv
cml0aG1BRVNfS1dHbnVUTFMuY3BwCi0gICAgICAgIGNyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3Jp
dGhtRUNESEdudVRMUy5jcHAKLSAgICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1Q
QktERjJHbnVUTFMuY3BwCi0gICAgICAgIGNyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3JpdGhtUlNB
RVNfUEtDUzFfdjFfNUdudVRMUy5jcHAKLSAgICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9BbGdv
cml0aG1SU0FTU0FfUEtDUzFfdjFfNUdudVRMUy5jcHAKLSAgICAgICAgY3J5cHRvL2dudXRscy9D
cnlwdG9BbGdvcml0aG1SU0FfT0FFUEdudVRMUy5jcHAKLSAgICAgICAgY3J5cHRvL2dudXRscy9D
cnlwdG9BbGdvcml0aG1SZWdpc3RyeUdudVRMUy5jcHAKLSAgICAgICAgY3J5cHRvL2dudXRscy9D
cnlwdG9LZXlFQ0dudVRMUy5jcHAKLSAgICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9LZXlSU0FH
bnVUTFMuY3BwCi0gICAgICAgIGNyeXB0by9nbnV0bHMvU2VyaWFsaXplZENyeXB0b0tleVdyYXBH
bnVUTFMuY3BwCisgICAgICAgIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dD
cnlwdC5jcHAKKyAgICAgICAgY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR0Ny
eXB0LmNwcAorCisgICAgICAgIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdD
cnlwdC5jcHAKKyAgICAgICAgY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfS1dHQ3J5
cHQuY3BwCisgICAgICAgIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtRUNESEdDcnlwdC5j
cHAKKyAgICAgICAgY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3Bw
CisgICAgICAgIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNUdD
cnlwdC5jcHAKKyAgICAgICAgY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtD
UzFfdjFfNUdDcnlwdC5jcHAKKyAgICAgICAgY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1S
U0FfT0FFUEdDcnlwdC5jcHAKKyAgICAgICAgY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeUdDcnlwdC5jcHAKKyAgICAgICAgY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlw
dC5jcHAKKyAgICAgICAgY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCisgICAg
ICAgIGNyeXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCiAKICAg
ICAgICAgY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAogICAgICAgICBjcnlwdG8va2V5cy9D
cnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZTE1NjRiYjZjMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQ0dDcnlwdC5jcHAKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKKworI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdEhh
bmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0KQoreworICAgIGF1
dG8gYWxnb3JpdGhtID0gYWVzQWxnb3JpdGhtRm9yS2V5U2l6ZShrZXkuc2l6ZSgpICogOCk7Cisg
ICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBH
Q3J5cHRIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgIGdjcnlfZXJyb3JfdCBl
cnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBIRVJf
TU9ERV9DQkMsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXko
aGFuZGxlLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGVycm9yID0g
Z2NyeV9jaXBoZXJfc2V0aXYoaGFuZGxlLCBpdi5kYXRhKCksIGl2LnNpemUoKSk7CisgICAgaWYg
KGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICB7CisgICAgICAgIC8vIFBLQ1MjNworICAgICAgICBzaXplX3QgcGFkZGVkU2l6ZSA9
IHJvdW5kVXBUb011bHRpcGxlT2YoZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuKCphbGdvcml0
aG0pLCBwbGFpblRleHQuc2l6ZSgpICsgMSk7CisgICAgICAgIHNpemVfdCBwYWRkaW5nID0gcGFk
ZGVkU2l6ZSAtIHBsYWluVGV4dC5zaXplKCk7CisgICAgICAgIHBsYWluVGV4dC5yZXNpemUocGFk
ZGVkU2l6ZSk7CisgICAgICAgIHN0ZDo6bWVtc2V0KHBsYWluVGV4dC5lbmQoKSAtIHBhZGRpbmcs
IHBhZGRpbmcsIHBhZGRpbmcpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBvdXRwdXQo
cGxhaW5UZXh0LnNpemUoKSk7CisKKyAgICBnY3J5X2NpcGhlcl9maW5hbChoYW5kbGUpOworICAg
IGVycm9yID0gZ2NyeV9jaXBoZXJfZW5jcnlwdChoYW5kbGUsIG91dHB1dC5kYXRhKCksIG91dHB1
dC5zaXplKCksIHBsYWluVGV4dC5kYXRhKCksIHBsYWluVGV4dC5zaXplKCkpOworICAgIGlmIChl
cnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy
b3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVy
cm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
cmV0dXJuIFdURk1vdmUob3V0cHV0KTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGl2LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0KQorewor
ICAgIGF1dG8gYWxnb3JpdGhtID0gYWVzQWxnb3JpdGhtRm9yS2V5U2l6ZShrZXkuc2l6ZSgpICog
OCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgIGdjcnlfZXJy
b3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NSWV9D
SVBIRVJfTU9ERV9DQkMsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9z
ZXRrZXkoaGFuZGxlLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGVy
cm9yID0gZ2NyeV9jaXBoZXJfc2V0aXYoaGFuZGxlLCBpdi5kYXRhKCksIGl2LnNpemUoKSk7Cisg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGNpcGhlclRleHQuc2l6ZSgpKTsK
KworICAgIGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7CisgICAgZXJyb3IgPSBnY3J5X2NpcGhl
cl9kZWNyeXB0KGhhbmRsZSwgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgY2lwaGVyVGV4
dC5kYXRhKCksIGNpcGhlclRleHQuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwg
ZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gUEtD
UyM3CisgICAgICAgIHVpbnQ4X3QgcGFkZGluZyA9IG91dHB1dC5sYXN0KCk7CisgICAgICAgIGlm
IChwYWRkaW5nID4gZ2NyeV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuKCphbGdvcml0aG0pKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBzaXplX3Qgc2l6ZSA9IG91
dHB1dC5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFkZGluZzsgKytp
KSB7CisgICAgICAgICAgICBpZiAob3V0cHV0W3NpemUgLSBpIC0gMV0gIT0gcGFkZGluZykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAg
b3V0cHV0LnJlc2l6ZShzaXplIC0gcGFkZGluZyk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1v
dmUob3V0cHV0KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVu
Y3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1l
dGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwg
VmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25D
YWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3Jr
UXVldWUpCit7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisg
ICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShr
ZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayks
ICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9
IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOwor
ICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0
KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEVuY3J5cHQoYWVzS2V5Lmtl
eSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUocGxhaW5UZXh0KSk7CisgICAg
ICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2so
CisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAg
ICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cit9CisK
K3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9L
ZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYm
IGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBj
b250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRl
cnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQg
PSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBt
dXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlw
dG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1
dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAg
ICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZWNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1l
dGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKKyAgICAgICAgICAgIGlmICgh
b3V0cHV0KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAg
ICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJh
dGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUo
ZXhjZXB0aW9uQ2FsbGJhY2spLCBvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpXShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKK30KKworRXhjZXB0aW9uT3I8
dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0
b0FsZ29yaXRobUFlc0NiY1BhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlBRVMmLCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNr
JiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X1NVUFBPUlRFRF9FUlIgfTsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFt
c0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25E
YXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29y
aXRobUFFU19DRkJHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0ZCR0NyeXB0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uNTYwZTYxMjFkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwCkBAIC0wLDAg
KzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNy
eXB0b0FsZ29yaXRobUFFU19DRkIuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisj
aW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2Jj
Q2ZiUGFyYW1zLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdEhhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlw
dG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVp
bnQ4X3Q+JiYgcGxhaW5UZXh0KQoreworICAgIGF1dG8gYWxnb3JpdGhtID0gYWVzQWxnb3JpdGht
Rm9yS2V5U2l6ZShrZXkuc2l6ZSgpICogOCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9jaXBoZXJfaGRf
dD4gaGFuZGxlOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhh
bmRsZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBIRVJfTU9ERV9DRkI4LCAwKTsKKyAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwga2V5LmRhdGEoKSwga2V5LnNp
emUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGl2KGhhbmRsZSwg
aXYuZGF0YSgpLCBpdi5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9S
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91
dHB1dChwbGFpblRleHQuc2l6ZSgpKTsKKworICAgIGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7
CisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9lbmNyeXB0KGhhbmRsZSwgb3V0cHV0LmRhdGEoKSwg
b3V0cHV0LnNpemUoKSwgcGxhaW5UZXh0LmRhdGEoKSwgcGxhaW5UZXh0LnNpemUoKSk7CisgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlf
c3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisK
KyAgICByZXR1cm4gV1RGTW92ZShvdXRwdXQpOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGdjcnlwdERlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXks
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQp
Cit7CisgICAgYXV0byBhbGdvcml0aG0gPSBhZXNBbGdvcml0aG1Gb3JLZXlTaXplKGtleS5zaXpl
KCkgKiA4KTsKKyAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIEdDcnlwdEhhbmRsZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2Ny
eV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBH
Q1JZX0NJUEhFUl9NT0RFX0NGQjgsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2Np
cGhlcl9zZXRrZXkoaGFuZGxlLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0aXYoaGFuZGxlLCBpdi5kYXRhKCksIGl2LnNpemUo
KSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGNpcGhlclRleHQuc2l6
ZSgpKTsKKworICAgIGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7CisgICAgZXJyb3IgPSBnY3J5
X2NpcGhlcl9kZWNyeXB0KGhhbmRsZSwgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgY2lw
aGVyVGV4dC5kYXRhKCksIGNpcGhlclRleHQuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8l
c1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikp
OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBXVEZN
b3ZlKG91dHB1dCk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1F
bmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFt
ZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQs
IFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9u
Q2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29y
a1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAor
ICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUo
a2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMg
PSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5Lmdl
dCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tleS5r
ZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKHBsYWluVGV4dCkpOworICAg
ICAgICAgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNr
KAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAg
ICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxi
YWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIG91dHB1dCA9IFdURk1vdmUoKm91dHB1
dCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworfQor
Cit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRv
S2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAg
Y29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0
ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0
ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5
cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBh
dXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAgICAg
ICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFt
ZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAo
IW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAg
ICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFj
ayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVy
YXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KV0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0Ny
eXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVT
X0dDTUdDcnlwdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU4
OTk4N2IzMjIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlw
dC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcApAQCAtMCwwICsxLDE5MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1B
RVNfR0NNLmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobUFlc0djbVBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2dj
cnlwdC9HQ3J5cHRIYW5kbGUuaD4KKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9HQ3J5cHRV
dGlsaXRpZXMuaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGFkZGl0aW9uYWxEYXRhLCB1aW50OF90IHRhZ0xlbmd0aCkKK3sKKyAgICBhdXRv
IGFsZ29yaXRobSA9IGFlc0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgpOworICAg
IGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgR0Ny
eXB0SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsKKyAgICBnY3J5X2Vycm9yX3QgZXJy
b3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01P
REVfR0NNLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhh
bmRsZSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBlcnJvciA9IGdj
cnlfY2lwaGVyX3NldGl2KGhhbmRsZSwgaXYuZGF0YSgpLCBpdi5zaXplKCkpOworICAgIGlmIChl
cnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgaWYgKCFhZGRpdGlvbmFsRGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZXJyb3IgPSBn
Y3J5X2NpcGhlcl9hdXRoZW50aWNhdGUoaGFuZGxlLCBhZGRpdGlvbmFsRGF0YS5kYXRhKCksIGFk
ZGl0aW9uYWxEYXRhLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBWZWN0
b3I8dWludDhfdD4gb3V0cHV0KHBsYWluVGV4dC5zaXplKCkpOworCisgICAgZ2NyeV9jaXBoZXJf
ZmluYWwoaGFuZGxlKTsKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQoaGFuZGxlLCBv
dXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBwbGFpblRleHQuZGF0YSgpLCBwbGFpblRleHQu
c2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNl
KGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0YWcodGFnTGVuZ3RoKTsKKyAgICBl
cnJvciA9IGdjcnlfY2lwaGVyX2dldHRhZyhoYW5kbGUsIHRhZy5kYXRhKCksIHRhZy5zaXplKCkp
OworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgb3V0cHV0LmFwcGVuZCh0YWcuZGF0YSgpLCB0YWdMZW5ndGgpOwor
ICAgIAorICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVjcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVy
VGV4dCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhZGRpdGlvbmFsRGF0YSwgdWludDhfdCB0YWdM
ZW5ndGgpCit7CisgICAgYXV0byBhbGdvcml0aG0gPSBhZXNBbGdvcml0aG1Gb3JLZXlTaXplKGtl
eS5zaXplKCkgKiA4KTsKKyAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIEdDcnlwdEhhbmRsZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7Cisg
ICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3Jp
dGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0dDTSwgMCk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBlcnJvciA9IGdj
cnlfY2lwaGVyX3NldGtleShoYW5kbGUsIGtleS5kYXRhKCksIGtleS5zaXplKCkpOworICAgIGlm
IChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRpdihoYW5kbGUsIGl2LmRhdGEoKSwgaXYu
c2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghYWRkaXRpb25hbERhdGEuaXNFbXB0eSgpKSB7
CisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfYXV0aGVudGljYXRlKGhhbmRsZSwgYWRkaXRp
b25hbERhdGEuZGF0YSgpLCBhZGRpdGlvbmFsRGF0YS5zaXplKCkpOworICAgICAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3Ry
ZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGNpcGhlclRleHQuc2l6ZSgp
IC0gdGFnTGVuZ3RoKTsKKworICAgIGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7CisgICAgZXJy
b3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KGhhbmRsZSwgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNp
emUoKSwgY2lwaGVyVGV4dC5kYXRhKCksIGNpcGhlclRleHQuc2l6ZSgpIC0gdGFnTGVuZ3RoKTsK
KyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwg
Z2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0YWcodGFnTGVuZ3RoKTsKKyAgICBlcnJvciA9IGdj
cnlfY2lwaGVyX2dldHRhZyhoYW5kbGUsIHRhZy5kYXRhKCksIHRhZ0xlbmd0aCk7CisgICAgaWYg
KGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3Ry
ZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBzaXplX3Qgb2Zmc2V0ID0gY2lwaGVyVGV4dC5zaXplKCkgLSB0YWdMZW5ndGg7CisgICAgaWYg
KGNvbnN0YW50VGltZU1lbWNtcCh0YWcuZGF0YSgpLCBjaXBoZXJUZXh0LmRhdGEoKSArIG9mZnNl
dCwgdGFnTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biBXVEZNb3ZlKG91dHB1dCk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxh
dGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
IHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFp
blRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhj
ZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1
ZSYgd29ya1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3Bh
dGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdU
Rk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFt
ZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KCpwYXJhbWV0ZXJz
KTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5
LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tl
eS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKHBsYWluVGV4dCksIGFl
c1BhcmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5n
dGgudmFsdWVfb3IoMCkgLyA4KTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCBvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRw
dXQpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpw
bGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNp
cGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYg
ZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtR
dWV1ZSYgd29ya1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRp
c3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9
IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgYWVz
UGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcz4oKnBhcmFt
ZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVT
PihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQo
YWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUoY2lwaGVyVGV4
dCksIGFlc1BhcmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50
YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4KTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCBvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92
ZShvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNiYTU2MmNmYmY4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0
aG1BRVNfS1dHQ3J5cHQuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BRVNfS1cuaCIKKworI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0SGFuZGxlLmg+CisjaW5jbHVkZSA8cGFsL2Ny
eXB0by9nY3J5cHQvR0NyeXB0VXRpbGl0aWVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHRXcmFwKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAg
YXV0byBhbGdvcml0aG0gPSBhZXNBbGdvcml0aG1Gb3JLZXlTaXplKGtleS5zaXplKCkgKiA4KTsK
KyAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IEdDcnlwdEhhbmRsZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2NyeV9lcnJvcl90
IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBHQ1JZX0NJUEhF
Ul9NT0RFX0FFU1dSQVAsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9z
ZXRrZXkoaGFuZGxlLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAl
cy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJv
cikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1
aW50OF90PiBvdXRwdXQoZGF0YS5zaXplKCkgKyA4KTsKKworICAgIGdjcnlfY2lwaGVyX2ZpbmFs
KGhhbmRsZSk7CisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9lbmNyeXB0KGhhbmRsZSwgb3V0cHV0
LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBp
ZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9z
dHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gZ2NyeXB0VW53cmFwKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgYXV0byBhbGdvcml0aG0gPSBhZXNB
bGdvcml0aG1Gb3JLZXlTaXplKGtleS5zaXplKCkgKiA4KTsKKyAgICBpZiAoIWFsZ29yaXRobSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIEdDcnlwdEhhbmRsZTxnY3J5X2Np
cGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJf
b3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0FFU1dSQVAsIDApOwor
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBrZXkuZGF0
YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlf
c3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBvdXRwdXQoZGF0YS5z
aXplKCkgLSA4KTsKKworICAgIGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7CisgICAgZXJyb3Ig
PSBnY3J5X2NpcGhlcl9kZWNyeXB0KGhhbmRsZSwgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUo
KSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwg
ZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKG91
dHB1dCk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXko
UmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxi
YWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCit7
CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwor
ICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0V3JhcChhZXNLZXkua2V5KCksIGRhdGEpOworICAgIGlm
ICghb3V0cHV0KSB7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKCpvdXRwdXQpOworfQorCit2
b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkoUmVmPENyeXB0b0tl
eT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJh
Y2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCit7CisgICAgYXV0byYg
YWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworICAgIGF1dG8gb3V0
cHV0ID0gZ2NyeXB0VW53cmFwKGFlc0tleS5rZXkoKSwgZGF0YSk7CisgICAgaWYgKCFvdXRwdXQp
IHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2soKm91dHB1dCk7Cit9CisKK0V4Y2VwdGlvbk9y
PHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0
b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBW
b2lkQ2FsbGJhY2smJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBDcnlw
dG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtRGVjcnlwdChjb25zdCBDcnlwdG9LZXlBRVMmLCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNr
JiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X1NVUFBPUlRFRF9FUlIgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUVDREhHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1FQ0RIR0NyeXB0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWI1N2I5NzRjM2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUVDREhHQ3J5cHQu
Y3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUVDREguaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZ
UFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvS2V5RUMuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2dj
cnlwdC9HQ3J5cHRIYW5kbGUuaD4KKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBnY3J5cHREZXJpdmUoZ2NyeV9zZXhwX3QgYmFzZVNleHAsIGdjcnlfc2V4cF90IHB1
YmxpY1NleHApCit7CisgICAgR0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBkYXRhU2V4cDsKKyAg
ICB7CisgICAgICAgIEdDcnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gZFNleHAoZ2NyeV9zZXhwX2Zp
bmRfdG9rZW4oYmFzZVNleHAsICJkIiwgMCkpOworICAgICAgICBpZiAoIWRTZXhwKQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBzaXplX3QgZGF0YUxlbmd0aCA9
IDA7CisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBnY3J5X3NleHBfbnRoX2RhdGEoZFNleHAs
IDEsICZkYXRhTGVuZ3RoKTsKKyAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBnY3J5X3NleHBfYnVpbGQoJmRhdGFTZXhwLCBudWxs
cHRyLCAiKGRhdGEoZmxhZ3MgcmF3KSh2YWx1ZSAlYikpIiwgZGF0YUxlbmd0aCwgZGF0YSk7Cisg
ICAgICAgIGlmICghZGF0YVNleHApCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIH0KKworICAgIEdDcnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gY2lwaGVyU2V4cDsKKyAgICBn
Y3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3BrX2VuY3J5cHQoJmNpcGhlclNleHAsIGRhdGFTZXhw
LCBwdWJsaWNTZXhwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ry
c291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBvdXRwdXQ7CisgICAgewor
ICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IHNTZXhwKGdjcnlfc2V4cF9maW5kX3Rv
a2VuKGNpcGhlclNleHAsICJzIiwgMCkpOworICAgICAgICBpZiAoIXNTZXhwKQorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlf
dD4gc01QSShnY3J5X3NleHBfbnRoX21waShzU2V4cCwgMSwgR0NSWU1QSV9GTVRfVVNHKSk7Cisg
ICAgICAgIGlmICghc01QSSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICAgICAgR0NyeXB0SGFuZGxlPGdjcnlfbXBpX3BvaW50X3Q+IHBvaW50KGdjcnlfbXBpX3BvaW50
X25ldygwKSk7CisgICAgICAgIGlmICghcG9pbnQpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgICAgIGVycm9yID0gZ2NyeV9tcGlfZWNfZGVjb2RlX3BvaW50KHBvaW50
LCBzTVBJLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIEdDcnlwdEhhbmRs
ZTxnY3J5X21waV90PiB4TVBJKGdjcnlfbXBpX25ldygwKSk7CisgICAgICAgIGlmICgheE1QSSkK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgZ2NyeV9tcGlfcG9p
bnRfc25hdGNoX2dldCh4TVBJLCBudWxscHRyLCBudWxscHRyLCBwb2ludC5yZWxlYXNlKCkpOwor
CisgICAgICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgZXJyb3IgPSBnY3J5X21w
aV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCB4TVBJKTsK
KyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIG91dHB1dC5yZXNpemUoZGF0YUxlbmd0aCk7Cisg
ICAgICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBvdXRwdXQuZGF0
YSgpLCBvdXRwdXQuc2l6ZSgpLCBudWxscHRyLCB4TVBJKTsKKyAgICB9CisKKyAgICByZXR1cm4g
V1RGTW92ZShvdXRwdXQpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OnBsYXRmb3Jt
RGVyaXZlQml0cyhSZWY8Q3J5cHRvS2V5PiYmIGJhc2VLZXksIFJlZjxDcnlwdG9LZXk+JiYgcHVi
bGljS2V5LCBzaXplX3QgbGVuZ3RoLCBDYWxsYmFjayYmIGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0
LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW2Jhc2VLZXkgPSBXVEZN
b3ZlKGJhc2VLZXkpLCBwdWJsaWNLZXkgPSBXVEZNb3ZlKHB1YmxpY0tleSksIGxlbmd0aCwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICBhdXRvJiBlY0Jhc2VLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlFQz4oYmFzZUtleS5nZXQo
KSk7CisgICAgICAgICAgICBhdXRvJiBlY1B1YmxpY0tleSA9IGRvd25jYXN0PENyeXB0b0tleUVD
PihwdWJsaWNLZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERl
cml2ZShlY0Jhc2VLZXkucGxhdGZvcm1LZXkoKSwgZWNQdWJsaWNLZXkucGxhdGZvcm1LZXkoKSk7
CisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtvdXRwdXQg
PSBXVEZNb3ZlKG91dHB1dCksIGxlbmd0aCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9D
UllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0Fs
Z29yaXRobVBCS0RGMkdDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0Ny
eXB0b0FsZ29yaXRobVBCS0RGMkdDcnlwdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjAwNTNkYWNmNWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3BwCkBAIC0wLDAg
KzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNy
eXB0b0FsZ29yaXRobVBCS0RGMi5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNp
bmNsdWRlICJDcnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXMuaCIKKyNpbmNsdWRlICJDcnlwdG9L
ZXlSYXcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPGdjcnlwdC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVyaXZl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5RGF0YSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBz
YWx0RGF0YSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllciwgc2l6ZV90
IGl0ZXJhdGlvbnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgaW50IGhhc2hBbGdvcml0aG07Cisg
ICAgc3dpdGNoIChoYXNoSWRlbnRpZmllcikgeworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6U0hBXzE6CisgICAgICAgIGhhc2hBbGdvcml0aG0gPSBHQ1JZX01EX1NIQTE7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIy
NDoKKyAgICAgICAgaGFzaEFsZ29yaXRobSA9IEdDUllfTURfU0hBMjI0OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6CisgICAgICAg
IGhhc2hBbGdvcml0aG0gPSBHQ1JZX01EX1NIQTI1NjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMzg0OgorICAgICAgICBoYXNoQWxnb3Jp
dGhtID0gR0NSWV9NRF9TSEEzODQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMjoKKyAgICAgICAgaGFzaEFsZ29yaXRobSA9IEdDUllf
TURfU0hBNTEyOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQobGVuZ3Ro
IC8gOCk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9rZGZfZGVyaXZlKGtleURhdGEu
ZGF0YSgpLCBrZXlEYXRhLnNpemUoKSwgR0NSWV9LREZfUEJLREYyLCBoYXNoQWxnb3JpdGhtLCBz
YWx0RGF0YS5kYXRhKCksIHNhbHREYXRhLnNpemUoKSwgaXRlcmF0aW9ucywgcmVzdWx0LnNpemUo
KSwgcmVzdWx0LmRhdGEoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5
X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQor
Cit2b2lkIENyeXB0b0FsZ29yaXRobVBCS0RGMjo6cGxhdGZvcm1EZXJpdmVCaXRzKHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlw
dG9LZXk+JiYga2V5LCBzaXplX3QgbGVuZ3RoLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigp
OworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGxlbmd0aCwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxi
YWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiBwYmtkZjJQYXJh
bWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUGJrZGYyUGFyYW1zPigqcGFyYW1ldGVy
cyk7CisgICAgICAgICAgICBhdXRvJiByYXdLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSYXc+KGtl
eS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVyaXZlKHJhd0tl
eS5rZXkoKSwgcGJrZGYyUGFyYW1ldGVycy5zYWx0VmVjdG9yKCksIHBia2RmMlBhcmFtZXRlcnMu
aGFzaElkZW50aWZpZXIsIHBia2RmMlBhcmFtZXRlcnMuaXRlcmF0aW9ucywgbGVuZ3RoKTsKKyAg
ICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFz
aygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAg
ICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYo
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92
MV81R0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3Jp
dGhtUlNBRVNfUEtDUzFfdjFfNUdDcnlwdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmIzNDU3NDA1OGY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R0NyeXB0LmNw
cApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5oIgorCisjaWYgRU5BQkxF
KFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvR0Ny
eXB0SGFuZGxlLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdEVuY3J5cHQoZ2NyeV9zZXhwX3Qga2V5
U2V4cCwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0KQoreworICAgIEdDcnlwdEhhbmRsZTxn
Y3J5X3NleHBfdD4gZGF0YVNleHA7CisgICAgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGRhdGEoZmxhZ3MgcGtjczEpKHZh
bHVlICMiKTsKKyAgICAgICAgZm9yIChhdXRvJiBieXRlIDogcGxhaW5UZXh0KQorICAgICAgICAg
ICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiMpKSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBzRXhwcmVz
c2lvbi51dGY4KCk7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXco
JmRhdGFTZXhwLCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcu
bGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBn
Y3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHQ3J5cHRIYW5k
bGU8Z2NyeV9zZXhwX3Q+IGNpcGhlclNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2Ny
eV9wa19lbmNyeXB0KCZjaXBoZXJTZXhwLCBkYXRhU2V4cCwga2V5U2V4cCk7CisgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
ciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJy
b3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBH
Q3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IGFTZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKGNpcGhl
clNleHAsICJhIiwgMCkpOworICAgIGlmICghYVNleHApCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gYU1QSShnY3J5X3NleHBfbnRo
X21waShhU2V4cCwgMSwgR0NSWU1QSV9GTVRfVVNHKSk7CisgICAgc2l6ZV90IGRhdGFMZW5ndGgg
PSAwOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRy
LCAwLCAmZGF0YUxlbmd0aCwgYU1QSSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGRh
dGFMZW5ndGgpOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBv
dXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBudWxscHRyLCBhTVBJKTsKKyAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAl
ZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3Io
ZXJyb3IpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7Cit9CisKK3N0YXRpYyBzdGQ6
Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVjcnlwdChnY3J5X3NleHBfdCBrZXlT
ZXhwLCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0KQoreworICAgIEdDcnlwdEhhbmRsZTxn
Y3J5X3NleHBfdD4gZW5jVmFsU2V4cDsKKyAgICB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIoZW5jLXZhbChmbGFncyBwa2Nz
MSkocnNhKGEgIyIpOworICAgICAgICBmb3IgKGF1dG8mIGJ5dGUgOiBjaXBoZXJUZXh0KQorICAg
ICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIiMpKSkiKTsKKworICAgICAgICBTdHJpbmcgc0V4cHJlc3Npb24gPSBi
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3RyaW5nID0g
c0V4cHJlc3Npb24udXRmOCgpOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3Nl
eHBfbmV3KCZlbmNWYWxTZXhwLCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lv
bkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIs
IGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBH
Q3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYWluU2V4cDsKKyAgICBnY3J5X2Vycm9yX3QgZXJy
b3IgPSBnY3J5X3BrX2RlY3J5cHQoJnBsYWluU2V4cCwgZW5jVmFsU2V4cCwga2V5U2V4cCk7Cisg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdj
cnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IHZhbHVlU2V4cChnY3J5X3NleHBfZmlu
ZF90b2tlbihwbGFpblNleHAsICJ2YWx1ZSIsIDApKTsKKyAgICBpZiAoIXZhbHVlU2V4cCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIEdDcnlwdEhhbmRsZTxnY3J5X21waV90
PiB2YWx1ZU1QSShnY3J5X3NleHBfbnRoX21waSh2YWx1ZVNleHAsIDEsIEdDUllNUElfRk1UX1VT
RykpOworICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICBlcnJvciA9IGdjcnlfbXBpX3By
aW50KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwgMCwgJmRhdGFMZW5ndGgsIHZhbHVlTVBJKTsK
KworICAgIFZlY3Rvcjx1aW50OF90PiBvdXRwdXQoZGF0YUxlbmd0aCk7CisgICAgZXJyb3IgPSBn
Y3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXpl
KCksIG51bGxwdHIsIHZhbHVlTVBJKTsKKworICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7Cit9
CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6cGxhdGZvcm1FbmNyeXB0
KFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3Rv
ckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJh
Y2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVl
KQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAg
ICBba2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0
byYgcnNhS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5UlNBPihrZXkuZ2V0KCkpOworCisgICAgICAg
ICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEVuY3J5cHQocnNhS2V5LnBsYXRmb3JtS2V5KCksIFdU
Rk1vdmUocGxhaW5UZXh0KSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwg
b3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0
KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFf
djFfNTo6cGxhdGZvcm1EZWNyeXB0KFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhf
dD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxs
YmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtR
dWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW2tleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9
IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11
dGFibGUgeworICAgICAgICAgICAgYXV0byYgcnNhS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5UlNB
PihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQo
cnNhS2V5LnBsYXRmb3JtS2V5KCksIFdURk1vdmUoY2lwaGVyVGV4dCkpOworICAgICAgICAgICAg
aWYgKCFvdXRwdXQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAg
ICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
T3BlcmF0aW9uRXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAg
ICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksIG91dHB1dCA9IFdURk1vdmUoKm91dHB1dCldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworfQorCitFeGNlcHRp
b25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjpwbGF0Zm9ybUVuY3J5
cHQoY29uc3QgQ3J5cHRvS2V5UlNBJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3Rv
ckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Cit9CisKK0V4Y2VwdGlv
bk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRGVjcnlw
dChjb25zdCBDcnlwdG9LZXlSU0EmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9y
Q2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81R0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRv
QWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwCmluZGV4IDg1M2IwNzBiZjgzLi4y
N2RjYzUyZmE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9Dcnlw
dG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUdDcnlwdC5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzIsMTkgKzMyLDIyNSBAQAogI2luY2x1ZGUgIkNyeXB0b0tleVJTQS5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgPGdjcnlwdC5oPgotI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+Cisj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHBhbC9jcnlwdG8v
Q3J5cHRvRGlnZXN0Lmg+CisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0SGFuZGxl
Lmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRo
bVJTQVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVNpZ24oUmVmPENyeXB0b0tleT4mJiwgVmVjdG9y
PHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8UEFM
OjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobT4gaGFzaENyeXB0b0RpZ2VzdEFsZ29yaXRobShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBzd2l0Y2ggKGlkZW50aWZpZXIpIHsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlNIQV8xOgorICAgICAgICByZXR1cm4gUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29y
aXRobTo6U0hBXzE7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0
OgorICAgICAgICByZXR1cm4gUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzIyNDsK
KyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6CisgICAgICAgIHJl
dHVybiBQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2OworICAgIGNhc2UgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDoKKyAgICAgICAgcmV0dXJuIFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8zODQ7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpTSEFfNTEyOgorICAgICAgICByZXR1cm4gUEFMOjpDcnlwdG9EaWdlc3Q6OkFs
Z29yaXRobTo6U0hBXzUxMjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6
cGxhdGZvcm1WZXJpZnkoUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3Rv
cjx1aW50OF90PiYmLCBCb29sQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxjb25z
dCBjaGFyKj4gaGFzaEFsZ29yaXRobU5hbWUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVu
dGlmaWVyKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3dpdGNoIChpZGVudGlmaWVy
KSB7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMToKKyAgICAgICAg
cmV0dXJuICJzaGExIjsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8y
MjQ6CisgICAgICAgIHJldHVybiAic2hhMjI0IjsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlNIQV8yNTY6CisgICAgICAgIHJldHVybiAic2hhMjU2IjsKKyAgICBjYXNlIENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8zODQ6CisgICAgICAgIHJldHVybiAic2hhMzg0
IjsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTI6CisgICAgICAg
IHJldHVybiAic2hhNTEyIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBn
Y3J5cHRTaWduKGdjcnlfc2V4cF90IGtleVNleHAsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0
YSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoQWxnb3JpdGhtSWRlbnRpZmllcikKK3sK
KyAgICBWZWN0b3I8dWludDhfdD4gZGF0YUhhc2g7CisgICAgeworICAgICAgICBhdXRvIGRpZ2Vz
dEFsZ29yaXRobSA9IGhhc2hDcnlwdG9EaWdlc3RBbGdvcml0aG0oaGFzaEFsZ29yaXRobUlkZW50
aWZpZXIpOworICAgICAgICBpZiAoIWRpZ2VzdEFsZ29yaXRobSkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBkaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2Vz
dDo6Y3JlYXRlKCpkaWdlc3RBbGdvcml0aG0pOworICAgICAgICBpZiAoIWRpZ2VzdCkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgZGlnZXN0LT5hZGRCeXRlcyhk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgICAgICBkYXRhSGFzaCA9IGRpZ2VzdC0+Y29t
cHV0ZUhhc2goKTsKKyAgICB9CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IGRhdGFT
ZXhwOworICAgIHsKKyAgICAgICAgYXV0byBzaGFBbGdvcml0aG0gPSBoYXNoQWxnb3JpdGhtTmFt
ZShoYXNoQWxnb3JpdGhtSWRlbnRpZmllcik7CisgICAgICAgIGlmICghc2hhQWxnb3JpdGhtKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGRhdGEoZmxhZ3MgcGtj
czEpKGhhc2ggIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCpzaGFBbGdvcml0aG0pOworICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAjIik7CisgICAgICAgIGZvciAoYXV0byBieXRl
IDogZGF0YUhhc2gpCisgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykpIik7CisKKyAgICAgICAgU3RyaW5n
IHNFeHByZXNzaW9uID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICBDU3RyaW5nIHNFeHBy
ZXNzaW9uQ1N0cmluZyA9IHNFeHByZXNzaW9uLnV0ZjgoKTsKKyAgICAgICAgZ2NyeV9lcnJvcl90
IGVycm9yID0gZ2NyeV9zZXhwX25ldygmZGF0YVNleHAsIHNFeHByZXNzaW9uQ1N0cmluZy5kYXRh
KCksIHNFeHByZXNzaW9uQ1N0cmluZy5sZW5ndGgoKSwgMSk7CisgICAgICAgIGlmIChlcnJvciAh
PSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9y
ICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJv
cihlcnJvcikpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEdDcnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gc2lnbmF0dXJlU2V4cDsKKyAg
ICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3BrX3NpZ24oJnNpZ25hdHVyZVNleHAsIGRhdGFT
ZXhwLCBrZXlTZXhwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ry
c291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIH0KKworICAgIEdDcnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gc1NleHAo
Z2NyeV9zZXhwX2ZpbmRfdG9rZW4oc2lnbmF0dXJlU2V4cCwgInMiLCAwKSk7CisgICAgaWYgKCFz
U2V4cCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIEdDcnlwdEhhbmRsZTxn
Y3J5X21waV90PiBzTVBJKGdjcnlfc2V4cF9udGhfbXBpKHNTZXhwLCAxLCBHQ1JZTVBJX0ZNVF9V
U0cpKTsKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgZXJyb3IgPSBnY3J5X21waV9w
cmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBzTVBJKTsKKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBvdXRwdXQoZGF0YUxlbmd0aCk7CisgICAgZXJyb3IgPSBnY3J5
X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCks
IG51bGxwdHIsIHNNUEkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ry
c291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworCisgICAgcmV0dXJuIFdURk1v
dmUob3V0cHV0KTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gZ2NyeXB0VmVyaWZ5
KGdjcnlfc2V4cF90IGtleVNleHAsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFz
aEFsZ29yaXRobUlkZW50aWZpZXIpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGFIYXNoOwor
ICAgIHsKKyAgICAgICAgYXV0byBkaWdlc3RBbGdvcml0aG0gPSBoYXNoQ3J5cHRvRGlnZXN0QWxn
b3JpdGhtKGhhc2hBbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFkaWdlc3RBbGdv
cml0aG0pCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGF1dG8g
ZGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZSgqZGlnZXN0QWxnb3JpdGhtKTsKKyAg
ICAgICAgaWYgKCFkaWdlc3QpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgICAgIGRpZ2VzdC0+YWRkQnl0ZXMoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAg
ICAgZGF0YUhhc2ggPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7CisgICAgfQorCisgICAgR0NyeXB0
SGFuZGxlPGdjcnlfc2V4cF90PiBzaWduYXR1cmVTZXhwOworICAgIHsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihzaWctdmFs
KHJzYShzICMiKTsKKyAgICAgICAgZm9yIChhdXRvIGJ5dGUgOiBzaWduYXR1cmUpCisgICAgICAg
ICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiIykpKSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBzRXhw
cmVzc2lvbi51dGY4KCk7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9u
ZXcoJnNpZ25hdHVyZVNleHAsIHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHByZXNzaW9u
Q1N0cmluZy5sZW5ndGgoKSwgMSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwg
ZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdD
cnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gZGF0YVNleHA7CisgICAgeworICAgICAgICBhdXRvIHNo
YUFsZ29yaXRobSA9IGhhc2hBbGdvcml0aG1OYW1lKGhhc2hBbGdvcml0aG1JZGVudGlmaWVyKTsK
KyAgICAgICAgaWYgKCFzaGFBbGdvcml0aG0pCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIoZGF0YShmbGFncyBwa2NzMSkoaGFzaCAiKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoKnNoYUFsZ29yaXRobSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
ICMiKTsKKyAgICAgICAgZm9yIChhdXRvIGJ5dGUgOiBkYXRhSGFzaCkKKyAgICAgICAgICAgIGFw
cGVuZEJ5dGVBc0hleChieXRlLCBidWlsZGVyKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIjKSkiKTsKKworICAgICAgICBTdHJpbmcgc0V4cHJlc3Npb24gPSBidWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3RyaW5nID0gc0V4cHJlc3Npb24u
dXRmOCgpOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3NleHBfbmV3KCZkYXRh
U2V4cCwgc0V4cHJlc3Npb25DU3RyaW5nLmRhdGEoKSwgc0V4cHJlc3Npb25DU3RyaW5nLmxlbmd0
aCgpLCAxKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9z
dHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisgICAgfQorCisgICAgZ2NyeV9lcnJvcl90IGVy
cm9yID0gZ2NyeV9wa192ZXJpZnkoc2lnbmF0dXJlU2V4cCwgZGF0YVNleHAsIGtleVNleHApOwor
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SICYmIGdjcnlfZXJyX2NvZGUoZXJyb3Ip
ICE9IEdQR19FUlJfQkFEX1NJR05BVFVSRSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVy
cm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJl
cnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAg
IHJldHVybiB7IGVycm9yID09IEdQR19FUlJfTk9fRVJST1IgfTsKK30KKwordm9pZCBDcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1TaWduKFJlZjxDcnlwdG9LZXk+JiYg
a2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigp
OworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW2tleSA9IFdURk1vdmUoa2V5KSwg
ZGF0YSA9IFdURk1vdmUoZGF0YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11
dGFibGUgeworICAgICAgICAgICAgYXV0byYgcnNhS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5UlNB
PihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdFNpZ24ocnNh
S2V5LnBsYXRmb3JtS2V5KCksIGRhdGEsIHJzYUtleS5oYXNoQWxnb3JpdGhtSWRlbnRpZmllcigp
KTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNr
KAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBvdXRwdXQgPSBXVEZNb3Zl
KCpvdXRwdXQpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
ZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnBsYXRmb3JtVmVyaWZ5KFJlZjxDcnlwdG9L
ZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBzaWduYXR1cmUsIFZlY3Rvcjx1aW50OF90PiYm
IGRhdGEsIEJvb2xDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2Vw
dGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUm
IHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRj
aCgKKyAgICAgICAgW2tleSA9IFdURk1vdmUoa2V5KSwgc2lnbmF0dXJlID0gV1RGTW92ZShzaWdu
YXR1cmUpLCBkYXRhID0gV1RGTW92ZShkYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRl
eHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlw
dG9LZXlSU0E+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0
VmVyaWZ5KHJzYUtleS5wbGF0Zm9ybUtleSgpLCBzaWduYXR1cmUsIGRhdGEsIHJzYUtleS5oYXNo
QWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spLCBvdXRwdXQgPSAqb3V0cHV0XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG91dHB1dCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9
CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojpw
bGF0Zm9ybVNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zRGVwcmVjYXRlZCYs
IGNvbnN0IENyeXB0b0tleVJTQSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JD
YWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBHQ3J5cHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUEdDcnlwdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdhZTIzMTk0ODY3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1S
U0FfT0FFUEdDcnlwdC5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmgiCisKKyNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYU9h
ZXBQYXJhbXMuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0SGFu
ZGxlLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgc3RkOjpvcHRp
b25hbDxjb25zdCBjaGFyKj4gaGFzaEFsZ29yaXRobU5hbWUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBpZGVudGlmaWVyKQoreworICAgIHN3aXRjaCAoaWRlbnRpZmllcikgeworICAgIGNhc2Ug
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6CisgICAgICAgIHJldHVybiAic2hhMSI7
CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0OgorICAgICAgICBy
ZXR1cm4gInNoYTIyNCI7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
MjU2OgorICAgICAgICByZXR1cm4gInNoYTI1NiI7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpTSEFfMzg0OgorICAgICAgICByZXR1cm4gInNoYTM4NCI7CisgICAgY2FzZSBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyOgorICAgICAgICByZXR1cm4gInNoYTUx
MiI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9
CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hBbGdvcml0aG1JZGVudGlmaWVyLCBnY3J5X3Nl
eHBfdCBrZXlTZXhwLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGxhYmVsVmVjdG9yLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHBsYWluVGV4dCkKK3sKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhw
X3Q+IGRhdGFTZXhwOworICAgIHsKKyAgICAgICAgYXV0byBzaGFBbGdvcml0aG0gPSBoYXNoQWxn
b3JpdGhtTmFtZShoYXNoQWxnb3JpdGhtSWRlbnRpZmllcik7CisgICAgICAgIGlmICghc2hhQWxn
b3JpdGhtKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGRhdGEo
ZmxhZ3Mgb2FlcCkoaGFzaC1hbGdvICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgqc2hhQWxn
b3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIpIik7CisgICAgICAgIGlm
ICghbGFiZWxWZWN0b3IuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIihsYWJlbCBcIiIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobGFiZWxWZWN0
b3IuZGF0YSgpLCBsYWJlbFZlY3Rvci5zaXplKCkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJcIikiKTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiKHZh
bHVlICMiKTsKKyAgICAgICAgZm9yIChhdXRvJiBieXRlIDogcGxhaW5UZXh0KQorICAgICAgICAg
ICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiMpKSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBzRXhwcmVz
c2lvbi51dGY4KCk7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXco
JmRhdGFTZXhwLCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcu
bGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBn
Y3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHQ3J5cHRIYW5k
bGU8Z2NyeV9zZXhwX3Q+IGNpcGhlclNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2Ny
eV9wa19lbmNyeXB0KCZjaXBoZXJTZXhwLCBkYXRhU2V4cCwga2V5U2V4cCk7CisgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
ciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJy
b3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBH
Q3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IGFTZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKGNpcGhl
clNleHAsICJhIiwgMCkpOworICAgIGlmICghYVNleHApCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gYU1QSShnY3J5X3NleHBfbnRo
X21waShhU2V4cCwgMSwgR0NSWU1QSV9GTVRfVVNHKSk7CisgICAgc2l6ZV90IGRhdGFMZW5ndGgg
PSAwOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRy
LCAwLCAmZGF0YUxlbmd0aCwgYU1QSSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGRh
dGFMZW5ndGgpOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBv
dXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBudWxscHRyLCBhTVBJKTsKKyAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBv
biBjaXBoZXIsICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2Ny
eV9zdHJlcnJvcihlcnJvcikpOworCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKK30KKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaEFsZ29yaXRobUlkZW50aWZpZXIsIGdjcnlfc2V4cF90
IGtleVNleHAsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbGFiZWxWZWN0b3IsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgY2lwaGVyVGV4dCkKK3sKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+
IGVuY1ZhbFNleHA7CisgICAgeworICAgICAgICBhdXRvIHNoYUFsZ29yaXRobSA9IGhhc2hBbGdv
cml0aG1OYW1lKGhhc2hBbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFzaGFBbGdv
cml0aG0pCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIoZW5jLXZh
bChmbGFncyBvYWVwKShoYXNoLWFsZ28gIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCpzaGFB
bGdvcml0aG0pOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIikiKTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobGFiZWwgXCIiKTsKKyAgICAgICAgaWYgKCFsYWJlbFZl
Y3Rvci5pc0VtcHR5KCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChsYWJlbFZlY3Rvci5k
YXRhKCksIGxhYmVsVmVjdG9yLnNpemUoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiXCIpIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKHJzYShhICMiKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBieXRlIDogY2lwaGVyVGV4dCkKKyAgICAgICAgICAgIGFwcGVuZEJ5
dGVBc0hleChieXRlLCBidWlsZGVyKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIj
KSkpIik7CisKKyAgICAgICAgU3RyaW5nIHNFeHByZXNzaW9uID0gYnVpbGRlci50b1N0cmluZygp
OworICAgICAgICBDU3RyaW5nIHNFeHByZXNzaW9uQ1N0cmluZyA9IHNFeHByZXNzaW9uLnV0Zjgo
KTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhwX25ldygmZW5jVmFsU2V4
cCwgc0V4cHJlc3Npb25DU3RyaW5nLmRhdGEoKSwgc0V4cHJlc3Npb25DU3RyaW5nLmxlbmd0aCgp
LCAxKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJz
b3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICB9CisgICAgfQorCisgICAgR0NyeXB0SGFuZGxlPGdjcnlf
c2V4cF90PiBwbGFpblNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9wa19kZWNy
eXB0KCZwbGFpblNleHAsIGVuY1ZhbFNleHAsIGtleVNleHApOworICAgIGlmIChlcnJvciAhPSBH
UEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVz
LyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9y
KSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgR0NyeXB0SGFu
ZGxlPGdjcnlfc2V4cF90PiB2YWx1ZVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9rZW4ocGxhaW5TZXhw
LCAidmFsdWUiLCAwKSk7CisgICAgaWYgKCF2YWx1ZVNleHApCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gdmFsdWVNUEkoZ2NyeV9z
ZXhwX250aF9tcGkodmFsdWVTZXhwLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpKTsKKyAgICBzaXplX3Qg
ZGF0YUxlbmd0aCA9IDA7CisgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9V
U0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCB2YWx1ZU1QSSk7CisKKyAgICBWZWN0b3I8dWlu
dDhfdD4gb3V0cHV0KGRhdGFMZW5ndGgpOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NS
WU1QSV9GTVRfVVNHLCBvdXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBudWxscHRyLCB2YWx1
ZU1QSSk7CisKKyAgICByZXR1cm4gV1RGTW92ZShvdXRwdXQpOworfQorCit2b2lkIENyeXB0b0Fs
Z29yaXRobVJTQV9PQUVQOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZl
Y3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhj
ZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4dC5yZWYoKTsK
KyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShw
YXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWlu
VGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAg
ICAgICAgYXV0byYgcnNhUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobVJzYU9h
ZXBQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIHJzYUtleSA9IGRvd25j
YXN0PENyeXB0b0tleVJTQT4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQg
PSBnY3J5cHRFbmNyeXB0KHJzYUtleS5oYXNoQWxnb3JpdGhtSWRlbnRpZmllcigpLCByc2FLZXku
cGxhdGZvcm1LZXkoKSwgcnNhUGFyYW1ldGVycy5sYWJlbFZlY3RvcigpLCBwbGFpblRleHQpOwor
ICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisg
ICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNh
bGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIG91dHB1dCA9IFdURk1vdmUoKm91
dHB1dCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2sob3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKK30KKwordm9pZCBDcnlwdG9B
bGdvcml0aG1SU0FfT0FFUDo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBW
ZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigp
OworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNp
cGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFj
ayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGF1dG8mIHJzYVBhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1S
c2FPYWVwUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiByc2FLZXkgPSBk
b3duY2FzdDxDcnlwdG9LZXlSU0E+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0
cHV0ID0gZ2NyeXB0RGVjcnlwdChyc2FLZXkuaGFzaEFsZ29yaXRobUlkZW50aWZpZXIoKSwgcnNh
S2V5LnBsYXRmb3JtS2V5KCksIHJzYVBhcmFtZXRlcnMubGFiZWxWZWN0b3IoKSwgY2lwaGVyVGV4
dCk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5wb3N0VGFz
aygKKyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0
aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgb3V0cHV0ID0gV1RGTW92
ZSgqb3V0cHV0KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjayhvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworfQorCitFeGNlcHRp
b25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0
IENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5
UlNBJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRD
YWxsYmFjayYmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5PVF9TVVBQT1JURURfRVJSIH07Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0Fs
Z29yaXRobVJTQV9PQUVQOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNh
T2FlcFBhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlSU0EmLCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9F
UlIgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNV
QlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0Ny
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5R251VExTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlHQ3J5cHQuY3BwCnNpbWlsYXJpdHkgaW5kZXgg
ODglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnlHbnVUTFMuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5R0NyeXB0LmNwcAppbmRleCAzNGNiZjlkMTRjZC4u
NzU0ZTlkYTY4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnlHbnVUTFMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlHQ3J5cHQuY3BwCkBAIC0yOSw4ICsyOSwx
MiBAQAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DRkIuaCIKKyNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1BRVNfR0NNLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
QUVTX0tXLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRUNESC5oIgogI2luY2x1ZGUgIkNy
eXB0b0FsZ29yaXRobUhNQUMuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1QQktERjIuaCIK
ICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81LmgiCiAjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdv
cml0aG1SU0FfT0FFUC5oIgpAQCAtNDUsOCArNDksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dm9pZCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6cGxhdGZvcm1SZWdpc3RlckFsZ29yaXRobXMo
KQogewogICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUFFU19DQkM+KCk7Cisg
ICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQj4oKTsKKyAgICByZWdp
c3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1BRVNfR0NNPigpOwogICAgIHJlZ2lzdGVyQWxn
b3JpdGhtPENyeXB0b0FsZ29yaXRobUFFU19LVz4oKTsKKyAgICByZWdpc3RlckFsZ29yaXRobTxD
cnlwdG9BbGdvcml0aG1FQ0RIPigpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29y
aXRobUhNQUM+KCk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtUEJLREYy
PigpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3Yx
XzU+KCk7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzU+KCk7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtUlNBX09BRVA+
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVD
R0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5
cHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yN2M2ZTllODdl
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRv
S2V5RUNHQ3J5cHQuY3BwCkBAIC0wLDAgKzEsODIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleUVDLmgiCisKKyNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKKworI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKKyNpbmNsdWRlICJKc29uV2Vi
S2V5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRv
L2djcnlwdC9BU04xLmg+CisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0SGFuZGxl
Lmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2
NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgYm9vbCBkb2VzVW5jb21wcmVzc2VkUG9pbnRNYXRjaE5hbWVkQ3Vy
dmUoQ3J5cHRvS2V5RUM6Ok5hbWVkQ3VydmUgY3VydmUsIHNpemVfdCBzaXplKQoreworICAgIHN3
aXRjaCAoY3VydmUpIHsKKyAgICBjYXNlIENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMjU2Ogor
ICAgICAgICByZXR1cm4gc2l6ZSA9PSA2NTsKKyAgICBjYXNlIENyeXB0b0tleUVDOjpOYW1lZEN1
cnZlOjpQMzg0OgorICAgICAgICByZXR1cm4gc2l6ZSA9PSA5NzsKKyAgICB9Cit9CisKK3N0YXRp
YyBib29sIGRvZXNGaWVsZEVsZW1lbnRNYXRjaE5hbWVkQ3VydmUoQ3J5cHRvS2V5RUM6Ok5hbWVk
Q3VydmUgY3VydmUsIHNpemVfdCBzaXplKQoreworICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICBj
YXNlIENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMjU2OgorICAgICAgICByZXR1cm4gc2l6ZSA9
PSAzMjsKKyAgICBjYXNlIENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMzg0OgorICAgICAgICBy
ZXR1cm4gc2l6ZSA9PSA0ODsKKyAgICB9Cit9CisKK3N0YXRpYyBzaXplX3QgZ2V0S2V5U2l6ZUZy
b21OYW1lZEN1cnZlKENyeXB0b0tleUVDOjpOYW1lZEN1cnZlIGN1cnZlKQoreworICAgIHN3aXRj
aCAoY3VydmUpIHsKKyAgICBjYXNlIENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMjU2OgorICAg
ICAgICByZXR1cm4gMjU2OworICAgIGNhc2UgQ3J5cHRvS2V5RUM6Ok5hbWVkQ3VydmU6OlAzODQ6
CisgICAgICAgIHJldHVybiAzODQ7CisgICAgfQorfQorCitDcnlwdG9LZXlFQzo6fkNyeXB0b0tl
eUVDKCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUtleSkKKyAgICAgICAgR0NyeXB0RGVsZXRlcjxn
Y3J5X3NleHBfdD4oKShtX3BsYXRmb3JtS2V5KTsKK30KKworc2l6ZV90IENyeXB0b0tleUVDOjpr
ZXlTaXplSW5CaXRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2NyeV9wa19nZXRfbmJpdHMobV9w
bGF0Zm9ybUtleSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1F
eHBvcnRSYXcoKSBjb25zdAoreworICAgIEdDcnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gcVNleHAo
Z2NyeV9zZXhwX2ZpbmRfdG9rZW4obV9wbGF0Zm9ybUtleSwgInEiLCAwKSk7CisgICAgaWYgKCFx
U2V4cCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsK
KyAgICBjb25zdCBjaGFyKiBkYXRhID0gZ2NyeV9zZXhwX250aF9kYXRhKHFTZXhwLCAxLCAmZGF0
YUxlbmd0aCk7CisgICAgaWYgKCFkYXRhIHx8IGRhdGFMZW5ndGggIT0ga2V5U2l6ZUluQml0cygp
IC8gNCArIDEpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0KGRhdGFMZW5ndGgpOworICAgIHN0ZDo6bWVtY3B5KHJlc3VsdC5kYXRhKCksIGRhdGEsIGRh
dGFMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8Q3J5cHRv
S2V5UGFpcj4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtR2VuZXJhdGVQYWlyKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgaWRlbnRpZmllciwgTmFtZWRDdXJ2ZSBjdXJ2ZSwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQoreworICAgIGNvbnN0IGNoYXIqIGN1cnZl
TmFtZTsKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBOYW1lZEN1cnZlOjpQMjU2Ogor
ICAgICAgICBjdXJ2ZU5hbWUgPSAiTklTVCBQLTI1NiI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTmFtZWRDdXJ2ZTo6UDM4NDoKKyAgICAgICAgY3VydmVOYW1lID0gIk5JU1QgUC0zODQiOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IGdl
bmtleVNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhwX2J1aWxkKCZnZW5r
ZXlTZXhwLCBudWxscHRyLCAiKGdlbmtleShlY2MoY3VydmUgJXMpKSkiLCBjdXJ2ZU5hbWUpOwor
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBn
Y3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgR0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBrZXlQYWlyU2V4cDsKKyAgICBlcnJv
ciA9IGdjcnlfcGtfZ2Vua2V5KCZrZXlQYWlyU2V4cCwgZ2Vua2V5U2V4cCk7CisgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
ciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJy
b3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBH
Q3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IHB1YmxpY0tleVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9r
ZW4oa2V5UGFpclNleHAsICJwdWJsaWMta2V5IiwgMCkpOworICAgIEdDcnlwdEhhbmRsZTxnY3J5
X3NleHBfdD4gcHJpdmF0ZUtleVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9rZW4oa2V5UGFpclNleHAs
ICJwcml2YXRlLWtleSIsIDApKTsKKyAgICBpZiAoIXB1YmxpY0tleVNleHAgfHwgIXByaXZhdGVL
ZXlTZXhwKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBwdWJsaWNL
ZXkgPSBDcnlwdG9LZXlFQzo6Y3JlYXRlKGlkZW50aWZpZXIsIGN1cnZlLCBDcnlwdG9LZXlUeXBl
OjpQdWJsaWMsIHB1YmxpY0tleVNleHAucmVsZWFzZSgpLCB0cnVlLCB1c2FnZXMpOworICAgIGF1
dG8gcHJpdmF0ZUtleSA9IENyeXB0b0tleUVDOjpjcmVhdGUoaWRlbnRpZmllciwgY3VydmUsIENy
eXB0b0tleVR5cGU6OlByaXZhdGUsIHByaXZhdGVLZXlTZXhwLnJlbGVhc2UoKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CisgICAgcmV0dXJuIENyeXB0b0tleVBhaXJ7IFdURk1vdmUocHVibGljS2V5
KSwgV1RGTW92ZShwcml2YXRlS2V5KSB9OworfQorCitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0
b0tleUVDOjpwbGF0Zm9ybUltcG9ydFJhdyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50
aWZpZXIsIE5hbWVkQ3VydmUgY3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wg
ZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKK3sKKyAgICBpZiAoIWRv
ZXNVbmNvbXByZXNzZWRQb2ludE1hdGNoTmFtZWRDdXJ2ZShjdXJ2ZSwga2V5RGF0YS5zaXplKCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihwdWJsaWMta2V5KGVjYyhjdXJ2ZSAiKTsKKyAg
ICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBOYW1lZEN1cnZlOjpQMjU2OgorICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiTklTVCBQLTI1NlwiIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDM4NDoKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcIk5JU1QgUC0zODRcIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIpIChxICMiKTsKKyAgICBmb3IgKGF1dG8mIGJ5dGUgOiBrZXlEYXRhKQor
ICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIjKSkpIik7CisKKyAgICBTdHJpbmcgc0V4cHJlc3Npb24gPSBidWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBzRXhwcmVzc2lvbi51
dGY4KCk7CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYXRmb3JtS2V5OworICAg
IGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXcoJnBsYXRmb3JtS2V5LCBzRXhwcmVz
c2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAg
IGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5
X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHJldHVybiBjcmVhdGUoaWRlbnRpZmllciwgY3VydmUsIENyeXB0b0tleVR5cGU6OlB1YmxpYywg
cGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKK30KKworUmVmUHRy
PENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1JbXBvcnRKV0tQdWJsaWMoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBOYW1lZEN1cnZlIGN1cnZlLCBWZWN0b3I8
dWludDhfdD4mJiB4LCBWZWN0b3I8dWludDhfdD4mJiB5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMpCit7CisgICAgaWYgKCFkb2VzRmllbGRFbGVtZW50TWF0
Y2hOYW1lZEN1cnZlKGN1cnZlLCB4LnNpemUoKSkgfHwgIWRvZXNGaWVsZEVsZW1lbnRNYXRjaE5h
bWVkQ3VydmUoY3VydmUsIHkuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIocHVi
bGljLWtleShlY2MoY3VydmUgIik7CisgICAgc3dpdGNoIChjdXJ2ZSkgeworICAgIGNhc2UgTmFt
ZWRDdXJ2ZTo6UDI1NjoKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIk5JU1QgUC0y
NTZcIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOYW1lZEN1cnZlOjpQMzg0OgorICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiTklTVCBQLTM4NFwiKSIpOworICAgIH0KKyAg
ICB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKHEgIzA0Iik7CisgICAgICAgIGZv
ciAoYXV0byBieXRlIDogeCkKKyAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleChieXRlLCBidWls
ZGVyKTsKKyAgICAgICAgZm9yIChhdXRvIGJ5dGUgOiB5KQorICAgICAgICAgICAgYXBwZW5kQnl0
ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMp
Iik7CisgICAgfQorICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSkiKTsKKworICAgIFN0cmlu
ZyBzRXhwcmVzc2lvbiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBDU3RyaW5nIHNFeHByZXNz
aW9uQ1N0cmluZyA9IHNFeHByZXNzaW9uLnV0ZjgoKTsKKworICAgIEdDcnlwdEhhbmRsZTxnY3J5
X3NleHBfdD4gcGxhdGZvcm1LZXk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhw
X25ldygmcGxhdGZvcm1LZXksIHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHByZXNzaW9u
Q1N0cmluZy5sZW5ndGgoKSwgMSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBn
Y3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNyZWF0ZShpZGVudGlmaWVyLCBjdXJ2
ZSwgQ3J5cHRvS2V5VHlwZTo6UHVibGljLCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4dHJhY3Rh
YmxlLCB1c2FnZXMpOworfQorCitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0
Zm9ybUltcG9ydEpXS1ByaXZhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVy
LCBOYW1lZEN1cnZlIGN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiB4LCBWZWN0b3I8dWludDhfdD4m
JiB5LCBWZWN0b3I8dWludDhfdD4mJiBkLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2Fn
ZUJpdG1hcCB1c2FnZXMpCit7CisgICAgaWYgKCFkb2VzRmllbGRFbGVtZW50TWF0Y2hOYW1lZEN1
cnZlKGN1cnZlLCB4LnNpemUoKSkgfHwgIWRvZXNGaWVsZEVsZW1lbnRNYXRjaE5hbWVkQ3VydmUo
Y3VydmUsIHkuc2l6ZSgpKSB8fCAhZG9lc0ZpZWxkRWxlbWVudE1hdGNoTmFtZWRDdXJ2ZShjdXJ2
ZSwgZC5zaXplKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIocHJpdmF0ZS1rZXko
ZWNjKGN1cnZlICIpOworICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICBjYXNlIE5hbWVkQ3VydmU6
OlAyNTY6CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCJOSVNUIFAtMjU2XCIpIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDM4NDoKKyAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJcIk5JU1QgUC0zODRcIikiKTsKKyAgICB9CisgICAgeworICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihxICMwNCIpOworICAgICAgICBmb3IgKGF1dG8m
IGJ5dGUgOiB4KQorICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOwor
ICAgICAgICBmb3IgKGF1dG8mIGJ5dGUgOiB5KQorICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4
KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMgKSIpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGQgIyIpOworICAg
ICAgICBmb3IgKGF1dG8mIGJ5dGUgOiBkKQorICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5
dGUsIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMgKSIpOworICAg
IH0KKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIikpIik7CisKKyAgICBTdHJpbmcgc0V4cHJl
c3Npb24gPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJp
bmcgPSBzRXhwcmVzc2lvbi51dGY4KCk7CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+
IHBsYXRmb3JtS2V5OworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXcoJnBs
YXRmb3JtS2V5LCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcu
bGVuZ3RoKCksIDEpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJz
b3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIHJldHVybiBjcmVhdGUoaWRlbnRpZmllciwgY3VydmUsIENyeXB0
b0tleVR5cGU6OlByaXZhdGUsIHBsYXRmb3JtS2V5LnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7Cit9CisKK3ZvaWQgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmllbGRFbGVtZW50cyhK
c29uV2ViS2V5JiBqd2spIGNvbnN0Cit7CisgICAgR0NyeXB0SGFuZGxlPGdjcnlfY3R4X3Q+IGNv
bnRleHQ7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9tcGlfZWNfbmV3KCZjb250ZXh0
LCBtX3BsYXRmb3JtS2V5LCBudWxscHRyKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJy
b3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IHNpemUgPSBnZXRLZXlTaXplRnJvbU5hbWVk
Q3VydmUobV9jdXJ2ZSk7CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gcU1QSShnY3J5
X21waV9lY19nZXRfbXBpKCJxIiwgY29udGV4dCwgMCkpOworICAgIGlmIChxTVBJKSB7CisgICAg
ICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmlu
dChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBxTVBJKTsKKyAgICAg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwg
Z2NyeV9zdHJlcnJvcihlcnJvcikpOworCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBxKGRhdGFM
ZW5ndGgpOworICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywg
cS5kYXRhKCksIHEuc2l6ZSgpLCBudWxscHRyLCBxTVBJKTsKKyAgICAgICAgaWYgKGVycm9yICE9
IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVk
LCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihl
cnJvcikpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBhOworICAg
ICAgICAgICAgYS5hcHBlbmQocS5kYXRhKCkgKyAxLCBzaXplIC8gOCk7CisgICAgICAgICAgICBq
d2sueCA9IGJhc2U2NFVSTEVuY29kZShhKTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4gYjsKKyAgICAgICAgICAgIGIuYXBwZW5kKHEuZGF0YSgpICsg
c2l6ZSAvIDggKyAxLCBzaXplIC8gOCk7CisgICAgICAgICAgICBqd2sueSA9IGJhc2U2NFVSTEVu
Y29kZShiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBlKCkgPT0gVHlwZTo6UHJp
dmF0ZSkgeworICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gZE1QSShnY3J5X21waV9l
Y19nZXRfbXBpKCJkIiwgY29udGV4dCwgMCkpOworICAgICAgICBpZiAoZE1QSSkgeworCisgICAg
ICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmlu
dChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBkTVBJKTsKKyAgICAg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwg
Z2NyeV9zdHJlcnJvcihlcnJvcikpOworCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkKGRhdGFM
ZW5ndGgpOworICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywg
ZC5kYXRhKCksIGQuc2l6ZSgpLCBudWxscHRyLCBkTVBJKTsKKyAgICAgICAgaWYgKGVycm9yID09
IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZShk
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwg
JXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJy
b3IpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZW51bSBjbGFzcyBFQ0FsZ29yaXRobSB7Cisg
ICAgUHVibGljS2V5LAorICAgIERILAorfTsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8RUNBbGdv
cml0aG0+IGFsZ29yaXRobUZvcklkZW50aWZpZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgNz4gc19pZEVD
UHVibGljS2V5eyB7IDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEgfSB9
OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDU+IHNfaWRFQ0RIeyB7IDB4
MmIsIDB4ODEsIDB4MDQsIDB4MDEsIDB4MGMgfSB9OworCisgICAgaWYgKHNpemUgPT0gc19pZEVD
UHVibGljS2V5LnNpemUoKSAmJiAhc3RkOjptZW1jbXAoZGF0YSwgc19pZEVDUHVibGljS2V5LmRh
dGEoKSwgc2l6ZSkpCisgICAgICAgIHJldHVybiBFQ0FsZ29yaXRobTo6UHVibGljS2V5OworICAg
IGlmIChzaXplID09IHNfaWRFQ0RILnNpemUoKSAmJiAhc3RkOjptZW1jbXAoZGF0YSwgc19pZEVD
REguZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIEVDQWxnb3JpdGhtOjpESDsKKyAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxDcnlwdG9LZXlF
Qzo6TmFtZWRDdXJ2ZT4gY3VydmVGb3JJZGVudGlmaWVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDg+IHNf
c2VjcDI1NnIxeyB7IDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDMsIDB4MDEsIDB4
MDcgfSB9OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDU+IHNfc2VjcDM4
NHIxeyB7IDB4MmIsIDB4ODEsIDB4MDQsIDB4MDAsIDB4MjIgfSB9OworICAgIHN0YXRpYyBjb25z
dCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDU+IHNfc2VjcDUyMXIxeyB7IDB4MmIsIDB4ODEsIDB4MDQs
IDB4MDAsIDB4MjMgfSB9OworCisgICAgaWYgKHNpemUgPT0gc19zZWNwMjU2cjEuc2l6ZSgpICYm
ICFzdGQ6Om1lbWNtcChkYXRhLCBzX3NlY3AyNTZyMS5kYXRhKCksIHNpemUpKQorICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RUM6Ok5hbWVkQ3VydmU6OlAyNTY7CisgICAgaWYgKHNpemUgPT0gc19z
ZWNwMzg0cjEuc2l6ZSgpICYmICFzdGQ6Om1lbWNtcChkYXRhLCBzX3NlY3AzODRyMS5kYXRhKCks
IHNpemUpKQorICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RUM6Ok5hbWVkQ3VydmU6OlAzODQ7Cisg
ICAgaWYgKHNpemUgPT0gc19zZWNwNTIxcjEuc2l6ZSgpICYmICFzdGQ6Om1lbWNtcChkYXRhLCBz
X3NlY3A1MjFyMS5kYXRhKCksIHNpemUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OyAv
LyBOb3Qgc3VwcG9ydGVkIHlldC4KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQ
dHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9ydFNwa2koQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBOYW1lZEN1cnZlIGN1cnZlLCBWZWN0b3I8dWlu
dDhfdD4mJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1
c2FnZXMpCit7CisgICAgLy8gU3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsK
KyAgICAvLyAgIGFsZ29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAg
Ly8gICBzdWJqZWN0UHVibGljS2V5ICAgICBCSVQgU1RSSU5HICB9CisgICAgYXV0byBzdWJqZWN0
UHVibGljS2V5SW5mb1RMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIDApOworICAgIGlmICgh
c3ViamVjdFB1YmxpY0tleUluZm9UTFYuYnVmZmVyU2l6ZSB8fCAhc3ViamVjdFB1YmxpY0tleUlu
Zm9UTFYuaGFzVGFnKEFTTjE6OlRhZzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBpZiAoc3ViamVjdFB1YmxpY0tleUluZm9UTFYuYnVmZmVyU2l6ZSAhPSBrZXlEYXRh
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBBbGdvcml0aG1JZGVu
dGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAgT0JKRUNUIElE
RU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGht
IE9QVElPTkFMCisgICAgLy8gfQorICAgIGF1dG8gYWxnb3JpdGhtSWRlbnRpZmllclRMViA9IEFT
TjE6OnBhcnNlVExWKGtleURhdGEsIHN1YmplY3RQdWJsaWNLZXlJbmZvVExWLnZhbHVlT2Zmc2V0
KCkpOworICAgIGlmICghYWxnb3JpdGhtSWRlbnRpZmllclRMVi5idWZmZXJTaXplIHx8ICFhbGdv
cml0aG1JZGVudGlmaWVyVExWLmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGFsZ29yaXRobVRMViA9IEFTTjE6OnBhcnNlVExW
KGtleURhdGEsIGFsZ29yaXRobUlkZW50aWZpZXJUTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYg
KCFhbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSB8fCAhYWxnb3JpdGhtVExWLmhhc1RhZyhBU04xOjpU
YWc6Ok9iamVjdElkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gc3VwcG9ydGVkQWxnb3JpdGhtID0gYWxnb3JpdGhtRm9ySWRlbnRpZmllcihrZXlEYXRhLmRh
dGEoKSArIGFsZ29yaXRobVRMVi52YWx1ZU9mZnNldCgpLCBhbGdvcml0aG1UTFYubGVuZ3RoKTsK
KyAgICBpZiAoIXN1cHBvcnRlZEFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAvLyBFQ1BhcmFtZXRlcnMgOjo9IENIT0lDRSB7CisgICAgLy8gICBuYW1lZEN1cnZlICAg
ICAgICAgT0JKRUNUIElERU5USUZJRVIgLS0gTVVTVCBiZSBzdXBwb3J0ZWQuCisgICAgLy8gICAt
LSBpbXBsaWNpdEN1cnZlICAgTlVMTCAtLSBNVVNUIE5PVCBiZSB1c2VkLgorICAgIC8vICAgLS0g
c3BlY2lmaWVkQ3VydmUgIFNwZWNpZmllZEVDRG9tYWluIC0tIE1VU1QgTk9UIGJlIHVzZWQuCisg
ICAgLy8gfQorICAgIGF1dG8gZWNQYXJhbWV0ZXJzVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0
YSwKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllclRMVi52YWx1ZU9mZnNldCgpICsgYWxnb3Jp
dGhtVExWLmJ1ZmZlclNpemUpOworICAgIGlmICghZWNQYXJhbWV0ZXJzVExWLmJ1ZmZlclNpemUg
fHwgIWVjUGFyYW1ldGVyc1RMVi5oYXNUYWcoQVNOMTo6VGFnOjpPYmplY3RJZGVudGlmaWVyKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHBhcmFtZXRlckN1cnZlID0gY3Vy
dmVGb3JJZGVudGlmaWVyKGtleURhdGEuZGF0YSgpICsgZWNQYXJhbWV0ZXJzVExWLnZhbHVlT2Zm
c2V0KCksIGVjUGFyYW1ldGVyc1RMVi5sZW5ndGgpOworICAgIGlmICghcGFyYW1ldGVyQ3VydmUg
fHwgKnBhcmFtZXRlckN1cnZlICE9IGN1cnZlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGlmIChhbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSArIGVjUGFyYW1ldGVyc1RMVi5idWZmZXJT
aXplICE9IGFsZ29yaXRobUlkZW50aWZpZXJUTFYubGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gc3ViamVjdFB1YmxpY0tleVRMViA9IEFTTjE6OnBhcnNlVExWKGtl
eURhdGEsCisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlJbmZvVExWLnZhbHVlT2Zmc2V0KCkgKyBh
bGdvcml0aG1JZGVudGlmaWVyVExWLmJ1ZmZlclNpemUpOworICAgIGlmICghc3ViamVjdFB1Ymxp
Y0tleVRMVi5idWZmZXJTaXplIHx8ICFzdWJqZWN0UHVibGljS2V5VExWLmhhc1RhZyhBU04xOjpU
YWc6OkJpdFN0cmluZykKKyAgICAgICAgfHwga2V5RGF0YVtzdWJqZWN0UHVibGljS2V5VExWLnZh
bHVlT2Zmc2V0KCldICE9IDB4MDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYg
KGtleURhdGFbc3ViamVjdFB1YmxpY0tleVRMVi52YWx1ZU9mZnNldCgpICsgMV0gIT0gMHgwNCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc2l6ZV90IHBvaW50U2l6ZSA9IDIgKiAoZ2V0
S2V5U2l6ZUZyb21OYW1lZEN1cnZlKGN1cnZlKSAvIDgpOworICAgIGlmIChzdWJqZWN0UHVibGlj
S2V5VExWLmxlbmd0aCAtIDIgIT0gcG9pbnRTaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEdDcnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gcGxhdGZvcm1LZXk7CisgICAgeworICAg
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKHB1YmxpYy1rZXkoZWNjKGN1cnZlICIpOworICAgICAgICBzd2l0Y2ggKGN1cnZlKSB7Cisg
ICAgICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDI1NjoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiXCJOSVNUIFAtMjU2XCIpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBOYW1lZEN1cnZlOjpQMzg0OgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcIk5JU1QgUC0zODRcIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKHEgIzA0Iik7CisgICAg
ICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc3ViamVjdFB1YmxpY0tleVRMVi52YWx1ZU9mZnNldCgp
ICsgMjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9pbnRTaXplOyArK2kp
CisgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGtleURhdGFbb2Zmc2V0ICsgaV0sIGJ1
aWxkZXIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIjICkiKTsKKyAgICAg
ICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIikpIik7CisKKyAgICAgICAgU3Ry
aW5nIHNFeHByZXNzaW9uID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICBDU3RyaW5nIHNF
eHByZXNzaW9uQ1N0cmluZyA9IHNFeHByZXNzaW9uLnV0ZjgoKTsKKworICAgICAgICBnY3J5X2Vy
cm9yX3QgZXJyb3IgPSBnY3J5X3NleHBfbmV3KCZwbGF0Zm9ybUtleSwgc0V4cHJlc3Npb25DU3Ry
aW5nLmRhdGEoKSwgc0V4cHJlc3Npb25DU3RyaW5nLmxlbmd0aCgpLCAxKTsKKyAgICAgICAgaWYg
KGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5
X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBjcmVhdGUoaWRlbnRpZmllciwgY3VydmUsIENyeXB0b0tl
eVR5cGU6OlB1YmxpYywgcGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2Vz
KTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUV4cG9ydFNwa2ko
KSBjb25zdAoreworICAgIGF1dG8gYXBwZW5kTGVuZ3RoID0KKyAgICAgICAgW10oc2l6ZV90IGxl
bmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGgg
PiAxMjcpIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGxlbmd0aEJ5dGVzID0gc3RkOjpjZWls
KHN0ZDo6bG9nMihsZW5ndGggKyAxKSAvIDgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoMHg4MCB8IGxlbmd0aEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9
IDA7IGkgPCBsZW5ndGhCeXRlczsgKytpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKChsZW5ndGggPj4gKChsZW5ndGhCeXRlcyAtIGkgLSAxKSAqIDgpICYgMHhmZikpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsZW5ndGgpOwor
ICAgICAgICB9OworCisgICAgLy8gU3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0Ug
IHsKKyAgICAvLyAgIGFsZ29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisg
ICAgLy8gICBzdWJqZWN0UHVibGljS2V5ICAgICBCSVQgU1RSSU5HICB9CisKKyAgICAvLyBBbGdv
cml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAg
T0JKRUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkg
YWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIFZlY3Rvcjx1aW50OF90PiBhbGdvcml0
aG1JZGVudGlmaWVyRGF0YTsKKyAgICB7CisgICAgICAgIC8vIHN0YXRpYyBjb25zdCBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDU+IHNfaWRFQ0RIeyB7IDB4MmIsIDB4ODEsIDB4MDQsIDB4MDEsIDB4MGMg
fSB9OworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA3PiBzX2lkRUNQ
dWJsaWNLZXl7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSB9IH07
CisKKyAgICAgICAgLy8gRUNQYXJhbWV0ZXJzIDo6PSBDSE9JQ0UgeworICAgICAgICAvLyAgIG5h
bWVkQ3VydmUgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiAtLSBNVVNUIGJlIHN1cHBvcnRlZC4K
KyAgICAgICAgLy8gICAtLSBpbXBsaWNpdEN1cnZlICAgTlVMTCAtLSBNVVNUIE5PVCBiZSB1c2Vk
LgorICAgICAgICAvLyAgIC0tIHNwZWNpZmllZEN1cnZlICBTcGVjaWZpZWRFQ0RvbWFpbiAtLSBN
VVNUIE5PVCBiZSB1c2VkLgorICAgICAgICAvLyB9CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBl
Y1BhcmFtZXRlcnNEYXRhOworICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3Rk
OjphcnJheTx1aW50OF90LCA4PiBzX3NlY3AyNTZyMXsgeyAweDJhLCAweDg2LCAweDQ4LCAweGNl
LCAweDNkLCAweDAzLCAweDAxLCAweDA3IH0gfTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBz
dGQ6OmFycmF5PHVpbnQ4X3QsIDU+IHNfc2VjcDM4NHIxeyB7IDB4MmIsIDB4ODEsIDB4MDQsIDB4
MDAsIDB4MjIgfSB9OworCisgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZCgweDA2
KTsKKworICAgICAgICAgICAgc3dpdGNoIChtX2N1cnZlKSB7CisgICAgICAgICAgICBjYXNlIE5h
bWVkQ3VydmU6OlAyNTY6CisgICAgICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQo
c19zZWNwMjU2cjEuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFw
cGVuZChzX3NlY3AyNTZyMS5kYXRhKCksIHNfc2VjcDI1NnIxLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAg
ICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMzg0cjEuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZChzX3NlY3AzODRyMS5kYXRhKCks
IHNfc2VjcDM4NHIxLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQo
MHgzMCk7CisgICAgICAgIGFwcGVuZExlbmd0aCgyICsgc19pZEVDUHVibGljS2V5LnNpemUoKSAr
IGVjUGFyYW1ldGVyc0RhdGEuc2l6ZSgpLCBhbGdvcml0aG1JZGVudGlmaWVyRGF0YSk7CisKKyAg
ICAgICAgLy8gYWxnb3JpdGhtCisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVu
ZCgweDA2KTsKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKHNfaWRFQ1B1
YmxpY0tleS5zaXplKCkpOworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQo
c19pZEVDUHVibGljS2V5LmRhdGEoKSwgc19pZEVDUHVibGljS2V5LnNpemUoKSk7CisKKyAgICAg
ICAgLy8gcGFyYW1ldGVycworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmRW
ZWN0b3IoZWNQYXJhbWV0ZXJzRGF0YSk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHN1
YmplY3RQdWJsaWNLZXlEYXRhOworICAgIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHE7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdDcnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gcVNleHAoZ2Ny
eV9zZXhwX2ZpbmRfdG9rZW4obV9wbGF0Zm9ybUtleSwgInEiLCAwKSk7CisgICAgICAgICAgICBp
ZiAoIXFTZXhwKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgIHNp
emVfdCBwb2ludFNpemUgPSAyICogKGdldEtleVNpemVGcm9tTmFtZWRDdXJ2ZShtX2N1cnZlKSAv
IDgpOworICAgICAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgICAgICAgICAgY29u
c3QgY2hhciogZGF0YSA9IGdjcnlfc2V4cF9udGhfZGF0YShxU2V4cCwgMSwgJmRhdGFMZW5ndGgp
OworICAgICAgICAgICAgaWYgKCFkYXRhIHx8IGRhdGFMZW5ndGggIT0gcG9pbnRTaXplICsgMSB8
fCBkYXRhWzBdICE9IDB4MDQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAg
ICAgICAgcS5hcHBlbmQoZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBz
dWJqZWN0UHVibGljS2V5RGF0YS5hcHBlbmQoMHgwMyk7CisgICAgICAgIGFwcGVuZExlbmd0aCgx
ICsgcS5zaXplKCksIHN1YmplY3RQdWJsaWNLZXlEYXRhKTsKKyAgICAgICAgc3ViamVjdFB1Ymxp
Y0tleURhdGEuYXBwZW5kKDB4MDApOworICAgICAgICBzdWJqZWN0UHVibGljS2V5RGF0YS5hcHBl
bmRWZWN0b3IocSk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKKyAgICBy
ZXN1bHQuYXBwZW5kKDB4MzApOworICAgIGFwcGVuZExlbmd0aChhbGdvcml0aG1JZGVudGlmaWVy
RGF0YS5zaXplKCkgKyBzdWJqZWN0UHVibGljS2V5RGF0YS5zaXplKCksIHJlc3VsdCk7CisgICAg
cmVzdWx0LmFwcGVuZFZlY3RvcihhbGdvcml0aG1JZGVudGlmaWVyRGF0YSk7CisgICAgcmVzdWx0
LmFwcGVuZFZlY3RvcihzdWJqZWN0UHVibGljS2V5RGF0YSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9ydFBr
Y3M4KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgTmFtZWRDdXJ2ZSBjdXJ2
ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQoreworICAgIC8vIFByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5D
RSB7CisgICAgLy8gICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgIFZlcnNpb24sCisgICAgLy8g
ICBwcml2YXRlS2V5QWxnb3JpdGhtICAgICAgIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVy
LAorICAgIC8vICAgcHJpdmF0ZUtleSAgICAgICAgICAgICAgICBQcml2YXRlS2V5LAorICAgIC8v
ICAgYXR0cmlidXRlcyAgICAgICAgICAgWzBdICBJTVBMSUNJVCBBdHRyaWJ1dGVzIE9QVElPTkFM
IH0KKyAgICBhdXRvIHByaXZhdGVLZXlJbmZvVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwg
MCk7CisgICAgaWYgKCFwcml2YXRlS2V5SW5mb1RMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlS2V5
SW5mb1RMVi5oYXNUYWcoQVNOMTo6VGFnOjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGlmIChwcml2YXRlS2V5SW5mb1RMVi5idWZmZXJTaXplICE9IGtleURhdGEuc2l6
ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFZlcnNpb24gOjo9IElOVEVH
RVIKKyAgICBhdXRvIHZlcnNpb25UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBwcml2YXRl
S2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpKTsKKyAgICBpZiAoIXZlcnNpb25UTFYuYnVmZmVyU2l6
ZSB8fCAhdmVyc2lvblRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKHZlcnNpb25UTFYubGVuZ3RoICE9IDEgJiYga2V5RGF0YVt2
ZXJzaW9uVExWLnZhbHVlT2Zmc2V0KCldICE9IDApCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgLy8gUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50
aWZpZXIKKyAgICAvLyBBbGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAg
Ly8gICAgYWxnb3JpdGhtICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVy
cyAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIGF1dG8g
cHJpdmF0ZUtleUFsZ29yaXRobVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsCisgICAgICAg
IHByaXZhdGVLZXlJbmZvVExWLnZhbHVlT2Zmc2V0KCkgKyB2ZXJzaW9uVExWLmJ1ZmZlclNpemUp
OworICAgIGlmICghcHJpdmF0ZUtleUFsZ29yaXRobVRMVi5idWZmZXJTaXplIHx8ICFwcml2YXRl
S2V5QWxnb3JpdGhtVExWLmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGFsZ29yaXRobVRMViA9IEFTTjE6OnBhcnNlVExWKGtl
eURhdGEsIHByaXZhdGVLZXlBbGdvcml0aG1UTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCFh
bGdvcml0aG1UTFYuYnVmZmVyU2l6ZSB8fCAhYWxnb3JpdGhtVExWLmhhc1RhZyhBU04xOjpUYWc6
Ok9iamVjdElkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
c3VwcG9ydGVkQWxnb3JpdGhtID0gYWxnb3JpdGhtRm9ySWRlbnRpZmllcihrZXlEYXRhLmRhdGEo
KSArIGFsZ29yaXRobVRMVi52YWx1ZU9mZnNldCgpLCBhbGdvcml0aG1UTFYubGVuZ3RoKTsKKyAg
ICBpZiAoIXN1cHBvcnRlZEFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAvLyBFQ1BhcmFtZXRlcnMgOjo9IENIT0lDRSB7CisgICAgLy8gICBuYW1lZEN1cnZlICAgICAg
ICAgT0JKRUNUIElERU5USUZJRVIgLS0gTVVTVCBiZSBzdXBwb3J0ZWQuCisgICAgLy8gICAtLSBp
bXBsaWNpdEN1cnZlICAgTlVMTCAtLSBNVVNUIE5PVCBiZSB1c2VkLgorICAgIC8vICAgLS0gc3Bl
Y2lmaWVkQ3VydmUgIFNwZWNpZmllZEVDRG9tYWluIC0tIE1VU1QgTk9UIGJlIHVzZWQuCisgICAg
Ly8gfQorICAgIGF1dG8gZWNQYXJhbWV0ZXJzVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwK
KyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobVRMVi52YWx1ZU9mZnNldCgpICsgYWxnb3JpdGht
VExWLmJ1ZmZlclNpemUpOworICAgIGlmICghZWNQYXJhbWV0ZXJzVExWLmJ1ZmZlclNpemUgfHwg
IWVjUGFyYW1ldGVyc1RMVi5oYXNUYWcoQVNOMTo6VGFnOjpPYmplY3RJZGVudGlmaWVyKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHBhcmFtZXRlckN1cnZlID0gY3VydmVG
b3JJZGVudGlmaWVyKGtleURhdGEuZGF0YSgpICsgZWNQYXJhbWV0ZXJzVExWLnZhbHVlT2Zmc2V0
KCksIGVjUGFyYW1ldGVyc1RMVi5sZW5ndGgpOworICAgIGlmICghcGFyYW1ldGVyQ3VydmUgfHwg
KnBhcmFtZXRlckN1cnZlICE9IGN1cnZlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGlmIChhbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSArIGVjUGFyYW1ldGVyc1RMVi5idWZmZXJTaXpl
ICE9IHByaXZhdGVLZXlBbGdvcml0aG1UTFYubGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIC8vIFByaXZhdGVLZXkgOjo9IE9DVEVUIFNUUklORworICAgIGF1dG8gcHJpdmF0
ZUtleVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsCisgICAgICAgIHByaXZhdGVLZXlJbmZv
VExWLnZhbHVlT2Zmc2V0KCkgKyB2ZXJzaW9uVExWLmJ1ZmZlclNpemUgKyBwcml2YXRlS2V5QWxn
b3JpdGhtVExWLmJ1ZmZlclNpemUpOworICAgIGlmICghcHJpdmF0ZUtleVRMVi5idWZmZXJTaXpl
IHx8ICFwcml2YXRlS2V5VExWLmhhc1RhZyhBU04xOjpUYWc6Ok9jdGV0U3RyaW5nKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAodmVyc2lvblRMVi5idWZmZXJTaXplICsgcHJp
dmF0ZUtleUFsZ29yaXRobVRMVi5idWZmZXJTaXplICsgcHJpdmF0ZUtleVRMVi5idWZmZXJTaXpl
ICE9IHByaXZhdGVLZXlJbmZvVExWLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAvLyBFQ1ByaXZhdGVLZXkgOjo9IFNFUVVFTkNFIHsKKyAgICAvLyAgIHZlcnNpb24gICAg
ICAgIElOVEVHRVIgeyBlY1ByaXZrZXlWZXIxKDEpIH0gKGVjUHJpdmtleVZlcjEpLAorICAgIC8v
ICAgcHJpdmF0ZUtleSAgICAgT0NURVQgU1RSSU5HLAorICAgIC8vICAgcGFyYW1ldGVycyBbMF0g
RUNQYXJhbWV0ZXJzIHt7IE5hbWVkQ3VydmUgfX0gT1BUSU9OQUwsCisgICAgLy8gICBwdWJsaWNL
ZXkgIFsxXSBCSVQgU1RSSU5HIE9QVElPTkFMCisgICAgLy8gfQorICAgIGF1dG8gZWNQcml2YXRl
S2V5VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgcHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNl
dCgpKTsKKyAgICBpZiAoIWVjUHJpdmF0ZUtleVRMVi5idWZmZXJTaXplIHx8ICFlY1ByaXZhdGVL
ZXlUTFYuaGFzVGFnKEFTTjE6OlRhZzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIFZlY3Rvcjx1aW50OF90PiBkOworICAgIFZlY3Rvcjx1aW50OF90PiBxOworICAg
IHsKKyAgICAgICAgYXV0byB2ZXJzaW9uVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgZWNQ
cml2YXRlS2V5VExWLnZhbHVlT2Zmc2V0KCkpOworICAgICAgICBpZiAoIXZlcnNpb25UTFYuYnVm
ZmVyU2l6ZSB8fCAhdmVyc2lvblRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAodmVyc2lvblRMVi5sZW5ndGggIT0g
MSB8fCBrZXlEYXRhW3ZlcnNpb25UTFYudmFsdWVPZmZzZXQoKV0gIT0gMSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIGF1dG8gcHJpdmF0ZUtleVRMViA9IEFTTjE6OnBh
cnNlVExWKGtleURhdGEsCisgICAgICAgICAgICBlY1ByaXZhdGVLZXlUTFYudmFsdWVPZmZzZXQo
KSArIHZlcnNpb25UTFYuYnVmZmVyU2l6ZSk7CisgICAgICAgIGlmICghcHJpdmF0ZUtleVRMVi5i
dWZmZXJTaXplIHx8ICFwcml2YXRlS2V5VExWLmhhc1RhZyhBU04xOjpUYWc6Ok9jdGV0U3RyaW5n
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGQucmVzaXplKHByaXZh
dGVLZXlUTFYubGVuZ3RoKTsKKyAgICAgICAgc3RkOjptZW1jcHkoZC5kYXRhKCksIGtleURhdGEu
ZGF0YSgpICsgcHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNldCgpLCBwcml2YXRlS2V5VExWLmxlbmd0
aCk7CisKKyAgICAgICAgYXV0byBvcHRpb25hbFRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEs
CisgICAgICAgICAgICBlY1ByaXZhdGVLZXlUTFYudmFsdWVPZmZzZXQoKSArIHZlcnNpb25UTFYu
YnVmZmVyU2l6ZSArIHByaXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSk7CisKKyAgICAgICAgLy8gRklY
TUU6IGhhbmRsZSBvcHRpb25hbCBwYXJhbWV0ZXJzLCBwdWJsaWNLZXkgZmllbGRzLgorICAgICAg
ICBpZiAob3B0aW9uYWxUTFYuYnVmZmVyU2l6ZSAmJiBvcHRpb25hbFRMVi50YWcgJiAweDIwKSB7
CisgICAgICAgICAgICBhdXRvIHB1YmxpY0tleVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEs
IG9wdGlvbmFsVExWLnZhbHVlT2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKHB1YmxpY0tleVRM
Vi5idWZmZXJTaXplICYmIHB1YmxpY0tleVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpCaXRTdHJpbmcp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGtleURhdGFbcHVibGljS2V5VExWLnZhbHVlT2Zmc2V0
KCldICE9IDB4MDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgICAgIHEuYXBwZW5kKGtleURhdGEuZGF0YSgpICsgcHVibGljS2V5VExWLnZhbHVlT2Zm
c2V0KCkgKyAxLCBwdWJsaWNLZXlUTFYubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodmVyc2lvblRMVi5idWZmZXJTaXplICsgcHJpdmF0ZUtleVRM
Vi5idWZmZXJTaXplICsgb3B0aW9uYWxUTFYuYnVmZmVyU2l6ZSAhPSBlY1ByaXZhdGVLZXlUTFYu
bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGQu
c2l6ZSgpICogOCAhPSBnZXRLZXlTaXplRnJvbU5hbWVkQ3VydmUoY3VydmUpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghcS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHEu
c2l6ZSgpICE9IDIgKiAoZ2V0S2V5U2l6ZUZyb21OYW1lZEN1cnZlKGN1cnZlKSAvIDgpICsgMSB8
fCBxWzBdICE9IDB4MDQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYXRmb3JtS2V5OworICAgIHsKKyAgICAgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihw
cml2YXRlLWtleShlY2MoY3VydmUgIik7CisgICAgICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICAg
ICAgY2FzZSBOYW1lZEN1cnZlOjpQMjU2OgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJcIk5JU1QgUC0yNTZcIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwi
TklTVCBQLTM4NFwiKSIpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiKGQgIyIpOworICAgICAgICAgICAgZm9yIChhdXRvJiBieXRlIDog
ZCkKKyAgICAgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMgKSIpOworICAgICAgICB9CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSkiKTsKKworICAgICAgICBTdHJpbmcgc0V4cHJlc3Np
b24gPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3Ry
aW5nID0gc0V4cHJlc3Npb24udXRmOCgpOworCisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9
IGdjcnlfc2V4cF9uZXcoJnBsYXRmb3JtS2V5LCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBz
RXhwcmVzc2lvbkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwg
JXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJy
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGNyZWF0ZShpZGVudGlmaWVyLCBjdXJ2ZSwgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0
ZSwgcGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUV4cG9ydFBrY3M4KCkgY29uc3QKK3sK
KyAgICBhdXRvIGFwcGVuZExlbmd0aCA9CisgICAgICAgIFtdKHNpemVfdCBsZW5ndGgsIFZlY3Rv
cjx1aW50OF90PiYgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gMTI3KSB7Cisg
ICAgICAgICAgICAgICAgdWludDhfdCBsZW5ndGhCeXRlcyA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIo
bGVuZ3RoICsgMSkgLyA4KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDB4ODAgfCBs
ZW5ndGhCeXRlcyk7CisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbGVu
Z3RoQnl0ZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgobGVuZ3Ro
ID4+ICgobGVuZ3RoQnl0ZXMgLSBpIC0gMSkgKiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgfTsK
KworICAgIC8vIFByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgLy8gICB2ZXJzaW9u
ICAgICAgICAgICAgICAgICAgIFZlcnNpb24sCisgICAgLy8gICBwcml2YXRlS2V5QWxnb3JpdGht
ICAgICAgIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyLAorICAgIC8vICAgcHJpdmF0ZUtl
eSAgICAgICAgICAgICAgICBQcml2YXRlS2V5LAorICAgIC8vICAgYXR0cmlidXRlcyAgICAgICAg
ICAgWzBdICBJTVBMSUNJVCBBdHRyaWJ1dGVzIE9QVElPTkFMIH0KKworICAgIC8vIFZlcnNpb24g
Ojo9IElOVEVHRVIKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAzPiBzX3Zl
cnNpb25EYXRheyB7IDB4MDIsIDB4MDEsIDB4MDAgfSB9OworCisgICAgLy8gUHJpdmF0ZUtleUFs
Z29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAvLyBBbGdvcml0
aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAgT0JK
RUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxn
b3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlS2V5
QWxnb3JpdGhtRGF0YTsKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDc+IHNfaWRFQ1B1YmxpY0tleXsgeyAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNk
LCAweDAyLCAweDAxIH0gfTsKKworICAgICAgICAvLyBFQ1BhcmFtZXRlcnMgOjo9IENIT0lDRSB7
CisgICAgICAgIC8vICAgbmFtZWRDdXJ2ZSAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIC0tIE1V
U1QgYmUgc3VwcG9ydGVkLgorICAgICAgICAvLyAgIC0tIGltcGxpY2l0Q3VydmUgICBOVUxMIC0t
IE1VU1QgTk9UIGJlIHVzZWQuCisgICAgICAgIC8vICAgLS0gc3BlY2lmaWVkQ3VydmUgIFNwZWNp
ZmllZEVDRG9tYWluIC0tIE1VU1QgTk9UIGJlIHVzZWQuCisgICAgICAgIC8vIH0KKyAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGVjUGFyYW1ldGVyc0RhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDg+IHNfc2VjcDI1NnIxeyB7IDB4MmEs
IDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDMsIDB4MDEsIDB4MDcgfSB9OworICAgICAgICAg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgNT4gc19zZWNwMzg0cjF7IHsgMHgy
YiwgMHg4MSwgMHgwNCwgMHgwMCwgMHgyMiB9IH07CisKKyAgICAgICAgICAgIGVjUGFyYW1ldGVy
c0RhdGEuYXBwZW5kKDB4MDYpOworCisgICAgICAgICAgICBzd2l0Y2ggKG1fY3VydmUpIHsKKyAg
ICAgICAgICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDI1NjoKKyAgICAgICAgICAgICAgICBlY1BhcmFt
ZXRlcnNEYXRhLmFwcGVuZChzX3NlY3AyNTZyMS5zaXplKCkpOworICAgICAgICAgICAgICAgIGVj
UGFyYW1ldGVyc0RhdGEuYXBwZW5kKHNfc2VjcDI1NnIxLmRhdGEoKSwgc19zZWNwMjU2cjEuc2l6
ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTmFtZWRDdXJ2
ZTo6UDM4NDoKKyAgICAgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZChzX3NlY3Az
ODRyMS5zaXplKCkpOworICAgICAgICAgICAgICAgIGVjUGFyYW1ldGVyc0RhdGEuYXBwZW5kKHNf
c2VjcDM4NHIxLmRhdGEoKSwgc19zZWNwMzg0cjEuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGVLZXlBbGdv
cml0aG1EYXRhLmFwcGVuZCgweDMwKTsKKyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEu
YXBwZW5kKDIgKyBzX2lkRUNQdWJsaWNLZXkuc2l6ZSgpICsgZWNQYXJhbWV0ZXJzRGF0YS5zaXpl
KCkpOworCisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFwcGVuZCgweDA2KTsKKyAg
ICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEuYXBwZW5kKHNfaWRFQ1B1YmxpY0tleS5zaXpl
KCkpOworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoc19pZEVDUHVibGlj
S2V5LmRhdGEoKSwgc19pZEVDUHVibGljS2V5LnNpemUoKSk7CisKKyAgICAgICAgcHJpdmF0ZUtl
eUFsZ29yaXRobURhdGEuYXBwZW5kVmVjdG9yKGVjUGFyYW1ldGVyc0RhdGEpOworICAgIH0KKwor
ICAgIC8vIFByaXZhdGVLZXkgOjo9IE9DVEVUIFNUUklORworICAgIFZlY3Rvcjx1aW50OF90PiBw
cml2YXRlS2V5RGF0YTsKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkOworICAgICAg
ICBWZWN0b3I8dWludDhfdD4gcTsKKyAgICAgICAgeworICAgICAgICAgICAgR0NyeXB0SGFuZGxl
PGdjcnlfY3R4X3Q+IGNvbnRleHQ7CisgICAgICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBn
Y3J5X21waV9lY19uZXcoJmNvbnRleHQsIG1fcGxhdGZvcm1LZXksIG51bGxwdHIpOworICAgICAg
ICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdDcnlwdEhhbmRsZTxn
Y3J5X21waV90PiBkTVBJKGdjcnlfbXBpX2VjX2dldF9tcGkoImQiLCBjb250ZXh0LCAwKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFkTVBJKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9
OworCisgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgICAgICAgICAg
ICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRyLCAwLCAm
ZGF0YUxlbmd0aCwgZE1QSSk7CisgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAg
ICAgICBkLnJlc2l6ZShkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGdjcnlf
bXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgZC5kYXRhKCksIGQuc2l6ZSgpLCBudWxscHRyLCBk
TVBJKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gcU1QSShnY3J5X21w
aV9lY19nZXRfbXBpKCJxIiwgY29udGV4dCwgMCkpOworICAgICAgICAgICAgICAgIGlmICghcU1Q
SSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgICAgIHNp
emVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3By
aW50KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwgMCwgJmRhdGFMZW5ndGgsIHFNUEkpOworICAg
ICAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICAgICAgcS5yZXNpemUoZGF0YUxlbmd0
aCk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9V
U0csIHEuZGF0YSgpLCBxLnNpemUoKSwgbnVsbHB0ciwgcU1QSSk7CisgICAgICAgICAgICAgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBFQ1ByaXZhdGVL
ZXkgOjo9IFNFUVVFTkNFIHsKKyAgICAgICAgLy8gICB2ZXJzaW9uICAgICAgICBJTlRFR0VSIHsg
ZWNQcml2a2V5VmVyMSgxKSB9IChlY1ByaXZrZXlWZXIxKSwKKyAgICAgICAgLy8gICBwcml2YXRl
S2V5ICAgICBPQ1RFVCBTVFJJTkcsCisgICAgICAgIC8vICAgcGFyYW1ldGVycyBbMF0gRUNQYXJh
bWV0ZXJzIHt7IE5hbWVkQ3VydmUgfX0gT1BUSU9OQUwsCisgICAgICAgIC8vICAgcHVibGljS2V5
ICBbMV0gQklUIFNUUklORyBPUFRJT05BTAorICAgICAgICAvLyB9CisgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBlY1ByaXZhdGVLZXlEYXRhOworICAgICAgICB7CisgICAgICAgICAgICBlY1ByaXZh
dGVLZXlEYXRhLmFwcGVuZCgweDMwKTsKKyAgICAgICAgICAgIGFwcGVuZExlbmd0aCgzICsgMiAr
IGQuc2l6ZSgpICsgMiArIDMgKyBxLnNpemUoKSwgZWNQcml2YXRlS2V5RGF0YSk7CisKKyAgICAg
ICAgICAgIC8vIHZlcnNpb24KKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4
MDIpOworICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoMSk7CisgICAgICAgICAg
ICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZCgxKTsKKworICAgICAgICAgICAgLy8gcHJpdmF0ZUtl
eQorICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoMHgwNCk7CisgICAgICAgICAg
ICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZChkLnNpemUoKSk7CisgICAgICAgICAgICBlY1ByaXZh
dGVLZXlEYXRhLmFwcGVuZFZlY3RvcihkKTsKKworICAgICAgICAgICAgLy8gcHVibGljS2V5Cisg
ICAgICAgICAgICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZCgweEExKTsKKyAgICAgICAgICAgIGVj
UHJpdmF0ZUtleURhdGEuYXBwZW5kKDMgKyBxLnNpemUoKSk7CisgICAgICAgICAgICBlY1ByaXZh
dGVLZXlEYXRhLmFwcGVuZCgweDAzKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBw
ZW5kKDEgKyBxLnNpemUoKSk7CisgICAgICAgICAgICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZCgw
eDAwKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBwZW5kVmVjdG9yKHEpOworICAg
ICAgICB9CisKKyAgICAgICAgcHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4MDQpOworICAgICAgICBh
cHBlbmRMZW5ndGgoZWNQcml2YXRlS2V5RGF0YS5zaXplKCksIHByaXZhdGVLZXlEYXRhKTsKKyAg
ICAgICAgcHJpdmF0ZUtleURhdGEuYXBwZW5kVmVjdG9yKGVjUHJpdmF0ZUtleURhdGEpOworICAg
IH0KKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgweDMw
KTsKKyAgICBhcHBlbmRMZW5ndGgoc192ZXJzaW9uRGF0YS5zaXplKCkgKyBwcml2YXRlS2V5QWxn
b3JpdGhtRGF0YS5zaXplKCkgKyBwcml2YXRlS2V5RGF0YS5zaXplKCksIHJlc3VsdCk7CisgICAg
cmVzdWx0LmFwcGVuZChzX3ZlcnNpb25EYXRhLmRhdGEoKSwgc192ZXJzaW9uRGF0YS5zaXplKCkp
OworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocHJpdmF0ZUtleUFsZ29yaXRobURhdGEpOworICAg
IHJlc3VsdC5hcHBlbmRWZWN0b3IocHJpdmF0ZUtleURhdGEpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0tleVJTQUdDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tl
eVJTQUdDcnlwdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFm
NWZmMDlkNjRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlw
dC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCkBAIC0wLDAgKzEsOTgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIKKworI2lmIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNy
eXB0b0tleVBhaXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvQVNOMS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2Ny
eXB0L0dDcnlwdEhhbmRsZS5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIHNpemVfdCBnZXRSU0FNb2R1bHVzTGVuZ3RoKGdjcnlfc2V4cF90IHNleHApCit7CisgICAg
R0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBuU2V4cChnY3J5X3NleHBfZmluZF90b2tlbihzZXhw
LCAibiIsIDApKTsKKyAgICBpZiAoIW5TZXhwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdD
cnlwdEhhbmRsZTxnY3J5X21waV90PiBuTVBJKGdjcnlfc2V4cF9udGhfbXBpKG5TZXhwLCAxLCBH
Q1JZTVBJX0ZNVF9VU0cpKTsKKyAgICBpZiAoIW5NUEkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlf
bXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwgMCwgJmRhdGFMZW5ndGgsIG5NUEkp
OworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBkYXRhTGVuZ3RoICogODsKK30KKworc3RhdGljIFZlY3Rvcjx1aW50OF90
PiBnZXRQYXJhbWV0ZXJNUElEYXRhKGdjcnlfbXBpX3QgcGFyYW1NUEkpCit7CisgICAgc2l6ZV90
IGRhdGFMZW5ndGggPSAwOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfbXBpX3ByaW50
KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwgMCwgJmRhdGFMZW5ndGgsIHBhcmFtTVBJKTsKKyAg
ICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBwYXJhbWV0ZXIoZGF0YUxlbmd0aCk7CisgICAgZXJyb3IgPSBn
Y3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIHBhcmFtZXRlci5kYXRhKCksIHBhcmFtZXRl
ci5zaXplKCksIG51bGxwdHIsIHBhcmFtTVBJKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBwYXJhbWV0ZXI7Cit9
CisKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gZ2V0UlNBS2V5UGFyYW1ldGVyKGdjcnlfc2V4cF90
IHNleHAsIGNvbnN0IGNoYXIqIG5hbWUsIGVudW0gZ2NyeV9tcGlfZm9ybWF0IGZvcm1hdCA9IEdD
UllNUElfRk1UX1VTRykKK3sKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBhcmFtU2V4
cChnY3J5X3NleHBfZmluZF90b2tlbihzZXhwLCBuYW1lLCAwKSk7CisgICAgaWYgKCFwYXJhbVNl
eHApCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4g
cGFyYW1NUEkoZ2NyeV9zZXhwX250aF9tcGkocGFyYW1TZXhwLCAxLCBmb3JtYXQpKTsKKyAgICBp
ZiAoIXBhcmFtTVBJKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHBhcmFtZXRlcjsKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgZ2NyeV9lcnJvcl90
IGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoZm9ybWF0LCBudWxscHRyLCAwLCAmZGF0YUxlbmd0aCwg
cGFyYW1NUEkpOworICAgIGlmIChlcnJvciA9PSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IHBhcmFtZXRlci5yZXNpemUoZGF0YUxlbmd0aCk7CisgICAgICAgIGVycm9yID0gZ2NyeV9tcGlf
cHJpbnQoZm9ybWF0LCBwYXJhbWV0ZXIuZGF0YSgpLCBwYXJhbWV0ZXIuc2l6ZSgpLCBudWxscHRy
LCBwYXJhbU1QSSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5
X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcGFyYW1ldGVyOworfQorCitSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6
OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBoYXNIYXNoLCBjb25zdCBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50cyYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRt
YXAgdXNhZ2VzKQoreworICAgIGlmIChrZXlEYXRhLnR5cGUoKSA9PSBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6VHlwZTo6UHJpdmF0ZSAmJiAha2V5RGF0YS5oYXNBZGRpdGlvbmFsUHJpdmF0
ZUtleVBhcmFtZXRlcnMoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWtl
eURhdGEub3RoZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIC8vIFZhbGlkYXRlIHRoZSBrZXkgZGF0YS4KKyAgICB7CisgICAgICAgIGJvb2wg
dmFsaWQgPSB0cnVlOworCisgICAgICAgIHZhbGlkICY9ICFrZXlEYXRhLm1vZHVsdXMoKS5pc0Vt
cHR5KCkgJiYgIWtleURhdGEuZXhwb25lbnQoKS5pc0VtcHR5KCk7CisgICAgICAgIGlmIChrZXlE
YXRhLnR5cGUoKSA9PSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHJpdmF0ZSkK
KyAgICAgICAgICAgIHZhbGlkICY9ICFrZXlEYXRhLnByaXZhdGVFeHBvbmVudCgpLmlzRW1wdHko
KSAmJiAha2V5RGF0YS5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yLmlzRW1wdHkoKSAmJiAh
a2V5RGF0YS5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvci5pc0VtcHR5KCk7CisKKyAgICAg
ICAgaWYgKCF2YWxpZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IENyeXB0b0tleVR5cGUga2V5VHlwZTsKKyAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7Cisg
ICAgY2FzZSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHVibGljOgorICAgICAg
ICBrZXlUeXBlID0gQ3J5cHRvS2V5VHlwZTo6UHVibGljOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpUeXBlOjpQcml2YXRlOgorICAgICAgICBr
ZXlUeXBlID0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgR0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBrZXlTZXhwOworICAgIHsKKyAgICAgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBzd2l0Y2ggKGtleVR5cGUpIHsKKyAgICAg
ICAgY2FzZSBDcnlwdG9LZXlUeXBlOjpQdWJsaWM6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIihwdWJsaWMta2V5Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDcnlwdG9LZXlUeXBlOjpQcml2YXRlOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIocHJpdmF0ZS1rZXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENy
eXB0b0tleVR5cGU6OlNlY3JldDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIocnNhIik7CisKKyAgICAgICAgLy8gTW9kdWx1cworICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIihuICMiKTsKKyAgICAgICAgZm9yIChhdXRvIGJ5dGUgOiBrZXlEYXRhLm1vZHVs
dXMoKSkKKyAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleChieXRlLCBidWlsZGVyKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIjKSIpOworCisgICAgICAgIC8vIFB1YmxpYyBleHBv
bmVudAorICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihlICMiKTsKKyAgICAgICAgZm9y
IChhdXRvIGJ5dGUgOiBrZXlEYXRhLmV4cG9uZW50KCkpCisgICAgICAgICAgICBhcHBlbmRCeXRl
QXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIyki
KTsKKworICAgICAgICBpZiAoa2V5VHlwZSA9PSBDcnlwdG9LZXlUeXBlOjpQcml2YXRlKSB7Cisg
ICAgICAgICAgICAvLyBQcml2YXRlIGV4cG9uZW50CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIihkICMiKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBieXRlIDoga2V5RGF0YS5w
cml2YXRlRXhwb25lbnQoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwg
YnVpbGRlcik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMpIik7CisKKyAg
ICAgICAgICAgIGlmIChrZXlEYXRhLmhhc0FkZGl0aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVycygp
KSB7CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgcHJpbWUgaW5mbworICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKHAgIyIpOworICAgICAgICAgICAgICAgIGZvciAoYXV0
byBieXRlIDoga2V5RGF0YS5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3RvcikKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykiKTsKKworICAgICAgICAgICAgICAgIC8vIFNl
Y29uZCBwcmltZSBpbmZvCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIo
cSAjIik7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGJ5dGUgOiBrZXlEYXRhLmZpcnN0UHJp
bWVJbmZvKCkucHJpbWVGYWN0b3IpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hl
eChieXRlLCBidWlsZGVyKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IiMpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIikpIik7CisKKyAgICAgICAgU3RyaW5nIHNFeHByZXNzaW9uID0gYnVpbGRlci50
b1N0cmluZygpOworICAgICAgICBDU3RyaW5nIHNFeHByZXNzaW9uQ1N0cmluZyA9IHNFeHByZXNz
aW9uLnV0ZjgoKTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhwX25ldygm
a2V5U2V4cCwgc0V4cHJlc3Npb25DU3RyaW5nLmRhdGEoKSwgc0V4cHJlc3Npb25DU3RyaW5nLmxl
bmd0aCgpLCAxKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2Ny
eV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ3J5cHRvS2V5UlNBKGlkZW50aWZpZXIsIGhhc2gsIGhhc0hhc2gsIGtleVR5cGUsIGtleVNl
eHAucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7Cit9CisKK0NyeXB0b0tleVJTQTo6
Q3J5cHRvS2V5UlNBKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIENyeXB0b0tleVR5cGUgdHlw
ZSwgUGxhdGZvcm1SU0FLZXkgcGxhdGZvcm1LZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlQml0bWFwIHVzYWdlKQorICAgIDogQ3J5cHRvS2V5KGlkZW50aWZpZXIsIHR5cGUsIGV4
dHJhY3RhYmxlLCB1c2FnZSkKKyAgICAsIG1fcGxhdGZvcm1LZXkocGxhdGZvcm1LZXkpCisgICAg
LCBtX3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaChoYXNIYXNoKQorICAgICwgbV9oYXNoKGhhc2gp
Cit7Cit9CisKK0NyeXB0b0tleVJTQTo6fkNyeXB0b0tleVJTQSgpCit7CisgICAgaWYgKG1fcGxh
dGZvcm1LZXkpCisgICAgICAgIEdDcnlwdERlbGV0ZXI8Z2NyeV9zZXhwX3Q+KCkobV9wbGF0Zm9y
bUtleSk7Cit9CisKK2Jvb2wgQ3J5cHRvS2V5UlNBOjppc1Jlc3RyaWN0ZWRUb0hhc2goQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciYgaWRlbnRpZmllcikgY29uc3QKK3sKKyAgICBpZiAoIW1fcmVz
dHJpY3RlZFRvU3BlY2lmaWNIYXNoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZGVu
dGlmaWVyID0gbV9oYXNoOworICAgIHJldHVybiB0cnVlOworfQorCitzaXplX3QgQ3J5cHRvS2V5
UlNBOjprZXlTaXplSW5CaXRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0UlNBTW9kdWx1c0xl
bmd0aChtX3BsYXRmb3JtS2V5KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4g
Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0Cit7CisgICAgU3RyaW5nIG5hbWUg
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVu
dGlmaWVyKCkpOworICAgIHNpemVfdCBtb2R1bHVzTGVuZ3RoID0gZ2V0UlNBTW9kdWx1c0xlbmd0
aChtX3BsYXRmb3JtS2V5KTsKKyAgICBWZWN0b3I8dWludDhfdD4gcHVibGljRXhwb25lbnQgPSBn
ZXRSU0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9ybUtleSwgImUiKTsKKworICAgIGlmIChtX3Jlc3Ry
aWN0ZWRUb1NwZWNpZmljSGFzaCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNh
SGFzaGVkS2V5QWxnb3JpdGhtPihuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4
cG9uZW50KSwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUobV9oYXNo
KSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihuYW1lLCBt
b2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBjb25zdAorewor
ICAgIEFTU0VSVChleHRyYWN0YWJsZSgpKTsKKworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAg
Y2FzZSBDcnlwdG9LZXlUeXBlOjpQdWJsaWM6CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKGdldFJTQUtleVBhcmFtZXRlcihtX3BsYXRmb3Jt
S2V5LCAibiIpLCBnZXRSU0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9ybUtleSwgImUiKSk7CisgICAg
Y2FzZSBDcnlwdG9LZXlUeXBlOjpQcml2YXRlOiB7CisgICAgICAgIENyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzOjpQcmltZUluZm8gZmlyc3RQcmltZUluZm97IGdldFJTQUtleVBhcmFtZXRlciht
X3BsYXRmb3JtS2V5LCAicSIpLCB7IH0sIHsgfSB9OworICAgICAgICBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mb3sgZ2V0UlNBS2V5UGFyYW1ldGVy
KG1fcGxhdGZvcm1LZXksICJwIiksIHsgfSwgeyB9IH07CisKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byBnZXRNUEkgPQorICAgICAgICAgICAgICAgIFtdKGdjcnlfc2V4cF90IHNleHAsIGNv
bnN0IGNoYXIqIG5hbWUpIC0+IGdjcnlfbXBpX3QgeworICAgICAgICAgICAgICAgICAgICBHQ3J5
cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBhcmFtU2V4cChnY3J5X3NleHBfZmluZF90b2tlbihzZXhw
LCBuYW1lLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1TZXhwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnY3J5X3NleHBfbnRoX21waShwYXJhbVNleHAsIDEsIEdDUllNUElfRk1UX1VTRyk7Cisg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgYXV0byBleHRyYWN0RGF0YSA9CisgICAg
ICAgICAgICAgICAgW10oZ2NyeV9tcGlfdCBwYXJhbU1QSSkgLT4gVmVjdG9yPHVpbnQ4X3Q+IHsK
KyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgICAgICAgICAg
ICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9V
U0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBwYXJhbU1QSSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gb3V0
cHV0KGRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3By
aW50KEdDUllNUElfRk1UX1VTRywgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgbnVsbHB0
ciwgcGFyYW1NUEkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
ciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJy
b3IoZXJyb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0OworICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIEdDcnlwdEhhbmRsZTxnY3J5X21waV90PiBk
TVBJKGdldE1QSShtX3BsYXRmb3JtS2V5LCAiZCIpKTsKKyAgICAgICAgICAgIEdDcnlwdEhhbmRs
ZTxnY3J5X21waV90PiBwTVBJKGdldE1QSShtX3BsYXRmb3JtS2V5LCAicSIpKTsKKyAgICAgICAg
ICAgIEdDcnlwdEhhbmRsZTxnY3J5X21waV90PiBxTVBJKGdldE1QSShtX3BsYXRmb3JtS2V5LCAi
cCIpKTsKKworICAgICAgICAgICAgLy8gZHAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gZHBNUEkoZ2NyeV9tcGlfc2V0X3VpKG51bGxwdHIs
IDApKTsKKyAgICAgICAgICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gcG0xTVBJKGdj
cnlfbXBpX3NldChudWxscHRyLCBwTVBJKSk7CisgICAgICAgICAgICAgICAgZ2NyeV9tcGlfc3Vi
X3VpKHBtMU1QSSwgcG0xTVBJLCAxKTsKKyAgICAgICAgICAgICAgICBnY3J5X21waV9tb2QoZHBN
UEksIGRNUEksIHBtMU1QSSk7CisgICAgICAgICAgICAgICAgZmlyc3RQcmltZUluZm8uZmFjdG9y
Q1JURXhwb25lbnQgPSBleHRyYWN0RGF0YShkcE1QSSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIGRxCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0NyeXB0SGFuZGxl
PGdjcnlfbXBpX3Q+IGRxTVBJKGdjcnlfbXBpX3NldF91aShudWxscHRyLCAwKSk7CisgICAgICAg
ICAgICAgICAgR0NyeXB0SGFuZGxlPGdjcnlfbXBpX3Q+IHFtMU1QSShnY3J5X21waV9zZXQobnVs
bHB0ciwgcU1QSSkpOworICAgICAgICAgICAgICAgIGdjcnlfbXBpX3N1Yl91aShxbTFNUEksIHFt
MU1QSSwgMSk7CisgICAgICAgICAgICAgICAgZ2NyeV9tcGlfbW9kKGRxTVBJLCBkTVBJLCBxbTFN
UEkpOworICAgICAgICAgICAgICAgIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCA9
IGV4dHJhY3REYXRhKGRxTVBJKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gcWkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4g
cWlNUEkoZ2NyeV9tcGlfc2V0X3VpKG51bGxwdHIsIDApKTsKKyAgICAgICAgICAgICAgICBnY3J5
X21waV9pbnZtKHFpTVBJLCBxTVBJLCBwTVBJKTsKKyAgICAgICAgICAgICAgICBzZWNvbmRQcmlt
ZUluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQgPSBleHRyYWN0RGF0YShxaU1QSSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEoZ2V0UlNBS2V5UGFyYW1ldGVy
KG1fcGxhdGZvcm1LZXksICJuIiksCisgICAgICAgICAgICBnZXRSU0FLZXlQYXJhbWV0ZXIobV9w
bGF0Zm9ybUtleSwgImUiKSwgZ2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1LZXksICJkIiks
CisgICAgICAgICAgICBXVEZNb3ZlKGZpcnN0UHJpbWVJbmZvKSwgV1RGTW92ZShzZWNvbmRQcmlt
ZUluZm8pLCBWZWN0b3I8Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz57IH0p
OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBiaWdJbnRlZ2Vy
VG9VSW50MzIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBiaWdJbnRlZ2VyLCB1aW50MzJfdCYgcmVz
dWx0KQoreworICAgIHJlc3VsdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgKyA0IDwg
YmlnSW50ZWdlci5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmlnSW50ZWdlcltpXSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVG9vIGJpZyB0byBmaXQgaW4gMzIgYml0cy4KKyAg
ICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gYmlnSW50ZWdlci5zaXplKCkgPiA0ID8gYmlnSW50
ZWdlci5zaXplKCkgLSA0IDogMDsgaSA8IGJpZ0ludGVnZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgcmVzdWx0IDw8PSA4OworICAgICAgICByZXN1bHQgKz0gYmlnSW50ZWdlcltpXTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ3J5cHRvS2V5UlNBOjpnZW5lcmF0ZVBhaXIo
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgaGFzaCwgYm9vbCBoYXNIYXNoLCB1bnNpZ25lZCBtb2R1bHVzTGVuZ3RoLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHB1YmxpY0V4cG9uZW50LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9L
ZXlVc2FnZUJpdG1hcCB1c2FnZSwgS2V5UGFpckNhbGxiYWNrJiYgY2FsbGJhY2ssIFZvaWRDYWxs
YmFjayYmIGZhaWx1cmVDYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICB1aW50MzJfdCBlOworICAgIGlmICghYmlnSW50ZWdlclRvVUludDMyKHB1YmxpY0V4
cG9uZW50LCBlKSB8fCBlIDwgMyB8fCAhKGUgJiAweDEpKSB7CisgICAgICAgIGZhaWx1cmVDYWxs
YmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1vZHVsdXNMZW5ndGgg
PCAxNikgeworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIihnZW5rZXkocnNhIik7CisgICAgeworICAgICAgICBTdHJpbmcgbmJpdHMgPSBTdHJpbmc6
Om51bWJlcihtb2R1bHVzTGVuZ3RoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIo
bmJpdHMgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG5iaXRzLmxlbmd0aCgpKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6Iik7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKG5iaXRzKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIpIik7CisgICAgfQor
ICAgIHsKKyAgICAgICAgU3RyaW5nIHJzYVVzZUUgPSBTdHJpbmc6Om51bWJlcihlKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIocnNhLXVzZS1lICIpOworICAgICAgICBidWlsZGVy
LmFwcGVuZE51bWJlcihyc2FVc2VFLmxlbmd0aCgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCI6Iik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHJzYVVzZUUpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIikiKTsKKyAgICB9CisgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIpKSIpOworCisgICAgU3RyaW5nIHNFeHByZXNzaW9uID0gYnVpbGRlci50b1N0cmluZygp
OworICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3RyaW5nID0gc0V4cHJlc3Npb24udXRmOCgpOwor
CisgICAgR0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBnZW5rZXlTZXhwOworICAgIGdjcnlfZXJy
b3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXcoJmdlbmtleVNleHAsIHNFeHByZXNzaW9uQ1N0cmlu
Zy5kYXRhKCksIHNFeHByZXNzaW9uQ1N0cmluZy5sZW5ndGgoKSwgMSk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAl
ZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3Io
ZXJyb3IpKTsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9zZXhwX3Q+IGtleVBhaXJTZXhwOworICAgIGVy
cm9yID0gZ2NyeV9wa19nZW5rZXkoJmtleVBhaXJTZXhwLCBnZW5rZXlTZXhwKTsKKyAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVy
cm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJl
cnJvcihlcnJvcikpOworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEdDcnlwdEhhbmRsZTxnY3J5X3NleHBfdD4gcHVibGljS2V5U2V4cChn
Y3J5X3NleHBfZmluZF90b2tlbihrZXlQYWlyU2V4cCwgInB1YmxpYy1rZXkiLCAwKSk7CisgICAg
R0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBwcml2YXRlS2V5U2V4cChnY3J5X3NleHBfZmluZF90
b2tlbihrZXlQYWlyU2V4cCwgInByaXZhdGUta2V5IiwgMCkpOworICAgIGlmICghcHVibGljS2V5
U2V4cCB8fCAhcHJpdmF0ZUtleVNleHApIHsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250ZXh0LT5yZWYoKTsKKyAgICBjb250ZXh0
LT5wb3N0VGFzaygKKyAgICAgICAgW2FsZ29yaXRobSwgaGFzaCwgaGFzSGFzaCwgZXh0cmFjdGFi
bGUsIHVzYWdlLCBwdWJsaWNLZXlTZXhwID0gcHVibGljS2V5U2V4cC5yZWxlYXNlKCksIHByaXZh
dGVLZXlTZXhwID0gcHJpdmF0ZUtleVNleHAucmVsZWFzZSgpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGF1dG8gcHVibGljS2V5ID0gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGht
LCBoYXNoLCBoYXNIYXNoLCBDcnlwdG9LZXlUeXBlOjpQdWJsaWMsIHB1YmxpY0tleVNleHAsIHRy
dWUsIHVzYWdlKTsKKyAgICAgICAgICAgIGF1dG8gcHJpdmF0ZUtleSA9IENyeXB0b0tleVJTQTo6
Y3JlYXRlKGFsZ29yaXRobSwgaGFzaCwgaGFzSGFzaCwgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSwg
cHJpdmF0ZUtleVNleHAsIGV4dHJhY3RhYmxlLCB1c2FnZSk7CisKKyAgICAgICAgICAgIGNhbGxi
YWNrKENyeXB0b0tleVBhaXJ7IFdURk1vdmUocHVibGljS2V5KSwgV1RGTW92ZShwcml2YXRlS2V5
KSB9KTsKKyAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgfSk7Cit9CisKK2Vu
dW0gY2xhc3MgUlNBQWxnb3JpdGhtIHsKKyAgICBSU0FFbmNyeXB0aW9uLAorICAgIFJTQUVTX09B
RVAsCisgICAgUlNBU1NBX1BTUywKK307CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFJTQUFsZ29y
aXRobT4gYWxnb3JpdGhtRm9ySWRlbnRpZmllcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
c2l6ZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA5PiBzX3JzYUVu
Y3J5cHRpb257IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwgMHgwMSwgMHgw
MSwgMHgwMSB9IH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgOT4gc19p
ZFJTQUVTX09BRVB7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwgMHgwMSwg
MHgwMSwgMHgwNyB9IH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgOT4g
c19pZFJTQVNTQV9QU1N7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwgMHgw
MSwgMHgwMSwgMHgwYSB9IH07CisKKyAgICBpZiAoc2l6ZSAhPSA5KQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgaWYgKCFzdGQ6Om1lbWNtcChkYXRhLCBzX3JzYUVuY3J5cHRp
b24uZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIFJTQUFsZ29yaXRobTo6UlNBRW5jcnlw
dGlvbjsKKyAgICBpZiAoIXN0ZDo6bWVtY21wKGRhdGEsIHNfaWRSU0FFU19PQUVQLmRhdGEoKSwg
c2l6ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFzdGQ6Om1lbWNt
cChkYXRhLCBzX2lkUlNBU1NBX1BTUy5kYXRhKCksIHNpemUpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDcnlwdG9L
ZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcj4gaGFz
aCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQoreworICAgIC8vIFN1YmplY3RQdWJsaWNLZXlJbmZvICA6Oj0g
IFNFUVVFTkNFICB7CisgICAgLy8gICBhbGdvcml0aG0gICAgICAgICAgICBBbGdvcml0aG1JZGVu
dGlmaWVyLAorICAgIC8vICAgc3ViamVjdFB1YmxpY0tleSAgICAgQklUIFNUUklORyAgfQorICAg
IGF1dG8gc3ViamVjdFB1YmxpY0tleUluZm9UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCAw
KTsKKyAgICBpZiAoIXN1YmplY3RQdWJsaWNLZXlJbmZvVExWLmJ1ZmZlclNpemUgfHwgIXN1Ympl
Y3RQdWJsaWNLZXlJbmZvVExWLmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBBbGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVF
TkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgLy8g
ICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8g
fQorICAgIGF1dG8gYWxnb3JpdGhtSWRlbnRpZmllclRMViA9IEFTTjE6OnBhcnNlVExWKGtleURh
dGEsIHN1YmplY3RQdWJsaWNLZXlJbmZvVExWLnZhbHVlT2Zmc2V0KCkpOworICAgIGlmICghYWxn
b3JpdGhtSWRlbnRpZmllclRMVi5idWZmZXJTaXplIHx8ICFhbGdvcml0aG1JZGVudGlmaWVyVExW
Lmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIGFsZ29yaXRobVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIGFsZ29yaXRo
bUlkZW50aWZpZXJUTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCFhbGdvcml0aG1UTFYuYnVm
ZmVyU2l6ZSB8fCAhYWxnb3JpdGhtVExWLmhhc1RhZyhBU04xOjpUYWc6Ok9iamVjdElkZW50aWZp
ZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VwcG9ydGVkQWxnb3Jp
dGhtID0gYWxnb3JpdGhtRm9ySWRlbnRpZmllcihrZXlEYXRhLmRhdGEoKSArIGFsZ29yaXRobVRM
Vi52YWx1ZU9mZnNldCgpLCBhbGdvcml0aG1UTFYubGVuZ3RoKTsKKyAgICBpZiAoIXN1cHBvcnRl
ZEFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1YmplY3RQ
dWJsaWNLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLAorICAgICAgICBzdWJqZWN0UHVi
bGljS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpICsgYWxnb3JpdGhtSWRlbnRpZmllclRMVi5idWZm
ZXJTaXplKTsKKyAgICBpZiAoIXN1YmplY3RQdWJsaWNLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhc3Vi
amVjdFB1YmxpY0tleVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpCaXRTdHJpbmcpCisgICAgICAgIHx8
IGtleURhdGFbc3ViamVjdFB1YmxpY0tleVRMVi52YWx1ZU9mZnNldCgpXSAhPSAweDAwKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFJTQVB1YmxpY0tleSA6Oj0gU0VRVUVOQ0Ug
eworICAgIC8vICAgbW9kdWx1cyAgICAgICAgICAgSU5URUdFUiwgIC0tIG4KKyAgICAvLyAgIHB1
YmxpY0V4cG9uZW50ICAgIElOVEVHRVIgICAtLSBlCisgICAgLy8gfQorICAgIGF1dG8gcnNhUHVi
bGljS2V5VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgc3ViamVjdFB1YmxpY0tleVRMVi52
YWx1ZU9mZnNldCgpICsgMSk7CisgICAgaWYgKCFyc2FQdWJsaWNLZXlUTFYuYnVmZmVyU2l6ZSB8
fCAhcnNhUHVibGljS2V5VExWLmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBBU04xOjpUTFYgbW9kdWx1c1RMVjsKKyAgICBBU04xOjpU
TFYgcHVibGljRXhwb25lbnRUTFY7CisgICAgeworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcnNh
UHVibGljS2V5VExWLnZhbHVlT2Zmc2V0KCk7CisgICAgICAgIG1vZHVsdXNUTFYgPSBBU04xOjpw
YXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIW1vZHVsdXNUTFYuYnVmZmVy
U2l6ZSB8fCAhbW9kdWx1c1RMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBtb2R1bHVzVExWLmJ1ZmZl
clNpemU7CisgICAgICAgIHB1YmxpY0V4cG9uZW50VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0
YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwdWJsaWNFeHBvbmVudFRMVi5idWZmZXJTaXplIHx8
ICFwdWJsaWNFeHBvbmVudFRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChtb2R1bHVzVExWLmJ1ZmZlclNpemUg
KyBwdWJsaWNFeHBvbmVudFRMVi5idWZmZXJTaXplICE9IHJzYVB1YmxpY0tleVRMVi5sZW5ndGgp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGFwcGVuZEFT
TjFEYXRhID0KKyAgICAgICAgW10oU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgQVNOMTo6
VExWJiB0bHYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5RGF0YSkgeworICAgICAgICAgICAg
c2l6ZV90IG9mZnNldCA9IHRsdi52YWx1ZU9mZnNldCgpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0bHYubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYXBwZW5kQnl0
ZUFzSGV4KGtleURhdGFbb2Zmc2V0ICsgaV0sIGJ1aWxkZXIpOworICAgICAgICB9OworCisgICAg
R0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBwbGF0Zm9ybUtleTsKKyAgICB7CisgICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIocHVi
bGljLWtleShyc2EobiAjIik7CisgICAgICAgIGFwcGVuZEFTTjFEYXRhKGJ1aWxkZXIsIG1vZHVs
dXNUTFYsIGtleURhdGEpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMpKGUgIyIp
OworICAgICAgICBhcHBlbmRBU04xRGF0YShidWlsZGVyLCBwdWJsaWNFeHBvbmVudFRMViwga2V5
RGF0YSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykpKSIpOworCisgICAgICAg
IFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmlu
ZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBzRXhwcmVzc2lvbi51dGY4KCk7CisgICAgICAgIGdjcnlf
ZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXcoJnBsYXRmb3JtS2V5LCBzRXhwcmVzc2lvbkNT
dHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgICAgICBp
ZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdj
cnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlSU0EoaWRlbnRp
ZmllciwgaGFzaC52YWx1ZV9vcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEh
aGFzaCwgQ3J5cHRvS2V5VHlwZTo6UHVibGljLCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpKTs7Cit9CisKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5
cHRvS2V5UlNBOjpleHBvcnRTcGtpKCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IENyeXB0
b0tleVR5cGU6OlB1YmxpYykKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgSU5WQUxJRF9BQ0NF
U1NfRVJSIH07CisKKyAgICBhdXRvIGFwcGVuZExlbmd0aCA9CisgICAgICAgIFtdKHNpemVfdCBs
ZW5ndGgsIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAobGVuZ3Ro
ID4gMTI3KSB7CisgICAgICAgICAgICAgICAgdWludDhfdCBsZW5ndGhCeXRlcyA9IHN0ZDo6Y2Vp
bChzdGQ6OmxvZzIobGVuZ3RoICsgMSkgLyA4KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKDB4ODAgfCBsZW5ndGhCeXRlcyk7CisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkg
PSAwOyBpIDwgbGVuZ3RoQnl0ZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgobGVuZ3RoID4+ICgobGVuZ3RoQnl0ZXMgLSBpIC0gMSkgKiA4KSAmIDB4ZmYpKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGVuZ3RoKTsK
KyAgICAgICAgfTsKKworICAgIC8vIFN1YmplY3RQdWJsaWNLZXlJbmZvICA6Oj0gIFNFUVVFTkNF
ICB7CisgICAgLy8gICBhbGdvcml0aG0gICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyLAor
ICAgIC8vICAgc3ViamVjdFB1YmxpY0tleSAgICAgQklUIFNUUklORyAgfQorCisKKyAgICAvLyBB
bGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGht
ICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQg
QlkgYWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIFZlY3Rvcjx1aW50OF90PiBhbGdv
cml0aG1JZGVudGlmaWVyRGF0YTsKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDk+IHNfcnNhRW5jcnlwdGlvbnsgeyAweDJhLCAweDg2LCAweDQ4LCAweDg2
LCAweGY3LCAweDBkLCAweDAxLCAweDAxLCAweDAxIH0gfTsKKworICAgICAgICBhbGdvcml0aG1J
ZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgzMCk7CisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJE
YXRhLmFwcGVuZCgyICsgc19yc2FFbmNyeXB0aW9uLnNpemUoKSArIDIpOworCisgICAgICAgIC8v
IGFsZ29yaXRobQorICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgwNik7
CisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVuZChzX3JzYUVuY3J5cHRpb24u
c2l6ZSgpKTsKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKHNfcnNhRW5j
cnlwdGlvbi5kYXRhKCksIHNfcnNhRW5jcnlwdGlvbi5zaXplKCkpOworCisgICAgICAgIC8vIHBh
cmFtZXRlcnMKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKDB4MDUpOwor
ICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgwMCk7CisgICAgfQorCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHN1YmplY3RQdWJsaWNLZXlEYXRhOworICAgIHsKKyAgICAgICAg
Ly8gUlNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgICAgIC8vICAgbW9kdWx1cyAgICAg
ICAgICAgSU5URUdFUiwgIC0tIG4KKyAgICAgICAgLy8gICBwdWJsaWNFeHBvbmVudCAgICBJTlRF
R0VSICAgLS0gZQorICAgICAgICAvLyB9CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByc2FQdWJs
aWNLZXlEYXRhOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHBhcmFtZXRlckRhdGEgPQor
ICAgICAgICAgICAgICAgIFsmYXBwZW5kTGVuZ3RoXShnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBj
aGFyKiBuYW1lKSAtPiBWZWN0b3I8dWludDhfdD4geworICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4gcGFyYW1ldGVyID0gZ2V0UlNBS2V5UGFyYW1ldGVyKHNleHAsIG5hbWUpOwor
ICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gcGFyYW1ldGVyWzBdICYgMHg4MDsK
KworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YS5hcHBlbmQoMHgwMik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZExl
bmd0aChwYXJhbWV0ZXIuc2l6ZSgpICsgKG5lZ2F0aXZlID8gMSA6IDApLCBkYXRhKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS5hcHBlbmQoMHgwMCk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kVmVjdG9yKHBh
cmFtZXRlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIGF1dG8gbkRhdGEgPSBwYXJhbWV0ZXJEYXRhKG1fcGxhdGZv
cm1LZXksICJuIik7CisgICAgICAgICAgICBhdXRvIGVEYXRhID0gcGFyYW1ldGVyRGF0YShtX3Bs
YXRmb3JtS2V5LCAiZSIpOworCisgICAgICAgICAgICByc2FQdWJsaWNLZXlEYXRhLmFwcGVuZCgw
eDMwKTsKKyAgICAgICAgICAgIGFwcGVuZExlbmd0aChuRGF0YS5zaXplKCkgKyBlRGF0YS5zaXpl
KCksIHJzYVB1YmxpY0tleURhdGEpOworCisgICAgICAgICAgICAvLyBtb2R1bHVzCisgICAgICAg
ICAgICByc2FQdWJsaWNLZXlEYXRhLmFwcGVuZFZlY3RvcihuRGF0YSk7CisgICAgICAgICAgICAv
LyBwdWJsaWNFeHBvbmVudAorICAgICAgICAgICAgcnNhUHVibGljS2V5RGF0YS5hcHBlbmRWZWN0
b3IoZURhdGEpOworICAgICAgICB9CisKKyAgICAgICAgc3ViamVjdFB1YmxpY0tleURhdGEuYXBw
ZW5kKDB4MDMpOworICAgICAgICBhcHBlbmRMZW5ndGgoMSArIHJzYVB1YmxpY0tleURhdGEuc2l6
ZSgpLCBzdWJqZWN0UHVibGljS2V5RGF0YSk7CisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlEYXRh
LmFwcGVuZCgweDAwKTsKKyAgICAgICAgc3ViamVjdFB1YmxpY0tleURhdGEuYXBwZW5kVmVjdG9y
KHJzYVB1YmxpY0tleURhdGEpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7
CisgICAgcmVzdWx0LmFwcGVuZCgweDMwKTsKKyAgICBhcHBlbmRMZW5ndGgoYWxnb3JpdGhtSWRl
bnRpZmllckRhdGEuc2l6ZSgpICsgc3ViamVjdFB1YmxpY0tleURhdGEuc2l6ZSgpLCByZXN1bHQp
OworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoYWxnb3JpdGhtSWRlbnRpZmllckRhdGEpOworICAg
IHJlc3VsdC5hcHBlbmRWZWN0b3Ioc3ViamVjdFB1YmxpY0tleURhdGEpOworCisgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKK30KKworUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNB
OjppbXBvcnRQa2NzOChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIHN0ZDo6
b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcj4gaGFzaCwgVmVjdG9yPHVpbnQ4X3Q+
JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2Vz
KQoreworICAgIC8vIFByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgLy8gICB2ZXJz
aW9uICAgICAgICAgICAgICAgICAgIFZlcnNpb24sCisgICAgLy8gICBwcml2YXRlS2V5QWxnb3Jp
dGhtICAgICAgIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyLAorICAgIC8vICAgcHJpdmF0
ZUtleSAgICAgICAgICAgICAgICBQcml2YXRlS2V5LAorICAgIC8vICAgYXR0cmlidXRlcyAgICAg
ICAgICAgWzBdICBJTVBMSUNJVCBBdHRyaWJ1dGVzIE9QVElPTkFMIH0KKyAgICBhdXRvIHByaXZh
dGVLZXlJbmZvVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgMCk7CisgICAgaWYgKCFwcml2
YXRlS2V5SW5mb1RMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlS2V5SW5mb1RMVi5oYXNUYWcoQVNO
MTo6VGFnOjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChwcml2
YXRlS2V5SW5mb1RMVi5idWZmZXJTaXplICE9IGtleURhdGEuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIC8vIFZlcnNpb24gOjo9IElOVEVHRVIKKyAgICBhdXRvIHZlcnNp
b25UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBwcml2YXRlS2V5SW5mb1RMVi52YWx1ZU9m
ZnNldCgpKTsKKyAgICBpZiAoIXZlcnNpb25UTFYuYnVmZmVyU2l6ZSB8fCAhdmVyc2lvblRMVi5o
YXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
aWYgKHZlcnNpb25UTFYubGVuZ3RoICE9IDEgJiYga2V5RGF0YVt2ZXJzaW9uVExWLnZhbHVlT2Zm
c2V0KCldICE9IDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gUHJpdmF0ZUtl
eUFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAvLyBBbGdv
cml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAg
T0JKRUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkg
YWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIGF1dG8gcHJpdmF0ZUtleUFsZ29yaXRo
bVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsCisgICAgICAgIHByaXZhdGVLZXlJbmZvVExW
LnZhbHVlT2Zmc2V0KCkgKyB2ZXJzaW9uVExWLmJ1ZmZlclNpemUpOworICAgIGlmICghcHJpdmF0
ZUtleUFsZ29yaXRobVRMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlS2V5QWxnb3JpdGhtVExWLmhh
c1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBhdXRvIGFsZ29yaXRobVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIHByaXZhdGVLZXlB
bGdvcml0aG1UTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCFhbGdvcml0aG1UTFYuYnVmZmVy
U2l6ZSB8fCAhYWxnb3JpdGhtVExWLmhhc1RhZyhBU04xOjpUYWc6Ok9iamVjdElkZW50aWZpZXIp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VwcG9ydGVkQWxnb3JpdGht
ID0gYWxnb3JpdGhtRm9ySWRlbnRpZmllcihrZXlEYXRhLmRhdGEoKSArIGFsZ29yaXRobVRMVi52
YWx1ZU9mZnNldCgpLCBhbGdvcml0aG1UTFYubGVuZ3RoKTsKKyAgICBpZiAoIXN1cHBvcnRlZEFs
Z29yaXRobSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBQcml2YXRlS2V5IDo6
PSBPQ1RFVCBTVFJJTkcKKyAgICBhdXRvIHByaXZhdGVLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihr
ZXlEYXRhLAorICAgICAgICBwcml2YXRlS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpICsgdmVyc2lv
blRMVi5idWZmZXJTaXplICsgcHJpdmF0ZUtleUFsZ29yaXRobVRMVi5idWZmZXJTaXplKTsKKyAg
ICBpZiAoIXByaXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhcHJpdmF0ZUtleVRMVi5oYXNUYWco
QVNOMTo6VGFnOjpPY3RldFN0cmluZykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Ly8gUlNBUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgIC8vICAgICB2ZXJzaW9uICAgICAg
ICAgICBWZXJzaW9uLAorICAgIC8vICAgICBtb2R1bHVzICAgICAgICAgICBJTlRFR0VSLCAgLS0g
bgorICAgIC8vICAgICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSLCAgLS0gZQorICAgIC8vICAg
ICBwcml2YXRlRXhwb25lbnQgICBJTlRFR0VSLCAgLS0gZAorICAgIC8vICAgICBwcmltZTEgICAg
ICAgICAgICBJTlRFR0VSLCAgLS0gcAorICAgIC8vICAgICBwcmltZTIgICAgICAgICAgICBJTlRF
R0VSLCAgLS0gcQorICAgIC8vICAgICBleHBvbmVudDEgICAgICAgICBJTlRFR0VSLCAgLS0gZCBt
b2QgKHAtMSkKKyAgICAvLyAgICAgZXhwb25lbnQyICAgICAgICAgSU5URUdFUiwgIC0tIGQgbW9k
IChxLTEpCisgICAgLy8gICAgIGNvZWZmaWNpZW50ICAgICAgIElOVEVHRVIsICAtLSAoaW52ZXJz
ZSBvZiBxKSBtb2QgcAorICAgIC8vICAgICBvdGhlclByaW1lSW5mb3MgICBPdGhlclByaW1lSW5m
b3MgT1BUSU9OQUwKKyAgICAvLyB9CisgICAgYXV0byByc2FQcml2YXRlS2V5VExWID0gQVNOMTo6
cGFyc2VUTFYoa2V5RGF0YSwgcHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNldCgpKTsKKyAgICBpZiAo
IXJzYVByaXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhcnNhUHJpdmF0ZUtleVRMVi5oYXNUYWco
QVNOMTo6VGFnOjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNO
MTo6VExWIG1vZHVsdXNUTFY7CisgICAgQVNOMTo6VExWIHB1YmxpY0V4cG9uZW50VExWOworICAg
IEFTTjE6OlRMViBwcml2YXRlRXhwb25lbnRUTFY7CisgICAgQVNOMTo6VExWIHByaW1lMVRMVjsK
KyAgICBBU04xOjpUTFYgcHJpbWUyVExWOworICAgIEFTTjE6OlRMViBleHBvbmVudDFUTFY7Cisg
ICAgQVNOMTo6VExWIGV4cG9uZW50MlRMVjsKKyAgICBBU04xOjpUTFYgY29lZmZpY2llbnRUTFY7
CisgICAgeworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcnNhUHJpdmF0ZUtleVRMVi52YWx1ZU9m
ZnNldCgpOworICAgICAgICBhdXRvIHZlcnNpb25UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRh
LCBvZmZzZXQpOworICAgICAgICBpZiAoIXZlcnNpb25UTFYuYnVmZmVyU2l6ZSB8fCAhdmVyc2lv
blRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICBpZiAodmVyc2lvblRMVi5sZW5ndGggIT0gMSB8fCBrZXlEYXRhW3ZlcnNp
b25UTFYudmFsdWVPZmZzZXQoKV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIG9mZnNldCArPSB2ZXJzaW9uVExWLmJ1ZmZlclNpemU7CisgICAgICAgIG1vZHVs
dXNUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIW1v
ZHVsdXNUTFYuYnVmZmVyU2l6ZSB8fCAhbW9kdWx1c1RMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRl
Z2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBt
b2R1bHVzVExWLmJ1ZmZlclNpemU7CisgICAgICAgIHB1YmxpY0V4cG9uZW50VExWID0gQVNOMTo6
cGFyc2VUTFYoa2V5RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwdWJsaWNFeHBvbmVudFRM
Vi5idWZmZXJTaXplIHx8ICFwdWJsaWNFeHBvbmVudFRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRl
Z2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBw
dWJsaWNFeHBvbmVudFRMVi5idWZmZXJTaXplOworICAgICAgICBwcml2YXRlRXhwb25lbnRUTFYg
PSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIXByaXZhdGVF
eHBvbmVudFRMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlRXhwb25lbnRUTFYuaGFzVGFnKEFTTjE6
OlRhZzo6SW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBv
ZmZzZXQgKz0gcHJpdmF0ZUV4cG9uZW50VExWLmJ1ZmZlclNpemU7CisgICAgICAgIHByaW1lMVRM
ViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIG9mZnNldCk7CisgICAgICAgIGlmICghcHJpbWUx
VExWLmJ1ZmZlclNpemUgfHwgIXByaW1lMVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBwcmltZTFU
TFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgcHJpbWUyVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0
YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwcmltZTJUTFYuYnVmZmVyU2l6ZSB8fCAhcHJpbWUy
VExWLmhhc1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgb2Zmc2V0ICs9IHByaW1lMlRMVi5idWZmZXJTaXplOworICAgICAgICBl
eHBvbmVudDFUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBp
ZiAoIWV4cG9uZW50MVRMVi5idWZmZXJTaXplIHx8ICFleHBvbmVudDFUTFYuaGFzVGFnKEFTTjE6
OlRhZzo6SW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBv
ZmZzZXQgKz0gZXhwb25lbnQxVExWLmJ1ZmZlclNpemU7CisgICAgICAgIGV4cG9uZW50MlRMViA9
IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIG9mZnNldCk7CisgICAgICAgIGlmICghZXhwb25lbnQy
VExWLmJ1ZmZlclNpemUgfHwgIWV4cG9uZW50MlRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2Vy
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBleHBv
bmVudDJUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgY29lZmZpY2llbnRUTFYgPSBBU04xOjpwYXJz
ZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIWNvZWZmaWNpZW50VExWLmJ1ZmZl
clNpemUgfHwgIWNvZWZmaWNpZW50VExWLmhhc1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBmb3Ig
T3RoZXJQcmltZUluZm9zLgorCisgICAgICAgIHNpemVfdCBidWZmZXJTaXplU3VtID0gdmVyc2lv
blRMVi5idWZmZXJTaXplICsgbW9kdWx1c1RMVi5idWZmZXJTaXplICsgcHVibGljRXhwb25lbnRU
TFYuYnVmZmVyU2l6ZSArIHByaXZhdGVFeHBvbmVudFRMVi5idWZmZXJTaXplCisgICAgICAgICAg
ICArIHByaW1lMVRMVi5idWZmZXJTaXplICsgcHJpbWUyVExWLmJ1ZmZlclNpemUgKyBleHBvbmVu
dDFUTFYuYnVmZmVyU2l6ZSArIGV4cG9uZW50MlRMVi5idWZmZXJTaXplICsgY29lZmZpY2llbnRU
TFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgaWYgKGJ1ZmZlclNpemVTdW0gIT0gcnNhUHJpdmF0ZUtl
eVRMVi5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gdURhdGE7CisgICAgeworICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9t
cGlfdD4gcE1QSTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9tcGlfc2Nhbigm
cE1QSSwgR0NSWU1QSV9GTVRfVVNHLCBrZXlEYXRhLmRhdGEoKSArIHByaW1lMVRMVi52YWx1ZU9m
ZnNldCgpLCBwcmltZTFUTFYubGVuZ3RoLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGVycm9yICE9
IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gcU1QSTsKKyAgICAgICAgZXJyb3IgPSBnY3J5X21w
aV9zY2FuKCZxTVBJLCBHQ1JZTVBJX0ZNVF9VU0csIGtleURhdGEuZGF0YSgpICsgcHJpbWUyVExW
LnZhbHVlT2Zmc2V0KCksIHByaW1lMlRMVi5sZW5ndGgsIG51bGxwdHIpOworICAgICAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIEdDcnlwdEhhbmRsZTxnY3J5X21waV90PiBxaU1QSShnY3J5X21waV9zZXRfdWko
bnVsbHB0ciwgMCkpOworICAgICAgICBnY3J5X21waV9pbnZtKHFpTVBJLCBxTVBJLCBwTVBJKTsK
KyAgICAgICAgdURhdGEgPSBnZXRQYXJhbWV0ZXJNUElEYXRhKHFpTVBJKTsKKyAgICB9CisKKyAg
ICBhdXRvIGFwcGVuZEFTTjFEYXRhID0KKyAgICAgICAgW10oU3RyaW5nQnVpbGRlciYgYnVpbGRl
ciwgY29uc3QgQVNOMTo6VExWJiB0bHYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5RGF0YSkg
eworICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHRsdi52YWx1ZU9mZnNldCgpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0bHYubGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICAgICAgYXBwZW5kQnl0ZUFzSGV4KGtleURhdGFbb2Zmc2V0ICsgaV0sIGJ1aWxkZXIpOworICAg
ICAgICB9OworCisgICAgR0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBrZXlTZXhwOworICAgIHsK
KyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIihwcml2YXRlLWtleShyc2EobiAjIik7CisgICAgICAgIGFwcGVuZEFTTjFEYXRhKGJ1
aWxkZXIsIG1vZHVsdXNUTFYsIGtleURhdGEpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIiMpKGUgIyIpOworICAgICAgICBhcHBlbmRBU04xRGF0YShidWlsZGVyLCBwdWJsaWNFeHBv
bmVudFRMViwga2V5RGF0YSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykoZCAj
Iik7CisgICAgICAgIGFwcGVuZEFTTjFEYXRhKGJ1aWxkZXIsIHByaXZhdGVFeHBvbmVudFRMViwg
a2V5RGF0YSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykocCAjIik7CisgICAg
ICAgIGFwcGVuZEFTTjFEYXRhKGJ1aWxkZXIsIHByaW1lMlRMViwga2V5RGF0YSk7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykocSAjIik7CisgICAgICAgIGFwcGVuZEFTTjFEYXRh
KGJ1aWxkZXIsIHByaW1lMVRMViwga2V5RGF0YSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIykodSAjIik7CisgICAgICAgIGZvciAoYXV0byBieXRlIDogdURhdGEpCisgICAgICAg
ICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiIykpKSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBzRXhw
cmVzc2lvbi51dGY4KCk7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9u
ZXcoJmtleVNleHAsIHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHByZXNzaW9uQ1N0cmlu
Zy5sZW5ndGgoKSwgMSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3Is
IGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENyeXB0b0tleVJTQShpZGVudGlmaWVyLCBoYXNoLnZhbHVlX29yKENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlNIQV8xKSwgISFoYXNoLCBDcnlwdG9LZXlUeXBlOjpQcml2YXRlLCBr
ZXlTZXhwLnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOworfQorCitFeGNlcHRpb25P
cjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0UGtjczgoKSBjb25zdAorewor
ICAgIGlmICh0eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbnsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisKKyAgICBhdXRvIGFwcGVuZExlbmd0
aCA9CisgICAgICAgIFtdKHNpemVfdCBsZW5ndGgsIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSB7
CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gMTI3KSB7CisgICAgICAgICAgICAgICAgdWludDhf
dCBsZW5ndGhCeXRlcyA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIobGVuZ3RoICsgMSkgLyA4KTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDB4ODAgfCBsZW5ndGhCeXRlcyk7CisgICAgICAg
ICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbGVuZ3RoQnl0ZXM7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgobGVuZ3RoID4+ICgobGVuZ3RoQnl0ZXMgLSBp
IC0gMSkgKiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgfTsKKworICAgIC8vIFByaXZhdGVLZXlJ
bmZvIDo6PSBTRVFVRU5DRSB7CisgICAgLy8gICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgIFZl
cnNpb24sCisgICAgLy8gICBwcml2YXRlS2V5QWxnb3JpdGhtICAgICAgIFByaXZhdGVLZXlBbGdv
cml0aG1JZGVudGlmaWVyLAorICAgIC8vICAgcHJpdmF0ZUtleSAgICAgICAgICAgICAgICBQcml2
YXRlS2V5LAorICAgIC8vICAgYXR0cmlidXRlcyAgICAgICAgICAgWzBdICBJTVBMSUNJVCBBdHRy
aWJ1dGVzIE9QVElPTkFMIH0KKworICAgIC8vIFZlcnNpb24gOjo9IElOVEVHRVIKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAzPiBzX3ZlcnNpb25EYXRheyB7IDB4MDIsIDB4
MDEsIDB4MDAgfSB9OworCisKKyAgICAvLyBQcml2YXRlS2V5QWxnb3JpdGhtSWRlbnRpZmllciA6
Oj0gQWxnb3JpdGhtSWRlbnRpZmllcgorICAgIC8vIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAg
U0VRVUVOQ0UgIHsKKyAgICAvLyAgICBhbGdvcml0aG0gICBPQkpFQ1QgSURFTlRJRklFUiwKKyAg
ICAvLyAgICBwYXJhbWV0ZXJzICBBTlkgREVGSU5FRCBCWSBhbGdvcml0aG0gT1BUSU9OQUwKKyAg
ICAvLyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlBbGdvcml0aG1EYXRhOworICAg
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgOT4gc19yc2FFbmNy
eXB0aW9ueyB7IDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4ZjcsIDB4MGQsIDB4MDEsIDB4MDEs
IDB4MDEgfSB9OworCisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFwcGVuZCgweDMw
KTsKKyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEuYXBwZW5kKDIgKyBzX3JzYUVuY3J5
cHRpb24uc2l6ZSgpICsgMik7CisKKyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEuYXBw
ZW5kKDB4MDYpOworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoc19yc2FF
bmNyeXB0aW9uLnNpemUoKSk7CisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFwcGVu
ZChzX3JzYUVuY3J5cHRpb24uZGF0YSgpLCBzX3JzYUVuY3J5cHRpb24uc2l6ZSgpKTsKKworICAg
ICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoMHgwNSk7CisgICAgICAgIHByaXZh
dGVLZXlBbGdvcml0aG1EYXRhLmFwcGVuZCgweDAwKTsKKyAgICB9CisKKyAgICAvLyBQcml2YXRl
S2V5IDo6PSBPQ1RFVCBTVFJJTkcKKyAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUtleURhdGE7
CisgICAgeworICAgICAgICAvLyBSU0FQcml2YXRlS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgICAg
IC8vICAgICB2ZXJzaW9uICAgICAgICAgICBWZXJzaW9uLAorICAgICAgICAvLyAgICAgbW9kdWx1
cyAgICAgICAgICAgSU5URUdFUiwgIC0tIG4KKyAgICAgICAgLy8gICAgIHB1YmxpY0V4cG9uZW50
ICAgIElOVEVHRVIsICAtLSBlCisgICAgICAgIC8vICAgICBwcml2YXRlRXhwb25lbnQgICBJTlRF
R0VSLCAgLS0gZAorICAgICAgICAvLyAgICAgcHJpbWUxICAgICAgICAgICAgSU5URUdFUiwgIC0t
IHAKKyAgICAgICAgLy8gICAgIHByaW1lMiAgICAgICAgICAgIElOVEVHRVIsICAtLSBxCisgICAg
ICAgIC8vICAgICBleHBvbmVudDEgICAgICAgICBJTlRFR0VSLCAgLS0gZCBtb2QgKHAtMSkKKyAg
ICAgICAgLy8gICAgIGV4cG9uZW50MiAgICAgICAgIElOVEVHRVIsICAtLSBkIG1vZCAocS0xKQor
ICAgICAgICAvLyAgICAgY29lZmZpY2llbnQgICAgICAgSU5URUdFUiwgIC0tIChpbnZlcnNlIG9m
IHEpIG1vZCBwCisgICAgICAgIC8vICAgICBvdGhlclByaW1lSW5mb3MgICBPdGhlclByaW1lSW5m
b3MgT1BUSU9OQUwKKyAgICAgICAgLy8gfQorICAgICAgICBWZWN0b3I8dWludDhfdD4gcnNhUHJp
dmF0ZUtleURhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVyRGF0YSA9
CisgICAgICAgICAgICAgICAgWyZhcHBlbmRMZW5ndGhdKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0
IGNoYXIqIG5hbWUpIC0+IFZlY3Rvcjx1aW50OF90PiB7CisgICAgICAgICAgICAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBwYXJhbWV0ZXIgPSBnZXRSU0FLZXlQYXJhbWV0ZXIoc2V4cCwgbmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBwYXJhbWV0ZXJbMF0gJiAweDgw
OworCisgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgICAgICAg
ICAgICAgICAgICBkYXRhLmFwcGVuZCgweDAyKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
TGVuZ3RoKHBhcmFtZXRlci5zaXplKCkgKyAobmVnYXRpdmUgPyAxIDogMCksIGRhdGEpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLmFwcGVuZCgweDAwKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmRWZWN0b3Io
cGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgYXV0byBuRGF0YSA9IHBhcmFtZXRlckRhdGEobV9wbGF0
Zm9ybUtleSwgIm4iKTsKKyAgICAgICAgICAgIGF1dG8gZURhdGEgPSBwYXJhbWV0ZXJEYXRhKG1f
cGxhdGZvcm1LZXksICJlIik7CisgICAgICAgICAgICBhdXRvIGREYXRhID0gcGFyYW1ldGVyRGF0
YShtX3BsYXRmb3JtS2V5LCAiZCIpOworICAgICAgICAgICAgYXV0byBwRGF0YSA9IHBhcmFtZXRl
ckRhdGEobV9wbGF0Zm9ybUtleSwgInEiKTsKKyAgICAgICAgICAgIGF1dG8gcURhdGEgPSBwYXJh
bWV0ZXJEYXRhKG1fcGxhdGZvcm1LZXksICJwIik7CisKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50
OF90PiBkcERhdGE7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gZHFEYXRhOworICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHFpRGF0YTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGdldE1QSSA9CisgICAgICAgICAgICAgICAgICAgIFtdKGdjcnlfc2V4cF90IHNl
eHAsIGNvbnN0IGNoYXIqIG5hbWUpIC0+IGdjcnlfbXBpX3QgeworICAgICAgICAgICAgICAgICAg
ICAgICAgR0NyeXB0SGFuZGxlPGdjcnlfc2V4cF90PiBwYXJhbVNleHAoZ2NyeV9zZXhwX2ZpbmRf
dG9rZW4oc2V4cCwgbmFtZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJh
bVNleHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2NyeV9zZXhwX250aF9tcGkocGFyYW1TZXhwLCAx
LCBHQ1JZTVBJX0ZNVF9VU0cpOworICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICAgICAgYXV0byBleHRyYWN0RGF0YSA9CisgICAgICAgICAgICAgICAgICAgIFtdKGdjcnlfbXBp
X3QgcGFyYW1NUEkpIC0+IFZlY3Rvcjx1aW50OF90PiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2Vy
cm9yX3QgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAs
ICZkYXRhTGVuZ3RoLCBwYXJhbU1QSSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4geyB9OworCisgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0
KGRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBnY3J5X21waV9w
cmludChHQ1JZTVBJX0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIG51bGxw
dHIsIHBhcmFtTVBJKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdf
RVJSX05PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdj
cnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb3V0cHV0OworICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAg
ICAgR0NyeXB0SGFuZGxlPGdjcnlfbXBpX3Q+IGRNUEkoZ2V0TVBJKG1fcGxhdGZvcm1LZXksICJk
IikpOworICAgICAgICAgICAgICAgIEdDcnlwdEhhbmRsZTxnY3J5X21waV90PiBwTVBJKGdldE1Q
SShtX3BsYXRmb3JtS2V5LCAicSIpKTsKKyAgICAgICAgICAgICAgICBHQ3J5cHRIYW5kbGU8Z2Ny
eV9tcGlfdD4gcU1QSShnZXRNUEkobV9wbGF0Zm9ybUtleSwgInAiKSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBkcAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0NyeXB0
SGFuZGxlPGdjcnlfbXBpX3Q+IGRwTVBJKGdjcnlfbXBpX3NldF91aShudWxscHRyLCAwKSk7Cisg
ICAgICAgICAgICAgICAgICAgIEdDcnlwdEhhbmRsZTxnY3J5X21waV90PiBwbTFNUEkoZ2NyeV9t
cGlfc2V0KG51bGxwdHIsIHBNUEkpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfc3Vi
X3VpKHBtMU1QSSwgcG0xTVBJLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfbW9k
KGRwTVBJLCBkTVBJLCBwbTFNUEkpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZHAgPSBl
eHRyYWN0RGF0YShkcE1QSSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBk
cFswXSAmIDB4ODA7CisKKyAgICAgICAgICAgICAgICAgICAgZHBEYXRhLmFwcGVuZCgweDAyKTsK
KyAgICAgICAgICAgICAgICAgICAgYXBwZW5kTGVuZ3RoKGRwLnNpemUoKSArIChuZWdhdGl2ZSA/
IDEgOiAwKSwgZHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZHBEYXRhLmFwcGVuZCgweDAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgZHBEYXRhLmFwcGVuZFZlY3RvcihkcCk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gZHEKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IEdDcnlwdEhhbmRsZTxnY3J5X21waV90PiBkcU1QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwg
MCkpOworICAgICAgICAgICAgICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gcW0xTVBJ
KGdjcnlfbXBpX3NldChudWxscHRyLCBxTVBJKSk7CisgICAgICAgICAgICAgICAgICAgIGdjcnlf
bXBpX3N1Yl91aShxbTFNUEksIHFtMU1QSSwgMSk7CisgICAgICAgICAgICAgICAgICAgIGdjcnlf
bXBpX21vZChkcU1QSSwgZE1QSSwgcW0xTVBJKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRv
IGRxID0gZXh0cmFjdERhdGEoZHFNUEkpOworICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0
aXZlID0gZHFbMF0gJiAweDgwOworCisgICAgICAgICAgICAgICAgICAgIGRxRGF0YS5hcHBlbmQo
MHgwMik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZExlbmd0aChkcS5zaXplKCkgKyAobmVn
YXRpdmUgPyAxIDogMCksIGRxRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRxRGF0YS5hcHBlbmQoMHgwMCk7CisgICAgICAg
ICAgICAgICAgICAgIGRxRGF0YS5hcHBlbmRWZWN0b3IoZHEpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIHFpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9tcGlfdD4gcWlNUEkoZ2NyeV9tcGlfc2V0X3VpKG51
bGxwdHIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfaW52bShxaU1QSSwgcU1Q
SSwgcE1QSSk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBxaSA9IGV4dHJhY3REYXRhKHFp
TVBJKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IHFpWzBdICYgMHg4MDsK
KworICAgICAgICAgICAgICAgICAgICBxaURhdGEuYXBwZW5kKDB4MDIpOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRMZW5ndGgocWkuc2l6ZSgpICsgKG5lZ2F0aXZlID8gMSA6IDApLCBxaURh
dGEpOworICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBxaURhdGEuYXBwZW5kKDB4MDApOworICAgICAgICAgICAgICAgICAgICBxaURhdGEu
YXBwZW5kVmVjdG9yKHFpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZCgweDMwKTsKKyAgICAgICAgICAgIGFw
cGVuZExlbmd0aCgzICsgbkRhdGEuc2l6ZSgpICsgZURhdGEuc2l6ZSgpICsgZERhdGEuc2l6ZSgp
ICsgcERhdGEuc2l6ZSgpICsgcURhdGEuc2l6ZSgpCisgICAgICAgICAgICAgICAgKyBkcERhdGEu
c2l6ZSgpICsgZHFEYXRhLnNpemUoKSArIHFpRGF0YS5zaXplKCksIHJzYVByaXZhdGVLZXlEYXRh
KTsKKworICAgICAgICAgICAgLy8gdmVyc2lvbgorICAgICAgICAgICAgcnNhUHJpdmF0ZUtleURh
dGEuYXBwZW5kKDB4MDIpOworICAgICAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEuYXBwZW5kKDEp
OworICAgICAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4MDApOworCisgICAgICAg
ICAgICAvLyBtb2R1bHVzCisgICAgICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0
b3IobkRhdGEpOworICAgICAgICAgICAgLy8gcHVibGljRXhwb25lbnQKKyAgICAgICAgICAgIHJz
YVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3RvcihlRGF0YSk7CisgICAgICAgICAgICAvLyBwcml2
YXRlRXhwb25lbnQKKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3Rvcihk
RGF0YSk7CisgICAgICAgICAgICAvLyBwcmltZTEKKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlE
YXRhLmFwcGVuZFZlY3RvcihwRGF0YSk7CisgICAgICAgICAgICAvLyBwcmltZTIKKyAgICAgICAg
ICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3RvcihxRGF0YSk7CisgICAgICAgICAgICAv
LyBleHBvbmVudDEKKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3Rvcihk
cERhdGEpOworICAgICAgICAgICAgLy8gZXhwb25lbnQyCisgICAgICAgICAgICByc2FQcml2YXRl
S2V5RGF0YS5hcHBlbmRWZWN0b3IoZHFEYXRhKTsKKyAgICAgICAgICAgIC8vIGNvZWZmaWNpZW50
CisgICAgICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IocWlEYXRhKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHByaXZhdGVLZXlEYXRhLmFwcGVuZCgweDA0KTsKKyAgICAgICAg
YXBwZW5kTGVuZ3RoKHJzYVByaXZhdGVLZXlEYXRhLnNpemUoKSwgcHJpdmF0ZUtleURhdGEpOwor
ICAgICAgICBwcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IocnNhUHJpdmF0ZUtleURhdGEpOwor
ICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgw
eDMwKTsKKyAgICBhcHBlbmRMZW5ndGgoc192ZXJzaW9uRGF0YS5zaXplKCkgKyBwcml2YXRlS2V5
QWxnb3JpdGhtRGF0YS5zaXplKCkgKyBwcml2YXRlS2V5RGF0YS5zaXplKCksIHJlc3VsdCk7Cisg
ICAgcmVzdWx0LmFwcGVuZChzX3ZlcnNpb25EYXRhLmRhdGEoKSwgc192ZXJzaW9uRGF0YS5zaXpl
KCkpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocHJpdmF0ZUtleUFsZ29yaXRobURhdGEpOwor
ICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocHJpdmF0ZUtleURhdGEpOworCisgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Z2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMjllNmJlOGNkMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdy
YXBHQ3J5cHQuY3BwCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oIgorCisjaWYgRU5B
QkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdEhhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlw
dG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGlj
VXRpbGl0aWVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBnZXREZWZhdWx0V2Vi
Q3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXko
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5LCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4ga2Vr
KDE2KTsKKyAgICBnY3J5X3JhbmRvbWl6ZShrZWsuZGF0YSgpLCBrZWsuc2l6ZSgpLCBHQ1JZX1ZF
UllfU1RST05HX1JBTkRPTSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gd3JhcHBlZEtFSygyNCk7
CisgICAgeworICAgICAgICBhdXRvIGFsZ29yaXRobSA9IGFlc0FsZ29yaXRobUZvcktleVNpemUo
bWFzdGVyS2V5LnNpemUoKSAqIDgpOworICAgICAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9jaXBoZXJfaGRf
dD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVu
KCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQUVTV1JBUCwgMCk7CisgICAg
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwgbWFzdGVy
S2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdf
RVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9y
ID0gZ2NyeV9jaXBoZXJfZW5jcnlwdChoYW5kbGUsIHdyYXBwZWRLRUsuZGF0YSgpLCB3cmFwcGVk
S0VLLnNpemUoKSwga2VrLmRhdGEoKSwga2VrLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAh
PSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBlbmNyeXB0ZWRLZXkoa2V5LnNpemUoKSk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRhZygxNik7CisgICAgeworICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9jaXBo
ZXJfaGRfdD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhl
cl9vcGVuKCZoYW5kbGUsIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9HQ00s
IDApOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShoYW5k
bGUsIGtlay5kYXRhKCksIGtlay5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9
IGdjcnlfY2lwaGVyX2VuY3J5cHQoaGFuZGxlLCBlbmNyeXB0ZWRLZXkuZGF0YSgpLCBlbmNyeXB0
ZWRLZXkuc2l6ZSgpLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9nZXR0YWcoaGFuZGxlLCB0YWcuZGF0YSgpLCB0YWcuc2l6
ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gbWFnaWNbM10gKyB2ZXJzaW9uWzFdICsg
d3JhcHBlZEtFS1syNF0gKyBlbmNyeXB0ZWRLZXlbbGVuZ3RoKGtleSldICsgdGFnWzE2XSArIG1h
Z2ljWzNdCisgICAgc2l6ZV90IHNlcmlhbGl6ZWRMZW5ndGggPSAzICsgMSArIDI0ICsgZW5jcnlw
dGVkS2V5LnNpemUoKSArIDE2ICsgMzsKKyAgICByZXN1bHQucmVzaXplKHNlcmlhbGl6ZWRMZW5n
dGgpOworICAgIHJlc3VsdFswXSA9IDB4MDQ7CisgICAgcmVzdWx0WzFdID0gMHgwODsKKyAgICBy
ZXN1bHRbMl0gPSAweDE1OworICAgIHJlc3VsdFszXSA9IDB4MDE7CisgICAgc3RkOjptZW1jcHko
cmVzdWx0LmRhdGEoKSArIDQsIHdyYXBwZWRLRUsuZGF0YSgpLCAyNCk7CisgICAgc3RkOjptZW1j
cHkocmVzdWx0LmRhdGEoKSArIDI4LCBlbmNyeXB0ZWRLZXkuZGF0YSgpLCBlbmNyeXB0ZWRLZXku
c2l6ZSgpKTsKKyAgICBzdGQ6Om1lbWNweShyZXN1bHQuZGF0YSgpICsgMjggKyBlbmNyeXB0ZWRL
ZXkuc2l6ZSgpLCB0YWcuZGF0YSgpLCAxNik7CisgICAgcmVzdWx0W3NlcmlhbGl6ZWRMZW5ndGgg
LSAzXSA9IDB4MTY7CisgICAgcmVzdWx0W3NlcmlhbGl6ZWRMZW5ndGggLSAyXSA9IDB4MjM7Cisg
ICAgcmVzdWx0W3NlcmlhbGl6ZWRMZW5ndGggLSAxXSA9IDB4NDI7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCB1bndyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZlY3Rv
cjx1aW50OF90PiYga2V5KQoreworICAgIC8vIG1hZ2ljWzNdICsgdmVyc2lvblsxXSArIHdyYXBw
ZWRLRUtbMjRdICsgZW5jcnlwdGVkS2V5W2xlbmd0aChrZXkpXSArIHRhZ1sxNl0gKyBtYWdpY1sz
XQorICAgIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoID0gd3JhcHBlZEtleS5zaXplKCk7CisgICAg
aWYgKHNlcmlhbGl6ZWRMZW5ndGggPCAzICsgMSArIDI0ICsgMTYgKyAzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICB1aW50OF90IG1hZ2ljMVszXSA9IHsgMHgwNCwgMHgwOCwgMHgxNSB9
OworICAgIGlmIChzdGQ6Om1lbWNtcCh3cmFwcGVkS2V5LmRhdGEoKSwgbWFnaWMxLCAzKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVpbnQ4X3QgbWFnaWMyWzNdID0geyAweDE2LCAweDIz
LCAweDQyIH07CisgICAgaWYgKHN0ZDo6bWVtY21wKHdyYXBwZWRLZXkuZGF0YSgpICsgc2VyaWFs
aXplZExlbmd0aCAtIDMsIG1hZ2ljMiwgMykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAod3JhcHBlZEtleVszXSAhPSAweDAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gd3JhcHBlZEtFSygyNCk7CisgICAgc3RkOjptZW1jcHkod3JhcHBlZEtF
Sy5kYXRhKCksIHdyYXBwZWRLZXkuZGF0YSgpICsgNCwgMjQpOworCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGVuY3J5cHRlZEtleShzZXJpYWxpemVkTGVuZ3RoIC0gMyAtIDEgLSAyNCAtIDE2IC0gMyk7
CisgICAgc3RkOjptZW1jcHkoZW5jcnlwdGVkS2V5LmRhdGEoKSwgd3JhcHBlZEtleS5kYXRhKCkg
KyAyOCwgZW5jcnlwdGVkS2V5LnNpemUoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdGFnKDE2
KTsKKyAgICBzdGQ6Om1lbWNweSh0YWcuZGF0YSgpLCB3cmFwcGVkS2V5LmRhdGEoKSArIDI4ICsg
ZW5jcnlwdGVkS2V5LnNpemUoKSwgMTYpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtlaygxNik7
CisgICAgeworICAgICAgICBhdXRvIGFsZ29yaXRobSA9IGFlc0FsZ29yaXRobUZvcktleVNpemUo
bWFzdGVyS2V5LnNpemUoKSAqIDgpOworICAgICAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBHQ3J5cHRIYW5kbGU8Z2NyeV9jaXBoZXJfaGRf
dD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVu
KCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQUVTV1JBUCwgMCk7CisgICAg
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwgbWFzdGVy
S2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdf
RVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9y
ID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChoYW5kbGUsIGtlay5kYXRhKCksIGtlay5zaXplKCksIHdy
YXBwZWRLRUsuZGF0YSgpLCB3cmFwcGVkS0VLLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAh
PSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBkZWNyeXB0ZWRLZXkoZW5jcnlwdGVkS2V5LnNpemUoKSk7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGFjdHVhbFRhZygxNik7CisgICAgeworICAgICAgICBHQ3J5cHRI
YW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJy
b3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5kbGUsIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9D
SVBIRVJfTU9ERV9HQ00sIDApOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJP
UikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9IGdjcnlfY2lw
aGVyX3NldGtleShoYW5kbGUsIGtlay5kYXRhKCksIGtlay5zaXplKCkpOworICAgICAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQoaGFuZGxlLCBkZWNyeXB0ZWRLZXku
ZGF0YSgpLCBkZWNyeXB0ZWRLZXkuc2l6ZSgpLCBlbmNyeXB0ZWRLZXkuZGF0YSgpLCBlbmNyeXB0
ZWRLZXkuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9n
ZXR0YWcoaGFuZGxlLCBhY3R1YWxUYWcuZGF0YSgpLGFjdHVhbFRhZy5zaXplKCkpOworICAgICAg
ICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRUaW1lTWVtY21wKHRhZy5kYXRhKCksIGFjdHVh
bFRhZy5kYXRhKCksIDE2KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAga2V5ID0gV1RG
TW92ZShkZWNyeXB0ZWRLZXkpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9nbnV0bHMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dudVRMUy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobUFFU19DQkNHbnVUTFMuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWQyZDI5Y2E1Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR251VExTLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKLQotI2lmIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90
PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgV29ya1F1ZXVlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9y
PHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLUV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3Jt
RW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkJiwgY29u
c3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxi
YWNrJiYsIFZvaWRDYWxsYmFjayYmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Ci19Ci0KLUV4Y2VwdGlvbk9yPHZv
aWQ+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChjb25zdCBDcnlwdG9B
bGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9T
VVBQT1JURURfRVJSIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2dudXRscy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR251VExTLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdudVRMUy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTE4MmM0MDhmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobUFFU19DRkJHbnVUTFMuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmgiCi0KLSNpZiBFTkFC
TEUoU1VCVExFX0NSWVBUTykKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ3J5cHRv
QWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4m
JiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIFdvcmtRdWV1ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1
aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NS
WVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0dDTUdudVRMUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0Ny
eXB0b0FsZ29yaXRobUFFU19HQ01HbnVUTFMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiYzZmZTM4MTkwNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2dudXRscy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR251VExTLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
Ci0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006
OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNr
JiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVl
dWUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0dDTTo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9y
Q2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IFdvcmtRdWV1ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobUFFU19LV0dudVRM
Uy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobUFFU19L
V0dudVRMUy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNThiNjRjYTlkLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29y
aXRobUFFU19LV0dudVRMUy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1B
RVNfS1cuaCIKLQotI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtV3JhcEtleShSZWY8
Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0
aW9uQ2FsbGJhY2smJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENyeXB0
b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkoUmVmPENyeXB0b0tleT4mJiwgVmVj
dG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxn
b3JpdGhtQUVTX0tXOjpwbGF0Zm9ybUVuY3J5cHQoY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3Qg
Q3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQ
T1JURURfRVJSIH07Ci19Ci0KLUV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19L
Vzo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1VCVExF
X0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRv
QWxnb3JpdGhtRUNESEdudVRMUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0Ny
eXB0b0FsZ29yaXRobUVDREhHbnVUTFMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhZmU2YTEyNGVhYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2du
dXRscy9DcnlwdG9BbGdvcml0aG1FQ0RIR251VExTLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtRUNESC5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ3J5
cHRvQWxnb3JpdGhtRUNESDo6cGxhdGZvcm1EZXJpdmVCaXRzKFJlZjxDcnlwdG9LZXk+JiYsIFJl
ZjxDcnlwdG9LZXk+JiYsIHNpemVfdCwgQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdvcmtRdWV1ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobUhNQUNHbnVU
TFMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1ITUFD
R251VExTLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkzNWM1NTE1ODIuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3Jp
dGhtSE1BQ0dudVRMUy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSE1B
Qy5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLSNpbmNsdWRlICJDcnlwdG9BbGdv
cml0aG1IbWFjUGFyYW1zRGVwcmVjYXRlZC5oIgotI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+Ci0jaW5jbHVkZSA8Z251dGxzL2NyeXB0by5oPgot
I2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGdudXRsc19tYWNfYWxnb3JpdGhtX3QgZ2V0R251dGxzRGlnZXN0QWxn
b3JpdGhtKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaEZ1bmN0aW9uKQotewotICAgIHN3
aXRjaCAoaGFzaEZ1bmN0aW9uKSB7Ci0gICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMToKLSAgICAgICAgcmV0dXJuIEdOVVRMU19NQUNfU0hBMTsKLSAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yMjQ6Ci0gICAgICAgIHJldHVybiBHTlVUTFNfTUFD
X1NIQTIyNDsKLSAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6Ci0g
ICAgICAgIHJldHVybiBHTlVUTFNfTUFDX1NIQTI1NjsKLSAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OlNIQV8zODQ6Ci0gICAgICAgIHJldHVybiBHTlVUTFNfTUFDX1NIQTM4NDsK
LSAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTI6Ci0gICAgICAgIHJl
dHVybiBHTlVUTFNfTUFDX1NIQTUxMjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gR05V
VExTX01BQ19VTktOT1dOOwotICAgIH0KLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBjYWxj
dWxhdGVTaWduYXR1cmUoZ251dGxzX21hY19hbGdvcml0aG1fdCBhbGdvcml0aG0sIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhKQotewot
ICAgIHNpemVfdCBkaWdlc3RMZW5ndGggPSBnbnV0bHNfaG1hY19nZXRfbGVuKGFsZ29yaXRobSk7
Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KGRpZ2VzdExlbmd0aCk7Ci0gICAgY29uc3Qg
dm9pZCoga2V5RGF0YSA9IGtleS5kYXRhKCkgPyBrZXkuZGF0YSgpIDogcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oIiIpOwotICAgIGludCByZXQgPSBnbnV0bHNfaG1hY19mYXN0KGFs
Z29yaXRobSwga2V5RGF0YSwga2V5LnNpemUoKSwgZGF0YS5maXJzdCwgZGF0YS5zZWNvbmQsIHJl
c3VsdC5kYXRhKCkpOwotICAgIEFTU0VSVChyZXQgPT0gR05VVExTX0VfU1VDQ0VTUyk7Ci0gICAg
VU5VU0VEX1BBUkFNKHJldCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIENyeXB0
b0FsZ29yaXRobUhNQUM6OnBsYXRmb3JtU2lnbihSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWlu
dDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVZlcmlmeShSZWY8Q3J5cHRvS2V5
PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEJvb2xDYWxsYmFjayYm
LCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVl
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1FeGNlcHRpb25Pcjx2b2lkPiBDcnlw
dG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1Bh
cmFtc0RlcHJlY2F0ZWQmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleUhNQUMmIGtleSwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywg
Vm9pZENhbGxiYWNrJiYpCi17Ci0gICAgZ251dGxzX21hY19hbGdvcml0aG1fdCBhbGdvcml0aG0g
PSBnZXRHbnV0bHNEaWdlc3RBbGdvcml0aG0ocGFyYW1ldGVycy5oYXNoKTsKLSAgICBpZiAoYWxn
b3JpdGhtID09IEdOVVRMU19NQUNfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5PVF9TVVBQT1JURURfRVJSIH07Ci0gICAgY2FsbGJhY2soY2FsY3VsYXRlU2lnbmF0dXJlKGFs
Z29yaXRobSwga2V5LmtleSgpLCBkYXRhKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotRXhjZXB0
aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtSE1BQzo6cGxhdGZvcm1WZXJpZnkoY29uc3QgQ3J5
cHRvQWxnb3JpdGhtSG1hY1BhcmFtc0RlcHJlY2F0ZWQmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0
b0tleUhNQUMmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZXhwZWN0ZWRTaWduYXR1
cmUsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIEJvb2xDYWxsYmFjayYmIGNhbGxi
YWNrLCBWb2lkQ2FsbGJhY2smJikKLXsKLSAgICBnbnV0bHNfbWFjX2FsZ29yaXRobV90IGFsZ29y
aXRobSA9IGdldEdudXRsc0RpZ2VzdEFsZ29yaXRobShwYXJhbWV0ZXJzLmhhc2gpOwotICAgIGlm
IChhbGdvcml0aG0gPT0gR05VVExTX01BQ19VTktOT1dOKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1
cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBrZXkua2V5KCksIGRhdGEpOwotCi0g
ICAgLy8gVXNpbmcgYSBjb25zdGFudCB0aW1lIGNvbXBhcmlzb24gdG8gcHJldmVudCB0aW1pbmcg
YXR0YWNrcy4KLSAgICBib29sIHJlc3VsdCA9IHNpZ25hdHVyZS5zaXplKCkgPT0gZXhwZWN0ZWRT
aWduYXR1cmUuc2Vjb25kICYmICFjb25zdGFudFRpbWVNZW1jbXAoc2lnbmF0dXJlLmRhdGEoKSwg
ZXhwZWN0ZWRTaWduYXR1cmUuZmlyc3QsIHNpZ25hdHVyZS5zaXplKCkpOwotCi0gICAgY2FsbGJh
Y2socmVzdWx0KTsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRs
cy9DcnlwdG9BbGdvcml0aG1QQktERjJHbnVUTFMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2dudXRscy9DcnlwdG9BbGdvcml0aG1QQktERjJHbnVUTFMuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiM2NmMTczYjdlMi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1QQktERjJHbnVUTFMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1QQktERjIuaCIKLQotI2lmIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIENyeXB0b0FsZ29yaXRobVBCS0RGMjo6cGxhdGZvcm1EZXJpdmVCaXRzKHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5
PiYmLCBzaXplX3QsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9B
bGdvcml0aG1SU0FFU19QS0NTMV92MV81R251VExTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9nbnV0bHMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNUdudVRMUy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZDljZGJkNDFmLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3Yx
XzVHbnVUTFMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtD
UzFfdjFfNS5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLSNpbmNsdWRlICJDcnlw
dG9LZXlSU0EuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIENyeXB0b0FsZ29yaXRo
bVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRW5jcnlwdChSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0
b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjpwbGF0Zm9ybURl
Y3J5cHQoUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNr
JiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVl
dWUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUV4Y2VwdGlvbk9yPHZvaWQ+IENy
eXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlw
dG9LZXlSU0EmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwg
Vm9pZENhbGxiYWNrJiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKLX0KLQotRXhjZXB0aW9uT3I8dm9pZD4gQ3J5
cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0
b0tleVJTQSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBW
b2lkQ2FsbGJhY2smJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVHbnVU
TFMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1SU0FT
U0FfUEtDUzFfdjFfNUdudVRMUy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgw
YWY3ZjU4MjY4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxz
L0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81R251VExTLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmgiCi0KLSNpZiBFTkFCTEUo
U1VCVExFX0NSWVBUTykKLQotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtc0Rl
cHJlY2F0ZWQuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVNp
Z24oUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYs
IEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNB
U1NBX1BLQ1MxX3YxXzU6OnBsYXRmb3JtVmVyaWZ5KFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1
aW50OF90PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgQm9vbENhbGxiYWNrJiYsIEV4Y2VwdGlvbkNh
bGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLUV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJT
QVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNhU3Nh
UGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleVJTQSYsIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9
OwotfQotCi1FeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NTo6cGxhdGZvcm1WZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zRGVwcmVj
YXRlZCYsIGNvbnN0IENyeXB0b0tleVJTQSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgQm9vbENhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9T
VVBQT1JURURfRVJSIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2dudXRscy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUEdudVRMUy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ251dGxzL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQR251VExTLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU0YmUzYmQ4NWEuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBHbnVUTFMu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVAuaCIKLQotI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBD
cnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWlu
dDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBW
ZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OnBs
YXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFyYW1zRGVwcmVjYXRl
ZCYsIGNvbnN0IENyeXB0b0tleVJTQSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0
b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OwotfQotCi1FeGNlcHRp
b25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0
IENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5
UlNBJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRD
YWxsYmFjayYmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5PVF9TVVBQT1JURURfRVJSIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2dudXRscy9DcnlwdG9LZXlFQ0dudVRMUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ251dGxzL0NyeXB0b0tleUVDR251VExTLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTVkNmQxNDAzYWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nbnV0bHMvQ3J5cHRvS2V5RUNHbnVUTFMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTIx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3J5
cHRvS2V5RUMuaCIKLQotI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi0jaW5jbHVkZSAiQ3J5
cHRvS2V5UGFpci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RydWN0IF9QbGF0Zm9ybUVDS2V5R251VExTIHsKLX07Ci0KLUNyeXB0b0tl
eUVDOjp+Q3J5cHRvS2V5RUMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXNpemVf
dCBDcnlwdG9LZXlFQzo6a2V5U2l6ZUluQml0cygpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLQotICAgIHJldHVybiAwOwotfQotCi1WZWN0b3I8dWludDhfdD4gQ3J5cHRvS2V5RUM6
OnBsYXRmb3JtRXhwb3J0UmF3KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotc3RkOjpvcHRpb25hbDxDcnlwdG9LZXlQYWlyPiBDcnlwdG9L
ZXlFQzo6cGxhdGZvcm1HZW5lcmF0ZVBhaXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgTmFt
ZWRDdXJ2ZSwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLVJlZlB0cjxDcnlwdG9LZXlF
Qz4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtSW1wb3J0UmF3KENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIsIE5hbWVkQ3VydmUsIFZlY3Rvcjx1aW50OF90PiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJp
dG1hcCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLVJlZlB0cjxDcnlwdG9LZXlFQz4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtSW1wb3J0SldLUHVi
bGljKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIE5hbWVkQ3VydmUsIFZlY3Rvcjx1aW50OF90
PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8
Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciwgTmFtZWRDdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3Rv
cjx1aW50OF90PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VCaXRt
YXApCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci12b2lkIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVudHMoSnNvbldlYktleSYp
IGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUmVmUHRyPENyeXB0b0tleUVD
PiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1JbXBvcnRTcGtpKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIsIE5hbWVkQ3VydmUsIFZlY3Rvcjx1aW50OF90PiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJp
dG1hcCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLVZlY3Rvcjx1aW50OF90PiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRTcGtpKCkgY29u
c3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmVm
UHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1JbXBvcnRQa2NzOChDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyLCBOYW1lZEN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwg
Q3J5cHRvS2V5VXNhZ2VCaXRtYXApCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1WZWN0b3I8dWludDhfdD4gQ3J5cHRvS2V5RUM6OnBsYXRmb3Jt
RXhwb3J0UGtjczgoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1
cm4geyB9OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1VCVExFX0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMv
Q3J5cHRvS2V5UlNBR251VExTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5
cHRvS2V5UlNBR251VExTLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3NzM3
NDI3ZmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5
cHRvS2V5UlNBR251VExTLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIK
LQotI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnkuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgotI2lu
Y2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3Qg
X1BsYXRmb3JtUlNBS2V5R251VExTIHsKLX07Ci0KLUNyeXB0b0tleVJTQTo6Q3J5cHRvS2V5UlNB
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIENyeXB0b0tleVR5cGUgdHlwZSwgUGxhdGZvcm1S
U0FLZXkgcGxhdGZvcm1LZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFw
IHVzYWdlKQotICAgIDogQ3J5cHRvS2V5KGlkZW50aWZpZXIsIHR5cGUsIGV4dHJhY3RhYmxlLCB1
c2FnZSkKLSAgICAsIG1fcGxhdGZvcm1LZXkocGxhdGZvcm1LZXkpCi0gICAgLCBtX3Jlc3RyaWN0
ZWRUb1NwZWNpZmljSGFzaChoYXNIYXNoKQotICAgICwgbV9oYXNoKGhhc2gpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjpj
cmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgaGFzSGFzaCwgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNv
bXBvbmVudHMmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFw
IHVzYWdlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlkZW50
aWZpZXIpOwotICAgIFVOVVNFRF9QQVJBTShoYXNoKTsKLSAgICBVTlVTRURfUEFSQU0oaGFzSGFz
aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGtleURhdGEpOwotICAgIFVOVVNFRF9QQVJBTShleHRyYWN0
YWJsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1DcnlwdG9LZXlSU0E6On5DcnlwdG9LZXlSU0EoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLWJvb2wgQ3J5cHRvS2V5UlNBOjppc1Jlc3RyaWN0ZWRUb0hhc2goQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciYgaWRlbnRpZmllcikgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVzdHJp
Y3RlZFRvU3BlY2lmaWNIYXNoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZGVudGlm
aWVyID0gbV9oYXNoOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zaXplX3QgQ3J5cHRvS2V5UlNB
OjprZXlTaXplSW5CaXRzKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlSU0E6
OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFZl
Y3Rvcjx1aW50OF90PiBwdWJsaWNFeHBvbmVudDsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxSc2FLZXlBbGdvcml0aG0+KGVtcHR5U3RyaW5nKCksIDAsIFdURk1vdmUocHVibGljRXhwb25l
bnQpKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IENyeXB0b0tleVJTQTo6
ZXhwb3J0RGF0YSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGV4dHJhY3RhYmxlKCkpOwotCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBDcnlwdG9L
ZXlSU0E6OmdlbmVyYXRlUGFpcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwg
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIHVuc2lnbmVkIG1v
ZHVsdXNMZW5ndGgsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcHVibGljRXhwb25lbnQsIGJvb2wg
ZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlLCBLZXlQYWlyQ2FsbGJhY2sm
JiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgZmFpbHVy
ZUNhbGxiYWNrKCk7Ci0KLSAgICBVTlVTRURfUEFSQU0oYWxnb3JpdGhtKTsKLSAgICBVTlVTRURf
UEFSQU0oaGFzaCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhhc0hhc2gpOwotICAgIFVOVVNFRF9QQVJB
TShtb2R1bHVzTGVuZ3RoKTsKLSAgICBVTlVTRURfUEFSQU0ocHVibGljRXhwb25lbnQpOwotICAg
IFVOVVNFRF9QQVJBTShleHRyYWN0YWJsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKLSAg
ICBVTlVTRURfUEFSQU0oY2FsbGJhY2spOwotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLX0K
LQotUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cj4sIFZlY3Rvcjx1aW50OF90PiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUV4Y2VwdGlv
bk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRTcGtpKCkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQ
T1JURURfRVJSIH07Ci19Ci0KLVJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1w
b3J0UGtjczgoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDxDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyPiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIGJvb2wsIENyeXB0b0tleVVz
YWdlQml0bWFwKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlSU0E6OmV4cG9y
dFBrY3M4KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2dudXRscy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdudVRMUy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR251
VExTLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ5OTg5Zjk0ZTEuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvU2VyaWFsaXplZENyeXB0
b0tleVdyYXBHbnVUTFMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZENyeXB0b0tl
eVdyYXAuaCIKLQotI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIGdldERlZmF1bHRXZWJD
cnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCB3cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIG1hc3RlcktleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50
OF90PiYgcmVzdWx0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFN
KG1hc3RlcktleSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7Ci0gICAgVU5VU0VEX1BBUkFNKHJl
c3VsdCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgdW53cmFwU2VyaWFsaXplZENy
eXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB3cmFwcGVkS2V5LCBWZWN0b3I8dWludDhfdD4mIGtleSkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShtYXN0ZXJLZXkpOwotICAgIFVOVVNFRF9QQVJB
TSh3cmFwcGVkS2V5KTsKLSAgICBVTlVTRURfUEFSQU0oa2V5KTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5oIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuaAppbmRleCBmMThkNDE0ZTc4Yi4uMTRjOTYxMWMw
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuaApAQCAtMzcsOCAr
MzcsOCBAQCB0eXBlZGVmIENDRUNDcnlwdG9yUmVmIFBsYXRmb3JtRUNLZXk7CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgc3RydWN0IF9QbGF0Zm9ybUVDS2V5R251VExTIFBs
YXRmb3JtRUNLZXlHbnVUTFM7Ci10eXBlZGVmIFBsYXRmb3JtRUNLZXlHbnVUTFMgKlBsYXRmb3Jt
RUNLZXk7CitzdHJ1Y3QgZ2NyeV9zZXhwOwordHlwZWRlZiBnY3J5X3NleHAqIFBsYXRmb3JtRUNL
ZXk7CiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9D
cnlwdG9LZXlSU0EuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5o
CmluZGV4IDBmOGNlN2M0ZmY1Li5mODk1ZGRiMmJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5UlNBLmgKQEAgLTM3LDggKzM3LDggQEAgdHlwZWRlZiBDQ1JTQUNyeXB0
b3JSZWYgUGxhdGZvcm1SU0FLZXk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKLXR5cGVk
ZWYgc3RydWN0IF9QbGF0Zm9ybVJTQUtleUdudVRMUyBQbGF0Zm9ybVJTQUtleUdudVRMUzsKLXR5
cGVkZWYgUGxhdGZvcm1SU0FLZXlHbnVUTFMgKlBsYXRmb3JtUlNBS2V5Oworc3RydWN0IGdjcnlf
c2V4cDsKK3R5cGVkZWYgZ2NyeV9zZXhwKiBQbGF0Zm9ybVJTQUtleTsKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci0tIAoyLjExLjAKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305835</attachid>
            <date>2017-03-29 22:51:20 -0700</date>
            <delta_ts>2017-04-07 03:38:12 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>153785</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">RnJvbSAxYWUxM2I5Y2Q0MDdkY2YxZTZjZmU2MWY5NjMxMWM5MWJiOWVhYjZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBaYW4gRG9iZXJzZWsgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgpE
YXRlOiBXZWQsIDI5IE1hciAyMDE3IDIzOjAyOjM2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gV0lQ
LgoKLS0tCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyAgICAgICAg
ICB8ICA3NyArLQogU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaCAg
ICAgICAgfCAgNTQgKysKIC4uLi9QQUwvcGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0VXRpbGl0aWVz
LmggICAgICAgIHwgIDE4ICsKIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9I
YW5kbGUuaCAgICAgIHwgIDQwICsKIC4uLi9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFF
U19DQkNHQ3J5cHQuY3BwIHwgMTQwICsrKy0KIC4uLi9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29y
aXRobUFFU19DRkJHQ3J5cHQuY3BwIHwgMTE3ICsrLQogLi4uL2NyeXB0by9nY3J5cHQvQ3J5cHRv
QWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHAgfCAxNTAgKysrLQogLi4uL2NyeXB0by9nY3J5cHQv
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcCAgfCAgODMgKy0KIC4uLi9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobUVDREhHQ3J5cHQuY3BwICAgIHwgIDgxICstCiAuLi4vY3J5cHRv
L2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3BwICB8ICA2NCArLQogLi4uL0Ny
eXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwICAgICAgfCAxMzQgKystCiAu
Li4vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwICAgICB8IDIxNiAr
KysrLQogLi4uL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUEdDcnlwdC5jcHAgICAgICAg
fCAxNzkgKysrLQogLi4uL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeUdDcnlwdC5jcHAg
ICAgICAgfCAgIDggKwogU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dD
cnlwdC5jcHAgfCA3NjQgKysrKysrKysrKysrKysrKy0KIC4uLi9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNwcCAgIHwgOTI3ICsrKysrKysrKysrKysrKysrKysrLQog
Li4uL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAgICAgICAgfCAxNDMg
KysrLQogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuaCAgICAgICAgICAg
fCAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oICAgICAg
ICAgIHwgICA0ICstCiAxOSBmaWxlcyBjaGFuZ2VkLCAzMDAwIGluc2VydGlvbnMoKyksIDIwMyBk
ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2Ny
eXB0by9nY3J5cHQvQVNOMS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oCgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBkMjU3NzYxYWM2Yi4uMTAxMmFmNmQ3NTQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC03MTIsNDkgKzcx
Miw4IEBAIEJ1ZyhHVEspIGVkaXRpbmcvc2VjdXJlLWlucHV0IFsgRmFpbHVyZSBdCiAKICMgY3J5
cHRvLnN1YnRsZSBpcyBub3QgeWV0IGVuYWJsZWQsIGJ1dCBkaWdlc3QgYWxnb3JpdGhtcyBhcmUg
YWxyZWFkeSBpbXBsZW1lbnRlZAogIyBhbmQgdGhlaXIgdGVzdHMgYXJlIHdoaXRlbGlzdGVkCi13
ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8x
MzMxMjIgY3J5cHRvL3dlYmtpdFN1YnRsZSBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBj
cnlwdG8vd29ya2Vycy9zdWJ0bGUgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1leHBvcnQt
a2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1h
Yy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1zaGExLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0
bGUvaG1hYy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1zaGEyMjQuaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWV4cG9ydC1rZXktandrLXNoYTI1Ni5odG1sIFsgUGFz
cyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stc2hhMzg0Lmh0
bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1z
aGE1MTIuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWV4cG9ydC1y
YXcta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXktY3Vz
dG9taXplZC1sZW5ndGguaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRl
LWtleS1oYXNoLW9iamVjdC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJh
dGUta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUv
aG1hYy1nZW5lcmF0ZS1rZXktc2hhMS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMt
Z2VuZXJhdGUta2V5LXNoYTIyNC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2Vu
ZXJhdGUta2V5LXNoYTI1Ni5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJh
dGUta2V5LXNoYTM4NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUt
a2V5LXNoYTUxMi5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5
LXNpZ24tdmVyaWZ5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtandr
LWtleS1leHBvcnQtandrLWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1w
b3J0LWp3ay1rZXktZXhwb3J0LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9o
bWFjLWltcG9ydC1qd2sta2V5LW1pbmltdW0uaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9o
bWFjLWltcG9ydC1qd2sta2V5LW5vbi1leHRyYWN0YWJsZS5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2htYWMtaW1wb3J0LWp3ay1rZXktc2hhMS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2htYWMtaW1wb3J0LWp3ay1rZXktc2hhMjI0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0
bGUvaG1hYy1pbXBvcnQtandrLWtleS1zaGEyNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRs
ZS9obWFjLWltcG9ydC1qd2sta2V5LXNoYTM4NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxl
L2htYWMtaW1wb3J0LWp3ay1rZXktc2hhNTEyLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUv
aG1hYy1pbXBvcnQta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0
by9zdWJ0bGUvaG1hYy1pbXBvcnQta2V5LXNpZ24tc2hhMS5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTIyNC5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTI1Ni5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTM4NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTUxMi5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2htYWMtaW1wb3J0LWtleS12ZXJpZnktc2hhMS5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2htYWMtaW1wb3J0LWtleS12ZXJpZnktc2hhMjI0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0
by9zdWJ0bGUvaG1hYy1pbXBvcnQta2V5LXZlcmlmeS1zaGEyNTYuaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktdmVyaWZ5LXNoYTM4NC5odG1sIFsgUGFzcyBdCi1j
cnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS12ZXJpZnktc2hhNTEyLmh0bWwgWyBQYXNzIF0K
LWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtcmF3LWtleS1jdXN0b21pemVkLWxlbmd0aC5odG1s
IFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LXJhdy1rZXktZXhwb3J0LWp3ay1r
ZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1yYXcta2V5LWV4cG9y
dC1yYXcta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtcmF3LWtl
eS5odG1sIFsgUGFzcyBdCisKIHdlYmtpdC5vcmcvYi8xMzMzMTkgY3J5cHRvL3dlYmtpdFN1YnRs
ZS9zaGEtMS5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTMzMzE5IGNyeXB0by93ZWJraXRT
dWJ0bGUvc2hhLTIyNC5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTMzMzE5IGNyeXB0by93
ZWJraXRTdWJ0bGUvc2hhLTI1Ni5odG1sIFsgUGFzcyBdCkBAIC03NjcsNDEgKzcyNiw5IEBAIHdl
YmtpdC5vcmcvYi8xMzMzMjAgY3J5cHRvL3dlYmtpdFN1YnRsZS9obWFjLWltcG9ydC1qd2suaHRt
bCBbIFBhc3MgXQogd2Via2l0Lm9yZy9iLzEzMzMyMCBjcnlwdG8vd2Via2l0U3VidGxlL2htYWMt
c2lnbi12ZXJpZnktZW1wdHkta2V5Lmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xMzMzMjAg
Y3J5cHRvL3dlYmtpdFN1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwgWyBQYXNzIF0KIAorIyBX
ZSdyZSBhY3R1YWxseSBwYXNzaW5nIG1vcmUgc3ViLXRlc3RzIGhlcmUgdGhhbiB0aGUgYmFzZWxp
bmVzIGV4cGVjdC4KIHdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L2Flc19jYmMud29ya2VyLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L2Flc19nY20ud29ya2VyLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L3JzYS53b3JrZXIuaHRtbCBbIEZh
aWx1cmUgXQogd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1dlYkNyeXB0b0FQSS9lbmNyeXB0X2RlY3J5cHQvdGVzdF9hZXNfY2JjLmh0bWwgWyBGYWls
dXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L3Rlc3RfYWVzX2djbS5odG1sIFsgRmFpbHVy
ZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC90ZXN0X3JzYV9vYWVwLmh0bWwgWyBGYWlsdXJl
IF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9X
ZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvZmFpbHVyZXNfQUVTLUdDTS53b3JrZXIuaHRtbCBbIEZh
aWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS9mYWlsdXJlc19SU0EtT0FFUC53b3JrZXIuaHRt
bCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS9mYWlsdXJlc19SU0FTU0EtUEtDUzEt
djFfNS53b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS9zdWNjZXNz
ZXNfQUVTLUdDTS53b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS9z
dWNjZXNzZXNfUlNBU1NBLVBLQ1MxLXYxXzUud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9B
UEkvZ2VuZXJhdGVLZXkvdGVzdF9mYWlsdXJlc19BRVMtR0NNLmh0bWwgWyBGYWlsdXJlIF0KLXdl
YmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlw
dG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9mYWlsdXJlc19SU0EtT0FFUC5odG1sIFsgRmFpbHVyZSBd
Ci13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2Vi
Q3J5cHRvQVBJL2dlbmVyYXRlS2V5L3Rlc3RfZmFpbHVyZXNfUlNBU1NBLVBLQ1MxLXYxXzUuaHRt
bCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS90ZXN0X3N1Y2Nlc3Nlc19BRVMtR0NN
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9zdWNjZXNzZXNfUlNB
U1NBLVBLQ1MxLXYxXzUuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9pbXBvcnRfZXhwb3J0L3Jz
YV9pbXBvcnRLZXkud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIg
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvaW1wb3J0X2V4cG9y
dC9zeW1tZXRyaWNfaW1wb3J0S2V5Lndvcmtlci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3Jn
L2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2lt
cG9ydF9leHBvcnQvdGVzdF9yc2FfaW1wb3J0S2V5Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5v
cmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkv
aW1wb3J0X2V4cG9ydC90ZXN0X3N5bW1ldHJpY19pbXBvcnRLZXkuaHRtbCBbIEZhaWx1cmUgXQot
d2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNy
eXB0b0FQSS9zaWduX3ZlcmlmeS9yc2FfcGtjcy53b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Vi
a2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0
b0FQSS9zaWduX3ZlcmlmeS9yc2FfcHNzLndvcmtlci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQu
b3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJ
L3NpZ25fdmVyaWZ5L3Rlc3RfcnNhX3BrY3MuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9i
LzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9zaWdu
X3ZlcmlmeS90ZXN0X3JzYV9wc3MuaHRtbCBbIEZhaWx1cmUgXQotIyBXZSBkb24ndCBzdXBwb3J0
IEVDREggZnVuY3Rpb25zCi13ZWJraXQub3JnL2IvMTY5MjcyIGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2dlbmVyYXRlS2V5L2ZhaWx1cmVzX0VDREgud29ya2Vy
Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xNjkyNzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvc3VjY2Vzc2VzX0VDREgud29ya2Vy
Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xNjkyNzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9mYWlsdXJlc19FQ0RILmh0
bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xNjkyNzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVzdF9zdWNjZXNzZXNfRUNESC5odG1s
IFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTY5MjcyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvV2ViQ3J5cHRvQVBJL2ltcG9ydF9leHBvcnQvZWNfaW1wb3J0S2V5Lndvcmtlci5odG1s
IFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTY5MjcyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvV2ViQ3J5cHRvQVBJL2ltcG9ydF9leHBvcnQvdGVzdF9lY19pbXBvcnRLZXkuaHRtbCBb
IFNraXAgXQotIyBXZSBkb24ndCBzdXBwb3J0IFBCS0RGMgotd2Via2l0Lm9yZy9iLzE2OTUyOCBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9kZXJpdmVfYml0c19r
ZXlzL3Bia2RmMi53b3JrZXIuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzE2OTUyOCBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9kZXJpdmVfYml0c19rZXlz
L3Rlc3RfcGJrZGYyLmh0bWwgWyBTa2lwIF0KLQogCiAjIEdUSyBkb2VzIG5vdCBpbXBsZW1lbnQg
c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQKIGVkaXRpbmcvaW5zZXJ0aW5nL3R5cGlu
Zy1zcGFjZS10by10cmlnZ2VyLXNtYXJ0LWxpbmsuaHRtbCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9BU04xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjE1MWM1ZTEyOTNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaApAQCAtMCwwICsxLDU0IEBACisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBBU04xIHsK
KworZW51bSBUYWcgOiB1aW50OF90IHsKKyAgICBJbnRlZ2VyID0gMHgwMiwKKyAgICBCaXRTdHJp
bmcgPSAweDAzLAorICAgIE9jdGV0U3RyaW5nID0gMHgwNCwKKyAgICBPYmplY3RJZGVudGlmaWVy
ID0gMHgwNiwKKyAgICBTZXF1ZW5jZSA9IDB4MzAsCit9OworCitzdHJ1Y3QgVExWIHsKKyAgICBz
aXplX3QgYnVmZmVyU2l6ZSB7IDAgfTsKKyAgICBzaXplX3QgYnVmZmVyT2Zmc2V0IHsgMCB9Owor
CisgICAgdWludDhfdCB0YWcgeyAwIH07CisgICAgc2l6ZV90IGxlbmd0aCB7IDAgfTsKKyAgICBz
aXplX3Qgb2Zmc2V0IHsgMCB9OworCisgICAgc2l6ZV90IHZhbHVlT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gYnVmZmVyT2Zmc2V0ICsgb2Zmc2V0OyB9CisgICAgYm9vbCBoYXNUYWcoVGFnIHRhcmdl
dFRhZykgY29uc3QgeyByZXR1cm4gdGFnID09IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRhcmdldFRh
Zyk7IH0KK307CisKK3N0YXRpYyBUTFYgcGFyc2VUTFYoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBi
dWZmZXIsIGNvbnN0IHNpemVfdCBvZmZzZXQpCit7CisgICAgaWYgKG9mZnNldCArIDIgPiBidWZm
ZXIuc2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgdWludDhfdCB0YWcgPSBidWZm
ZXJbb2Zmc2V0XTsKKyAgICBzaXplX3QgbGVuZ3RoID0gYnVmZmVyW29mZnNldCArIDFdOworICAg
IHNpemVfdCBsZW5ndGhCeXRlcyA9IDE7CisKKyAgICBpZiAobGVuZ3RoID4gMTI4KSB7CisgICAg
ICAgIGxlbmd0aEJ5dGVzID0gbGVuZ3RoIC0gMTI4OworICAgICAgICBpZiAob2Zmc2V0ICsgMiAr
IGxlbmd0aEJ5dGVzID4gYnVmZmVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisK
KyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGhCeXRlczsgKytpKQorICAgICAgICAgICAgbGVuZ3RoICs9IGJ1ZmZlcltvZmZzZXQgKyAyICsg
aV0gPDwgKChsZW5ndGhCeXRlcyAtIGkgLSAxKSAqIDgpOworCisgICAgICAgIGxlbmd0aEJ5dGVz
ICs9IDE7CisgICAgfQorCisgICAgaWYgKG9mZnNldCArIDEgKyBsZW5ndGhCeXRlcyArIGxlbmd0
aCA+IGJ1ZmZlci5zaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyAx
ICsgbGVuZ3RoQnl0ZXMgKyBsZW5ndGgsIG9mZnNldCwgdGFnLCBsZW5ndGgsIDEgKyBsZW5ndGhC
eXRlcyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBBU04xCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0VXRpbGl0aWVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0VXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU0YmQwMjViNjdmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5o
CkBAIC0wLDAgKzEsMTggQEAKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Z2NyeXB0Lmg+Cisj
aW5jbHVkZSA8V1RGL3d0Zi9PcHRpb25hbC5oPgorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxpbnQ+
IGFlc0FsZ29yaXRobUZvcktleVNpemUoc2l6ZV90IGtleVNpemUpCit7CisgICAgc3dpdGNoIChr
ZXlTaXplKSB7CisgICAgY2FzZSAxMjg6CisgICAgICAgIHJldHVybiBHQ1JZX0NJUEhFUl9BRVMx
Mjg7CisgICAgY2FzZSAxOTI6CisgICAgICAgIHJldHVybiBHQ1JZX0NJUEhFUl9BRVMxOTI7Cisg
ICAgY2FzZSAyNTY6CisgICAgICAgIHJldHVybiBHQ1JZX0NJUEhFUl9BRVMyNTY7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmgKaW5kZXggOTA2MWYyOGI1NTIu
LjZkZjZlZjQ1MzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9n
Y3J5cHQvSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0
L0hhbmRsZS5oCkBAIC04Myw2ICs4MywzMCBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8Pgor
c3RydWN0IEhhbmRsZURlbGV0ZXI8Z2NyeV9jaXBoZXJfaGRfdD57CisgICAgdm9pZCBvcGVyYXRv
cigpKGdjcnlfY2lwaGVyX2hkX3QgaGFuZGxlKQorICAgIHsKKyAgICAgICAgZ2NyeV9jaXBoZXJf
Y2xvc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVs
ZXRlcjxnY3J5X2N0eF90PnsKKyAgICB2b2lkIG9wZXJhdG9yKCkoZ2NyeV9jdHhfdCBoYW5kbGUp
CisgICAgeworICAgICAgICBnY3J5X2N0eF9yZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8Z2NyeV9zZXhwX3Q+eworICAgIHZvaWQg
b3BlcmF0b3IoKShnY3J5X3NleHBfdCBoYW5kbGUpCisgICAgeworICAgICAgICBnY3J5X3NleHBf
cmVsZWFzZShoYW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KIHN0cnVjdCBIYW5kbGVE
ZWxldGVyPGdjcnlfbWFjX2hkX3Q+IHsKICAgICB2b2lkIG9wZXJhdG9yKCkoZ2NyeV9tYWNfaGRf
dCBoYW5kbGUpCiAgICAgewpAQCAtOTAsNSArMTE0LDIxIEBAIHN0cnVjdCBIYW5kbGVEZWxldGVy
PGdjcnlfbWFjX2hkX3Q+IHsKICAgICB9CiB9OwogCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxl
RGVsZXRlcjxnY3J5X21waV90PnsKKyAgICB2b2lkIG9wZXJhdG9yKCkoZ2NyeV9tcGlfdCBoYW5k
bGUpCisgICAgeworICAgICAgICBnY3J5X21waV9yZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8Z2NyeV9tcGlfcG9pbnRfdD57Cisg
ICAgdm9pZCBvcGVyYXRvcigpKGdjcnlfbXBpX3BvaW50X3QgaGFuZGxlKQorICAgIHsKKyAgICAg
ICAgZ2NyeV9tcGlfcG9pbnRfcmVsZWFzZShoYW5kbGUpOworICAgIH0KK307CisKIH0gLy8gbmFt
ZXNwYWNlIEdDcnlwdAogfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNw
cAppbmRleCBjMWQyZDI5Y2E1Yi4uOWZkMGJiNzYzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0
LmNwcApAQCAtMjgsMTkgKzI4LDE1MSBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAK
KyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXND
YmNDZmJQYXJhbXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvR0NyeXB0VXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8cGFs
L2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBD
cnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50
OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1
aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0KQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgYXV0byBhbGdvcml0aG0gPSBhZXNBbGdvcml0aG1Gb3JL
ZXlTaXplKGtleS5zaXplKCkgKiA4KTsKKyAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJf
aGRfdD4gaGFuZGxlOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4o
JmhhbmRsZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBIRVJfTU9ERV9DQkMsIDApOworICAgIGlmIChl
cnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBrZXkuZGF0YSgpLCBrZXku
c2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0aXYoaGFuZGxl
LCBpdi5kYXRhKCksIGl2LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJS
T1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICB7CisgICAgICAgIC8vIFBL
Q1MjNworICAgICAgICBzaXplX3QgcGFkZGVkU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2YoZ2Ny
eV9jaXBoZXJfZ2V0X2FsZ29fYmxrbGVuKCphbGdvcml0aG0pLCBwbGFpblRleHQuc2l6ZSgpICsg
MSk7CisgICAgICAgIHNpemVfdCBwYWRkaW5nID0gcGFkZGVkU2l6ZSAtIHBsYWluVGV4dC5zaXpl
KCk7CisgICAgICAgIHBsYWluVGV4dC5yZXNpemUocGFkZGVkU2l6ZSk7CisgICAgICAgIHN0ZDo6
bWVtc2V0KHBsYWluVGV4dC5lbmQoKSAtIHBhZGRpbmcsIHBhZGRpbmcsIHBhZGRpbmcpOworICAg
IH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBvdXRwdXQocGxhaW5UZXh0LnNpemUoKSk7CisKKyAg
ICBnY3J5X2NpcGhlcl9maW5hbChoYW5kbGUpOworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZW5j
cnlwdChoYW5kbGUsIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIHBsYWluVGV4dC5kYXRh
KCksIHBsYWluVGV4dC5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9S
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwg
Z2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsK
IH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYs
IFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYm
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVjcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVy
VGV4dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGF1dG8gYWxnb3JpdGhtID0gYWVz
QWxnb3JpdGhtRm9yS2V5U2l6ZShrZXkuc2l6ZSgpICogOCk7CisgICAgaWYgKCFhbGdvcml0aG0p
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxl
PGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5
X2NpcGhlcl9vcGVuKCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQ0JDLCAw
KTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwga2V5
LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVy
X3NldGl2KGhhbmRsZSwgaXYuZGF0YSgpLCBpdi5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBH
UEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IG91dHB1dChjaXBoZXJUZXh0LnNpemUoKSk7CisKKyAgICBnY3J5X2NpcGhl
cl9maW5hbChoYW5kbGUpOworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChoYW5kbGUs
IG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIGNpcGhlclRleHQuZGF0YSgpLCBjaXBoZXJU
ZXh0LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNv
dXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIFBLQ1MjNworICAgICAgICB1aW50
OF90IHBhZGRpbmcgPSBvdXRwdXQubGFzdCgpOworICAgICAgICBpZiAocGFkZGluZyA+IGdjcnlf
Y2lwaGVyX2dldF9hbGdvX2Jsa2xlbigqYWxnb3JpdGhtKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvdXRwdXQuc2l6ZSgpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkgeworICAgICAgICAgICAg
aWYgKG91dHB1dFtzaXplIC0gaSAtIDFdICE9IHBhZGRpbmcpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIG91dHB1dC5yZXNpemUoc2l6
ZSAtIHBhZGRpbmcpOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7Cit9CisK
K3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9L
ZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYg
Y2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQoreworICAgIGNv
bnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVy
cyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0g
V1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9B
bGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8m
IGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAgICAg
ICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVy
cy5pdlZlY3RvcigpLCBXVEZNb3ZlKHBsYWluVGV4dCkpOworICAgICAgICAgICAgaWYgKCFvdXRw
dXQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAg
ICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9u
RXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksIG91dHB1dCA9IFdURk1vdmUoKm91dHB1dCldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayhXVEZNb3ZlKG91dHB1dCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworfQorCit2b2lkIENyeXB0b0FsZ29y
aXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9y
PHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0
aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4dC5yZWYoKTsKKyAg
ICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJh
bWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJU
ZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2Jj
Q2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3du
Y2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0
ID0gZ2NyeXB0RGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwg
V1RGTW92ZShjaXBoZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSwgb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0
cHV0KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29y
aXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQ
YXJhbXNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0
aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR0NyeXB0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NG
QkdDcnlwdC5jcHAKaW5kZXggZjU5MTgyYzQwOGYuLmQ0YTRiNDYzMzlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQkdDcnlwdC5jcHAKQEAgLTI4LDE5ICsyOCwxMjggQEAKIAogI2lmIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oPgorI2lu
Y2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBW
ZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCitzdGF0aWMgc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdEVuY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBr
ZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4
dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGF1dG8gYWxnb3JpdGhtID0gYWVzQWxn
b3JpdGhtRm9yS2V5U2l6ZShrZXkuc2l6ZSgpICogOCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdj
cnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2Np
cGhlcl9vcGVuKCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQ0ZCOCwgMCk7
CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShoYW5kbGUsIGtleS5k
YXRhKCksIGtleS5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9z
ZXRpdihoYW5kbGUsIGl2LmRhdGEoKSwgaXYuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFZlY3Rv
cjx1aW50OF90PiBvdXRwdXQocGxhaW5UZXh0LnNpemUoKSk7CisKKyAgICBnY3J5X2NpcGhlcl9m
aW5hbChoYW5kbGUpOworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZW5jcnlwdChoYW5kbGUsIG91
dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIHBsYWluVGV4dC5kYXRhKCksIHBsYWluVGV4dC5z
aXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2Uo
ZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKK30KKworc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2LCBWZWN0b3I8dWludDhfdD4m
JiBjaXBoZXJUZXh0KQoreworICAgIGF1dG8gYWxnb3JpdGhtID0gYWVzQWxnb3JpdGhtRm9yS2V5
U2l6ZShrZXkuc2l6ZSgpICogOCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hk
X3Q+IGhhbmRsZTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZo
YW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQ0ZCOCwgMCk7CisgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShoYW5kbGUsIGtleS5kYXRhKCksIGtleS5z
aXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRpdihoYW5kbGUs
IGl2LmRhdGEoKSwgaXYuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJP
UikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFZlY3Rvcjx1aW50OF90PiBv
dXRwdXQoY2lwaGVyVGV4dC5zaXplKCkpOworCisgICAgZ2NyeV9jaXBoZXJfZmluYWwoaGFuZGxl
KTsKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQoaGFuZGxlLCBvdXRwdXQuZGF0YSgp
LCBvdXRwdXQuc2l6ZSgpLCBjaXBoZXJUZXh0LmRhdGEoKSwgY2lwaGVyVGV4dC5zaXplKCkpOwor
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBn
Y3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0
aG1BRVNfQ0ZCOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0
b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgV29ya1F1ZXVlJikKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNy
eXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRl
cnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZl
Y3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2Fs
bGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1
ZXVlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3
b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0
ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAg
YXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBh
cmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8
Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdj
cnlwdEVuY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1v
dmUocGxhaW5UZXh0KSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
dGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgb3V0
cHV0ID0gV1RGTW92ZSgqb3V0cHV0KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkg
bXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZv
cm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBh
cmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJU
ZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2Vw
dGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUm
IHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRj
aCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZN
b3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFt
ZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0
ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4o
a2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZWNyeXB0KGFl
c0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKGNpcGhlclRleHQp
KTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNr
KAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBvdXRwdXQgPSBXVEZNb3Zl
KCpvdXRwdXQpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHAK
aW5kZXggYmM2ZmUzODE5MDUuLmNmM2RmZDA4NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5j
cHAKQEAgLTI4LDE5ICsyOCwxNjEgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCisj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRv
S2V5QUVTLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
PHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0
L0dDcnlwdFV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NN
OjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFj
ayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1
ZXVlJikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlw
dChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwg
VmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGFkZGl0
aW9uYWxEYXRhLCB1aW50OF90IHRhZ0xlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGF1dG8gYWxnb3JpdGhtID0gYWVzQWxnb3JpdGhtRm9yS2V5U2l6ZShrZXkuc2l6ZSgpICog
OCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsKKyAgICBn
Y3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5kbGUsICphbGdvcml0aG0s
IEdDUllfQ0lQSEVSX01PREVfR0NNLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGVycm9yID0gZ2NyeV9j
aXBoZXJfc2V0a2V5KGhhbmRsZSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGl2KGhhbmRsZSwgaXYuZGF0YSgpLCBpdi5zaXpl
KCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgaWYgKCFhZGRpdGlvbmFsRGF0YS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9hdXRoZW50aWNhdGUoaGFuZGxlLCBhZGRpdGlvbmFs
RGF0YS5kYXRhKCksIGFkZGl0aW9uYWxEYXRhLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAh
PSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KHBsYWluVGV4dC5zaXplKCkpOworCisg
ICAgZ2NyeV9jaXBoZXJfZmluYWwoaGFuZGxlKTsKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2Vu
Y3J5cHQoaGFuZGxlLCBvdXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBwbGFpblRleHQuZGF0
YSgpLCBwbGFpblRleHQuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJP
UikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3Is
IGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0YWcodGFn
TGVuZ3RoKTsKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2dldHRhZyhoYW5kbGUsIHRhZy5kYXRh
KCksIHRhZy5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgb3V0cHV0LmFwcGVuZCh0YWcuZGF0YSgp
LCB0YWdMZW5ndGgpOworICAgIAorICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7CiB9CiAKLXZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8
dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IGdjcnlwdERlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgYWRkaXRpb25hbERhdGEsIHVpbnQ4X3QgdGFnTGVuZ3RoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXV0byBhbGdvcml0aG0gPSBhZXNBbGdvcml0
aG1Gb3JLZXlTaXplKGtleS5zaXplKCkgKiA4KTsKKyAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9j
aXBoZXJfaGRfdD4gaGFuZGxlOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVy
X29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBIRVJfTU9ERV9HQ00sIDApOworICAg
IGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBrZXkuZGF0YSgp
LCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0aXYo
aGFuZGxlLCBpdi5kYXRhKCksIGl2LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWFkZGl0
aW9uYWxEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2F1dGhl
bnRpY2F0ZShoYW5kbGUsIGFkZGl0aW9uYWxEYXRhLmRhdGEoKSwgYWRkaXRpb25hbERhdGEuc2l6
ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJz
b3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICB9CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91
dHB1dChjaXBoZXJUZXh0LnNpemUoKSAtIHRhZ0xlbmd0aCk7CisKKyAgICBnY3J5X2NpcGhlcl9m
aW5hbChoYW5kbGUpOworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChoYW5kbGUsIG91
dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIGNpcGhlclRleHQuZGF0YSgpLCBjaXBoZXJUZXh0
LnNpemUoKSAtIHRhZ0xlbmd0aCk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBn
Y3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdGFnKHRhZ0xl
bmd0aCk7CisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9nZXR0YWcoaGFuZGxlLCB0YWcuZGF0YSgp
LCB0YWdMZW5ndGgpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJz
b3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgc2l6ZV90IG9mZnNldCA9IGNpcGhlclRleHQuc2l6ZSgp
IC0gdGFnTGVuZ3RoOworICAgIGlmIChjb25zdGFudFRpbWVNZW1jbXAodGFnLmRhdGEoKSwgY2lw
aGVyVGV4dC5kYXRhKCkgKyBvZmZzZXQsIHRhZ0xlbmd0aCkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4gV1RGTW92ZShvdXRwdXQpOworfQorCit2b2lkIENyeXB0
b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigp
OworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxh
aW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVz
R2NtUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3du
Y2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0
ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwg
V1RGTW92ZShwbGFpblRleHQpLCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCks
IGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZhbHVlX29yKDApIC8gOCk7CisgICAgICAgICAgICBp
ZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAg
ICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhP
cGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAg
ICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KV0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
ZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ3J5
cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5
LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNr
LCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJl
ZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3Zl
KGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0
aG1BZXNHY21QYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9
IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBv
dXRwdXQgPSBnY3J5cHREZWNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3Rv
cigpLCBXVEZNb3ZlKGNpcGhlclRleHQpLCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVj
dG9yKCksIGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZhbHVlX29yKDApIC8gOCk7CisgICAgICAg
ICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisg
ICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRl
cmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAg
ICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KV0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcAppbmRleCA5YTU4YjY0
Y2E5ZC4uOGE5MzUxZDE1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAKQEAgLTI4LDE5ICsy
OCw5NCBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9L
ZXlBRVMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9HQ3J5cHRVdGlsaXRpZXMuaD4K
KyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KFJlZjxD
cnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRp
b25DYWxsYmFjayYmKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5
cHRXcmFwKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGRhdGEpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9IGFl
c0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgpOworICAgIGlmICghYWxnb3JpdGht
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2Ny
eV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0FFU1dS
QVAsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxl
LCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJy
b3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBvdXRw
dXQoZGF0YS5zaXplKCkgKyA4KTsKKworICAgIGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7Cisg
ICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9lbmNyeXB0KGhhbmRsZSwgb3V0cHV0LmRhdGEoKSwgb3V0
cHV0LnNpemUoKSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAl
cy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJv
cikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBX
VEZNb3ZlKG91dHB1dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9y
bVVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2Fs
bGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gZ2NyeXB0VW53cmFwKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBh
dXRvIGFsZ29yaXRobSA9IGFlc0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgpOwor
ICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
UEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2NyeV9l
cnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBHQ1JZ
X0NJUEhFUl9NT0RFX0FFU1dSQVAsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgZXJyb3IgPSBnY3J5X2Np
cGhlcl9zZXRrZXkoaGFuZGxlLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9y
ICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJv
cihlcnJvcikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZl
Y3Rvcjx1aW50OF90PiBvdXRwdXQoZGF0YS5zaXplKCkgLSA4KTsKKworICAgIGdjcnlfY2lwaGVy
X2ZpbmFsKGhhbmRsZSk7CisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KGhhbmRsZSwg
b3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
KyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwg
Z2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IH0KKworICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1
aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxi
YWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCit7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8
Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0V3JhcChh
ZXNLZXkua2V5KCksIGRhdGEpOworICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNhbGxiYWNrKCpvdXRwdXQpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxh
dGZvcm1VbndyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0
aW9uQ2FsbGJhY2spCit7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVT
PihrZXkuZ2V0KCkpOworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0VW53cmFwKGFlc0tleS5rZXko
KSwgZGF0YSk7CisgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
T3BlcmF0aW9uRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2so
Km91dHB1dCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6
cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJhdGlv
bkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtRUNESEdDcnlwdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUVDREhHQ3J5cHQu
Y3BwCmluZGV4IGFmZTZhMTI0ZWFhLi40MzgyMDU4ZTEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1FQ0RIR0NyeXB0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUVDREhHQ3J5cHQuY3Bw
CkBAIC0yOCwxMyArMjgsODggQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlFQy5oIgorI2luY2x1
ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRo
bUVDREg6OnBsYXRmb3JtRGVyaXZlQml0cyhSZWY8Q3J5cHRvS2V5PiYmLCBSZWY8Q3J5cHRvS2V5
PiYmLCBzaXplX3QsIENhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVl
dWUmKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZXJpdmUo
Z2NyeV9zZXhwX3QgYmFzZVNleHAsIGdjcnlfc2V4cF90IHB1YmxpY1NleHApCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBkYXRh
U2V4cDsKKyAgICB7CisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IGRT
ZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKGJhc2VTZXhwLCAiZCIsIDApKTsKKyAgICAgICAgaWYg
KCFkU2V4cCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgc2l6
ZV90IGRhdGFMZW5ndGggPSAwOworICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gZ2NyeV9zZXhw
X250aF9kYXRhKGRTZXhwLCAxLCAmZGF0YUxlbmd0aCk7CisgICAgICAgIGlmICghZGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgZ2NyeV9zZXhwX2J1aWxk
KCZkYXRhU2V4cCwgbnVsbHB0ciwgIihkYXRhKGZsYWdzIHJhdykodmFsdWUgJWIpKSIsIGRhdGFM
ZW5ndGgsIGRhdGEpOworICAgICAgICBpZiAoIWRhdGFTZXhwKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4
cF90PiBjaXBoZXJTZXhwOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfcGtfZW5jcnlw
dCgmY2lwaGVyU2V4cCwgZGF0YVNleHAsIHB1YmxpY1NleHApOworICAgIGlmIChlcnJvciAhPSBH
UEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVz
LyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9y
KSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IG91dHB1dDsKKyAgICB7CisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9z
ZXhwX3Q+IHNTZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKGNpcGhlclNleHAsICJzIiwgMCkpOwor
ICAgICAgICBpZiAoIXNTZXhwKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHNNUEkoZ2NyeV9zZXhwX250
aF9tcGkoc1NleHAsIDEsIEdDUllNUElfRk1UX1VTRykpOworICAgICAgICBpZiAoIXNNUEkpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIFBBTDo6R0NyeXB0OjpI
YW5kbGU8Z2NyeV9tcGlfcG9pbnRfdD4gcG9pbnQoZ2NyeV9tcGlfcG9pbnRfbmV3KDApKTsKKyAg
ICAgICAgaWYgKCFwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICAgICAgZXJyb3IgPSBnY3J5X21waV9lY19kZWNvZGVfcG9pbnQocG9pbnQsIHNNUEksIG51bGxw
dHIpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5
X21waV90PiB4TVBJKGdjcnlfbXBpX25ldygwKSk7CisgICAgICAgIGlmICgheE1QSSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgZ2NyeV9tcGlfcG9pbnRfc25h
dGNoX2dldCh4TVBJLCBudWxscHRyLCBudWxscHRyLCBwb2ludC5yZWxlYXNlKCkpOworCisgICAg
ICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmlu
dChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCB4TVBJKTsKKyAgICAg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgICAgIG91dHB1dC5yZXNpemUoZGF0YUxlbmd0aCk7CisgICAgICAg
IGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBvdXRwdXQuZGF0YSgpLCBv
dXRwdXQuc2l6ZSgpLCBudWxscHRyLCB4TVBJKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92
ZShvdXRwdXQpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OnBsYXRmb3JtRGVyaXZl
Qml0cyhSZWY8Q3J5cHRvS2V5PiYmIGJhc2VLZXksIFJlZjxDcnlwdG9LZXk+JiYgcHVibGljS2V5
LCBzaXplX3QgbGVuZ3RoLCBDYWxsYmFjayYmIGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigp
OworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW2Jhc2VLZXkgPSBXVEZNb3ZlKGJh
c2VLZXkpLCBwdWJsaWNLZXkgPSBXVEZNb3ZlKHB1YmxpY0tleSksIGxlbmd0aCwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBh
dXRvJiBlY0Jhc2VLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlFQz4oYmFzZUtleS5nZXQoKSk7Cisg
ICAgICAgICAgICBhdXRvJiBlY1B1YmxpY0tleSA9IGRvd25jYXN0PENyeXB0b0tleUVDPihwdWJs
aWNLZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlcml2ZShl
Y0Jhc2VLZXkucGxhdGZvcm1LZXkoKSwgZWNQdWJsaWNLZXkucGxhdGZvcm1LZXkoKSk7CisgICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZN
b3ZlKG91dHB1dCksIGxlbmd0aCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3BwCmluZGV4IGIzY2Yx
NzNiN2UyLi4wMDUzZGFjZjVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUEJLREYyR0NyeXB0LmNwcApAQCAtMjgsMTMg
KzI4LDcxIEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUGJrZGYyUGFyYW1zLmgiCisj
aW5jbHVkZSAiQ3J5cHRvS2V5UmF3LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxnY3J5cHQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobVBCS0RGMjo6cGxhdGZv
cm1EZXJpdmVCaXRzKHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
LCBSZWY8Q3J5cHRvS2V5PiYmLCBzaXplX3QsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNh
bGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZXJpdmUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXlEYXRhLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNhbHREYXRhLCBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyLCBzaXplX3QgaXRlcmF0aW9ucywgc2l6
ZV90IGxlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGludCBoYXNoQWxnb3Jp
dGhtOworICAgIHN3aXRjaCAoaGFzaElkZW50aWZpZXIpIHsKKyAgICBjYXNlIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlNIQV8xOgorICAgICAgICBoYXNoQWxnb3JpdGhtID0gR0NSWV9NRF9T
SEExOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlNIQV8yMjQ6CisgICAgICAgIGhhc2hBbGdvcml0aG0gPSBHQ1JZX01EX1NIQTIyNDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjU2Ogor
ICAgICAgICBoYXNoQWxnb3JpdGhtID0gR0NSWV9NRF9TSEEyNTY7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDoKKyAgICAgICAgaGFz
aEFsZ29yaXRobSA9IEdDUllfTURfU0hBMzg0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTI6CisgICAgICAgIGhhc2hBbGdvcml0aG0g
PSBHQ1JZX01EX1NIQTUxMjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0
KGxlbmd0aCAvIDgpOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfa2RmX2Rlcml2ZShr
ZXlEYXRhLmRhdGEoKSwga2V5RGF0YS5zaXplKCksIEdDUllfS0RGX1BCS0RGMiwgaGFzaEFsZ29y
aXRobSwgc2FsdERhdGEuZGF0YSgpLCBzYWx0RGF0YS5zaXplKCksIGl0ZXJhdGlvbnMsIHJlc3Vs
dC5zaXplKCksIHJlc3VsdC5kYXRhKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJv
ciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1QQktERjI6OnBsYXRmb3JtRGVyaXZlQml0cyhz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBS
ZWY8Q3J5cHRvS2V5PiYmIGtleSwgc2l6ZV90IGxlbmd0aCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxs
YmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4
dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0g
V1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBsZW5ndGgsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgcGJr
ZGYyUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcz4oKnBh
cmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgcmF3S2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5
UmF3PihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlcml2
ZShyYXdLZXkua2V5KCksIHBia2RmMlBhcmFtZXRlcnMuc2FsdFZlY3RvcigpLCBwYmtkZjJQYXJh
bWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBwYmtkZjJQYXJhbWV0ZXJzLml0ZXJhdGlvbnMsIGxlbmd0
aCk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5wb3N0VGFz
aygKKyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjayhvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R0NyeXB0LmNw
cAppbmRleCBkYmQ5Y2RiZDQxZi4uODBjMWRkNWUwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNUdDcnlwdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FF
U19QS0NTMV92MV81R0NyeXB0LmNwcApAQCAtMzEsMTcgKzMxLDE0MyBAQAogI2luY2x1ZGUgIkNy
eXB0b0tleVJTQS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6cGxhdGZvcm1F
bmNyeXB0KFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFj
ayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1
ZXVlJikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlw
dChnY3J5X3NleHBfdCBrZXlTZXhwLCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90
PiBkYXRhU2V4cDsKKyAgICB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIoZGF0YShmbGFncyBwa2NzMSkodmFsdWUgIyIpOwor
ICAgICAgICBmb3IgKGF1dG8mIGJ5dGUgOiBwbGFpblRleHQpCisgICAgICAgICAgICBhcHBlbmRC
eXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IykpIik7CisKKyAgICAgICAgU3RyaW5nIHNFeHByZXNzaW9uID0gYnVpbGRlci50b1N0cmluZygp
OworICAgICAgICBDU3RyaW5nIHNFeHByZXNzaW9uQ1N0cmluZyA9IHNFeHByZXNzaW9uLnV0Zjgo
KTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhwX25ldygmZGF0YVNleHAs
IHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHByZXNzaW9uQ1N0cmluZy5sZW5ndGgoKSwg
MSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291
cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8
Z2NyeV9zZXhwX3Q+IGNpcGhlclNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9w
a19lbmNyeXB0KCZjaXBoZXJTZXhwLCBkYXRhU2V4cCwga2V5U2V4cCk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAl
ZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3Io
ZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBQQUw6
OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBhU2V4cChnY3J5X3NleHBfZmluZF90b2tlbihj
aXBoZXJTZXhwLCAiYSIsIDApKTsKKyAgICBpZiAoIWFTZXhwKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBhTVBJKGdj
cnlfc2V4cF9udGhfbXBpKGFTZXhwLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpKTsKKyAgICBzaXplX3Qg
ZGF0YUxlbmd0aCA9IDA7CisgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9V
U0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBhTVBJKTsKKworICAgIFZlY3Rvcjx1aW50OF90
PiBvdXRwdXQoZGF0YUxlbmd0aCk7CisgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJ
X0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIG51bGxwdHIsIGFNUEkpOwor
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2Ny
eV9zdHJlcnJvcihlcnJvcikpOworCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKIH0KIAot
dm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjpwbGF0Zm9ybURlY3J5cHQoUmVm
PENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGdjcnlfc2V4
cF90IGtleVNleHAsIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBlbmNWYWxT
ZXhwOworICAgIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIihlbmMtdmFsKGZsYWdzIHBrY3MxKShyc2EoYSAjIik7CisgICAg
ICAgIGZvciAoYXV0byYgYnl0ZSA6IGNpcGhlclRleHQpCisgICAgICAgICAgICBhcHBlbmRCeXRl
QXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykp
KSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBzRXhwcmVzc2lvbi51dGY4KCk7
CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXcoJmVuY1ZhbFNleHAs
IHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHByZXNzaW9uQ1N0cmluZy5sZW5ndGgoKSwg
MSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291
cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8
Z2NyeV9zZXhwX3Q+IHBsYWluU2V4cDsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3Br
X2RlY3J5cHQoJnBsYWluU2V4cCwgZW5jVmFsU2V4cCwga2V5U2V4cCk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAl
ZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3Io
ZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBQQUw6
OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiB2YWx1ZVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9r
ZW4ocGxhaW5TZXhwLCAidmFsdWUiLCAwKSk7CisgICAgaWYgKCF2YWx1ZVNleHApCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBp
X3Q+IHZhbHVlTVBJKGdjcnlfc2V4cF9udGhfbXBpKHZhbHVlU2V4cCwgMSwgR0NSWU1QSV9GTVRf
VVNHKSk7CisgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgIGVycm9yID0gZ2NyeV9tcGlf
cHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgdmFsdWVNUEkp
OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChkYXRhTGVuZ3RoKTsKKyAgICBlcnJvciA9
IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNp
emUoKSwgbnVsbHB0ciwgdmFsdWVNUEkpOworCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsK
K30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjpwbGF0Zm9ybUVuY3J5
cHQoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVj
dG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxs
YmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVl
dWUpCit7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAg
ICAgIFtrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBh
dXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSU0E+KGtleS5nZXQoKSk7CisKKyAgICAg
ICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChyc2FLZXkucGxhdGZvcm1LZXkoKSwg
V1RGTW92ZShwbGFpblRleHQpKTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCBvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRw
dXQpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NT
MV92MV81OjpwbGF0Zm9ybURlY3J5cHQoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50
OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNh
bGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29y
a1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBba2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0
ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlS
U0E+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlw
dChyc2FLZXkucGxhdGZvcm1LZXkoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSk7CisgICAgICAgICAg
ICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAg
ICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25D
YWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVm
KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAg
ICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KV0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRW5j
cnlwdChjb25zdCBDcnlwdG9LZXlSU0EmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVj
dG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81R0NyeXB0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BL
Q1MxX3YxXzVHQ3J5cHQuY3BwCmluZGV4IDNjNTM1YWM1ZDI1Li4xMDM3MDNmOWE5OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNUdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUdDcnlwdC5jcHAKQEAgLTMzLDE3ICszMywy
MjUgQEAKICNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KKyNpbmNs
dWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnBsYXRmb3Jt
U2lnbihSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2sm
JiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1
ZSYpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtPiBo
YXNoQ3J5cHRvRGlnZXN0QWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRp
ZmllcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN3aXRjaCAoaWRlbnRpZmllcikg
eworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6CisgICAgICAgIHJl
dHVybiBQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMTsKKyAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yMjQ6CisgICAgICAgIHJldHVybiBQQUw6OkNyeXB0
b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjI0OworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6U0hBXzI1NjoKKyAgICAgICAgcmV0dXJuIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdv
cml0aG06OlNIQV8yNTY7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
Mzg0OgorICAgICAgICByZXR1cm4gUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzM4
NDsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTI6CisgICAgICAg
IHJldHVybiBQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfNTEyOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQogfQogCi12b2lkIENyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVZlcmlmeShSZWY8Q3J5cHRvS2V5
PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEJvb2xDYWxsYmFjayYm
LCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVl
JikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGNvbnN0IGNoYXIqPiBoYXNoQWxnb3JpdGhtTmFtZShD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBzd2l0Y2ggKGlkZW50aWZpZXIpIHsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OlNIQV8xOgorICAgICAgICByZXR1cm4gInNoYTEiOworICAgIGNhc2UgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDoKKyAgICAgICAgcmV0dXJuICJzaGEyMjQi
OworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjoKKyAgICAgICAg
cmV0dXJuICJzaGEyNTYiOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hB
XzM4NDoKKyAgICAgICAgcmV0dXJuICJzaGEzODQiOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6U0hBXzUxMjoKKyAgICAgICAgcmV0dXJuICJzaGE1MTIiOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfQorCitzdGF0aWMgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdFNpZ24oZ2NyeV9zZXhwX3Qga2V5U2V4
cCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGhhc2hBbGdvcml0aG1JZGVudGlmaWVyKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhSGFz
aDsKKyAgICB7CisgICAgICAgIGF1dG8gZGlnZXN0QWxnb3JpdGhtID0gaGFzaENyeXB0b0RpZ2Vz
dEFsZ29yaXRobShoYXNoQWxnb3JpdGhtSWRlbnRpZmllcik7CisgICAgICAgIGlmICghZGlnZXN0
QWxnb3JpdGhtKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBh
dXRvIGRpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoKmRpZ2VzdEFsZ29yaXRobSk7
CisgICAgICAgIGlmICghZGlnZXN0KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgICAgICBkaWdlc3QtPmFkZEJ5dGVzKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Cisg
ICAgICAgIGRhdGFIYXNoID0gZGlnZXN0LT5jb21wdXRlSGFzaCgpOworICAgIH0KKworICAgIFBB
TDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IGRhdGFTZXhwOworICAgIHsKKyAgICAgICAg
YXV0byBzaGFBbGdvcml0aG0gPSBoYXNoQWxnb3JpdGhtTmFtZShoYXNoQWxnb3JpdGhtSWRlbnRp
Zmllcik7CisgICAgICAgIGlmICghc2hhQWxnb3JpdGhtKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGRhdGEoZmxhZ3MgcGtjczEpKGhhc2ggIik7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCpzaGFBbGdvcml0aG0pOworICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiAjIik7CisgICAgICAgIGZvciAoYXV0byBieXRlIDogZGF0YUhhc2gpCisgICAgICAg
ICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiIykpIik7CisKKyAgICAgICAgU3RyaW5nIHNFeHByZXNzaW9uID0gYnVpbGRl
ci50b1N0cmluZygpOworICAgICAgICBDU3RyaW5nIHNFeHByZXNzaW9uQ1N0cmluZyA9IHNFeHBy
ZXNzaW9uLnV0ZjgoKTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhwX25l
dygmZGF0YVNleHAsIHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHByZXNzaW9uQ1N0cmlu
Zy5sZW5ndGgoKSwgMSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3Is
IGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBBTDo6R0Ny
eXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHNpZ25hdHVyZVNleHA7CisgICAgZ2NyeV9lcnJvcl90
IGVycm9yID0gZ2NyeV9wa19zaWduKCZzaWduYXR1cmVTZXhwLCBkYXRhU2V4cCwga2V5U2V4cCk7
CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciks
IGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBzU2V4cChnY3J5X3Nl
eHBfZmluZF90b2tlbihzaWduYXR1cmVTZXhwLCAicyIsIDApKTsKKyAgICBpZiAoIXNTZXhwKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxn
Y3J5X21waV90PiBzTVBJKGdjcnlfc2V4cF9udGhfbXBpKHNTZXhwLCAxLCBHQ1JZTVBJX0ZNVF9V
U0cpKTsKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgZXJyb3IgPSBnY3J5X21waV9w
cmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBzTVBJKTsKKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBvdXRwdXQoZGF0YUxlbmd0aCk7CisgICAgZXJyb3IgPSBnY3J5
X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCks
IG51bGxwdHIsIHNNUEkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ry
c291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworCisgICAgcmV0dXJuIFdURk1v
dmUob3V0cHV0KTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gZ2NyeXB0VmVyaWZ5
KGdjcnlfc2V4cF90IGtleVNleHAsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFz
aEFsZ29yaXRobUlkZW50aWZpZXIpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGFIYXNoOwor
ICAgIHsKKyAgICAgICAgYXV0byBkaWdlc3RBbGdvcml0aG0gPSBoYXNoQ3J5cHRvRGlnZXN0QWxn
b3JpdGhtKGhhc2hBbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFkaWdlc3RBbGdv
cml0aG0pCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGF1dG8g
ZGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZSgqZGlnZXN0QWxnb3JpdGhtKTsKKyAg
ICAgICAgaWYgKCFkaWdlc3QpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgICAgIGRpZ2VzdC0+YWRkQnl0ZXMoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAg
ICAgZGF0YUhhc2ggPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7CisgICAgfQorCisgICAgUEFMOjpH
Q3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4gc2lnbmF0dXJlU2V4cDsKKyAgICB7CisgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIo
c2lnLXZhbChyc2EocyAjIik7CisgICAgICAgIGZvciAoYXV0byBieXRlIDogc2lnbmF0dXJlKQor
ICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiMpKSkiKTsKKworICAgICAgICBTdHJpbmcgc0V4cHJlc3Npb24g
PSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3RyaW5n
ID0gc0V4cHJlc3Npb24udXRmOCgpOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5
X3NleHBfbmV3KCZzaWduYXR1cmVTZXhwLCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhw
cmVzc2lvbkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMv
JXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3Ip
KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBkYXRhU2V4cDsKKyAgICB7Cisg
ICAgICAgIGF1dG8gc2hhQWxnb3JpdGhtID0gaGFzaEFsZ29yaXRobU5hbWUoaGFzaEFsZ29yaXRo
bUlkZW50aWZpZXIpOworICAgICAgICBpZiAoIXNoYUFsZ29yaXRobSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihkYXRhKGZsYWdzIHBrY3MxKShoYXNoICIpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZCgqc2hhQWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgIyIpOworICAgICAgICBmb3IgKGF1dG8gYnl0ZSA6IGRhdGFIYXNoKQor
ICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiMpKSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9
IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcg
PSBzRXhwcmVzc2lvbi51dGY4KCk7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlf
c2V4cF9uZXcoJmRhdGFTZXhwLCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lv
bkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIs
IGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBn
Y3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3BrX3ZlcmlmeShzaWduYXR1cmVTZXhwLCBkYXRhU2V4
cCwga2V5U2V4cCk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IgJiYgZ2NyeV9l
cnJfY29kZShlcnJvcikgIT0gR1BHX0VSUl9CQURfU0lHTkFUVVJFKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJy
b3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgfQorCisgICAgcmV0dXJuIHsgZXJyb3IgPT0gR1BHX0VSUl9OT19FUlJPUiB9OworfQor
Cit2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVNpZ24oUmVm
PENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNr
JiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQoreworICAg
IGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBba2V5ID0g
V1RGTW92ZShrZXkpLCBkYXRhID0gV1RGTW92ZShkYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwg
JmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2Fz
dDxDcnlwdG9LZXlSU0E+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0g
Z2NyeXB0U2lnbihyc2FLZXkucGxhdGZvcm1LZXkoKSwgZGF0YSwgcnNhS2V5Lmhhc2hBbGdvcml0
aG1JZGVudGlmaWVyKCkpOworICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIG91
dHB1dCA9IFdURk1vdmUoKm91dHB1dCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sob3V0cHV0KTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
K30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1WZXJp
ZnkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHNpZ25hdHVyZSwgVmVj
dG9yPHVpbnQ4X3Q+JiYgZGF0YSwgQm9vbENhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNh
bGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29y
a1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBba2V5ID0gV1RGTW92ZShrZXkpLCBzaWduYXR1cmUg
PSBXVEZNb3ZlKHNpZ25hdHVyZSksIGRhdGEgPSBXVEZNb3ZlKGRhdGEpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIHJzYUtleSA9
IGRvd25jYXN0PENyeXB0b0tleVJTQT4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBv
dXRwdXQgPSBnY3J5cHRWZXJpZnkocnNhS2V5LnBsYXRmb3JtS2V5KCksIHNpZ25hdHVyZSwgZGF0
YSwgcnNhS2V5Lmhhc2hBbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgICAgICAgICAgaWYgKCFv
dXRwdXQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAg
ICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0
aW9uRXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayksIG91dHB1dCA9ICpvdXRwdXRdKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sob3V0cHV0KTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtUlNBU1NB
X1BLQ1MxX3YxXzU6OnBsYXRmb3JtU2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJh
bXNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5UlNBJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9u
RGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUEdDcnlwdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQ
R0NyeXB0LmNwcAppbmRleCBiZTRiZTNiZDg1YS4uMWE4ZWM2OGU0NDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBHQ3J5cHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNB
X09BRVBHQ3J5cHQuY3BwCkBAIC0yOCwxOSArMjgsMTkwIEBACiAKICNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKIAorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXMuaCIKKyNp
bmNsdWRlICJDcnlwdG9LZXlSU0EuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CisjaW5jbHVkZSA8d3Rm
L0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpwbGF0Zm9y
bUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJl
ZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNl
cHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK3N0
YXRpYyBzdGQ6Om9wdGlvbmFsPGNvbnN0IGNoYXIqPiBoYXNoQWxnb3JpdGhtTmFtZShDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBzd2l0Y2ggKGlkZW50aWZpZXIpIHsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlNIQV8xOgorICAgICAgICByZXR1cm4gInNoYTEiOworICAgIGNhc2UgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDoKKyAgICAgICAgcmV0dXJuICJzaGEyMjQiOworICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjoKKyAgICAgICAgcmV0dXJu
ICJzaGEyNTYiOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDoK
KyAgICAgICAgcmV0dXJuICJzaGEzODQiOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6U0hBXzUxMjoKKyAgICAgICAgcmV0dXJuICJzaGE1MTIiOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQogfQogCi12b2lkIENyeXB0b0FsZ29y
aXRobVJTQV9PQUVQOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBW
ZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgV29ya1F1ZXVlJikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
Z2NyeXB0RW5jcnlwdChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hBbGdvcml0aG1JZGVu
dGlmaWVyLCBnY3J5X3NleHBfdCBrZXlTZXhwLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGxhYmVs
VmVjdG9yLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBsYWluVGV4dCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IGRhdGFTZXhw
OworICAgIHsKKyAgICAgICAgYXV0byBzaGFBbGdvcml0aG0gPSBoYXNoQWxnb3JpdGhtTmFtZSho
YXNoQWxnb3JpdGhtSWRlbnRpZmllcik7CisgICAgICAgIGlmICghc2hhQWxnb3JpdGhtKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGRhdGEoZmxhZ3Mgb2FlcCko
aGFzaC1hbGdvICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgqc2hhQWxnb3JpdGhtKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIpIik7CisgICAgICAgIGlmICghbGFiZWxWZWN0
b3IuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihsYWJl
bCBcIiIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobGFiZWxWZWN0b3IuZGF0YSgpLCBs
YWJlbFZlY3Rvci5zaXplKCkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJc
IikiKTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiKHZhbHVlICMiKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBieXRlIDogcGxhaW5UZXh0KQorICAgICAgICAgICAgYXBwZW5kQnl0
ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMp
KSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBzRXhwcmVzc2lvbi51dGY4KCk7
CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXcoJmRhdGFTZXhwLCBz
RXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcubGVuZ3RoKCksIDEp
OworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJj
ZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdj
cnlfc2V4cF90PiBjaXBoZXJTZXhwOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfcGtf
ZW5jcnlwdCgmY2lwaGVyU2V4cCwgZGF0YVNleHAsIGtleVNleHApOworICAgIGlmIChlcnJvciAh
PSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQs
ICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVy
cm9yKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgUEFMOjpH
Q3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4gYVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9rZW4oY2lw
aGVyU2V4cCwgImEiLCAwKSk7CisgICAgaWYgKCFhU2V4cCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gYU1QSShnY3J5
X3NleHBfbnRoX21waShhU2V4cCwgMSwgR0NSWU1QSV9GTVRfVVNHKSk7CisgICAgc2l6ZV90IGRh
dGFMZW5ndGggPSAwOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNH
LCBudWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgYU1QSSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4g
b3V0cHV0KGRhdGFMZW5ndGgpOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9G
TVRfVVNHLCBvdXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBudWxscHRyLCBhTVBJKTsKKyAg
ICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvciBvbiBjaXBoZXIsICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVy
cm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0
KTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNy
eXB0KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaEFsZ29yaXRobUlkZW50aWZpZXIsIGdj
cnlfc2V4cF90IGtleVNleHAsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbGFiZWxWZWN0b3IsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY2lwaGVyVGV4dCkKK3sKKyAgICBQQUw6OkdDcnlwdDo6SGFu
ZGxlPGdjcnlfc2V4cF90PiBlbmNWYWxTZXhwOworICAgIHsKKyAgICAgICAgYXV0byBzaGFBbGdv
cml0aG0gPSBoYXNoQWxnb3JpdGhtTmFtZShoYXNoQWxnb3JpdGhtSWRlbnRpZmllcik7CisgICAg
ICAgIGlmICghc2hhQWxnb3JpdGhtKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiKGVuYy12YWwoZmxhZ3Mgb2FlcCkoaGFzaC1hbGdvICIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZCgqc2hhQWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIpIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGxhYmVsIFwiIik7CisgICAg
ICAgIGlmICghbGFiZWxWZWN0b3IuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQobGFiZWxWZWN0b3IuZGF0YSgpLCBsYWJlbFZlY3Rvci5zaXplKCkpOworICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIlwiKSIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
Iihyc2EoYSAjIik7CisgICAgICAgIGZvciAoYXV0byYgYnl0ZSA6IGNpcGhlclRleHQpCisgICAg
ICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIykpKSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBz
RXhwcmVzc2lvbi51dGY4KCk7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4
cF9uZXcoJmVuY1ZhbFNleHAsIHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHByZXNzaW9u
Q1N0cmluZy5sZW5ndGgoKSwgMSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwg
ZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBB
TDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYWluU2V4cDsKKyAgICBnY3J5X2Vycm9y
X3QgZXJyb3IgPSBnY3J5X3BrX2RlY3J5cHQoJnBsYWluU2V4cCwgZW5jVmFsU2V4cCwga2V5U2V4
cCk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJv
ciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiB2YWx1ZVNleHAo
Z2NyeV9zZXhwX2ZpbmRfdG9rZW4ocGxhaW5TZXhwLCAidmFsdWUiLCAwKSk7CisgICAgaWYgKCF2
YWx1ZVNleHApCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBQQUw6OkdDcnlw
dDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHZhbHVlTVBJKGdjcnlfc2V4cF9udGhfbXBpKHZhbHVlU2V4
cCwgMSwgR0NSWU1QSV9GTVRfVVNHKSk7CisgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAg
IGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRyLCAwLCAmZGF0
YUxlbmd0aCwgdmFsdWVNUEkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChkYXRhTGVu
Z3RoKTsKKyAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgb3V0cHV0
LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgbnVsbHB0ciwgdmFsdWVNUEkpOworCisgICAgcmV0dXJu
IFdURk1vdmUob3V0cHV0KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6cGxh
dGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
IHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFp
blRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhj
ZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1
ZSYgd29ya1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3Bh
dGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdU
Rk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIHJzYVBhcmFt
ZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFyYW1zPigqcGFyYW1ldGVy
cyk7CisgICAgICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSU0E+KGtl
eS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChyc2FL
ZXkuaGFzaEFsZ29yaXRobUlkZW50aWZpZXIoKSwgcnNhS2V5LnBsYXRmb3JtS2V5KCksIHJzYVBh
cmFtZXRlcnMubGFiZWxWZWN0b3IoKSwgcGxhaW5UZXh0KTsKKyAgICAgICAgICAgIGlmICghb3V0
cHV0KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAg
ICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlv
bkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spLCBvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG91dHB1
dCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OnBs
YXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4m
JiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lw
aGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBl
eGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1
ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlz
cGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0g
V1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiByc2FQ
YXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUnNhT2FlcFBhcmFtcz4oKnBhcmFt
ZXRlcnMpOworICAgICAgICAgICAgYXV0byYgcnNhS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5UlNB
PihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQo
cnNhS2V5Lmhhc2hBbGdvcml0aG1JZGVudGlmaWVyKCksIHJzYUtleS5wbGF0Zm9ybUtleSgpLCBy
c2FQYXJhbWV0ZXJzLmxhYmVsVmVjdG9yKCksIGNpcGhlclRleHQpOworICAgICAgICAgICAgaWYg
KCFvdXRwdXQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAg
ICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3Bl
cmF0aW9uRXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAg
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayksIG91dHB1dCA9IFdURk1vdmUoKm91dHB1dCldKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2so
b3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxn
b3JpdGhtUlNBX09BRVA6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FP
YWVwUGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleVJTQSYsIGNvbnN0IENyeXB0b09w
ZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlH
Q3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeUdDcnlwdC5jcHAKaW5kZXggMzRjYmY5ZDE0Y2QuLjc1NGU5ZGE2OGJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
R0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5R0NyeXB0LmNwcApAQCAtMjksOCArMjksMTIgQEAKICNpZiBFTkFCTEUoU1VC
VExFX0NSWVBUTykKIAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKKyNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
QUVTX0dDTS5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19LVy5oIgorI2luY2x1ZGUg
IkNyeXB0b0FsZ29yaXRobUVDREguaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1ITUFDLmgi
CisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUEJLREYyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJTQVNT
QV9QS0NTMV92MV81LmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVAuaCIKQEAg
LTQ1LDggKzQ5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKCkKIHsKICAgICByZWdpc3RlckFs
Z29yaXRobTxDcnlwdG9BbGdvcml0aG1BRVNfQ0JDPigpOworICAgIHJlZ2lzdGVyQWxnb3JpdGht
PENyeXB0b0FsZ29yaXRobUFFU19DRkI+KCk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRv
QWxnb3JpdGhtQUVTX0dDTT4oKTsKICAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0
aG1BRVNfS1c+KCk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtRUNESD4o
KTsKICAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1ITUFDPigpOworICAgIHJl
Z2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobVBCS0RGMj4oKTsKICAgICByZWdpc3RlckFs
Z29yaXRobTxDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81PigpOwogICAgIHJlZ2lzdGVy
QWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81PigpOwogICAgIHJlZ2lz
dGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobVJTQV9PQUVQPigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcAppbmRleCA1NWQ2ZDE0
MDNhZi4uMjZmZjQ4NzcxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwCkBAIC0yOSw5MSArMjksNzkxIEBACiAjaWYgRU5BQkxF
KFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJDcnlwdG9LZXlQYWlyLmgiCisjaW5jbHVkZSAi
SnNvbldlYktleS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8cGFs
L2NyeXB0by9nY3J5cHQvQVNOMS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RydWN0IF9QbGF0Zm9ybUVDS2V5R251VExTIHsKLX07CitzdGF0aWMgYm9v
bCBkb2VzVW5jb21wcmVzc2VkUG9pbnRNYXRjaE5hbWVkQ3VydmUoQ3J5cHRvS2V5RUM6Ok5hbWVk
Q3VydmUgY3VydmUsIHNpemVfdCBzaXplKQoreworICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICBj
YXNlIENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMjU2OgorICAgICAgICByZXR1cm4gc2l6ZSA9
PSA2NTsKKyAgICBjYXNlIENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMzg0OgorICAgICAgICBy
ZXR1cm4gc2l6ZSA9PSA5NzsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGRvZXNGaWVsZEVsZW1l
bnRNYXRjaE5hbWVkQ3VydmUoQ3J5cHRvS2V5RUM6Ok5hbWVkQ3VydmUgY3VydmUsIHNpemVfdCBz
aXplKQoreworICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICBjYXNlIENyeXB0b0tleUVDOjpOYW1l
ZEN1cnZlOjpQMjU2OgorICAgICAgICByZXR1cm4gc2l6ZSA9PSAzMjsKKyAgICBjYXNlIENyeXB0
b0tleUVDOjpOYW1lZEN1cnZlOjpQMzg0OgorICAgICAgICByZXR1cm4gc2l6ZSA9PSA0ODsKKyAg
ICB9Cit9CisKK3N0YXRpYyBzaXplX3QgZ2V0S2V5U2l6ZUZyb21OYW1lZEN1cnZlKENyeXB0b0tl
eUVDOjpOYW1lZEN1cnZlIGN1cnZlKQoreworICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICBjYXNl
IENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMjU2OgorICAgICAgICByZXR1cm4gMjU2OworICAg
IGNhc2UgQ3J5cHRvS2V5RUM6Ok5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAgIHJldHVybiAzODQ7
CisgICAgfQorfQogCiBDcnlwdG9LZXlFQzo6fkNyeXB0b0tleUVDKCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGlmIChtX3BsYXRmb3JtS2V5KQorICAgICAgICBQQUw6OkdDcnlwdDo6
SGFuZGxlRGVsZXRlcjxnY3J5X3NleHBfdD4oKShtX3BsYXRmb3JtS2V5KTsKIH0KIAogc2l6ZV90
IENyeXB0b0tleUVDOjprZXlTaXplSW5CaXRzKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGdjcnlfcGtfZ2V0X25iaXRzKG1fcGxh
dGZvcm1LZXkpOwogfQogCiBWZWN0b3I8dWludDhfdD4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtRXhw
b3J0UmF3KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFBBTDo6R0NyeXB0
OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHFTZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKG1fcGxhdGZv
cm1LZXksICJxIiwgMCkpOworICAgIGlmICghcVNleHApCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgY29uc3QgY2hhciogZGF0YSA9IGdjcnlf
c2V4cF9udGhfZGF0YShxU2V4cCwgMSwgJmRhdGFMZW5ndGgpOworICAgIGlmICghZGF0YSB8fCBk
YXRhTGVuZ3RoICE9IGtleVNpemVJbkJpdHMoKSAvIDQgKyAxKQorICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgcmV0dXJuIHsgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KGRhdGFMZW5n
dGgpOworICAgIHN0ZDo6bWVtY3B5KHJlc3VsdC5kYXRhKCksIGRhdGEsIGRhdGFMZW5ndGgpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q3J5cHRvS2V5UGFpcj4gQ3J5
cHRvS2V5RUM6OnBsYXRmb3JtR2VuZXJhdGVQYWlyKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIs
IE5hbWVkQ3VydmUsIGJvb2wsIENyeXB0b0tleVVzYWdlQml0bWFwKQorc3RkOjpvcHRpb25hbDxD
cnlwdG9LZXlQYWlyPiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1HZW5lcmF0ZVBhaXIoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBOYW1lZEN1cnZlIGN1cnZlLCBib29sIGV4dHJh
Y3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBjb25zdCBjaGFyKiBjdXJ2ZU5hbWU7CisgICAgc3dpdGNoIChjdXJ2ZSkgewor
ICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDI1NjoKKyAgICAgICAgY3VydmVOYW1lID0gIk5JU1QgUC0y
NTYiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAg
IGN1cnZlTmFtZSA9ICJOSVNUIFAtMzg0IjsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90
PiBnZW5rZXlTZXhwOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9idWlsZCgm
Z2Vua2V5U2V4cCwgbnVsbHB0ciwgIihnZW5rZXkoZWNjKGN1cnZlICVzKSkpIiwgY3VydmVOYW1l
KTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9y
KSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIH0KKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IGtleVBhaXJTZXhw
OworICAgIGVycm9yID0gZ2NyeV9wa19nZW5rZXkoJmtleVBhaXJTZXhwLCBnZW5rZXlTZXhwKTsK
KyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwg
Z2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IH0KKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHB1YmxpY0tleVNleHAo
Z2NyeV9zZXhwX2ZpbmRfdG9rZW4oa2V5UGFpclNleHAsICJwdWJsaWMta2V5IiwgMCkpOworICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHByaXZhdGVLZXlTZXhwKGdjcnlfc2V4
cF9maW5kX3Rva2VuKGtleVBhaXJTZXhwLCAicHJpdmF0ZS1rZXkiLCAwKSk7CisgICAgaWYgKCFw
dWJsaWNLZXlTZXhwIHx8ICFwcml2YXRlS2V5U2V4cCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGF1dG8gcHVibGljS2V5ID0gQ3J5cHRvS2V5RUM6OmNyZWF0ZShpZGVudGlm
aWVyLCBjdXJ2ZSwgQ3J5cHRvS2V5VHlwZTo6UHVibGljLCBwdWJsaWNLZXlTZXhwLnJlbGVhc2Uo
KSwgdHJ1ZSwgdXNhZ2VzKTsKKyAgICBhdXRvIHByaXZhdGVLZXkgPSBDcnlwdG9LZXlFQzo6Y3Jl
YXRlKGlkZW50aWZpZXIsIGN1cnZlLCBDcnlwdG9LZXlUeXBlOjpQcml2YXRlLCBwcml2YXRlS2V5
U2V4cC5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgIHJldHVybiBDcnlwdG9L
ZXlQYWlyeyBXVEZNb3ZlKHB1YmxpY0tleSksIFdURk1vdmUocHJpdmF0ZUtleSkgfTsKK30KKwor
UmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1JbXBvcnRSYXcoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBOYW1lZEN1cnZlIGN1cnZlLCBWZWN0b3I8
dWludDhfdD4mJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1h
cCB1c2FnZXMpCit7CisgICAgaWYgKCFkb2VzVW5jb21wcmVzc2VkUG9pbnRNYXRjaE5hbWVkQ3Vy
dmUoY3VydmUsIGtleURhdGEuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIocHVi
bGljLWtleShlY2MoY3VydmUgIik7CisgICAgc3dpdGNoIChjdXJ2ZSkgeworICAgIGNhc2UgTmFt
ZWRDdXJ2ZTo6UDI1NjoKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIk5JU1QgUC0y
NTZcIiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCJOSVNUIFAtMzg0XCIiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSAocSAjIik7CisgICAgZm9y
IChhdXRvJiBieXRlIDoga2V5RGF0YSkKKyAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1
aWxkZXIpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykpKSIpOworCisgICAgU3RyaW5n
IHNFeHByZXNzaW9uID0gYnVpbGRlci50b1N0cmluZygpOworICAgIENTdHJpbmcgc0V4cHJlc3Np
b25DU3RyaW5nID0gc0V4cHJlc3Npb24udXRmOCgpOworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X3NleHBfdD4gcGxhdGZvcm1LZXk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2Ny
eV9zZXhwX25ldygmcGxhdGZvcm1LZXksIHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHBy
ZXNzaW9uQ1N0cmluZy5sZW5ndGgoKSwgMSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9f
RVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVy
cm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNyZWF0ZShpZGVudGlmaWVy
LCBjdXJ2ZSwgQ3J5cHRvS2V5VHlwZTo6UHVibGljLCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4
dHJhY3RhYmxlLCB1c2FnZXMpOworfQorCitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVD
OjpwbGF0Zm9ybUltcG9ydEpXS1B1YmxpYyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50
aWZpZXIsIE5hbWVkQ3VydmUgY3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIHgsIFZlY3Rvcjx1aW50
OF90PiYmIHksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykK
K3sKKyAgICBpZiAoIWRvZXNGaWVsZEVsZW1lbnRNYXRjaE5hbWVkQ3VydmUoY3VydmUsIHguc2l6
ZSgpKSB8fCAhZG9lc0ZpZWxkRWxlbWVudE1hdGNoTmFtZWRDdXJ2ZShjdXJ2ZSwgeS5zaXplKCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihwdWJsaWMta2V5KGVjYyhjdXJ2ZSAiKTsKKyAg
ICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBOYW1lZEN1cnZlOjpQMjU2OgorICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiTklTVCBQLTI1NlwiKSIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiXCJOSVNUIFAtMzg0XCIpIik7CisgICAgfQorICAgIHsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIocSAjMDQiKTsKKyAgICAgICAgZm9yIChhdXRvIGJ5dGUgOiB4KQorICAgICAg
ICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBmb3IgKGF1dG8g
Ynl0ZSA6IHkpCisgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykiKTsKKyAgICB9CisgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIpKSIpOworCisgICAgU3RyaW5nIHNFeHByZXNzaW9uID0gYnVpbGRlci50
b1N0cmluZygpOworICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3RyaW5nID0gc0V4cHJlc3Npb24u
dXRmOCgpOworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4gcGxhdGZvcm1L
ZXk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhwX25ldygmcGxhdGZvcm1LZXks
IHNFeHByZXNzaW9uQ1N0cmluZy5kYXRhKCksIHNFeHByZXNzaW9uQ1N0cmluZy5sZW5ndGgoKSwg
MSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJv
ciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgcmV0dXJuIGNyZWF0ZShpZGVudGlmaWVyLCBjdXJ2ZSwgQ3J5cHRvS2V5VHlwZTo6
UHVibGljLCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQog
Ci1SZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9ydFJhdyhDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyLCBOYW1lZEN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiwgYm9v
bCwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApCitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVD
OjpwbGF0Zm9ybUltcG9ydEpXS1ByaXZhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBOYW1lZEN1cnZlIGN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiB4LCBWZWN0b3I8dWlu
dDhfdD4mJiB5LCBWZWN0b3I8dWludDhfdD4mJiBkLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9L
ZXlVc2FnZUJpdG1hcCB1c2FnZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAo
IWRvZXNGaWVsZEVsZW1lbnRNYXRjaE5hbWVkQ3VydmUoY3VydmUsIHguc2l6ZSgpKSB8fCAhZG9l
c0ZpZWxkRWxlbWVudE1hdGNoTmFtZWRDdXJ2ZShjdXJ2ZSwgeS5zaXplKCkpIHx8ICFkb2VzRmll
bGRFbGVtZW50TWF0Y2hOYW1lZEN1cnZlKGN1cnZlLCBkLnNpemUoKSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIAorICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIihwcml2YXRlLWtleShlY2MoY3VydmUgIik7CisgICAgc3dpdGNoIChj
dXJ2ZSkgeworICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDI1NjoKKyAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJcIk5JU1QgUC0yNTZcIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
YW1lZEN1cnZlOjpQMzg0OgorICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiTklTVCBQ
LTM4NFwiKSIpOworICAgIH0KKyAgICB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
KHEgIzA0Iik7CisgICAgICAgIGZvciAoYXV0byYgYnl0ZSA6IHgpCisgICAgICAgICAgICBhcHBl
bmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGZvciAoYXV0byYgYnl0ZSA6IHkp
CisgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIyApIik7CisgICAgfQorICAgIHsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIoZCAjIik7CisgICAgICAgIGZvciAoYXV0byYgYnl0ZSA6IGQpCisg
ICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIyApIik7CisgICAgfQorICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKSkiKTsKKworICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICBDU3RyaW5nIHNFeHByZXNzaW9uQ1N0cmluZyA9IHNFeHByZXNzaW9uLnV0ZjgoKTsKKwor
ICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYXRmb3JtS2V5OworICAgIGdj
cnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9uZXcoJnBsYXRmb3JtS2V5LCBzRXhwcmVzc2lv
bkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgIGlm
IChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
RXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0
cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAotICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBjcmVhdGUoaWRlbnRpZmllciwgY3VydmUsIENyeXB0
b0tleVR5cGU6OlByaXZhdGUsIHBsYXRmb3JtS2V5LnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CiB9CiAKLVJlZlB0cjxDcnlwdG9LZXlFQz4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtSW1w
b3J0SldLUHVibGljKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIE5hbWVkQ3VydmUsIFZlY3Rv
cjx1aW50OF90PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VCaXRt
YXApCit2b2lkIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVudHMoSnNvbldlYktl
eSYgandrKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUEFMOjpHQ3J5cHQ6
OkhhbmRsZTxnY3J5X2N0eF90PiBjb250ZXh0OworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdj
cnlfbXBpX2VjX25ldygmY29udGV4dCwgbV9wbGF0Zm9ybUtleSwgbnVsbHB0cik7CisgICAgaWYg
KGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3Ry
ZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBzaXpl
ID0gZ2V0S2V5U2l6ZUZyb21OYW1lZEN1cnZlKG1fY3VydmUpOworCisgICAgUEFMOjpHQ3J5cHQ6
OkhhbmRsZTxnY3J5X21waV90PiBxTVBJKGdjcnlfbXBpX2VjX2dldF9tcGkoInEiLCBjb250ZXh0
LCAwKSk7CisgICAgaWYgKHFNUEkpIHsKKyAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOwor
ICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwg
MCwgJmRhdGFMZW5ndGgsIHFNUEkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBl
cnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisKKyAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHEoZGF0YUxlbmd0aCk7CisgICAgICAgIGVycm9yID0gZ2Ny
eV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBxLmRhdGEoKSwgcS5zaXplKCksIG51bGxwdHIs
IHFNUEkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJz
b3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CiAKLSAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgeworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGE7CisgICAgICAgICAg
ICBhLmFwcGVuZChxLmRhdGEoKSArIDEsIHNpemUgLyA4KTsKKyAgICAgICAgICAgIGp3ay54ID0g
YmFzZTY0VVJMRW5jb2RlKGEpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBiOworICAgICAgICAgICAgYi5hcHBlbmQocS5kYXRhKCkgKyBzaXplIC8g
OCArIDEsIHNpemUgLyA4KTsKKyAgICAgICAgICAgIGp3ay55ID0gYmFzZTY0VVJMRW5jb2RlKGIp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUoKSA9PSBUeXBlOjpQcml2YXRlKSB7
CisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZE1QSShnY3J5X21waV9l
Y19nZXRfbXBpKCJkIiwgY29udGV4dCwgMCkpOworICAgICAgICBpZiAoZE1QSSkgeworCisgICAg
ICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmlu
dChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBkTVBJKTsKKyAgICAg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291cmNlKGVycm9yKSwg
Z2NyeV9zdHJlcnJvcihlcnJvcikpOworCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkKGRhdGFM
ZW5ndGgpOworICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywg
ZC5kYXRhKCksIGQuc2l6ZSgpLCBudWxscHRyLCBkTVBJKTsKKyAgICAgICAgaWYgKGVycm9yID09
IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICBqd2suZCA9IGJhc2U2NFVSTEVuY29kZShk
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwg
JXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJy
b3IpKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAotUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9L
ZXlFQzo6cGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIs
IE5hbWVkQ3VydmUsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9y
PHVpbnQ4X3Q+JiYsIGJvb2wsIENyeXB0b0tleVVzYWdlQml0bWFwKQorZW51bSBjbGFzcyBFQ0Fs
Z29yaXRobSB7CisgICAgUHVibGljS2V5LAorICAgIERILAorfTsKKworc3RhdGljIHN0ZDo6b3B0
aW9uYWw8RUNBbGdvcml0aG0+IGFsZ29yaXRobUZvcklkZW50aWZpZXIoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMg
Y29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA3PiBzX2lkRUNQdWJsaWNLZXl7IHsgMHgyYSwgMHg4
NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSB9IH07CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6YXJyYXk8dWludDhfdCwgNT4gc19pZEVDREh7IHsgMHgyYiwgMHg4MSwgMHgwNCwgMHgwMSwg
MHgwYyB9IH07CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoc2l6ZSA9PSBzX2lkRUNQ
dWJsaWNLZXkuc2l6ZSgpICYmICFzdGQ6Om1lbWNtcChkYXRhLCBzX2lkRUNQdWJsaWNLZXkuZGF0
YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIEVDQWxnb3JpdGhtOjpQdWJsaWNLZXk7CisgICAg
aWYgKHNpemUgPT0gc19pZEVDREguc2l6ZSgpICYmICFzdGQ6Om1lbWNtcChkYXRhLCBzX2lkRUNE
SC5kYXRhKCksIHNpemUpKQorICAgICAgICByZXR1cm4gRUNBbGdvcml0aG06OkRIOworICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRkRmll
bGRFbGVtZW50cyhKc29uV2ViS2V5JikgY29uc3QKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPENyeXB0
b0tleUVDOjpOYW1lZEN1cnZlPiBjdXJ2ZUZvcklkZW50aWZpZXIoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCA4PiBzX3NlY3AyNTZyMXsgeyAweDJhLCAweDg2LCAweDQ4
LCAweGNlLCAweDNkLCAweDAzLCAweDAxLCAweDA3IH0gfTsKKyAgICBzdGF0aWMgY29uc3Qgc3Rk
OjphcnJheTx1aW50OF90LCA1PiBzX3NlY3AzODRyMXsgeyAweDJiLCAweDgxLCAweDA0LCAweDAw
LCAweDIyIH0gfTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA1PiBzX3Nl
Y3A1MjFyMXsgeyAweDJiLCAweDgxLCAweDA0LCAweDAwLCAweDIzIH0gfTsKKworICAgIGlmIChz
aXplID09IHNfc2VjcDI1NnIxLnNpemUoKSAmJiAhc3RkOjptZW1jbXAoZGF0YSwgc19zZWNwMjU2
cjEuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIENyeXB0b0tleUVDOjpOYW1lZEN1cnZl
OjpQMjU2OworICAgIGlmIChzaXplID09IHNfc2VjcDM4NHIxLnNpemUoKSAmJiAhc3RkOjptZW1j
bXAoZGF0YSwgc19zZWNwMzg0cjEuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIENyeXB0
b0tleUVDOjpOYW1lZEN1cnZlOjpQMzg0OworICAgIGlmIChzaXplID09IHNfc2VjcDUyMXIxLnNp
emUoKSAmJiAhc3RkOjptZW1jbXAoZGF0YSwgc19zZWNwNTIxcjEuZGF0YSgpLCBzaXplKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgLy8gTm90IHN1cHBvcnRlZCB5ZXQuCisgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6
cGxhdGZvcm1JbXBvcnRTcGtpKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIE5hbWVkQ3VydmUs
IFZlY3Rvcjx1aW50OF90PiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCkKK1JlZlB0cjxD
cnlwdG9LZXlFQz4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtSW1wb3J0U3BraShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIE5hbWVkQ3VydmUgY3VydmUsIFZlY3Rvcjx1aW50OF90
PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdl
cykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFN1YmplY3RQdWJsaWNLZXlJbmZv
ICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICBhbGdvcml0aG0gICAgICAgICAgICBBbGdvcml0
aG1JZGVudGlmaWVyLAorICAgIC8vICAgc3ViamVjdFB1YmxpY0tleSAgICAgQklUIFNUUklORyAg
fQorICAgIGF1dG8gc3ViamVjdFB1YmxpY0tleUluZm9UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlE
YXRhLCAwKTsKKyAgICBpZiAoIXN1YmplY3RQdWJsaWNLZXlJbmZvVExWLmJ1ZmZlclNpemUgfHwg
IXN1YmplY3RQdWJsaWNLZXlJbmZvVExWLmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHN1YmplY3RQdWJsaWNLZXlJbmZvVExWLmJ1
ZmZlclNpemUgIT0ga2V5RGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgLy8gQWxnb3JpdGhtSWRlbnRpZmllciAgOjo9ICBTRVFVRU5DRSAgeworICAgIC8vICAgIGFs
Z29yaXRobSAgIE9CSkVDVCBJREVOVElGSUVSLAorICAgIC8vICAgIHBhcmFtZXRlcnMgIEFOWSBE
RUZJTkVEIEJZIGFsZ29yaXRobSBPUFRJT05BTAorICAgIC8vIH0KKyAgICBhdXRvIGFsZ29yaXRo
bUlkZW50aWZpZXJUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBzdWJqZWN0UHVibGljS2V5
SW5mb1RMVi52YWx1ZU9mZnNldCgpKTsKKyAgICBpZiAoIWFsZ29yaXRobUlkZW50aWZpZXJUTFYu
YnVmZmVyU2l6ZSB8fCAhYWxnb3JpdGhtSWRlbnRpZmllclRMVi5oYXNUYWcoQVNOMTo6VGFnOjpT
ZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhbGdvcml0aG1U
TFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBhbGdvcml0aG1JZGVudGlmaWVyVExWLnZhbHVl
T2Zmc2V0KCkpOworICAgIGlmICghYWxnb3JpdGhtVExWLmJ1ZmZlclNpemUgfHwgIWFsZ29yaXRo
bVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpPYmplY3RJZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIHN1cHBvcnRlZEFsZ29yaXRobSA9IGFsZ29yaXRobUZvcklk
ZW50aWZpZXIoa2V5RGF0YS5kYXRhKCkgKyBhbGdvcml0aG1UTFYudmFsdWVPZmZzZXQoKSwgYWxn
b3JpdGhtVExWLmxlbmd0aCk7CisgICAgaWYgKCFzdXBwb3J0ZWRBbGdvcml0aG0pCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgLy8gRUNQYXJhbWV0ZXJzIDo6PSBDSE9JQ0UgeworICAg
IC8vICAgbmFtZWRDdXJ2ZSAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIC0tIE1VU1QgYmUgc3Vw
cG9ydGVkLgorICAgIC8vICAgLS0gaW1wbGljaXRDdXJ2ZSAgIE5VTEwgLS0gTVVTVCBOT1QgYmUg
dXNlZC4KKyAgICAvLyAgIC0tIHNwZWNpZmllZEN1cnZlICBTcGVjaWZpZWRFQ0RvbWFpbiAtLSBN
VVNUIE5PVCBiZSB1c2VkLgorICAgIC8vIH0KKyAgICBhdXRvIGVjUGFyYW1ldGVyc1RMViA9IEFT
TjE6OnBhcnNlVExWKGtleURhdGEsCisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJUTFYudmFs
dWVPZmZzZXQoKSArIGFsZ29yaXRobVRMVi5idWZmZXJTaXplKTsKKyAgICBpZiAoIWVjUGFyYW1l
dGVyc1RMVi5idWZmZXJTaXplIHx8ICFlY1BhcmFtZXRlcnNUTFYuaGFzVGFnKEFTTjE6OlRhZzo6
T2JqZWN0SWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBw
YXJhbWV0ZXJDdXJ2ZSA9IGN1cnZlRm9ySWRlbnRpZmllcihrZXlEYXRhLmRhdGEoKSArIGVjUGFy
YW1ldGVyc1RMVi52YWx1ZU9mZnNldCgpLCBlY1BhcmFtZXRlcnNUTFYubGVuZ3RoKTsKKyAgICBp
ZiAoIXBhcmFtZXRlckN1cnZlIHx8ICpwYXJhbWV0ZXJDdXJ2ZSAhPSBjdXJ2ZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoYWxnb3JpdGhtVExWLmJ1ZmZlclNpemUgKyBlY1Bh
cmFtZXRlcnNUTFYuYnVmZmVyU2l6ZSAhPSBhbGdvcml0aG1JZGVudGlmaWVyVExWLmxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRv
IHN1YmplY3RQdWJsaWNLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLAorICAgICAgICBz
dWJqZWN0UHVibGljS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpICsgYWxnb3JpdGhtSWRlbnRpZmll
clRMVi5idWZmZXJTaXplKTsKKyAgICBpZiAoIXN1YmplY3RQdWJsaWNLZXlUTFYuYnVmZmVyU2l6
ZSB8fCAhc3ViamVjdFB1YmxpY0tleVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpCaXRTdHJpbmcpCisg
ICAgICAgIHx8IGtleURhdGFbc3ViamVjdFB1YmxpY0tleVRMVi52YWx1ZU9mZnNldCgpXSAhPSAw
eDAwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChrZXlEYXRhW3N1YmplY3RQ
dWJsaWNLZXlUTFYudmFsdWVPZmZzZXQoKSArIDFdICE9IDB4MDQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHNpemVfdCBwb2ludFNpemUgPSAyICogKGdldEtleVNpemVGcm9tTmFtZWRD
dXJ2ZShjdXJ2ZSkgLyA4KTsKKyAgICBpZiAoc3ViamVjdFB1YmxpY0tleVRMVi5sZW5ndGggLSAy
ICE9IHBvaW50U2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBQQUw6OkdDcnlw
dDo6SGFuZGxlPGdjcnlfc2V4cF90PiBwbGF0Zm9ybUtleTsKKyAgICB7CisgICAgICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIocHVibGlj
LWtleShlY2MoY3VydmUgIik7CisgICAgICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICAgICAgY2Fz
ZSBOYW1lZEN1cnZlOjpQMjU2OgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJc
Ik5JU1QgUC0yNTZcIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5hbWVk
Q3VydmU6OlAzODQ6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiTklTVCBQ
LTM4NFwiKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgeworICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIocSAjMDQiKTsKKyAgICAgICAgICAgIHNp
emVfdCBvZmZzZXQgPSBzdWJqZWN0UHVibGljS2V5VExWLnZhbHVlT2Zmc2V0KCkgKyAyOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludFNpemU7ICsraSkKKyAgICAgICAg
ICAgICAgICBhcHBlbmRCeXRlQXNIZXgoa2V5RGF0YVtvZmZzZXQgKyBpXSwgYnVpbGRlcik7Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMgKSIpOworICAgICAgICB9CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSkiKTsKKworICAgICAgICBTdHJpbmcgc0V4cHJl
c3Npb24gPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIENTdHJpbmcgc0V4cHJlc3Npb25D
U3RyaW5nID0gc0V4cHJlc3Npb24udXRmOCgpOworCisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJv
ciA9IGdjcnlfc2V4cF9uZXcoJnBsYXRmb3JtS2V5LCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgp
LCBzRXhwcmVzc2lvbkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAl
ZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3Io
ZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGNyZWF0ZShpZGVudGlmaWVyLCBjdXJ2ZSwgQ3J5cHRvS2V5VHlwZTo6UHVi
bGljLCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQogCiBW
ZWN0b3I8dWludDhfdD4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtRXhwb3J0U3BraSgpIGNvbnN0CiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBhdXRvIGFwcGVuZExlbmd0aCA9CisgICAgICAg
IFtdKHNpemVfdCBsZW5ndGgsIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSB7CisgICAgICAgICAg
ICBpZiAobGVuZ3RoID4gMTI3KSB7CisgICAgICAgICAgICAgICAgdWludDhfdCBsZW5ndGhCeXRl
cyA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIobGVuZ3RoICsgMSkgLyA4KTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKDB4ODAgfCBsZW5ndGhCeXRlcyk7CisgICAgICAgICAgICAgICAgZm9y
ICh1aW50OF90IGkgPSAwOyBpIDwgbGVuZ3RoQnl0ZXM7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgobGVuZ3RoID4+ICgobGVuZ3RoQnl0ZXMgLSBpIC0gMSkgKiA4KSAm
IDB4ZmYpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQobGVuZ3RoKTsKKyAgICAgICAgfTsKKworICAgIC8vIFN1YmplY3RQdWJsaWNLZXlJbmZvICA6
Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICBhbGdvcml0aG0gICAgICAgICAgICBBbGdvcml0aG1J
ZGVudGlmaWVyLAorICAgIC8vICAgc3ViamVjdFB1YmxpY0tleSAgICAgQklUIFNUUklORyAgfQog
Ci0gICAgcmV0dXJuIHsgfTsKKyAgICAvLyBBbGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVF
TkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgLy8g
ICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8g
fQorICAgIFZlY3Rvcjx1aW50OF90PiBhbGdvcml0aG1JZGVudGlmaWVyRGF0YTsKKyAgICB7Cisg
ICAgICAgIC8vIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDU+IHNfaWRFQ0RIeyB7
IDB4MmIsIDB4ODEsIDB4MDQsIDB4MDEsIDB4MGMgfSB9OworICAgICAgICBzdGF0aWMgY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCA3PiBzX2lkRUNQdWJsaWNLZXl7IHsgMHgyYSwgMHg4NiwgMHg0
OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSB9IH07CisKKyAgICAgICAgLy8gRUNQYXJhbWV0ZXJz
IDo6PSBDSE9JQ0UgeworICAgICAgICAvLyAgIG5hbWVkQ3VydmUgICAgICAgICBPQkpFQ1QgSURF
TlRJRklFUiAtLSBNVVNUIGJlIHN1cHBvcnRlZC4KKyAgICAgICAgLy8gICAtLSBpbXBsaWNpdEN1
cnZlICAgTlVMTCAtLSBNVVNUIE5PVCBiZSB1c2VkLgorICAgICAgICAvLyAgIC0tIHNwZWNpZmll
ZEN1cnZlICBTcGVjaWZpZWRFQ0RvbWFpbiAtLSBNVVNUIE5PVCBiZSB1c2VkLgorICAgICAgICAv
LyB9CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBlY1BhcmFtZXRlcnNEYXRhOworICAgICAgICB7
CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA4PiBzX3NlY3Ay
NTZyMXsgeyAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDAzLCAweDAxLCAweDA3IH0g
fTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDU+IHNfc2Vj
cDM4NHIxeyB7IDB4MmIsIDB4ODEsIDB4MDQsIDB4MDAsIDB4MjIgfSB9OworCisgICAgICAgICAg
ICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZCgweDA2KTsKKworICAgICAgICAgICAgc3dpdGNoICht
X2N1cnZlKSB7CisgICAgICAgICAgICBjYXNlIE5hbWVkQ3VydmU6OlAyNTY6CisgICAgICAgICAg
ICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMjU2cjEuc2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZChzX3NlY3AyNTZyMS5kYXRhKCksIHNf
c2VjcDI1NnIxLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIE5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5h
cHBlbmQoc19zZWNwMzg0cjEuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBlY1BhcmFtZXRlcnNE
YXRhLmFwcGVuZChzX3NlY3AzODRyMS5kYXRhKCksIHNfc2VjcDM4NHIxLnNpemUoKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBh
bGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgzMCk7CisgICAgICAgIGFwcGVuZExlbmd0
aCgyICsgc19pZEVDUHVibGljS2V5LnNpemUoKSArIGVjUGFyYW1ldGVyc0RhdGEuc2l6ZSgpLCBh
bGdvcml0aG1JZGVudGlmaWVyRGF0YSk7CisKKyAgICAgICAgLy8gYWxnb3JpdGhtCisgICAgICAg
IGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVuZCgweDA2KTsKKyAgICAgICAgYWxnb3JpdGht
SWRlbnRpZmllckRhdGEuYXBwZW5kKHNfaWRFQ1B1YmxpY0tleS5zaXplKCkpOworICAgICAgICBh
bGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoc19pZEVDUHVibGljS2V5LmRhdGEoKSwgc19p
ZEVDUHVibGljS2V5LnNpemUoKSk7CisKKyAgICAgICAgLy8gcGFyYW1ldGVycworICAgICAgICBh
bGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmRWZWN0b3IoZWNQYXJhbWV0ZXJzRGF0YSk7Cisg
ICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHN1YmplY3RQdWJsaWNLZXlEYXRhOworICAgIHsK
KyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHE7CisgICAgICAgIHsKKyAgICAgICAgICAgIFBBTDo6
R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHFTZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKG1f
cGxhdGZvcm1LZXksICJxIiwgMCkpOworICAgICAgICAgICAgaWYgKCFxU2V4cCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICBzaXplX3QgcG9pbnRTaXplID0gMiAq
IChnZXRLZXlTaXplRnJvbU5hbWVkQ3VydmUobV9jdXJ2ZSkgLyA4KTsKKyAgICAgICAgICAgIHNp
emVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBnY3J5
X3NleHBfbnRoX2RhdGEocVNleHAsIDEsICZkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICgh
ZGF0YSB8fCBkYXRhTGVuZ3RoICE9IHBvaW50U2l6ZSArIDEgfHwgZGF0YVswXSAhPSAweDA0KQor
ICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgIHEuYXBwZW5kKGRhdGEs
IGRhdGFMZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgc3ViamVjdFB1YmxpY0tleURhdGEu
YXBwZW5kKDB4MDMpOworICAgICAgICBhcHBlbmRMZW5ndGgoMSArIHEuc2l6ZSgpLCBzdWJqZWN0
UHVibGljS2V5RGF0YSk7CisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlEYXRhLmFwcGVuZCgweDAw
KTsKKyAgICAgICAgc3ViamVjdFB1YmxpY0tleURhdGEuYXBwZW5kVmVjdG9yKHEpOworICAgIH0K
KworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgweDMwKTsK
KyAgICBhcHBlbmRMZW5ndGgoYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuc2l6ZSgpICsgc3ViamVj
dFB1YmxpY0tleURhdGEuc2l6ZSgpLCByZXN1bHQpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3Io
YWxnb3JpdGhtSWRlbnRpZmllckRhdGEpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3Ioc3ViamVj
dFB1YmxpY0tleURhdGEpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPENyeXB0
b0tleUVDPiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1JbXBvcnRQa2NzOChDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyLCBOYW1lZEN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXApCitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUlt
cG9ydFBrY3M4KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgTmFtZWRDdXJ2
ZSBjdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5
cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
Ly8gUHJpdmF0ZUtleUluZm8gOjo9IFNFUVVFTkNFIHsKKyAgICAvLyAgIHZlcnNpb24gICAgICAg
ICAgICAgICAgICAgVmVyc2lvbiwKKyAgICAvLyAgIHByaXZhdGVLZXlBbGdvcml0aG0gICAgICAg
UHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgLy8gICBwcml2YXRlS2V5ICAgICAg
ICAgICAgICAgIFByaXZhdGVLZXksCisgICAgLy8gICBhdHRyaWJ1dGVzICAgICAgICAgICBbMF0g
IElNUExJQ0lUIEF0dHJpYnV0ZXMgT1BUSU9OQUwgfQorICAgIGF1dG8gcHJpdmF0ZUtleUluZm9U
TFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCAwKTsKKyAgICBpZiAoIXByaXZhdGVLZXlJbmZv
VExWLmJ1ZmZlclNpemUgfHwgIXByaXZhdGVLZXlJbmZvVExWLmhhc1RhZyhBU04xOjpUYWc6OlNl
cXVlbmNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHByaXZhdGVLZXlJbmZv
VExWLmJ1ZmZlclNpemUgIT0ga2V5RGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgLy8gVmVyc2lvbiA6Oj0gSU5URUdFUgorICAgIGF1dG8gdmVyc2lvblRMViA9IEFT
TjE6OnBhcnNlVExWKGtleURhdGEsIHByaXZhdGVLZXlJbmZvVExWLnZhbHVlT2Zmc2V0KCkpOwor
ICAgIGlmICghdmVyc2lvblRMVi5idWZmZXJTaXplIHx8ICF2ZXJzaW9uVExWLmhhc1RhZyhBU04x
OjpUYWc6OkludGVnZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAodmVyc2lv
blRMVi5sZW5ndGggIT0gMSAmJiBrZXlEYXRhW3ZlcnNpb25UTFYudmFsdWVPZmZzZXQoKV0gIT0g
MCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBQcml2YXRlS2V5QWxnb3JpdGht
SWRlbnRpZmllciA6Oj0gQWxnb3JpdGhtSWRlbnRpZmllcgorICAgIC8vIEFsZ29yaXRobUlkZW50
aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgICBhbGdvcml0aG0gICBPQkpFQ1QgSURF
TlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0ZXJzICBBTlkgREVGSU5FRCBCWSBhbGdvcml0aG0g
T1BUSU9OQUwKKyAgICAvLyB9CisgICAgYXV0byBwcml2YXRlS2V5QWxnb3JpdGhtVExWID0gQVNO
MTo6cGFyc2VUTFYoa2V5RGF0YSwKKyAgICAgICAgcHJpdmF0ZUtleUluZm9UTFYudmFsdWVPZmZz
ZXQoKSArIHZlcnNpb25UTFYuYnVmZmVyU2l6ZSk7CisgICAgaWYgKCFwcml2YXRlS2V5QWxnb3Jp
dGhtVExWLmJ1ZmZlclNpemUgfHwgIXByaXZhdGVLZXlBbGdvcml0aG1UTFYuaGFzVGFnKEFTTjE6
OlRhZzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYWxn
b3JpdGhtVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgcHJpdmF0ZUtleUFsZ29yaXRobVRM
Vi52YWx1ZU9mZnNldCgpKTsKKyAgICBpZiAoIWFsZ29yaXRobVRMVi5idWZmZXJTaXplIHx8ICFh
bGdvcml0aG1UTFYuaGFzVGFnKEFTTjE6OlRhZzo6T2JqZWN0SWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXBwb3J0ZWRBbGdvcml0aG0gPSBhbGdvcml0
aG1Gb3JJZGVudGlmaWVyKGtleURhdGEuZGF0YSgpICsgYWxnb3JpdGhtVExWLnZhbHVlT2Zmc2V0
KCksIGFsZ29yaXRobVRMVi5sZW5ndGgpOworICAgIGlmICghc3VwcG9ydGVkQWxnb3JpdGhtKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEVDUGFyYW1ldGVycyA6Oj0gQ0hPSUNF
IHsKKyAgICAvLyAgIG5hbWVkQ3VydmUgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiAtLSBNVVNU
IGJlIHN1cHBvcnRlZC4KKyAgICAvLyAgIC0tIGltcGxpY2l0Q3VydmUgICBOVUxMIC0tIE1VU1Qg
Tk9UIGJlIHVzZWQuCisgICAgLy8gICAtLSBzcGVjaWZpZWRDdXJ2ZSAgU3BlY2lmaWVkRUNEb21h
aW4gLS0gTVVTVCBOT1QgYmUgdXNlZC4KKyAgICAvLyB9CisgICAgYXV0byBlY1BhcmFtZXRlcnNU
TFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLAorICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGht
VExWLnZhbHVlT2Zmc2V0KCkgKyBhbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSk7CisgICAgaWYgKCFl
Y1BhcmFtZXRlcnNUTFYuYnVmZmVyU2l6ZSB8fCAhZWNQYXJhbWV0ZXJzVExWLmhhc1RhZyhBU04x
OjpUYWc6Ok9iamVjdElkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gcGFyYW1ldGVyQ3VydmUgPSBjdXJ2ZUZvcklkZW50aWZpZXIoa2V5RGF0YS5kYXRhKCkg
KyBlY1BhcmFtZXRlcnNUTFYudmFsdWVPZmZzZXQoKSwgZWNQYXJhbWV0ZXJzVExWLmxlbmd0aCk7
CisgICAgaWYgKCFwYXJhbWV0ZXJDdXJ2ZSB8fCAqcGFyYW1ldGVyQ3VydmUgIT0gY3VydmUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFsZ29yaXRobVRMVi5idWZmZXJTaXpl
ICsgZWNQYXJhbWV0ZXJzVExWLmJ1ZmZlclNpemUgIT0gcHJpdmF0ZUtleUFsZ29yaXRobVRMVi5s
ZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gUHJpdmF0ZUtleSA6Oj0g
T0NURVQgU1RSSU5HCisgICAgYXV0byBwcml2YXRlS2V5VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5
RGF0YSwKKyAgICAgICAgcHJpdmF0ZUtleUluZm9UTFYudmFsdWVPZmZzZXQoKSArIHZlcnNpb25U
TFYuYnVmZmVyU2l6ZSArIHByaXZhdGVLZXlBbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSk7CisgICAg
aWYgKCFwcml2YXRlS2V5VExWLmJ1ZmZlclNpemUgfHwgIXByaXZhdGVLZXlUTFYuaGFzVGFnKEFT
TjE6OlRhZzo6T2N0ZXRTdHJpbmcpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlm
ICh2ZXJzaW9uVExWLmJ1ZmZlclNpemUgKyBwcml2YXRlS2V5QWxnb3JpdGhtVExWLmJ1ZmZlclNp
emUgKyBwcml2YXRlS2V5VExWLmJ1ZmZlclNpemUgIT0gcHJpdmF0ZUtleUluZm9UTFYubGVuZ3Ro
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEVDUHJpdmF0ZUtleSA6Oj0gU0VR
VUVOQ0UgeworICAgIC8vICAgdmVyc2lvbiAgICAgICAgSU5URUdFUiB7IGVjUHJpdmtleVZlcjEo
MSkgfSAoZWNQcml2a2V5VmVyMSksCisgICAgLy8gICBwcml2YXRlS2V5ICAgICBPQ1RFVCBTVFJJ
TkcsCisgICAgLy8gICBwYXJhbWV0ZXJzIFswXSBFQ1BhcmFtZXRlcnMge3sgTmFtZWRDdXJ2ZSB9
fSBPUFRJT05BTCwKKyAgICAvLyAgIHB1YmxpY0tleSAgWzFdIEJJVCBTVFJJTkcgT1BUSU9OQUwK
KyAgICAvLyB9CisgICAgYXV0byBlY1ByaXZhdGVLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlE
YXRhLCBwcml2YXRlS2V5VExWLnZhbHVlT2Zmc2V0KCkpOworICAgIGlmICghZWNQcml2YXRlS2V5
VExWLmJ1ZmZlclNpemUgfHwgIWVjUHJpdmF0ZUtleVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpTZXF1
ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGQ7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHE7CisgICAgeworICAgICAgICBhdXRvIHZlcnNpb25UTFYg
PSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBlY1ByaXZhdGVLZXlUTFYudmFsdWVPZmZzZXQoKSk7
CisgICAgICAgIGlmICghdmVyc2lvblRMVi5idWZmZXJTaXplIHx8ICF2ZXJzaW9uVExWLmhhc1Rh
ZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIGlmICh2ZXJzaW9uVExWLmxlbmd0aCAhPSAxIHx8IGtleURhdGFbdmVyc2lvblRMVi52YWx1
ZU9mZnNldCgpXSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
YXV0byBwcml2YXRlS2V5VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwKKyAgICAgICAgICAg
IGVjUHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNldCgpICsgdmVyc2lvblRMVi5idWZmZXJTaXplKTsK
KyAgICAgICAgaWYgKCFwcml2YXRlS2V5VExWLmJ1ZmZlclNpemUgfHwgIXByaXZhdGVLZXlUTFYu
aGFzVGFnKEFTTjE6OlRhZzo6T2N0ZXRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgZC5yZXNpemUocHJpdmF0ZUtleVRMVi5sZW5ndGgpOworICAgICAgICBz
dGQ6Om1lbWNweShkLmRhdGEoKSwga2V5RGF0YS5kYXRhKCkgKyBwcml2YXRlS2V5VExWLnZhbHVl
T2Zmc2V0KCksIHByaXZhdGVLZXlUTFYubGVuZ3RoKTsKKworICAgICAgICBhdXRvIG9wdGlvbmFs
VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleVRM
Vi52YWx1ZU9mZnNldCgpICsgdmVyc2lvblRMVi5idWZmZXJTaXplICsgcHJpdmF0ZUtleVRMVi5i
dWZmZXJTaXplKTsKKworICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG9wdGlvbmFsIHBhcmFtZXRl
cnMsIHB1YmxpY0tleSBmaWVsZHMuCisgICAgICAgIGlmIChvcHRpb25hbFRMVi5idWZmZXJTaXpl
ICYmIG9wdGlvbmFsVExWLnRhZyAmIDB4MjApIHsKKyAgICAgICAgICAgIGF1dG8gcHVibGljS2V5
VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgb3B0aW9uYWxUTFYudmFsdWVPZmZzZXQoKSk7
CisgICAgICAgICAgICBpZiAocHVibGljS2V5VExWLmJ1ZmZlclNpemUgJiYgcHVibGljS2V5VExW
Lmhhc1RhZyhBU04xOjpUYWc6OkJpdFN0cmluZykpIHsKKyAgICAgICAgICAgICAgICBpZiAoa2V5
RGF0YVtwdWJsaWNLZXlUTFYudmFsdWVPZmZzZXQoKV0gIT0gMHgwMCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgcS5hcHBlbmQoa2V5RGF0YS5k
YXRhKCkgKyBwdWJsaWNLZXlUTFYudmFsdWVPZmZzZXQoKSArIDEsIHB1YmxpY0tleVRMVi5sZW5n
dGggLSAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIGlmICh2ZXJzaW9uVExWLmJ1ZmZlclNpemUgKyBwcml2YXRlS2V5VExWLmJ1ZmZl
clNpemUgKyBvcHRpb25hbFRMVi5idWZmZXJTaXplICE9IGVjUHJpdmF0ZUtleVRMVi5sZW5ndGgp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoZC5zaXplKCkg
KiA4ICE9IGdldEtleVNpemVGcm9tTmFtZWRDdXJ2ZShjdXJ2ZSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgaWYgKCFxLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAocS5zaXplKCkg
IT0gMiAqIChnZXRLZXlTaXplRnJvbU5hbWVkQ3VydmUoY3VydmUpIC8gOCkgKyAxIHx8IHFbMF0g
IT0gMHgwNCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFBBTDo6
R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYXRmb3JtS2V5OworICAgIHsKKyAgICAgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihw
cml2YXRlLWtleShlY2MoY3VydmUgIik7CisgICAgICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICAg
ICAgY2FzZSBOYW1lZEN1cnZlOjpQMjU2OgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJcIk5JU1QgUC0yNTZcIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwi
TklTVCBQLTM4NFwiKSIpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiKGQgIyIpOworICAgICAgICAgICAgZm9yIChhdXRvJiBieXRlIDog
ZCkKKyAgICAgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMgKSIpOworICAgICAgICB9CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSkiKTsKKworICAgICAgICBTdHJpbmcgc0V4cHJlc3Np
b24gPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3Ry
aW5nID0gc0V4cHJlc3Npb24udXRmOCgpOworCisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9
IGdjcnlfc2V4cF9uZXcoJnBsYXRmb3JtS2V5LCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBz
RXhwcmVzc2lvbkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwg
JXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJy
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGNyZWF0ZShpZGVudGlmaWVyLCBjdXJ2ZSwgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0
ZSwgcGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogVmVj
dG9yPHVpbnQ4X3Q+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUV4cG9ydFBrY3M4KCkgY29uc3QKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGF1dG8gYXBwZW5kTGVuZ3RoID0KKyAgICAgICAg
W10oc2l6ZV90IGxlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIHsKKyAgICAgICAgICAg
IGlmIChsZW5ndGggPiAxMjcpIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGxlbmd0aEJ5dGVz
ID0gc3RkOjpjZWlsKHN0ZDo6bG9nMihsZW5ndGggKyAxKSAvIDgpOworICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoMHg4MCB8IGxlbmd0aEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVpbnQ4X3QgaSA9IDA7IGkgPCBsZW5ndGhCeXRlczsgKytpKQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKChsZW5ndGggPj4gKChsZW5ndGhCeXRlcyAtIGkgLSAxKSAqIDgpICYg
MHhmZikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChsZW5ndGgpOworICAgICAgICB9OworCisgICAgLy8gUHJpdmF0ZUtleUluZm8gOjo9IFNFUVVF
TkNFIHsKKyAgICAvLyAgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgVmVyc2lvbiwKKyAgICAv
LyAgIHByaXZhdGVLZXlBbGdvcml0aG0gICAgICAgUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZp
ZXIsCisgICAgLy8gICBwcml2YXRlS2V5ICAgICAgICAgICAgICAgIFByaXZhdGVLZXksCisgICAg
Ly8gICBhdHRyaWJ1dGVzICAgICAgICAgICBbMF0gIElNUExJQ0lUIEF0dHJpYnV0ZXMgT1BUSU9O
QUwgfQorCisgICAgLy8gVmVyc2lvbiA6Oj0gSU5URUdFUgorICAgIHN0YXRpYyBjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDM+IHNfdmVyc2lvbkRhdGF7IHsgMHgwMiwgMHgwMSwgMHgwMCB9IH07
CisKKyAgICAvLyBQcml2YXRlS2V5QWxnb3JpdGhtSWRlbnRpZmllciA6Oj0gQWxnb3JpdGhtSWRl
bnRpZmllcgorICAgIC8vIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAg
ICAvLyAgICBhbGdvcml0aG0gICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0
ZXJzICBBTlkgREVGSU5FRCBCWSBhbGdvcml0aG0gT1BUSU9OQUwKKyAgICAvLyB9CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlBbGdvcml0aG1EYXRhOworICAgIHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgNz4gc19pZEVDUHVibGljS2V5eyB7IDB4MmEs
IDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEgfSB9OworCisgICAgICAgIC8vIEVD
UGFyYW1ldGVycyA6Oj0gQ0hPSUNFIHsKKyAgICAgICAgLy8gICBuYW1lZEN1cnZlICAgICAgICAg
T0JKRUNUIElERU5USUZJRVIgLS0gTVVTVCBiZSBzdXBwb3J0ZWQuCisgICAgICAgIC8vICAgLS0g
aW1wbGljaXRDdXJ2ZSAgIE5VTEwgLS0gTVVTVCBOT1QgYmUgdXNlZC4KKyAgICAgICAgLy8gICAt
LSBzcGVjaWZpZWRDdXJ2ZSAgU3BlY2lmaWVkRUNEb21haW4gLS0gTVVTVCBOT1QgYmUgdXNlZC4K
KyAgICAgICAgLy8gfQorICAgICAgICBWZWN0b3I8dWludDhfdD4gZWNQYXJhbWV0ZXJzRGF0YTsK
KyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
OD4gc19zZWNwMjU2cjF7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMywgMHgw
MSwgMHgwNyB9IH07CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90
LCA1PiBzX3NlY3AzODRyMXsgeyAweDJiLCAweDgxLCAweDA0LCAweDAwLCAweDIyIH0gfTsKKwor
ICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoMHgwNik7CisKKyAgICAgICAgICAg
IHN3aXRjaCAobV9jdXJ2ZSkgeworICAgICAgICAgICAgY2FzZSBOYW1lZEN1cnZlOjpQMjU2Ogor
ICAgICAgICAgICAgICAgIGVjUGFyYW1ldGVyc0RhdGEuYXBwZW5kKHNfc2VjcDI1NnIxLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMjU2cjEu
ZGF0YSgpLCBzX3NlY3AyNTZyMS5zaXplKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBOYW1lZEN1cnZlOjpQMzg0OgorICAgICAgICAgICAgICAgIGVjUGFyYW1l
dGVyc0RhdGEuYXBwZW5kKHNfc2VjcDM4NHIxLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZWNQ
YXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMzg0cjEuZGF0YSgpLCBzX3NlY3AzODRyMS5zaXpl
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEuYXBwZW5kKDB4MzApOworICAgICAgICBw
cml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoMiArIHNfaWRFQ1B1YmxpY0tleS5zaXplKCkg
KyBlY1BhcmFtZXRlcnNEYXRhLnNpemUoKSk7CisKKyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRo
bURhdGEuYXBwZW5kKDB4MDYpOworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBl
bmQoc19pZEVDUHVibGljS2V5LnNpemUoKSk7CisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1E
YXRhLmFwcGVuZChzX2lkRUNQdWJsaWNLZXkuZGF0YSgpLCBzX2lkRUNQdWJsaWNLZXkuc2l6ZSgp
KTsKKworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmRWZWN0b3IoZWNQYXJh
bWV0ZXJzRGF0YSk7CisgICAgfQorCisgICAgLy8gUHJpdmF0ZUtleSA6Oj0gT0NURVQgU1RSSU5H
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlEYXRhOworICAgIHsKKyAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGQ7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBxOworICAgICAgICB7Cisg
ICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY3R4X3Q+IGNvbnRleHQ7CisgICAg
ICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X21waV9lY19uZXcoJmNvbnRleHQsIG1f
cGxhdGZvcm1LZXksIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZE1QSShnY3J5
X21waV9lY19nZXRfbXBpKCJkIiwgY29udGV4dCwgMCkpOworICAgICAgICAgICAgICAgIGlmICgh
ZE1QSSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgICAg
IHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGdjcnlfbXBp
X3ByaW50KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwgMCwgJmRhdGFMZW5ndGgsIGRNUEkpOwor
ICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICAgICAgZC5yZXNpemUoZGF0YUxl
bmd0aCk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZN
VF9VU0csIGQuZGF0YSgpLCBkLnNpemUoKSwgbnVsbHB0ciwgZE1QSSk7CisgICAgICAgICAgICAg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
UEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBxTVBJKGdjcnlfbXBpX2VjX2dldF9tcGko
InEiLCBjb250ZXh0LCAwKSk7CisgICAgICAgICAgICAgICAgaWYgKCFxTVBJKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFMZW5n
dGggPSAwOworICAgICAgICAgICAgICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9G
TVRfVVNHLCBudWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgcU1QSSk7CisgICAgICAgICAgICAgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CisKKyAgICAgICAgICAgICAgICBxLnJlc2l6ZShkYXRhTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgcS5kYXRhKCks
IHEuc2l6ZSgpLCBudWxscHRyLCBxTVBJKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEVDUHJpdmF0ZUtleSA6Oj0gU0VRVUVO
Q0UgeworICAgICAgICAvLyAgIHZlcnNpb24gICAgICAgIElOVEVHRVIgeyBlY1ByaXZrZXlWZXIx
KDEpIH0gKGVjUHJpdmtleVZlcjEpLAorICAgICAgICAvLyAgIHByaXZhdGVLZXkgICAgIE9DVEVU
IFNUUklORywKKyAgICAgICAgLy8gICBwYXJhbWV0ZXJzIFswXSBFQ1BhcmFtZXRlcnMge3sgTmFt
ZWRDdXJ2ZSB9fSBPUFRJT05BTCwKKyAgICAgICAgLy8gICBwdWJsaWNLZXkgIFsxXSBCSVQgU1RS
SU5HIE9QVElPTkFMCisgICAgICAgIC8vIH0KKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVjUHJp
dmF0ZUtleURhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBw
ZW5kKDB4MzApOworICAgICAgICAgICAgYXBwZW5kTGVuZ3RoKDMgKyAyICsgZC5zaXplKCkgKyAy
ICsgMyArIHEuc2l6ZSgpLCBlY1ByaXZhdGVLZXlEYXRhKTsKKworICAgICAgICAgICAgLy8gdmVy
c2lvbgorICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoMHgwMik7CisgICAgICAg
ICAgICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZCgxKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtl
eURhdGEuYXBwZW5kKDEpOworCisgICAgICAgICAgICAvLyBwcml2YXRlS2V5CisgICAgICAgICAg
ICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZCgweDA0KTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtl
eURhdGEuYXBwZW5kKGQuc2l6ZSgpKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBw
ZW5kVmVjdG9yKGQpOworCisgICAgICAgICAgICAvLyBwdWJsaWNLZXkKKyAgICAgICAgICAgIGVj
UHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4QTEpOworICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0
YS5hcHBlbmQoMyArIHEuc2l6ZSgpKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBw
ZW5kKDB4MDMpOworICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoMSArIHEuc2l6
ZSgpKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4MDApOworICAgICAg
ICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IocSk7CisgICAgICAgIH0KKworICAg
ICAgICBwcml2YXRlS2V5RGF0YS5hcHBlbmQoMHgwNCk7CisgICAgICAgIGFwcGVuZExlbmd0aChl
Y1ByaXZhdGVLZXlEYXRhLnNpemUoKSwgcHJpdmF0ZUtleURhdGEpOworICAgICAgICBwcml2YXRl
S2V5RGF0YS5hcHBlbmRWZWN0b3IoZWNQcml2YXRlS2V5RGF0YSk7CisgICAgfQorCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKDB4MzApOworICAgIGFwcGVu
ZExlbmd0aChzX3ZlcnNpb25EYXRhLnNpemUoKSArIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLnNp
emUoKSArIHByaXZhdGVLZXlEYXRhLnNpemUoKSwgcmVzdWx0KTsKKyAgICByZXN1bHQuYXBwZW5k
KHNfdmVyc2lvbkRhdGEuZGF0YSgpLCBzX3ZlcnNpb25EYXRhLnNpemUoKSk7CisgICAgcmVzdWx0
LmFwcGVuZFZlY3Rvcihwcml2YXRlS2V5QWxnb3JpdGhtRGF0YSk7CisgICAgcmVzdWx0LmFwcGVu
ZFZlY3Rvcihwcml2YXRlS2V5RGF0YSk7CiAKLSAgICByZXR1cm4geyB9OworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNwcAppbmRleCAwYzc3Mzc0Mjdm
Yi4uOTIwZDRjMTEyMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
Q3J5cHRvS2V5UlNBR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAKQEAgLTMyLDEyICszMiwxNjQgQEAKICNpbmNsdWRlICJD
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8cGFsL2NyeXB0
by9nY3J5cHQvQVNOMS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgor
I2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IF9QbGF0Zm9ybVJTQUtleUdu
dVRMUyB7Ci19Oworc3RhdGljIHNpemVfdCBnZXRSU0FNb2R1bHVzTGVuZ3RoKGdjcnlfc2V4cF90
IHNleHApCit7CisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4gblNleHAoZ2Ny
eV9zZXhwX2ZpbmRfdG9rZW4oc2V4cCwgIm4iLCAwKSk7CisgICAgaWYgKCFuU2V4cCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IG5NUEko
Z2NyeV9zZXhwX250aF9tcGkoblNleHAsIDEsIEdDUllNUElfRk1UX1VTRykpOworICAgIGlmICgh
bk1QSSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7Cisg
ICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBu
dWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgbk1QSSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGRhdGFMZW5ndGggKiA4
OworfQorCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGdldFBhcmFtZXRlck1QSURhdGEoZ2NyeV9t
cGlfdCBwYXJhbU1QSSkKK3sKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgZ2NyeV9l
cnJvcl90IGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRyLCAw
LCAmZGF0YUxlbmd0aCwgcGFyYW1NUEkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHBhcmFtZXRl
cihkYXRhTGVuZ3RoKTsKKyAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VT
RywgcGFyYW1ldGVyLmRhdGEoKSwgcGFyYW1ldGVyLnNpemUoKSwgbnVsbHB0ciwgcGFyYW1NUEkp
OworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgcmV0dXJuIHBhcmFtZXRlcjsKK30KKworc3RhdGljIFZlY3Rvcjx1aW50OF90PiBn
ZXRSU0FLZXlQYXJhbWV0ZXIoZ2NyeV9zZXhwX3Qgc2V4cCwgY29uc3QgY2hhciogbmFtZSwgZW51
bSBnY3J5X21waV9mb3JtYXQgZm9ybWF0ID0gR0NSWU1QSV9GTVRfVVNHKQoreworICAgIFBBTDo6
R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBhcmFtU2V4cChnY3J5X3NleHBfZmluZF90b2tl
bihzZXhwLCBuYW1lLCAwKSk7CisgICAgaWYgKCFwYXJhbVNleHApCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHBhcmFtTVBJKGdjcnlf
c2V4cF9udGhfbXBpKHBhcmFtU2V4cCwgMSwgZm9ybWF0KSk7CisgICAgaWYgKCFwYXJhbU1QSSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBwYXJhbWV0ZXI7Cisg
ICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlf
bXBpX3ByaW50KGZvcm1hdCwgbnVsbHB0ciwgMCwgJmRhdGFMZW5ndGgsIHBhcmFtTVBJKTsKKyAg
ICBpZiAoZXJyb3IgPT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBwYXJhbWV0ZXIucmVz
aXplKGRhdGFMZW5ndGgpOworICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KGZvcm1hdCwg
cGFyYW1ldGVyLmRhdGEoKSwgcGFyYW1ldGVyLnNpemUoKSwgbnVsbHB0ciwgcGFyYW1NUEkpOwor
ICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwgZ2NyeV9zdHJzb3VyY2UoZXJy
b3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgfQorCisgICAgcmV0dXJuIHBhcmFtZXRl
cjsKK30KKworUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGhhc2gsIGJvb2wgaGFzSGFzaCwgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmIGtl
eURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKK3sK
KyAgICBpZiAoa2V5RGF0YS50eXBlKCkgPT0gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlR5
cGU6OlByaXZhdGUgJiYgIWtleURhdGEuaGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJz
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFrZXlEYXRhLm90aGVyUHJp
bWVJbmZvcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBW
YWxpZGF0ZSB0aGUga2V5IGRhdGEuCisgICAgeworICAgICAgICBib29sIHZhbGlkID0gdHJ1ZTsK
KworICAgICAgICB2YWxpZCAmPSAha2V5RGF0YS5tb2R1bHVzKCkuaXNFbXB0eSgpICYmICFrZXlE
YXRhLmV4cG9uZW50KCkuaXNFbXB0eSgpOworICAgICAgICBpZiAoa2V5RGF0YS50eXBlKCkgPT0g
Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlR5cGU6OlByaXZhdGUpCisgICAgICAgICAgICB2
YWxpZCAmPSAha2V5RGF0YS5wcml2YXRlRXhwb25lbnQoKS5pc0VtcHR5KCkgJiYgIWtleURhdGEu
Zmlyc3RQcmltZUluZm8oKS5wcmltZUZhY3Rvci5pc0VtcHR5KCkgJiYgIWtleURhdGEuc2Vjb25k
UHJpbWVJbmZvKCkucHJpbWVGYWN0b3IuaXNFbXB0eSgpOworCisgICAgICAgIGlmICghdmFsaWQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDcnlwdG9LZXlUeXBl
IGtleVR5cGU7CisgICAgc3dpdGNoIChrZXlEYXRhLnR5cGUoKSkgeworICAgIGNhc2UgQ3J5cHRv
S2V5RGF0YVJTQUNvbXBvbmVudHM6OlR5cGU6OlB1YmxpYzoKKyAgICAgICAga2V5VHlwZSA9IENy
eXB0b0tleVR5cGU6OlB1YmxpYzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHJpdmF0ZToKKyAgICAgICAga2V5VHlwZSA9IENyeXB0
b0tleVR5cGU6OlByaXZhdGU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFBBTDo6R0Ny
eXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IGtleVNleHA7CisgICAgeworICAgICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIHN3aXRjaCAoa2V5VHlwZSkgeworICAgICAgICBjYXNl
IENyeXB0b0tleVR5cGU6OlB1YmxpYzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKHB1YmxpYy1rZXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENyeXB0
b0tleVR5cGU6OlByaXZhdGU6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihw
cml2YXRlLWtleSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3J5cHRvS2V5
VHlwZTo6U2VjcmV0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihy
c2EiKTsKKworICAgICAgICAvLyBNb2R1bHVzCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKG4gIyIpOworICAgICAgICBmb3IgKGF1dG8gYnl0ZSA6IGtleURhdGEubW9kdWx1cygpKQor
ICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiMpIik7CisKKyAgICAgICAgLy8gUHVibGljIGV4cG9uZW50Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGUgIyIpOworICAgICAgICBmb3IgKGF1dG8g
Ynl0ZSA6IGtleURhdGEuZXhwb25lbnQoKSkKKyAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleChi
eXRlLCBidWlsZGVyKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIjKSIpOworCisg
ICAgICAgIGlmIChrZXlUeXBlID09IENyeXB0b0tleVR5cGU6OlByaXZhdGUpIHsKKyAgICAgICAg
ICAgIC8vIFByaXZhdGUgZXhwb25lbnQKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKGQgIyIpOworICAgICAgICAgICAgZm9yIChhdXRvIGJ5dGUgOiBrZXlEYXRhLnByaXZhdGVF
eHBvbmVudCgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleChieXRlLCBidWlsZGVy
KTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykiKTsKKworICAgICAgICAg
ICAgaWYgKGtleURhdGEuaGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBGaXJzdCBwcmltZSBpbmZvCisgICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIocCAjIik7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGJ5dGUg
OiBrZXlEYXRhLnNlY29uZFByaW1lSW5mbygpLnByaW1lRmFjdG9yKQorICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRCeXRlQXNIZXgoYnl0ZSwgYnVpbGRlcik7CisgICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIjKSIpOworCisgICAgICAgICAgICAgICAgLy8gU2Vjb25kIHBy
aW1lIGluZm8KKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihxICMiKTsK
KyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gYnl0ZSA6IGtleURhdGEuZmlyc3RQcmltZUluZm8o
KS5wcmltZUZhY3RvcikKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGJ5dGUs
IGJ1aWxkZXIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIykiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKSkiKTsKKworICAgICAgICBTdHJpbmcgc0V4cHJlc3Npb24gPSBidWlsZGVyLnRvU3RyaW5n
KCk7CisgICAgICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3RyaW5nID0gc0V4cHJlc3Npb24udXRm
OCgpOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3NleHBfbmV3KCZrZXlTZXhw
LCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcubGVuZ3RoKCks
IDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5X3N0cnNv
dXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlw
dG9LZXlSU0EoaWRlbnRpZmllciwgaGFzaCwgaGFzSGFzaCwga2V5VHlwZSwga2V5U2V4cC5yZWxl
YXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTsKK30KIAogQ3J5cHRvS2V5UlNBOjpDcnlwdG9L
ZXlSU0EoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgaGFzSGFzaCwgQ3J5cHRvS2V5VHlwZSB0eXBlLCBQbGF0
Zm9ybVJTQUtleSBwbGF0Zm9ybUtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VC
aXRtYXAgdXNhZ2UpCiAgICAgOiBDcnlwdG9LZXkoaWRlbnRpZmllciwgdHlwZSwgZXh0cmFjdGFi
bGUsIHVzYWdlKQpAQCAtNDUsMjUgKzE5NywxMiBAQCBDcnlwdG9LZXlSU0E6OkNyeXB0b0tleVJT
QShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobQog
ICAgICwgbV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2goaGFzSGFzaCkKICAgICAsIG1faGFzaCho
YXNoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVJlZlB0cjxDcnlwdG9LZXlSU0E+
IENyeXB0b0tleVJTQTo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIGNvbnN0IENy
eXB0b0tleURhdGFSU0FDb21wb25lbnRzJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZUJpdG1hcCB1c2FnZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVO
VVNFRF9QQVJBTShpZGVudGlmaWVyKTsKLSAgICBVTlVTRURfUEFSQU0oaGFzaCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGhhc0hhc2gpOwotICAgIFVOVVNFRF9QQVJBTShrZXlEYXRhKTsKLSAgICBVTlVT
RURfUEFSQU0oZXh0cmFjdGFibGUpOwotICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogQ3J5cHRvS2V5UlNBOjp+Q3J5cHRvS2V5UlNBKCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX3BsYXRmb3JtS2V5KQorICAgICAgICBQQUw6
OkdDcnlwdDo6SGFuZGxlRGVsZXRlcjxnY3J5X3NleHBfdD4oKShtX3BsYXRmb3JtS2V5KTsKIH0K
IAogYm9vbCBDcnlwdG9LZXlSU0E6OmlzUmVzdHJpY3RlZFRvSGFzaChDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyJiBpZGVudGlmaWVyKSBjb25zdApAQCAtNzcsNjcgKzIxNiw3NjUgQEAgYm9vbCBD
cnlwdG9LZXlSU0E6OmlzUmVzdHJpY3RlZFRvSGFzaChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
JiBpZGVudGlmaWVyKSBjb24KIAogc2l6ZV90IENyeXB0b0tleVJTQTo6a2V5U2l6ZUluQml0cygp
IGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gZ2V0UlNBTW9kdWx1c0xlbmd0aChtX3BsYXRmb3JtS2V5KTsKIH0KIAogc3RkOjp1bmlxdWVf
cHRyPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHVibGljRXhwb25l
bnQ7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihlbXB0eVN0
cmluZygpLCAwLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CisgICAgU3RyaW5nIG5hbWUgPSBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlm
aWVyKCkpOworICAgIHNpemVfdCBtb2R1bHVzTGVuZ3RoID0gZ2V0UlNBTW9kdWx1c0xlbmd0aCht
X3BsYXRmb3JtS2V5KTsKKyAgICBWZWN0b3I8dWludDhfdD4gcHVibGljRXhwb25lbnQgPSBnZXRS
U0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9ybUtleSwgImUiKTsKKworICAgIGlmIChtX3Jlc3RyaWN0
ZWRUb1NwZWNpZmljSGFzaCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhSGFz
aGVkS2V5QWxnb3JpdGhtPihuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9u
ZW50KSwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUobV9oYXNoKSk7
CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihuYW1lLCBtb2R1
bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBjb25zdAogewogICAg
IEFTU0VSVChleHRyYWN0YWJsZSgpKTsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNlIENyeXB0b0tleVR5
cGU6OlB1YmxpYzoKKyAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpj
cmVhdGVQdWJsaWMoZ2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1LZXksICJuIiksIGdldFJT
QUtleVBhcmFtZXRlcihtX3BsYXRmb3JtS2V5LCAiZSIpKTsKKyAgICBjYXNlIENyeXB0b0tleVR5
cGU6OlByaXZhdGU6IHsKKyAgICAgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlByaW1l
SW5mbyBmaXJzdFByaW1lSW5mb3sgZ2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1LZXksICJx
IiksIHsgfSwgeyB9IH07CisgICAgICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQcmlt
ZUluZm8gc2Vjb25kUHJpbWVJbmZveyBnZXRSU0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9ybUtleSwg
InAiKSwgeyB9LCB7IH0gfTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGdldE1QSSA9
CisgICAgICAgICAgICAgICAgW10oZ2NyeV9zZXhwX3Qgc2V4cCwgY29uc3QgY2hhciogbmFtZSkg
LT4gZ2NyeV9tcGlfdCB7CisgICAgICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8
Z2NyeV9zZXhwX3Q+IHBhcmFtU2V4cChnY3J5X3NleHBfZmluZF90b2tlbihzZXhwLCBuYW1lLCAw
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1TZXhwKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnY3J5
X3NleHBfbnRoX21waShwYXJhbVNleHAsIDEsIEdDUllNUElfRk1UX1VTRyk7CisgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgYXV0byBleHRyYWN0RGF0YSA9CisgICAgICAgICAgICAg
ICAgW10oZ2NyeV9tcGlfdCBwYXJhbU1QSSkgLT4gVmVjdG9yPHVpbnQ4X3Q+IHsKKyAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgICAgICAgICAgICAgICAgICBn
Y3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxw
dHIsIDAsICZkYXRhTGVuZ3RoLCBwYXJhbU1QSSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChl
cnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGRhdGFM
ZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllN
UElfRk1UX1VTRywgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgbnVsbHB0ciwgcGFyYW1N
UEkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikg
eworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMv
JXNcbiIsIGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3Ip
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0OworICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZE1Q
SShnZXRNUEkobV9wbGF0Zm9ybUtleSwgImQiKSk7CisgICAgICAgICAgICBQQUw6OkdDcnlwdDo6
SGFuZGxlPGdjcnlfbXBpX3Q+IHBNUEkoZ2V0TVBJKG1fcGxhdGZvcm1LZXksICJxIikpOworICAg
ICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBxTVBJKGdldE1QSShtX3Bs
YXRmb3JtS2V5LCAicCIpKTsKKworICAgICAgICAgICAgLy8gZHAKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGRwTVBJKGdjcnlf
bXBpX3NldF91aShudWxscHRyLCAwKSk7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6Okhh
bmRsZTxnY3J5X21waV90PiBwbTFNUEkoZ2NyeV9tcGlfc2V0KG51bGxwdHIsIHBNUEkpKTsKKyAg
ICAgICAgICAgICAgICBnY3J5X21waV9zdWJfdWkocG0xTVBJLCBwbTFNUEksIDEpOworICAgICAg
ICAgICAgICAgIGdjcnlfbXBpX21vZChkcE1QSSwgZE1QSSwgcG0xTVBJKTsKKyAgICAgICAgICAg
ICAgICBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCA9IGV4dHJhY3REYXRhKGRwTVBJ
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZHEKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGRxTVBJKGdjcnlf
bXBpX3NldF91aShudWxscHRyLCAwKSk7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6Okhh
bmRsZTxnY3J5X21waV90PiBxbTFNUEkoZ2NyeV9tcGlfc2V0KG51bGxwdHIsIHFNUEkpKTsKKyAg
ICAgICAgICAgICAgICBnY3J5X21waV9zdWJfdWkocW0xTVBJLCBxbTFNUEksIDEpOworICAgICAg
ICAgICAgICAgIGdjcnlfbXBpX21vZChkcU1QSSwgZE1QSSwgcW0xTVBJKTsKKyAgICAgICAgICAg
ICAgICBzZWNvbmRQcmltZUluZm8uZmFjdG9yQ1JURXhwb25lbnQgPSBleHRyYWN0RGF0YShkcU1Q
SSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHFpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBxaU1QSShnY3J5
X21waV9zZXRfdWkobnVsbHB0ciwgMCkpOworICAgICAgICAgICAgICAgIGdjcnlfbXBpX2ludm0o
cWlNUEksIHFNUEksIHBNUEkpOworICAgICAgICAgICAgICAgIHNlY29uZFByaW1lSW5mby5mYWN0
b3JDUlRDb2VmZmljaWVudCA9IGV4dHJhY3REYXRhKHFpTVBJKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3Jl
YXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShnZXRSU0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9y
bUtleSwgIm4iKSwKKyAgICAgICAgICAgIGdldFJTQUtleVBhcmFtZXRlcihtX3BsYXRmb3JtS2V5
LCAiZSIpLCBnZXRSU0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9ybUtleSwgImQiKSwKKyAgICAgICAg
ICAgIFdURk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZNb3ZlKHNlY29uZFByaW1lSW5mbyksIFZl
Y3RvcjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZvPnsgfSk7CisgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGJpZ0ludGVnZXJUb1VJbnQzMihj
b25zdCBWZWN0b3I8dWludDhfdD4mIGJpZ0ludGVnZXIsIHVpbnQzMl90JiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSArIDQgPCBiaWdJbnRlZ2Vy
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChiaWdJbnRlZ2VyW2ldKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBUb28gYmlnIHRvIGZpdCBpbiAzMiBiaXRzLgorICAgIH0KKworICAg
IGZvciAoc2l6ZV90IGkgPSBiaWdJbnRlZ2VyLnNpemUoKSA+IDQgPyBiaWdJbnRlZ2VyLnNpemUo
KSAtIDQgOiAwOyBpIDwgYmlnSW50ZWdlci5zaXplKCk7ICsraSkgeworICAgICAgICByZXN1bHQg
PDw9IDg7CisgICAgICAgIHJlc3VsdCArPSBiaWdJbnRlZ2VyW2ldOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogdm9pZCBDcnlwdG9LZXlSU0E6OmdlbmVyYXRlUGFpcihDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNo
LCBib29sIGhhc0hhc2gsIHVuc2lnbmVkIG1vZHVsdXNMZW5ndGgsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgcHVibGljRXhwb25lbnQsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0
bWFwIHVzYWdlLCBLZXlQYWlyQ2FsbGJhY2smJiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYgZmFp
bHVyZUNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgZmFpbHVyZUNhbGxiYWNrKCk7CisgICAgdWludDMyX3QgZTsK
KyAgICBpZiAoIWJpZ0ludGVnZXJUb1VJbnQzMihwdWJsaWNFeHBvbmVudCwgZSkgfHwgZSA8IDMg
fHwgIShlICYgMHgxKSkgeworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChtb2R1bHVzTGVuZ3RoIDwgMTYpIHsKKyAgICAgICAgZmFp
bHVyZUNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIoZ2Vua2V5KHJzYSIpOwor
ICAgIHsKKyAgICAgICAgU3RyaW5nIG5iaXRzID0gU3RyaW5nOjpudW1iZXIobW9kdWx1c0xlbmd0
aCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG5iaXRzICIpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZE51bWJlcihuYml0cy5sZW5ndGgoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiOiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChuYml0cyk7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSIpOworICAgIH0KKyAgICB7CisgICAgICAgIFN0cmlu
ZyByc2FVc2VFID0gU3RyaW5nOjpudW1iZXIoZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiKHJzYS11c2UtZSAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIocnNhVXNl
RS5sZW5ndGgoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOiIpOworICAgICAg
ICBidWlsZGVyLmFwcGVuZChyc2FVc2VFKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIpIik7CisgICAgfQorICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSkiKTsKIAotICAgIFVO
VVNFRF9QQVJBTShhbGdvcml0aG0pOwotICAgIFVOVVNFRF9QQVJBTShoYXNoKTsKLSAgICBVTlVT
RURfUEFSQU0oaGFzSGFzaCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1vZHVsdXNMZW5ndGgpOwotICAg
IFVOVVNFRF9QQVJBTShwdWJsaWNFeHBvbmVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4dHJhY3Rh
YmxlKTsKLSAgICBVTlVTRURfUEFSQU0odXNhZ2UpOwotICAgIFVOVVNFRF9QQVJBTShjYWxsYmFj
ayk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9
IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBDU3RyaW5nIHNFeHByZXNzaW9uQ1N0cmluZyA9IHNF
eHByZXNzaW9uLnV0ZjgoKTsKKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+
IGdlbmtleVNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhwX25ldygmZ2Vu
a2V5U2V4cCwgc0V4cHJlc3Npb25DU3RyaW5nLmRhdGEoKSwgc0V4cHJlc3Npb25DU3RyaW5nLmxl
bmd0aCgpLCAxKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3IsIGdjcnlfc3Ryc291
cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICBmYWlsdXJlQ2FsbGJh
Y2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8
Z2NyeV9zZXhwX3Q+IGtleVBhaXJTZXhwOworICAgIGVycm9yID0gZ2NyeV9wa19nZW5rZXkoJmtl
eVBhaXJTZXhwLCBnZW5rZXlTZXhwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJP
UikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkLCAlcy8lc1xuIiwgZXJyb3Is
IGdjcnlfc3Ryc291cmNlKGVycm9yKSwgZ2NyeV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICBm
YWlsdXJlQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBBTDo6R0Ny
eXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHB1YmxpY0tleVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9r
ZW4oa2V5UGFpclNleHAsICJwdWJsaWMta2V5IiwgMCkpOworICAgIFBBTDo6R0NyeXB0OjpIYW5k
bGU8Z2NyeV9zZXhwX3Q+IHByaXZhdGVLZXlTZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKGtleVBh
aXJTZXhwLCAicHJpdmF0ZS1rZXkiLCAwKSk7CisgICAgaWYgKCFwdWJsaWNLZXlTZXhwIHx8ICFw
cml2YXRlS2V5U2V4cCkgeworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbnRleHQtPnJlZigpOworICAgIGNvbnRleHQtPnBvc3RUYXNr
KAorICAgICAgICBbYWxnb3JpdGhtLCBoYXNoLCBoYXNIYXNoLCBleHRyYWN0YWJsZSwgdXNhZ2Us
IHB1YmxpY0tleVNleHAgPSBwdWJsaWNLZXlTZXhwLnJlbGVhc2UoKSwgcHJpdmF0ZUtleVNleHAg
PSBwcml2YXRlS2V5U2V4cC5yZWxlYXNlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayld
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAg
YXV0byBwdWJsaWNLZXkgPSBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIGhhc2gsIGhh
c0hhc2gsIENyeXB0b0tleVR5cGU6OlB1YmxpYywgcHVibGljS2V5U2V4cCwgdHJ1ZSwgdXNhZ2Up
OworICAgICAgICAgICAgYXV0byBwcml2YXRlS2V5ID0gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxn
b3JpdGhtLCBoYXNoLCBoYXNIYXNoLCBDcnlwdG9LZXlUeXBlOjpQcml2YXRlLCBwcml2YXRlS2V5
U2V4cCwgZXh0cmFjdGFibGUsIHVzYWdlKTsKKworICAgICAgICAgICAgY2FsbGJhY2soQ3J5cHRv
S2V5UGFpcnsgV1RGTW92ZShwdWJsaWNLZXkpLCBXVEZNb3ZlKHByaXZhdGVLZXkpIH0pOworICAg
ICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICB9KTsKIH0KIAotUmVmUHRyPENyeXB0
b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcj4sIFZlY3Rvcjx1aW50
OF90PiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCkKK2VudW0gY2xhc3MgUlNBQWxnb3Jp
dGhtIHsKKyAgICBSU0FFbmNyeXB0aW9uLAorICAgIFJTQUVTX09BRVAsCisgICAgUlNBU1NBX1BT
UywKK307CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFJTQUFsZ29yaXRobT4gYWxnb3JpdGhtRm9y
SWRlbnRpZmllcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDk+IHNf
cnNhRW5jcnlwdGlvbnsgeyAweDJhLCAweDg2LCAweDQ4LCAweDg2LCAweGY3LCAweDBkLCAweDAx
LCAweDAxLCAweDAxIH0gfTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA5
PiBzX2lkUlNBRVNfT0FFUHsgeyAweDJhLCAweDg2LCAweDQ4LCAweDg2LCAweGY3LCAweDBkLCAw
eDAxLCAweDAxLCAweDA3IH0gfTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90
LCA5PiBzX2lkUlNBU1NBX1BTU3sgeyAweDJhLCAweDg2LCAweDQ4LCAweDg2LCAweGY3LCAweDBk
LCAweDAxLCAweDAxLCAweDBhIH0gfTsKIAotICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChz
aXplICE9IDkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIXN0ZDo6
bWVtY21wKGRhdGEsIHNfcnNhRW5jcnlwdGlvbi5kYXRhKCksIHNpemUpKQorICAgICAgICByZXR1
cm4gUlNBQWxnb3JpdGhtOjpSU0FFbmNyeXB0aW9uOworICAgIGlmICghc3RkOjptZW1jbXAoZGF0
YSwgc19pZFJTQUVTX09BRVAuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAoIXN0ZDo6bWVtY21wKGRhdGEsIHNfaWRSU0FTU0FfUFNTLmRhdGEoKSwg
c2l6ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKK30KKworUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtp
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDxDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyPiBoYXNoLCBWZWN0b3I8dWludDhfdD4mJiBrZXlEYXRhLCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMpCit7CisgICAgLy8g
U3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgIGFsZ29yaXRo
bSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgLy8gICBzdWJqZWN0UHVibGlj
S2V5ICAgICBCSVQgU1RSSU5HICB9CisgICAgYXV0byBzdWJqZWN0UHVibGljS2V5SW5mb1RMViA9
IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIDApOworICAgIGlmICghc3ViamVjdFB1YmxpY0tleUlu
Zm9UTFYuYnVmZmVyU2l6ZSB8fCAhc3ViamVjdFB1YmxpY0tleUluZm9UTFYuaGFzVGFnKEFTTjE6
OlRhZzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEFsZ29y
aXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgICBhbGdvcml0aG0gICBP
QkpFQ1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0ZXJzICBBTlkgREVGSU5FRCBCWSBh
bGdvcml0aG0gT1BUSU9OQUwKKyAgICAvLyB9CisgICAgYXV0byBhbGdvcml0aG1JZGVudGlmaWVy
VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgc3ViamVjdFB1YmxpY0tleUluZm9UTFYudmFs
dWVPZmZzZXQoKSk7CisgICAgaWYgKCFhbGdvcml0aG1JZGVudGlmaWVyVExWLmJ1ZmZlclNpemUg
fHwgIWFsZ29yaXRobUlkZW50aWZpZXJUTFYuaGFzVGFnKEFTTjE6OlRhZzo6U2VxdWVuY2UpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYWxnb3JpdGhtVExWID0gQVNOMTo6
cGFyc2VUTFYoa2V5RGF0YSwgYWxnb3JpdGhtSWRlbnRpZmllclRMVi52YWx1ZU9mZnNldCgpKTsK
KyAgICBpZiAoIWFsZ29yaXRobVRMVi5idWZmZXJTaXplIHx8ICFhbGdvcml0aG1UTFYuaGFzVGFn
KEFTTjE6OlRhZzo6T2JqZWN0SWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBzdXBwb3J0ZWRBbGdvcml0aG0gPSBhbGdvcml0aG1Gb3JJZGVudGlmaWVyKGtl
eURhdGEuZGF0YSgpICsgYWxnb3JpdGhtVExWLnZhbHVlT2Zmc2V0KCksIGFsZ29yaXRobVRMVi5s
ZW5ndGgpOworICAgIGlmICghc3VwcG9ydGVkQWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gc3ViamVjdFB1YmxpY0tleVRMViA9IEFTTjE6OnBhcnNlVExWKGtl
eURhdGEsCisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlJbmZvVExWLnZhbHVlT2Zmc2V0KCkgKyBh
bGdvcml0aG1JZGVudGlmaWVyVExWLmJ1ZmZlclNpemUpOworICAgIGlmICghc3ViamVjdFB1Ymxp
Y0tleVRMVi5idWZmZXJTaXplIHx8ICFzdWJqZWN0UHVibGljS2V5VExWLmhhc1RhZyhBU04xOjpU
YWc6OkJpdFN0cmluZykKKyAgICAgICAgfHwga2V5RGF0YVtzdWJqZWN0UHVibGljS2V5VExWLnZh
bHVlT2Zmc2V0KCldICE9IDB4MDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8g
UlNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgLy8gICBtb2R1bHVzICAgICAgICAgICBJ
TlRFR0VSLCAgLS0gbgorICAgIC8vICAgcHVibGljRXhwb25lbnQgICAgSU5URUdFUiAgIC0tIGUK
KyAgICAvLyB9CisgICAgYXV0byByc2FQdWJsaWNLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlE
YXRhLCBzdWJqZWN0UHVibGljS2V5VExWLnZhbHVlT2Zmc2V0KCkgKyAxKTsKKyAgICBpZiAoIXJz
YVB1YmxpY0tleVRMVi5idWZmZXJTaXplIHx8ICFyc2FQdWJsaWNLZXlUTFYuaGFzVGFnKEFTTjE6
OlRhZzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTTjE6OlRM
ViBtb2R1bHVzVExWOworICAgIEFTTjE6OlRMViBwdWJsaWNFeHBvbmVudFRMVjsKKyAgICB7Cisg
ICAgICAgIHNpemVfdCBvZmZzZXQgPSByc2FQdWJsaWNLZXlUTFYudmFsdWVPZmZzZXQoKTsKKyAg
ICAgICAgbW9kdWx1c1RMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIG9mZnNldCk7CisgICAg
ICAgIGlmICghbW9kdWx1c1RMVi5idWZmZXJTaXplIHx8ICFtb2R1bHVzVExWLmhhc1RhZyhBU04x
OjpUYWc6OkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
b2Zmc2V0ICs9IG1vZHVsdXNUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgcHVibGljRXhwb25lbnRU
TFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIXB1Ymxp
Y0V4cG9uZW50VExWLmJ1ZmZlclNpemUgfHwgIXB1YmxpY0V4cG9uZW50VExWLmhhc1RhZyhBU04x
OjpUYWc6OkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
aWYgKG1vZHVsdXNUTFYuYnVmZmVyU2l6ZSArIHB1YmxpY0V4cG9uZW50VExWLmJ1ZmZlclNpemUg
IT0gcnNhUHVibGljS2V5VExWLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIGF1dG8gYXBwZW5kQVNOMURhdGEgPQorICAgICAgICBbXShTdHJpbmdCdWls
ZGVyJiBidWlsZGVyLCBjb25zdCBBU04xOjpUTFYmIHRsdiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlEYXRhKSB7CisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gdGx2LnZhbHVlT2Zmc2V0
KCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRsdi5sZW5ndGg7ICsraSkK
KyAgICAgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoa2V5RGF0YVtvZmZzZXQgKyBpXSwgYnVp
bGRlcik7CisgICAgICAgIH07CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90
PiBwbGF0Zm9ybUtleTsKKyAgICB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIocHVibGljLWtleShyc2EobiAjIik7CisgICAg
ICAgIGFwcGVuZEFTTjFEYXRhKGJ1aWxkZXIsIG1vZHVsdXNUTFYsIGtleURhdGEpOworICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMpKGUgIyIpOworICAgICAgICBhcHBlbmRBU04xRGF0
YShidWlsZGVyLCBwdWJsaWNFeHBvbmVudFRMViwga2V5RGF0YSk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIykpKSIpOworCisgICAgICAgIFN0cmluZyBzRXhwcmVzc2lvbiA9IGJ1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyBzRXhwcmVzc2lvbkNTdHJpbmcgPSBz
RXhwcmVzc2lvbi51dGY4KCk7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4
cF9uZXcoJnBsYXRmb3JtS2V5LCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lv
bkNTdHJpbmcubGVuZ3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIs
IGVycm9yLCBnY3J5X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlSU0EoaWRlbnRpZmllciwgaGFzaC52YWx1ZV9vcihDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgQ3J5cHRvS2V5VHlwZTo6UHVi
bGljLCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTs7CiB9CiAK
IEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRTcGtpKCkg
Y29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICh0eXBlKCkgIT0gQ3J5cHRv
S2V5VHlwZTo6UHVibGljKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9ueyBJTlZBTElEX0FDQ0VT
U19FUlIgfTsKKworICAgIGF1dG8gYXBwZW5kTGVuZ3RoID0KKyAgICAgICAgW10oc2l6ZV90IGxl
bmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGgg
PiAxMjcpIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGxlbmd0aEJ5dGVzID0gc3RkOjpjZWls
KHN0ZDo6bG9nMihsZW5ndGggKyAxKSAvIDgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoMHg4MCB8IGxlbmd0aEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9
IDA7IGkgPCBsZW5ndGhCeXRlczsgKytpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKChsZW5ndGggPj4gKChsZW5ndGhCeXRlcyAtIGkgLSAxKSAqIDgpICYgMHhmZikpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsZW5ndGgpOwor
ICAgICAgICB9OworCisgICAgLy8gU3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0Ug
IHsKKyAgICAvLyAgIGFsZ29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisg
ICAgLy8gICBzdWJqZWN0UHVibGljS2V5ICAgICBCSVQgU1RSSU5HICB9CisKKworICAgIC8vIEFs
Z29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgICBhbGdvcml0aG0g
ICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0ZXJzICBBTlkgREVGSU5FRCBC
WSBhbGdvcml0aG0gT1BUSU9OQUwKKyAgICAvLyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGFsZ29y
aXRobUlkZW50aWZpZXJEYXRhOworICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJy
YXk8dWludDhfdCwgOT4gc19yc2FFbmNyeXB0aW9ueyB7IDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYs
IDB4ZjcsIDB4MGQsIDB4MDEsIDB4MDEsIDB4MDEgfSB9OworCisgICAgICAgIGFsZ29yaXRobUlk
ZW50aWZpZXJEYXRhLmFwcGVuZCgweDMwKTsKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRh
dGEuYXBwZW5kKDIgKyBzX3JzYUVuY3J5cHRpb24uc2l6ZSgpICsgMik7CisKKyAgICAgICAgLy8g
YWxnb3JpdGhtCisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVuZCgweDA2KTsK
KyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKHNfcnNhRW5jcnlwdGlvbi5z
aXplKCkpOworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoc19yc2FFbmNy
eXB0aW9uLmRhdGEoKSwgc19yc2FFbmNyeXB0aW9uLnNpemUoKSk7CisKKyAgICAgICAgLy8gcGFy
YW1ldGVycworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgwNSk7Cisg
ICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVuZCgweDAwKTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gc3ViamVjdFB1YmxpY0tleURhdGE7CisgICAgeworICAgICAgICAv
LyBSU0FQdWJsaWNLZXkgOjo9IFNFUVVFTkNFIHsKKyAgICAgICAgLy8gICBtb2R1bHVzICAgICAg
ICAgICBJTlRFR0VSLCAgLS0gbgorICAgICAgICAvLyAgIHB1YmxpY0V4cG9uZW50ICAgIElOVEVH
RVIgICAtLSBlCisgICAgICAgIC8vIH0KKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJzYVB1Ymxp
Y0tleURhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVyRGF0YSA9Cisg
ICAgICAgICAgICAgICAgWyZhcHBlbmRMZW5ndGhdKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNo
YXIqIG5hbWUpIC0+IFZlY3Rvcjx1aW50OF90PiB7CisgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBwYXJhbWV0ZXIgPSBnZXRSU0FLZXlQYXJhbWV0ZXIoc2V4cCwgbmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBwYXJhbWV0ZXJbMF0gJiAweDgwOwor
CisgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgICAgICAgICAg
ICAgICAgICBkYXRhLmFwcGVuZCgweDAyKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kTGVu
Z3RoKHBhcmFtZXRlci5zaXplKCkgKyAobmVnYXRpdmUgPyAxIDogMCksIGRhdGEpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LmFwcGVuZCgweDAwKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmRWZWN0b3IocGFy
YW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgYXV0byBuRGF0YSA9IHBhcmFtZXRlckRhdGEobV9wbGF0Zm9y
bUtleSwgIm4iKTsKKyAgICAgICAgICAgIGF1dG8gZURhdGEgPSBwYXJhbWV0ZXJEYXRhKG1fcGxh
dGZvcm1LZXksICJlIik7CisKKyAgICAgICAgICAgIHJzYVB1YmxpY0tleURhdGEuYXBwZW5kKDB4
MzApOworICAgICAgICAgICAgYXBwZW5kTGVuZ3RoKG5EYXRhLnNpemUoKSArIGVEYXRhLnNpemUo
KSwgcnNhUHVibGljS2V5RGF0YSk7CisKKyAgICAgICAgICAgIC8vIG1vZHVsdXMKKyAgICAgICAg
ICAgIHJzYVB1YmxpY0tleURhdGEuYXBwZW5kVmVjdG9yKG5EYXRhKTsKKyAgICAgICAgICAgIC8v
IHB1YmxpY0V4cG9uZW50CisgICAgICAgICAgICByc2FQdWJsaWNLZXlEYXRhLmFwcGVuZFZlY3Rv
cihlRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBzdWJqZWN0UHVibGljS2V5RGF0YS5hcHBl
bmQoMHgwMyk7CisgICAgICAgIGFwcGVuZExlbmd0aCgxICsgcnNhUHVibGljS2V5RGF0YS5zaXpl
KCksIHN1YmplY3RQdWJsaWNLZXlEYXRhKTsKKyAgICAgICAgc3ViamVjdFB1YmxpY0tleURhdGEu
YXBwZW5kKDB4MDApOworICAgICAgICBzdWJqZWN0UHVibGljS2V5RGF0YS5hcHBlbmRWZWN0b3Io
cnNhUHVibGljS2V5RGF0YSk7CisgICAgfQogCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9T
VVBQT1JURURfRVJSIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKKyAgICByZXN1bHQu
YXBwZW5kKDB4MzApOworICAgIGFwcGVuZExlbmd0aChhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5z
aXplKCkgKyBzdWJqZWN0UHVibGljS2V5RGF0YS5zaXplKCksIHJlc3VsdCk7CisgICAgcmVzdWx0
LmFwcGVuZFZlY3RvcihhbGdvcml0aG1JZGVudGlmaWVyRGF0YSk7CisgICAgcmVzdWx0LmFwcGVu
ZFZlY3RvcihzdWJqZWN0UHVibGljS2V5RGF0YSk7CisKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1
bHQpOwogfQogCi1SZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcj4sIFZlY3Rvcjx1aW50OF90PiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJpdG1h
cCkKK1JlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI+IGhhc2gsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wgZXh0
cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIC8vIFByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgLy8gICB2
ZXJzaW9uICAgICAgICAgICAgICAgICAgIFZlcnNpb24sCisgICAgLy8gICBwcml2YXRlS2V5QWxn
b3JpdGhtICAgICAgIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyLAorICAgIC8vICAgcHJp
dmF0ZUtleSAgICAgICAgICAgICAgICBQcml2YXRlS2V5LAorICAgIC8vICAgYXR0cmlidXRlcyAg
ICAgICAgICAgWzBdICBJTVBMSUNJVCBBdHRyaWJ1dGVzIE9QVElPTkFMIH0KKyAgICBhdXRvIHBy
aXZhdGVLZXlJbmZvVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgMCk7CisgICAgaWYgKCFw
cml2YXRlS2V5SW5mb1RMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlS2V5SW5mb1RMVi5oYXNUYWco
QVNOMTo6VGFnOjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChw
cml2YXRlS2V5SW5mb1RMVi5idWZmZXJTaXplICE9IGtleURhdGEuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFZlcnNpb24gOjo9IElOVEVHRVIKKyAgICBhdXRvIHZl
cnNpb25UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBwcml2YXRlS2V5SW5mb1RMVi52YWx1
ZU9mZnNldCgpKTsKKyAgICBpZiAoIXZlcnNpb25UTFYuYnVmZmVyU2l6ZSB8fCAhdmVyc2lvblRM
Vi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKHZlcnNpb25UTFYubGVuZ3RoICE9IDEgJiYga2V5RGF0YVt2ZXJzaW9uVExWLnZhbHVl
T2Zmc2V0KCldICE9IDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gUHJpdmF0
ZUtleUFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAvLyBB
bGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGht
ICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQg
QlkgYWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIGF1dG8gcHJpdmF0ZUtleUFsZ29y
aXRobVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsCisgICAgICAgIHByaXZhdGVLZXlJbmZv
VExWLnZhbHVlT2Zmc2V0KCkgKyB2ZXJzaW9uVExWLmJ1ZmZlclNpemUpOworICAgIGlmICghcHJp
dmF0ZUtleUFsZ29yaXRobVRMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlS2V5QWxnb3JpdGhtVExW
Lmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIGFsZ29yaXRobVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIHByaXZhdGVL
ZXlBbGdvcml0aG1UTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCFhbGdvcml0aG1UTFYuYnVm
ZmVyU2l6ZSB8fCAhYWxnb3JpdGhtVExWLmhhc1RhZyhBU04xOjpUYWc6Ok9iamVjdElkZW50aWZp
ZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VwcG9ydGVkQWxnb3Jp
dGhtID0gYWxnb3JpdGhtRm9ySWRlbnRpZmllcihrZXlEYXRhLmRhdGEoKSArIGFsZ29yaXRobVRM
Vi52YWx1ZU9mZnNldCgpLCBhbGdvcml0aG1UTFYubGVuZ3RoKTsKKyAgICBpZiAoIXN1cHBvcnRl
ZEFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBQcml2YXRlS2V5
IDo6PSBPQ1RFVCBTVFJJTkcKKyAgICBhdXRvIHByaXZhdGVLZXlUTFYgPSBBU04xOjpwYXJzZVRM
VihrZXlEYXRhLAorICAgICAgICBwcml2YXRlS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpICsgdmVy
c2lvblRMVi5idWZmZXJTaXplICsgcHJpdmF0ZUtleUFsZ29yaXRobVRMVi5idWZmZXJTaXplKTsK
KyAgICBpZiAoIXByaXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhcHJpdmF0ZUtleVRMVi5oYXNU
YWcoQVNOMTo6VGFnOjpPY3RldFN0cmluZykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgLy8gUlNBUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgIC8vICAgICB2ZXJzaW9uICAg
ICAgICAgICBWZXJzaW9uLAorICAgIC8vICAgICBtb2R1bHVzICAgICAgICAgICBJTlRFR0VSLCAg
LS0gbgorICAgIC8vICAgICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSLCAgLS0gZQorICAgIC8v
ICAgICBwcml2YXRlRXhwb25lbnQgICBJTlRFR0VSLCAgLS0gZAorICAgIC8vICAgICBwcmltZTEg
ICAgICAgICAgICBJTlRFR0VSLCAgLS0gcAorICAgIC8vICAgICBwcmltZTIgICAgICAgICAgICBJ
TlRFR0VSLCAgLS0gcQorICAgIC8vICAgICBleHBvbmVudDEgICAgICAgICBJTlRFR0VSLCAgLS0g
ZCBtb2QgKHAtMSkKKyAgICAvLyAgICAgZXhwb25lbnQyICAgICAgICAgSU5URUdFUiwgIC0tIGQg
bW9kIChxLTEpCisgICAgLy8gICAgIGNvZWZmaWNpZW50ICAgICAgIElOVEVHRVIsICAtLSAoaW52
ZXJzZSBvZiBxKSBtb2QgcAorICAgIC8vICAgICBvdGhlclByaW1lSW5mb3MgICBPdGhlclByaW1l
SW5mb3MgT1BUSU9OQUwKKyAgICAvLyB9CisgICAgYXV0byByc2FQcml2YXRlS2V5VExWID0gQVNO
MTo6cGFyc2VUTFYoa2V5RGF0YSwgcHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNldCgpKTsKKyAgICBp
ZiAoIXJzYVByaXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhcnNhUHJpdmF0ZUtleVRMVi5oYXNU
YWcoQVNOMTo6VGFnOjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
QVNOMTo6VExWIG1vZHVsdXNUTFY7CisgICAgQVNOMTo6VExWIHB1YmxpY0V4cG9uZW50VExWOwor
ICAgIEFTTjE6OlRMViBwcml2YXRlRXhwb25lbnRUTFY7CisgICAgQVNOMTo6VExWIHByaW1lMVRM
VjsKKyAgICBBU04xOjpUTFYgcHJpbWUyVExWOworICAgIEFTTjE6OlRMViBleHBvbmVudDFUTFY7
CisgICAgQVNOMTo6VExWIGV4cG9uZW50MlRMVjsKKyAgICBBU04xOjpUTFYgY29lZmZpY2llbnRU
TFY7CisgICAgeworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcnNhUHJpdmF0ZUtleVRMVi52YWx1
ZU9mZnNldCgpOworICAgICAgICBhdXRvIHZlcnNpb25UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlE
YXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIXZlcnNpb25UTFYuYnVmZmVyU2l6ZSB8fCAhdmVy
c2lvblRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBpZiAodmVyc2lvblRMVi5sZW5ndGggIT0gMSB8fCBrZXlEYXRhW3Zl
cnNpb25UTFYudmFsdWVPZmZzZXQoKV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIG9mZnNldCArPSB2ZXJzaW9uVExWLmJ1ZmZlclNpemU7CisgICAgICAgIG1v
ZHVsdXNUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAo
IW1vZHVsdXNUTFYuYnVmZmVyU2l6ZSB8fCAhbW9kdWx1c1RMVi5oYXNUYWcoQVNOMTo6VGFnOjpJ
bnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCAr
PSBtb2R1bHVzVExWLmJ1ZmZlclNpemU7CisgICAgICAgIHB1YmxpY0V4cG9uZW50VExWID0gQVNO
MTo6cGFyc2VUTFYoa2V5RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwdWJsaWNFeHBvbmVu
dFRMVi5idWZmZXJTaXplIHx8ICFwdWJsaWNFeHBvbmVudFRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJ
bnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCAr
PSBwdWJsaWNFeHBvbmVudFRMVi5idWZmZXJTaXplOworICAgICAgICBwcml2YXRlRXhwb25lbnRU
TFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIXByaXZh
dGVFeHBvbmVudFRMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlRXhwb25lbnRUTFYuaGFzVGFnKEFT
TjE6OlRhZzo6SW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBvZmZzZXQgKz0gcHJpdmF0ZUV4cG9uZW50VExWLmJ1ZmZlclNpemU7CisgICAgICAgIHByaW1l
MVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIG9mZnNldCk7CisgICAgICAgIGlmICghcHJp
bWUxVExWLmJ1ZmZlclNpemUgfHwgIXByaW1lMVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2Vy
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBwcmlt
ZTFUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgcHJpbWUyVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5
RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwcmltZTJUTFYuYnVmZmVyU2l6ZSB8fCAhcHJp
bWUyVExWLmhhc1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgb2Zmc2V0ICs9IHByaW1lMlRMVi5idWZmZXJTaXplOworICAgICAg
ICBleHBvbmVudDFUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAg
ICBpZiAoIWV4cG9uZW50MVRMVi5idWZmZXJTaXplIHx8ICFleHBvbmVudDFUTFYuaGFzVGFnKEFT
TjE6OlRhZzo6SW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBvZmZzZXQgKz0gZXhwb25lbnQxVExWLmJ1ZmZlclNpemU7CisgICAgICAgIGV4cG9uZW50MlRM
ViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIG9mZnNldCk7CisgICAgICAgIGlmICghZXhwb25l
bnQyVExWLmJ1ZmZlclNpemUgfHwgIWV4cG9uZW50MlRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRl
Z2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBl
eHBvbmVudDJUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgY29lZmZpY2llbnRUTFYgPSBBU04xOjpw
YXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIWNvZWZmaWNpZW50VExWLmJ1
ZmZlclNpemUgfHwgIWNvZWZmaWNpZW50VExWLmhhc1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBm
b3IgT3RoZXJQcmltZUluZm9zLgorCisgICAgICAgIHNpemVfdCBidWZmZXJTaXplU3VtID0gdmVy
c2lvblRMVi5idWZmZXJTaXplICsgbW9kdWx1c1RMVi5idWZmZXJTaXplICsgcHVibGljRXhwb25l
bnRUTFYuYnVmZmVyU2l6ZSArIHByaXZhdGVFeHBvbmVudFRMVi5idWZmZXJTaXplCisgICAgICAg
ICAgICArIHByaW1lMVRMVi5idWZmZXJTaXplICsgcHJpbWUyVExWLmJ1ZmZlclNpemUgKyBleHBv
bmVudDFUTFYuYnVmZmVyU2l6ZSArIGV4cG9uZW50MlRMVi5idWZmZXJTaXplICsgY29lZmZpY2ll
bnRUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgaWYgKGJ1ZmZlclNpemVTdW0gIT0gcnNhUHJpdmF0
ZUtleVRMVi5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAKLSAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBWZWN0b3I8dWludDhfdD4gdURhdGE7CisgICAgeworICAg
ICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHBNUEk7CisgICAgICAgIGdjcnlf
ZXJyb3JfdCBlcnJvciA9IGdjcnlfbXBpX3NjYW4oJnBNUEksIEdDUllNUElfRk1UX1VTRywga2V5
RGF0YS5kYXRhKCkgKyBwcmltZTFUTFYudmFsdWVPZmZzZXQoKSwgcHJpbWUxVExWLmxlbmd0aCwg
bnVsbHB0cik7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5
X21waV90PiBxTVBJOworICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3NjYW4oJnFNUEksIEdDUllN
UElfRk1UX1VTRywga2V5RGF0YS5kYXRhKCkgKyBwcmltZTJUTFYudmFsdWVPZmZzZXQoKSwgcHJp
bWUyVExWLmxlbmd0aCwgbnVsbHB0cik7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05P
X0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgUEFMOjpHQ3J5
cHQ6OkhhbmRsZTxnY3J5X21waV90PiBxaU1QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwgMCkp
OworICAgICAgICBnY3J5X21waV9pbnZtKHFpTVBJLCBxTVBJLCBwTVBJKTsKKyAgICAgICAgdURh
dGEgPSBnZXRQYXJhbWV0ZXJNUElEYXRhKHFpTVBJKTsKKyAgICB9CisKKyAgICBhdXRvIGFwcGVu
ZEFTTjFEYXRhID0KKyAgICAgICAgW10oU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgQVNO
MTo6VExWJiB0bHYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5RGF0YSkgeworICAgICAgICAg
ICAgc2l6ZV90IG9mZnNldCA9IHRsdi52YWx1ZU9mZnNldCgpOworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB0bHYubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYXBwZW5k
Qnl0ZUFzSGV4KGtleURhdGFbb2Zmc2V0ICsgaV0sIGJ1aWxkZXIpOworICAgICAgICB9OworCisg
ICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4ga2V5U2V4cDsKKyAgICB7CisgICAg
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIocHJpdmF0ZS1rZXkocnNhKG4gIyIpOworICAgICAgICBhcHBlbmRBU04xRGF0YShidWlsZGVy
LCBtb2R1bHVzVExWLCBrZXlEYXRhKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIj
KShlICMiKTsKKyAgICAgICAgYXBwZW5kQVNOMURhdGEoYnVpbGRlciwgcHVibGljRXhwb25lbnRU
TFYsIGtleURhdGEpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMpKGQgIyIpOwor
ICAgICAgICBhcHBlbmRBU04xRGF0YShidWlsZGVyLCBwcml2YXRlRXhwb25lbnRUTFYsIGtleURh
dGEpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiMpKHAgIyIpOworICAgICAgICBh
cHBlbmRBU04xRGF0YShidWlsZGVyLCBwcmltZTJUTFYsIGtleURhdGEpOworICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiMpKHEgIyIpOworICAgICAgICBhcHBlbmRBU04xRGF0YShidWls
ZGVyLCBwcmltZTFUTFYsIGtleURhdGEpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IiMpKHUgIyIpOworICAgICAgICBmb3IgKGF1dG8gYnl0ZSA6IHVEYXRhKQorICAgICAgICAgICAg
YXBwZW5kQnl0ZUFzSGV4KGJ5dGUsIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiMpKSkiKTsKKworICAgICAgICBTdHJpbmcgc0V4cHJlc3Npb24gPSBidWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgICAgIENTdHJpbmcgc0V4cHJlc3Npb25DU3RyaW5nID0gc0V4cHJlc3Np
b24udXRmOCgpOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3NleHBfbmV3KCZr
ZXlTZXhwLCBzRXhwcmVzc2lvbkNTdHJpbmcuZGF0YSgpLCBzRXhwcmVzc2lvbkNTdHJpbmcubGVu
Z3RoKCksIDEpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCwgJXMvJXNcbiIsIGVycm9yLCBnY3J5
X3N0cnNvdXJjZShlcnJvciksIGdjcnlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDcnlwdG9LZXlSU0EoaWRlbnRpZmllciwgaGFzaC52YWx1ZV9vcihDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSwga2V5U2V4
cC5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTsKIH0KIAogRXhjZXB0aW9uT3I8VmVj
dG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlSU0E6OmV4cG9ydFBrY3M4KCkgY29uc3QKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGlmICh0eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0
ZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisKKyAg
ICBhdXRvIGFwcGVuZExlbmd0aCA9CisgICAgICAgIFtdKHNpemVfdCBsZW5ndGgsIFZlY3Rvcjx1
aW50OF90PiYgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gMTI3KSB7CisgICAg
ICAgICAgICAgICAgdWludDhfdCBsZW5ndGhCeXRlcyA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIobGVu
Z3RoICsgMSkgLyA4KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDB4ODAgfCBsZW5n
dGhCeXRlcyk7CisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbGVuZ3Ro
Qnl0ZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgobGVuZ3RoID4+
ICgobGVuZ3RoQnl0ZXMgLSBpIC0gMSkgKiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgfTsKKwor
ICAgIC8vIFByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgLy8gICB2ZXJzaW9uICAg
ICAgICAgICAgICAgICAgIFZlcnNpb24sCisgICAgLy8gICBwcml2YXRlS2V5QWxnb3JpdGhtICAg
ICAgIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyLAorICAgIC8vICAgcHJpdmF0ZUtleSAg
ICAgICAgICAgICAgICBQcml2YXRlS2V5LAorICAgIC8vICAgYXR0cmlidXRlcyAgICAgICAgICAg
WzBdICBJTVBMSUNJVCBBdHRyaWJ1dGVzIE9QVElPTkFMIH0KKworICAgIC8vIFZlcnNpb24gOjo9
IElOVEVHRVIKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAzPiBzX3ZlcnNp
b25EYXRheyB7IDB4MDIsIDB4MDEsIDB4MDAgfSB9OworCisKKyAgICAvLyBQcml2YXRlS2V5QWxn
b3JpdGhtSWRlbnRpZmllciA6Oj0gQWxnb3JpdGhtSWRlbnRpZmllcgorICAgIC8vIEFsZ29yaXRo
bUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgICBhbGdvcml0aG0gICBPQkpF
Q1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0ZXJzICBBTlkgREVGSU5FRCBCWSBhbGdv
cml0aG0gT1BUSU9OQUwKKyAgICAvLyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlB
bGdvcml0aG1EYXRhOworICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgOT4gc19yc2FFbmNyeXB0aW9ueyB7IDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4Zjcs
IDB4MGQsIDB4MDEsIDB4MDEsIDB4MDEgfSB9OworCisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0
aG1EYXRhLmFwcGVuZCgweDMwKTsKKyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEuYXBw
ZW5kKDIgKyBzX3JzYUVuY3J5cHRpb24uc2l6ZSgpICsgMik7CisKKyAgICAgICAgcHJpdmF0ZUtl
eUFsZ29yaXRobURhdGEuYXBwZW5kKDB4MDYpOworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGht
RGF0YS5hcHBlbmQoc19yc2FFbmNyeXB0aW9uLnNpemUoKSk7CisgICAgICAgIHByaXZhdGVLZXlB
bGdvcml0aG1EYXRhLmFwcGVuZChzX3JzYUVuY3J5cHRpb24uZGF0YSgpLCBzX3JzYUVuY3J5cHRp
b24uc2l6ZSgpKTsKKworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoMHgw
NSk7CisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFwcGVuZCgweDAwKTsKKyAgICB9
CisKKyAgICAvLyBQcml2YXRlS2V5IDo6PSBPQ1RFVCBTVFJJTkcKKyAgICBWZWN0b3I8dWludDhf
dD4gcHJpdmF0ZUtleURhdGE7CisgICAgeworICAgICAgICAvLyBSU0FQcml2YXRlS2V5IDo6PSBT
RVFVRU5DRSB7CisgICAgICAgIC8vICAgICB2ZXJzaW9uICAgICAgICAgICBWZXJzaW9uLAorICAg
ICAgICAvLyAgICAgbW9kdWx1cyAgICAgICAgICAgSU5URUdFUiwgIC0tIG4KKyAgICAgICAgLy8g
ICAgIHB1YmxpY0V4cG9uZW50ICAgIElOVEVHRVIsICAtLSBlCisgICAgICAgIC8vICAgICBwcml2
YXRlRXhwb25lbnQgICBJTlRFR0VSLCAgLS0gZAorICAgICAgICAvLyAgICAgcHJpbWUxICAgICAg
ICAgICAgSU5URUdFUiwgIC0tIHAKKyAgICAgICAgLy8gICAgIHByaW1lMiAgICAgICAgICAgIElO
VEVHRVIsICAtLSBxCisgICAgICAgIC8vICAgICBleHBvbmVudDEgICAgICAgICBJTlRFR0VSLCAg
LS0gZCBtb2QgKHAtMSkKKyAgICAgICAgLy8gICAgIGV4cG9uZW50MiAgICAgICAgIElOVEVHRVIs
ICAtLSBkIG1vZCAocS0xKQorICAgICAgICAvLyAgICAgY29lZmZpY2llbnQgICAgICAgSU5URUdF
UiwgIC0tIChpbnZlcnNlIG9mIHEpIG1vZCBwCisgICAgICAgIC8vICAgICBvdGhlclByaW1lSW5m
b3MgICBPdGhlclByaW1lSW5mb3MgT1BUSU9OQUwKKyAgICAgICAgLy8gfQorICAgICAgICBWZWN0
b3I8dWludDhfdD4gcnNhUHJpdmF0ZUtleURhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gcGFyYW1ldGVyRGF0YSA9CisgICAgICAgICAgICAgICAgWyZhcHBlbmRMZW5ndGhdKGdjcnlf
c2V4cF90IHNleHAsIGNvbnN0IGNoYXIqIG5hbWUpIC0+IFZlY3Rvcjx1aW50OF90PiB7CisgICAg
ICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBwYXJhbWV0ZXIgPSBnZXRSU0FLZXlQYXJh
bWV0ZXIoc2V4cCwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBw
YXJhbWV0ZXJbMF0gJiAweDgwOworCisgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOworICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgweDAyKTsKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kTGVuZ3RoKHBhcmFtZXRlci5zaXplKCkgKyAobmVnYXRpdmUgPyAx
IDogMCksIGRhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgweDAwKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YS5hcHBlbmRWZWN0b3IocGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGE7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgYXV0byBuRGF0YSA9IHBh
cmFtZXRlckRhdGEobV9wbGF0Zm9ybUtleSwgIm4iKTsKKyAgICAgICAgICAgIGF1dG8gZURhdGEg
PSBwYXJhbWV0ZXJEYXRhKG1fcGxhdGZvcm1LZXksICJlIik7CisgICAgICAgICAgICBhdXRvIGRE
YXRhID0gcGFyYW1ldGVyRGF0YShtX3BsYXRmb3JtS2V5LCAiZCIpOworICAgICAgICAgICAgYXV0
byBwRGF0YSA9IHBhcmFtZXRlckRhdGEobV9wbGF0Zm9ybUtleSwgInEiKTsKKyAgICAgICAgICAg
IGF1dG8gcURhdGEgPSBwYXJhbWV0ZXJEYXRhKG1fcGxhdGZvcm1LZXksICJwIik7CisKKyAgICAg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiBkcERhdGE7CisgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4gZHFEYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHFpRGF0YTsKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGdldE1QSSA9CisgICAgICAgICAgICAgICAgICAg
IFtdKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNoYXIqIG5hbWUpIC0+IGdjcnlfbXBpX3Qgewor
ICAgICAgICAgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4g
cGFyYW1TZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKHNleHAsIG5hbWUsIDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghcGFyYW1TZXhwKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdjcnlf
c2V4cF9udGhfbXBpKHBhcmFtU2V4cCwgMSwgR0NSWU1QSV9GTVRfVVNHKTsKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gZXh0cmFjdERhdGEgPQorICAgICAg
ICAgICAgICAgICAgICBbXShnY3J5X21waV90IHBhcmFtTVBJKSAtPiBWZWN0b3I8dWludDhfdD4g
eworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgICAg
ICAgICAgICAgICAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NS
WU1QSV9GTVRfVVNHLCBudWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgcGFyYW1NUEkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBvdXRwdXQuZGF0
YSgpLCBvdXRwdXQuc2l6ZSgpLCBudWxscHRyLCBwYXJhbU1QSSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQsICVzLyVzXG4iLCBlcnJvciwg
Z2NyeV9zdHJzb3VyY2UoZXJyb3IpLCBnY3J5X3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlf
dD4gZE1QSShnZXRNUEkobV9wbGF0Zm9ybUtleSwgImQiKSk7CisgICAgICAgICAgICAgICAgUEFM
OjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBwTVBJKGdldE1QSShtX3BsYXRmb3JtS2V5LCAi
cSIpKTsKKyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHFN
UEkoZ2V0TVBJKG1fcGxhdGZvcm1LZXksICJwIikpOworCisgICAgICAgICAgICAgICAgLy8gZHAK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5k
bGU8Z2NyeV9tcGlfdD4gZHBNUEkoZ2NyeV9tcGlfc2V0X3VpKG51bGxwdHIsIDApKTsKKyAgICAg
ICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBwbTFNUEkoZ2Ny
eV9tcGlfc2V0KG51bGxwdHIsIHBNUEkpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlf
c3ViX3VpKHBtMU1QSSwgcG0xTVBJLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlf
bW9kKGRwTVBJLCBkTVBJLCBwbTFNUEkpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZHAg
PSBleHRyYWN0RGF0YShkcE1QSSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUg
PSBkcFswXSAmIDB4ODA7CisKKyAgICAgICAgICAgICAgICAgICAgZHBEYXRhLmFwcGVuZCgweDAy
KTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kTGVuZ3RoKGRwLnNpemUoKSArIChuZWdhdGl2
ZSA/IDEgOiAwKSwgZHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZHBEYXRhLmFwcGVuZCgweDAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgZHBEYXRhLmFwcGVuZFZlY3RvcihkcCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gZHEKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZHFNUEkoZ2NyeV9tcGlfc2V0X3Vp
KG51bGxwdHIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxn
Y3J5X21waV90PiBxbTFNUEkoZ2NyeV9tcGlfc2V0KG51bGxwdHIsIHFNUEkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2NyeV9tcGlfc3ViX3VpKHFtMU1QSSwgcW0xTVBJLCAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2NyeV9tcGlfbW9kKGRxTVBJLCBkTVBJLCBxbTFNUEkpOworCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZHEgPSBleHRyYWN0RGF0YShkcU1QSSk7CisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbmVnYXRpdmUgPSBkcVswXSAmIDB4ODA7CisKKyAgICAgICAgICAgICAgICAg
ICAgZHFEYXRhLmFwcGVuZCgweDAyKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kTGVuZ3Ro
KGRxLnNpemUoKSArIChuZWdhdGl2ZSA/IDEgOiAwKSwgZHFEYXRhKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgZHFEYXRhLmFwcGVu
ZCgweDAwKTsKKyAgICAgICAgICAgICAgICAgICAgZHFEYXRhLmFwcGVuZFZlY3RvcihkcSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gcWkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4g
cWlNUEkoZ2NyeV9tcGlfc2V0X3VpKG51bGxwdHIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2NyeV9tcGlfaW52bShxaU1QSSwgcU1QSSwgcE1QSSk7CisKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBxaSA9IGV4dHJhY3REYXRhKHFpTVBJKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBu
ZWdhdGl2ZSA9IHFpWzBdICYgMHg4MDsKKworICAgICAgICAgICAgICAgICAgICBxaURhdGEuYXBw
ZW5kKDB4MDIpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRMZW5ndGgocWkuc2l6ZSgpICsg
KG5lZ2F0aXZlID8gMSA6IDApLCBxaURhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAobmVn
YXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICBxaURhdGEuYXBwZW5kKDB4MDApOworICAg
ICAgICAgICAgICAgICAgICBxaURhdGEuYXBwZW5kVmVjdG9yKHFpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVu
ZCgweDMwKTsKKyAgICAgICAgICAgIGFwcGVuZExlbmd0aCgzICsgbkRhdGEuc2l6ZSgpICsgZURh
dGEuc2l6ZSgpICsgZERhdGEuc2l6ZSgpICsgcERhdGEuc2l6ZSgpICsgcURhdGEuc2l6ZSgpCisg
ICAgICAgICAgICAgICAgKyBkcERhdGEuc2l6ZSgpICsgZHFEYXRhLnNpemUoKSArIHFpRGF0YS5z
aXplKCksIHJzYVByaXZhdGVLZXlEYXRhKTsKKworICAgICAgICAgICAgLy8gdmVyc2lvbgorICAg
ICAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4MDIpOworICAgICAgICAgICAgcnNh
UHJpdmF0ZUtleURhdGEuYXBwZW5kKDEpOworICAgICAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEu
YXBwZW5kKDB4MDApOworCisgICAgICAgICAgICAvLyBtb2R1bHVzCisgICAgICAgICAgICByc2FQ
cml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IobkRhdGEpOworICAgICAgICAgICAgLy8gcHVibGlj
RXhwb25lbnQKKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3RvcihlRGF0
YSk7CisgICAgICAgICAgICAvLyBwcml2YXRlRXhwb25lbnQKKyAgICAgICAgICAgIHJzYVByaXZh
dGVLZXlEYXRhLmFwcGVuZFZlY3RvcihkRGF0YSk7CisgICAgICAgICAgICAvLyBwcmltZTEKKyAg
ICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3RvcihwRGF0YSk7CisgICAgICAg
ICAgICAvLyBwcmltZTIKKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3Rv
cihxRGF0YSk7CisgICAgICAgICAgICAvLyBleHBvbmVudDEKKyAgICAgICAgICAgIHJzYVByaXZh
dGVLZXlEYXRhLmFwcGVuZFZlY3RvcihkcERhdGEpOworICAgICAgICAgICAgLy8gZXhwb25lbnQy
CisgICAgICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IoZHFEYXRhKTsKKyAg
ICAgICAgICAgIC8vIGNvZWZmaWNpZW50CisgICAgICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5h
cHBlbmRWZWN0b3IocWlEYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGVLZXlEYXRh
LmFwcGVuZCgweDA0KTsKKyAgICAgICAgYXBwZW5kTGVuZ3RoKHJzYVByaXZhdGVLZXlEYXRhLnNp
emUoKSwgcHJpdmF0ZUtleURhdGEpOworICAgICAgICBwcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0
b3IocnNhUHJpdmF0ZUtleURhdGEpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1
bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgweDMwKTsKKyAgICBhcHBlbmRMZW5ndGgoc192ZXJzaW9u
RGF0YS5zaXplKCkgKyBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5zaXplKCkgKyBwcml2YXRlS2V5
RGF0YS5zaXplKCksIHJlc3VsdCk7CisgICAgcmVzdWx0LmFwcGVuZChzX3ZlcnNpb25EYXRhLmRh
dGEoKSwgc192ZXJzaW9uRGF0YS5zaXplKCkpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocHJp
dmF0ZUtleUFsZ29yaXRobURhdGEpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocHJpdmF0ZUtl
eURhdGEpOwogCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Cisg
ICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcEdDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6
ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAppbmRleCA5NDk5ODlmOTRlMS4uOTIyNzkyY2NmYmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0
b0tleVdyYXBHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCkBAIC0yOSwzNSArMjksMTUyIEBACiAjaWYg
RU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8v
Z2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRp
bGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5
cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5KQorYm9vbCBnZXREZWZhdWx0
V2ViQ3J5cHRvTWFzdGVyS2V5KFZlY3Rvcjx1aW50OF90PiYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVyS2V5KTsKLQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCB3cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4m
IG1hc3RlcktleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYg
cmVzdWx0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3Rl
cktleSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtlaygxNik7CisgICAgZ2NyeV9yYW5kb21pemUoa2VrLmRh
dGEoKSwga2VrLnNpemUoKSwgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOwogCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIFZlY3Rvcjx1aW50OF90PiB3cmFwcGVkS0VLKDI0KTsKKyAgICB7CisgICAg
ICAgIGF1dG8gYWxnb3JpdGhtID0gYWVzQWxnb3JpdGhtRm9yS2V5U2l6ZShtYXN0ZXJLZXkuc2l6
ZSgpICogOCk7CisgICAgICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFu
ZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5k
bGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQUVTV1JBUCwgMCk7CisgICAgICAgIGlm
IChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwgbWFzdGVyS2V5LmRh
dGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05P
X0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9yID0gZ2Ny
eV9jaXBoZXJfZW5jcnlwdChoYW5kbGUsIHdyYXBwZWRLRUsuZGF0YSgpLCB3cmFwcGVkS0VLLnNp
emUoKSwga2VrLmRhdGEoKSwga2VrLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdf
RVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFZl
Y3Rvcjx1aW50OF90PiBlbmNyeXB0ZWRLZXkoa2V5LnNpemUoKSk7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRhZygxNik7CisgICAgeworICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lw
aGVyX2hkX3Q+IGhhbmRsZTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBo
ZXJfb3BlbigmaGFuZGxlLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfR0NN
LCAwKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFu
ZGxlLCBrZWsuZGF0YSgpLCBrZWsuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19F
UlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3Ig
PSBnY3J5X2NpcGhlcl9lbmNyeXB0KGhhbmRsZSwgZW5jcnlwdGVkS2V5LmRhdGEoKSwgZW5jcnlw
dGVkS2V5LnNpemUoKSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAgICAgIGlmIChlcnJv
ciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZ2V0dGFnKGhhbmRsZSwgdGFnLmRhdGEoKSwgdGFnLnNp
emUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIG1hZ2ljWzNdICsgdmVyc2lvblsxXSAr
IHdyYXBwZWRLRUtbMjRdICsgZW5jcnlwdGVkS2V5W2xlbmd0aChrZXkpXSArIHRhZ1sxNl0gKyBt
YWdpY1szXQorICAgIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoID0gMyArIDEgKyAyNCArIGVuY3J5
cHRlZEtleS5zaXplKCkgKyAxNiArIDM7CisgICAgcmVzdWx0LnJlc2l6ZShzZXJpYWxpemVkTGVu
Z3RoKTsKKyAgICByZXN1bHRbMF0gPSAweDA0OworICAgIHJlc3VsdFsxXSA9IDB4MDg7CisgICAg
cmVzdWx0WzJdID0gMHgxNTsKKyAgICByZXN1bHRbM10gPSAweDAxOworICAgIHN0ZDo6bWVtY3B5
KHJlc3VsdC5kYXRhKCkgKyA0LCB3cmFwcGVkS0VLLmRhdGEoKSwgMjQpOworICAgIHN0ZDo6bWVt
Y3B5KHJlc3VsdC5kYXRhKCkgKyAyOCwgZW5jcnlwdGVkS2V5LmRhdGEoKSwgZW5jcnlwdGVkS2V5
LnNpemUoKSk7CisgICAgc3RkOjptZW1jcHkocmVzdWx0LmRhdGEoKSArIDI4ICsgZW5jcnlwdGVk
S2V5LnNpemUoKSwgdGFnLmRhdGEoKSwgMTYpOworICAgIHJlc3VsdFtzZXJpYWxpemVkTGVuZ3Ro
IC0gM10gPSAweDE2OworICAgIHJlc3VsdFtzZXJpYWxpemVkTGVuZ3RoIC0gMl0gPSAweDIzOwor
ICAgIHJlc3VsdFtzZXJpYWxpemVkTGVuZ3RoIC0gMV0gPSAweDQyOworCisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIG1hc3RlcktleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5LCBWZWN0
b3I8dWludDhfdD4mIGtleSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9Q
QVJBTShtYXN0ZXJLZXkpOwotICAgIFVOVVNFRF9QQVJBTSh3cmFwcGVkS2V5KTsKLSAgICBVTlVT
RURfUEFSQU0oa2V5KTsKKyAgICAvLyBtYWdpY1szXSArIHZlcnNpb25bMV0gKyB3cmFwcGVkS0VL
WzI0XSArIGVuY3J5cHRlZEtleVtsZW5ndGgoa2V5KV0gKyB0YWdbMTZdICsgbWFnaWNbM10KKyAg
ICBzaXplX3Qgc2VyaWFsaXplZExlbmd0aCA9IHdyYXBwZWRLZXkuc2l6ZSgpOworICAgIGlmIChz
ZXJpYWxpemVkTGVuZ3RoIDwgMyArIDEgKyAyNCArIDE2ICsgMykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHVpbnQ4X3QgbWFnaWMxWzNdID0geyAweDA0
LCAweDA4LCAweDE1IH07CisgICAgaWYgKHN0ZDo6bWVtY21wKHdyYXBwZWRLZXkuZGF0YSgpLCBt
YWdpYzEsIDMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDhfdCBtYWdpYzJbM10g
PSB7IDB4MTYsIDB4MjMsIDB4NDIgfTsKKyAgICBpZiAoc3RkOjptZW1jbXAod3JhcHBlZEtleS5k
YXRhKCkgKyBzZXJpYWxpemVkTGVuZ3RoIC0gMywgbWFnaWMyLCAzKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICh3cmFwcGVkS2V5WzNdICE9IDB4MDEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB3cmFwcGVkS0VLKDI0KTsKKyAgICBzdGQ6Om1l
bWNweSh3cmFwcGVkS0VLLmRhdGEoKSwgd3JhcHBlZEtleS5kYXRhKCkgKyA0LCAyNCk7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gZW5jcnlwdGVkS2V5KHNlcmlhbGl6ZWRMZW5ndGggLSAzIC0gMSAt
IDI0IC0gMTYgLSAzKTsKKyAgICBzdGQ6Om1lbWNweShlbmNyeXB0ZWRLZXkuZGF0YSgpLCB3cmFw
cGVkS2V5LmRhdGEoKSArIDI4LCBlbmNyeXB0ZWRLZXkuc2l6ZSgpKTsKKworICAgIFZlY3Rvcjx1
aW50OF90PiB0YWcoMTYpOworICAgIHN0ZDo6bWVtY3B5KHRhZy5kYXRhKCksIHdyYXBwZWRLZXku
ZGF0YSgpICsgMjggKyBlbmNyeXB0ZWRLZXkuc2l6ZSgpLCAxNik7CisKKyAgICBWZWN0b3I8dWlu
dDhfdD4ga2VrKDE2KTsKKyAgICB7CisgICAgICAgIGF1dG8gYWxnb3JpdGhtID0gYWVzQWxnb3Jp
dGhtRm9yS2V5U2l6ZShtYXN0ZXJLZXkuc2l6ZSgpICogOCk7CisgICAgICAgIGlmICghYWxnb3Jp
dGhtKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFBBTDo6R0NyeXB0OjpI
YW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJy
b3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01P
REVfQUVTV1JBUCwgMCk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJf
c2V0a2V5KGhhbmRsZSwgbWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7CisgICAg
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChoYW5kbGUsIGtlay5k
YXRhKCksIGtlay5zaXplKCksIHdyYXBwZWRLRUsuZGF0YSgpLCB3cmFwcGVkS0VLLnNpemUoKSk7
CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBkZWNyeXB0ZWRLZXkoZW5j
cnlwdGVkS2V5LnNpemUoKSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGFjdHVhbFRhZygxNik7Cisg
ICAgeworICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRs
ZTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxl
LCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfR0NNLCAwKTsKKyAgICAgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBrZWsuZGF0YSgp
LCBrZWsuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9k
ZWNyeXB0KGhhbmRsZSwgZGVjcnlwdGVkS2V5LmRhdGEoKSwgZGVjcnlwdGVkS2V5LnNpemUoKSwg
ZW5jcnlwdGVkS2V5LmRhdGEoKSwgZW5jcnlwdGVkS2V5LnNpemUoKSk7CisgICAgICAgIGlmIChl
cnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZ2V0dGFnKGhhbmRsZSwgYWN0dWFsVGFnLmRhdGEo
KSxhY3R1YWxUYWcuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJS
T1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50
VGltZU1lbWNtcCh0YWcuZGF0YSgpLCBhY3R1YWxUYWcuZGF0YSgpLCAxNikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGtleSA9IFdURk1vdmUoZGVjcnlwdGVkS2V5KTsKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5RUMuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmgK
aW5kZXggZjE4ZDQxNGU3OGIuLjE0Yzk2MTFjMGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUVDLmgKQEAgLTM3LDggKzM3LDggQEAgdHlwZWRlZiBDQ0VDQ3J5cHRvclJl
ZiBQbGF0Zm9ybUVDS2V5OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHN0
cnVjdCBfUGxhdGZvcm1FQ0tleUdudVRMUyBQbGF0Zm9ybUVDS2V5R251VExTOwotdHlwZWRlZiBQ
bGF0Zm9ybUVDS2V5R251VExTICpQbGF0Zm9ybUVDS2V5Oworc3RydWN0IGdjcnlfc2V4cDsKK3R5
cGVkZWYgZ2NyeV9zZXhwKiBQbGF0Zm9ybUVDS2V5OwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuaAppbmRleCAwZjhjZTdjNGZmNS4uZjg5NWRkYjJi
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCkBAIC0zNyw4
ICszNyw4IEBAIHR5cGVkZWYgQ0NSU0FDcnlwdG9yUmVmIFBsYXRmb3JtUlNBS2V5OwogI2VuZGlm
CiAKICNpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHN0cnVjdCBfUGxhdGZvcm1SU0FLZXlHbnVU
TFMgUGxhdGZvcm1SU0FLZXlHbnVUTFM7Ci10eXBlZGVmIFBsYXRmb3JtUlNBS2V5R251VExTICpQ
bGF0Zm9ybVJTQUtleTsKK3N0cnVjdCBnY3J5X3NleHA7Cit0eXBlZGVmIGdjcnlfc2V4cCogUGxh
dGZvcm1SU0FLZXk7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotLSAKMi4xMS4wCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306484</attachid>
            <date>2017-04-07 03:38:12 -0700</date>
            <delta_ts>2017-05-09 10:22:17 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>116573</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">RnJvbSBkZGNiZDJkZDMxMjUyM2FhNDdhMGY4NTUxYTVhZmJhZTUzYjk5N2QxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBaYW4gRG9iZXJzZWsgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgpE
YXRlOiBGcmksIDcgQXByIDIwMTcgMTI6MzQ6MzQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBXSVAu
CgotLS0KIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zICAgICAgICAg
IHwgIDc4ICstLQogU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaCAg
ICAgICAgfCAgNTQgKysKIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9IYW5k
bGUuaCAgICAgIHwgICA4ICsKIC4uLi9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19D
RkJHQ3J5cHQuY3BwIHwgMTM3ICsrKy0KIC4uLi9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRo
bUFFU19DVFJHQ3J5cHQuY3BwIHwgMTQ2ICsrKy0KIC4uLi9jcnlwdG8vZ2NyeXB0L0NyeXB0b0Fs
Z29yaXRobUFFU19HQ01HQ3J5cHQuY3BwIHwgICAyICstCiAuLi4vY3J5cHRvL2djcnlwdC9Dcnlw
dG9BbGdvcml0aG1FQ0RIR0NyeXB0LmNwcCAgICB8ICA4NCArKy0KIC4uLi9DcnlwdG9BbGdvcml0
aG1SU0FFU19QS0NTMV92MV81R0NyeXB0LmNwcCAgICAgIHwgMTI5ICsrKy0KIC4uLi9DcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUdDcnlwdC5jcHAgICAgIHwgMTk0ICsrKysrLQogLi4u
L2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUEdDcnlwdC5jcHAgICAgICAgfCAxNjQgKysr
Ky0KIC4uLi9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlHQ3J5cHQuY3BwICAgICAgIHwg
ICAyICsKIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3Bw
IHwgNDcyICsrKysrKysrKysrKy0KIC4uLi9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5
UlNBR0NyeXB0LmNwcCAgIHwgNzcxICsrKysrKysrKysrKysrKysrKysrLQogLi4uL2djcnlwdC9T
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAgICAgICAgfCAxNDMgKysrLQogMTQgZmls
ZXMgY2hhbmdlZCwgMjIzMiBpbnNlcnRpb25zKCspLCAxNTIgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaAoK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMTk2ODFiNzAy
NWIuLmM5MDJmMWM1MmNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtNzEzLDQ5ICs3MTMsOCBAQCBCdWcoR1RLKSBlZGl0aW5nL3NlY3VyZS1pbnB1dCBb
IEZhaWx1cmUgXQogCiAjIGNyeXB0by5zdWJ0bGUgaXMgbm90IHlldCBlbmFibGVkLCBidXQgZGln
ZXN0IGFsZ29yaXRobXMgYXJlIGFscmVhZHkgaW1wbGVtZW50ZWQKICMgYW5kIHRoZWlyIHRlc3Rz
IGFyZSB3aGl0ZWxpc3RlZAotd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vc3VidGxlIFsgU2tp
cCBdCiB3ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by93ZWJraXRTdWJ0bGUgWyBTa2lwIF0KLXdl
YmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3dvcmtlcnMvc3VidGxlIFsgU2tpcCBdCi1jcnlwdG8v
c3VidGxlL2htYWMtZXhwb3J0LWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stc2hhMS5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stc2hhMjI0
Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3
ay1zaGEyNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWV4cG9y
dC1rZXktandrLXNoYTM4NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJh
dGUtZXhwb3J0LWtleS1qd2stc2hhNTEyLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1h
Yy1nZW5lcmF0ZS1leHBvcnQtcmF3LWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2ht
YWMtZ2VuZXJhdGUta2V5LWN1c3RvbWl6ZWQtbGVuZ3RoLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9z
dWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXktaGFzaC1vYmplY3QuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFz
cyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5LXNoYTEuaHRtbCBbIFBhc3MgXQot
Y3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaGEyMjQuaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaGEyNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaGEzODQuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1
YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaGE1MTIuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRs
ZS9obWFjLWdlbmVyYXRlLWtleS1zaWduLXZlcmlmeS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2htYWMtaW1wb3J0LWp3ay1rZXktZXhwb3J0LWp3ay1rZXkuaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LWV4cG9ydC1yYXcta2V5Lmh0bWwgWyBQYXNz
IF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtandrLWtleS1taW5pbXVtLmh0bWwgWyBQYXNz
IF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtandrLWtleS1ub24tZXh0cmFjdGFibGUuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LXNoYTEuaHRtbCBb
IFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LXNoYTIyNC5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWp3ay1rZXktc2hhMjU2Lmh0bWwgWyBQ
YXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtandrLWtleS1zaGEzODQuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LXNoYTUxMi5odG1sIFsgUGFz
cyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5o
dG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNoYTEuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktc2lnbi1zaGEyMjQuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktc2lnbi1zaGEyNTYuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktc2lnbi1zaGEzODQuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktc2lnbi1zaGE1MTIuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktdmVyaWZ5LXNoYTEuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktdmVyaWZ5LXNoYTIyNC5o
dG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS12ZXJpZnktc2hhMjU2
Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQta2V5LXZlcmlmeS1zaGEz
ODQuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktdmVyaWZ5LXNo
YTUxMi5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LXJhdy1rZXktY3Vz
dG9taXplZC1sZW5ndGguaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1y
YXcta2V5LWV4cG9ydC1qd2sta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1p
bXBvcnQtcmF3LWtleS1leHBvcnQtcmF3LWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxl
L2htYWMtaW1wb3J0LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQorCiB3ZWJraXQub3JnL2IvMTMzMzE5
IGNyeXB0by93ZWJraXRTdWJ0bGUvc2hhLTEuaHRtbCBbIFBhc3MgXQogd2Via2l0Lm9yZy9iLzEz
MzMxOSBjcnlwdG8vd2Via2l0U3VidGxlL3NoYS0yMjQuaHRtbCBbIFBhc3MgXQogd2Via2l0Lm9y
Zy9iLzEzMzMxOSBjcnlwdG8vd2Via2l0U3VidGxlL3NoYS0yNTYuaHRtbCBbIFBhc3MgXQpAQCAt
NzY4LDQyICs3MjcsOSBAQCB3ZWJraXQub3JnL2IvMTMzMzIwIGNyeXB0by93ZWJraXRTdWJ0bGUv
aG1hYy1pbXBvcnQtandrLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xMzMzMjAgY3J5cHRv
L3dlYmtpdFN1YnRsZS9obWFjLXNpZ24tdmVyaWZ5LWVtcHR5LWtleS5odG1sIFsgUGFzcyBdCiB3
ZWJraXQub3JnL2IvMTMzMzIwIGNyeXB0by93ZWJraXRTdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS5o
dG1sIFsgUGFzcyBdCiAKKyMgV2UncmUgYWN0dWFsbHkgcGFzc2luZyBtb3JlIHN1Yi10ZXN0cyBo
ZXJlIHRoYW4gdGhlIGJhc2VsaW5lcyBleHBlY3QuCiB3ZWJraXQub3JnL2IvMTMzMTIyIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC9h
ZXNfY2JjLndvcmtlci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC9h
ZXNfZ2NtLndvcmtlci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC9y
c2Eud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L3Rlc3Rf
YWVzX2NiYy5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC90ZXN0X2Fl
c19nY20uaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9lbmNyeXB0X2RlY3J5cHQvdGVzdF9yc2Ff
b2FlcC5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2dlbmVyYXRlS2V5L2ZhaWx1cmVzX0FFUy1H
Q00ud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvZmFpbHVyZXNf
UlNBLU9BRVAud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvZmFp
bHVyZXNfUlNBU1NBLVBLQ1MxLXYxXzUud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5v
cmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkv
Z2VuZXJhdGVLZXkvc3VjY2Vzc2VzX0FFUy1HQ00ud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdl
YmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlw
dG9BUEkvZ2VuZXJhdGVLZXkvc3VjY2Vzc2VzX1JTQVNTQS1QS0NTMS12MV81Lndvcmtlci5odG1s
IFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2dlbmVyYXRlS2V5L3Rlc3RfZmFpbHVyZXNfQUVTLUdDTS5o
dG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2dlbmVyYXRlS2V5L3Rlc3RfZmFpbHVyZXNfUlNBLU9B
RVAuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS90ZXN0X2ZhaWx1cmVzX1JT
QVNTQS1QS0NTMS12MV81Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkvdGVz
dF9zdWNjZXNzZXNfQUVTLUdDTS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIy
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2dlbmVyYXRlS2V5
L3Rlc3Rfc3VjY2Vzc2VzX1JTQVNTQS1QS0NTMS12MV81Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9B
UEkvaW1wb3J0X2V4cG9ydC9yc2FfaW1wb3J0S2V5Lndvcmtlci5odG1sIFsgRmFpbHVyZSBdCi13
ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5
cHRvQVBJL2ltcG9ydF9leHBvcnQvc3ltbWV0cmljX2ltcG9ydEtleS53b3JrZXIuaHRtbCBbIEZh
aWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1dlYkNyeXB0b0FQSS9pbXBvcnRfZXhwb3J0L3Rlc3RfcnNhX2ltcG9ydEtleS5odG1sIFsg
RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvV2ViQ3J5cHRvQVBJL2ltcG9ydF9leHBvcnQvdGVzdF9zeW1tZXRyaWNfaW1wb3J0S2V5
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvc2lnbl92ZXJpZnkvcnNhX3BrY3Mud29ya2VyLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvc2lnbl92ZXJpZnkvcnNhX3Bzcy53b3JrZXIuaHRtbCBb
IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL1dlYkNyeXB0b0FQSS9zaWduX3ZlcmlmeS90ZXN0X3JzYV9wa2NzLmh0bWwgWyBGYWls
dXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9XZWJDcnlwdG9BUEkvc2lnbl92ZXJpZnkvdGVzdF9yc2FfcHNzLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJD
cnlwdG9BUEkvd3JhcEtleV91bndyYXBLZXkvdGVzdF93cmFwS2V5X3Vud3JhcEtleS5odG1sIFsg
RmFpbHVyZSBdCi0jIFdlIGRvbid0IHN1cHBvcnQgRUNESCBmdW5jdGlvbnMKLXdlYmtpdC5vcmcv
Yi8xNjkyNzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZ2Vu
ZXJhdGVLZXkvZmFpbHVyZXNfRUNESC53b3JrZXIuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9i
LzE2OTI3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5l
cmF0ZUtleS9zdWNjZXNzZXNfRUNESC53b3JrZXIuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9i
LzE2OTI3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5l
cmF0ZUtleS90ZXN0X2ZhaWx1cmVzX0VDREguaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzE2
OTI3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9nZW5lcmF0
ZUtleS90ZXN0X3N1Y2Nlc3Nlc19FQ0RILmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xNjky
NzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvaW1wb3J0X2V4
cG9ydC9lY19pbXBvcnRLZXkud29ya2VyLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xNjky
NzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvaW1wb3J0X2V4
cG9ydC90ZXN0X2VjX2ltcG9ydEtleS5odG1sIFsgU2tpcCBdCi0jIFdlIGRvbid0IHN1cHBvcnQg
UEJLREYyCi13ZWJraXQub3JnL2IvMTY5NTI4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvV2ViQ3J5cHRvQVBJL2Rlcml2ZV9iaXRzX2tleXMvcGJrZGYyLndvcmtlci5odG1sIFsgU2tp
cCBdCi13ZWJraXQub3JnL2IvMTY5NTI4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViQ3J5cHRvQVBJL2Rlcml2ZV9iaXRzX2tleXMvdGVzdF9wYmtkZjIuaHRtbCBbIFNraXAgXQot
CiAKICMgR1RLIGRvZXMgbm90IGltcGxlbWVudCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZAogZWRpdGluZy9pbnNlcnRpbmcvdHlwaW5nLXNwYWNlLXRvLXRyaWdnZXItc21hcnQtbGlu
ay5odG1sIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0
by9nY3J5cHQvQVNOMS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vZ2NyeXB0L0FT
TjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTUxYzVlMTI5M2YK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQv
QVNOMS5oCkBAIC0wLDAgKzEsNTQgQEAKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKworbmFtZXNwYWNlIEFTTjEgeworCitlbnVtIFRhZyA6IHVpbnQ4X3QgeworICAg
IEludGVnZXIgPSAweDAyLAorICAgIEJpdFN0cmluZyA9IDB4MDMsCisgICAgT2N0ZXRTdHJpbmcg
PSAweDA0LAorICAgIE9iamVjdElkZW50aWZpZXIgPSAweDA2LAorICAgIFNlcXVlbmNlID0gMHgz
MCwKK307CisKK3N0cnVjdCBUTFYgeworICAgIHNpemVfdCBidWZmZXJTaXplIHsgMCB9OworICAg
IHNpemVfdCBidWZmZXJPZmZzZXQgeyAwIH07CisKKyAgICB1aW50OF90IHRhZyB7IDAgfTsKKyAg
ICBzaXplX3QgbGVuZ3RoIHsgMCB9OworICAgIHNpemVfdCBvZmZzZXQgeyAwIH07CisKKyAgICBz
aXplX3QgdmFsdWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBidWZmZXJPZmZzZXQgKyBvZmZzZXQ7
IH0KKyAgICBib29sIGhhc1RhZyhUYWcgdGFyZ2V0VGFnKSBjb25zdCB7IHJldHVybiB0YWcgPT0g
c3RhdGljX2Nhc3Q8dWludDhfdD4odGFyZ2V0VGFnKTsgfQorfTsKKworc3RhdGljIFRMViBwYXJz
ZVRMVihjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgY29uc3Qgc2l6ZV90IG9mZnNldCkK
K3sKKyAgICBpZiAob2Zmc2V0ICsgMiA+IGJ1ZmZlci5zaXplKCkpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICB1aW50OF90IHRhZyA9IGJ1ZmZlcltvZmZzZXRdOworICAgIHNpemVfdCBsZW5n
dGggPSBidWZmZXJbb2Zmc2V0ICsgMV07CisgICAgc2l6ZV90IGxlbmd0aEJ5dGVzID0gMTsKKwor
ICAgIGlmIChsZW5ndGggPiAxMjgpIHsKKyAgICAgICAgbGVuZ3RoQnl0ZXMgPSBsZW5ndGggLSAx
Mjg7CisgICAgICAgIGlmIChvZmZzZXQgKyAyICsgbGVuZ3RoQnl0ZXMgPiBidWZmZXIuc2l6ZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBsZW5ndGggPSAwOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aEJ5dGVzOyArK2kpCisgICAgICAgICAgICBs
ZW5ndGggKz0gYnVmZmVyW29mZnNldCArIDIgKyBpXSA8PCAoKGxlbmd0aEJ5dGVzIC0gaSAtIDEp
ICogOCk7CisKKyAgICAgICAgbGVuZ3RoQnl0ZXMgKz0gMTsKKyAgICB9CisKKyAgICBpZiAob2Zm
c2V0ICsgMSArIGxlbmd0aEJ5dGVzICsgbGVuZ3RoID4gYnVmZmVyLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IDEgKyBsZW5ndGhCeXRlcyArIGxlbmd0aCwgb2Zm
c2V0LCB0YWcsIGxlbmd0aCwgMSArIGxlbmd0aEJ5dGVzIH07Cit9CisKK30gLy8gbmFtZXNwYWNl
IEFTTjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9I
YW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaApp
bmRleCA1Y2FmOWMzMTVlYS4uNGJkMThiZTZmYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmgKQEAgLTExNSw2ICsxMTUsMTQgQEAgc3RydWN0IEhh
bmRsZURlbGV0ZXI8Z2NyeV9tcGlfdD4gewogfTsKIAogdGVtcGxhdGU8Pgorc3RydWN0IEhhbmRs
ZURlbGV0ZXI8Z2NyeV9tcGlfcG9pbnRfdD4geworICAgIHZvaWQgb3BlcmF0b3IoKShnY3J5X21w
aV9wb2ludF90IGhhbmRsZSkKKyAgICB7CisgICAgICAgIGdjcnlfbXBpX3BvaW50X3JlbGVhc2Uo
aGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CiBzdHJ1Y3QgSGFuZGxlRGVsZXRlcjxn
Y3J5X3NleHBfdD4gewogICAgIHZvaWQgb3BlcmF0b3IoKShnY3J5X3NleHBfdCBoYW5kbGUpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdv
cml0aG1BRVNfQ0ZCR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAKaW5kZXggZjU5MTgyYzQwOGYuLjdiMjIzMGY5
ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29y
aXRobUFFU19DRkJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAKQEAgLTI4LDE5ICsyOCwxNDggQEAKIAog
I2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRs
ZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNy
eXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5
cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9u
Q2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdEVuY3J5cHQoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90
PiYmIHBsYWluVGV4dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGF1dG8gYWxnb3Jp
dGhtID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgp
OworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2Ny
eV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBH
Q1JZX0NJUEhFUl9NT0RFX0NGQjgsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRr
ZXkoaGFuZGxlLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9j
aXBoZXJfc2V0aXYoaGFuZGxlLCBpdi5kYXRhKCksIGl2LnNpemUoKSk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9
IGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9f
RVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0
KHBsYWluVGV4dC5zaXplKCkpOworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZW5jcnlwdChoYW5k
bGUsIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIHBsYWluVGV4dC5kYXRhKCksIHBsYWlu
VGV4dC5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKK30KKworc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2LCBWZWN0b3I8dWludDhf
dD4mJiBjaXBoZXJUZXh0KQoreworICAgIGF1dG8gYWxnb3JpdGhtID0gUEFMOjpHQ3J5cHQ6OmFl
c0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgpOworICAgIGlmICghYWxnb3JpdGht
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2Ny
eV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQjgs
IDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6
R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBrZXkuZGF0YSgp
LCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAg
ICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0aXYoaGFuZGxlLCBp
di5kYXRhKCksIGl2LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2ZpbmFsKGhh
bmRsZSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFM
OjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGNpcGhlclRleHQuc2l6ZSgpKTsK
KyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQoaGFuZGxlLCBvdXRwdXQuZGF0YSgpLCBv
dXRwdXQuc2l6ZSgpLCBjaXBoZXJUZXh0LmRhdGEoKSwgY2lwaGVyVGV4dC5zaXplKCkpOworICAg
IGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojps
b2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
Q0ZCOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxs
YmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29y
a1F1ZXVlJikKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJl
ZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNh
bGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ss
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVl
dWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwg
a2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYg
YWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4o
KnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRv
S2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEVu
Y3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUocGxh
aW5UZXh0KSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNv
bnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzaygKKyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNy
eXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRl
cnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBW
ZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNh
bGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtR
dWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAg
ICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtl
eSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMg
PSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5Lmdl
dCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZWNyeXB0KGFlc0tleS5r
ZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKKyAg
ICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFz
aygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAg
ICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKaW5kZXgg
YjM1NmQxNWVkODkuLjVlNThmNWY1ZjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKQEAg
LTI4LDE5ICsyOCwxNTUgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCisjaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5QUVT
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHBhbC9j
cnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxp
dGllcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVT
X0NUUjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2Fs
bGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdv
cmtRdWV1ZSYpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdEVu
Y3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
Y291bnRlciwgc2l6ZV90IGxlbmd0aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwbGFpblRleHQp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKwor
ICAgIGF1dG8gYWxnb3JpdGhtID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUo
a2V5LnNpemUoKSAqIDgpOworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X2NpcGhlcl9oZF90PiBo
YW5kbGU7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxl
LCAqYWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgMCk7CisgICAgaWYgKGVycm9yICE9
IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9y
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9IGdj
cnlfY2lwaGVyX3NldGtleShoYW5kbGUsIGtleS5kYXRhKCksIGtleS5zaXplKCkpOworICAgIGlm
IChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dF
cnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
ZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIoaGFuZGxlLCBjb3VudGVyLmRhdGEoKSwgY291bnRl
ci5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9maW5hbChoYW5kbGUpOworICAg
IGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojps
b2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChwbGFpblRleHQuc2l6ZSgpKTsKKyAgICBlcnJvciA9
IGdjcnlfY2lwaGVyX2VuY3J5cHQoaGFuZGxlLCBvdXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgp
LCBwbGFpblRleHQuZGF0YSgpLCBwbGFpblRleHQuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3Ip
OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBvdXRw
dXQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVj
cnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBj
b3VudGVyLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNpcGhlclRleHQp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7CisKKyAgICBhdXRvIGFsZ29yaXRobSA9IFBB
TDo6R0NyeXB0OjphZXNBbGdvcml0aG1Gb3JLZXlTaXplKGtleS5zaXplKCkgKiA4KTsKKyAgICBp
ZiAoIWFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFBBTDo6
R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgIGdjcnlfZXJyb3Jf
dCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBI
RVJfTU9ERV9DVFIsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7Cisg
ICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxl
LCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0
Y3RyKGhhbmRsZSwgY291bnRlci5kYXRhKCksIGNvdW50ZXIuc2l6ZSgpKTsKKyAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3Io
ZXJyb3IpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9y
ID0gZ2NyeV9jaXBoZXJfZmluYWwoaGFuZGxlKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBvdXRw
dXQoY2lwaGVyVGV4dC5zaXplKCkpOworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZW5jcnlwdCho
YW5kbGUsIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIGNpcGhlclRleHQuZGF0YSgpLCBj
aXBoZXJUZXh0LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsK
KyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0cHV0OworfQorCit2b2lkIENyeXB0
b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigp
OworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxh
aW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVz
Q3RyUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3du
Y2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0
ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3Rv
cigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgcGxhaW5UZXh0KTsKKyAgICAgICAgICAgIGlmICgh
b3V0cHV0KSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2Ug
Y2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRz
LgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAg
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1v
dmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJv
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVy
IGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0
cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0
KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxh
dGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
LCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwg
RXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYp
Cit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRv
S2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNw
YXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBX
VEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1Bh
cmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KCpwYXJhbWV0
ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4o
a2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZWNyeXB0KGFl
c0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMu
bGVuZ3RoLCBjaXBoZXJUZXh0KTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJl
aW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAg
IGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhl
IERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygK
KyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3BwCmlu
ZGV4IGFlOWEyOWI5NDA4Li5mYjNiY2ZiNTJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3Bw
CkBAIC00OCw3ICs0OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
Z2NyeXB0RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIAogICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRf
dD4gaGFuZGxlOwotICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhh
bmRsZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBIRVJfTU9ERV9HQ00sIEdDUllfQ0lQSEVSX1NFQ1VS
RSk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCAq
YWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0dDTSwgMCk7CiAgICAgaWYgKGVycm9yICE9IEdQ
R19FUlJfTk9fRVJST1IpIHsKICAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtRUNESEdDcnlwdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUVDREhHQ3J5cHQuY3BwCmluZGV4IGFm
ZTZhMTI0ZWFhLi4xYTE1MjZlZGIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9DcnlwdG9BbGdvcml0aG1FQ0RIR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUVDREhHQ3J5cHQuY3BwCkBAIC0yOCwxMyAr
MjgsOTEgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlFQy5oIgorI2luY2x1ZGUgPHBhbC9jcnlw
dG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGll
cy5oPgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OnBsYXRmb3JtRGVyaXZlQml0cyhS
ZWY8Q3J5cHRvS2V5PiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBzaXplX3QsIENhbGxiYWNrJiYsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZXJpdmUoZ2NyeV9zZXhwX3QgYmFzZVNleHAsIGdjcnlf
c2V4cF90IHB1YmxpY1NleHApCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBQQUw6OkdD
cnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBkYXRhU2V4cDsKKyAgICB7CisgICAgICAgIFBBTDo6
R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IGRTZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKGJh
c2VTZXhwLCAiZCIsIDApKTsKKyAgICAgICAgaWYgKCFkU2V4cCkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgICAg
ICBjb25zdCBjaGFyKiBkYXRhID0gZ2NyeV9zZXhwX250aF9kYXRhKGRTZXhwLCAxLCAmZGF0YUxl
bmd0aCk7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICAgICAgZ2NyeV9zZXhwX2J1aWxkKCZkYXRhU2V4cCwgbnVsbHB0ciwgIihkYXRh
KGZsYWdzIHJhdykodmFsdWUgJWIpKSIsIGRhdGFMZW5ndGgsIGRhdGEpOworICAgICAgICBpZiAo
IWRhdGFTZXhwKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBjaXBoZXJTZXhwOworICAgIGdjcnlf
ZXJyb3JfdCBlcnJvciA9IGdjcnlfcGtfZW5jcnlwdCgmY2lwaGVyU2V4cCwgZGF0YVNleHAsIHB1
YmxpY1NleHApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dDsKKyAgICB7CisgICAgICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHNTZXhwKGdjcnlfc2V4cF9maW5kX3Rv
a2VuKGNpcGhlclNleHAsICJzIiwgMCkpOworICAgICAgICBpZiAoIXNTZXhwKQorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdj
cnlfbXBpX3Q+IHNNUEkoZ2NyeV9zZXhwX250aF9tcGkoc1NleHAsIDEsIEdDUllNUElfRk1UX1VT
RykpOworICAgICAgICBpZiAoIXNNUEkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfcG9pbnRfdD4gcG9pbnQo
Z2NyeV9tcGlfcG9pbnRfbmV3KDApKTsKKyAgICAgICAgaWYgKCFwb2ludCkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X21waV9lY19kZWNv
ZGVfcG9pbnQocG9pbnQsIHNNUEksIG51bGxwdHIpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAg
ICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiB4TVBJKGdjcnlfbXBpX25ldygwKSk7
CisgICAgICAgIGlmICgheE1QSSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICAgICAgZ2NyeV9tcGlfcG9pbnRfc25hdGNoX2dldCh4TVBJLCBudWxscHRyLCBudWxscHRy
LCBwb2ludC5yZWxlYXNlKCkpOworCisgICAgICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAg
ICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAs
ICZkYXRhTGVuZ3RoLCB4TVBJKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJS
T1IpIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0LnJl
c2l6ZShkYXRhTGVuZ3RoKTsKKyAgICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJ
X0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIG51bGxwdHIsIHhNUEkpOwor
ICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxn
b3JpdGhtRUNESDo6cGxhdGZvcm1EZXJpdmVCaXRzKFJlZjxDcnlwdG9LZXk+JiYgYmFzZUtleSwg
UmVmPENyeXB0b0tleT4mJiBwdWJsaWNLZXksIHNpemVfdCBsZW5ndGgsIENhbGxiYWNrJiYgY2Fs
bGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1
ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAg
ICAgICBbYmFzZUtleSA9IFdURk1vdmUoYmFzZUtleSksIHB1YmxpY0tleSA9IFdURk1vdmUocHVi
bGljS2V5KSwgbGVuZ3RoLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCAmY29udGV4dF0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGVjQmFzZUtleSA9IGRvd25jYXN0PENyeXB0
b0tleUVDPihiYXNlS2V5LmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8mIGVjUHVibGljS2V5ID0g
ZG93bmNhc3Q8Q3J5cHRvS2V5RUM+KHB1YmxpY0tleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1
dG8gb3V0cHV0ID0gZ2NyeXB0RGVyaXZlKGVjQmFzZUtleS5wbGF0Zm9ybUtleSgpLCBlY1B1Ymxp
Y0tleS5wbGF0Zm9ybUtleSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAg
ICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUob3V0cHV0KSwgbGVuZ3RoLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRh
YmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpLCBsZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJTQUVTX1BL
Q1MxX3YxXzVHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1SU0FFU19QS0NTMV92MV81R0NyeXB0LmNwcAppbmRleCBkYmQ5Y2RiZDQxZi4uYzNk
MzFiNTlkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNUdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R0NyeXB0LmNwcApA
QCAtMzEsMTcgKzMxLDEzOCBAQAogI2luY2x1ZGUgIkNyeXB0b0tleVJTQS5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9I
YW5kbGUuaD4KKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6
OnBsYXRmb3JtRW5jcnlwdChSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVj
dG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdvcmtRdWV1ZSYpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdj
cnlwdEVuY3J5cHQoZ2NyeV9zZXhwX3Qga2V5U2V4cCwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5U
ZXh0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxn
Y3J5X3NleHBfdD4gZGF0YVNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9zZXhw
X2J1aWxkKCZkYXRhU2V4cCwgbnVsbHB0ciwgIihkYXRhKGZsYWdzIHBrY3MxKSh2YWx1ZSAlYikp
IiwKKyAgICAgICAgcGxhaW5UZXh0LnNpemUoKSwgcGxhaW5UZXh0LmRhdGEoKSk7CisgICAgaWYg
KGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vy
cm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBQ
QUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBjaXBoZXJTZXhwOworICAgIGVycm9yID0g
Z2NyeV9wa19lbmNyeXB0KCZjaXBoZXJTZXhwLCBkYXRhU2V4cCwga2V5U2V4cCk7CisgICAgaWYg
KGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vy
cm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBQ
QUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBhU2V4cChnY3J5X3NleHBfZmluZF90b2tl
bihjaXBoZXJTZXhwLCAiYSIsIDApKTsKKyAgICBpZiAoIWFTZXhwKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBhTVBJ
KGdjcnlfc2V4cF9udGhfbXBpKGFTZXhwLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpKTsKKyAgICBzaXpl
X3QgZGF0YUxlbmd0aCA9IDA7CisgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZN
VF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBhTVBJKTsKKyAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3Ip
OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50
OF90PiBvdXRwdXQoZGF0YUxlbmd0aCk7CisgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZ
TVBJX0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIG51bGxwdHIsIGFNUEkp
OworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0Ny
eXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0
aG1SU0FFU19QS0NTMV92MV81OjpwbGF0Zm9ybURlY3J5cHQoUmVmPENyeXB0b0tleT4mJiwgVmVj
dG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGdjcnlfc2V4cF90IGtleVNleHAsIFZlY3Rv
cjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBQ
QUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBlbmNWYWxTZXhwOworICAgIGdjcnlfZXJy
b3JfdCBlcnJvciA9IGdjcnlfc2V4cF9idWlsZCgmZW5jVmFsU2V4cCwgbnVsbHB0ciwgIihlbmMt
dmFsKGZsYWdzIHBrY3MxKShyc2EoYSAlYikpKSIsCisgICAgICAgIGNpcGhlclRleHQuc2l6ZSgp
LCBjaXBoZXJUZXh0LmRhdGEoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4
cF90PiBwbGFpblNleHA7CisgICAgZXJyb3IgPSBnY3J5X3BrX2RlY3J5cHQoJnBsYWluU2V4cCwg
ZW5jVmFsU2V4cCwga2V5U2V4cCk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4
cF90PiB2YWx1ZVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9rZW4ocGxhaW5TZXhwLCAidmFsdWUiLCAw
KSk7CisgICAgaWYgKCF2YWx1ZVNleHApCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHZhbHVlTVBJKGdjcnlfc2V4cF9u
dGhfbXBpKHZhbHVlU2V4cCwgMSwgR0NSWU1QSV9GTVRfVVNHKSk7CisgICAgc2l6ZV90IGRhdGFM
ZW5ndGggPSAwOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBu
dWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgdmFsdWVNUEkpOworICAgIGlmIChlcnJvciAhPSBHUEdf
RVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IG91dHB1dChkYXRhTGVuZ3RoKTsKKyAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElf
Rk1UX1VTRywgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgbnVsbHB0ciwgdmFsdWVNUEkp
OworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0Ny
eXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0
aG1SU0FFU19QS0NTMV92MV81OjpwbGF0Zm9ybUVuY3J5cHQoUmVmPENyeXB0b0tleT4mJiBrZXks
IFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywg
RXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4dC5yZWYo
KTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtrZXkgPSBXVEZNb3ZlKGtleSks
IHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNv
bnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2FzdDxD
cnlwdG9LZXlSU0E+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2Ny
eXB0RW5jcnlwdChyc2FLZXkucGxhdGZvcm1LZXkoKSwgV1RGTW92ZShwbGFpblRleHQpKTsKKyAg
ICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFz
aygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAg
ICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKK30K
Kwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjpwbGF0Zm9ybURlY3J5cHQo
UmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3Rv
ckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJh
Y2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVl
KQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAg
ICBba2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBh
dXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSU0E+KGtleS5nZXQoKSk7CisKKyAgICAg
ICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlwdChyc2FLZXkucGxhdGZvcm1LZXkoKSwg
V1RGTW92ZShjaXBoZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgq
b3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0
cHV0KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29y
aXRobVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9LZXlSU0Em
LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxi
YWNrJiYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0Fs
Z29yaXRobVJTQVNTQV9QS0NTMV92MV81R0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwCmluZGV4
IDNjNTM1YWM1ZDI1Li44ZDIwYjdjYWIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUdDcnlwdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtD
UzFfdjFfNUdDcnlwdC5jcHAKQEAgLTMzLDE3ICszMywyMDMgQEAKICNpbmNsdWRlICJDcnlwdG9L
ZXlSU0EuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8
cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9I
YW5kbGUuaD4KKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81
OjpwbGF0Zm9ybVNpZ24oUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3Rv
ckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBXb3JrUXVldWUmKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8UEFMOjpDcnlwdG9EaWdlc3Q6OkFs
Z29yaXRobT4gaGFzaENyeXB0b0RpZ2VzdEFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzd2l0Y2ggKGlk
ZW50aWZpZXIpIHsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xOgor
ICAgICAgICByZXR1cm4gUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzE7CisgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0OgorICAgICAgICByZXR1cm4g
UEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzIyNDsKKyAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6CisgICAgICAgIHJldHVybiBQQUw6OkNyeXB0b0Rp
Z2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2OworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6U0hBXzM4NDoKKyAgICAgICAgcmV0dXJuIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0
aG06OlNIQV8zODQ7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEy
OgorICAgICAgICByZXR1cm4gUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzUxMjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KIH0KIAot
dm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1WZXJpZnkoUmVm
PENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBCb29s
Q2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IFdvcmtRdWV1ZSYpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxjb25zdCBjaGFyKj4gaGFzaEFsZ29y
aXRobU5hbWUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgc3dpdGNoIChpZGVudGlmaWVyKSB7CisgICAgY2FzZSBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMToKKyAgICAgICAgcmV0dXJuICJzaGExIjsKKyAg
ICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yMjQ6CisgICAgICAgIHJldHVy
biAic2hhMjI0IjsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6
CisgICAgICAgIHJldHVybiAic2hhMjU2IjsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlNIQV8zODQ6CisgICAgICAgIHJldHVybiAic2hhMzg0IjsKKyAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTI6CisgICAgICAgIHJldHVybiAic2hhNTEyIjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK30KKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHRTaWduKGdjcnlfc2V4
cF90IGtleVNleHAsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSwgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBoYXNoQWxnb3JpdGhtSWRlbnRpZmllcikKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gZGF0YUhhc2g7CisgICAgeworICAgICAgICBhdXRvIGRpZ2VzdEFsZ29yaXRobSA9IGhhc2hD
cnlwdG9EaWdlc3RBbGdvcml0aG0oaGFzaEFsZ29yaXRobUlkZW50aWZpZXIpOworICAgICAgICBp
ZiAoIWRpZ2VzdEFsZ29yaXRobSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICAgICAgYXV0byBkaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKCpkaWdlc3RB
bGdvcml0aG0pOworICAgICAgICBpZiAoIWRpZ2VzdCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICAgICAgZGlnZXN0LT5hZGRCeXRlcyhkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCkpOworICAgICAgICBkYXRhSGFzaCA9IGRpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKKyAgICB9
CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBkYXRhU2V4cDsKKyAgICB7
CisgICAgICAgIGF1dG8gc2hhQWxnb3JpdGhtID0gaGFzaEFsZ29yaXRobU5hbWUoaGFzaEFsZ29y
aXRobUlkZW50aWZpZXIpOworICAgICAgICBpZiAoIXNoYUFsZ29yaXRobSkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2Ny
eV9zZXhwX2J1aWxkKCZkYXRhU2V4cCwgbnVsbHB0ciwgIihkYXRhKGZsYWdzIHBrY3MxKShoYXNo
ICVzICViKSkiLAorICAgICAgICAgICAqc2hhQWxnb3JpdGhtLCBkYXRhSGFzaC5zaXplKCksIGRh
dGFIYXNoLmRhdGEoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7
CisgICAgICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBBTDo6R0NyeXB0
OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHNpZ25hdHVyZVNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVy
cm9yID0gZ2NyeV9wa19zaWduKCZzaWduYXR1cmVTZXhwLCBkYXRhU2V4cCwga2V5U2V4cCk7Cisg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6
OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisK
KyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBzU2V4cChnY3J5X3NleHBfZmlu
ZF90b2tlbihzaWduYXR1cmVTZXhwLCAicyIsIDApKTsKKyAgICBpZiAoIXNTZXhwKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21w
aV90PiBzTVBJKGdjcnlfc2V4cF9udGhfbXBpKHNTZXhwLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpKTsK
KyAgICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChH
Q1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBzTVBJKTsKKyAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJy
b3IoZXJyb3IpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZl
Y3Rvcjx1aW50OF90PiBvdXRwdXQoZGF0YUxlbmd0aCk7CisgICAgZXJyb3IgPSBnY3J5X21waV9w
cmludChHQ1JZTVBJX0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIG51bGxw
dHIsIHNNUEkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKK30KKworc3RhdGljIHN0
ZDo6b3B0aW9uYWw8Ym9vbD4gZ2NyeXB0VmVyaWZ5KGdjcnlfc2V4cF90IGtleVNleHAsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEs
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaEFsZ29yaXRobUlkZW50aWZpZXIpCit7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGFIYXNoOworICAgIHsKKyAgICAgICAgYXV0byBkaWdlc3RB
bGdvcml0aG0gPSBoYXNoQ3J5cHRvRGlnZXN0QWxnb3JpdGhtKGhhc2hBbGdvcml0aG1JZGVudGlm
aWVyKTsKKyAgICAgICAgaWYgKCFkaWdlc3RBbGdvcml0aG0pCisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gZGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6
OmNyZWF0ZSgqZGlnZXN0QWxnb3JpdGhtKTsKKyAgICAgICAgaWYgKCFkaWdlc3QpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGRpZ2VzdC0+YWRkQnl0ZXMoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgZGF0YUhhc2ggPSBkaWdlc3QtPmNvbXB1
dGVIYXNoKCk7CisgICAgfQorCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4g
c2lnbmF0dXJlU2V4cDsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3NleHBfYnVpbGQo
JnNpZ25hdHVyZVNleHAsIG51bGxwdHIsICIoc2lnLXZhbChyc2EocyAlYikpKSIsCisgICAgICAg
IHNpZ25hdHVyZS5zaXplKCksIHNpZ25hdHVyZS5kYXRhKCkpOworICAgIGlmIChlcnJvciAhPSBH
UEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgUEFMOjpHQ3J5cHQ6
OkhhbmRsZTxnY3J5X3NleHBfdD4gZGF0YVNleHA7CisgICAgeworICAgICAgICBhdXRvIHNoYUFs
Z29yaXRobSA9IGhhc2hBbGdvcml0aG1OYW1lKGhhc2hBbGdvcml0aG1JZGVudGlmaWVyKTsKKyAg
ICAgICAgaWYgKCFzaGFBbGdvcml0aG0pCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgICAgIGVycm9yID0gZ2NyeV9zZXhwX2J1aWxkKCZkYXRhU2V4cCwgbnVsbHB0ciwg
IihkYXRhKGZsYWdzIHBrY3MxKShoYXNoICVzICViKSkiLAorICAgICAgICAgICAgKnNoYUFsZ29y
aXRobSwgZGF0YUhhc2guc2l6ZSgpLCBkYXRhSGFzaC5kYXRhKCkpOworICAgICAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vy
cm9yKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfcGtfdmVyaWZ5KHNpZ25hdHVyZVNleHAsIGRhdGFT
ZXhwLCBrZXlTZXhwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUiAmJiBnY3J5
X2Vycl9jb2RlKGVycm9yKSAhPSBHUEdfRVJSX0JBRF9TSUdOQVRVUkUpIHsKKyAgICAgICAgUEFM
OjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICByZXR1cm4geyBlcnJvciA9PSBHUEdfRVJSX05PX0VSUk9SIH07Cit9CisK
K3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnBsYXRmb3JtU2lnbihSZWY8
Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAg
Y29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtrZXkgPSBX
VEZNb3ZlKGtleSksIGRhdGEgPSBXVEZNb3ZlKGRhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAm
Y29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIHJzYUtleSA9IGRvd25jYXN0
PENyeXB0b0tleVJTQT4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBn
Y3J5cHRTaWduKHJzYUtleS5wbGF0Zm9ybUtleSgpLCBkYXRhLCByc2FLZXkuaGFzaEFsZ29yaXRo
bUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
dGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkg
eworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhvdXRwdXQpOworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwor
fQorCit2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVZlcmlm
eShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc2lnbmF0dXJlLCBWZWN0
b3I8dWludDhfdD4mJiBkYXRhLCBCb29sQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2Fs
bGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3Jr
UXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtrZXkgPSBXVEZNb3ZlKGtleSksIHNpZ25hdHVyZSA9
IFdURk1vdmUoc2lnbmF0dXJlKSwgZGF0YSA9IFdURk1vdmUoZGF0YSksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgcnNhS2V5ID0g
ZG93bmNhc3Q8Q3J5cHRvS2V5UlNBPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91
dHB1dCA9IGdjcnlwdFZlcmlmeShyc2FLZXkucGxhdGZvcm1LZXkoKSwgc2lnbmF0dXJlLCBkYXRh
LCByc2FLZXkuaGFzaEFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBpZiAoIW91
dHB1dCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAg
ICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9
IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRp
b25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbb3V0
cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhvdXRw
dXQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1TaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVJz
YVNzYVBhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlSU0EmLCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQ
R0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGht
UlNBX09BRVBHQ3J5cHQuY3BwCmluZGV4IGJlNGJlM2JkODVhLi4wMjc2ODI1MzA1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FfT0FF
UEdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdv
cml0aG1SU0FfT0FFUEdDcnlwdC5jcHAKQEAgLTI4LDE5ICsyOCwxNzUgQEAKIAogI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUnNhT2FlcFBhcmFt
cy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleVJTQS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KKyNpbmNs
dWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYs
IFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYm
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPGNvbnN0IGNoYXIqPiBoYXNoQWxnb3JpdGhtTmFtZShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzd2l0Y2ggKGlk
ZW50aWZpZXIpIHsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xOgor
ICAgICAgICByZXR1cm4gInNoYTEiOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6U0hBXzIyNDoKKyAgICAgICAgcmV0dXJuICJzaGEyMjQiOworICAgIGNhc2UgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjoKKyAgICAgICAgcmV0dXJuICJzaGEyNTYiOworICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDoKKyAgICAgICAgcmV0dXJu
ICJzaGEzODQiOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMjoK
KyAgICAgICAgcmV0dXJuICJzaGE1MTIiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpw
bGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYm
LCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVl
JikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hBbGdvcml0aG1JZGVudGlmaWVyLCBnY3J5X3Nl
eHBfdCBrZXlTZXhwLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGxhYmVsVmVjdG9yLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHBsYWluVGV4dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IGRhdGFTZXhwOworICAgIHsKKyAgICAg
ICAgYXV0byBzaGFBbGdvcml0aG0gPSBoYXNoQWxnb3JpdGhtTmFtZShoYXNoQWxnb3JpdGhtSWRl
bnRpZmllcik7CisgICAgICAgIGlmICghc2hhQWxnb3JpdGhtKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3NleHBf
YnVpbGQoJmRhdGFTZXhwLCBudWxscHRyLCAiKGRhdGEoZmxhZ3Mgb2FlcCkoaGFzaC1hbGdvICVz
KShsYWJlbCAlYikodmFsdWUgJWIpKSIsCisgICAgICAgICAgICAqc2hhQWxnb3JpdGhtLCBsYWJl
bFZlY3Rvci5zaXplKCksIGxhYmVsVmVjdG9yLmRhdGEoKSwgcGxhaW5UZXh0LnNpemUoKSwgcGxh
aW5UZXh0LmRhdGEoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7
CisgICAgICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBBTDo6R0NyeXB0
OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IGNpcGhlclNleHA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9y
ID0gZ2NyeV9wa19lbmNyeXB0KCZjaXBoZXJTZXhwLCBkYXRhU2V4cCwga2V5U2V4cCk7CisgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6Omxv
Z0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBhU2V4cChnY3J5X3NleHBfZmluZF90
b2tlbihjaXBoZXJTZXhwLCAiYSIsIDApKTsKKyAgICBpZiAoIWFTZXhwKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBh
TVBJKGdjcnlfc2V4cF9udGhfbXBpKGFTZXhwLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpKTsKKyAgICBz
aXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJ
X0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBhTVBJKTsKKyAgICBpZiAoZXJyb3Ig
IT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJy
b3IpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rvcjx1
aW50OF90PiBvdXRwdXQoZGF0YUxlbmd0aCk7CisgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChH
Q1JZTVBJX0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIG51bGxwdHIsIGFN
UEkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6
R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKK30KKworc3RhdGljIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgaGFzaEFsZ29yaXRobUlkZW50aWZpZXIsIGdjcnlfc2V4cF90IGtleVNleHAsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgbGFiZWxWZWN0b3IsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY2lw
aGVyVGV4dCkKK3sKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBlbmNWYWxT
ZXhwOworICAgIHsKKyAgICAgICAgYXV0byBzaGFBbGdvcml0aG0gPSBoYXNoQWxnb3JpdGhtTmFt
ZShoYXNoQWxnb3JpdGhtSWRlbnRpZmllcik7CisgICAgICAgIGlmICghc2hhQWxnb3JpdGhtKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBnY3J5X2Vycm9yX3Qg
ZXJyb3IgPSBnY3J5X3NleHBfYnVpbGQoJmVuY1ZhbFNleHAsIG51bGxwdHIsICIoZW5jLXZhbChm
bGFncyBvYWVwKShoYXNoLWFsZ28gJXMpKGxhYmVsICViKShyc2EoYSAlYikpKSIsCisgICAgICAg
ICAgICAqc2hhQWxnb3JpdGhtLCBsYWJlbFZlY3Rvci5zaXplKCksIGxhYmVsVmVjdG9yLmRhdGEo
KSwgY2lwaGVyVGV4dC5zaXplKCksIGNpcGhlclRleHQuZGF0YSgpKTsKKyAgICAgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dF
cnJvcihlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9
CisgICAgICAgIGdjcnlfc2V4cF9kdW1wKGVuY1ZhbFNleHApOworICAgIH0KKworICAgIFBBTDo6
R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYWluU2V4cDsKKyAgICBnY3J5X2Vycm9yX3Qg
ZXJyb3IgPSBnY3J5X3BrX2RlY3J5cHQoJnBsYWluU2V4cCwgZW5jVmFsU2V4cCwga2V5U2V4cCk7
CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5
cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiB2YWx1ZVNleHAoZ2NyeV9z
ZXhwX2ZpbmRfdG9rZW4ocGxhaW5TZXhwLCAidmFsdWUiLCAwKSk7CisgICAgaWYgKCF2YWx1ZVNl
eHApCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBQQUw6OkdDcnlwdDo6SGFu
ZGxlPGdjcnlfbXBpX3Q+IHZhbHVlTVBJKGdjcnlfc2V4cF9udGhfbXBpKHZhbHVlU2V4cCwgMSwg
R0NSWU1QSV9GTVRfVVNHKSk7CisgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgIGVycm9y
ID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRyLCAwLCAmZGF0YUxlbmd0
aCwgdmFsdWVNUEkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChkYXRhTGVuZ3RoKTsK
KyAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgb3V0cHV0LmRhdGEo
KSwgb3V0cHV0LnNpemUoKSwgbnVsbHB0ciwgdmFsdWVNUEkpOworICAgIGlmIChlcnJvciAhPSBH
UEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1v
dmUob3V0cHV0KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6cGxhdGZvcm1F
bmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFt
ZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQs
IFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9u
Q2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29y
a1F1ZXVlKQoreworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAor
ICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUo
a2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIHJzYVBhcmFtZXRlcnMg
PSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFyYW1zPigqcGFyYW1ldGVycyk7Cisg
ICAgICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSU0E+KGtleS5nZXQo
KSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChyc2FLZXkuaGFz
aEFsZ29yaXRobUlkZW50aWZpZXIoKSwgcnNhS2V5LnBsYXRmb3JtS2V5KCksIHJzYVBhcmFtZXRl
cnMubGFiZWxWZWN0b3IoKSwgcGxhaW5UZXh0KTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAg
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBX
VEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25D
YWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG91dHB1dCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OnBsYXRmb3Jt
RGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJh
bWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4
dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRp
b25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3
b3JrUXVldWUpCit7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2go
CisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92
ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxi
YWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiByc2FQYXJhbWV0
ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUnNhT2FlcFBhcmFtcz4oKnBhcmFtZXRlcnMp
OworICAgICAgICAgICAgYXV0byYgcnNhS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5UlNBPihrZXku
Z2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQocnNhS2V5
Lmhhc2hBbGdvcml0aG1JZGVudGlmaWVyKCksIHJzYUtleS5wbGF0Zm9ybUtleSgpLCByc2FQYXJh
bWV0ZXJzLmxhYmVsVmVjdG9yKCksIGNpcGhlclRleHQpOworICAgICAgICAgICAgaWYgKCFvdXRw
dXQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAg
ICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9u
RXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW291dHB1
dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sob3V0cHV0
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGht
UlNBX09BRVA6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFy
YW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleVJTQSYsIGNvbnN0IENyeXB0b09wZXJhdGlv
bkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlHQ3J5cHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eUdDcnlwdC5jcHAKaW5kZXggNzU0ZTlkYTY4YmMuLjdlNzQ5MGJmODY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5R0NyeXB0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5R0NyeXB0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DRkIuaCIKKyNp
bmNsdWRlICJDcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3Jp
dGhtQUVTX0dDTS5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19LVy5oIgogI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobUVDREguaCIKQEAgLTUwLDYgKzUxLDcgQEAgdm9pZCBDcnlwdG9B
bGdvcml0aG1SZWdpc3RyeTo6cGxhdGZvcm1SZWdpc3RlckFsZ29yaXRobXMoKQogewogICAgIHJl
Z2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUFFU19DQkM+KCk7CiAgICAgcmVnaXN0ZXJB
bGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQj4oKTsKKyAgICByZWdpc3RlckFsZ29yaXRo
bTxDcnlwdG9BbGdvcml0aG1BRVNfQ1RSPigpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0
b0FsZ29yaXRobUFFU19HQ00+KCk7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3Jp
dGhtQUVTX0tXPigpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUVDREg+
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleUVD
R0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5
cHQuY3BwCmluZGV4IGFiZjI5NDcwZmYxLi45ZDMyOGQ5ODgwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKQEAgLTMwLDcgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKICNpbmNsdWRlICJKc29uV2ViS2V5
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2dj
cnlwdC9BU04xLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CiAjaW5j
bHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QmFzZTY0Lmg+CkBAIC0xOTksMTggKzE5OSwyMzUgQEAgUmVmUHRyPENyeXB0b0tleUVDPiBDcnlw
dG9LZXlFQzo6cGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWYK
ICAgICByZXR1cm4gY3JlYXRlKGlkZW50aWZpZXIsIGN1cnZlLCBDcnlwdG9LZXlUeXBlOjpQcml2
YXRlLCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQogCi1S
ZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9ydFNwa2koQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciwgTmFtZWRDdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYsIGJvb2ws
IENyeXB0b0tleVVzYWdlQml0bWFwKQorZW51bSBjbGFzcyBFQ0FsZ29yaXRobSB7CisgICAgUHVi
bGljS2V5LAorICAgIERILAorfTsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8RUNBbGdvcml0aG0+
IGFsZ29yaXRobUZvcklkZW50aWZpZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCA3PiBzX2lkRUNQdWJsaWNLZXl7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgz
ZCwgMHgwMiwgMHgwMSB9IH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
NT4gc19pZEVDREh7IHsgMHgyYiwgMHg4MSwgMHgwNCwgMHgwMSwgMHgwYyB9IH07CisKKyAgICBp
ZiAoc2l6ZSA9PSBzX2lkRUNQdWJsaWNLZXkuc2l6ZSgpICYmICFzdGQ6Om1lbWNtcChkYXRhLCBz
X2lkRUNQdWJsaWNLZXkuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIEVDQWxnb3JpdGht
OjpQdWJsaWNLZXk7CisgICAgaWYgKHNpemUgPT0gc19pZEVDREguc2l6ZSgpICYmICFzdGQ6Om1l
bWNtcChkYXRhLCBzX2lkRUNESC5kYXRhKCksIHNpemUpKQorICAgICAgICByZXR1cm4gRUNBbGdv
cml0aG06OkRIOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPENyeXB0b0tleUVDOjpOYW1lZEN1cnZlPiBjdXJ2ZUZvcklkZW50aWZpZXIoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJy
YXk8dWludDhfdCwgOD4gc19zZWNwMjU2cjF7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgz
ZCwgMHgwMywgMHgwMSwgMHgwNyB9IH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgNT4gc19zZWNwMzg0cjF7IHsgMHgyYiwgMHg4MSwgMHgwNCwgMHgwMCwgMHgyMiB9IH07
CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgNT4gc19zZWNwNTIxcjF7IHsg
MHgyYiwgMHg4MSwgMHgwNCwgMHgwMCwgMHgyMyB9IH07CisKKyAgICBpZiAoc2l6ZSA9PSBzX3Nl
Y3AyNTZyMS5zaXplKCkgJiYgIXN0ZDo6bWVtY21wKGRhdGEsIHNfc2VjcDI1NnIxLmRhdGEoKSwg
c2l6ZSkpCisgICAgICAgIHJldHVybiBDcnlwdG9LZXlFQzo6TmFtZWRDdXJ2ZTo6UDI1NjsKKyAg
ICBpZiAoc2l6ZSA9PSBzX3NlY3AzODRyMS5zaXplKCkgJiYgIXN0ZDo6bWVtY21wKGRhdGEsIHNf
c2VjcDM4NHIxLmRhdGEoKSwgc2l6ZSkpCisgICAgICAgIHJldHVybiBDcnlwdG9LZXlFQzo6TmFt
ZWRDdXJ2ZTo6UDM4NDsKKyAgICBpZiAoc2l6ZSA9PSBzX3NlY3A1MjFyMS5zaXplKCkgJiYgIXN0
ZDo6bWVtY21wKGRhdGEsIHNfc2VjcDUyMXIxLmRhdGEoKSwgc2l6ZSkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7IC8vIE5vdCBzdXBwb3J0ZWQgeWV0LgorICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Cit9CisKK1JlZlB0cjxDcnlwdG9LZXlFQz4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtSW1w
b3J0U3BraShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIE5hbWVkQ3VydmUg
Y3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0
b0tleVVzYWdlQml0bWFwIHVzYWdlcykKK3sKKyAgICAvLyBTdWJqZWN0UHVibGljS2V5SW5mbyAg
Ojo9ICBTRVFVRU5DRSAgeworICAgIC8vICAgYWxnb3JpdGhtICAgICAgICAgICAgQWxnb3JpdGht
SWRlbnRpZmllciwKKyAgICAvLyAgIHN1YmplY3RQdWJsaWNLZXkgICAgIEJJVCBTVFJJTkcgIH0K
KyAgICBhdXRvIHN1YmplY3RQdWJsaWNLZXlJbmZvVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0
YSwgMCk7CisgICAgaWYgKCFzdWJqZWN0UHVibGljS2V5SW5mb1RMVi5idWZmZXJTaXplIHx8ICFz
dWJqZWN0UHVibGljS2V5SW5mb1RMVi5oYXNUYWcoQVNOMTo6VGFnOjpTZXF1ZW5jZSkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChzdWJqZWN0UHVibGljS2V5SW5mb1RMVi5idWZm
ZXJTaXplICE9IGtleURhdGEuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgICBhbGdv
cml0aG0gICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0ZXJzICBBTlkgREVG
SU5FRCBCWSBhbGdvcml0aG0gT1BUSU9OQUwKKyAgICAvLyB9CisgICAgYXV0byBhbGdvcml0aG1J
ZGVudGlmaWVyVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgc3ViamVjdFB1YmxpY0tleUlu
Zm9UTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCFhbGdvcml0aG1JZGVudGlmaWVyVExWLmJ1
ZmZlclNpemUgfHwgIWFsZ29yaXRobUlkZW50aWZpZXJUTFYuaGFzVGFnKEFTTjE6OlRhZzo6U2Vx
dWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYWxnb3JpdGhtVExW
ID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgYWxnb3JpdGhtSWRlbnRpZmllclRMVi52YWx1ZU9m
ZnNldCgpKTsKKyAgICBpZiAoIWFsZ29yaXRobVRMVi5idWZmZXJTaXplIHx8ICFhbGdvcml0aG1U
TFYuaGFzVGFnKEFTTjE6OlRhZzo6T2JqZWN0SWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBzdXBwb3J0ZWRBbGdvcml0aG0gPSBhbGdvcml0aG1Gb3JJZGVu
dGlmaWVyKGtleURhdGEuZGF0YSgpICsgYWxnb3JpdGhtVExWLnZhbHVlT2Zmc2V0KCksIGFsZ29y
aXRobVRMVi5sZW5ndGgpOworICAgIGlmICghc3VwcG9ydGVkQWxnb3JpdGhtKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEVDUGFyYW1ldGVycyA6Oj0gQ0hPSUNFIHsKKyAgICAv
LyAgIG5hbWVkQ3VydmUgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiAtLSBNVVNUIGJlIHN1cHBv
cnRlZC4KKyAgICAvLyAgIC0tIGltcGxpY2l0Q3VydmUgICBOVUxMIC0tIE1VU1QgTk9UIGJlIHVz
ZWQuCisgICAgLy8gICAtLSBzcGVjaWZpZWRDdXJ2ZSAgU3BlY2lmaWVkRUNEb21haW4gLS0gTVVT
VCBOT1QgYmUgdXNlZC4KKyAgICAvLyB9CisgICAgYXV0byBlY1BhcmFtZXRlcnNUTFYgPSBBU04x
OjpwYXJzZVRMVihrZXlEYXRhLAorICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyVExWLnZhbHVl
T2Zmc2V0KCkgKyBhbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSk7CisgICAgaWYgKCFlY1BhcmFtZXRl
cnNUTFYuYnVmZmVyU2l6ZSB8fCAhZWNQYXJhbWV0ZXJzVExWLmhhc1RhZyhBU04xOjpUYWc6Ok9i
amVjdElkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGFy
YW1ldGVyQ3VydmUgPSBjdXJ2ZUZvcklkZW50aWZpZXIoa2V5RGF0YS5kYXRhKCkgKyBlY1BhcmFt
ZXRlcnNUTFYudmFsdWVPZmZzZXQoKSwgZWNQYXJhbWV0ZXJzVExWLmxlbmd0aCk7CisgICAgaWYg
KCFwYXJhbWV0ZXJDdXJ2ZSB8fCAqcGFyYW1ldGVyQ3VydmUgIT0gY3VydmUpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgaWYgKGFsZ29yaXRobVRMVi5idWZmZXJTaXplICsgZWNQYXJh
bWV0ZXJzVExWLmJ1ZmZlclNpemUgIT0gYWxnb3JpdGhtSWRlbnRpZmllclRMVi5sZW5ndGgpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdWJqZWN0UHVibGljS2V5VExWID0g
QVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwKKyAgICAgICAgc3ViamVjdFB1YmxpY0tleUluZm9UTFYu
dmFsdWVPZmZzZXQoKSArIGFsZ29yaXRobUlkZW50aWZpZXJUTFYuYnVmZmVyU2l6ZSk7CisgICAg
aWYgKCFzdWJqZWN0UHVibGljS2V5VExWLmJ1ZmZlclNpemUgfHwgIXN1YmplY3RQdWJsaWNLZXlU
TFYuaGFzVGFnKEFTTjE6OlRhZzo6Qml0U3RyaW5nKQorICAgICAgICB8fCBrZXlEYXRhW3N1Ympl
Y3RQdWJsaWNLZXlUTFYudmFsdWVPZmZzZXQoKV0gIT0gMHgwMCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAoa2V5RGF0YVtzdWJqZWN0UHVibGljS2V5VExWLnZhbHVlT2Zmc2V0
KCkgKyAxXSAhPSAweDA0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzaXplX3QgcG9p
bnRTaXplID0gMiAqIChjdXJ2ZVNpemUoY3VydmUpIC8gOCk7CisgICAgaWYgKHN1YmplY3RQdWJs
aWNLZXlUTFYubGVuZ3RoIC0gMiAhPSBwb2ludFNpemUpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHE7CisgICAgcS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDEgKyBwb2ludFNpemUpOworICAgIHEuYXBwZW5kKDB4MDQpOworICAgIHEuYXBwZW5kKGtleURh
dGEuZGF0YSgpICsgc3ViamVjdFB1YmxpY0tleVRMVi52YWx1ZU9mZnNldCgpICsgMiwgcG9pbnRT
aXplKTsKKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYXRmb3JtS2V5
OworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9idWlsZCgmcGxhdGZvcm1LZXks
IG51bGxwdHIsICIocHVibGljLWtleShlY2MoY3VydmUgJXMpKHEgJWIpKSkiLAorICAgICAgICBj
dXJ2ZU5hbWUoY3VydmUpLCBxLnNpemUoKSwgcS5kYXRhKCkpOworICAgIGlmIChlcnJvciAhPSBH
UEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBjcmVhdGUoaWRlbnRpZmllciwgY3VydmUsIENyeXB0b0tleVR5cGU6OlB1Ymxp
YywgcGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAotUmVm
UHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1JbXBvcnRQa2NzOChDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyLCBOYW1lZEN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwg
Q3J5cHRvS2V5VXNhZ2VCaXRtYXApCitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpw
bGF0Zm9ybUltcG9ydFBrY3M4KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwg
TmFtZWRDdXJ2ZSBjdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0
YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgLy8gUHJpdmF0ZUtleUluZm8gOjo9IFNFUVVFTkNFIHsKKyAgICAvLyAgIHZlcnNp
b24gICAgICAgICAgICAgICAgICAgVmVyc2lvbiwKKyAgICAvLyAgIHByaXZhdGVLZXlBbGdvcml0
aG0gICAgICAgUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgLy8gICBwcml2YXRl
S2V5ICAgICAgICAgICAgICAgIFByaXZhdGVLZXksCisgICAgLy8gICBhdHRyaWJ1dGVzICAgICAg
ICAgICBbMF0gIElNUExJQ0lUIEF0dHJpYnV0ZXMgT1BUSU9OQUwgfQorICAgIGF1dG8gcHJpdmF0
ZUtleUluZm9UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCAwKTsKKyAgICBpZiAoIXByaXZh
dGVLZXlJbmZvVExWLmJ1ZmZlclNpemUgfHwgIXByaXZhdGVLZXlJbmZvVExWLmhhc1RhZyhBU04x
OjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHByaXZh
dGVLZXlJbmZvVExWLmJ1ZmZlclNpemUgIT0ga2V5RGF0YS5zaXplKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgLy8gVmVyc2lvbiA6Oj0gSU5URUdFUgorICAgIGF1dG8gdmVyc2lv
blRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIHByaXZhdGVLZXlJbmZvVExWLnZhbHVlT2Zm
c2V0KCkpOworICAgIGlmICghdmVyc2lvblRMVi5idWZmZXJTaXplIHx8ICF2ZXJzaW9uVExWLmhh
c1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAodmVyc2lvblRMVi5sZW5ndGggIT0gMSAmJiBrZXlEYXRhW3ZlcnNpb25UTFYudmFsdWVPZmZz
ZXQoKV0gIT0gMCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBQcml2YXRlS2V5
QWxnb3JpdGhtSWRlbnRpZmllciA6Oj0gQWxnb3JpdGhtSWRlbnRpZmllcgorICAgIC8vIEFsZ29y
aXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgICBhbGdvcml0aG0gICBP
QkpFQ1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0ZXJzICBBTlkgREVGSU5FRCBCWSBh
bGdvcml0aG0gT1BUSU9OQUwKKyAgICAvLyB9CisgICAgYXV0byBwcml2YXRlS2V5QWxnb3JpdGht
VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwKKyAgICAgICAgcHJpdmF0ZUtleUluZm9UTFYu
dmFsdWVPZmZzZXQoKSArIHZlcnNpb25UTFYuYnVmZmVyU2l6ZSk7CisgICAgaWYgKCFwcml2YXRl
S2V5QWxnb3JpdGhtVExWLmJ1ZmZlclNpemUgfHwgIXByaXZhdGVLZXlBbGdvcml0aG1UTFYuaGFz
VGFnKEFTTjE6OlRhZzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gYWxnb3JpdGhtVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgcHJpdmF0ZUtleUFs
Z29yaXRobVRMVi52YWx1ZU9mZnNldCgpKTsKKyAgICBpZiAoIWFsZ29yaXRobVRMVi5idWZmZXJT
aXplIHx8ICFhbGdvcml0aG1UTFYuaGFzVGFnKEFTTjE6OlRhZzo6T2JqZWN0SWRlbnRpZmllcikp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXBwb3J0ZWRBbGdvcml0aG0g
PSBhbGdvcml0aG1Gb3JJZGVudGlmaWVyKGtleURhdGEuZGF0YSgpICsgYWxnb3JpdGhtVExWLnZh
bHVlT2Zmc2V0KCksIGFsZ29yaXRobVRMVi5sZW5ndGgpOworICAgIGlmICghc3VwcG9ydGVkQWxn
b3JpdGhtKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBudWxscHRyOwor
ICAgIC8vIEVDUGFyYW1ldGVycyA6Oj0gQ0hPSUNFIHsKKyAgICAvLyAgIG5hbWVkQ3VydmUgICAg
ICAgICBPQkpFQ1QgSURFTlRJRklFUiAtLSBNVVNUIGJlIHN1cHBvcnRlZC4KKyAgICAvLyAgIC0t
IGltcGxpY2l0Q3VydmUgICBOVUxMIC0tIE1VU1QgTk9UIGJlIHVzZWQuCisgICAgLy8gICAtLSBz
cGVjaWZpZWRDdXJ2ZSAgU3BlY2lmaWVkRUNEb21haW4gLS0gTVVTVCBOT1QgYmUgdXNlZC4KKyAg
ICAvLyB9CisgICAgYXV0byBlY1BhcmFtZXRlcnNUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRh
LAorICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtVExWLnZhbHVlT2Zmc2V0KCkgKyBhbGdvcml0
aG1UTFYuYnVmZmVyU2l6ZSk7CisgICAgaWYgKCFlY1BhcmFtZXRlcnNUTFYuYnVmZmVyU2l6ZSB8
fCAhZWNQYXJhbWV0ZXJzVExWLmhhc1RhZyhBU04xOjpUYWc6Ok9iamVjdElkZW50aWZpZXIpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGFyYW1ldGVyQ3VydmUgPSBjdXJ2
ZUZvcklkZW50aWZpZXIoa2V5RGF0YS5kYXRhKCkgKyBlY1BhcmFtZXRlcnNUTFYudmFsdWVPZmZz
ZXQoKSwgZWNQYXJhbWV0ZXJzVExWLmxlbmd0aCk7CisgICAgaWYgKCFwYXJhbWV0ZXJDdXJ2ZSB8
fCAqcGFyYW1ldGVyQ3VydmUgIT0gY3VydmUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgaWYgKGFsZ29yaXRobVRMVi5idWZmZXJTaXplICsgZWNQYXJhbWV0ZXJzVExWLmJ1ZmZlclNp
emUgIT0gcHJpdmF0ZUtleUFsZ29yaXRobVRMVi5sZW5ndGgpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgLy8gUHJpdmF0ZUtleSA6Oj0gT0NURVQgU1RSSU5HCisgICAgYXV0byBwcml2
YXRlS2V5VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwKKyAgICAgICAgcHJpdmF0ZUtleUlu
Zm9UTFYudmFsdWVPZmZzZXQoKSArIHZlcnNpb25UTFYuYnVmZmVyU2l6ZSArIHByaXZhdGVLZXlB
bGdvcml0aG1UTFYuYnVmZmVyU2l6ZSk7CisgICAgaWYgKCFwcml2YXRlS2V5VExWLmJ1ZmZlclNp
emUgfHwgIXByaXZhdGVLZXlUTFYuaGFzVGFnKEFTTjE6OlRhZzo6T2N0ZXRTdHJpbmcpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICh2ZXJzaW9uVExWLmJ1ZmZlclNpemUgKyBw
cml2YXRlS2V5QWxnb3JpdGhtVExWLmJ1ZmZlclNpemUgKyBwcml2YXRlS2V5VExWLmJ1ZmZlclNp
emUgIT0gcHJpdmF0ZUtleUluZm9UTFYubGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIEVDUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgIC8vICAgdmVyc2lvbiAg
ICAgICAgSU5URUdFUiB7IGVjUHJpdmtleVZlcjEoMSkgfSAoZWNQcml2a2V5VmVyMSksCisgICAg
Ly8gICBwcml2YXRlS2V5ICAgICBPQ1RFVCBTVFJJTkcsCisgICAgLy8gICBwYXJhbWV0ZXJzIFsw
XSBFQ1BhcmFtZXRlcnMge3sgTmFtZWRDdXJ2ZSB9fSBPUFRJT05BTCwKKyAgICAvLyAgIHB1Ymxp
Y0tleSAgWzFdIEJJVCBTVFJJTkcgT1BUSU9OQUwKKyAgICAvLyB9CisgICAgYXV0byBlY1ByaXZh
dGVLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBwcml2YXRlS2V5VExWLnZhbHVlT2Zm
c2V0KCkpOworICAgIGlmICghZWNQcml2YXRlS2V5VExWLmJ1ZmZlclNpemUgfHwgIWVjUHJpdmF0
ZUtleVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHE7Cisg
ICAgeworICAgICAgICBhdXRvIHZlcnNpb25UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBl
Y1ByaXZhdGVLZXlUTFYudmFsdWVPZmZzZXQoKSk7CisgICAgICAgIGlmICghdmVyc2lvblRMVi5i
dWZmZXJTaXplIHx8ICF2ZXJzaW9uVExWLmhhc1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmICh2ZXJzaW9uVExWLmxlbmd0aCAh
PSAxIHx8IGtleURhdGFbdmVyc2lvblRMVi52YWx1ZU9mZnNldCgpXSAhPSAxKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYXV0byBwcml2YXRlS2V5VExWID0gQVNOMTo6
cGFyc2VUTFYoa2V5RGF0YSwKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNl
dCgpICsgdmVyc2lvblRMVi5idWZmZXJTaXplKTsKKyAgICAgICAgaWYgKCFwcml2YXRlS2V5VExW
LmJ1ZmZlclNpemUgfHwgIXByaXZhdGVLZXlUTFYuaGFzVGFnKEFTTjE6OlRhZzo6T2N0ZXRTdHJp
bmcpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZC5yZXNpemUocHJp
dmF0ZUtleVRMVi5sZW5ndGgpOworICAgICAgICBzdGQ6Om1lbWNweShkLmRhdGEoKSwga2V5RGF0
YS5kYXRhKCkgKyBwcml2YXRlS2V5VExWLnZhbHVlT2Zmc2V0KCksIHByaXZhdGVLZXlUTFYubGVu
Z3RoKTsKKworICAgICAgICBhdXRvIG9wdGlvbmFsVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0
YSwKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNldCgpICsgdmVyc2lvblRM
Vi5idWZmZXJTaXplICsgcHJpdmF0ZUtleVRMVi5idWZmZXJTaXplKTsKKworICAgICAgICAvLyBG
SVhNRTogaGFuZGxlIG9wdGlvbmFsIHBhcmFtZXRlcnMsIHB1YmxpY0tleSBmaWVsZHMuCisgICAg
ICAgIGlmIChvcHRpb25hbFRMVi5idWZmZXJTaXplICYmIG9wdGlvbmFsVExWLnRhZyAmIDB4MjAp
IHsKKyAgICAgICAgICAgIGF1dG8gcHVibGljS2V5VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0
YSwgb3B0aW9uYWxUTFYudmFsdWVPZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAocHVibGljS2V5
VExWLmJ1ZmZlclNpemUgJiYgcHVibGljS2V5VExWLmhhc1RhZyhBU04xOjpUYWc6OkJpdFN0cmlu
ZykpIHsKKyAgICAgICAgICAgICAgICBpZiAoa2V5RGF0YVtwdWJsaWNLZXlUTFYudmFsdWVPZmZz
ZXQoKV0gIT0gMHgwMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgcS5hcHBlbmQoa2V5RGF0YS5kYXRhKCkgKyBwdWJsaWNLZXlUTFYudmFsdWVP
ZmZzZXQoKSArIDEsIHB1YmxpY0tleVRMVi5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh2ZXJzaW9uVExWLmJ1ZmZlclNpemUgKyBwcml2YXRlS2V5
VExWLmJ1ZmZlclNpemUgKyBvcHRpb25hbFRMVi5idWZmZXJTaXplICE9IGVjUHJpdmF0ZUtleVRM
Vi5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAo
ZC5zaXplKCkgKiA4ICE9IGN1cnZlU2l6ZShjdXJ2ZSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKCFxLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAocS5zaXplKCkgIT0gMiAq
IChjdXJ2ZVNpemUoY3VydmUpIC8gOCkgKyAxIHx8IHFbMF0gIT0gMHgwNCkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9z
ZXhwX3Q+IHBsYXRmb3JtS2V5OworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9i
dWlsZCgmcGxhdGZvcm1LZXksIG51bGxwdHIsICIocHJpdmF0ZS1rZXkoZWNjKGN1cnZlICVzKShk
ICViKSkpIiwKKyAgICAgICAgY3VydmVOYW1lKGN1cnZlKSwgZC5zaXplKCksIGQuZGF0YSgpKTsK
KyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlw
dDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICByZXR1cm4gY3JlYXRlKGlkZW50aWZpZXIsIGN1cnZlLCBDcnlwdG9LZXlUeXBlOjpQcml2YXRl
LCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQogCiBWZWN0
b3I8dWludDhfdD4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtRXhwb3J0UmF3KCkgY29uc3QKQEAgLTI3
MCwxNiArNDg3LDI0OSBAQCB2b2lkIENyeXB0b0tleUVDOjpwbGF0Zm9ybUFkZEZpZWxkRWxlbWVu
dHMoSnNvbldlYktleSYgandrKSBjb25zdAogCiBWZWN0b3I8dWludDhfdD4gQ3J5cHRvS2V5RUM6
OnBsYXRmb3JtRXhwb3J0U3BraSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBhdXRvIGFwcGVuZExlbmd0aCA9CisgICAgICAgIFtdKHNpemVfdCBsZW5ndGgsIFZlY3Rvcjx1
aW50OF90PiYgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gMTI3KSB7CisgICAg
ICAgICAgICAgICAgdWludDhfdCBsZW5ndGhCeXRlcyA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIobGVu
Z3RoICsgMSkgLyA4KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDB4ODAgfCBsZW5n
dGhCeXRlcyk7CisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbGVuZ3Ro
Qnl0ZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgobGVuZ3RoID4+
ICgobGVuZ3RoQnl0ZXMgLSBpIC0gMSkgKiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgfTsKKwor
ICAgIC8vIFN1YmplY3RQdWJsaWNLZXlJbmZvICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICBh
bGdvcml0aG0gICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgIC8vICAgc3ViamVj
dFB1YmxpY0tleSAgICAgQklUIFNUUklORyAgfQorCisgICAgLy8gQWxnb3JpdGhtSWRlbnRpZmll
ciAgOjo9ICBTRVFVRU5DRSAgeworICAgIC8vICAgIGFsZ29yaXRobSAgIE9CSkVDVCBJREVOVElG
SUVSLAorICAgIC8vICAgIHBhcmFtZXRlcnMgIEFOWSBERUZJTkVEIEJZIGFsZ29yaXRobSBPUFRJ
T05BTAorICAgIC8vIH0KKyAgICBWZWN0b3I8dWludDhfdD4gYWxnb3JpdGhtSWRlbnRpZmllckRh
dGE7CisgICAgeworICAgICAgICAvLyBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA1
PiBzX2lkRUNESHsgeyAweDJiLCAweDgxLCAweDA0LCAweDAxLCAweDBjIH0gfTsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgNz4gc19pZEVDUHVibGljS2V5eyB7IDB4
MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEgfSB9OworCisgICAgICAgIC8v
IEVDUGFyYW1ldGVycyA6Oj0gQ0hPSUNFIHsKKyAgICAgICAgLy8gICBuYW1lZEN1cnZlICAgICAg
ICAgT0JKRUNUIElERU5USUZJRVIgLS0gTVVTVCBiZSBzdXBwb3J0ZWQuCisgICAgICAgIC8vICAg
LS0gaW1wbGljaXRDdXJ2ZSAgIE5VTEwgLS0gTVVTVCBOT1QgYmUgdXNlZC4KKyAgICAgICAgLy8g
ICAtLSBzcGVjaWZpZWRDdXJ2ZSAgU3BlY2lmaWVkRUNEb21haW4gLS0gTVVTVCBOT1QgYmUgdXNl
ZC4KKyAgICAgICAgLy8gfQorICAgICAgICBWZWN0b3I8dWludDhfdD4gZWNQYXJhbWV0ZXJzRGF0
YTsKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgOD4gc19zZWNwMjU2cjF7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMywg
MHgwMSwgMHgwNyB9IH07CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCA1PiBzX3NlY3AzODRyMXsgeyAweDJiLCAweDgxLCAweDA0LCAweDAwLCAweDIyIH0gfTsK
KworICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoMHgwNik7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9jdXJ2ZSkgeworICAgICAgICAgICAgY2FzZSBOYW1lZEN1cnZlOjpQMjU2
OgorICAgICAgICAgICAgICAgIGVjUGFyYW1ldGVyc0RhdGEuYXBwZW5kKHNfc2VjcDI1NnIxLnNp
emUoKSk7CisgICAgICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMjU2
cjEuZGF0YSgpLCBzX3NlY3AyNTZyMS5zaXplKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBOYW1lZEN1cnZlOjpQMzg0OgorICAgICAgICAgICAgICAgIGVjUGFy
YW1ldGVyc0RhdGEuYXBwZW5kKHNfc2VjcDM4NHIxLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
ZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMzg0cjEuZGF0YSgpLCBzX3NlY3AzODRyMS5z
aXplKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKDB4MzApOworICAgICAg
ICBhcHBlbmRMZW5ndGgoMiArIHNfaWRFQ1B1YmxpY0tleS5zaXplKCkgKyBlY1BhcmFtZXRlcnNE
YXRhLnNpemUoKSwgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEpOworCisgICAgICAgIC8vIGFsZ29y
aXRobQorICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgwNik7CisgICAg
ICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVuZChzX2lkRUNQdWJsaWNLZXkuc2l6ZSgp
KTsKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKHNfaWRFQ1B1YmxpY0tl
eS5kYXRhKCksIHNfaWRFQ1B1YmxpY0tleS5zaXplKCkpOworCisgICAgICAgIC8vIHBhcmFtZXRl
cnMKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kVmVjdG9yKGVjUGFyYW1l
dGVyc0RhdGEpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBzdWJqZWN0UHVibGljS2V5
RGF0YTsKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBxOworICAgICAgICB7CisgICAg
ICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBxU2V4cChnY3J5X3NleHBf
ZmluZF90b2tlbihtX3BsYXRmb3JtS2V5LCAicSIsIDApKTsKKyAgICAgICAgICAgIGlmICghcVNl
eHApCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgc2l6ZV90IHBv
aW50U2l6ZSA9IDIgKiAoY3VydmVTaXplKG1fY3VydmUpIC8gOCk7CisgICAgICAgICAgICBzaXpl
X3QgZGF0YUxlbmd0aCA9IDA7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gZ2NyeV9z
ZXhwX250aF9kYXRhKHFTZXhwLCAxLCAmZGF0YUxlbmd0aCk7CisgICAgICAgICAgICBpZiAoIWRh
dGEgfHwgZGF0YUxlbmd0aCAhPSBwb2ludFNpemUgKyAxIHx8IGRhdGFbMF0gIT0gMHgwNCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICBxLmFwcGVuZChkYXRhLCBk
YXRhTGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlEYXRhLmFw
cGVuZCgweDAzKTsKKyAgICAgICAgYXBwZW5kTGVuZ3RoKDEgKyBxLnNpemUoKSwgc3ViamVjdFB1
YmxpY0tleURhdGEpOworICAgICAgICBzdWJqZWN0UHVibGljS2V5RGF0YS5hcHBlbmQoMHgwMCk7
CisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlEYXRhLmFwcGVuZFZlY3RvcihxKTsKKyAgICB9CisK
KyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoMHgzMCk7Cisg
ICAgYXBwZW5kTGVuZ3RoKGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLnNpemUoKSArIHN1YmplY3RQ
dWJsaWNLZXlEYXRhLnNpemUoKSwgcmVzdWx0KTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGFs
Z29yaXRobUlkZW50aWZpZXJEYXRhKTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHN1YmplY3RQ
dWJsaWNLZXlEYXRhKTsKIAotICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUV4cG9ydFBrY3M4KCkgY29u
c3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGF1dG8gYXBwZW5kTGVuZ3RoID0KKyAg
ICAgICAgW10oc2l6ZV90IGxlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIHsKKyAgICAg
ICAgICAgIGlmIChsZW5ndGggPiAxMjcpIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGxlbmd0
aEJ5dGVzID0gc3RkOjpjZWlsKHN0ZDo6bG9nMihsZW5ndGggKyAxKSAvIDgpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoMHg4MCB8IGxlbmd0aEJ5dGVzKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBsZW5ndGhCeXRlczsgKytpKQorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKChsZW5ndGggPj4gKChsZW5ndGhCeXRlcyAtIGkgLSAxKSAq
IDgpICYgMHhmZikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChsZW5ndGgpOworICAgICAgICB9OworCisgICAgLy8gUHJpdmF0ZUtleUluZm8gOjo9
IFNFUVVFTkNFIHsKKyAgICAvLyAgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgVmVyc2lvbiwK
KyAgICAvLyAgIHByaXZhdGVLZXlBbGdvcml0aG0gICAgICAgUHJpdmF0ZUtleUFsZ29yaXRobUlk
ZW50aWZpZXIsCisgICAgLy8gICBwcml2YXRlS2V5ICAgICAgICAgICAgICAgIFByaXZhdGVLZXks
CisgICAgLy8gICBhdHRyaWJ1dGVzICAgICAgICAgICBbMF0gIElNUExJQ0lUIEF0dHJpYnV0ZXMg
T1BUSU9OQUwgfQorCisgICAgLy8gVmVyc2lvbiA6Oj0gSU5URUdFUgorICAgIHN0YXRpYyBjb25z
dCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDM+IHNfdmVyc2lvbkRhdGF7IHsgMHgwMiwgMHgwMSwgMHgw
MCB9IH07CisKKyAgICAvLyBQcml2YXRlS2V5QWxnb3JpdGhtSWRlbnRpZmllciA6Oj0gQWxnb3Jp
dGhtSWRlbnRpZmllcgorICAgIC8vIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0Ug
IHsKKyAgICAvLyAgICBhbGdvcml0aG0gICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBw
YXJhbWV0ZXJzICBBTlkgREVGSU5FRCBCWSBhbGdvcml0aG0gT1BUSU9OQUwKKyAgICAvLyB9Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlBbGdvcml0aG1EYXRhOworICAgIHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgNz4gc19pZEVDUHVibGljS2V5eyB7
IDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEgfSB9OworCisgICAgICAg
IC8vIEVDUGFyYW1ldGVycyA6Oj0gQ0hPSUNFIHsKKyAgICAgICAgLy8gICBuYW1lZEN1cnZlICAg
ICAgICAgT0JKRUNUIElERU5USUZJRVIgLS0gTVVTVCBiZSBzdXBwb3J0ZWQuCisgICAgICAgIC8v
ICAgLS0gaW1wbGljaXRDdXJ2ZSAgIE5VTEwgLS0gTVVTVCBOT1QgYmUgdXNlZC4KKyAgICAgICAg
Ly8gICAtLSBzcGVjaWZpZWRDdXJ2ZSAgU3BlY2lmaWVkRUNEb21haW4gLS0gTVVTVCBOT1QgYmUg
dXNlZC4KKyAgICAgICAgLy8gfQorICAgICAgICBWZWN0b3I8dWludDhfdD4gZWNQYXJhbWV0ZXJz
RGF0YTsKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgOD4gc19zZWNwMjU2cjF7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgw
MywgMHgwMSwgMHgwNyB9IH07CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCA1PiBzX3NlY3AzODRyMXsgeyAweDJiLCAweDgxLCAweDA0LCAweDAwLCAweDIyIH0g
fTsKKworICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoMHgwNik7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAobV9jdXJ2ZSkgeworICAgICAgICAgICAgY2FzZSBOYW1lZEN1cnZlOjpQ
MjU2OgorICAgICAgICAgICAgICAgIGVjUGFyYW1ldGVyc0RhdGEuYXBwZW5kKHNfc2VjcDI1NnIx
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNw
MjU2cjEuZGF0YSgpLCBzX3NlY3AyNTZyMS5zaXplKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBOYW1lZEN1cnZlOjpQMzg0OgorICAgICAgICAgICAgICAgIGVj
UGFyYW1ldGVyc0RhdGEuYXBwZW5kKHNfc2VjcDM4NHIxLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMzg0cjEuZGF0YSgpLCBzX3NlY3AzODRy
MS5zaXplKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEuYXBwZW5kKDB4MzApOworICAg
ICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoMiArIHNfaWRFQ1B1YmxpY0tleS5z
aXplKCkgKyBlY1BhcmFtZXRlcnNEYXRhLnNpemUoKSk7CisKKyAgICAgICAgcHJpdmF0ZUtleUFs
Z29yaXRobURhdGEuYXBwZW5kKDB4MDYpOworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0
YS5hcHBlbmQoc19pZEVDUHVibGljS2V5LnNpemUoKSk7CisgICAgICAgIHByaXZhdGVLZXlBbGdv
cml0aG1EYXRhLmFwcGVuZChzX2lkRUNQdWJsaWNLZXkuZGF0YSgpLCBzX2lkRUNQdWJsaWNLZXku
c2l6ZSgpKTsKKworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmRWZWN0b3Io
ZWNQYXJhbWV0ZXJzRGF0YSk7CisgICAgfQorCisgICAgLy8gUHJpdmF0ZUtleSA6Oj0gT0NURVQg
U1RSSU5HCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlEYXRhOworICAgIHsKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGQ7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBxOworICAgICAg
ICB7CisgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY3R4X3Q+IGNvbnRleHQ7
CisgICAgICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X21waV9lY19uZXcoJmNvbnRl
eHQsIG1fcGxhdGZvcm1LZXksIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQ
R19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZE1Q
SShnY3J5X21waV9lY19nZXRfbXBpKCJkIiwgY29udGV4dCwgMCkpOworICAgICAgICAgICAgICAg
IGlmICghZE1QSSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAg
ICAgICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGdj
cnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwgMCwgJmRhdGFMZW5ndGgsIGRN
UEkpOworICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICAgICAgZC5yZXNpemUo
ZGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZ
TVBJX0ZNVF9VU0csIGQuZGF0YSgpLCBkLnNpemUoKSwgbnVsbHB0ciwgZE1QSSk7CisgICAgICAg
ICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBxTVBJKGdjcnlfbXBpX2VjX2dl
dF9tcGkoInEiLCBjb250ZXh0LCAwKSk7CisgICAgICAgICAgICAgICAgaWYgKCFxTVBJKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICAgICAgc2l6ZV90IGRh
dGFMZW5ndGggPSAwOworICAgICAgICAgICAgICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NS
WU1QSV9GTVRfVVNHLCBudWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgcU1QSSk7CisgICAgICAgICAg
ICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB7IH07CisKKyAgICAgICAgICAgICAgICBxLnJlc2l6ZShkYXRhTGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgcS5k
YXRhKCksIHEuc2l6ZSgpLCBudWxscHRyLCBxTVBJKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEVDUHJpdmF0ZUtleSA6Oj0g
U0VRVUVOQ0UgeworICAgICAgICAvLyAgIHZlcnNpb24gICAgICAgIElOVEVHRVIgeyBlY1ByaXZr
ZXlWZXIxKDEpIH0gKGVjUHJpdmtleVZlcjEpLAorICAgICAgICAvLyAgIHByaXZhdGVLZXkgICAg
IE9DVEVUIFNUUklORywKKyAgICAgICAgLy8gICBwYXJhbWV0ZXJzIFswXSBFQ1BhcmFtZXRlcnMg
e3sgTmFtZWRDdXJ2ZSB9fSBPUFRJT05BTCwKKyAgICAgICAgLy8gICBwdWJsaWNLZXkgIFsxXSBC
SVQgU1RSSU5HIE9QVElPTkFMCisgICAgICAgIC8vIH0KKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGVjUHJpdmF0ZUtleURhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURh
dGEuYXBwZW5kKDB4MzApOworICAgICAgICAgICAgYXBwZW5kTGVuZ3RoKDMgKyAyICsgZC5zaXpl
KCkgKyAyICsgMyArIHEuc2l6ZSgpLCBlY1ByaXZhdGVLZXlEYXRhKTsKKworICAgICAgICAgICAg
Ly8gdmVyc2lvbgorICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoMHgwMik7Cisg
ICAgICAgICAgICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZCgxKTsKKyAgICAgICAgICAgIGVjUHJp
dmF0ZUtleURhdGEuYXBwZW5kKDEpOworCisgICAgICAgICAgICAvLyBwcml2YXRlS2V5CisgICAg
ICAgICAgICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZCgweDA0KTsKKyAgICAgICAgICAgIGVjUHJp
dmF0ZUtleURhdGEuYXBwZW5kKGQuc2l6ZSgpKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURh
dGEuYXBwZW5kVmVjdG9yKGQpOworCisgICAgICAgICAgICAvLyBwdWJsaWNLZXkKKyAgICAgICAg
ICAgIGVjUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4QTEpOworICAgICAgICAgICAgZWNQcml2YXRl
S2V5RGF0YS5hcHBlbmQoMyArIHEuc2l6ZSgpKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURh
dGEuYXBwZW5kKDB4MDMpOworICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoMSAr
IHEuc2l6ZSgpKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4MDApOwor
ICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IocSk7CisgICAgICAgIH0K
KworICAgICAgICBwcml2YXRlS2V5RGF0YS5hcHBlbmQoMHgwNCk7CisgICAgICAgIGFwcGVuZExl
bmd0aChlY1ByaXZhdGVLZXlEYXRhLnNpemUoKSwgcHJpdmF0ZUtleURhdGEpOworICAgICAgICBw
cml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IoZWNQcml2YXRlS2V5RGF0YSk7CisgICAgfQorCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKDB4MzApOworICAg
IGFwcGVuZExlbmd0aChzX3ZlcnNpb25EYXRhLnNpemUoKSArIHByaXZhdGVLZXlBbGdvcml0aG1E
YXRhLnNpemUoKSArIHByaXZhdGVLZXlEYXRhLnNpemUoKSwgcmVzdWx0KTsKKyAgICByZXN1bHQu
YXBwZW5kKHNfdmVyc2lvbkRhdGEuZGF0YSgpLCBzX3ZlcnNpb25EYXRhLnNpemUoKSk7CisgICAg
cmVzdWx0LmFwcGVuZFZlY3Rvcihwcml2YXRlS2V5QWxnb3JpdGhtRGF0YSk7CisgICAgcmVzdWx0
LmFwcGVuZFZlY3Rvcihwcml2YXRlS2V5RGF0YSk7CiAKLSAgICByZXR1cm4geyB9OworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNwcAppbmRleCAwN2Vi
MzE4OGE5OC4uYWMwNTkwZTIyYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Z2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAKQEAgLTMyLDI0ICszMiwxNDcgQEAKICNpbmNs
dWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVBh
aXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8cGFs
L2NyeXB0by9nY3J5cHQvQVNOMS5oPgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRs
ZS5oPgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6Y3JlYXRl
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIGNvbnN0IENyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2Fn
ZSkKK3N0YXRpYyBzaXplX3QgZ2V0UlNBTW9kdWx1c0xlbmd0aChnY3J5X3NleHBfdCBzZXhwKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlkZW50aWZpZXIpOwot
ICAgIFVOVVNFRF9QQVJBTShoYXNoKTsKLSAgICBVTlVTRURfUEFSQU0oaGFzSGFzaCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGtleURhdGEpOwotICAgIFVOVVNFRF9QQVJBTShleHRyYWN0YWJsZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4
cF90PiBuU2V4cChnY3J5X3NleHBfZmluZF90b2tlbihzZXhwLCAibiIsIDApKTsKKyAgICBpZiAo
IW5TZXhwKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBudWxscHRyOworICAgIFBB
TDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gbk1QSShnY3J5X3NleHBfbnRoX21waShuU2V4
cCwgMSwgR0NSWU1QSV9GTVRfVVNHKSk7CisgICAgaWYgKCFuTVBJKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3Ig
PSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3Ro
LCBuTVBJKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQ
QUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICByZXR1cm4gZGF0YUxlbmd0aCAqIDg7Cit9CisKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4g
Z2V0UGFyYW1ldGVyTVBJRGF0YShnY3J5X21waV90IHBhcmFtTVBJKQoreworICAgIHNpemVfdCBk
YXRhTGVuZ3RoID0gMDsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X21waV9wcmludChH
Q1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBwYXJhbU1QSSk7CisgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6Omxv
Z0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8
dWludDhfdD4gcGFyYW1ldGVyKGRhdGFMZW5ndGgpOworICAgIGVycm9yID0gZ2NyeV9tcGlfcHJp
bnQoR0NSWU1QSV9GTVRfVVNHLCBwYXJhbWV0ZXIuZGF0YSgpLCBwYXJhbWV0ZXIuc2l6ZSgpLCBu
dWxscHRyLCBwYXJhbU1QSSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsK
KyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFyYW1ldGVyOworfQorCitzdGF0aWMgVmVjdG9yPHVp
bnQ4X3Q+IGdldFJTQUtleVBhcmFtZXRlcihnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyKiBu
YW1lLCBlbnVtIGdjcnlfbXBpX2Zvcm1hdCBmb3JtYXQgPSBHQ1JZTVBJX0ZNVF9VU0cpCit7Cisg
ICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4gcGFyYW1TZXhwKGdjcnlfc2V4cF9m
aW5kX3Rva2VuKHNleHAsIG5hbWUsIDApKTsKKyAgICBpZiAoIXBhcmFtU2V4cCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gcGFyYW1N
UEkoZ2NyeV9zZXhwX250aF9tcGkocGFyYW1TZXhwLCAxLCBmb3JtYXQpKTsKKyAgICBpZiAoIXBh
cmFtTVBJKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHBhcmFt
ZXRlcjsKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgZ2NyeV9lcnJvcl90IGVycm9y
ID0gZ2NyeV9tcGlfcHJpbnQoZm9ybWF0LCBudWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgcGFyYW1N
UEkpOworICAgIGlmIChlcnJvciA9PSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIHBhcmFt
ZXRlci5yZXNpemUoZGF0YUxlbmd0aCk7CisgICAgICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQo
Zm9ybWF0LCBwYXJhbWV0ZXIuZGF0YSgpLCBwYXJhbWV0ZXIuc2l6ZSgpLCBudWxscHRyLCBwYXJh
bU1QSSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAg
ICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFy
YW1ldGVyOworfQorCitSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgaGFzaCwgYm9vbCBoYXNIYXNoLCBjb25zdCBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50
cyYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2Vz
KQoreworICAgIGlmIChrZXlEYXRhLnR5cGUoKSA9PSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50
czo6VHlwZTo6UHJpdmF0ZSAmJiAha2V5RGF0YS5oYXNBZGRpdGlvbmFsUHJpdmF0ZUtleVBhcmFt
ZXRlcnMoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWtleURhdGEub3Ro
ZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIFZhbGlkYXRlIHRoZSBrZXkgZGF0YS4KKyAgICB7CisgICAgICAgIGJvb2wgdmFsaWQgPSB0
cnVlOworCisgICAgICAgIHZhbGlkICY9ICFrZXlEYXRhLm1vZHVsdXMoKS5pc0VtcHR5KCkgJiYg
IWtleURhdGEuZXhwb25lbnQoKS5pc0VtcHR5KCk7CisgICAgICAgIGlmIChrZXlEYXRhLnR5cGUo
KSA9PSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHJpdmF0ZSkKKyAgICAgICAg
ICAgIHZhbGlkICY9ICFrZXlEYXRhLnByaXZhdGVFeHBvbmVudCgpLmlzRW1wdHkoKSAmJiAha2V5
RGF0YS5maXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yLmlzRW1wdHkoKSAmJiAha2V5RGF0YS5z
ZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvci5pc0VtcHR5KCk7CisKKyAgICAgICAgaWYgKCF2
YWxpZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIENyeXB0b0tl
eVR5cGUga2V5VHlwZTsKKyAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7CisgICAgY2FzZSBD
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHVibGljOgorICAgICAgICBrZXlUeXBl
ID0gQ3J5cHRvS2V5VHlwZTo6UHVibGljOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENyeXB0
b0tleURhdGFSU0FDb21wb25lbnRzOjpUeXBlOjpQcml2YXRlOgorICAgICAgICBrZXlUeXBlID0g
Q3J5cHRvS2V5VHlwZTo6UHJpdmF0ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUEFM
OjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4ga2V5U2V4cDsKKyAgICB7CisgICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzX3B1YmxpY0tleVNleHBGb3JtYXQgPSAiKHB1YmxpYy1rZXkocnNh
KG4gJWIpKGUgJWIpKSkiOworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc19wcml2YXRlS2V5
U2V4cEZvcm1hdCA9ICIocHJpdmF0ZS1rZXkocnNhKG4gJWIpKGUgJWIpKGQgJWIpKSkiOworICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogc19wcml2YXRlS2V5QWRkaXRpb25hbFBhcmFtZXRlcnNT
ZXhwRm9ybWF0ID0gIihwcml2YXRlLWtleShyc2EobiAlYikoZSAlYikoZCAlYikocCAlYikocSAl
YikpKSI7CisKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gR1BHX0VSUl9OT19FUlJPUjsK
KworICAgICAgICBzd2l0Y2ggKGtleVR5cGUpIHsKKyAgICAgICAgY2FzZSBDcnlwdG9LZXlUeXBl
OjpQdWJsaWM6CisgICAgICAgICAgICBlcnJvciA9IGdjcnlfc2V4cF9idWlsZCgma2V5U2V4cCwg
bnVsbHB0ciwgc19wdWJsaWNLZXlTZXhwRm9ybWF0LAorICAgICAgICAgICAgICAgIGtleURhdGEu
bW9kdWx1cygpLnNpemUoKSwga2V5RGF0YS5tb2R1bHVzKCkuZGF0YSgpLAorICAgICAgICAgICAg
ICAgIGtleURhdGEuZXhwb25lbnQoKS5zaXplKCksIGtleURhdGEuZXhwb25lbnQoKS5kYXRhKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0
ZToKKyAgICAgICAgICAgIGlmIChrZXlEYXRhLmhhc0FkZGl0aW9uYWxQcml2YXRlS2V5UGFyYW1l
dGVycygpKSB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBnY3J5X3NleHBfYnVpbGQoJmtleVNl
eHAsIG51bGxwdHIsIHNfcHJpdmF0ZUtleUFkZGl0aW9uYWxQYXJhbWV0ZXJzU2V4cEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAga2V5RGF0YS5tb2R1bHVzKCkuc2l6ZSgpLCBrZXlEYXRhLm1v
ZHVsdXMoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgIGtleURhdGEuZXhwb25lbnQoKS5z
aXplKCksIGtleURhdGEuZXhwb25lbnQoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgIGtl
eURhdGEucHJpdmF0ZUV4cG9uZW50KCkuc2l6ZSgpLCBrZXlEYXRhLnByaXZhdGVFeHBvbmVudCgp
LmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAga2V5RGF0YS5zZWNvbmRQcmltZUluZm8oKS5w
cmltZUZhY3Rvci5zaXplKCksIGtleURhdGEuc2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3Iu
ZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBrZXlEYXRhLmZpcnN0UHJpbWVJbmZvKCkucHJp
bWVGYWN0b3Iuc2l6ZSgpLCBrZXlEYXRhLmZpcnN0UHJpbWVJbmZvKCkucHJpbWVGYWN0b3IuZGF0
YSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZXJyb3IgPSBnY3J5X3NleHBfYnVpbGQoJmtleVNleHAsIG51bGxwdHIsIHNfcHJpdmF0ZUtl
eVNleHBGb3JtYXQsCisgICAgICAgICAgICAgICAga2V5RGF0YS5tb2R1bHVzKCkuc2l6ZSgpLCBr
ZXlEYXRhLm1vZHVsdXMoKS5kYXRhKCksCisgICAgICAgICAgICAgICAga2V5RGF0YS5leHBvbmVu
dCgpLnNpemUoKSwga2V5RGF0YS5leHBvbmVudCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBr
ZXlEYXRhLnByaXZhdGVFeHBvbmVudCgpLnNpemUoKSwga2V5RGF0YS5wcml2YXRlRXhwb25lbnQo
KS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3J5cHRvS2V5VHlw
ZTo6U2VjcmV0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvciAhPSBHUEdf
RVJSX05PX0VSUk9SKSB7CisgICAgICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3Ip
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleVJTQShpZGVudGlmaWVyLCBoYXNoLCBoYXNIYXNo
LCBrZXlUeXBlLCBrZXlTZXhwLnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQog
CiBDcnlwdG9LZXlSU0E6OkNyeXB0b0tleVJTQShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlk
ZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBoYXNIYXNoLCBD
cnlwdG9LZXlUeXBlIHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBsYXRmb3JtS2V5LCBib29sIGV4dHJh
Y3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZSkKQEAgLTc3LDggKzIwMCw3IEBAIGJv
b2wgQ3J5cHRvS2V5UlNBOjppc1Jlc3RyaWN0ZWRUb0hhc2goQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciYgaWRlbnRpZmllcikgY29uCiAKIHNpemVfdCBDcnlwdG9LZXlSU0E6OmtleVNpemVJbkJp
dHMoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGdldFJTQU1vZHVsdXNMZW5ndGgobV9wbGF0Zm9ybUtleSk7CiB9CiAKIC8vIENvbnZl
cnQgdGhlIGV4cG9uZW50IHZlY3RvciB0byBhIDMyLWJpdCB2YWx1ZSwgaWYgcG9zc2libGUuCkBA
IC0xNDcsNDcgKzI2OSw2NDIgQEAgdm9pZCBDcnlwdG9LZXlSU0E6OmdlbmVyYXRlUGFpcihDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgQ3J5cHRvQWxnb3IKICAgICAgICAgfSk7
CiB9CiAKLVJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI+LCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApCitl
bnVtIGNsYXNzIFJTQUFsZ29yaXRobSB7CisgICAgUlNBRW5jcnlwdGlvbiwKKyAgICBSU0FFU19P
QUVQLAorICAgIFJTQVNTQV9QU1MsCit9OworCitzdGF0aWMgc3RkOjpvcHRpb25hbDxSU0FBbGdv
cml0aG0+IGFsZ29yaXRobUZvcklkZW50aWZpZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgOT4gc19yc2FF
bmNyeXB0aW9ueyB7IDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4ZjcsIDB4MGQsIDB4MDEsIDB4
MDEsIDB4MDEgfSB9OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDk+IHNf
aWRSU0FFU19PQUVQeyB7IDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4ZjcsIDB4MGQsIDB4MDEs
IDB4MDEsIDB4MDcgfSB9OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDk+
IHNfaWRSU0FTU0FfUFNTeyB7IDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4ZjcsIDB4MGQsIDB4
MDEsIDB4MDEsIDB4MGEgfSB9OworCisgICAgaWYgKHNpemUgIT0gOSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghc3RkOjptZW1jbXAoZGF0YSwgc19yc2FFbmNyeXB0
aW9uLmRhdGEoKSwgc2l6ZSkpCisgICAgICAgIHJldHVybiBSU0FBbGdvcml0aG06OlJTQUVuY3J5
cHRpb247CisgICAgaWYgKCFzdGQ6Om1lbWNtcChkYXRhLCBzX2lkUlNBRVNfT0FFUC5kYXRhKCks
IHNpemUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghc3RkOjptZW1j
bXAoZGF0YSwgc19pZFJTQVNTQV9QU1MuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQdHI8Q3J5cHRv
S2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2koQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI+IGhh
c2gsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlQml0bWFwIHVzYWdlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFN1
YmplY3RQdWJsaWNLZXlJbmZvICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICBhbGdvcml0aG0g
ICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgIC8vICAgc3ViamVjdFB1YmxpY0tl
eSAgICAgQklUIFNUUklORyAgfQorICAgIGF1dG8gc3ViamVjdFB1YmxpY0tleUluZm9UTFYgPSBB
U04xOjpwYXJzZVRMVihrZXlEYXRhLCAwKTsKKyAgICBpZiAoIXN1YmplY3RQdWJsaWNLZXlJbmZv
VExWLmJ1ZmZlclNpemUgfHwgIXN1YmplY3RQdWJsaWNLZXlJbmZvVExWLmhhc1RhZyhBU04xOjpU
YWc6OlNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBBbGdvcml0
aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAgT0JK
RUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxn
b3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIGF1dG8gYWxnb3JpdGhtSWRlbnRpZmllclRM
ViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIHN1YmplY3RQdWJsaWNLZXlJbmZvVExWLnZhbHVl
T2Zmc2V0KCkpOworICAgIGlmICghYWxnb3JpdGhtSWRlbnRpZmllclRMVi5idWZmZXJTaXplIHx8
ICFhbGdvcml0aG1JZGVudGlmaWVyVExWLmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGFsZ29yaXRobVRMViA9IEFTTjE6OnBh
cnNlVExWKGtleURhdGEsIGFsZ29yaXRobUlkZW50aWZpZXJUTFYudmFsdWVPZmZzZXQoKSk7Cisg
ICAgaWYgKCFhbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSB8fCAhYWxnb3JpdGhtVExWLmhhc1RhZyhB
U04xOjpUYWc6Ok9iamVjdElkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGF1dG8gc3VwcG9ydGVkQWxnb3JpdGhtID0gYWxnb3JpdGhtRm9ySWRlbnRpZmllcihrZXlE
YXRhLmRhdGEoKSArIGFsZ29yaXRobVRMVi52YWx1ZU9mZnNldCgpLCBhbGdvcml0aG1UTFYubGVu
Z3RoKTsKKyAgICBpZiAoIXN1cHBvcnRlZEFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHN1YmplY3RQdWJsaWNLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlE
YXRhLAorICAgICAgICBzdWJqZWN0UHVibGljS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpICsgYWxn
b3JpdGhtSWRlbnRpZmllclRMVi5idWZmZXJTaXplKTsKKyAgICBpZiAoIXN1YmplY3RQdWJsaWNL
ZXlUTFYuYnVmZmVyU2l6ZSB8fCAhc3ViamVjdFB1YmxpY0tleVRMVi5oYXNUYWcoQVNOMTo6VGFn
OjpCaXRTdHJpbmcpCisgICAgICAgIHx8IGtleURhdGFbc3ViamVjdFB1YmxpY0tleVRMVi52YWx1
ZU9mZnNldCgpXSAhPSAweDAwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFJT
QVB1YmxpY0tleSA6Oj0gU0VRVUVOQ0UgeworICAgIC8vICAgbW9kdWx1cyAgICAgICAgICAgSU5U
RUdFUiwgIC0tIG4KKyAgICAvLyAgIHB1YmxpY0V4cG9uZW50ICAgIElOVEVHRVIgICAtLSBlCisg
ICAgLy8gfQorICAgIGF1dG8gcnNhUHVibGljS2V5VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0
YSwgc3ViamVjdFB1YmxpY0tleVRMVi52YWx1ZU9mZnNldCgpICsgMSk7CisgICAgaWYgKCFyc2FQ
dWJsaWNLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhcnNhUHVibGljS2V5VExWLmhhc1RhZyhBU04xOjpU
YWc6OlNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU04xOjpUTFYg
bW9kdWx1c1RMVjsKKyAgICBBU04xOjpUTFYgcHVibGljRXhwb25lbnRUTFY7CisgICAgeworICAg
ICAgICBzaXplX3Qgb2Zmc2V0ID0gcnNhUHVibGljS2V5VExWLnZhbHVlT2Zmc2V0KCk7CisgICAg
ICAgIG1vZHVsdXNUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAg
ICBpZiAoIW1vZHVsdXNUTFYuYnVmZmVyU2l6ZSB8fCAhbW9kdWx1c1RMVi5oYXNUYWcoQVNOMTo6
VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9m
ZnNldCArPSBtb2R1bHVzVExWLmJ1ZmZlclNpemU7CisgICAgICAgIHB1YmxpY0V4cG9uZW50VExW
ID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwdWJsaWNF
eHBvbmVudFRMVi5idWZmZXJTaXplIHx8ICFwdWJsaWNFeHBvbmVudFRMVi5oYXNUYWcoQVNOMTo6
VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlm
IChtb2R1bHVzVExWLmJ1ZmZlclNpemUgKyBwdWJsaWNFeHBvbmVudFRMVi5idWZmZXJTaXplICE9
IHJzYVB1YmxpY0tleVRMVi5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlf
c2V4cF90PiBwbGF0Zm9ybUtleTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3NleHBf
YnVpbGQoJnBsYXRmb3JtS2V5LCBudWxscHRyLCAiKHB1YmxpYy1rZXkocnNhKG4gJWIpKGUgJWIp
KSkiLAorICAgICAgICBtb2R1bHVzVExWLmxlbmd0aCwga2V5RGF0YS5kYXRhKCkgKyBtb2R1bHVz
VExWLnZhbHVlT2Zmc2V0KCksCisgICAgICAgIHB1YmxpY0V4cG9uZW50VExWLmxlbmd0aCwga2V5
RGF0YS5kYXRhKCkgKyBwdWJsaWNFeHBvbmVudFRMVi52YWx1ZU9mZnNldCgpKTsKKyAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJy
b3IoZXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENyeXB0b0tleVJTQShpZGVudGlmaWVyLCBoYXNoLnZhbHVlX29yKENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwgISFoYXNoLCBDcnlwdG9LZXlUeXBlOjpQdWJs
aWMsIHBsYXRmb3JtS2V5LnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOzsKIH0KIAot
UmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI+
LCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApCitSZWZQdHI8
Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDxDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyPiBoYXNoLCBWZWN0b3I8dWludDhfdD4mJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBD
cnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAvLyBQcml2YXRlS2V5SW5mbyA6Oj0gU0VRVUVOQ0UgeworICAgIC8vICAgdmVyc2lvbiAgICAg
ICAgICAgICAgICAgICBWZXJzaW9uLAorICAgIC8vICAgcHJpdmF0ZUtleUFsZ29yaXRobSAgICAg
ICBQcml2YXRlS2V5QWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAvLyAgIHByaXZhdGVLZXkgICAg
ICAgICAgICAgICAgUHJpdmF0ZUtleSwKKyAgICAvLyAgIGF0dHJpYnV0ZXMgICAgICAgICAgIFsw
XSAgSU1QTElDSVQgQXR0cmlidXRlcyBPUFRJT05BTCB9CisgICAgYXV0byBwcml2YXRlS2V5SW5m
b1RMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIDApOworICAgIGlmICghcHJpdmF0ZUtleUlu
Zm9UTFYuYnVmZmVyU2l6ZSB8fCAhcHJpdmF0ZUtleUluZm9UTFYuaGFzVGFnKEFTTjE6OlRhZzo6
U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocHJpdmF0ZUtleUlu
Zm9UTFYuYnVmZmVyU2l6ZSAhPSBrZXlEYXRhLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAvLyBWZXJzaW9uIDo6PSBJTlRFR0VSCisgICAgYXV0byB2ZXJzaW9uVExWID0g
QVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgcHJpdmF0ZUtleUluZm9UTFYudmFsdWVPZmZzZXQoKSk7
CisgICAgaWYgKCF2ZXJzaW9uVExWLmJ1ZmZlclNpemUgfHwgIXZlcnNpb25UTFYuaGFzVGFnKEFT
TjE6OlRhZzo6SW50ZWdlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICh2ZXJz
aW9uVExWLmxlbmd0aCAhPSAxICYmIGtleURhdGFbdmVyc2lvblRMVi52YWx1ZU9mZnNldCgpXSAh
PSAwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFByaXZhdGVLZXlBbGdvcml0
aG1JZGVudGlmaWVyIDo6PSBBbGdvcml0aG1JZGVudGlmaWVyCisgICAgLy8gQWxnb3JpdGhtSWRl
bnRpZmllciAgOjo9ICBTRVFVRU5DRSAgeworICAgIC8vICAgIGFsZ29yaXRobSAgIE9CSkVDVCBJ
REVOVElGSUVSLAorICAgIC8vICAgIHBhcmFtZXRlcnMgIEFOWSBERUZJTkVEIEJZIGFsZ29yaXRo
bSBPUFRJT05BTAorICAgIC8vIH0KKyAgICBhdXRvIHByaXZhdGVLZXlBbGdvcml0aG1UTFYgPSBB
U04xOjpwYXJzZVRMVihrZXlEYXRhLAorICAgICAgICBwcml2YXRlS2V5SW5mb1RMVi52YWx1ZU9m
ZnNldCgpICsgdmVyc2lvblRMVi5idWZmZXJTaXplKTsKKyAgICBpZiAoIXByaXZhdGVLZXlBbGdv
cml0aG1UTFYuYnVmZmVyU2l6ZSB8fCAhcHJpdmF0ZUtleUFsZ29yaXRobVRMVi5oYXNUYWcoQVNO
MTo6VGFnOjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBh
bGdvcml0aG1UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBwcml2YXRlS2V5QWxnb3JpdGht
VExWLnZhbHVlT2Zmc2V0KCkpOworICAgIGlmICghYWxnb3JpdGhtVExWLmJ1ZmZlclNpemUgfHwg
IWFsZ29yaXRobVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpPYmplY3RJZGVudGlmaWVyKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cHBvcnRlZEFsZ29yaXRobSA9IGFsZ29y
aXRobUZvcklkZW50aWZpZXIoa2V5RGF0YS5kYXRhKCkgKyBhbGdvcml0aG1UTFYudmFsdWVPZmZz
ZXQoKSwgYWxnb3JpdGhtVExWLmxlbmd0aCk7CisgICAgaWYgKCFzdXBwb3J0ZWRBbGdvcml0aG0p
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gUHJpdmF0ZUtleSA6Oj0gT0NURVQg
U1RSSU5HCisgICAgYXV0byBwcml2YXRlS2V5VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwK
KyAgICAgICAgcHJpdmF0ZUtleUluZm9UTFYudmFsdWVPZmZzZXQoKSArIHZlcnNpb25UTFYuYnVm
ZmVyU2l6ZSArIHByaXZhdGVLZXlBbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSk7CisgICAgaWYgKCFw
cml2YXRlS2V5VExWLmJ1ZmZlclNpemUgfHwgIXByaXZhdGVLZXlUTFYuaGFzVGFnKEFTTjE6OlRh
Zzo6T2N0ZXRTdHJpbmcpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFJTQVBy
aXZhdGVLZXkgOjo9IFNFUVVFTkNFIHsKKyAgICAvLyAgICAgdmVyc2lvbiAgICAgICAgICAgVmVy
c2lvbiwKKyAgICAvLyAgICAgbW9kdWx1cyAgICAgICAgICAgSU5URUdFUiwgIC0tIG4KKyAgICAv
LyAgICAgcHVibGljRXhwb25lbnQgICAgSU5URUdFUiwgIC0tIGUKKyAgICAvLyAgICAgcHJpdmF0
ZUV4cG9uZW50ICAgSU5URUdFUiwgIC0tIGQKKyAgICAvLyAgICAgcHJpbWUxICAgICAgICAgICAg
SU5URUdFUiwgIC0tIHAKKyAgICAvLyAgICAgcHJpbWUyICAgICAgICAgICAgSU5URUdFUiwgIC0t
IHEKKyAgICAvLyAgICAgZXhwb25lbnQxICAgICAgICAgSU5URUdFUiwgIC0tIGQgbW9kIChwLTEp
CisgICAgLy8gICAgIGV4cG9uZW50MiAgICAgICAgIElOVEVHRVIsICAtLSBkIG1vZCAocS0xKQor
ICAgIC8vICAgICBjb2VmZmljaWVudCAgICAgICBJTlRFR0VSLCAgLS0gKGludmVyc2Ugb2YgcSkg
bW9kIHAKKyAgICAvLyAgICAgb3RoZXJQcmltZUluZm9zICAgT3RoZXJQcmltZUluZm9zIE9QVElP
TkFMCisgICAgLy8gfQorICAgIGF1dG8gcnNhUHJpdmF0ZUtleVRMViA9IEFTTjE6OnBhcnNlVExW
KGtleURhdGEsIHByaXZhdGVLZXlUTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCFyc2FQcml2
YXRlS2V5VExWLmJ1ZmZlclNpemUgfHwgIXJzYVByaXZhdGVLZXlUTFYuaGFzVGFnKEFTTjE6OlRh
Zzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTTjE6OlRMViBt
b2R1bHVzVExWOworICAgIEFTTjE6OlRMViBwdWJsaWNFeHBvbmVudFRMVjsKKyAgICBBU04xOjpU
TFYgcHJpdmF0ZUV4cG9uZW50VExWOworICAgIEFTTjE6OlRMViBwcmltZTFUTFY7CisgICAgQVNO
MTo6VExWIHByaW1lMlRMVjsKKyAgICBBU04xOjpUTFYgZXhwb25lbnQxVExWOworICAgIEFTTjE6
OlRMViBleHBvbmVudDJUTFY7CisgICAgQVNOMTo6VExWIGNvZWZmaWNpZW50VExWOworICAgIHsK
KyAgICAgICAgc2l6ZV90IG9mZnNldCA9IHJzYVByaXZhdGVLZXlUTFYudmFsdWVPZmZzZXQoKTsK
KyAgICAgICAgYXV0byB2ZXJzaW9uVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgb2Zmc2V0
KTsKKyAgICAgICAgaWYgKCF2ZXJzaW9uVExWLmJ1ZmZlclNpemUgfHwgIXZlcnNpb25UTFYuaGFz
VGFnKEFTTjE6OlRhZzo6SW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgaWYgKHZlcnNpb25UTFYubGVuZ3RoICE9IDEgfHwga2V5RGF0YVt2ZXJzaW9uVExWLnZh
bHVlT2Zmc2V0KCldICE9IDApCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBvZmZzZXQgKz0gdmVyc2lvblRMVi5idWZmZXJTaXplOworICAgICAgICBtb2R1bHVzVExWID0g
QVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFtb2R1bHVzVExW
LmJ1ZmZlclNpemUgfHwgIW1vZHVsdXNUTFYuaGFzVGFnKEFTTjE6OlRhZzo6SW50ZWdlcikpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBvZmZzZXQgKz0gbW9kdWx1c1RM
Vi5idWZmZXJTaXplOworICAgICAgICBwdWJsaWNFeHBvbmVudFRMViA9IEFTTjE6OnBhcnNlVExW
KGtleURhdGEsIG9mZnNldCk7CisgICAgICAgIGlmICghcHVibGljRXhwb25lbnRUTFYuYnVmZmVy
U2l6ZSB8fCAhcHVibGljRXhwb25lbnRUTFYuaGFzVGFnKEFTTjE6OlRhZzo6SW50ZWdlcikpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBvZmZzZXQgKz0gcHVibGljRXhw
b25lbnRUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgcHJpdmF0ZUV4cG9uZW50VExWID0gQVNOMTo6
cGFyc2VUTFYoa2V5RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwcml2YXRlRXhwb25lbnRU
TFYuYnVmZmVyU2l6ZSB8fCAhcHJpdmF0ZUV4cG9uZW50VExWLmhhc1RhZyhBU04xOjpUYWc6Oklu
dGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgb2Zmc2V0ICs9
IHByaXZhdGVFeHBvbmVudFRMVi5idWZmZXJTaXplOworICAgICAgICBwcmltZTFUTFYgPSBBU04x
OjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIXByaW1lMVRMVi5idWZm
ZXJTaXplIHx8ICFwcmltZTFUTFYuaGFzVGFnKEFTTjE6OlRhZzo6SW50ZWdlcikpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBvZmZzZXQgKz0gcHJpbWUxVExWLmJ1ZmZl
clNpemU7CisgICAgICAgIHByaW1lMlRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIG9mZnNl
dCk7CisgICAgICAgIGlmICghcHJpbWUyVExWLmJ1ZmZlclNpemUgfHwgIXByaW1lMlRMVi5oYXNU
YWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIG9mZnNldCArPSBwcmltZTJUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgZXhwb25lbnQx
VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFleHBv
bmVudDFUTFYuYnVmZmVyU2l6ZSB8fCAhZXhwb25lbnQxVExWLmhhc1RhZyhBU04xOjpUYWc6Oklu
dGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgb2Zmc2V0ICs9
IGV4cG9uZW50MVRMVi5idWZmZXJTaXplOworICAgICAgICBleHBvbmVudDJUTFYgPSBBU04xOjpw
YXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIWV4cG9uZW50MlRMVi5idWZm
ZXJTaXplIHx8ICFleHBvbmVudDJUTFYuaGFzVGFnKEFTTjE6OlRhZzo6SW50ZWdlcikpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBvZmZzZXQgKz0gZXhwb25lbnQyVExW
LmJ1ZmZlclNpemU7CisgICAgICAgIGNvZWZmaWNpZW50VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5
RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFjb2VmZmljaWVudFRMVi5idWZmZXJTaXplIHx8
ICFjb2VmZmljaWVudFRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgZm9yIE90aGVyUHJp
bWVJbmZvcy4KKworICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZVN1bSA9IHZlcnNpb25UTFYuYnVm
ZmVyU2l6ZSArIG1vZHVsdXNUTFYuYnVmZmVyU2l6ZSArIHB1YmxpY0V4cG9uZW50VExWLmJ1ZmZl
clNpemUgKyBwcml2YXRlRXhwb25lbnRUTFYuYnVmZmVyU2l6ZQorICAgICAgICAgICAgKyBwcmlt
ZTFUTFYuYnVmZmVyU2l6ZSArIHByaW1lMlRMVi5idWZmZXJTaXplICsgZXhwb25lbnQxVExWLmJ1
ZmZlclNpemUgKyBleHBvbmVudDJUTFYuYnVmZmVyU2l6ZSArIGNvZWZmaWNpZW50VExWLmJ1ZmZl
clNpemU7CisgICAgICAgIGlmIChidWZmZXJTaXplU3VtICE9IHJzYVByaXZhdGVLZXlUTFYubGVu
Z3RoKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHVEYXRhOworICAgIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21w
aV90PiBwTVBJOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X21waV9zY2FuKCZw
TVBJLCBHQ1JZTVBJX0ZNVF9VU0csIGtleURhdGEuZGF0YSgpICsgcHJpbWUxVExWLnZhbHVlT2Zm
c2V0KCksIHByaW1lMVRMVi5sZW5ndGgsIG51bGxwdHIpOworICAgICAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gcU1QSTsKKyAgICAgICAgZXJyb3IgPSBn
Y3J5X21waV9zY2FuKCZxTVBJLCBHQ1JZTVBJX0ZNVF9VU0csIGtleURhdGEuZGF0YSgpICsgcHJp
bWUyVExWLnZhbHVlT2Zmc2V0KCksIHByaW1lMlRMVi5sZW5ndGgsIG51bGxwdHIpOworICAgICAg
ICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gcWlNUEkoZ2Ny
eV9tcGlfc2V0X3VpKG51bGxwdHIsIDApKTsKKyAgICAgICAgZ2NyeV9tcGlfaW52bShxaU1QSSwg
cU1QSSwgcE1QSSk7CisgICAgICAgIHVEYXRhID0gZ2V0UGFyYW1ldGVyTVBJRGF0YShxaU1QSSk7
CisgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxn
Y3J5X3NleHBfdD4ga2V5U2V4cDsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3NleHBf
YnVpbGQoJmtleVNleHAsIG51bGxwdHIsICIocHJpdmF0ZS1rZXkocnNhKG4gJWIpKGUgJWIpKGQg
JWIpKHAgJWIpKHEgJWIpKHUgJWIpKSkiLAorICAgICAgICBtb2R1bHVzVExWLmxlbmd0aCwga2V5
RGF0YS5kYXRhKCkgKyBtb2R1bHVzVExWLnZhbHVlT2Zmc2V0KCksCisgICAgICAgIHB1YmxpY0V4
cG9uZW50VExWLmxlbmd0aCwga2V5RGF0YS5kYXRhKCkgKyBwdWJsaWNFeHBvbmVudFRMVi52YWx1
ZU9mZnNldCgpLAorICAgICAgICBwcml2YXRlRXhwb25lbnRUTFYubGVuZ3RoLCBrZXlEYXRhLmRh
dGEoKSArIHByaXZhdGVFeHBvbmVudFRMVi52YWx1ZU9mZnNldCgpLAorICAgICAgICBwcmltZTJU
TFYubGVuZ3RoLCBrZXlEYXRhLmRhdGEoKSArIHByaW1lMlRMVi52YWx1ZU9mZnNldCgpLAorICAg
ICAgICBwcmltZTFUTFYubGVuZ3RoLCBrZXlEYXRhLmRhdGEoKSArIHByaW1lMVRMVi52YWx1ZU9m
ZnNldCgpLAorICAgICAgICB1RGF0YS5zaXplKCksIHVEYXRhLmRhdGEoKSk7CisgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9y
KGVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDcnlwdG9LZXlSU0EoaWRlbnRpZmllciwgaGFzaC52YWx1ZV9vcihDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSksICEhaGFzaCwgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0
ZSwga2V5U2V4cC5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTsKIH0KIAogRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlSU0E6OmV4cG9ydFNwa2koKSBjb25zdAog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHR5cGUoKSAhPSBDcnlwdG9LZXlUeXBl
OjpQdWJsaWMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb257IElOVkFMSURfQUNDRVNTX0VSUiB9
OworCisgICAgYXV0byBhcHBlbmRMZW5ndGggPQorICAgICAgICBbXShzaXplX3QgbGVuZ3RoLCBW
ZWN0b3I8dWludDhfdD4mIHJlc3VsdCkgeworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEyNykg
eworICAgICAgICAgICAgICAgIHVpbnQ4X3QgbGVuZ3RoQnl0ZXMgPSBzdGQ6OmNlaWwoc3RkOjps
b2cyKGxlbmd0aCArIDEpIC8gOCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgweDgw
IHwgbGVuZ3RoQnl0ZXMpOworICAgICAgICAgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8
IGxlbmd0aEJ5dGVzOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGxl
bmd0aCA+PiAoKGxlbmd0aEJ5dGVzIC0gaSAtIDEpICogOCkgJiAweGZmKSk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGxlbmd0aCk7CisgICAgICAg
IH07CisKKyAgICAvLyBTdWJqZWN0UHVibGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgeworICAg
IC8vICAgYWxnb3JpdGhtICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAvLyAg
IHN1YmplY3RQdWJsaWNLZXkgICAgIEJJVCBTVFJJTkcgIH0KKworCisgICAgLy8gQWxnb3JpdGht
SWRlbnRpZmllciAgOjo9ICBTRVFVRU5DRSAgeworICAgIC8vICAgIGFsZ29yaXRobSAgIE9CSkVD
VCBJREVOVElGSUVSLAorICAgIC8vICAgIHBhcmFtZXRlcnMgIEFOWSBERUZJTkVEIEJZIGFsZ29y
aXRobSBPUFRJT05BTAorICAgIC8vIH0KKyAgICBWZWN0b3I8dWludDhfdD4gYWxnb3JpdGhtSWRl
bnRpZmllckRhdGE7CisgICAgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCA5PiBzX3JzYUVuY3J5cHRpb257IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywg
MHgwZCwgMHgwMSwgMHgwMSwgMHgwMSB9IH07CisKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmll
ckRhdGEuYXBwZW5kKDB4MzApOworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBl
bmQoMiArIHNfcnNhRW5jcnlwdGlvbi5zaXplKCkgKyAyKTsKKworICAgICAgICAvLyBhbGdvcml0
aG0KKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKDB4MDYpOworICAgICAg
ICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoc19yc2FFbmNyeXB0aW9uLnNpemUoKSk7
CisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVuZChzX3JzYUVuY3J5cHRpb24u
ZGF0YSgpLCBzX3JzYUVuY3J5cHRpb24uc2l6ZSgpKTsKKworICAgICAgICAvLyBwYXJhbWV0ZXJz
CisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVuZCgweDA1KTsKKyAgICAgICAg
YWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKDB4MDApOworICAgIH0KKworICAgIFZlY3Rv
cjx1aW50OF90PiBzdWJqZWN0UHVibGljS2V5RGF0YTsKKyAgICB7CisgICAgICAgIC8vIFJTQVB1
YmxpY0tleSA6Oj0gU0VRVUVOQ0UgeworICAgICAgICAvLyAgIG1vZHVsdXMgICAgICAgICAgIElO
VEVHRVIsICAtLSBuCisgICAgICAgIC8vICAgcHVibGljRXhwb25lbnQgICAgSU5URUdFUiAgIC0t
IGUKKyAgICAgICAgLy8gfQorICAgICAgICBWZWN0b3I8dWludDhfdD4gcnNhUHVibGljS2V5RGF0
YTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJEYXRhID0KKyAgICAgICAg
ICAgICAgICBbJmFwcGVuZExlbmd0aF0oZ2NyeV9zZXhwX3Qgc2V4cCwgY29uc3QgY2hhciogbmFt
ZSkgLT4gVmVjdG9yPHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHBhcmFtZXRlciA9IGdldFJTQUtleVBhcmFtZXRlcihzZXhwLCBuYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IHBhcmFtZXRlclswXSAmIDB4ODA7CisKKyAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgICAgICAgICAgICAgICAg
IGRhdGEuYXBwZW5kKDB4MDIpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRMZW5ndGgocGFy
YW1ldGVyLnNpemUoKSArIChuZWdhdGl2ZSA/IDEgOiAwKSwgZGF0YSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5k
KDB4MDApOworICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZFZlY3RvcihwYXJhbWV0ZXIp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICBhdXRvIG5EYXRhID0gcGFyYW1ldGVyRGF0YShtX3BsYXRmb3JtS2V5LCAi
biIpOworICAgICAgICAgICAgYXV0byBlRGF0YSA9IHBhcmFtZXRlckRhdGEobV9wbGF0Zm9ybUtl
eSwgImUiKTsKKworICAgICAgICAgICAgcnNhUHVibGljS2V5RGF0YS5hcHBlbmQoMHgzMCk7Cisg
ICAgICAgICAgICBhcHBlbmRMZW5ndGgobkRhdGEuc2l6ZSgpICsgZURhdGEuc2l6ZSgpLCByc2FQ
dWJsaWNLZXlEYXRhKTsKKworICAgICAgICAgICAgLy8gbW9kdWx1cworICAgICAgICAgICAgcnNh
UHVibGljS2V5RGF0YS5hcHBlbmRWZWN0b3IobkRhdGEpOworICAgICAgICAgICAgLy8gcHVibGlj
RXhwb25lbnQKKyAgICAgICAgICAgIHJzYVB1YmxpY0tleURhdGEuYXBwZW5kVmVjdG9yKGVEYXRh
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlEYXRhLmFwcGVuZCgweDAz
KTsKKyAgICAgICAgYXBwZW5kTGVuZ3RoKDEgKyByc2FQdWJsaWNLZXlEYXRhLnNpemUoKSwgc3Vi
amVjdFB1YmxpY0tleURhdGEpOworICAgICAgICBzdWJqZWN0UHVibGljS2V5RGF0YS5hcHBlbmQo
MHgwMCk7CisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlEYXRhLmFwcGVuZFZlY3Rvcihyc2FQdWJs
aWNLZXlEYXRhKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJl
c3VsdC5hcHBlbmQoMHgzMCk7CisgICAgYXBwZW5kTGVuZ3RoKGFsZ29yaXRobUlkZW50aWZpZXJE
YXRhLnNpemUoKSArIHN1YmplY3RQdWJsaWNLZXlEYXRhLnNpemUoKSwgcmVzdWx0KTsKKyAgICBy
ZXN1bHQuYXBwZW5kVmVjdG9yKGFsZ29yaXRobUlkZW50aWZpZXJEYXRhKTsKKyAgICByZXN1bHQu
YXBwZW5kVmVjdG9yKHN1YmplY3RQdWJsaWNLZXlEYXRhKTsKIAotICAgIHJldHVybiBFeGNlcHRp
b24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9
CiAKIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRQa2Nz
OCgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAodHlwZSgpICE9IENy
eXB0b0tleVR5cGU6OlByaXZhdGUpCisgICAgICAgIHJldHVybiBFeGNlcHRpb257IElOVkFMSURf
QUNDRVNTX0VSUiB9OworCisgICAgYXV0byBhcHBlbmRMZW5ndGggPQorICAgICAgICBbXShzaXpl
X3QgbGVuZ3RoLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkgeworICAgICAgICAgICAgaWYgKGxl
bmd0aCA+IDEyNykgeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgbGVuZ3RoQnl0ZXMgPSBzdGQ6
OmNlaWwoc3RkOjpsb2cyKGxlbmd0aCArIDEpIC8gOCk7CisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgweDgwIHwgbGVuZ3RoQnl0ZXMpOworICAgICAgICAgICAgICAgIGZvciAodWludDhf
dCBpID0gMDsgaSA8IGxlbmd0aEJ5dGVzOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoKGxlbmd0aCA+PiAoKGxlbmd0aEJ5dGVzIC0gaSAtIDEpICogOCkgJiAweGZmKSk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGxlbmd0
aCk7CisgICAgICAgIH07CisKKyAgICAvLyBQcml2YXRlS2V5SW5mbyA6Oj0gU0VRVUVOQ0Ugewor
ICAgIC8vICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICBWZXJzaW9uLAorICAgIC8vICAgcHJp
dmF0ZUtleUFsZ29yaXRobSAgICAgICBQcml2YXRlS2V5QWxnb3JpdGhtSWRlbnRpZmllciwKKyAg
ICAvLyAgIHByaXZhdGVLZXkgICAgICAgICAgICAgICAgUHJpdmF0ZUtleSwKKyAgICAvLyAgIGF0
dHJpYnV0ZXMgICAgICAgICAgIFswXSAgSU1QTElDSVQgQXR0cmlidXRlcyBPUFRJT05BTCB9CisK
KyAgICAvLyBWZXJzaW9uIDo6PSBJTlRFR0VSCisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMz4gc192ZXJzaW9uRGF0YXsgeyAweDAyLCAweDAxLCAweDAwIH0gfTsKKworCisg
ICAgLy8gUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZp
ZXIKKyAgICAvLyBBbGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8g
ICAgYWxnb3JpdGhtICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAg
QU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIFZlY3Rvcjx1
aW50OF90PiBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YTsKKyAgICB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDk+IHNfcnNhRW5jcnlwdGlvbnsgeyAweDJhLCAweDg2
LCAweDQ4LCAweDg2LCAweGY3LCAweDBkLCAweDAxLCAweDAxLCAweDAxIH0gfTsKKworICAgICAg
ICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoMHgzMCk7CisgICAgICAgIHByaXZhdGVL
ZXlBbGdvcml0aG1EYXRhLmFwcGVuZCgyICsgc19yc2FFbmNyeXB0aW9uLnNpemUoKSArIDIpOwor
CisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFwcGVuZCgweDA2KTsKKyAgICAgICAg
cHJpdmF0ZUtleUFsZ29yaXRobURhdGEuYXBwZW5kKHNfcnNhRW5jcnlwdGlvbi5zaXplKCkpOwor
ICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoc19yc2FFbmNyeXB0aW9uLmRh
dGEoKSwgc19yc2FFbmNyeXB0aW9uLnNpemUoKSk7CisKKyAgICAgICAgcHJpdmF0ZUtleUFsZ29y
aXRobURhdGEuYXBwZW5kKDB4MDUpOworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5h
cHBlbmQoMHgwMCk7CisgICAgfQorCisgICAgLy8gUHJpdmF0ZUtleSA6Oj0gT0NURVQgU1RSSU5H
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVLZXlEYXRhOworICAgIHsKKyAgICAgICAgLy8g
UlNBUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgICAgICAvLyAgICAgdmVyc2lvbiAgICAg
ICAgICAgVmVyc2lvbiwKKyAgICAgICAgLy8gICAgIG1vZHVsdXMgICAgICAgICAgIElOVEVHRVIs
ICAtLSBuCisgICAgICAgIC8vICAgICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSLCAgLS0gZQor
ICAgICAgICAvLyAgICAgcHJpdmF0ZUV4cG9uZW50ICAgSU5URUdFUiwgIC0tIGQKKyAgICAgICAg
Ly8gICAgIHByaW1lMSAgICAgICAgICAgIElOVEVHRVIsICAtLSBwCisgICAgICAgIC8vICAgICBw
cmltZTIgICAgICAgICAgICBJTlRFR0VSLCAgLS0gcQorICAgICAgICAvLyAgICAgZXhwb25lbnQx
ICAgICAgICAgSU5URUdFUiwgIC0tIGQgbW9kIChwLTEpCisgICAgICAgIC8vICAgICBleHBvbmVu
dDIgICAgICAgICBJTlRFR0VSLCAgLS0gZCBtb2QgKHEtMSkKKyAgICAgICAgLy8gICAgIGNvZWZm
aWNpZW50ICAgICAgIElOVEVHRVIsICAtLSAoaW52ZXJzZSBvZiBxKSBtb2QgcAorICAgICAgICAv
LyAgICAgb3RoZXJQcmltZUluZm9zICAgT3RoZXJQcmltZUluZm9zIE9QVElPTkFMCisgICAgICAg
IC8vIH0KKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJzYVByaXZhdGVLZXlEYXRhOworICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIHBhcmFtZXRlckRhdGEgPQorICAgICAgICAgICAgICAgIFsm
YXBwZW5kTGVuZ3RoXShnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyKiBuYW1lKSAtPiBWZWN0
b3I8dWludDhfdD4geworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gcGFyYW1l
dGVyID0gZ2V0UlNBS2V5UGFyYW1ldGVyKHNleHAsIG5hbWUpOworICAgICAgICAgICAgICAgICAg
ICBib29sIG5lZ2F0aXZlID0gcGFyYW1ldGVyWzBdICYgMHg4MDsKKworICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBl
bmQoMHgwMik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZExlbmd0aChwYXJhbWV0ZXIuc2l6
ZSgpICsgKG5lZ2F0aXZlID8gMSA6IDApLCBkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoMHgwMCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kVmVjdG9yKHBhcmFtZXRlcik7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIGF1dG8gbkRhdGEgPSBwYXJhbWV0ZXJEYXRhKG1fcGxhdGZvcm1LZXksICJuIik7CisgICAg
ICAgICAgICBhdXRvIGVEYXRhID0gcGFyYW1ldGVyRGF0YShtX3BsYXRmb3JtS2V5LCAiZSIpOwor
ICAgICAgICAgICAgYXV0byBkRGF0YSA9IHBhcmFtZXRlckRhdGEobV9wbGF0Zm9ybUtleSwgImQi
KTsKKyAgICAgICAgICAgIGF1dG8gcERhdGEgPSBwYXJhbWV0ZXJEYXRhKG1fcGxhdGZvcm1LZXks
ICJxIik7CisgICAgICAgICAgICBhdXRvIHFEYXRhID0gcGFyYW1ldGVyRGF0YShtX3BsYXRmb3Jt
S2V5LCAicCIpOworCisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gZHBEYXRhOworICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRxRGF0YTsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBxaURhdGE7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBnZXRNUEkgPQor
ICAgICAgICAgICAgICAgICAgICBbXShnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyKiBuYW1l
KSAtPiBnY3J5X21waV90IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpI
YW5kbGU8Z2NyeV9zZXhwX3Q+IHBhcmFtU2V4cChnY3J5X3NleHBfZmluZF90b2tlbihzZXhwLCBu
YW1lLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtU2V4cCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnY3J5X3NleHBfbnRoX21waShwYXJhbVNleHAsIDEsIEdDUllNUElfRk1U
X1VTRyk7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIGV4
dHJhY3REYXRhID0KKyAgICAgICAgICAgICAgICAgICAgW10oZ2NyeV9tcGlfdCBwYXJhbU1QSSkg
LT4gVmVjdG9yPHVpbnQ4X3Q+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRh
TGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9
IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwgMCwgJmRhdGFMZW5ndGgs
IHBhcmFtTVBJKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJS
X05PX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBvdXRwdXQoZGF0YUxlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElf
Rk1UX1VTRywgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgbnVsbHB0ciwgcGFyYW1NUEkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJy
b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7
CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6
SGFuZGxlPGdjcnlfbXBpX3Q+IGRNUEkoZ2V0TVBJKG1fcGxhdGZvcm1LZXksICJkIikpOworICAg
ICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gcE1QSShnZXRNUEko
bV9wbGF0Zm9ybUtleSwgInEiKSk7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X21waV90PiBxTVBJKGdldE1QSShtX3BsYXRmb3JtS2V5LCAicCIpKTsKKworICAgICAg
ICAgICAgICAgIC8vIGRwCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBQ
QUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGRwTVBJKGdjcnlfbXBpX3NldF91aShudWxs
cHRyLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9t
cGlfdD4gcG0xTVBJKGdjcnlfbXBpX3NldChudWxscHRyLCBwTVBJKSk7CisgICAgICAgICAgICAg
ICAgICAgIGdjcnlfbXBpX3N1Yl91aShwbTFNUEksIHBtMU1QSSwgMSk7CisgICAgICAgICAgICAg
ICAgICAgIGdjcnlfbXBpX21vZChkcE1QSSwgZE1QSSwgcG0xTVBJKTsKKworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGRwID0gZXh0cmFjdERhdGEoZHBNUEkpOworICAgICAgICAgICAgICAgICAg
ICBib29sIG5lZ2F0aXZlID0gZHBbMF0gJiAweDgwOworCisgICAgICAgICAgICAgICAgICAgIGRw
RGF0YS5hcHBlbmQoMHgwMik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZExlbmd0aChkcC5z
aXplKCkgKyAobmVnYXRpdmUgPyAxIDogMCksIGRwRGF0YSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRwRGF0YS5hcHBlbmQoMHgw
MCk7CisgICAgICAgICAgICAgICAgICAgIGRwRGF0YS5hcHBlbmRWZWN0b3IoZHApOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGRxCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGRxTVBJ
KGdjcnlfbXBpX3NldF91aShudWxscHRyLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIFBBTDo6
R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gcW0xTVBJKGdjcnlfbXBpX3NldChudWxscHRyLCBx
TVBJKSk7CisgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX3N1Yl91aShxbTFNUEksIHFtMU1Q
SSwgMSk7CisgICAgICAgICAgICAgICAgICAgIGdjcnlfbXBpX21vZChkcU1QSSwgZE1QSSwgcW0x
TVBJKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGRxID0gZXh0cmFjdERhdGEoZHFNUEkp
OworICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZHFbMF0gJiAweDgwOworCisg
ICAgICAgICAgICAgICAgICAgIGRxRGF0YS5hcHBlbmQoMHgwMik7CisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZExlbmd0aChkcS5zaXplKCkgKyAobmVnYXRpdmUgPyAxIDogMCksIGRxRGF0YSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRxRGF0YS5hcHBlbmQoMHgwMCk7CisgICAgICAgICAgICAgICAgICAgIGRxRGF0YS5hcHBl
bmRWZWN0b3IoZHEpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHFp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFu
ZGxlPGdjcnlfbXBpX3Q+IHFpTVBJKGdjcnlfbXBpX3NldF91aShudWxscHRyLCAwKSk7CisgICAg
ICAgICAgICAgICAgICAgIGdjcnlfbXBpX2ludm0ocWlNUEksIHFNUEksIHBNUEkpOworCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gcWkgPSBleHRyYWN0RGF0YShxaU1QSSk7CisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBxaVswXSAmIDB4ODA7CisKKyAgICAgICAgICAgICAg
ICAgICAgcWlEYXRhLmFwcGVuZCgweDAyKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kTGVu
Z3RoKHFpLnNpemUoKSArIChuZWdhdGl2ZSA/IDEgOiAwKSwgcWlEYXRhKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgcWlEYXRhLmFw
cGVuZCgweDAwKTsKKyAgICAgICAgICAgICAgICAgICAgcWlEYXRhLmFwcGVuZFZlY3RvcihxaSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByc2FQcml2
YXRlS2V5RGF0YS5hcHBlbmQoMHgzMCk7CisgICAgICAgICAgICBhcHBlbmRMZW5ndGgoMyArIG5E
YXRhLnNpemUoKSArIGVEYXRhLnNpemUoKSArIGREYXRhLnNpemUoKSArIHBEYXRhLnNpemUoKSAr
IHFEYXRhLnNpemUoKQorICAgICAgICAgICAgICAgICsgZHBEYXRhLnNpemUoKSArIGRxRGF0YS5z
aXplKCkgKyBxaURhdGEuc2l6ZSgpLCByc2FQcml2YXRlS2V5RGF0YSk7CisKKyAgICAgICAgICAg
IC8vIHZlcnNpb24KKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZCgweDAyKTsK
KyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZCgxKTsKKyAgICAgICAgICAgIHJz
YVByaXZhdGVLZXlEYXRhLmFwcGVuZCgweDAwKTsKKworICAgICAgICAgICAgLy8gbW9kdWx1cwor
ICAgICAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEuYXBwZW5kVmVjdG9yKG5EYXRhKTsKKyAgICAg
ICAgICAgIC8vIHB1YmxpY0V4cG9uZW50CisgICAgICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5h
cHBlbmRWZWN0b3IoZURhdGEpOworICAgICAgICAgICAgLy8gcHJpdmF0ZUV4cG9uZW50CisgICAg
ICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IoZERhdGEpOworICAgICAgICAg
ICAgLy8gcHJpbWUxCisgICAgICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3Io
cERhdGEpOworICAgICAgICAgICAgLy8gcHJpbWUyCisgICAgICAgICAgICByc2FQcml2YXRlS2V5
RGF0YS5hcHBlbmRWZWN0b3IocURhdGEpOworICAgICAgICAgICAgLy8gZXhwb25lbnQxCisgICAg
ICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IoZHBEYXRhKTsKKyAgICAgICAg
ICAgIC8vIGV4cG9uZW50MgorICAgICAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEuYXBwZW5kVmVj
dG9yKGRxRGF0YSk7CisgICAgICAgICAgICAvLyBjb2VmZmljaWVudAorICAgICAgICAgICAgcnNh
UHJpdmF0ZUtleURhdGEuYXBwZW5kVmVjdG9yKHFpRGF0YSk7CisgICAgICAgIH0KKworICAgICAg
ICBwcml2YXRlS2V5RGF0YS5hcHBlbmQoMHgwNCk7CisgICAgICAgIGFwcGVuZExlbmd0aChyc2FQ
cml2YXRlS2V5RGF0YS5zaXplKCksIHByaXZhdGVLZXlEYXRhKTsKKyAgICAgICAgcHJpdmF0ZUtl
eURhdGEuYXBwZW5kVmVjdG9yKHJzYVByaXZhdGVLZXlEYXRhKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoMHgzMCk7CisgICAgYXBwZW5k
TGVuZ3RoKHNfdmVyc2lvbkRhdGEuc2l6ZSgpICsgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEuc2l6
ZSgpICsgcHJpdmF0ZUtleURhdGEuc2l6ZSgpLCByZXN1bHQpOworICAgIHJlc3VsdC5hcHBlbmQo
c192ZXJzaW9uRGF0YS5kYXRhKCksIHNfdmVyc2lvbkRhdGEuc2l6ZSgpKTsKKyAgICByZXN1bHQu
YXBwZW5kVmVjdG9yKHByaXZhdGVLZXlBbGdvcml0aG1EYXRhKTsKKyAgICByZXN1bHQuYXBwZW5k
VmVjdG9yKHByaXZhdGVLZXlEYXRhKTsKIAotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQ
UE9SVEVEX0VSUiB9OworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIHN0ZDo6dW5p
cXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG0oKSBjb25z
dAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHB1YmxpY0V4
cG9uZW50OwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRobT4oZW1w
dHlTdHJpbmcoKSwgMCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpOworICAgIFN0cmluZyBuYW1l
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRl
bnRpZmllcigpKTsKKyAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCA9IGdldFJTQU1vZHVsdXNMZW5n
dGgobV9wbGF0Zm9ybUtleSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1YmxpY0V4cG9uZW50ID0g
Z2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1LZXksICJlIik7CisKKyAgICBpZiAobV9yZXN0
cmljdGVkVG9TcGVjaWZpY0hhc2gpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJz
YUhhc2hlZEtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNF
eHBvbmVudCksIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKG1faGFz
aCkpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRobT4obmFtZSwg
bW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpOwogfQogCiBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gQ3J5cHRvS2V5UlNBOjpleHBvcnREYXRhKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoZXh0cmFjdGFibGUoKSk7CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBudWxscHRyOworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBDcnlwdG9L
ZXlUeXBlOjpQdWJsaWM6CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50
czo6Y3JlYXRlUHVibGljKGdldFJTQUtleVBhcmFtZXRlcihtX3BsYXRmb3JtS2V5LCAibiIpLCBn
ZXRSU0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9ybUtleSwgImUiKSk7CisgICAgY2FzZSBDcnlwdG9L
ZXlUeXBlOjpQcml2YXRlOiB7CisgICAgICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQ
cmltZUluZm8gZmlyc3RQcmltZUluZm97IGdldFJTQUtleVBhcmFtZXRlcihtX3BsYXRmb3JtS2V5
LCAicSIpLCB7IH0sIHsgfSB9OworICAgICAgICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6
UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mb3sgZ2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1L
ZXksICJwIiksIHsgfSwgeyB9IH07CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBnZXRN
UEkgPQorICAgICAgICAgICAgICAgIFtdKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNoYXIqIG5h
bWUpIC0+IGdjcnlfbXBpX3QgeworICAgICAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFu
ZGxlPGdjcnlfc2V4cF90PiBwYXJhbVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9rZW4oc2V4cCwgbmFt
ZSwgMCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtU2V4cCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2NyeV9zZXhwX250aF9tcGkocGFyYW1TZXhwLCAxLCBHQ1JZTVBJX0ZNVF9VU0cpOworICAgICAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGF1dG8gZXh0cmFjdERhdGEgPQorICAgICAgICAg
ICAgICAgIFtdKGdjcnlfbXBpX3QgcGFyYW1NUEkpIC0+IFZlY3Rvcjx1aW50OF90PiB7CisgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBu
dWxscHRyLCAwLCAmZGF0YUxlbmd0aCwgcGFyYW1NUEkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgICAgICAgICAgICAg
UEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8dWludDhfdD4gb3V0cHV0KGRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBl
cnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgb3V0cHV0LmRhdGEoKSwgb3V0
cHV0LnNpemUoKSwgbnVsbHB0ciwgcGFyYW1NUEkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgICAgICAgICAgICAgUEFM
OjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gb3V0cHV0OworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0
OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZE1QSShnZXRNUEkobV9wbGF0Zm9ybUtleSwgImQiKSk7Cisg
ICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHBNUEkoZ2V0TVBJKG1f
cGxhdGZvcm1LZXksICJxIikpOworICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5
X21waV90PiBxTVBJKGdldE1QSShtX3BsYXRmb3JtS2V5LCAicCIpKTsKKworICAgICAgICAgICAg
Ly8gZHAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxl
PGdjcnlfbXBpX3Q+IGRwTVBJKGdjcnlfbXBpX3NldF91aShudWxscHRyLCAwKSk7CisgICAgICAg
ICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBwbTFNUEkoZ2NyeV9tcGlf
c2V0KG51bGxwdHIsIHBNUEkpKTsKKyAgICAgICAgICAgICAgICBnY3J5X21waV9zdWJfdWkocG0x
TVBJLCBwbTFNUEksIDEpOworICAgICAgICAgICAgICAgIGdjcnlfbXBpX21vZChkcE1QSSwgZE1Q
SSwgcG0xTVBJKTsKKyAgICAgICAgICAgICAgICBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBv
bmVudCA9IGV4dHJhY3REYXRhKGRwTVBJKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gZHEKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxl
PGdjcnlfbXBpX3Q+IGRxTVBJKGdjcnlfbXBpX3NldF91aShudWxscHRyLCAwKSk7CisgICAgICAg
ICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBxbTFNUEkoZ2NyeV9tcGlf
c2V0KG51bGxwdHIsIHFNUEkpKTsKKyAgICAgICAgICAgICAgICBnY3J5X21waV9zdWJfdWkocW0x
TVBJLCBxbTFNUEksIDEpOworICAgICAgICAgICAgICAgIGdjcnlfbXBpX21vZChkcU1QSSwgZE1Q
SSwgcW0xTVBJKTsKKyAgICAgICAgICAgICAgICBzZWNvbmRQcmltZUluZm8uZmFjdG9yQ1JURXhw
b25lbnQgPSBleHRyYWN0RGF0YShkcU1QSSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIHFpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X21waV90PiBxaU1QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwgMCkpOworICAgICAg
ICAgICAgICAgIGdjcnlfbXBpX2ludm0ocWlNUEksIHFNUEksIHBNUEkpOworICAgICAgICAgICAg
ICAgIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCA9IGV4dHJhY3REYXRhKHFp
TVBJKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBDcnlwdG9L
ZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShnZXRS
U0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9ybUtleSwgIm4iKSwKKyAgICAgICAgICAgIGdldFJTQUtl
eVBhcmFtZXRlcihtX3BsYXRmb3JtS2V5LCAiZSIpLCBnZXRSU0FLZXlQYXJhbWV0ZXIobV9wbGF0
Zm9ybUtleSwgImQiKSwKKyAgICAgICAgICAgIFdURk1vdmUoZmlyc3RQcmltZUluZm8pLCBXVEZN
b3ZlKHNlY29uZFByaW1lSW5mbyksIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6
UHJpbWVJbmZvPnsgfSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
U2VyaWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAKaW5kZXggOTQ5OTg5Zjk0
ZTEuLjRlMmQ0NTQ3NjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR0NyeXB0LmNwcApAQCAtMjksMzUg
KzI5LDE1MiBAQAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KKyNpbmNs
dWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgZ2V0RGVm
YXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSkKK2Jvb2wg
Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShWZWN0b3I8dWludDhfdD4mKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIGJvb2wgd3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBtYXN0ZXJLZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8
dWludDhfdD4mIHJlc3VsdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9Q
QVJBTShtYXN0ZXJLZXkpOwotICAgIFVOVVNFRF9QQVJBTShrZXkpOwotICAgIFVOVVNFRF9QQVJB
TShyZXN1bHQpOworICAgIFZlY3Rvcjx1aW50OF90PiBrZWsoMTYpOworICAgIGdjcnlfcmFuZG9t
aXplKGtlay5kYXRhKCksIGtlay5zaXplKCksIEdDUllfVkVSWV9TVFJPTkdfUkFORE9NKTsKIAot
ICAgIHJldHVybiBmYWxzZTsKKyAgICBWZWN0b3I8dWludDhfdD4gd3JhcHBlZEtFSygyNCk7Cisg
ICAgeworICAgICAgICBhdXRvIGFsZ29yaXRobSA9IFBBTDo6R0NyeXB0OjphZXNBbGdvcml0aG1G
b3JLZXlTaXplKG1hc3RlcktleS5zaXplKCkgKiA4KTsKKyAgICAgICAgaWYgKCFhbGdvcml0aG0p
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9
IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBIRVJfTU9ERV9B
RVNXUkFQLCAwKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRr
ZXkoaGFuZGxlLCBtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6ZSgpKTsKKyAgICAgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9lbmNyeXB0KGhhbmRsZSwgd3JhcHBlZEtF
Sy5kYXRhKCksIHdyYXBwZWRLRUsuc2l6ZSgpLCBrZWsuZGF0YSgpLCBrZWsuc2l6ZSgpKTsKKyAg
ICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY3J5cHRlZEtleShrZXkuc2l6
ZSgpKTsKKyAgICBWZWN0b3I8dWludDhfdD4gdGFnKDE2KTsKKyAgICB7CisgICAgICAgIFBBTDo6
R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vy
cm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5kbGUsIEdDUllfQ0lQSEVSX0FFUzEy
OCwgR0NSWV9DSVBIRVJfTU9ERV9HQ00sIDApOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9
IGdjcnlfY2lwaGVyX3NldGtleShoYW5kbGUsIGtlay5kYXRhKCksIGtlay5zaXplKCkpOworICAg
ICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2VuY3J5cHQoaGFuZGxlLCBlbmNy
eXB0ZWRLZXkuZGF0YSgpLCBlbmNyeXB0ZWRLZXkuc2l6ZSgpLCBrZXkuZGF0YSgpLCBrZXkuc2l6
ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9nZXR0YWcoaGFu
ZGxlLCB0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19F
UlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
bWFnaWNbM10gKyB2ZXJzaW9uWzFdICsgd3JhcHBlZEtFS1syNF0gKyBlbmNyeXB0ZWRLZXlbbGVu
Z3RoKGtleSldICsgdGFnWzE2XSArIG1hZ2ljWzNdCisgICAgc2l6ZV90IHNlcmlhbGl6ZWRMZW5n
dGggPSAzICsgMSArIDI0ICsgZW5jcnlwdGVkS2V5LnNpemUoKSArIDE2ICsgMzsKKyAgICByZXN1
bHQucmVzaXplKHNlcmlhbGl6ZWRMZW5ndGgpOworICAgIHJlc3VsdFswXSA9IDB4MDQ7CisgICAg
cmVzdWx0WzFdID0gMHgwODsKKyAgICByZXN1bHRbMl0gPSAweDE1OworICAgIHJlc3VsdFszXSA9
IDB4MDE7CisgICAgc3RkOjptZW1jcHkocmVzdWx0LmRhdGEoKSArIDQsIHdyYXBwZWRLRUsuZGF0
YSgpLCAyNCk7CisgICAgc3RkOjptZW1jcHkocmVzdWx0LmRhdGEoKSArIDI4LCBlbmNyeXB0ZWRL
ZXkuZGF0YSgpLCBlbmNyeXB0ZWRLZXkuc2l6ZSgpKTsKKyAgICBzdGQ6Om1lbWNweShyZXN1bHQu
ZGF0YSgpICsgMjggKyBlbmNyeXB0ZWRLZXkuc2l6ZSgpLCB0YWcuZGF0YSgpLCAxNik7CisgICAg
cmVzdWx0W3NlcmlhbGl6ZWRMZW5ndGggLSAzXSA9IDB4MTY7CisgICAgcmVzdWx0W3NlcmlhbGl6
ZWRMZW5ndGggLSAyXSA9IDB4MjM7CisgICAgcmVzdWx0W3NlcmlhbGl6ZWRMZW5ndGggLSAxXSA9
IDB4NDI7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCB1bndyYXBTZXJpYWxpemVkQ3J5
cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHdyYXBwZWRLZXksIFZlY3Rvcjx1aW50OF90PiYga2V5KQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHdyYXBwZWRLZXkpOwotICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgIC8vIG1hZ2ljWzNdICsg
dmVyc2lvblsxXSArIHdyYXBwZWRLRUtbMjRdICsgZW5jcnlwdGVkS2V5W2xlbmd0aChrZXkpXSAr
IHRhZ1sxNl0gKyBtYWdpY1szXQorICAgIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoID0gd3JhcHBl
ZEtleS5zaXplKCk7CisgICAgaWYgKHNlcmlhbGl6ZWRMZW5ndGggPCAzICsgMSArIDI0ICsgMTYg
KyAzKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgdWlu
dDhfdCBtYWdpYzFbM10gPSB7IDB4MDQsIDB4MDgsIDB4MTUgfTsKKyAgICBpZiAoc3RkOjptZW1j
bXAod3JhcHBlZEtleS5kYXRhKCksIG1hZ2ljMSwgMykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB1aW50OF90IG1hZ2ljMlszXSA9IHsgMHgxNiwgMHgyMywgMHg0MiB9OworICAgIGlmIChz
dGQ6Om1lbWNtcCh3cmFwcGVkS2V5LmRhdGEoKSArIHNlcmlhbGl6ZWRMZW5ndGggLSAzLCBtYWdp
YzIsIDMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHdyYXBwZWRLZXlbM10gIT0g
MHgwMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBw
ZWRLRUsoMjQpOworICAgIHN0ZDo6bWVtY3B5KHdyYXBwZWRLRUsuZGF0YSgpLCB3cmFwcGVkS2V5
LmRhdGEoKSArIDQsIDI0KTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNyeXB0ZWRLZXkoc2Vy
aWFsaXplZExlbmd0aCAtIDMgLSAxIC0gMjQgLSAxNiAtIDMpOworICAgIHN0ZDo6bWVtY3B5KGVu
Y3J5cHRlZEtleS5kYXRhKCksIHdyYXBwZWRLZXkuZGF0YSgpICsgMjgsIGVuY3J5cHRlZEtleS5z
aXplKCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRhZygxNik7CisgICAgc3RkOjptZW1jcHko
dGFnLmRhdGEoKSwgd3JhcHBlZEtleS5kYXRhKCkgKyAyOCArIGVuY3J5cHRlZEtleS5zaXplKCks
IDE2KTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBrZWsoMTYpOworICAgIHsKKyAgICAgICAgYXV0
byBhbGdvcml0aG0gPSBQQUw6OkdDcnlwdDo6YWVzQWxnb3JpdGhtRm9yS2V5U2l6ZShtYXN0ZXJL
ZXkuc2l6ZSgpICogOCk7CisgICAgICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRf
dD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVu
KCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQUVTV1JBUCwgMCk7CisgICAg
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwgbWFzdGVy
S2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdf
RVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9y
ID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChoYW5kbGUsIGtlay5kYXRhKCksIGtlay5zaXplKCksIHdy
YXBwZWRLRUsuZGF0YSgpLCB3cmFwcGVkS0VLLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAh
PSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBkZWNyeXB0ZWRLZXkoZW5jcnlwdGVkS2V5LnNpemUoKSk7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGFjdHVhbFRhZygxNik7CisgICAgeworICAgICAgICBQQUw6OkdD
cnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsKKyAgICAgICAgZ2NyeV9lcnJv
cl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCBHQ1JZX0NJUEhFUl9BRVMxMjgs
IEdDUllfQ0lQSEVSX01PREVfR0NNLCAwKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBn
Y3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBrZWsuZGF0YSgpLCBrZWsuc2l6ZSgpKTsKKyAgICAg
ICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KGhhbmRsZSwgZGVjcnlw
dGVkS2V5LmRhdGEoKSwgZGVjcnlwdGVkS2V5LnNpemUoKSwgZW5jcnlwdGVkS2V5LmRhdGEoKSwg
ZW5jcnlwdGVkS2V5LnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9j
aXBoZXJfZ2V0dGFnKGhhbmRsZSwgYWN0dWFsVGFnLmRhdGEoKSxhY3R1YWxUYWcuc2l6ZSgpKTsK
KyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VGltZU1lbWNtcCh0YWcuZGF0YSgp
LCBhY3R1YWxUYWcuZGF0YSgpLCAxNikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGtl
eSA9IFdURk1vdmUoZGVjcnlwdGVkS2V5KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfQotLSAK
Mi4xMS4wCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309512</attachid>
            <date>2017-05-09 10:22:17 -0700</date>
            <delta_ts>2017-06-12 00:35:09 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>crypto.patch</filename>
            <type>text/plain</type>
            <size>79899</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNzNiOWZmMGYz
ZjAuLjRlNWE0MzFkODIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtNzIwLDIzOCArNzIwLDggQEAgQnVnKEdUSykgZWRpdGluZy9zZWN1cmUtaW5wdXQg
WyBGYWlsdXJlIF0KIAogIyBjcnlwdG8uc3VidGxlIGlzIG5vdCB5ZXQgZW5hYmxlZCwgYnV0IGRp
Z2VzdCBhbGdvcml0aG1zIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkCiAjIGFuZCB0aGVpciB0ZXN0
cyBhcmUgd2hpdGVsaXN0ZWQKLXdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3N1YnRsZSBbIFNr
aXAgXQogd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vd2Via2l0U3VidGxlIFsgU2tpcCBdCi13
ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by93b3JrZXJzL3N1YnRsZSBbIFNraXAgXQotY3J5cHRv
L3N1YnRsZS9hZXMtY2JjLWNmYi1kZWNyeXB0LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQ
YXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWNiYy1jZmItZW5jcnlwdC1tYWxmb3JtZWQtcGFyYW1l
dGVycy5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1jYmMtZ2VuZXJhdGUtZXhwb3J0
LWtleS1qd2stbGVuZ3RoLTEyOC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1jYmMt
Z2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTE5Mi5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2Flcy1jYmMtZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTI1Ni5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1jYmMtZ2VuZXJhdGUtZXhwb3J0LWtleS1yYXcuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWdlbmVyYXRlLWtleS1lbmNyeXB0LWRl
Y3J5cHQuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWdlbmVyYXRlLWtleS1s
ZW5ndGgtMTI4Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWNiYy1nZW5lcmF0ZS1r
ZXktbGVuZ3RoLTE5Mi5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1jYmMtZ2VuZXJh
dGUta2V5LWxlbmd0aC0yNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWlt
cG9ydC1qd2sta2V5LWxlbmd0aC0xMjguaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLWltcG9ydC1qd2sta2V5LWxlbmd0aC0xOTIuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRs
ZS9hZXMtY2JjLWltcG9ydC1qd2sta2V5LWxlbmd0aC0yNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9hZXMtY2JjLWltcG9ydC1qd2sta2V5LW1pbmltdW0uaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9hZXMtY2JjLWltcG9ydC1qd2sta2V5LW5vbi1leHRyYWN0YWJsZS5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1jYmMtaW1wb3J0LWtleS1kZWNyeXB0Lmh0bWwgWyBQ
YXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbXBvcnQta2V5LWVuY3J5cHQuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWltcG9ydC1rZXktdW53cmFwLWp3ay1yc2Eta2V5
LXByaXZhdGUuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWltcG9ydC1rZXkt
dW53cmFwLWp3ay1yc2Eta2V5LXB1YmxpYy5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Fl
cy1jYmMtaW1wb3J0LWtleS13cmFwLWp3ay1yc2Eta2V5LXByaXZhdGUuaHRtbCBbIFBhc3MgXQot
Y3J5cHRvL3N1YnRsZS9hZXMtY2JjLWltcG9ydC1rZXktd3JhcC1qd2stcnNhLWtleS1wdWJsaWMu
aHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWltcG9ydC1yYXcta2V5LWxlbmd0
aC0xMjguaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWltcG9ydC1yYXcta2V5
LWxlbmd0aC0xOTIuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWltcG9ydC1y
YXcta2V5LWxlbmd0aC0yNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtZXhwb3J0
LWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Fl
cy1nY20tZGVjcnlwdC1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2Flcy1nY20tZW5jcnlwdC1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2Flcy1nY20tZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTEy
OC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1nY20tZ2VuZXJhdGUtZXhwb3J0LWtl
eS1qd2stbGVuZ3RoLTE5Mi5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1nY20tZ2Vu
ZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTI1Ni5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2Flcy1nY20tZ2VuZXJhdGUtZXhwb3J0LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9hZXMtZ2NtLWdlbmVyYXRlLWtleS1lbmNyeXB0LWRlY3J5cHQuaHRtbCBbIFBhc3Mg
XQotY3J5cHRvL3N1YnRsZS9hZXMtZ2NtLWdlbmVyYXRlLWtleS5odG1sIFsgUGFzcyBdCi1jcnlw
dG8vc3VidGxlL2Flcy1nY20taW1wb3J0LWp3ay1rZXktbGVuZ3RoLTEyOC5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2Flcy1nY20taW1wb3J0LWp3ay1rZXktbGVuZ3RoLTE5Mi5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1nY20taW1wb3J0LWp3ay1rZXktbGVuZ3RoLTI1Ni5o
dG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1nY20taW1wb3J0LWtleS1kZWNyeXB0LWFk
ZGl0aW9uYWwtZGF0YS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1nY20taW1wb3J0
LWtleS1kZWNyeXB0LWFkZGl0aW9uYWwtZGF0YS10YWctbGVuZ3RoLTMyLmh0bWwgWyBQYXNzIF0K
LWNyeXB0by9zdWJ0bGUvYWVzLWdjbS1pbXBvcnQta2V5LWRlY3J5cHQuaHRtbCBbIFBhc3MgXQot
Y3J5cHRvL3N1YnRsZS9hZXMtZ2NtLWltcG9ydC1rZXktZGVjcnlwdC10YWdMZW5ndGhzLmh0bWwg
WyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWdjbS1pbXBvcnQta2V5LWVuY3J5cHQtYWRkaXRp
b25hbC1kYXRhLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWdjbS1pbXBvcnQta2V5
LWVuY3J5cHQtYWRkaXRpb25hbC1kYXRhLXRhZy1sZW5ndGgtMzIuaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9hZXMtZ2NtLWltcG9ydC1rZXktZW5jcnlwdC5odG1sIFsgUGFzcyBdCi1jcnlw
dG8vc3VidGxlL2Flcy1nY20taW1wb3J0LWtleS1lbmNyeXB0LXRhZ0xlbmd0aHMuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtZ2NtLWltcG9ydC1rZXktdW53cmFwLWp3ay1rZXkuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtZ2NtLWltcG9ydC1rZXktdW53cmFwLXJhdy1r
ZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtZ2NtLWltcG9ydC1rZXktd3JhcC1q
d2sta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWdjbS1pbXBvcnQta2V5LXdy
YXAtcmF3LWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1nY20taW1wb3J0LXJh
dy1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMtZ2VuZXJhdGUta2V5LW1hbGZv
cm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWltcG9ydC1q
d2sta2V5LWV4cG9ydC1qd2sta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWlt
cG9ydC1qd2sta2V5LWV4cG9ydC1yYXcta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUv
YWVzLWltcG9ydC1rZXktbWFsZm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9hZXMtaW1wb3J0LXJhdy1rZXktZXhwb3J0LWp3ay1rZXkuaHRtbCBbIFBhc3MgXQot
Y3J5cHRvL3N1YnRsZS9hZXMtaW1wb3J0LXJhdy1rZXktZXhwb3J0LXJhdy1rZXkuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3Ro
LTEyOC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1rdy1nZW5lcmF0ZS1leHBvcnQt
a2V5LWp3ay1sZW5ndGgtMTkyLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWdl
bmVyYXRlLWV4cG9ydC1rZXktandrLWxlbmd0aC0yNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1
YnRsZS9hZXMta3ctZ2VuZXJhdGUtZXhwb3J0LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9hZXMta3ctZ2VuZXJhdGUta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUv
YWVzLWt3LWdlbmVyYXRlLWtleS13cmFwLWtleS11bndyYXAta2V5Lmh0bWwgWyBQYXNzIF0KLWNy
eXB0by9zdWJ0bGUvYWVzLWt3LWltcG9ydC1qd2sta2V5LWxlbmd0aC0xMjguaHRtbCBbIFBhc3Mg
XQotY3J5cHRvL3N1YnRsZS9hZXMta3ctaW1wb3J0LWp3ay1rZXktbGVuZ3RoLTE5Mi5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL2Flcy1rdy1pbXBvcnQtandrLWtleS1sZW5ndGgtMjU2Lmh0
bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWltcG9ydC1rZXktdW53cmFwLXJhdy1r
ZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctaW1wb3J0LWtleS13cmFwLXJh
dy1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctaW1wb3J0LXJhdy1rZXku
aHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctd3JhcC1rZXktbWFsZm9ybWVkLXBh
cmFtZXRlcnMuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9kZWNyeXB0LW1hbGZvcm1lZC1w
YXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZGVyaXZlLWJpdHMtbWFsZm9y
bWVkLXBhcmFtZXRlcnMuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9kZXJpdmUta2V5LW1h
bGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZGlnZXN0LW1h
bGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWMtZXhwb3J0
LWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2Vj
LWdlbmVyYXRlLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2VjLWltcG9ydC1qd2sta2V5LWV4cG9ydC1qd2sta2V5LXByaXZhdGUuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3N1YnRsZS9lYy1pbXBvcnQtandrLWtleS1leHBvcnQtandrLWtleS1wdWJs
aWMuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lYy1pbXBvcnQtandrLWtleS1leHBvcnQt
cmF3LWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2VjLWltcG9ydC1rZXktbWFsZm9y
bWVkLXBhcmFtZXRlcnMuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lYy1pbXBvcnQtcmF3
LWtleS1leHBvcnQtandrLWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2VjLWltcG9y
dC1yYXcta2V5LWV4cG9ydC1yYXcta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNk
aC1kZXJpdmUtYml0cy1sZW5ndGgtbGltaXRzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUv
ZWNkaC1nZW5lcmF0ZS1leHBvcnQtandrLWtleS1wMjU2Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9z
dWJ0bGUvZWNkaC1nZW5lcmF0ZS1leHBvcnQtandrLWtleS1wMzg0Lmh0bWwgWyBQYXNzIF0KLWNy
eXB0by9zdWJ0bGUvZWNkaC1nZW5lcmF0ZS1leHBvcnQta2V5LXJhdy1wMjU2Lmh0bWwgWyBQYXNz
IF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1nZW5lcmF0ZS1leHBvcnQta2V5LXJhdy1wMzg0Lmh0bWwg
WyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1nZW5lcmF0ZS1rZXktZGVyaXZlLWJpdHMuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lY2RoLWdlbmVyYXRlLWtleS1leHRyYWN0YWJsZS5o
dG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2VjZGgtZ2VuZXJhdGUta2V5LXAyNTYuaHRtbCBb
IFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lY2RoLWdlbmVyYXRlLWtleS1wMzg0Lmh0bWwgWyBQYXNz
IF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1nZW5lcmF0ZS1rZXktc2luZ2xlLXVzYWdlLmh0bWwgWyBQ
YXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1pbXBvcnQtandrLWtleS1taW5pbXVtLmh0bWwgWyBQ
YXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1pbXBvcnQtandrLXByaXZhdGUta2V5LXAyNTYuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lY2RoLWltcG9ydC1qd2stcHJpdmF0ZS1rZXktcDM4
NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2VjZGgtaW1wb3J0LWp3ay1wdWJsaWMta2V5
LXAyNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lY2RoLWltcG9ydC1qd2stcHVibGlj
LWtleS1wMzg0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1pbXBvcnQta2V5LWRl
cml2ZS1hZXMta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1pbXBvcnQta2V5
LWRlcml2ZS1iaXRzLWN1c3RvbS1sZW5ndGguaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9l
Y2RoLWltcG9ydC1rZXktZGVyaXZlLWJpdHMtbnVsbC1sZW5ndGguaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9lY2RoLWltcG9ydC1rZXktZGVyaXZlLWhrZGYta2V5Lmh0bWwgWyBQYXNzIF0K
LWNyeXB0by9zdWJ0bGUvZWNkaC1pbXBvcnQta2V5LWRlcml2ZS1obWFjLWtleS1jdXN0b20tbGVu
Z3RoLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1pbXBvcnQta2V5LWRlcml2ZS1w
YmtkZjIta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1pbXBvcnQtcmF3LWtl
eS1wMjU2Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkaC1pbXBvcnQtcmF3LWtleS1w
Mzg0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkc2EtZ2VuZXJhdGUtZXhwb3J0LWp3
ay1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lY2RzYS1nZW5lcmF0ZS1leHBvcnQt
a2V5LXJhdy5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2VjZHNhLWdlbmVyYXRlLWtleS5o
dG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2VjZHNhLWdlbmVyYXRlLWtleS1zaWduLXZlcmlm
eS1wMjU2Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkc2EtZ2VuZXJhdGUta2V5LXNp
Z24tdmVyaWZ5LXAzODQuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lY2RzYS1pbXBvcnQt
andrLXByaXZhdGUta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNkc2EtaW1wb3J0
LWp3ay1wdWJsaWMta2V5LWFsZy0yNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9lY2Rz
YS1pbXBvcnQtandrLXB1YmxpYy1rZXktYWxnLTM4NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2VjZHNhLWltcG9ydC1qd2stcHVibGljLWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2VjZHNhLWltcG9ydC1rZXktc2lnbi1wMjU2Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0
bGUvZWNkc2EtaW1wb3J0LWtleS1zaWduLXAzODQuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRs
ZS9lY2RzYS1pbXBvcnQta2V5LXZlcmlmeS1wMjU2Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0
bGUvZWNkc2EtaW1wb3J0LWtleS12ZXJpZnktcDM4NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2VjZHNhLWltcG9ydC1yYXcta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZWNk
c2EtdmVyaWZ5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0
bGUvZW5jcnlwdC1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2V4cG9ydC1rZXktbWFsZm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9nYy0yLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZ2MtMy5odG1sIFsgUGFz
cyBdCi1jcnlwdG8vc3VidGxlL2djLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvZ2VuZXJh
dGUta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUv
aGtkZi1kZXJpdmUtYml0cy1sZW5ndGgtbGltaXRzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0
bGUvaGtkZi1kZXJpdmUtYml0cy1tYWxmb3JtZWQtcGFyYW1ldHJzLmh0bWwgWyBQYXNzIF0KLWNy
eXB0by9zdWJ0bGUvaGtkZi1pbXBvcnQta2V5LWRlcml2ZS1iaXRzLmh0bWwgWyBQYXNzIF0KLWNy
eXB0by9zdWJ0bGUvaGtkZi1pbXBvcnQta2V5LWRlcml2ZS1obWFjLWtleS5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL2hrZGYtaW1wb3J0LWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2hrZGYtaW1wb3J0LWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCi1j
cnlwdG8vc3VidGxlL2htYWMtZXhwb3J0LWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stc2hhMS5o
dG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2st
c2hhMjI0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1leHBvcnQt
a2V5LWp3ay1zaGEyNTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRl
LWV4cG9ydC1rZXktandrLXNoYTM4NC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMt
Z2VuZXJhdGUtZXhwb3J0LWtleS1qd2stc2hhNTEyLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0
bGUvaG1hYy1nZW5lcmF0ZS1leHBvcnQtcmF3LWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3Vi
dGxlL2htYWMtZ2VuZXJhdGUta2V5LWN1c3RvbWl6ZWQtbGVuZ3RoLmh0bWwgWyBQYXNzIF0KLWNy
eXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXktaGFzaC1vYmplY3QuaHRtbCBbIFBhc3MgXQot
Y3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1s
IFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5LXNoYTEuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaGEyMjQuaHRtbCBbIFBhc3Mg
XQotY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaGEyNTYuaHRtbCBbIFBhc3MgXQot
Y3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaGEzODQuaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaGE1MTIuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1zaWduLXZlcmlmeS5odG1sIFsgUGFzcyBdCi1jcnlw
dG8vc3VidGxlL2htYWMtaW1wb3J0LWp3ay1rZXktZXhwb3J0LWp3ay1rZXkuaHRtbCBbIFBhc3Mg
XQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LWV4cG9ydC1yYXcta2V5Lmh0bWwg
WyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtandrLWtleS1taW5pbXVtLmh0bWwg
WyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtandrLWtleS1ub24tZXh0cmFjdGFi
bGUuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LXNoYTEu
aHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LXNoYTIyNC5o
dG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWp3ay1rZXktc2hhMjU2Lmh0
bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQtandrLWtleS1zaGEzODQuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1qd2sta2V5LXNoYTUxMi5odG1s
IFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS1tYWxmb3JtZWQtcGFyYW1l
dGVycy5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS1zaWduLXNo
YTEuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktc2lnbi1zaGEy
MjQuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktc2lnbi1zaGEy
NTYuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktc2lnbi1zaGEz
ODQuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktc2lnbi1zaGE1
MTIuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktdmVyaWZ5LXNo
YTEuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktdmVyaWZ5LXNo
YTIyNC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LWtleS12ZXJpZnkt
c2hhMjU2Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvaG1hYy1pbXBvcnQta2V5LXZlcmlm
eS1zaGEzODQuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWltcG9ydC1rZXktdmVy
aWZ5LXNoYTUxMi5odG1sIFsgUGFzcyBdCi1jcnlwdG8vc3VidGxlL2htYWMtaW1wb3J0LXJhdy1r
ZXktY3VzdG9taXplZC1sZW5ndGguaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9obWFjLWlt
cG9ydC1yYXcta2V5LWV4cG9ydC1qd2sta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUv
aG1hYy1pbXBvcnQtcmF3LWtleS1leHBvcnQtcmF3LWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL2htYWMtaW1wb3J0LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9p
bXBvcnQta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0
bGUvcGJrZGYyLWRlcml2ZS1iaXRzLW1hbGZvcm1lZC1wYXJhbWV0cnMuaHRtbCBbIFBhc3MgXQot
Y3J5cHRvL3N1YnRsZS9wYmtkZjItaW1wb3J0LWtleS1kZXJpdmUtYml0cy5odG1sIFsgUGFzcyBd
Ci1jcnlwdG8vc3VidGxlL3Bia2RmMi1pbXBvcnQta2V5LWRlcml2ZS1obWFjLWtleS5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL3Bia2RmMi1pbXBvcnQta2V5Lmh0bWwgWyBQYXNzIF0KLWNy
eXB0by9zdWJ0bGUvcGJrZGYyLWltcG9ydC1rZXktbWFsZm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBb
IFBhc3MgXQotY3J5cHRvL3N1YnRsZS9zaGExLWRpZ2VzdC5odG1sIFsgUGFzcyBdCi1jcnlwdG8v
c3VidGxlL3NoYTIyNC1kaWdlc3QuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3N1YnRsZS9zaGEyNTYt
ZGlnZXN0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by9zdWJ0bGUvc2hhMzg0LWRpZ2VzdC5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vc3VidGxlL3NoYTUxMi1kaWdlc3QuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3N1YnRsZS9zaWduLW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by9z
dWJ0bGUvdW53cmFwLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCi1jcnlw
dG8vc3VidGxlL3ZlcmlmeS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCi1jcnlw
dG8vc3VidGxlL3dyYXAta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBQYXNzIF0KLWNy
eXB0by93b3JrZXJzL3N1YnRsZS9hZXMtY2JjLWltcG9ydC1rZXktZGVjcnlwdC5odG1sIFsgUGFz
cyBdCi1jcnlwdG8vd29ya2Vycy9zdWJ0bGUvYWVzLWNiYy1pbXBvcnQta2V5LWVuY3J5cHQuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2Flcy1jYmMtaW1wb3J0LWtleS11bndy
YXAta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRsZS9hZXMtY2JjLWltcG9y
dC1rZXktd3JhcC1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2Flcy1n
Y20taW1wb3J0LWtleS1kZWNyeXB0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRs
ZS9hZXMtZ2NtLWltcG9ydC1rZXktZW5jcnlwdC5odG1sIFsgUGFzcyBdCi1jcnlwdG8vd29ya2Vy
cy9zdWJ0bGUvYWVzLWdjbS1pbXBvcnQta2V5LXVud3JhcC1rZXkuaHRtbCBbIFBhc3MgXQotY3J5
cHRvL3dvcmtlcnMvc3VidGxlL2Flcy1nY20taW1wb3J0LWtleS13cmFwLWtleS5odG1sIFsgUGFz
cyBdCi1jcnlwdG8vd29ya2Vycy9zdWJ0bGUvYWVzLWdlbmVyYXRlLWV4cG9ydC1rZXktandrLmh0
bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRsZS9hZXMtZ2VuZXJhdGUtZXhwb3J0LWtl
eS1yYXcuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2Flcy1nZW5lcmF0ZS1r
ZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2Flcy1pbXBvcnQtandrLWtl
eS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vd29ya2Vycy9zdWJ0bGUvYWVzLWltcG9ydC1yYXcta2V5
Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRsZS9hZXMta3ctaW1wb3J0LWtleS11
bndyYXAta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRsZS9hZXMta3ctaW1w
b3J0LWtleS13cmFwLWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vd29ya2Vycy9zdWJ0bGUvZWNk
aC1pbXBvcnQta2V5LWRlcml2ZS1iaXRzLmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1
YnRsZS9lY2RoLWltcG9ydC1rZXktZGVyaXZlLWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vd29y
a2Vycy9zdWJ0bGUvZWNkc2EtaW1wb3J0LWtleS1zaWduLmh0bWwgWyBQYXNzIF0KLWNyeXB0by93
b3JrZXJzL3N1YnRsZS9lY2RzYS1pbXBvcnQta2V5LXZlcmlmeS5odG1sIFsgUGFzcyBdCi1jcnlw
dG8vd29ya2Vycy9zdWJ0bGUvZWMtZ2VuZXJhdGUtZXhwb3J0LWp3ay1rZXkuaHRtbCBbIFBhc3Mg
XQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2VjLWdlbmVyYXRlLWV4cG9ydC1yYXcta2V5Lmh0bWwg
WyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRsZS9lYy1nZW5lcmF0ZS1rZXkuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2VjLWltcG9ydC1qd2sta2V5LXByaXZhdGUuaHRt
bCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2VjLWltcG9ydC1qd2sta2V5LXB1Ymxp
Yy5odG1sIFsgUGFzcyBdCi1jcnlwdG8vd29ya2Vycy9zdWJ0bGUvZWMtaW1wb3J0LXJhdy1rZXku
aHRtbCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2djLXdvcmtlci5odG1sIFsgUGFz
cyBdCi1jcnlwdG8vd29ya2Vycy9zdWJ0bGUvaGtkZi1pbXBvcnQta2V5LWRlcml2ZS1iaXRzLmh0
bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRsZS9oa2RmLWltcG9ydC1rZXktZGVyaXZl
LWhtYWMta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRsZS9oa2RmLWltcG9y
dC1rZXkuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2htYWMtZ2VuZXJhdGUt
ZXhwb3J0LWtleS1qd2suaHRtbCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL2htYWMt
Z2VuZXJhdGUtZXhwb3J0LWtleS1yYXcuaHRtbCBbIFBhc3MgXQotY3J5cHRvL3dvcmtlcnMvc3Vi
dGxlL2htYWMtZ2VuZXJhdGUta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRs
ZS9obWFjLWltcG9ydC1qd2sta2V5Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRs
ZS9obWFjLWltcG9ydC1rZXktc2lnbi5odG1sIFsgUGFzcyBdCi1jcnlwdG8vd29ya2Vycy9zdWJ0
bGUvaG1hYy1pbXBvcnQta2V5LXZlcmlmeS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vd29ya2Vycy9z
dWJ0bGUvaG1hYy1pbXBvcnQtcmF3LWtleS5odG1sIFsgUGFzcyBdCi1jcnlwdG8vd29ya2Vycy9z
dWJ0bGUvcGJrZGYyLWltcG9ydC1rZXktZGVyaXZlLWJpdHMuaHRtbCBbIFBhc3MgXQotY3J5cHRv
L3dvcmtlcnMvc3VidGxlL3Bia2RmMi1pbXBvcnQta2V5LWRlcml2ZS1obWFjLWtleS5odG1sIFsg
UGFzcyBdCi1jcnlwdG8vd29ya2Vycy9zdWJ0bGUvcGJrZGYyLWltcG9ydC1rZXkuaHRtbCBbIFBh
c3MgXQotY3J5cHRvL3dvcmtlcnMvc3VidGxlL3NoYTEtZGlnZXN0Lmh0bWwgWyBQYXNzIF0KLWNy
eXB0by93b3JrZXJzL3N1YnRsZS9zaGEyMjQtZGlnZXN0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93
b3JrZXJzL3N1YnRsZS9zaGEyNTYtZGlnZXN0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJz
L3N1YnRsZS9zaGEzODQtZGlnZXN0Lmh0bWwgWyBQYXNzIF0KLWNyeXB0by93b3JrZXJzL3N1YnRs
ZS9zaGE1MTItZGlnZXN0Lmh0bWwgWyBQYXNzIF0KKwogd2Via2l0Lm9yZy9iLzEzMzMxOSBjcnlw
dG8vd2Via2l0U3VidGxlL3NoYS0xLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xMzMzMTkg
Y3J5cHRvL3dlYmtpdFN1YnRsZS9zaGEtMjI0Lmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8x
MzMzMTkgY3J5cHRvL3dlYmtpdFN1YnRsZS9zaGEtMjU2Lmh0bWwgWyBQYXNzIF0KQEAgLTk2NCwy
NiArNzM0LDEyIEBAIHdlYmtpdC5vcmcvYi8xMzMzMjAgY3J5cHRvL3dlYmtpdFN1YnRsZS9obWFj
LWltcG9ydC1qd2suaHRtbCBbIFBhc3MgXQogd2Via2l0Lm9yZy9iLzEzMzMyMCBjcnlwdG8vd2Vi
a2l0U3VidGxlL2htYWMtc2lnbi12ZXJpZnktZW1wdHkta2V5Lmh0bWwgWyBQYXNzIF0KIHdlYmtp
dC5vcmcvYi8xMzMzMjAgY3J5cHRvL3dlYmtpdFN1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwg
WyBQYXNzIF0KIAotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL1dlYkNyeXB0b0FQSS9kZXJpdmVfYml0c19rZXlzL2hrZGYud29ya2VyLmh0bWwgWyBG
YWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9XZWJDcnlwdG9BUEkvZGVyaXZlX2JpdHNfa2V5cy90ZXN0X2hrZGYuaHRtbCBbIFRpbWVv
dXQgRmFpbHVyZSBdCisjIFdlJ3JlIGFjdHVhbGx5IHBhc3NpbmcgbW9yZSBzdWItdGVzdHMgaGVy
ZSB0aGFuIHRoZSBiYXNlbGluZXMgZXhwZWN0Lgogd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9lbmNyeXB0X2RlY3J5cHQvYWVz
X2NiYy53b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9lbmNyeXB0X2RlY3J5cHQvdGVz
dF9hZXNfY3RyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L2Flc19j
dHIud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L3JzYS53
b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9lbmNyeXB0X2RlY3J5cHQvdGVzdF9hZXNf
Y2JjLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L3Rlc3RfcnNhX29h
ZXAuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9pbXBvcnRfZXhwb3J0L3JzYV9pbXBvcnRLZXku
d29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvaW1wb3J0X2V4cG9ydC90ZXN0X3JzYV9p
bXBvcnRLZXkuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9zaWduX3ZlcmlmeS9yc2FfcGtjcy53
b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0b0FQSS9zaWduX3ZlcmlmeS9yc2FfcHNzLndvcmtl
ci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRvQVBJL3NpZ25fdmVyaWZ5L2VjZHNhLndvcmtlci5odG1s
IFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvV2ViQ3J5cHRvQVBJL3NpZ25fdmVyaWZ5L3Rlc3RfZWNkc2EuaHRtbCBbIEZhaWx1
cmUgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L1dlYkNyeXB0b0FQSS9zaWduX3ZlcmlmeS90ZXN0X3JzYV9wa2NzLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8xMzMxMjIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJD
cnlwdG9BUEkvc2lnbl92ZXJpZnkvdGVzdF9yc2FfcHNzLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi8xNjkyNzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9B
UEkvaW1wb3J0X2V4cG9ydC9lY19pbXBvcnRLZXkud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdl
YmtpdC5vcmcvYi8xNjkyNzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlw
dG9BUEkvaW1wb3J0X2V4cG9ydC90ZXN0X2VjX2ltcG9ydEtleS5odG1sIFsgRmFpbHVyZSBdCi13
ZWJraXQub3JnL2IvMTY5NTI4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5
cHRvQVBJL2Rlcml2ZV9iaXRzX2tleXMvcGJrZGYyLndvcmtlci5odG1sIFsgU2tpcCBdCi13ZWJr
aXQub3JnL2IvMTY5NTI4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5cHRv
QVBJL2Rlcml2ZV9iaXRzX2tleXMvdGVzdF9wYmtkZjIuaHRtbCBbIFNraXAgXQorIyBIS0RGCit3
ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViQ3J5
cHRvQVBJL2Rlcml2ZV9iaXRzX2tleXMvaGtkZi53b3JrZXIuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzEzMzEyMiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYkNyeXB0
b0FQSS9kZXJpdmVfYml0c19rZXlzL3Rlc3RfaGtkZi5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0K
IAogIyBHVEsgZG9lcyBub3QgaW1wbGVtZW50IHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFi
bGVkCiBlZGl0aW5nL2luc2VydGluZy90eXBpbmctc3BhY2UtdG8tdHJpZ2dlci1zbWFydC1saW5r
Lmh0bWwgWyBTa2lwIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRv
L2djcnlwdC9BU04xLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9nY3J5cHQvQVNO
MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNzNjMDAxYTM3Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9B
U04xLmgKQEAgLTAsMCArMSwxMTIgQEAKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKworbmFtZXNwYWNlIEFTTjEgeworCitlbnVtIGNsYXNzIFRhZyA6IHVpbnQ4X3Qg
eworICAgIEludGVnZXIgPSAweDAyLAorICAgIEJpdFN0cmluZyA9IDB4MDMsCisgICAgT2N0ZXRT
dHJpbmcgPSAweDA0LAorICAgIE9iamVjdElkZW50aWZpZXIgPSAweDA2LAorICAgIFNlcXVlbmNl
ID0gMHgzMCwKK307CisKK3N0cnVjdCBUTFYgeworICAgIHNpemVfdCBidWZmZXJTaXplIHsgMCB9
OworICAgIHNpemVfdCBidWZmZXJPZmZzZXQgeyAwIH07CisKKyAgICB1aW50OF90IHRhZyB7IDAg
fTsKKyAgICBzaXplX3QgbGVuZ3RoIHsgMCB9OworICAgIHNpemVfdCBvZmZzZXQgeyAwIH07CisK
KyAgICBzaXplX3QgdmFsdWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBidWZmZXJPZmZzZXQgKyBv
ZmZzZXQ7IH0KKyAgICBib29sIGhhc1RhZyhUYWcgdGFyZ2V0VGFnKSBjb25zdCB7IHJldHVybiB0
YWcgPT0gc3RhdGljX2Nhc3Q8dWludDhfdD4odGFyZ2V0VGFnKTsgfQorfTsKKworc3RhdGljIFRM
ViBwYXJzZVRMVihjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgY29uc3Qgc2l6ZV90IG9m
ZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0ICsgMiA+IGJ1ZmZlci5zaXplKCkpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICB1aW50OF90IHRhZyA9IGJ1ZmZlcltvZmZzZXRdOworICAgIHNpemVf
dCBsZW5ndGggPSBidWZmZXJbb2Zmc2V0ICsgMV07CisgICAgc2l6ZV90IGxlbmd0aEJ5dGVzID0g
MTsKKworICAgIGlmIChsZW5ndGggPiAxMjgpIHsKKyAgICAgICAgbGVuZ3RoQnl0ZXMgPSBsZW5n
dGggLSAxMjg7CisgICAgICAgIGlmIChvZmZzZXQgKyAyICsgbGVuZ3RoQnl0ZXMgPiBidWZmZXIu
c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBsZW5ndGggPSAwOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aEJ5dGVzOyArK2kpCisgICAgICAg
ICAgICBsZW5ndGggKz0gYnVmZmVyW29mZnNldCArIDIgKyBpXSA8PCAoKGxlbmd0aEJ5dGVzIC0g
aSAtIDEpICogOCk7CisKKyAgICAgICAgbGVuZ3RoQnl0ZXMgKz0gMTsKKyAgICB9CisKKyAgICBp
ZiAob2Zmc2V0ICsgMSArIGxlbmd0aEJ5dGVzICsgbGVuZ3RoID4gYnVmZmVyLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IDEgKyBsZW5ndGhCeXRlcyArIGxlbmd0
aCwgb2Zmc2V0LCB0YWcsIGxlbmd0aCwgMSArIGxlbmd0aEJ5dGVzIH07Cit9CisKK3N0cnVjdCBO
b2RlOworCitzdHJ1Y3QgTm9kZSB7CisgICAgTm9kZSgpID0gZGVmYXVsdDsKKyAgICBOb2RlKGNv
bnN0IE5vZGUmKSA9IGRlbGV0ZTsKKyAgICBOb2RlJiBvcGVyYXRvcj0oY29uc3QgTm9kZSYpID0g
ZGVsZXRlOworCisgICAgc2l6ZV90IG5vZGVPZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG5vZGVT
aXplIHsgMCB9OworCisgICAgdWludDhfdCB0YWcgeyAwIH07CisgICAgc2l6ZV90IGxlbmd0aCB7
IDAgfTsKKyAgICBzaXplX3Qgb2Zmc2V0IHsgMCB9OworCisgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhdGFnOyB9Cit9OworCitzdHJ1Y3QgUGFyc2VyIHsKKyAgICBQYXJzZXIo
Y29uc3QgUGFyc2VyJikgPSBkZWxldGU7CisgICAgUGFyc2VyJiBvcGVyYXRvcj0oY29uc3QgUGFy
c2VyJikgPSBkZWxldGU7CisKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcjsKKwor
ICAgIHZvaWQgcGFyc2VOb2RlKHNpemVfdCBvZmZzZXQsIFRhZyB0YXJnZXRUYWcsIE5vZGUmIG5v
ZGUpIHsKKyAgICAgICAgaWYgKG9mZnNldCArIDIgPiBidWZmZXIuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHVpbnQ4X3QgdGFnID0gYnVmZmVyW29mZnNldF07CisgICAg
ICAgIGlmICh0YWcgIT0gc3RhdGljX2Nhc3Q8dWludDhfdD4odGFyZ2V0VGFnKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgbGVuZ3RoID0gYnVmZmVyW29mZnNldCArIDFd
OworICAgICAgICBzaXplX3QgbGVuZ3RoQnl0ZXMgPSAxOworCisgICAgICAgIGlmIChsZW5ndGgg
PiAxMjgpIHsKKyAgICAgICAgICAgIGxlbmd0aEJ5dGVzID0gbGVuZ3RoIC0gMTI4OworICAgICAg
ICAgICAgaWYgKG9mZnNldCArIDIgKyBsZW5ndGhCeXRlcyA+IGJ1ZmZlci5zaXplKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsZW5ndGggPSAwOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhCeXRlczsgKytpKQorICAgICAgICAgICAg
ICAgIGxlbmd0aCArPSBidWZmZXJbb2Zmc2V0ICsgMiArIGldIDw8ICgobGVuZ3RoQnl0ZXMgLSBp
IC0gMSkgKiA4KTsKKworICAgICAgICAgICAgbGVuZ3RoQnl0ZXMgKz0gMTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChvZmZzZXQgKyAxICsgbGVuZ3RoQnl0ZXMgKyBsZW5ndGggPiBidWZmZXIu
c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG5vZGUubm9kZU9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgbm9kZS5ub2RlU2l6ZSA9IDEgKyBsZW5ndGhCeXRlcyArIGxlbmd0
aDsKKworICAgICAgICBub2RlLnRhZyA9IHRhZzsKKyAgICAgICAgbm9kZS5sZW5ndGggPSBsZW5n
dGg7CisgICAgICAgIG5vZGUub2Zmc2V0ID0gMSArIGxlbmd0aEJ5dGVzOworICAgIH0KK307CisK
K30gLy8gbmFtZXNwYWNlIEFTTjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwCmluZGV4IGY1OTE4
MmM0MDhmLi43YjIyMzBmOTg4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwCkBAIC0yOCwx
OSArMjgsMTQ4IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAorI2luY2x1ZGUgIkNy
eXB0b0tleUFFUy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcy5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5
cHRvL2djcnlwdC9IYW5kbGUuaD4KKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRp
ZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
RkI6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxi
YWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3Jr
UXVldWUmKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHRFbmNy
eXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2
LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBhdXRvIGFsZ29yaXRobSA9IFBBTDo6R0NyeXB0OjphZXNBbGdvcml0aG1Gb3JLZXlTaXpl
KGtleS5zaXplKCkgKiA4KTsKKyAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4g
aGFuZGxlOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRs
ZSwgKmFsZ29yaXRobSwgR0NSWV9DSVBIRVJfTU9ERV9DRkI4LCAwKTsKKyAgICBpZiAoZXJyb3Ig
IT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJy
b3IpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0g
Z2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAg
aWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6Omxv
Z0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGl2KGhhbmRsZSwgaXYuZGF0YSgpLCBpdi5zaXplKCkp
OworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0Ny
eXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9maW5hbChoYW5kbGUpOworICAgIGlmIChlcnJv
ciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihl
cnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG91dHB1dChwbGFpblRleHQuc2l6ZSgpKTsKKyAgICBlcnJvciA9IGdjcnlfY2lw
aGVyX2VuY3J5cHQoaGFuZGxlLCBvdXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBwbGFpblRl
eHQuZGF0YSgpLCBwbGFpblRleHQuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKG91dHB1
dCk7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVj
cnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBp
diwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCkKK3sKKyAgICBhdXRvIGFsZ29yaXRobSA9
IFBBTDo6R0NyeXB0OjphZXNBbGdvcml0aG1Gb3JLZXlTaXplKGtleS5zaXplKCkgKiA4KTsKKyAg
ICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFBB
TDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgIGdjcnlfZXJy
b3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NSWV9D
SVBIRVJfTU9ERV9DRkI4LCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikg
eworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhh
bmRsZSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVy
X3NldGl2KGhhbmRsZSwgaXYuZGF0YSgpLCBpdi5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBH
UEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5
X2NpcGhlcl9maW5hbChoYW5kbGUpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9S
KSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChjaXBo
ZXJUZXh0LnNpemUoKSk7CisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KGhhbmRsZSwg
b3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgY2lwaGVyVGV4dC5kYXRhKCksIGNpcGhlclRl
eHQuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAg
ICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKG91dHB1dCk7CiB9CiAKLXZvaWQgQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhf
dD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBs
YXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4m
JiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxh
aW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4
Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVl
dWUmIHdvcmtRdWV1ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbnRleHQucmVm
KCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1v
dmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShw
bGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFj
ayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1B
ZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9
IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBv
dXRwdXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3Rv
cigpLCBXVEZNb3ZlKHBsYWluVGV4dCkpOworICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1v
dmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxi
YWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KG91dHB1dCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
RkI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJh
Y2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
V29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVl
dWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwg
a2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRv
JiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1z
PigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlw
dG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0
RGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShj
aXBoZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4
dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5RUNHQ3J5cHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAKaW5kZXggYWJmMjk0
NzBmZjEuLjRjN2E5MjQ5NWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAi
Q3J5cHRvS2V5UGFpci5oIgogI2luY2x1ZGUgIkpzb25XZWJLZXkuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0FTTjEuaD4KICNpbmNs
dWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL2dj
cnlwdC9VdGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTE5OSwx
OCArMTk5LDI0NyBAQCBSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUlt
cG9ydEpXS1ByaXZhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZgogICAgIHJldHVybiBjcmVhdGUo
aWRlbnRpZmllciwgY3VydmUsIENyeXB0b0tleVR5cGU6OlByaXZhdGUsIHBsYXRmb3JtS2V5LnJl
bGVhc2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiB9CiAKLVJlZlB0cjxDcnlwdG9LZXlFQz4g
Q3J5cHRvS2V5RUM6OnBsYXRmb3JtSW1wb3J0U3BraShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
LCBOYW1lZEN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VCaXRt
YXApCitlbnVtIGNsYXNzIEVDQWxnb3JpdGhtIHsKKyAgICBQdWJsaWNLZXksCisgICAgREgsCit9
OworCitzdGF0aWMgc3RkOjpvcHRpb25hbDxFQ0FsZ29yaXRobT4gYWxnb3JpdGhtRm9ySWRlbnRp
Zmllcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDc+IHNfaWRFQ1B1
YmxpY0tleXsgeyAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDAyLCAweDAxIH0gfTsK
KyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA1PiBzX2lkRUNESHsgeyAweDJi
LCAweDgxLCAweDA0LCAweDAxLCAweDBjIH0gfTsKIAotICAgIHJldHVybiBudWxscHRyOworICAg
IGlmIChzaXplID09IHNfaWRFQ1B1YmxpY0tleS5zaXplKCkgJiYgIXN0ZDo6bWVtY21wKGRhdGEs
IHNfaWRFQ1B1YmxpY0tleS5kYXRhKCksIHNpemUpKQorICAgICAgICByZXR1cm4gRUNBbGdvcml0
aG06OlB1YmxpY0tleTsKKyAgICBpZiAoc2l6ZSA9PSBzX2lkRUNESC5zaXplKCkgJiYgIXN0ZDo6
bWVtY21wKGRhdGEsIHNfaWRFQ0RILmRhdGEoKSwgc2l6ZSkpCisgICAgICAgIHJldHVybiBFQ0Fs
Z29yaXRobTo6REg7CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q3J5
cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9ydFBrY3M4KENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIsIE5hbWVkQ3VydmUsIFZlY3Rvcjx1aW50OF90PiYmLCBib29sLCBDcnlwdG9L
ZXlVc2FnZUJpdG1hcCkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPENyeXB0b0tleUVDOjpOYW1lZEN1
cnZlPiBjdXJ2ZUZvcklkZW50aWZpZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCA4PiBzX3NlY3AyNTZyMXsgeyAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAw
eDAzLCAweDAxLCAweDA3IH0gfTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90
LCA1PiBzX3NlY3AzODRyMXsgeyAweDJiLCAweDgxLCAweDA0LCAweDAwLCAweDIyIH0gfTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA1PiBzX3NlY3A1MjFyMXsgeyAweDJi
LCAweDgxLCAweDA0LCAweDAwLCAweDIzIH0gfTsKKworICAgIGlmIChzaXplID09IHNfc2VjcDI1
NnIxLnNpemUoKSAmJiAhc3RkOjptZW1jbXAoZGF0YSwgc19zZWNwMjU2cjEuZGF0YSgpLCBzaXpl
KSkKKyAgICAgICAgcmV0dXJuIENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMjU2OworICAgIGlm
IChzaXplID09IHNfc2VjcDM4NHIxLnNpemUoKSAmJiAhc3RkOjptZW1jbXAoZGF0YSwgc19zZWNw
Mzg0cjEuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIENyeXB0b0tleUVDOjpOYW1lZEN1
cnZlOjpQMzg0OworICAgIGlmIChzaXplID09IHNfc2VjcDUyMXIxLnNpemUoKSAmJiAhc3RkOjpt
ZW1jbXAoZGF0YSwgc19zZWNwNTIxcjEuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgLy8gTm90IHN1cHBvcnRlZCB5ZXQuCisKKyAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworfQorCitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9y
dFNwa2koQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBOYW1lZEN1cnZlIGN1
cnZlLCBWZWN0b3I8dWludDhfdD4mJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9L
ZXlVc2FnZUJpdG1hcCB1c2FnZXMpCit7CisgICAgLy8gU3ViamVjdFB1YmxpY0tleUluZm8gIDo6
PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgIGFsZ29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlk
ZW50aWZpZXIsCisgICAgLy8gICBzdWJqZWN0UHVibGljS2V5ICAgICBCSVQgU1RSSU5HIAorICAg
IC8vIH0KKyAgICAvLyBBbGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAg
Ly8gICAgYWxnb3JpdGhtICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVy
cyAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIC8vIEVD
UGFyYW1ldGVycyA6Oj0gQ0hPSUNFIHsKKyAgICAvLyAgIG5hbWVkQ3VydmUgICAgICAgICBPQkpF
Q1QgSURFTlRJRklFUiAtLSBNVVNUIGJlIHN1cHBvcnRlZC4KKyAgICAvLyAgIC0tIGltcGxpY2l0
Q3VydmUgICBOVUxMIC0tIE1VU1QgTk9UIGJlIHVzZWQuCisgICAgLy8gICAtLSBzcGVjaWZpZWRD
dXJ2ZSAgU3BlY2lmaWVkRUNEb21haW4gLS0gTVVTVCBOT1QgYmUgdXNlZC4KKyAgICAvLyB9CisK
KyAgICBzdHJ1Y3QgOiBBU04xOjpOb2RlIHsKKyAgICAgICAgc3RydWN0IDogQVNOMTo6Tm9kZSB7
CisgICAgICAgICAgICBBU04xOjpOb2RlIGFsZ29yaXRobTsKKyAgICAgICAgICAgIEFTTjE6Ok5v
ZGUgbmFtZWRDdXJ2ZTsKKyAgICAgICAgfSBhbGdvcml0aG1JZGVudGlmaWVyOworICAgICAgICBB
U04xOjpOb2RlIHN1YmplY3RQdWJsaWNLZXk7CisgICAgfSBzcGtpOworCisgICAgQVNOMTo6UGFy
c2VyIHBhcnNlciB7IGtleURhdGEgfTsKKworICAgIHBhcnNlci5wYXJzZU5vZGUoMCwgQVNOMTo6
VGFnOjpTZXF1ZW5jZSwgc3BraSk7CisgICAgaWYgKCFzcGtpIHx8IHNwa2kubm9kZVNpemUgIT0g
a2V5RGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcGFyc2VyLnBh
cnNlTm9kZShzcGtpLm9mZnNldCwgQVNOMTo6VGFnOjpTZXF1ZW5jZSwgc3BraS5hbGdvcml0aG1J
ZGVudGlmaWVyKTsKKyAgICBpZiAoIXNwa2kuYWxnb3JpdGhtSWRlbnRpZmllcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBwYXJzZXIucGFyc2VOb2RlKHNwa2kub2Zmc2V0ICsgc3Br
aS5hbGdvcml0aG1JZGVudGlmaWVyLm9mZnNldCwgQVNOMTo6VGFnOjpPYmplY3RJZGVudGlmaWVy
LCBzcGtpLmFsZ29yaXRobUlkZW50aWZpZXIuYWxnb3JpdGhtKTsKKyAgICBpZiAoIXNwa2kuYWxn
b3JpdGhtSWRlbnRpZmllci5hbGdvcml0aG0pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBzdXBwb3J0ZWRBbGdvcml0aG0gPSBhbGdvcml0aG1Gb3JJZGVudGlmaWVyKGtleURh
dGEuZGF0YSgpICsgc3BraS5vZmZzZXQgKyBzcGtpLmFsZ29yaXRobUlkZW50aWZpZXIub2Zmc2V0
ICsgc3BraS5hbGdvcml0aG1JZGVudGlmaWVyLmFsZ29yaXRobS5vZmZzZXQsCisgICAgICAgIHNw
a2kuYWxnb3JpdGhtSWRlbnRpZmllci5hbGdvcml0aG0ubGVuZ3RoKTsKKyAgICBpZiAoIXN1cHBv
cnRlZEFsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBwYXJzZXIucGFyc2VOb2RlKHNwa2kub2Zmc2V0ICsgc3BraS5hbGdvcml0aG1J
ZGVudGlmaWVyLm9mZnNldCArIHNwa2kuYWxnb3JpdGhtSWRlbnRpZmllci5hbGdvcml0aG0ubm9k
ZVNpemUsIEFTTjE6OlRhZzo6T2JqZWN0SWRlbnRpZmllciwgc3BraS5hbGdvcml0aG1JZGVudGlm
aWVyLm5hbWVkQ3VydmUpOworICAgIGlmICghc3BraS5hbGdvcml0aG1JZGVudGlmaWVyLm5hbWVk
Q3VydmUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwYXJhbWV0ZXJDdXJ2
ZSA9IGN1cnZlRm9ySWRlbnRpZmllcihrZXlEYXRhLmRhdGEoKSArIHNwa2kuYWxnb3JpdGhtSWRl
bnRpZmllci5uYW1lZEN1cnZlLm5vZGVPZmZzZXQgKyBzcGtpLmFsZ29yaXRobUlkZW50aWZpZXIu
YWxnb3JpdGhtLm9mZnNldCwKKyAgICAgICAgc3BraS5hbGdvcml0aG1JZGVudGlmaWVyLm5hbWVk
Q3VydmUubGVuZ3RoKTsKKyAgICBpZiAoIXBhcmFtZXRlckN1cnZlIHx8ICpwYXJhbWV0ZXJDdXJ2
ZSAhPSBjdXJ2ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoc3BraS5hbGdv
cml0aG1JZGVudGlmaWVyLmFsZ29yaXRobS5ub2RlU2l6ZSArIHNwa2kuYWxnb3JpdGhtSWRlbnRp
Zmllci5uYW1lZEN1cnZlLm5vZGVTaXplICE9IHNwa2kuYWxnb3JpdGhtSWRlbnRpZmllci5sZW5n
dGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcGFyc2VyLnBhcnNlTm9kZShzcGtp
Lm9mZnNldCArIHNwa2kuYWxnb3JpdGhtSWRlbnRpZmllci5ub2RlU2l6ZSwgQVNOMTo6VGFnOjpC
aXRTdHJpbmcsIHNwa2kuc3ViamVjdFB1YmxpY0tleSk7CisgICAgaWYgKCFzcGtpLnN1YmplY3RQ
dWJsaWNLZXkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgcG9pbnRT
aXplID0gdW5jb21wcmVzc2VkUG9pbnRTaXplRm9yQ3VydmUoY3VydmUpOworICAgIGlmIChzcGtp
LnN1YmplY3RQdWJsaWNLZXkubGVuZ3RoICE9IHBvaW50U2l6ZSArIDEpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byogcG9pbnREYXRhID0ga2V5RGF0YS5kYXRhKCkgKyBzcGtp
LnN1YmplY3RQdWJsaWNLZXkubm9kZU9mZnNldCArIHNwa2kuc3ViamVjdFB1YmxpY0tleS5vZmZz
ZXQ7CisgICAgaWYgKHBvaW50RGF0YVswXSAhPSAweDAwIHx8IHBvaW50RGF0YVsxXSAhPSAweDA0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZlY3Rvcjx1aW50OF90PiBxOworICAg
IHEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwb2ludFNpemUpOworICAgIHEuYXBwZW5kKGtleURh
dGEuZGF0YSgpICsgc3BraS5vZmZzZXQgKyBzcGtpLmFsZ29yaXRobUlkZW50aWZpZXIubm9kZVNp
emUgKyBzcGtpLnN1YmplY3RQdWJsaWNLZXkub2Zmc2V0ICsgMSwgcG9pbnRTaXplKTsKKworICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYXRmb3JtS2V5OworICAgIGdjcnlf
ZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4cF9idWlsZCgmcGxhdGZvcm1LZXksIG51bGxwdHIsICIo
cHVibGljLWtleShlY2MoY3VydmUgJXMpKHEgJWIpKSkiLAorICAgICAgICBjdXJ2ZU5hbWUoY3Vy
dmUpLCBxLnNpemUoKSwgcS5kYXRhKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBjcmVhdGUoaWRlbnRpZmllciwgY3Vy
dmUsIENyeXB0b0tleVR5cGU6OlB1YmxpYywgcGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKK30KKworUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6cGxh
dGZvcm1JbXBvcnRQa2NzOChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIE5h
bWVkQ3VydmUgY3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKK3sKKyAgICAvLyBQcml2YXRlS2V5SW5m
byA6Oj0gU0VRVUVOQ0UgeworICAgIC8vICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICBWZXJz
aW9uLAorICAgIC8vICAgcHJpdmF0ZUtleUFsZ29yaXRobSAgICAgICBQcml2YXRlS2V5QWxnb3Jp
dGhtSWRlbnRpZmllciwKKyAgICAvLyAgIHByaXZhdGVLZXkgICAgICAgICAgICAgICAgUHJpdmF0
ZUtleSwKKyAgICAvLyAgIGF0dHJpYnV0ZXMgICAgICAgICAgIFswXSAgSU1QTElDSVQgQXR0cmli
dXRlcyBPUFRJT05BTCB9CisgICAgYXV0byBwcml2YXRlS2V5SW5mb1RMViA9IEFTTjE6OnBhcnNl
VExWKGtleURhdGEsIDApOworICAgIGlmICghcHJpdmF0ZUtleUluZm9UTFYuYnVmZmVyU2l6ZSB8
fCAhcHJpdmF0ZUtleUluZm9UTFYuaGFzVGFnKEFTTjE6OlRhZzo6U2VxdWVuY2UpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocHJpdmF0ZUtleUluZm9UTFYuYnVmZmVyU2l6ZSAh
PSBrZXlEYXRhLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBWZXJz
aW9uIDo6PSBJTlRFR0VSCisgICAgYXV0byB2ZXJzaW9uVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5
RGF0YSwgcHJpdmF0ZUtleUluZm9UTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCF2ZXJzaW9u
VExWLmJ1ZmZlclNpemUgfHwgIXZlcnNpb25UTFYuaGFzVGFnKEFTTjE6OlRhZzo6SW50ZWdlcikp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICh2ZXJzaW9uVExWLmxlbmd0aCAhPSAx
ICYmIGtleURhdGFbdmVyc2lvblRMVi52YWx1ZU9mZnNldCgpXSAhPSAwKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIC8vIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyIDo6PSBB
bGdvcml0aG1JZGVudGlmaWVyCisgICAgLy8gQWxnb3JpdGhtSWRlbnRpZmllciAgOjo9ICBTRVFV
RU5DRSAgeworICAgIC8vICAgIGFsZ29yaXRobSAgIE9CSkVDVCBJREVOVElGSUVSLAorICAgIC8v
ICAgIHBhcmFtZXRlcnMgIEFOWSBERUZJTkVEIEJZIGFsZ29yaXRobSBPUFRJT05BTAorICAgIC8v
IH0KKyAgICBhdXRvIHByaXZhdGVLZXlBbGdvcml0aG1UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlE
YXRhLAorICAgICAgICBwcml2YXRlS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpICsgdmVyc2lvblRM
Vi5idWZmZXJTaXplKTsKKyAgICBpZiAoIXByaXZhdGVLZXlBbGdvcml0aG1UTFYuYnVmZmVyU2l6
ZSB8fCAhcHJpdmF0ZUtleUFsZ29yaXRobVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpTZXF1ZW5jZSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhbGdvcml0aG1UTFYgPSBBU04x
OjpwYXJzZVRMVihrZXlEYXRhLCBwcml2YXRlS2V5QWxnb3JpdGhtVExWLnZhbHVlT2Zmc2V0KCkp
OworICAgIGlmICghYWxnb3JpdGhtVExWLmJ1ZmZlclNpemUgfHwgIWFsZ29yaXRobVRMVi5oYXNU
YWcoQVNOMTo6VGFnOjpPYmplY3RJZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIHN1cHBvcnRlZEFsZ29yaXRobSA9IGFsZ29yaXRobUZvcklkZW50aWZpZXIo
a2V5RGF0YS5kYXRhKCkgKyBhbGdvcml0aG1UTFYudmFsdWVPZmZzZXQoKSwgYWxnb3JpdGhtVExW
Lmxlbmd0aCk7CisgICAgaWYgKCFzdXBwb3J0ZWRBbGdvcml0aG0pCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgLy8gRUNQYXJhbWV0ZXJzIDo6PSBDSE9JQ0UgeworICAgIC8vICAgbmFt
ZWRDdXJ2ZSAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIC0tIE1VU1QgYmUgc3VwcG9ydGVkLgor
ICAgIC8vICAgLS0gaW1wbGljaXRDdXJ2ZSAgIE5VTEwgLS0gTVVTVCBOT1QgYmUgdXNlZC4KKyAg
ICAvLyAgIC0tIHNwZWNpZmllZEN1cnZlICBTcGVjaWZpZWRFQ0RvbWFpbiAtLSBNVVNUIE5PVCBi
ZSB1c2VkLgorICAgIC8vIH0KKyAgICBhdXRvIGVjUGFyYW1ldGVyc1RMViA9IEFTTjE6OnBhcnNl
VExWKGtleURhdGEsCisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1UTFYudmFsdWVPZmZzZXQo
KSArIGFsZ29yaXRobVRMVi5idWZmZXJTaXplKTsKKyAgICBpZiAoIWVjUGFyYW1ldGVyc1RMVi5i
dWZmZXJTaXplIHx8ICFlY1BhcmFtZXRlcnNUTFYuaGFzVGFnKEFTTjE6OlRhZzo6T2JqZWN0SWRl
bnRpZmllcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwYXJhbWV0ZXJD
dXJ2ZSA9IGN1cnZlRm9ySWRlbnRpZmllcihrZXlEYXRhLmRhdGEoKSArIGVjUGFyYW1ldGVyc1RM
Vi52YWx1ZU9mZnNldCgpLCBlY1BhcmFtZXRlcnNUTFYubGVuZ3RoKTsKKyAgICBpZiAoIXBhcmFt
ZXRlckN1cnZlIHx8ICpwYXJhbWV0ZXJDdXJ2ZSAhPSBjdXJ2ZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAoYWxnb3JpdGhtVExWLmJ1ZmZlclNpemUgKyBlY1BhcmFtZXRlcnNU
TFYuYnVmZmVyU2l6ZSAhPSBwcml2YXRlS2V5QWxnb3JpdGhtVExWLmxlbmd0aCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBQcml2YXRlS2V5IDo6PSBPQ1RFVCBTVFJJTkcKKyAg
ICBhdXRvIHByaXZhdGVLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLAorICAgICAgICBw
cml2YXRlS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpICsgdmVyc2lvblRMVi5idWZmZXJTaXplICsg
cHJpdmF0ZUtleUFsZ29yaXRobVRMVi5idWZmZXJTaXplKTsKKyAgICBpZiAoIXByaXZhdGVLZXlU
TFYuYnVmZmVyU2l6ZSB8fCAhcHJpdmF0ZUtleVRMVi5oYXNUYWcoQVNOMTo6VGFnOjpPY3RldFN0
cmluZykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHZlcnNpb25UTFYuYnVm
ZmVyU2l6ZSArIHByaXZhdGVLZXlBbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSArIHByaXZhdGVLZXlU
TFYuYnVmZmVyU2l6ZSAhPSBwcml2YXRlS2V5SW5mb1RMVi5sZW5ndGgpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgLy8gRUNQcml2YXRlS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgLy8g
ICB2ZXJzaW9uICAgICAgICBJTlRFR0VSIHsgZWNQcml2a2V5VmVyMSgxKSB9IChlY1ByaXZrZXlW
ZXIxKSwKKyAgICAvLyAgIHByaXZhdGVLZXkgICAgIE9DVEVUIFNUUklORywKKyAgICAvLyAgIHBh
cmFtZXRlcnMgWzBdIEVDUGFyYW1ldGVycyB7eyBOYW1lZEN1cnZlIH19IE9QVElPTkFMLAorICAg
IC8vICAgcHVibGljS2V5ICBbMV0gQklUIFNUUklORyBPUFRJT05BTAorICAgIC8vIH0KKyAgICBh
dXRvIGVjUHJpdmF0ZUtleVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIHByaXZhdGVLZXlU
TFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCFlY1ByaXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSB8
fCAhZWNQcml2YXRlS2V5VExWLmhhc1RhZyhBU04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8dWludDhfdD4gZDsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gcTsKKyAgICB7CisgICAgICAgIGF1dG8gdmVyc2lvblRMViA9IEFTTjE6OnBhcnNlVExW
KGtleURhdGEsIGVjUHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNldCgpKTsKKyAgICAgICAgaWYgKCF2
ZXJzaW9uVExWLmJ1ZmZlclNpemUgfHwgIXZlcnNpb25UTFYuaGFzVGFnKEFTTjE6OlRhZzo6SW50
ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKHZlcnNpb25U
TFYubGVuZ3RoICE9IDEgfHwga2V5RGF0YVt2ZXJzaW9uVExWLnZhbHVlT2Zmc2V0KCldICE9IDEp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhdXRvIHByaXZhdGVLZXlU
TFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLAorICAgICAgICAgICAgZWNQcml2YXRlS2V5VExW
LnZhbHVlT2Zmc2V0KCkgKyB2ZXJzaW9uVExWLmJ1ZmZlclNpemUpOworICAgICAgICBpZiAoIXBy
aXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhcHJpdmF0ZUtleVRMVi5oYXNUYWcoQVNOMTo6VGFn
OjpPY3RldFN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBk
LnJlc2l6ZShwcml2YXRlS2V5VExWLmxlbmd0aCk7CisgICAgICAgIHN0ZDo6bWVtY3B5KGQuZGF0
YSgpLCBrZXlEYXRhLmRhdGEoKSArIHByaXZhdGVLZXlUTFYudmFsdWVPZmZzZXQoKSwgcHJpdmF0
ZUtleVRMVi5sZW5ndGgpOworCisgICAgICAgIGF1dG8gb3B0aW9uYWxUTFYgPSBBU04xOjpwYXJz
ZVRMVihrZXlEYXRhLAorICAgICAgICAgICAgZWNQcml2YXRlS2V5VExWLnZhbHVlT2Zmc2V0KCkg
KyB2ZXJzaW9uVExWLmJ1ZmZlclNpemUgKyBwcml2YXRlS2V5VExWLmJ1ZmZlclNpemUpOworCisg
ICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgb3B0aW9uYWwgcGFyYW1ldGVycywgcHVibGljS2V5IGZp
ZWxkcy4KKyAgICAgICAgaWYgKG9wdGlvbmFsVExWLmJ1ZmZlclNpemUgJiYgb3B0aW9uYWxUTFYu
dGFnICYgMHgyMCkgeworICAgICAgICAgICAgYXV0byBwdWJsaWNLZXlUTFYgPSBBU04xOjpwYXJz
ZVRMVihrZXlEYXRhLCBvcHRpb25hbFRMVi52YWx1ZU9mZnNldCgpKTsKKyAgICAgICAgICAgIGlm
IChwdWJsaWNLZXlUTFYuYnVmZmVyU2l6ZSAmJiBwdWJsaWNLZXlUTFYuaGFzVGFnKEFTTjE6OlRh
Zzo6Qml0U3RyaW5nKSkgeworICAgICAgICAgICAgICAgIGlmIChrZXlEYXRhW3B1YmxpY0tleVRM
Vi52YWx1ZU9mZnNldCgpXSAhPSAweDAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICBxLmFwcGVuZChrZXlEYXRhLmRhdGEoKSArIHB1YmxpY0tl
eVRMVi52YWx1ZU9mZnNldCgpICsgMSwgcHVibGljS2V5VExWLmxlbmd0aCAtIDEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcnNpb25UTFYuYnVmZmVyU2l6ZSAr
IHByaXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSArIG9wdGlvbmFsVExWLmJ1ZmZlclNpemUgIT0gZWNQ
cml2YXRlS2V5VExWLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIGlmIChkLnNpemUoKSAqIDggIT0gY3VydmVTaXplKGN1cnZlKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXEuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChxLnNp
emUoKSAhPSAyICogKGN1cnZlU2l6ZShjdXJ2ZSkgLyA4KSArIDEgfHwgcVswXSAhPSAweDA0KQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUEFMOjpHQ3J5cHQ6Okhh
bmRsZTxnY3J5X3NleHBfdD4gcGxhdGZvcm1LZXk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0g
Z2NyeV9zZXhwX2J1aWxkKCZwbGF0Zm9ybUtleSwgbnVsbHB0ciwgIihwcml2YXRlLWtleShlY2Mo
Y3VydmUgJXMpKGQgJWIpKSkiLAorICAgICAgICBjdXJ2ZU5hbWUoY3VydmUpLCBkLnNpemUoKSwg
ZC5kYXRhKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHJldHVybiBjcmVhdGUoaWRlbnRpZmllciwgY3VydmUsIENyeXB0b0tleVR5
cGU6OlByaXZhdGUsIHBsYXRmb3JtS2V5LnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7
CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRSYXcoKSBj
b25zdApAQCAtMjcwLDE2ICs0OTksMjQ5IEBAIHZvaWQgQ3J5cHRvS2V5RUM6OnBsYXRmb3JtQWRk
RmllbGRFbGVtZW50cyhKc29uV2ViS2V5JiBqd2spIGNvbnN0CiAKIFZlY3Rvcjx1aW50OF90PiBD
cnlwdG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRTcGtpKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIGF1dG8gYXBwZW5kTGVuZ3RoID0KKyAgICAgICAgW10oc2l6ZV90IGxlbmd0
aCwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPiAx
MjcpIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGxlbmd0aEJ5dGVzID0gc3RkOjpjZWlsKHN0
ZDo6bG9nMihsZW5ndGggKyAxKSAvIDgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
MHg4MCB8IGxlbmd0aEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7
IGkgPCBsZW5ndGhCeXRlczsgKytpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KChsZW5ndGggPj4gKChsZW5ndGhCeXRlcyAtIGkgLSAxKSAqIDgpICYgMHhmZikpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsZW5ndGgpOworICAg
ICAgICB9OworCisgICAgLy8gU3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsK
KyAgICAvLyAgIGFsZ29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAg
Ly8gICBzdWJqZWN0UHVibGljS2V5ICAgICBCSVQgU1RSSU5HICB9CisKKyAgICAvLyBBbGdvcml0
aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAgT0JK
RUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxn
b3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIFZlY3Rvcjx1aW50OF90PiBhbGdvcml0aG1J
ZGVudGlmaWVyRGF0YTsKKyAgICB7CisgICAgICAgIC8vIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDU+IHNfaWRFQ0RIeyB7IDB4MmIsIDB4ODEsIDB4MDQsIDB4MDEsIDB4MGMgfSB9
OworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA3PiBzX2lkRUNQdWJs
aWNLZXl7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSB9IH07CisK
KyAgICAgICAgLy8gRUNQYXJhbWV0ZXJzIDo6PSBDSE9JQ0UgeworICAgICAgICAvLyAgIG5hbWVk
Q3VydmUgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiAtLSBNVVNUIGJlIHN1cHBvcnRlZC4KKyAg
ICAgICAgLy8gICAtLSBpbXBsaWNpdEN1cnZlICAgTlVMTCAtLSBNVVNUIE5PVCBiZSB1c2VkLgor
ICAgICAgICAvLyAgIC0tIHNwZWNpZmllZEN1cnZlICBTcGVjaWZpZWRFQ0RvbWFpbiAtLSBNVVNU
IE5PVCBiZSB1c2VkLgorICAgICAgICAvLyB9CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBlY1Bh
cmFtZXRlcnNEYXRhOworICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjph
cnJheTx1aW50OF90LCA4PiBzX3NlY3AyNTZyMXsgeyAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAw
eDNkLCAweDAzLCAweDAxLCAweDA3IH0gfTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDU+IHNfc2VjcDM4NHIxeyB7IDB4MmIsIDB4ODEsIDB4MDQsIDB4MDAs
IDB4MjIgfSB9OworCisgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZCgweDA2KTsK
KworICAgICAgICAgICAgc3dpdGNoIChtX2N1cnZlKSB7CisgICAgICAgICAgICBjYXNlIE5hbWVk
Q3VydmU6OlAyNTY6CisgICAgICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19z
ZWNwMjU2cjEuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVu
ZChzX3NlY3AyNTZyMS5kYXRhKCksIHNfc2VjcDI1NnIxLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAgICAg
ICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMzg0cjEuc2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZChzX3NlY3AzODRyMS5kYXRhKCksIHNf
c2VjcDM4NHIxLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgz
MCk7CisgICAgICAgIGFwcGVuZExlbmd0aCgyICsgc19pZEVDUHVibGljS2V5LnNpemUoKSArIGVj
UGFyYW1ldGVyc0RhdGEuc2l6ZSgpLCBhbGdvcml0aG1JZGVudGlmaWVyRGF0YSk7CisKKyAgICAg
ICAgLy8gYWxnb3JpdGhtCisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFwcGVuZCgw
eDA2KTsKKyAgICAgICAgYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKHNfaWRFQ1B1Ymxp
Y0tleS5zaXplKCkpOworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoc19p
ZEVDUHVibGljS2V5LmRhdGEoKSwgc19pZEVDUHVibGljS2V5LnNpemUoKSk7CisKKyAgICAgICAg
Ly8gcGFyYW1ldGVycworICAgICAgICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmRWZWN0
b3IoZWNQYXJhbWV0ZXJzRGF0YSk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHN1Ympl
Y3RQdWJsaWNLZXlEYXRhOworICAgIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHE7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHFTZXhw
KGdjcnlfc2V4cF9maW5kX3Rva2VuKG1fcGxhdGZvcm1LZXksICJxIiwgMCkpOworICAgICAgICAg
ICAgaWYgKCFxU2V4cCkKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAg
ICBzaXplX3QgcG9pbnRTaXplID0gMiAqIChjdXJ2ZVNpemUobV9jdXJ2ZSkgLyA4KTsKKyAgICAg
ICAgICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRh
dGEgPSBnY3J5X3NleHBfbnRoX2RhdGEocVNleHAsIDEsICZkYXRhTGVuZ3RoKTsKKyAgICAgICAg
ICAgIGlmICghZGF0YSB8fCBkYXRhTGVuZ3RoICE9IHBvaW50U2l6ZSArIDEgfHwgZGF0YVswXSAh
PSAweDA0KQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgIHEuYXBw
ZW5kKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgc3ViamVjdFB1Ymxp
Y0tleURhdGEuYXBwZW5kKDB4MDMpOworICAgICAgICBhcHBlbmRMZW5ndGgoMSArIHEuc2l6ZSgp
LCBzdWJqZWN0UHVibGljS2V5RGF0YSk7CisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlEYXRhLmFw
cGVuZCgweDAwKTsKKyAgICAgICAgc3ViamVjdFB1YmxpY0tleURhdGEuYXBwZW5kVmVjdG9yKHEp
OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVu
ZCgweDMwKTsKKyAgICBhcHBlbmRMZW5ndGgoYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuc2l6ZSgp
ICsgc3ViamVjdFB1YmxpY0tleURhdGEuc2l6ZSgpLCByZXN1bHQpOworICAgIHJlc3VsdC5hcHBl
bmRWZWN0b3IoYWxnb3JpdGhtSWRlbnRpZmllckRhdGEpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0
b3Ioc3ViamVjdFB1YmxpY0tleURhdGEpOwogCi0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBWZWN0b3I8dWludDhfdD4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtRXhwb3J0
UGtjczgoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXV0byBhcHBlbmRM
ZW5ndGggPQorICAgICAgICBbXShzaXplX3QgbGVuZ3RoLCBWZWN0b3I8dWludDhfdD4mIHJlc3Vs
dCkgeworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEyNykgeworICAgICAgICAgICAgICAgIHVp
bnQ4X3QgbGVuZ3RoQnl0ZXMgPSBzdGQ6OmNlaWwoc3RkOjpsb2cyKGxlbmd0aCArIDEpIC8gOCk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgweDgwIHwgbGVuZ3RoQnl0ZXMpOworICAg
ICAgICAgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGxlbmd0aEJ5dGVzOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGxlbmd0aCA+PiAoKGxlbmd0aEJ5dGVz
IC0gaSAtIDEpICogOCkgJiAweGZmKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGxlbmd0aCk7CisgICAgICAgIH07CisKKyAgICAvLyBQcml2YXRl
S2V5SW5mbyA6Oj0gU0VRVUVOQ0UgeworICAgIC8vICAgdmVyc2lvbiAgICAgICAgICAgICAgICAg
ICBWZXJzaW9uLAorICAgIC8vICAgcHJpdmF0ZUtleUFsZ29yaXRobSAgICAgICBQcml2YXRlS2V5
QWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAvLyAgIHByaXZhdGVLZXkgICAgICAgICAgICAgICAg
UHJpdmF0ZUtleSwKKyAgICAvLyAgIGF0dHJpYnV0ZXMgICAgICAgICAgIFswXSAgSU1QTElDSVQg
QXR0cmlidXRlcyBPUFRJT05BTCB9CisKKyAgICAvLyBWZXJzaW9uIDo6PSBJTlRFR0VSCisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMz4gc192ZXJzaW9uRGF0YXsgeyAweDAy
LCAweDAxLCAweDAwIH0gfTsKKworICAgIC8vIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVy
IDo6PSBBbGdvcml0aG1JZGVudGlmaWVyCisgICAgLy8gQWxnb3JpdGhtSWRlbnRpZmllciAgOjo9
ICBTRVFVRU5DRSAgeworICAgIC8vICAgIGFsZ29yaXRobSAgIE9CSkVDVCBJREVOVElGSUVSLAor
ICAgIC8vICAgIHBhcmFtZXRlcnMgIEFOWSBERUZJTkVEIEJZIGFsZ29yaXRobSBPUFRJT05BTAor
ICAgIC8vIH0KKyAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUtleUFsZ29yaXRobURhdGE7Cisg
ICAgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA3PiBzX2lkRUNQ
dWJsaWNLZXl7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSB9IH07
CisKKyAgICAgICAgLy8gRUNQYXJhbWV0ZXJzIDo6PSBDSE9JQ0UgeworICAgICAgICAvLyAgIG5h
bWVkQ3VydmUgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiAtLSBNVVNUIGJlIHN1cHBvcnRlZC4K
KyAgICAgICAgLy8gICAtLSBpbXBsaWNpdEN1cnZlICAgTlVMTCAtLSBNVVNUIE5PVCBiZSB1c2Vk
LgorICAgICAgICAvLyAgIC0tIHNwZWNpZmllZEN1cnZlICBTcGVjaWZpZWRFQ0RvbWFpbiAtLSBN
VVNUIE5PVCBiZSB1c2VkLgorICAgICAgICAvLyB9CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBl
Y1BhcmFtZXRlcnNEYXRhOworICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3Rk
OjphcnJheTx1aW50OF90LCA4PiBzX3NlY3AyNTZyMXsgeyAweDJhLCAweDg2LCAweDQ4LCAweGNl
LCAweDNkLCAweDAzLCAweDAxLCAweDA3IH0gfTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBz
dGQ6OmFycmF5PHVpbnQ4X3QsIDU+IHNfc2VjcDM4NHIxeyB7IDB4MmIsIDB4ODEsIDB4MDQsIDB4
MDAsIDB4MjIgfSB9OworCisgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZCgweDA2
KTsKKworICAgICAgICAgICAgc3dpdGNoIChtX2N1cnZlKSB7CisgICAgICAgICAgICBjYXNlIE5h
bWVkQ3VydmU6OlAyNTY6CisgICAgICAgICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQo
c19zZWNwMjU2cjEuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFw
cGVuZChzX3NlY3AyNTZyMS5kYXRhKCksIHNfc2VjcDI1NnIxLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6CisgICAgICAg
ICAgICAgICAgZWNQYXJhbWV0ZXJzRGF0YS5hcHBlbmQoc19zZWNwMzg0cjEuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBlY1BhcmFtZXRlcnNEYXRhLmFwcGVuZChzX3NlY3AzODRyMS5kYXRhKCks
IHNfc2VjcDM4NHIxLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQo
MHgzMCk7CisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFwcGVuZCgyICsgc19pZEVD
UHVibGljS2V5LnNpemUoKSArIGVjUGFyYW1ldGVyc0RhdGEuc2l6ZSgpKTsKKworICAgICAgICBw
cml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoMHgwNik7CisgICAgICAgIHByaXZhdGVLZXlB
bGdvcml0aG1EYXRhLmFwcGVuZChzX2lkRUNQdWJsaWNLZXkuc2l6ZSgpKTsKKyAgICAgICAgcHJp
dmF0ZUtleUFsZ29yaXRobURhdGEuYXBwZW5kKHNfaWRFQ1B1YmxpY0tleS5kYXRhKCksIHNfaWRF
Q1B1YmxpY0tleS5zaXplKCkpOworCisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFw
cGVuZFZlY3RvcihlY1BhcmFtZXRlcnNEYXRhKTsKKyAgICB9CisKKyAgICAvLyBQcml2YXRlS2V5
IDo6PSBPQ1RFVCBTVFJJTkcKKyAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUtleURhdGE7Cisg
ICAgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gZDsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHE7CisgICAgICAgIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jdHhf
dD4gY29udGV4dDsKKyAgICAgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfbXBpX2Vj
X25ldygmY29udGV4dCwgbV9wbGF0Zm9ybUtleSwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5
X21waV90PiBkTVBJKGdjcnlfbXBpX2VjX2dldF9tcGkoImQiLCBjb250ZXh0LCAwKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFkTVBJKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
CisgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOworICAgICAgICAgICAgICAg
IGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRyLCAwLCAmZGF0
YUxlbmd0aCwgZE1QSSk7CisgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9f
RVJST1IpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgICAg
ICBkLnJlc2l6ZShkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGdjcnlfbXBp
X3ByaW50KEdDUllNUElfRk1UX1VTRywgZC5kYXRhKCksIGQuc2l6ZSgpLCBudWxscHRyLCBkTVBJ
KTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHFNUEkoZ2Ny
eV9tcGlfZWNfZ2V0X21waSgicSIsIGNvbnRleHQsIDApKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXFNUEkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgICAg
ICBzaXplX3QgZGF0YUxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBnY3J5X21w
aV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBxTVBJKTsK
KyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgICAgIHEucmVzaXplKGRhdGFM
ZW5ndGgpOworICAgICAgICAgICAgICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9G
TVRfVVNHLCBxLmRhdGEoKSwgcS5zaXplKCksIG51bGxwdHIsIHFNUEkpOworICAgICAgICAgICAg
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRUNQcml2
YXRlS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgICAgIC8vICAgdmVyc2lvbiAgICAgICAgSU5URUdF
UiB7IGVjUHJpdmtleVZlcjEoMSkgfSAoZWNQcml2a2V5VmVyMSksCisgICAgICAgIC8vICAgcHJp
dmF0ZUtleSAgICAgT0NURVQgU1RSSU5HLAorICAgICAgICAvLyAgIHBhcmFtZXRlcnMgWzBdIEVD
UGFyYW1ldGVycyB7eyBOYW1lZEN1cnZlIH19IE9QVElPTkFMLAorICAgICAgICAvLyAgIHB1Ymxp
Y0tleSAgWzFdIEJJVCBTVFJJTkcgT1BUSU9OQUwKKyAgICAgICAgLy8gfQorICAgICAgICBWZWN0
b3I8dWludDhfdD4gZWNQcml2YXRlS2V5RGF0YTsKKyAgICAgICAgeworICAgICAgICAgICAgZWNQ
cml2YXRlS2V5RGF0YS5hcHBlbmQoMHgzMCk7CisgICAgICAgICAgICBhcHBlbmRMZW5ndGgoMyAr
IDIgKyBkLnNpemUoKSArIDIgKyAzICsgcS5zaXplKCksIGVjUHJpdmF0ZUtleURhdGEpOworCisg
ICAgICAgICAgICAvLyB2ZXJzaW9uCisgICAgICAgICAgICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVu
ZCgweDAyKTsKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBwZW5kKDEpOworICAgICAg
ICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoMSk7CisKKyAgICAgICAgICAgIC8vIHByaXZh
dGVLZXkKKyAgICAgICAgICAgIGVjUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4MDQpOworICAgICAg
ICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoZC5zaXplKCkpOworICAgICAgICAgICAgZWNQ
cml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IoZCk7CisKKyAgICAgICAgICAgIC8vIHB1YmxpY0tl
eQorICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBlbmQoMHhBMSk7CisgICAgICAgICAg
ICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZCgzICsgcS5zaXplKCkpOworICAgICAgICAgICAgZWNQ
cml2YXRlS2V5RGF0YS5hcHBlbmQoMHgwMyk7CisgICAgICAgICAgICBlY1ByaXZhdGVLZXlEYXRh
LmFwcGVuZCgxICsgcS5zaXplKCkpOworICAgICAgICAgICAgZWNQcml2YXRlS2V5RGF0YS5hcHBl
bmQoMHgwMCk7CisgICAgICAgICAgICBlY1ByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3RvcihxKTsK
KyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGVLZXlEYXRhLmFwcGVuZCgweDA0KTsKKyAgICAg
ICAgYXBwZW5kTGVuZ3RoKGVjUHJpdmF0ZUtleURhdGEuc2l6ZSgpLCBwcml2YXRlS2V5RGF0YSk7
CisgICAgICAgIHByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3RvcihlY1ByaXZhdGVLZXlEYXRhKTsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQo
MHgzMCk7CisgICAgYXBwZW5kTGVuZ3RoKHNfdmVyc2lvbkRhdGEuc2l6ZSgpICsgcHJpdmF0ZUtl
eUFsZ29yaXRobURhdGEuc2l6ZSgpICsgcHJpdmF0ZUtleURhdGEuc2l6ZSgpLCByZXN1bHQpOwor
ICAgIHJlc3VsdC5hcHBlbmQoc192ZXJzaW9uRGF0YS5kYXRhKCksIHNfdmVyc2lvbkRhdGEuc2l6
ZSgpKTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHByaXZhdGVLZXlBbGdvcml0aG1EYXRhKTsK
KyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHByaXZhdGVLZXlEYXRhKTsKIAotICAgIHJldHVybiB7
IH07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3Bw
CmluZGV4IDI0NzgwZTZjY2ZkLi4wNTdhNTI1YWFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNwcApAQCAtMzIsOCArMzIsOCBA
QAogI2luY2x1ZGUgIkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ3J5
cHRvS2V5UGFpci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlIDxwYWwvY3J5cHRvL2djcnlwdC9BU04xLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5
cHQvSGFuZGxlLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CiAK
QEAgLTI2OCwzMiArMjY4LDU1MiBAQCB2b2lkIENyeXB0b0tleVJTQTo6Z2VuZXJhdGVQYWlyKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBDcnlwdG9BbGdvcgogICAgICAgICB9
KTsKIH0KIAotUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcj4sIFZlY3Rvcjx1aW50OF90PiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCkK
K2VudW0gY2xhc3MgUlNBQWxnb3JpdGhtIHsKKyAgICBSU0FFbmNyeXB0aW9uLAorICAgIFJTQUVT
X09BRVAsCisgICAgUlNBU1NBX1BTUywKK307CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFJTQUFs
Z29yaXRobT4gYWxnb3JpdGhtRm9ySWRlbnRpZmllcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCA5PiBzX3Jz
YUVuY3J5cHRpb257IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwgMHgwMSwg
MHgwMSwgMHgwMSB9IH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgOT4g
c19pZFJTQUVTX09BRVB7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwgMHgw
MSwgMHgwMSwgMHgwNyB9IH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
OT4gc19pZFJTQVNTQV9QU1N7IHsgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwg
MHgwMSwgMHgwMSwgMHgwYSB9IH07CisKKyAgICBpZiAoc2l6ZSAhPSA5KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFzdGQ6Om1lbWNtcChkYXRhLCBzX3JzYUVuY3J5
cHRpb24uZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIFJTQUFsZ29yaXRobTo6UlNBRW5j
cnlwdGlvbjsKKyAgICBpZiAoIXN0ZDo6bWVtY21wKGRhdGEsIHNfaWRSU0FFU19PQUVQLmRhdGEo
KSwgc2l6ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFzdGQ6Om1l
bWNtcChkYXRhLCBzX2lkUlNBU1NBX1BTUy5kYXRhKCksIHNpemUpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDcnlw
dG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcj4g
aGFzaCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRv
S2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
U3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgIGFsZ29yaXRo
bSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgLy8gICBzdWJqZWN0UHVibGlj
S2V5ICAgICBCSVQgU1RSSU5HICB9CisgICAgYXV0byBzdWJqZWN0UHVibGljS2V5SW5mb1RMViA9
IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIDApOworICAgIGlmICghc3ViamVjdFB1YmxpY0tleUlu
Zm9UTFYuYnVmZmVyU2l6ZSB8fCAhc3ViamVjdFB1YmxpY0tleUluZm9UTFYuaGFzVGFnKEFTTjE6
OlRhZzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEFsZ29y
aXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAvLyAgICBhbGdvcml0aG0gICBP
QkpFQ1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0ZXJzICBBTlkgREVGSU5FRCBCWSBh
bGdvcml0aG0gT1BUSU9OQUwKKyAgICAvLyB9CisgICAgYXV0byBhbGdvcml0aG1JZGVudGlmaWVy
VExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgc3ViamVjdFB1YmxpY0tleUluZm9UTFYudmFs
dWVPZmZzZXQoKSk7CisgICAgaWYgKCFhbGdvcml0aG1JZGVudGlmaWVyVExWLmJ1ZmZlclNpemUg
fHwgIWFsZ29yaXRobUlkZW50aWZpZXJUTFYuaGFzVGFnKEFTTjE6OlRhZzo6U2VxdWVuY2UpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8g
YWxnb3JpdGhtVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgYWxnb3JpdGhtSWRlbnRpZmll
clRMVi52YWx1ZU9mZnNldCgpKTsKKyAgICBpZiAoIWFsZ29yaXRobVRMVi5idWZmZXJTaXplIHx8
ICFhbGdvcml0aG1UTFYuaGFzVGFnKEFTTjE6OlRhZzo6T2JqZWN0SWRlbnRpZmllcikpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXBwb3J0ZWRBbGdvcml0aG0gPSBhbGdv
cml0aG1Gb3JJZGVudGlmaWVyKGtleURhdGEuZGF0YSgpICsgYWxnb3JpdGhtVExWLnZhbHVlT2Zm
c2V0KCksIGFsZ29yaXRobVRMVi5sZW5ndGgpOworICAgIGlmICghc3VwcG9ydGVkQWxnb3JpdGht
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3ViamVjdFB1YmxpY0tleVRM
ViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsCisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlJbmZv
VExWLnZhbHVlT2Zmc2V0KCkgKyBhbGdvcml0aG1JZGVudGlmaWVyVExWLmJ1ZmZlclNpemUpOwor
ICAgIGlmICghc3ViamVjdFB1YmxpY0tleVRMVi5idWZmZXJTaXplIHx8ICFzdWJqZWN0UHVibGlj
S2V5VExWLmhhc1RhZyhBU04xOjpUYWc6OkJpdFN0cmluZykKKyAgICAgICAgfHwga2V5RGF0YVtz
dWJqZWN0UHVibGljS2V5VExWLnZhbHVlT2Zmc2V0KCldICE9IDB4MDApCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgLy8gUlNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgLy8g
ICBtb2R1bHVzICAgICAgICAgICBJTlRFR0VSLCAgLS0gbgorICAgIC8vICAgcHVibGljRXhwb25l
bnQgICAgSU5URUdFUiAgIC0tIGUKKyAgICAvLyB9CisgICAgYXV0byByc2FQdWJsaWNLZXlUTFYg
PSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBzdWJqZWN0UHVibGljS2V5VExWLnZhbHVlT2Zmc2V0
KCkgKyAxKTsKKyAgICBpZiAoIXJzYVB1YmxpY0tleVRMVi5idWZmZXJTaXplIHx8ICFyc2FQdWJs
aWNLZXlUTFYuaGFzVGFnKEFTTjE6OlRhZzo6U2VxdWVuY2UpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEFTTjE6OlRMViBtb2R1bHVzVExWOworICAgIEFTTjE6OlRMViBwdWJsaWNF
eHBvbmVudFRMVjsKKyAgICB7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSByc2FQdWJsaWNLZXlU
TFYudmFsdWVPZmZzZXQoKTsKKyAgICAgICAgbW9kdWx1c1RMViA9IEFTTjE6OnBhcnNlVExWKGtl
eURhdGEsIG9mZnNldCk7CisgICAgICAgIGlmICghbW9kdWx1c1RMVi5idWZmZXJTaXplIHx8ICFt
b2R1bHVzVExWLmhhc1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgb2Zmc2V0ICs9IG1vZHVsdXNUTFYuYnVmZmVyU2l6ZTsKKyAg
ICAgICAgcHVibGljRXhwb25lbnRUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQp
OworICAgICAgICBpZiAoIXB1YmxpY0V4cG9uZW50VExWLmJ1ZmZlclNpemUgfHwgIXB1YmxpY0V4
cG9uZW50VExWLmhhc1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgaWYgKG1vZHVsdXNUTFYuYnVmZmVyU2l6ZSArIHB1YmxpY0V4
cG9uZW50VExWLmJ1ZmZlclNpemUgIT0gcnNhUHVibGljS2V5VExWLmxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2Ny
eV9zZXhwX3Q+IHBsYXRmb3JtS2V5OworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4
cF9idWlsZCgmcGxhdGZvcm1LZXksIG51bGxwdHIsICIocHVibGljLWtleShyc2EobiAlYikoZSAl
YikpKSIsCisgICAgICAgIG1vZHVsdXNUTFYubGVuZ3RoLCBrZXlEYXRhLmRhdGEoKSArIG1vZHVs
dXNUTFYudmFsdWVPZmZzZXQoKSwKKyAgICAgICAgcHVibGljRXhwb25lbnRUTFYubGVuZ3RoLCBr
ZXlEYXRhLmRhdGEoKSArIHB1YmxpY0V4cG9uZW50VExWLnZhbHVlT2Zmc2V0KCkpOworICAgIGlm
IChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dF
cnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5UlNBKGlkZW50aWZpZXIsIGhhc2gudmFsdWVfb3IoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsIENyeXB0b0tleVR5cGU6OlB1
YmxpYywgcGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7OwogfQog
Ci1SZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cj4sIFZlY3Rvcjx1aW50OF90PiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCkKK1JlZlB0
cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBpZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI+IGhhc2gsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUs
IENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIC8vIFByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgLy8gICB2ZXJzaW9uICAg
ICAgICAgICAgICAgICAgIFZlcnNpb24sCisgICAgLy8gICBwcml2YXRlS2V5QWxnb3JpdGhtICAg
ICAgIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyLAorICAgIC8vICAgcHJpdmF0ZUtleSAg
ICAgICAgICAgICAgICBQcml2YXRlS2V5LAorICAgIC8vICAgYXR0cmlidXRlcyAgICAgICAgICAg
WzBdICBJTVBMSUNJVCBBdHRyaWJ1dGVzIE9QVElPTkFMIH0KKyAgICBhdXRvIHByaXZhdGVLZXlJ
bmZvVExWID0gQVNOMTo6cGFyc2VUTFYoa2V5RGF0YSwgMCk7CisgICAgaWYgKCFwcml2YXRlS2V5
SW5mb1RMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlS2V5SW5mb1RMVi5oYXNUYWcoQVNOMTo6VGFn
OjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChwcml2YXRlS2V5
SW5mb1RMVi5idWZmZXJTaXplICE9IGtleURhdGEuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIFZlcnNpb24gOjo9IElOVEVHRVIKKyAgICBhdXRvIHZlcnNpb25UTFYg
PSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBwcml2YXRlS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgp
KTsKKyAgICBpZiAoIXZlcnNpb25UTFYuYnVmZmVyU2l6ZSB8fCAhdmVyc2lvblRMVi5oYXNUYWco
QVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHZl
cnNpb25UTFYubGVuZ3RoICE9IDEgJiYga2V5RGF0YVt2ZXJzaW9uVExWLnZhbHVlT2Zmc2V0KCld
ICE9IDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gUHJpdmF0ZUtleUFsZ29y
aXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAvLyBBbGdvcml0aG1J
ZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAgT0JKRUNU
IElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxnb3Jp
dGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIGF1dG8gcHJpdmF0ZUtleUFsZ29yaXRobVRMViA9
IEFTTjE6OnBhcnNlVExWKGtleURhdGEsCisgICAgICAgIHByaXZhdGVLZXlJbmZvVExWLnZhbHVl
T2Zmc2V0KCkgKyB2ZXJzaW9uVExWLmJ1ZmZlclNpemUpOworICAgIGlmICghcHJpdmF0ZUtleUFs
Z29yaXRobVRMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlS2V5QWxnb3JpdGhtVExWLmhhc1RhZyhB
U04xOjpUYWc6OlNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGFsZ29yaXRobVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIHByaXZhdGVLZXlBbGdvcml0
aG1UTFYudmFsdWVPZmZzZXQoKSk7CisgICAgaWYgKCFhbGdvcml0aG1UTFYuYnVmZmVyU2l6ZSB8
fCAhYWxnb3JpdGhtVExWLmhhc1RhZyhBU04xOjpUYWc6Ok9iamVjdElkZW50aWZpZXIpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VwcG9ydGVkQWxnb3JpdGhtID0gYWxn
b3JpdGhtRm9ySWRlbnRpZmllcihrZXlEYXRhLmRhdGEoKSArIGFsZ29yaXRobVRMVi52YWx1ZU9m
ZnNldCgpLCBhbGdvcml0aG1UTFYubGVuZ3RoKTsKKyAgICBpZiAoIXN1cHBvcnRlZEFsZ29yaXRo
bSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBQcml2YXRlS2V5IDo6PSBPQ1RF
VCBTVFJJTkcKKyAgICBhdXRvIHByaXZhdGVLZXlUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRh
LAorICAgICAgICBwcml2YXRlS2V5SW5mb1RMVi52YWx1ZU9mZnNldCgpICsgdmVyc2lvblRMVi5i
dWZmZXJTaXplICsgcHJpdmF0ZUtleUFsZ29yaXRobVRMVi5idWZmZXJTaXplKTsKKyAgICBpZiAo
IXByaXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhcHJpdmF0ZUtleVRMVi5oYXNUYWcoQVNOMTo6
VGFnOjpPY3RldFN0cmluZykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gUlNB
UHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgIC8vICAgICB2ZXJzaW9uICAgICAgICAgICBW
ZXJzaW9uLAorICAgIC8vICAgICBtb2R1bHVzICAgICAgICAgICBJTlRFR0VSLCAgLS0gbgorICAg
IC8vICAgICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSLCAgLS0gZQorICAgIC8vICAgICBwcml2
YXRlRXhwb25lbnQgICBJTlRFR0VSLCAgLS0gZAorICAgIC8vICAgICBwcmltZTEgICAgICAgICAg
ICBJTlRFR0VSLCAgLS0gcAorICAgIC8vICAgICBwcmltZTIgICAgICAgICAgICBJTlRFR0VSLCAg
LS0gcQorICAgIC8vICAgICBleHBvbmVudDEgICAgICAgICBJTlRFR0VSLCAgLS0gZCBtb2QgKHAt
MSkKKyAgICAvLyAgICAgZXhwb25lbnQyICAgICAgICAgSU5URUdFUiwgIC0tIGQgbW9kIChxLTEp
CisgICAgLy8gICAgIGNvZWZmaWNpZW50ICAgICAgIElOVEVHRVIsICAtLSAoaW52ZXJzZSBvZiBx
KSBtb2QgcAorICAgIC8vICAgICBvdGhlclByaW1lSW5mb3MgICBPdGhlclByaW1lSW5mb3MgT1BU
SU9OQUwKKyAgICAvLyB9CisgICAgYXV0byByc2FQcml2YXRlS2V5VExWID0gQVNOMTo6cGFyc2VU
TFYoa2V5RGF0YSwgcHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNldCgpKTsKKyAgICBpZiAoIXJzYVBy
aXZhdGVLZXlUTFYuYnVmZmVyU2l6ZSB8fCAhcnNhUHJpdmF0ZUtleVRMVi5oYXNUYWcoQVNOMTo6
VGFnOjpTZXF1ZW5jZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNOMTo6VExW
IG1vZHVsdXNUTFY7CisgICAgQVNOMTo6VExWIHB1YmxpY0V4cG9uZW50VExWOworICAgIEFTTjE6
OlRMViBwcml2YXRlRXhwb25lbnRUTFY7CisgICAgQVNOMTo6VExWIHByaW1lMVRMVjsKKyAgICBB
U04xOjpUTFYgcHJpbWUyVExWOworICAgIEFTTjE6OlRMViBleHBvbmVudDFUTFY7CisgICAgQVNO
MTo6VExWIGV4cG9uZW50MlRMVjsKKyAgICBBU04xOjpUTFYgY29lZmZpY2llbnRUTFY7CisgICAg
eworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcnNhUHJpdmF0ZUtleVRMVi52YWx1ZU9mZnNldCgp
OworICAgICAgICBhdXRvIHZlcnNpb25UTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZz
ZXQpOworICAgICAgICBpZiAoIXZlcnNpb25UTFYuYnVmZmVyU2l6ZSB8fCAhdmVyc2lvblRMVi5o
YXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBpZiAodmVyc2lvblRMVi5sZW5ndGggIT0gMSB8fCBrZXlEYXRhW3ZlcnNpb25UTFYu
dmFsdWVPZmZzZXQoKV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIG9mZnNldCArPSB2ZXJzaW9uVExWLmJ1ZmZlclNpemU7CisgICAgICAgIG1vZHVsdXNUTFYg
PSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIW1vZHVsdXNU
TFYuYnVmZmVyU2l6ZSB8fCAhbW9kdWx1c1RMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBtb2R1bHVz
VExWLmJ1ZmZlclNpemU7CisgICAgICAgIHB1YmxpY0V4cG9uZW50VExWID0gQVNOMTo6cGFyc2VU
TFYoa2V5RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwdWJsaWNFeHBvbmVudFRMVi5idWZm
ZXJTaXplIHx8ICFwdWJsaWNFeHBvbmVudFRMVi5oYXNUYWcoQVNOMTo6VGFnOjpJbnRlZ2VyKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9mZnNldCArPSBwdWJsaWNF
eHBvbmVudFRMVi5idWZmZXJTaXplOworICAgICAgICBwcml2YXRlRXhwb25lbnRUTFYgPSBBU04x
OjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIXByaXZhdGVFeHBvbmVu
dFRMVi5idWZmZXJTaXplIHx8ICFwcml2YXRlRXhwb25lbnRUTFYuaGFzVGFnKEFTTjE6OlRhZzo6
SW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICBvZmZzZXQgKz0gcHJpdmF0ZUV4cG9uZW50VExWLmJ1ZmZlclNpemU7Cisg
ICAgICAgIHByaW1lMVRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIG9mZnNldCk7CisgICAg
ICAgIGlmICghcHJpbWUxVExWLmJ1ZmZlclNpemUgfHwgIXByaW1lMVRMVi5oYXNUYWcoQVNOMTo6
VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG9m
ZnNldCArPSBwcmltZTFUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgcHJpbWUyVExWID0gQVNOMTo6
cGFyc2VUTFYoa2V5RGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFwcmltZTJUTFYuYnVmZmVy
U2l6ZSB8fCAhcHJpbWUyVExWLmhhc1RhZyhBU04xOjpUYWc6OkludGVnZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgb2Zmc2V0ICs9IHByaW1lMlRMVi5idWZmZXJT
aXplOworICAgICAgICBleHBvbmVudDFUTFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZz
ZXQpOworICAgICAgICBpZiAoIWV4cG9uZW50MVRMVi5idWZmZXJTaXplIHx8ICFleHBvbmVudDFU
TFYuaGFzVGFnKEFTTjE6OlRhZzo6SW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBvZmZzZXQgKz0gZXhwb25lbnQxVExWLmJ1ZmZlclNpemU7CisgICAgICAg
IGV4cG9uZW50MlRMViA9IEFTTjE6OnBhcnNlVExWKGtleURhdGEsIG9mZnNldCk7CisgICAgICAg
IGlmICghZXhwb25lbnQyVExWLmJ1ZmZlclNpemUgfHwgIWV4cG9uZW50MlRMVi5oYXNUYWcoQVNO
MTo6VGFnOjpJbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IG9mZnNldCArPSBleHBvbmVudDJUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgY29lZmZpY2llbnRU
TFYgPSBBU04xOjpwYXJzZVRMVihrZXlEYXRhLCBvZmZzZXQpOworICAgICAgICBpZiAoIWNvZWZm
aWNpZW50VExWLmJ1ZmZlclNpemUgfHwgIWNvZWZmaWNpZW50VExWLmhhc1RhZyhBU04xOjpUYWc6
OkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gVE9E
Tzogc3VwcG9ydCBmb3IgT3RoZXJQcmltZUluZm9zLgorCisgICAgICAgIHNpemVfdCBidWZmZXJT
aXplU3VtID0gdmVyc2lvblRMVi5idWZmZXJTaXplICsgbW9kdWx1c1RMVi5idWZmZXJTaXplICsg
cHVibGljRXhwb25lbnRUTFYuYnVmZmVyU2l6ZSArIHByaXZhdGVFeHBvbmVudFRMVi5idWZmZXJT
aXplCisgICAgICAgICAgICArIHByaW1lMVRMVi5idWZmZXJTaXplICsgcHJpbWUyVExWLmJ1ZmZl
clNpemUgKyBleHBvbmVudDFUTFYuYnVmZmVyU2l6ZSArIGV4cG9uZW50MlRMVi5idWZmZXJTaXpl
ICsgY29lZmZpY2llbnRUTFYuYnVmZmVyU2l6ZTsKKyAgICAgICAgaWYgKGJ1ZmZlclNpemVTdW0g
IT0gcnNhUHJpdmF0ZUtleVRMVi5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdURhdGE7CisgICAgeworICAgICAgICBQQUw6
OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHBNUEk7CisgICAgICAgIGdjcnlfZXJyb3JfdCBl
cnJvciA9IGdjcnlfbXBpX3NjYW4oJnBNUEksIEdDUllNUElfRk1UX1VTRywga2V5RGF0YS5kYXRh
KCkgKyBwcmltZTFUTFYudmFsdWVPZmZzZXQoKSwgcHJpbWUxVExWLmxlbmd0aCwgbnVsbHB0cik7
CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBx
TVBJOworICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3NjYW4oJnFNUEksIEdDUllNUElfRk1UX1VT
Rywga2V5RGF0YS5kYXRhKCkgKyBwcmltZTJUTFYudmFsdWVPZmZzZXQoKSwgcHJpbWUyVExWLmxl
bmd0aCwgbnVsbHB0cik7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X21waV90PiBxaU1QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwgMCkpOworICAgICAg
ICBnY3J5X21waV9pbnZtKHFpTVBJLCBxTVBJLCBwTVBJKTsKKyAgICAgICAgdURhdGEgPSBnZXRQ
YXJhbWV0ZXJNUElEYXRhKHFpTVBJKTsKKyAgICB9CisKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxl
PGdjcnlfc2V4cF90PiBrZXlTZXhwOworICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfc2V4
cF9idWlsZCgma2V5U2V4cCwgbnVsbHB0ciwgIihwcml2YXRlLWtleShyc2EobiAlYikoZSAlYiko
ZCAlYikocCAlYikocSAlYikodSAlYikpKSIsCisgICAgICAgIG1vZHVsdXNUTFYubGVuZ3RoLCBr
ZXlEYXRhLmRhdGEoKSArIG1vZHVsdXNUTFYudmFsdWVPZmZzZXQoKSwKKyAgICAgICAgcHVibGlj
RXhwb25lbnRUTFYubGVuZ3RoLCBrZXlEYXRhLmRhdGEoKSArIHB1YmxpY0V4cG9uZW50VExWLnZh
bHVlT2Zmc2V0KCksCisgICAgICAgIHByaXZhdGVFeHBvbmVudFRMVi5sZW5ndGgsIGtleURhdGEu
ZGF0YSgpICsgcHJpdmF0ZUV4cG9uZW50VExWLnZhbHVlT2Zmc2V0KCksCisgICAgICAgIHByaW1l
MlRMVi5sZW5ndGgsIGtleURhdGEuZGF0YSgpICsgcHJpbWUyVExWLnZhbHVlT2Zmc2V0KCksCisg
ICAgICAgIHByaW1lMVRMVi5sZW5ndGgsIGtleURhdGEuZGF0YSgpICsgcHJpbWUxVExWLnZhbHVl
T2Zmc2V0KCksCisgICAgICAgIHVEYXRhLnNpemUoKSwgdURhdGEuZGF0YSgpKTsKKyAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJy
b3IoZXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENyeXB0b0tleVJTQShpZGVudGlmaWVyLCBoYXNoLnZhbHVlX29yKENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xKSwgISFoYXNoLCBDcnlwdG9LZXlUeXBlOjpQcml2
YXRlLCBrZXlTZXhwLnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCiBFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0U3BraSgpIGNvbnN0
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAodHlwZSgpICE9IENyeXB0b0tleVR5
cGU6OlB1YmxpYykKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgSU5WQUxJRF9BQ0NFU1NfRVJS
IH07CisKKyAgICBhdXRvIGFwcGVuZExlbmd0aCA9CisgICAgICAgIFtdKHNpemVfdCBsZW5ndGgs
IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gMTI3
KSB7CisgICAgICAgICAgICAgICAgdWludDhfdCBsZW5ndGhCeXRlcyA9IHN0ZDo6Y2VpbChzdGQ6
OmxvZzIobGVuZ3RoICsgMSkgLyA4KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDB4
ODAgfCBsZW5ndGhCeXRlcyk7CisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBp
IDwgbGVuZ3RoQnl0ZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgo
bGVuZ3RoID4+ICgobGVuZ3RoQnl0ZXMgLSBpIC0gMSkgKiA4KSAmIDB4ZmYpKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGVuZ3RoKTsKKyAgICAg
ICAgfTsKKworICAgIC8vIFN1YmplY3RQdWJsaWNLZXlJbmZvICA6Oj0gIFNFUVVFTkNFICB7Cisg
ICAgLy8gICBhbGdvcml0aG0gICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgIC8v
ICAgc3ViamVjdFB1YmxpY0tleSAgICAgQklUIFNUUklORyAgfQorCisKKyAgICAvLyBBbGdvcml0
aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgICAgLy8gICAgYWxnb3JpdGhtICAgT0JK
RUNUIElERU5USUZJRVIsCisgICAgLy8gICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxn
b3JpdGhtIE9QVElPTkFMCisgICAgLy8gfQorICAgIFZlY3Rvcjx1aW50OF90PiBhbGdvcml0aG1J
ZGVudGlmaWVyRGF0YTsKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDk+IHNfcnNhRW5jcnlwdGlvbnsgeyAweDJhLCAweDg2LCAweDQ4LCAweDg2LCAweGY3
LCAweDBkLCAweDAxLCAweDAxLCAweDAxIH0gfTsKKworICAgICAgICBhbGdvcml0aG1JZGVudGlm
aWVyRGF0YS5hcHBlbmQoMHgzMCk7CisgICAgICAgIGFsZ29yaXRobUlkZW50aWZpZXJEYXRhLmFw
cGVuZCgyICsgc19yc2FFbmNyeXB0aW9uLnNpemUoKSArIDIpOwogCi0gICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIC8vIGFsZ29yaXRobQorICAgICAg
ICBhbGdvcml0aG1JZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgwNik7CisgICAgICAgIGFsZ29yaXRo
bUlkZW50aWZpZXJEYXRhLmFwcGVuZChzX3JzYUVuY3J5cHRpb24uc2l6ZSgpKTsKKyAgICAgICAg
YWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKHNfcnNhRW5jcnlwdGlvbi5kYXRhKCksIHNf
cnNhRW5jcnlwdGlvbi5zaXplKCkpOworCisgICAgICAgIC8vIHBhcmFtZXRlcnMKKyAgICAgICAg
YWxnb3JpdGhtSWRlbnRpZmllckRhdGEuYXBwZW5kKDB4MDUpOworICAgICAgICBhbGdvcml0aG1J
ZGVudGlmaWVyRGF0YS5hcHBlbmQoMHgwMCk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHN1YmplY3RQdWJsaWNLZXlEYXRhOworICAgIHsKKyAgICAgICAgLy8gUlNBUHVibGljS2V5IDo6
PSBTRVFVRU5DRSB7CisgICAgICAgIC8vICAgbW9kdWx1cyAgICAgICAgICAgSU5URUdFUiwgIC0t
IG4KKyAgICAgICAgLy8gICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSICAgLS0gZQorICAgICAg
ICAvLyB9CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByc2FQdWJsaWNLZXlEYXRhOworICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIHBhcmFtZXRlckRhdGEgPQorICAgICAgICAgICAgICAgIFsm
YXBwZW5kTGVuZ3RoXShnY3J5X3NleHBfdCBzZXhwLCBjb25zdCBjaGFyKiBuYW1lKSAtPiBWZWN0
b3I8dWludDhfdD4geworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gcGFyYW1l
dGVyID0gZ2V0UlNBS2V5UGFyYW1ldGVyKHNleHAsIG5hbWUpOworICAgICAgICAgICAgICAgICAg
ICBib29sIG5lZ2F0aXZlID0gcGFyYW1ldGVyWzBdICYgMHg4MDsKKworICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBl
bmQoMHgwMik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZExlbmd0aChwYXJhbWV0ZXIuc2l6
ZSgpICsgKG5lZ2F0aXZlID8gMSA6IDApLCBkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoMHgwMCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kVmVjdG9yKHBhcmFtZXRlcik7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIGF1dG8gbkRhdGEgPSBwYXJhbWV0ZXJEYXRhKG1fcGxhdGZvcm1LZXksICJuIik7CisgICAg
ICAgICAgICBhdXRvIGVEYXRhID0gcGFyYW1ldGVyRGF0YShtX3BsYXRmb3JtS2V5LCAiZSIpOwor
CisgICAgICAgICAgICByc2FQdWJsaWNLZXlEYXRhLmFwcGVuZCgweDMwKTsKKyAgICAgICAgICAg
IGFwcGVuZExlbmd0aChuRGF0YS5zaXplKCkgKyBlRGF0YS5zaXplKCksIHJzYVB1YmxpY0tleURh
dGEpOworCisgICAgICAgICAgICAvLyBtb2R1bHVzCisgICAgICAgICAgICByc2FQdWJsaWNLZXlE
YXRhLmFwcGVuZFZlY3RvcihuRGF0YSk7CisgICAgICAgICAgICAvLyBwdWJsaWNFeHBvbmVudAor
ICAgICAgICAgICAgcnNhUHVibGljS2V5RGF0YS5hcHBlbmRWZWN0b3IoZURhdGEpOworICAgICAg
ICB9CisKKyAgICAgICAgc3ViamVjdFB1YmxpY0tleURhdGEuYXBwZW5kKDB4MDMpOworICAgICAg
ICBhcHBlbmRMZW5ndGgoMSArIHJzYVB1YmxpY0tleURhdGEuc2l6ZSgpLCBzdWJqZWN0UHVibGlj
S2V5RGF0YSk7CisgICAgICAgIHN1YmplY3RQdWJsaWNLZXlEYXRhLmFwcGVuZCgweDAwKTsKKyAg
ICAgICAgc3ViamVjdFB1YmxpY0tleURhdGEuYXBwZW5kVmVjdG9yKHJzYVB1YmxpY0tleURhdGEp
OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVu
ZCgweDMwKTsKKyAgICBhcHBlbmRMZW5ndGgoYWxnb3JpdGhtSWRlbnRpZmllckRhdGEuc2l6ZSgp
ICsgc3ViamVjdFB1YmxpY0tleURhdGEuc2l6ZSgpLCByZXN1bHQpOworICAgIHJlc3VsdC5hcHBl
bmRWZWN0b3IoYWxnb3JpdGhtSWRlbnRpZmllckRhdGEpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0
b3Ioc3ViamVjdFB1YmxpY0tleURhdGEpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsK
IH0KIAogRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlSU0E6OmV4cG9ydFBr
Y3M4KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICh0eXBlKCkgIT0g
Q3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgSU5WQUxJ
RF9BQ0NFU1NfRVJSIH07CisKKyAgICBhdXRvIGFwcGVuZExlbmd0aCA9CisgICAgICAgIFtdKHNp
emVfdCBsZW5ndGgsIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAo
bGVuZ3RoID4gMTI3KSB7CisgICAgICAgICAgICAgICAgdWludDhfdCBsZW5ndGhCeXRlcyA9IHN0
ZDo6Y2VpbChzdGQ6OmxvZzIobGVuZ3RoICsgMSkgLyA4KTsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKDB4ODAgfCBsZW5ndGhCeXRlcyk7CisgICAgICAgICAgICAgICAgZm9yICh1aW50
OF90IGkgPSAwOyBpIDwgbGVuZ3RoQnl0ZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgobGVuZ3RoID4+ICgobGVuZ3RoQnl0ZXMgLSBpIC0gMSkgKiA4KSAmIDB4ZmYp
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGVu
Z3RoKTsKKyAgICAgICAgfTsKKworICAgIC8vIFByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5DRSB7
CisgICAgLy8gICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgIFZlcnNpb24sCisgICAgLy8gICBw
cml2YXRlS2V5QWxnb3JpdGhtICAgICAgIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyLAor
ICAgIC8vICAgcHJpdmF0ZUtleSAgICAgICAgICAgICAgICBQcml2YXRlS2V5LAorICAgIC8vICAg
YXR0cmlidXRlcyAgICAgICAgICAgWzBdICBJTVBMSUNJVCBBdHRyaWJ1dGVzIE9QVElPTkFMIH0K
KworICAgIC8vIFZlcnNpb24gOjo9IElOVEVHRVIKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJh
eTx1aW50OF90LCAzPiBzX3ZlcnNpb25EYXRheyB7IDB4MDIsIDB4MDEsIDB4MDAgfSB9OworCisK
KyAgICAvLyBQcml2YXRlS2V5QWxnb3JpdGhtSWRlbnRpZmllciA6Oj0gQWxnb3JpdGhtSWRlbnRp
ZmllcgorICAgIC8vIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAv
LyAgICBhbGdvcml0aG0gICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICAvLyAgICBwYXJhbWV0ZXJz
ICBBTlkgREVGSU5FRCBCWSBhbGdvcml0aG0gT1BUSU9OQUwKKyAgICAvLyB9CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHByaXZhdGVLZXlBbGdvcml0aG1EYXRhOworICAgIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgOT4gc19yc2FFbmNyeXB0aW9ueyB7IDB4MmEsIDB4
ODYsIDB4NDgsIDB4ODYsIDB4ZjcsIDB4MGQsIDB4MDEsIDB4MDEsIDB4MDEgfSB9OworCisgICAg
ICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFwcGVuZCgweDMwKTsKKyAgICAgICAgcHJpdmF0
ZUtleUFsZ29yaXRobURhdGEuYXBwZW5kKDIgKyBzX3JzYUVuY3J5cHRpb24uc2l6ZSgpICsgMik7
CisKKyAgICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobURhdGEuYXBwZW5kKDB4MDYpOworICAgICAg
ICBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5hcHBlbmQoc19yc2FFbmNyeXB0aW9uLnNpemUoKSk7
CisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRhLmFwcGVuZChzX3JzYUVuY3J5cHRpb24u
ZGF0YSgpLCBzX3JzYUVuY3J5cHRpb24uc2l6ZSgpKTsKKworICAgICAgICBwcml2YXRlS2V5QWxn
b3JpdGhtRGF0YS5hcHBlbmQoMHgwNSk7CisgICAgICAgIHByaXZhdGVLZXlBbGdvcml0aG1EYXRh
LmFwcGVuZCgweDAwKTsKKyAgICB9CisKKyAgICAvLyBQcml2YXRlS2V5IDo6PSBPQ1RFVCBTVFJJ
TkcKKyAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUtleURhdGE7CisgICAgeworICAgICAgICAv
LyBSU0FQcml2YXRlS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgICAgIC8vICAgICB2ZXJzaW9uICAg
ICAgICAgICBWZXJzaW9uLAorICAgICAgICAvLyAgICAgbW9kdWx1cyAgICAgICAgICAgSU5URUdF
UiwgIC0tIG4KKyAgICAgICAgLy8gICAgIHB1YmxpY0V4cG9uZW50ICAgIElOVEVHRVIsICAtLSBl
CisgICAgICAgIC8vICAgICBwcml2YXRlRXhwb25lbnQgICBJTlRFR0VSLCAgLS0gZAorICAgICAg
ICAvLyAgICAgcHJpbWUxICAgICAgICAgICAgSU5URUdFUiwgIC0tIHAKKyAgICAgICAgLy8gICAg
IHByaW1lMiAgICAgICAgICAgIElOVEVHRVIsICAtLSBxCisgICAgICAgIC8vICAgICBleHBvbmVu
dDEgICAgICAgICBJTlRFR0VSLCAgLS0gZCBtb2QgKHAtMSkKKyAgICAgICAgLy8gICAgIGV4cG9u
ZW50MiAgICAgICAgIElOVEVHRVIsICAtLSBkIG1vZCAocS0xKQorICAgICAgICAvLyAgICAgY29l
ZmZpY2llbnQgICAgICAgSU5URUdFUiwgIC0tIChpbnZlcnNlIG9mIHEpIG1vZCBwCisgICAgICAg
IC8vICAgICBvdGhlclByaW1lSW5mb3MgICBPdGhlclByaW1lSW5mb3MgT1BUSU9OQUwKKyAgICAg
ICAgLy8gfQorICAgICAgICBWZWN0b3I8dWludDhfdD4gcnNhUHJpdmF0ZUtleURhdGE7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVyRGF0YSA9CisgICAgICAgICAgICAgICAg
WyZhcHBlbmRMZW5ndGhdKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNoYXIqIG5hbWUpIC0+IFZl
Y3Rvcjx1aW50OF90PiB7CisgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBwYXJh
bWV0ZXIgPSBnZXRSU0FLZXlQYXJhbWV0ZXIoc2V4cCwgbmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgbmVnYXRpdmUgPSBwYXJhbWV0ZXJbMF0gJiAweDgwOworCisgICAgICAgICAgICAg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgICAgICAgICAgICAgICAgICBkYXRhLmFw
cGVuZCgweDAyKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kTGVuZ3RoKHBhcmFtZXRlci5z
aXplKCkgKyAobmVnYXRpdmUgPyAxIDogMCksIGRhdGEpOworICAgICAgICAgICAgICAgICAgICBp
ZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgweDAwKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmRWZWN0b3IocGFyYW1ldGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgYXV0byBuRGF0YSA9IHBhcmFtZXRlckRhdGEobV9wbGF0Zm9ybUtleSwgIm4iKTsKKyAg
ICAgICAgICAgIGF1dG8gZURhdGEgPSBwYXJhbWV0ZXJEYXRhKG1fcGxhdGZvcm1LZXksICJlIik7
CisgICAgICAgICAgICBhdXRvIGREYXRhID0gcGFyYW1ldGVyRGF0YShtX3BsYXRmb3JtS2V5LCAi
ZCIpOworICAgICAgICAgICAgYXV0byBwRGF0YSA9IHBhcmFtZXRlckRhdGEobV9wbGF0Zm9ybUtl
eSwgInEiKTsKKyAgICAgICAgICAgIGF1dG8gcURhdGEgPSBwYXJhbWV0ZXJEYXRhKG1fcGxhdGZv
cm1LZXksICJwIik7CisKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkcERhdGE7CisgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4gZHFEYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHFpRGF0YTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGdldE1QSSA9
CisgICAgICAgICAgICAgICAgICAgIFtdKGdjcnlfc2V4cF90IHNleHAsIGNvbnN0IGNoYXIqIG5h
bWUpIC0+IGdjcnlfbXBpX3QgeworICAgICAgICAgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6
OkhhbmRsZTxnY3J5X3NleHBfdD4gcGFyYW1TZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKHNleHAs
IG5hbWUsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1TZXhwKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdjcnlfc2V4cF9udGhfbXBpKHBhcmFtU2V4cCwgMSwgR0NSWU1QSV9G
TVRfVVNHKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8g
ZXh0cmFjdERhdGEgPQorICAgICAgICAgICAgICAgICAgICBbXShnY3J5X21waV90IHBhcmFtTVBJ
KSAtPiBWZWN0b3I8dWludDhfdD4geworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRh
dGFMZW5ndGggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9y
ID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBudWxscHRyLCAwLCAmZGF0YUxlbmd0
aCwgcGFyYW1NUEkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19F
UlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1Q
SV9GTVRfVVNHLCBvdXRwdXQuZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBudWxscHRyLCBwYXJhbU1Q
SSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJP
UikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihl
cnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1
dDsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0
OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZE1QSShnZXRNUEkobV9wbGF0Zm9ybUtleSwgImQiKSk7Cisg
ICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBwTVBJKGdldE1Q
SShtX3BsYXRmb3JtS2V5LCAicSIpKTsKKyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFu
ZGxlPGdjcnlfbXBpX3Q+IHFNUEkoZ2V0TVBJKG1fcGxhdGZvcm1LZXksICJwIikpOworCisgICAg
ICAgICAgICAgICAgLy8gZHAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZHBNUEkoZ2NyeV9tcGlfc2V0X3VpKG51
bGxwdHIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5
X21waV90PiBwbTFNUEkoZ2NyeV9tcGlfc2V0KG51bGxwdHIsIHBNUEkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ2NyeV9tcGlfc3ViX3VpKHBtMU1QSSwgcG0xTVBJLCAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ2NyeV9tcGlfbW9kKGRwTVBJLCBkTVBJLCBwbTFNUEkpOworCisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gZHAgPSBleHRyYWN0RGF0YShkcE1QSSk7CisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgbmVnYXRpdmUgPSBkcFswXSAmIDB4ODA7CisKKyAgICAgICAgICAgICAgICAgICAg
ZHBEYXRhLmFwcGVuZCgweDAyKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kTGVuZ3RoKGRw
LnNpemUoKSArIChuZWdhdGl2ZSA/IDEgOiAwKSwgZHBEYXRhKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgZHBEYXRhLmFwcGVuZCgw
eDAwKTsKKyAgICAgICAgICAgICAgICAgICAgZHBEYXRhLmFwcGVuZFZlY3RvcihkcCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZHEKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZHFN
UEkoZ2NyeV9tcGlfc2V0X3VpKG51bGxwdHIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgUEFM
OjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBxbTFNUEkoZ2NyeV9tcGlfc2V0KG51bGxwdHIs
IHFNUEkpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfc3ViX3VpKHFtMU1QSSwgcW0x
TVBJLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfbW9kKGRxTVBJLCBkTVBJLCBx
bTFNUEkpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZHEgPSBleHRyYWN0RGF0YShkcU1Q
SSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBkcVswXSAmIDB4ODA7CisK
KyAgICAgICAgICAgICAgICAgICAgZHFEYXRhLmFwcGVuZCgweDAyKTsKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kTGVuZ3RoKGRxLnNpemUoKSArIChuZWdhdGl2ZSA/IDEgOiAwKSwgZHFEYXRh
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZHFEYXRhLmFwcGVuZCgweDAwKTsKKyAgICAgICAgICAgICAgICAgICAgZHFEYXRhLmFw
cGVuZFZlY3RvcihkcSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
cWkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpI
YW5kbGU8Z2NyeV9tcGlfdD4gcWlNUEkoZ2NyeV9tcGlfc2V0X3VpKG51bGxwdHIsIDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgZ2NyeV9tcGlfaW52bShxaU1QSSwgcU1QSSwgcE1QSSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBxaSA9IGV4dHJhY3REYXRhKHFpTVBJKTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IHFpWzBdICYgMHg4MDsKKworICAgICAgICAgICAg
ICAgICAgICBxaURhdGEuYXBwZW5kKDB4MDIpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRM
ZW5ndGgocWkuc2l6ZSgpICsgKG5lZ2F0aXZlID8gMSA6IDApLCBxaURhdGEpOworICAgICAgICAg
ICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICBxaURhdGEu
YXBwZW5kKDB4MDApOworICAgICAgICAgICAgICAgICAgICBxaURhdGEuYXBwZW5kVmVjdG9yKHFp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJzYVBy
aXZhdGVLZXlEYXRhLmFwcGVuZCgweDMwKTsKKyAgICAgICAgICAgIGFwcGVuZExlbmd0aCgzICsg
bkRhdGEuc2l6ZSgpICsgZURhdGEuc2l6ZSgpICsgZERhdGEuc2l6ZSgpICsgcERhdGEuc2l6ZSgp
ICsgcURhdGEuc2l6ZSgpCisgICAgICAgICAgICAgICAgKyBkcERhdGEuc2l6ZSgpICsgZHFEYXRh
LnNpemUoKSArIHFpRGF0YS5zaXplKCksIHJzYVByaXZhdGVLZXlEYXRhKTsKKworICAgICAgICAg
ICAgLy8gdmVyc2lvbgorICAgICAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4MDIp
OworICAgICAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEuYXBwZW5kKDEpOworICAgICAgICAgICAg
cnNhUHJpdmF0ZUtleURhdGEuYXBwZW5kKDB4MDApOworCisgICAgICAgICAgICAvLyBtb2R1bHVz
CisgICAgICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IobkRhdGEpOworICAg
ICAgICAgICAgLy8gcHVibGljRXhwb25lbnQKKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRh
LmFwcGVuZFZlY3RvcihlRGF0YSk7CisgICAgICAgICAgICAvLyBwcml2YXRlRXhwb25lbnQKKyAg
ICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3RvcihkRGF0YSk7CisgICAgICAg
ICAgICAvLyBwcmltZTEKKyAgICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3Rv
cihwRGF0YSk7CisgICAgICAgICAgICAvLyBwcmltZTIKKyAgICAgICAgICAgIHJzYVByaXZhdGVL
ZXlEYXRhLmFwcGVuZFZlY3RvcihxRGF0YSk7CisgICAgICAgICAgICAvLyBleHBvbmVudDEKKyAg
ICAgICAgICAgIHJzYVByaXZhdGVLZXlEYXRhLmFwcGVuZFZlY3RvcihkcERhdGEpOworICAgICAg
ICAgICAgLy8gZXhwb25lbnQyCisgICAgICAgICAgICByc2FQcml2YXRlS2V5RGF0YS5hcHBlbmRW
ZWN0b3IoZHFEYXRhKTsKKyAgICAgICAgICAgIC8vIGNvZWZmaWNpZW50CisgICAgICAgICAgICBy
c2FQcml2YXRlS2V5RGF0YS5hcHBlbmRWZWN0b3IocWlEYXRhKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHByaXZhdGVLZXlEYXRhLmFwcGVuZCgweDA0KTsKKyAgICAgICAgYXBwZW5kTGVuZ3RoKHJz
YVByaXZhdGVLZXlEYXRhLnNpemUoKSwgcHJpdmF0ZUtleURhdGEpOworICAgICAgICBwcml2YXRl
S2V5RGF0YS5hcHBlbmRWZWN0b3IocnNhUHJpdmF0ZUtleURhdGEpOworICAgIH0KKworICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgweDMwKTsKKyAgICBhcHBl
bmRMZW5ndGgoc192ZXJzaW9uRGF0YS5zaXplKCkgKyBwcml2YXRlS2V5QWxnb3JpdGhtRGF0YS5z
aXplKCkgKyBwcml2YXRlS2V5RGF0YS5zaXplKCksIHJlc3VsdCk7CisgICAgcmVzdWx0LmFwcGVu
ZChzX3ZlcnNpb25EYXRhLmRhdGEoKSwgc192ZXJzaW9uRGF0YS5zaXplKCkpOworICAgIHJlc3Vs
dC5hcHBlbmRWZWN0b3IocHJpdmF0ZUtleUFsZ29yaXRobURhdGEpOworICAgIHJlc3VsdC5hcHBl
bmRWZWN0b3IocHJpdmF0ZUtleURhdGEpOwogCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9T
VVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogc3RkOjp1
bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2Vy
aWFsaXplZENyeXB0b0tleVdyYXBHQ3J5cHQuY3BwCmluZGV4IDk0OTk4OWY5NGUxLi40ZTJkNDU0
NzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVk
Q3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlw
dC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAKQEAgLTI5LDM1ICsyOSwxNTIgQEAK
ICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CisjaW5jbHVkZSA8cGFsL2Ny
eXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNVdGls
aXRpZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGdldERlZmF1bHRXZWJDcnlw
dG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JiBtYXN0ZXJLZXkpCitib29sIGdldERlZmF1bHRX
ZWJDcnlwdG9NYXN0ZXJLZXkoVmVjdG9yPHVpbnQ4X3Q+JikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIFVOVVNFRF9QQVJBTShtYXN0ZXJLZXkpOwotCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCiBib29sIHdyYXBTZXJpYWxpemVkQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
bWFzdGVyS2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiBy
ZXN1bHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBVTlVTRURfUEFSQU0obWFzdGVy
S2V5KTsKLSAgICBVTlVTRURfUEFSQU0oa2V5KTsKLSAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsK
KyAgICBWZWN0b3I8dWludDhfdD4ga2VrKDE2KTsKKyAgICBnY3J5X3JhbmRvbWl6ZShrZWsuZGF0
YSgpLCBrZWsuc2l6ZSgpLCBHQ1JZX1ZFUllfU1RST05HX1JBTkRPTSk7CiAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLRUsoMjQpOworICAgIHsKKyAgICAg
ICAgYXV0byBhbGdvcml0aG0gPSBQQUw6OkdDcnlwdDo6YWVzQWxnb3JpdGhtRm9yS2V5U2l6ZSht
YXN0ZXJLZXkuc2l6ZSgpICogOCk7CisgICAgICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBo
ZXJfaGRfdD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhl
cl9vcGVuKCZoYW5kbGUsICphbGdvcml0aG0sIEdDUllfQ0lQSEVSX01PREVfQUVTV1JBUCwgMCk7
CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRsZSwg
bWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVyS2V5LnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAh
PSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGVycm9yID0gZ2NyeV9jaXBoZXJfZW5jcnlwdChoYW5kbGUsIHdyYXBwZWRLRUsuZGF0YSgpLCB3
cmFwcGVkS0VLLnNpemUoKSwga2VrLmRhdGEoKSwga2VrLnNpemUoKSk7CisgICAgICAgIGlmIChl
cnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNyeXB0ZWRLZXkoa2V5LnNpemUoKSk7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRhZygxNik7CisgICAgeworICAgICAgICBQQUw6OkdDcnlwdDo6SGFu
ZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9y
ID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQ
SEVSX01PREVfR0NNLCAwKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhl
cl9zZXRrZXkoaGFuZGxlLCBrZWsuZGF0YSgpLCBrZWsuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9lbmNyeXB0KGhhbmRsZSwgZW5jcnlwdGVkS2V5LmRh
dGEoKSwgZW5jcnlwdGVkS2V5LnNpemUoKSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAg
ICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZ2V0dGFnKGhhbmRsZSwgdGFnLmRh
dGEoKSwgdGFnLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9S
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIG1hZ2ljWzNdICsg
dmVyc2lvblsxXSArIHdyYXBwZWRLRUtbMjRdICsgZW5jcnlwdGVkS2V5W2xlbmd0aChrZXkpXSAr
IHRhZ1sxNl0gKyBtYWdpY1szXQorICAgIHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoID0gMyArIDEg
KyAyNCArIGVuY3J5cHRlZEtleS5zaXplKCkgKyAxNiArIDM7CisgICAgcmVzdWx0LnJlc2l6ZShz
ZXJpYWxpemVkTGVuZ3RoKTsKKyAgICByZXN1bHRbMF0gPSAweDA0OworICAgIHJlc3VsdFsxXSA9
IDB4MDg7CisgICAgcmVzdWx0WzJdID0gMHgxNTsKKyAgICByZXN1bHRbM10gPSAweDAxOworICAg
IHN0ZDo6bWVtY3B5KHJlc3VsdC5kYXRhKCkgKyA0LCB3cmFwcGVkS0VLLmRhdGEoKSwgMjQpOwor
ICAgIHN0ZDo6bWVtY3B5KHJlc3VsdC5kYXRhKCkgKyAyOCwgZW5jcnlwdGVkS2V5LmRhdGEoKSwg
ZW5jcnlwdGVkS2V5LnNpemUoKSk7CisgICAgc3RkOjptZW1jcHkocmVzdWx0LmRhdGEoKSArIDI4
ICsgZW5jcnlwdGVkS2V5LnNpemUoKSwgdGFnLmRhdGEoKSwgMTYpOworICAgIHJlc3VsdFtzZXJp
YWxpemVkTGVuZ3RoIC0gM10gPSAweDE2OworICAgIHJlc3VsdFtzZXJpYWxpemVkTGVuZ3RoIC0g
Ml0gPSAweDIzOworICAgIHJlc3VsdFtzZXJpYWxpemVkTGVuZ3RoIC0gMV0gPSAweDQyOworCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShjb25z
dCBWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFw
cGVkS2V5LCBWZWN0b3I8dWludDhfdD4mIGtleSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIFVOVVNFRF9QQVJBTShtYXN0ZXJLZXkpOwotICAgIFVOVVNFRF9QQVJBTSh3cmFwcGVkS2V5
KTsKLSAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICAvLyBtYWdpY1szXSArIHZlcnNpb25bMV0g
KyB3cmFwcGVkS0VLWzI0XSArIGVuY3J5cHRlZEtleVtsZW5ndGgoa2V5KV0gKyB0YWdbMTZdICsg
bWFnaWNbM10KKyAgICBzaXplX3Qgc2VyaWFsaXplZExlbmd0aCA9IHdyYXBwZWRLZXkuc2l6ZSgp
OworICAgIGlmIChzZXJpYWxpemVkTGVuZ3RoIDwgMyArIDEgKyAyNCArIDE2ICsgMykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHVpbnQ4X3QgbWFnaWMx
WzNdID0geyAweDA0LCAweDA4LCAweDE1IH07CisgICAgaWYgKHN0ZDo6bWVtY21wKHdyYXBwZWRL
ZXkuZGF0YSgpLCBtYWdpYzEsIDMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDhf
dCBtYWdpYzJbM10gPSB7IDB4MTYsIDB4MjMsIDB4NDIgfTsKKyAgICBpZiAoc3RkOjptZW1jbXAo
d3JhcHBlZEtleS5kYXRhKCkgKyBzZXJpYWxpemVkTGVuZ3RoIC0gMywgbWFnaWMyLCAzKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh3cmFwcGVkS2V5WzNdICE9IDB4MDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB3cmFwcGVkS0VLKDI0KTsK
KyAgICBzdGQ6Om1lbWNweSh3cmFwcGVkS0VLLmRhdGEoKSwgd3JhcHBlZEtleS5kYXRhKCkgKyA0
LCAyNCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jcnlwdGVkS2V5KHNlcmlhbGl6ZWRMZW5n
dGggLSAzIC0gMSAtIDI0IC0gMTYgLSAzKTsKKyAgICBzdGQ6Om1lbWNweShlbmNyeXB0ZWRLZXku
ZGF0YSgpLCB3cmFwcGVkS2V5LmRhdGEoKSArIDI4LCBlbmNyeXB0ZWRLZXkuc2l6ZSgpKTsKKwor
ICAgIFZlY3Rvcjx1aW50OF90PiB0YWcoMTYpOworICAgIHN0ZDo6bWVtY3B5KHRhZy5kYXRhKCks
IHdyYXBwZWRLZXkuZGF0YSgpICsgMjggKyBlbmNyeXB0ZWRLZXkuc2l6ZSgpLCAxNik7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4ga2VrKDE2KTsKKyAgICB7CisgICAgICAgIGF1dG8gYWxnb3JpdGht
ID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUobWFzdGVyS2V5LnNpemUoKSAq
IDgpOworICAgICAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsK
KyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCAq
YWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0FFU1dSQVAsIDApOworICAgICAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShoYW5kbGUsIG1hc3RlcktleS5kYXRhKCks
IG1hc3RlcktleS5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJP
UikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9IGdjcnlfY2lw
aGVyX2RlY3J5cHQoaGFuZGxlLCBrZWsuZGF0YSgpLCBrZWsuc2l6ZSgpLCB3cmFwcGVkS0VLLmRh
dGEoKSwgd3JhcHBlZEtFSy5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBWZWN0b3I8
dWludDhfdD4gZGVjcnlwdGVkS2V5KGVuY3J5cHRlZEtleS5zaXplKCkpOworICAgIFZlY3Rvcjx1
aW50OF90PiBhY3R1YWxUYWcoMTYpOworICAgIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9
IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhF
Ul9NT0RFX0dDTSwgMCk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJf
c2V0a2V5KGhhbmRsZSwga2VrLmRhdGEoKSwga2VrLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJv
ciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChoYW5kbGUsIGRlY3J5cHRlZEtleS5kYXRh
KCksIGRlY3J5cHRlZEtleS5zaXplKCksIGVuY3J5cHRlZEtleS5kYXRhKCksIGVuY3J5cHRlZEtl
eS5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2dldHRh
ZyhoYW5kbGUsIGFjdHVhbFRhZy5kYXRhKCksYWN0dWFsVGFnLnNpemUoKSk7CisgICAgICAgIGlm
IChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChjb25zdGFudFRpbWVNZW1jbXAodGFnLmRhdGEoKSwgYWN0dWFsVGFn
LmRhdGEoKSwgMTYpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBrZXkgPSBXVEZNb3Zl
KGRlY3J5cHRlZEtleSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312638</attachid>
            <date>2017-06-12 00:35:09 -0700</date>
            <delta_ts>2017-07-03 01:59:18 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>webcrypto.patch</filename>
            <type>text/plain</type>
            <size>76854</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDc3NWMxODk4NGFl
Li5hZmE1YTlhMDU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9QbGF0Zm9y
bUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xLDMgKzEsNSBAQAogbGlzdChBUFBFTkQgUEFMX1NPVVJDRVMKICAgICBjcnlwdG8vZ2Ny
eXB0L0NyeXB0b0RpZ2VzdEdDcnlwdC5jcHAKKworICAgIGNyeXB0by90YXNuMS9VdGlsaXRpZXMu
Y3BwCiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtV1BFLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCA3NzVj
MTg5ODRhZS4uYWZhNWE5YTA1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
UGxhdGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9QbGF0Zm9ybVdQ
RS5jbWFrZQpAQCAtMSwzICsxLDUgQEAKIGxpc3QoQVBQRU5EIFBBTF9TT1VSQ0VTCiAgICAgY3J5
cHRvL2djcnlwdC9DcnlwdG9EaWdlc3RHQ3J5cHQuY3BwCisKKyAgICBjcnlwdG8vdGFzbjEvVXRp
bGl0aWVzLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8v
dGFzbjEvVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL3Rhc24x
L1V0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVi
YTQxM2I2NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlw
dG8vdGFzbjEvVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJV
dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPG11dGV4PgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBUQVNOMSB7CisKK2FzbjFfbm9kZSBhc24xRGVmaW5pdGlvbnMoKQoreworICAgIC8vIEdl
bmVyYXRlZCB3aXRoIGBhc24xUGFyc2VyIFdlYkNyeXB0by5hc25gLgorCisgICAgc3RhdGljIGFz
bjFfbm9kZSBzX2RlZmluaXRpb25zOworICAgIHN0YXRpYyBjb25zdCBhc24xX3N0YXRpY19ub2Rl
IHNfV2ViQ3J5cHRvQVNOMVtdID0geworICAgICAgeyAiV2ViQ3J5cHRvIiwgNTM2ODcyOTc2LCBO
VUxMIH0sCisgICAgICB7IE5VTEwsIDEwNzM3NDE4MzYsIE5VTEwgfSwKKyAgICAgIHsgIlN1Ympl
Y3RQdWJsaWNLZXlJbmZvIiwgMTYxMDYxMjc0MSwgTlVMTCB9LAorICAgICAgeyAiYWxnb3JpdGht
IiwgMTA3Mzc0MTgyNiwgIkFsZ29yaXRobUlkZW50aWZpZXIifSwKKyAgICAgIHsgInN1YmplY3RQ
dWJsaWNLZXkiLCA2LCBOVUxMIH0sCisgICAgICB7ICJQcml2YXRlS2V5SW5mbyIsIDE2MTA2MTI3
NDEsIE5VTEwgfSwKKyAgICAgIHsgInZlcnNpb24iLCAxMDczNzQxODI2LCAiVmVyc2lvbiJ9LAor
ICAgICAgeyAicHJpdmF0ZUtleUFsZ29yaXRobSIsIDEwNzM3NDE4MjYsICJQcml2YXRlS2V5QWxn
b3JpdGhtSWRlbnRpZmllciJ9LAorICAgICAgeyAicHJpdmF0ZUtleSIsIDEwNzM3NDE4MjYsICJQ
cml2YXRlS2V5In0sCisgICAgICB7ICJhdHRyaWJ1dGVzIiwgNTM2ODk1NDkwLCAiQXR0cmlidXRl
cyJ9LAorICAgICAgeyBOVUxMLCA0MTA0LCAiMCJ9LAorICAgICAgeyAiVmVyc2lvbiIsIDEwNzM3
NDE4MjcsIE5VTEwgfSwKKyAgICAgIHsgIlByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyIiwg
MTA3Mzc0MTgyNiwgIkFsZ29yaXRobUlkZW50aWZpZXIifSwKKyAgICAgIHsgIlByaXZhdGVLZXki
LCAxMDczNzQxODMxLCBOVUxMIH0sCisgICAgICB7ICJBdHRyaWJ1dGVzIiwgMTYxMDYxMjc1MSwg
TlVMTCB9LAorICAgICAgeyBOVUxMLCAyLCAiQXR0cmlidXRlIn0sCisgICAgICB7ICJBdHRyaWJ1
dGUiLCAxNjEwNjEyNzQxLCBOVUxMIH0sCisgICAgICB7ICJ0eXBlIiwgMTA3Mzc0MTgzNiwgTlVM
TCB9LAorICAgICAgeyAidmFsdWVzIiwgMiwgIkF0dHJpYnV0ZVNldFZhbHVlIn0sCisgICAgICB7
ICJBdHRyaWJ1dGVTZXRWYWx1ZSIsIDE2MTA2MTI3NTEsIE5VTEwgfSwKKyAgICAgIHsgTlVMTCwg
MTMsIE5VTEwgfSwKKyAgICAgIHsgIkFsZ29yaXRobUlkZW50aWZpZXIiLCAxNjEwNjEyNzQxLCBO
VUxMIH0sCisgICAgICB7ICJhbGdvcml0aG0iLCAxMDczNzQxODM2LCBOVUxMIH0sCisgICAgICB7
ICJwYXJhbWV0ZXJzIiwgNTQxMDgxNjEzLCBOVUxMIH0sCisgICAgICB7ICJhbGdvcml0aG0iLCAx
LCBOVUxMIH0sCisgICAgICB7ICJFQ1ByaXZhdGVLZXkiLCAxNjEwNjEyNzQxLCBOVUxMIH0sCisg
ICAgICB7ICJ2ZXJzaW9uIiwgMTA3Mzc0MTgyNywgTlVMTCB9LAorICAgICAgeyAicHJpdmF0ZUtl
eSIsIDEwNzM3NDE4MzEsIE5VTEwgfSwKKyAgICAgIHsgInBhcmFtZXRlcnMiLCAxNjEwNjM3MzE0
LCAiRUNQYXJhbWV0ZXJzIn0sCisgICAgICB7IE5VTEwsIDIwNTYsICIwIn0sCisgICAgICB7ICJw
dWJsaWNLZXkiLCA1MzY4OTU0OTQsIE5VTEwgfSwKKyAgICAgIHsgTlVMTCwgMjA1NiwgIjEifSwK
KyAgICAgIHsgIkVDUGFyYW1ldGVycyIsIDE2MTA2MTI3NTQsIE5VTEwgfSwKKyAgICAgIHsgIm5h
bWVkQ3VydmUiLCAxMiwgTlVMTCB9LAorICAgICAgeyAiUlNBUHVibGljS2V5IiwgMTYxMDYxMjc0
MSwgTlVMTCB9LAorICAgICAgeyAibW9kdWx1cyIsIDEwNzM3NDE4MjcsIE5VTEwgfSwKKyAgICAg
IHsgInB1YmxpY0V4cG9uZW50IiwgMywgTlVMTCB9LAorICAgICAgeyAiUlNBUHJpdmF0ZUtleSIs
IDE2MTA2MTI3NDEsIE5VTEwgfSwKKyAgICAgIHsgInZlcnNpb24iLCAxMDczNzQxODI2LCAiVmVy
c2lvbiJ9LAorICAgICAgeyAibW9kdWx1cyIsIDEwNzM3NDE4MjcsIE5VTEwgfSwKKyAgICAgIHsg
InB1YmxpY0V4cG9uZW50IiwgMTA3Mzc0MTgyNywgTlVMTCB9LAorICAgICAgeyAicHJpdmF0ZUV4
cG9uZW50IiwgMTA3Mzc0MTgyNywgTlVMTCB9LAorICAgICAgeyAicHJpbWUxIiwgMTA3Mzc0MTgy
NywgTlVMTCB9LAorICAgICAgeyAicHJpbWUyIiwgMTA3Mzc0MTgyNywgTlVMTCB9LAorICAgICAg
eyAiZXhwb25lbnQxIiwgMTA3Mzc0MTgyNywgTlVMTCB9LAorICAgICAgeyAiZXhwb25lbnQyIiwg
MTA3Mzc0MTgyNywgTlVMTCB9LAorICAgICAgeyAiY29lZmZpY2llbnQiLCAxMDczNzQxODI3LCBO
VUxMIH0sCisgICAgICB7ICJvdGhlclByaW1lSW5mb3MiLCAxNjM4NiwgIk90aGVyUHJpbWVJbmZv
cyJ9LAorICAgICAgeyAiT3RoZXJQcmltZUluZm9zIiwgMTYxMjcwOTg5OSwgTlVMTCB9LAorICAg
ICAgeyAiTUFYIiwgMTA3NDI2NjEyMiwgIjEifSwKKyAgICAgIHsgTlVMTCwgMiwgIk90aGVyUHJp
bWVJbmZvIn0sCisgICAgICB7ICJPdGhlclByaW1lSW5mbyIsIDUzNjg3MDkxNywgTlVMTCB9LAor
ICAgICAgeyAicHJpbWUiLCAxMDczNzQxODI3LCBOVUxMIH0sCisgICAgICB7ICJleHBvbmVudCIs
IDEwNzM3NDE4MjcsIE5VTEwgfSwKKyAgICAgIHsgImNvZWZmaWNpZW50IiwgMywgTlVMTCB9LAor
ICAgICAgeyBOVUxMLCAwLCBOVUxMIH0KKyAgICB9OworCisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIHNfb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc19vbmNlRmxhZywgW10geyBhc24x
X2FycmF5MnRyZWUoc19XZWJDcnlwdG9BU04xLCAmc19kZWZpbml0aW9ucywgbnVsbHB0cik7IH0p
OworCisgICAgcmV0dXJuIHNfZGVmaW5pdGlvbnM7Cit9CisKK2Jvb2wgZGVjb2RlU3RydWN0dXJl
KGFzbjFfbm9kZSogcm9vdCwgY29uc3QgY2hhciogZWxlbWVudE5hbWUsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgZGF0YSkKK3sKKyAgICBpbnQgcmV0ID0gYXNuMV9jcmVhdGVfZWxlbWVudChhc24x
RGVmaW5pdGlvbnMoKSwgZWxlbWVudE5hbWUsIHJvb3QpOworICAgIGlmIChyZXQgIT0gQVNOMV9T
VUNDRVNTKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgZGF0YVNpemUgPSBkYXRh
LnNpemUoKTsKKyAgICByZXQgPSBhc24xX2Rlcl9kZWNvZGluZzIocm9vdCwgZGF0YS5kYXRhKCks
ICZkYXRhU2l6ZSwgQVNOMV9ERUNPREVfRkxBR19TVFJJQ1RfREVSLCBudWxscHRyKTsKKyAgICBy
ZXR1cm4gcmV0ID09IEFTTjFfU1VDQ0VTUzsKK30KKworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IGVsZW1lbnREYXRhKGFzbjFfbm9kZSByb290LCBjb25zdCBjaGFyKiBlbGVtZW50TmFt
ZSkKK3sKKyAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCB0eXBlID0gMDsKKyAgICBp
bnQgcmV0ID0gYXNuMV9yZWFkX3ZhbHVlX3R5cGUocm9vdCwgZWxlbWVudE5hbWUsIG51bGxwdHIs
ICZsZW5ndGgsICZ0eXBlKTsKKyAgICBpZiAocmV0ICE9IEFTTjFfTUVNX0VSUk9SKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKHR5cGUgPT0gQVNOMV9FVFlQRV9CSVRf
U1RSSU5HKSB7CisgICAgICAgIGlmIChsZW5ndGggJSA4KQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgbGVuZ3RoIC89IDg7CisgICAgfQorCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGEobGVuZ3RoKTsKKyAgICByZXQgPSBhc24xX3JlYWRfdmFsdWUocm9vdCwgZWxl
bWVudE5hbWUsIGRhdGEuZGF0YSgpLCAmbGVuZ3RoKTsKKyAgICBpZiAocmV0ICE9IEFTTjFfU1VD
Q0VTUykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBkYXRhOwor
fQorCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZW5jb2RlZERhdGEoYXNuMV9ub2Rl
IHJvb3QsIGNvbnN0IGNoYXIqIGVsZW1lbnROYW1lKQoreworICAgIGludCBsZW5ndGggPSAwOwor
ICAgIGludCByZXQgPSBhc24xX2Rlcl9jb2Rpbmcocm9vdCwgZWxlbWVudE5hbWUsIG51bGxwdHIs
ICZsZW5ndGgsIG51bGxwdHIpOworICAgIGlmIChyZXQgIT0gQVNOMV9NRU1fRVJST1IpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YShsZW5n
dGgpOworICAgIHJldCA9IGFzbjFfZGVyX2NvZGluZyhyb290LCBlbGVtZW50TmFtZSwgZGF0YS5k
YXRhKCksICZsZW5ndGgsIG51bGxwdHIpOworICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIGRhdGE7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFRBU04xCit9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL3Rhc24xL1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9jcnlwdG8vdGFzbjEvVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjc1MzhhNWIwYzEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vdGFzbjEvVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8bGlidGFzbjEuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFRBU04xIHsK
KworY2xhc3MgU3RydWN0dXJlIHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmUoKSA9IGRlZmF1bHQ7
CisKKyAgICB+U3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIGFzbjFfZGVsZXRlX3N0cnVjdHVy
ZSgmbV9zdHJ1Y3R1cmUpOworICAgIH0KKworICAgIFN0cnVjdHVyZShjb25zdCBTdHJ1Y3R1cmUm
KSA9IGRlbGV0ZTsKKyAgICBTdHJ1Y3R1cmUmIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmUmKSA9
IGRlbGV0ZTsKKworICAgIFN0cnVjdHVyZShTdHJ1Y3R1cmUmJikgPSBkZWxldGU7CisgICAgU3Ry
dWN0dXJlJiBvcGVyYXRvcj0oU3RydWN0dXJlJiYpID0gZGVsZXRlOworCisgICAgYXNuMV9ub2Rl
KiBvcGVyYXRvciYoKSB7IHJldHVybiAmbV9zdHJ1Y3R1cmU7IH0KKyAgICBvcGVyYXRvciBhc24x
X25vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorCitwcml2YXRlOgorICAgIGFz
bjFfbm9kZSBtX3N0cnVjdHVyZSB7IG51bGxwdHIgfTsKK307CisKK2FzbjFfbm9kZSBhc24xRGVm
aW5pdGlvbnMoKTsKKworYm9vbCBkZWNvZGVTdHJ1Y3R1cmUoYXNuMV9ub2RlKiByb290LCBjb25z
dCBjaGFyKiBlbGVtZW50TmFtZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKK3N0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBlbGVtZW50RGF0YShhc24xX25vZGUgcm9vdCwgY29u
c3QgY2hhciogZWxlbWVudE5hbWUpOworc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGVu
Y29kZWREYXRhKGFzbjFfbm9kZSByb290LCBjb25zdCBjaGFyKiBlbGVtZW50TmFtZSk7CisKK30g
Ly8gbmFtZXNwYWNlIFRBU04xCit9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL3Rhc24xL1dlYkNyeXB0by5hc24gYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2NyeXB0by90YXNuMS9XZWJDcnlwdG8uYXNuCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMTRlNWRiZGNhYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL3Rhc24xL1dlYkNyeXB0by5hc24KQEAgLTAsMCAr
MSw3OCBAQAorV2ViQ3J5cHRvIHsgfQorCitERUZJTklUSU9OUyBFWFBMSUNJVCBUQUdTIDo6PQor
CitCRUdJTgorCitTdWJqZWN0UHVibGljS2V5SW5mbyA6Oj0gIFNFUVVFTkNFICB7CisgIGFsZ29y
aXRobSAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgIHN1YmplY3RQdWJsaWNLZXkgIEJJ
VCBTVFJJTkcgCit9CisKK1ByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5DRSB7CisgIHZlcnNpb24g
ICAgICAgICAgICAgICAgICAgVmVyc2lvbiwKKyAgcHJpdmF0ZUtleUFsZ29yaXRobSAgICAgICBQ
cml2YXRlS2V5QWxnb3JpdGhtSWRlbnRpZmllciwKKyAgcHJpdmF0ZUtleSAgICAgICAgICAgICAg
ICBQcml2YXRlS2V5LAorICBhdHRyaWJ1dGVzICAgICAgICAgICBbMF0gIElNUExJQ0lUIEF0dHJp
YnV0ZXMgT1BUSU9OQUwKK30KKworVmVyc2lvbiA6Oj0gSU5URUdFUgorCitQcml2YXRlS2V5QWxn
b3JpdGhtSWRlbnRpZmllciA6Oj0gQWxnb3JpdGhtSWRlbnRpZmllcgorCitQcml2YXRlS2V5IDo6
PSBPQ1RFVCBTVFJJTkcKKworQXR0cmlidXRlcyA6Oj0gU0VUIE9GIEF0dHJpYnV0ZQorCitBdHRy
aWJ1dGUgOjo9IFNFUVVFTkNFIHsKKyAgIHR5cGUgICAgT0JKRUNUIElERU5USUZJRVIsCisgICB2
YWx1ZXMgIEF0dHJpYnV0ZVNldFZhbHVlCit9CisKK0F0dHJpYnV0ZVNldFZhbHVlIDo6PSBTRVQg
T0YgQU5ZCisKK0FsZ29yaXRobUlkZW50aWZpZXIgOjo9ICBTRVFVRU5DRSAgeworICBhbGdvcml0
aG0gICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxn
b3JpdGhtIE9QVElPTkFMCit9CisKK0VDUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICB2ZXJz
aW9uICAgICAgICBJTlRFR0VSLAorICBwcml2YXRlS2V5ICAgICBPQ1RFVCBTVFJJTkcsCisgIHBh
cmFtZXRlcnMgWzBdIEVDUGFyYW1ldGVycyBPUFRJT05BTCwKKyAgcHVibGljS2V5ICBbMV0gQklU
IFNUUklORyBPUFRJT05BTAorfQorCitFQ1BhcmFtZXRlcnMgOjo9IENIT0lDRSB7CisgIG5hbWVk
Q3VydmUgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiAtLSBNVVNUIGJlIHN1cHBvcnRlZC4KKyAg
LS0gaW1wbGljaXRDdXJ2ZSAgIE5VTEwgLSBNVVNUIE5PVCBiZSB1c2VkLgorICAtLSBzcGVjaWZp
ZWRDdXJ2ZSAgU3BlY2lmaWVkRUNEb21haW4gLSBNVVNUIE5PVCBiZSB1c2VkLgorfQorCitSU0FQ
dWJsaWNLZXkgOjo9IFNFUVVFTkNFIHsKKyAgbW9kdWx1cyAgICAgICAgICAgSU5URUdFUiwgIC0t
IG4KKyAgcHVibGljRXhwb25lbnQgICAgSU5URUdFUiAgIC0tIGUKK30KKworUlNBUHJpdmF0ZUtl
eSA6Oj0gU0VRVUVOQ0UgeworICB2ZXJzaW9uICAgICAgICAgICBWZXJzaW9uLAorICBtb2R1bHVz
ICAgICAgICAgICBJTlRFR0VSLCAgLS0gbgorICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSLCAg
LS0gZQorICBwcml2YXRlRXhwb25lbnQgICBJTlRFR0VSLCAgLS0gZAorICBwcmltZTEgICAgICAg
ICAgICBJTlRFR0VSLCAgLS0gcAorICBwcmltZTIgICAgICAgICAgICBJTlRFR0VSLCAgLS0gcQor
ICBleHBvbmVudDEgICAgICAgICBJTlRFR0VSLCAgLS0gZCBtb2QgKHAtMSkKKyAgZXhwb25lbnQy
ICAgICAgICAgSU5URUdFUiwgIC0tIGQgbW9kIChxLTEpCisgIGNvZWZmaWNpZW50ICAgICAgIElO
VEVHRVIsICAtLSAoaW52ZXJzZSBvZiBxKSBtb2QgcAorICBvdGhlclByaW1lSW5mb3MgICBPdGhl
clByaW1lSW5mb3MgT1BUSU9OQUwKK30KKworT3RoZXJQcmltZUluZm9zIDo6PSBTRVFVRU5DRSBT
SVpFKDEuLk1BWCkgT0YgT3RoZXJQcmltZUluZm8KKworT3RoZXJQcmltZUluZm8gOjo9IFNFUVVF
TkNFIHsKKyAgcHJpbWUgSU5URUdFUiwgIC0tIHJpCisgIGV4cG9uZW50IElOVEVHRVIsIC0tIGRp
CisgIGNvZWZmaWNpZW50IElOVEVHRVIgLS0gdGkgCit9CisKK0VORApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCA5MGUxZmUxYWVlMC4uNDA4NjIyODc2NzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCkBAIC0yMTksNiArMjE5LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJ
RVMKICAgICAke0xJQkdDUllQVF9MSUJSQVJJRVN9CiAgICAgJHtMSUJTRUNSRVRfTElCUkFSSUVT
fQogICAgICR7TElCU09VUF9MSUJSQVJJRVN9CisgICAgJHtMSUJUQVNOMV9MSUJSQVJJRVN9CiAg
ICAgJHtMSUJYTUwyX0xJQlJBUklFU30KICAgICAke0xJQlhTTFRfTElCUkFSSUVTfQogICAgICR7
SFlQSEVOX0xJQlJBUklFU30KQEAgLTI0NSw2ICsyNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgJHtMSUJHQ1JZUFRfSU5DTFVERV9ESVJT
fQogICAgICR7TElCU0VDUkVUX0lOQ0xVREVfRElSU30KICAgICAke0xJQlNPVVBfSU5DTFVERV9E
SVJTfQorICAgICR7TElCVEFTTjFfSU5DTFVERV9ESVJTfQogICAgICR7TElCWE1MMl9JTkNMVURF
X0RJUn0KICAgICAke0xJQlhTTFRfSU5DTFVERV9ESVJ9CiAgICAgJHtTUUxJVEVfSU5DTFVERV9E
SVJ9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4IDQxNTcyNzUwMGVhLi5kYjFjZDMyNzc4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTE3MSw2ICsxNzEsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX0xJQlJBUklFUwogICAgICR7SUNVX0xJQlJBUklFU30KICAgICAke0xJQkdD
UllQVF9MSUJSQVJJRVN9CiAgICAgJHtMSUJTT1VQX0xJQlJBUklFU30KKyAgICAke0xJQlRBU04x
X0xJQlJBUklFU30KICAgICAke0xJQlhNTDJfTElCUkFSSUVTfQogICAgICR7TElCWFNMVF9MSUJS
QVJJRVN9CiAgICAgJHtTUUxJVEVfTElCUkFSSUVTfQpAQCAtMTg1LDYgKzE4Niw3IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICR7SUNVX0lOQ0xVREVfRElS
U30KICAgICAke0xJQkdDUllQVF9JTkNMVURFX0RJUlN9CiAgICAgJHtMSUJTT1VQX0lOQ0xVREVf
RElSU30KKyAgICAke0xJQlRBU04xX0lOQ0xVREVfRElSU30KICAgICAke0xJQlhNTDJfSU5DTFVE
RV9ESVJ9CiAgICAgJHtMSUJYU0xUX0lOQ0xVREVfRElSfQogICAgICR7U1FMSVRFX0lOQ0xVREVf
RElSfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdv
cml0aG1BRVNfQ0ZCR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAKaW5kZXggZjU5MTgyYzQwOGYuLjdiMjIzMGY5
ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29y
aXRobUFFU19DRkJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAKQEAgLTI4LDE5ICsyOCwxNDggQEAKIAog
I2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRs
ZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNy
eXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5
cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9u
Q2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdEVuY3J5cHQoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90
PiYmIHBsYWluVGV4dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGF1dG8gYWxnb3Jp
dGhtID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgp
OworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2Ny
eV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBH
Q1JZX0NJUEhFUl9NT0RFX0NGQjgsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRr
ZXkoaGFuZGxlLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9j
aXBoZXJfc2V0aXYoaGFuZGxlLCBpdi5kYXRhKCksIGl2LnNpemUoKSk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9
IGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9f
RVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0
KHBsYWluVGV4dC5zaXplKCkpOworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZW5jcnlwdChoYW5k
bGUsIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIHBsYWluVGV4dC5kYXRhKCksIHBsYWlu
VGV4dC5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKK30KKworc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2LCBWZWN0b3I8dWludDhf
dD4mJiBjaXBoZXJUZXh0KQoreworICAgIGF1dG8gYWxnb3JpdGhtID0gUEFMOjpHQ3J5cHQ6OmFl
c0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgpOworICAgIGlmICghYWxnb3JpdGht
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2Ny
eV9jaXBoZXJfb3BlbigmaGFuZGxlLCAqYWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0NGQjgs
IDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6
R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBrZXkuZGF0YSgp
LCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAg
ICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0aXYoaGFuZGxlLCBp
di5kYXRhKCksIGl2LnNpemUoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2ZpbmFsKGhh
bmRsZSk7CisgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFM
OjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0KGNpcGhlclRleHQuc2l6ZSgpKTsK
KyAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQoaGFuZGxlLCBvdXRwdXQuZGF0YSgpLCBv
dXRwdXQuc2l6ZSgpLCBjaXBoZXJUZXh0LmRhdGEoKSwgY2lwaGVyVGV4dC5zaXplKCkpOworICAg
IGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojps
b2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgcmV0dXJuIFdURk1vdmUob3V0cHV0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
Q0ZCOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxs
YmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29y
a1F1ZXVlJikKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJl
ZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNh
bGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ss
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVl
dWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwg
a2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYg
YWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4o
KnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRv
S2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEVu
Y3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUocGxh
aW5UZXh0KSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIGNv
bnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzaygKKyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNy
eXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRl
cnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBW
ZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNh
bGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtR
dWV1ZSkKK3sKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAg
ICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtl
eSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMg
PSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5Lmdl
dCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZWNyeXB0KGFlc0tleS5r
ZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKKyAg
ICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFz
aygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAg
ICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKaW5kZXgg
YjM1NmQxNWVkODkuLmUzZjc1MjZmZjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKQEAg
LTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDE5ICszMCwyMzEgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zLmgiCisjaW5j
bHVkZSAiQ3J5cHRvS2V5QUVTLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9j
cnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWlu
dDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCit1c2luZyBHQ3J5cHRDaXBoZXJPcGVyYXRpb24g
PSBnY3J5X2Vycm9yX3QoZ2NyeV9jaXBoZXJfaGRfdCwgdm9pZCosIHNpemVfdCwgY29uc3Qgdm9p
ZCosIHNpemVfdCk7CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2Ny
eXB0QUVTX0NUUihHQ3J5cHRDaXBoZXJPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjb3VudGVyLCBzaXplX3QgY291
bnRlckxlbmd0aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dFRleHQpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGJsb2NrU2l6ZSA9IDE2OworICAg
IGF1dG8gYWxnb3JpdGhtID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUoa2V5
LnNpemUoKSAqIDgpOworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgLy8gQ29uc3RydWN0IHRoZSBsaWJnY3J5cHQgY2lwaGVyIG9iamVjdCBh
bmQgYXR0YWNoIHRoZSBrZXkgdG8gaXQuIEtleSBpbmZvcm1hdGlvbiBvbiB0aGlzCisgICAgLy8g
Y2lwaGVyIG9iamVjdCB3aWxsIGxpdmUgdGhyb3VnaCBhbnkgZ2NyeV9jaXBoZXJfcmVzZXQoKSBj
YWxscy4KKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsK
KyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5kbGUsICphbGdv
cml0aG0sIEdDUllfQ0lQSEVSX01PREVfQ1RSLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBo
ZXJfc2V0a2V5KGhhbmRsZSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGlzIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCByZXNldHMgdGhlIGNpcGhlciBvYmplY3QsIHNldHMg
dGhlIHByb3ZpZGVkIGNvdW50ZXIgZGF0YSwKKyAgICAvLyBhbmQgZXhlY3V0ZXMgdGhlIGVuY3J5
cHQgb3IgZGVjcnlwdCBvcGVyYXRpb24sIHJldHJpZXZpbmcgYW5kIHJldHVybmluZyB0aGUgb3V0
cHV0IGRhdGEuCisgICAgYXV0byBjYWxsT3BlcmF0aW9uID0KKyAgICAgICAgWyZoYW5kbGUsICZv
cGVyYXRpb25dKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY291bnRlciwgY29uc3QgdWludDhfdCog
aW5wdXREYXRhLCBjb25zdCBzaXplX3QgaW5wdXRTaXplKSAtPiBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4KKyAgICAgICAgeworICAgICAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0g
Z2NyeV9jaXBoZXJfcmVzZXQoaGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdf
RVJSX05PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGN0cihoYW5kbGUsIGNvdW50
ZXIuZGF0YSgpLCBjb3VudGVyLnNpemUoKSk7CisgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihl
cnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9maW5hbChoYW5kbGUpOworICAg
ICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAg
ICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBvdXRwdXQoaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGVycm9yID0gb3BlcmF0aW9uKGhhbmRs
ZSwgb3V0cHV0LmRhdGEoKSwgb3V0cHV0LnNpemUoKSwgaW5wdXREYXRhLCBpbnB1dFNpemUpOwor
ICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgICAg
ICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBvdXRw
dXQ7CisgICAgICAgIH07CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGJsb2NrIGNvdW50OiAoKGlu
cHV0VGV4dC5zaXplKCkgKyBibG9ja1NpemUgLSAxKSAvIGJsb2NrU2l6ZSksIHJlbWFpbmRlciBk
aXNjYXJkZWQuCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBibG9ja0NvdW50
TVBJKGdjcnlfbXBpX25ldygwKSk7CisgICAgeworICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxl
PGdjcnlfbXBpX3Q+IGJsb2NrU2l6ZU1QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwgYmxvY2tT
aXplKSk7CisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gYmxvY2tTaXpl
TWFza01QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwgYmxvY2tTaXplIC0gMSkpOworICAgICAg
ICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHJvdW5kZWRVcFNpemUoZ2NyeV9tcGlf
bmV3KDApKTsKKworICAgICAgICBnY3J5X21waV9hZGRfdWkocm91bmRlZFVwU2l6ZSwgYmxvY2tT
aXplTWFza01QSSwgaW5wdXRUZXh0LnNpemUoKSk7CisgICAgICAgIGdjcnlfbXBpX2RpdihibG9j
a0NvdW50TVBJLCBudWxscHRyLCByb3VuZGVkVXBTaXplLCBibG9ja1NpemVNUEksIDApOworICAg
IH0KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgY291bnRlciBsaW1pdCBmb3IgdGhlIHNwZWNpZmll
ZCBjb3VudGVyIGxlbmd0aDogKDIgPDwgY291bnRlckxlbmd0aCkuCisgICAgLy8gKGNvdW50ZXJM
aW1pdE1QSSAtIDEpIGlzIHRoZSBtYXhpbXVtIHZhbHVlIHRoZSBjb3VudGVyIGNhbiBob2xkIC0t
IGVzc2VudGlhbGx5IGl0J3MKKyAgICAvLyBhIGJpdC1tYXNrIGZvciB2YWxpZCBjb3VudGVyIHZh
bHVlcy4KKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGNvdW50ZXJMaW1pdE1Q
SShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwgMSkpOworICAgIGdjcnlfbXBpX211bF8yZXhwKGNv
dW50ZXJMaW1pdE1QSSwgY291bnRlckxpbWl0TVBJLCBjb3VudGVyTGVuZ3RoKTsKKworICAgIC8v
IENvdW50ZXIgdmFsdWVzIG11c3Qgbm90IHJlcGVhdCBmb3IgYSBnaXZlbiBjaXBoZXIgdGV4dC4g
SWYgdGhlIGNvdW50ZXIgbGltaXQgKGkuZS4KKyAgICAvLyB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBj
b3VudGVyIHZhbHVlcyB3ZSBjb3VsZCBwcm9jdWRlIGZvciB0aGUgc3BlY2lmaWVkIGNvdW50ZXIK
KyAgICAvLyBsZW5ndGgpIGlzIGxvd2VyIHRoYW4gdGhlIGRlZHVjZWQgYmxvY2sgY291bnQsIHdl
IGJhaWwuCisgICAgaWYgKGdjcnlfbXBpX2NtcChjb3VudGVyTGltaXRNUEksIGJsb2NrQ291bnRN
UEkpIDwgMCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIC8vIElmIHRoZSBj
b3VudGVyIGxlbmd0aCwgaW4gYml0cywgbWF0Y2hlcyB0aGUgc2l6ZSBvZiB0aGUgY291bnRlciBk
YXRhLCB3ZSBkb24ndCBoYXZlIHRvCisgICAgLy8gdXNlIGFueSBwYXJ0IG9mIHRoZSBjb3VudGVy
IFZlY3Rvcjw+IGFzIG5vbmNlLiBUaGlzIGFsbG93cyB1cyB0byBkaXJlY3RseSBlbmNyeXB0IG9y
CisgICAgLy8gZGVjcnlwdCBhbGwgdGhlIHByb3ZpZGVkIGRhdGEgaW4gYSBzaW5nbGUgc3RlcC4K
KyAgICBpZiAoY291bnRlckxlbmd0aCA9PSBjb3VudGVyLnNpemUoKSAqIDgpCisgICAgICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKGNvdW50ZXIsIGlucHV0VGV4dC5kYXRhKCksIGlucHV0VGV4dC5z
aXplKCkpOworCisgICAgLy8gU2NhbiB0aGUgY291bnRlciBkYXRhIGludG8gdGhlIE1QSSBmb3Jt
YXQuIFdlJ2xsIGRvIGFsbCB0aGUgY291bnRlciBjb21wdXRhdGlvbnMgd2l0aAorICAgIC8vIHRo
ZSBNUEkgQVBJLgorICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gY291bnRlckRh
dGFNUEk7CisgICAgZXJyb3IgPSBnY3J5X21waV9zY2FuKCZjb3VudGVyRGF0YU1QSSwgR0NSWU1Q
SV9GTVRfVVNHLCBjb3VudGVyLmRhdGEoKSwgY291bnRlci5zaXplKCksIG51bGxwdHIpOworICAg
IGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojps
b2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgLy8gRXh0cmFjdCB0aGUgY291bnRlciBNUEkgZnJvbSB0aGUgY291bnRlckRhdGFNUEk6IChj
b3VudGVyRGF0YU1QSSAlIGNvdW50ZXJMaW1pdE1QSSkuCisgICAgLy8gVGhpcyBNUEkgcmVwcmVz
ZW50cyBzb2xlbHkgdGhlIGNvdW50ZXIgdmFsdWUsIGFzIGluaXRpYWxseSBwcm92aWRlZC4KKyAg
ICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGNvdW50ZXJNUEkoZ2NyeV9tcGlfbmV3
KDApKTsKKyAgICBnY3J5X21waV9tb2QoY291bnRlck1QSSwgY291bnRlckRhdGFNUEksIGNvdW50
ZXJMaW1pdE1QSSk7CisKKyAgICB7CisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbGVld2F5IG9m
IHRoZSBpbml0aWFsbHktcHJvdmlkZWQgY291bnRlcjogY291bnRlckxpbWl0TVBJIC0gY291bnRl
ck1QSS4KKyAgICAgICAgLy8gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgbnVtYmVyIG9mIGJsb2Nr
cyB3ZSBjYW4gZW5jcnlwdC9kZWNyeXB0IHdpdGggdGhhdCBjb3VudGVyCisgICAgICAgIC8vIChp
bmNyZW1lbnRpbmcgaXQgYWZ0ZXIgZWFjaCBvcGVyYXRpb24pIGJlZm9yZSB0aGUgY291bnRlciB3
cmFwcyBhcm91bmQgdG8gMC4KKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90
PiBjb3VudGVyTGVld2F5TVBJKGdjcnlfbXBpX25ldygwKSk7CisgICAgICAgIGdjcnlfbXBpX3N1
Yihjb3VudGVyTGVld2F5TVBJLCBjb3VudGVyTGltaXRNUEksIGNvdW50ZXJNUEkpOworCisgICAg
ICAgIC8vIElmIGNvdW50ZXJMZWV3YXlNUEkgaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHRoZSBkZWR1
Y2VkIGJsb2NrIGNvdW50LCB3ZSBjYW4gZGlyZWN0bHkKKyAgICAgICAgLy8gZW5jcnlwdCBvciBk
ZWNyeXB0IHRoZSBwcm92aWRlZCBkYXRhIGluIGEgc2luZ2xlIHN0ZXAgc2luY2UgaXQncyBlbnN1
cmVkIHRoYXQgdGhlCisgICAgICAgIC8vIGNvdW50ZXIgd29uJ3Qgb3ZlcmZsb3cuCisgICAgICAg
IGlmIChnY3J5X21waV9jbXAoY291bnRlckxlZXdheU1QSSwgYmxvY2tDb3VudE1QSSkgPj0gMCkK
KyAgICAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKGNvdW50ZXIsIGlucHV0VGV4dC5kYXRh
KCksIGlucHV0VGV4dC5zaXplKCkpOworICAgIH0KKworICAgIC8vIEZyb20gaGVyZSBvbndhcmRz
IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvdW50ZXIgb2Ygd2hpY2ggdGhlIGxlbmd0aCBkb2Vzbid0
IG1hdGNoIHRoZQorICAgIC8vIHByb3ZpZGVkIGRhdGEsIG1lYW5pbmcgd2UnbGwgYWxzbyBoYXZl
IHRvIG1hbmFnZSB0aGUgbm9uY2UgZGF0YS4gVGhlIGNvdW50ZXIgd2lsbCBhbHNvCisgICAgLy8g
d3JhcCBhcm91bmQsIHNvIHdlJ2xsIGhhdmUgdG8gYWRkcmVzcyB0aGF0IHRvby4KKworICAgIC8v
IERldGVybWluZSB0aGUgbm9uY2UgTVBJIHRoYXQgd2UnbGwgdXNlIHRvIHJlY29uc3RydWN0IHRo
ZSBjb3VudGVyIGRhdGEgZm9yIGVhY2ggYmxvY2s6CisgICAgLy8gKGNvdW50ZXJEYXRhTVBJIC0g
Y291bnRlck1QSSkuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjb3VudGVyRGF0YU1QSSB3aXRoIHRo
ZSBsb3dlc3QKKyAgICAvLyBjb3VudGVyTGVuZ3RoIGJpdHMgY2xlYXJlZC4KKyAgICBQQUw6OkdD
cnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IG5vbmNlTVBJKGdjcnlfbXBpX25ldygwKSk7CisgICAg
Z2NyeV9tcGlfc3ViKG5vbmNlTVBJLCBjb3VudGVyRGF0YU1QSSwgY291bnRlck1QSSk7CisKKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgb3B0aW1pemVkIGZ1cnRoZXIgYnkgZmlyc3QgZW5j
cnlwdGluZyB0aGUgYW1vdW50IG9mIGJsb2NrcyBmb3IKKyAgICAvLyB3aGljaCB0aGUgY291bnRl
ciB3b24ndCB5ZXQgd3JhcCBhcm91bmQsIGFuZCB0aGVuIGVuY3J5cHRpbmcgdGhlIHJlc3Qgb2Yg
dGhlIGJsb2NrcworICAgIC8vIHN0YXJ0aW5nIGZyb20gdGhlIGNvdW50ZXIgc2V0IHRvIDAuCisK
KyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0OworICAgIFZlY3Rvcjx1aW50OF90PiBibG9ja0Nv
dW50ZXJEYXRhKDE2KTsKKyAgICBzaXplX3QgaW5wdXRUZXh0U2l6ZSA9IGlucHV0VGV4dC5zaXpl
KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlucHV0VGV4dFNpemU7IGkgKz0gMTYp
IHsKKyAgICAgICAgc2l6ZV90IGJsb2NrSW5wdXRTaXplID0gc3RkOjptaW48c2l6ZV90PigxNiwg
aW5wdXRUZXh0U2l6ZSAtIGkpOworCisgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgYmxvY2stc3Bl
Y2lmaWMgY291bnRlcjogKG5vbmNlTVBJICsgY291bnRlck1QSSkuCisgICAgICAgIFBBTDo6R0Ny
eXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gYmxvY2tDb3VudGVyTVBJKGdjcnlfbXBpX25ldygwKSk7
CisgICAgICAgIGdjcnlfbXBpX2FkZChibG9ja0NvdW50ZXJNUEksIG5vbmNlTVBJLCBjb3VudGVy
TVBJKTsKKworICAgICAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywg
YmxvY2tDb3VudGVyRGF0YS5kYXRhKCksIGJsb2NrQ291bnRlckRhdGEuc2l6ZSgpLCBudWxscHRy
LCBibG9ja0NvdW50ZXJNUEkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJP
UikgeworICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBFbmNyeXB0
L2RlY3J5cHQgdGhpcyBzaW5nbGUgYmxvY2sgd2l0aCB0aGUgYmxvY2stc3BlY2lmaWMgY291bnRl
ci4gT3V0cHV0IGZvciB0aGlzCisgICAgICAgIC8vIHNpbmdsZSBibG9jayBpcyBhcHBlbmRlZCB0
byB0aGUgZ2VuZXJhbCBvdXRwdXQgdmVjdG9yLgorICAgICAgICBhdXRvIGJsb2NrT3V0cHV0ID0g
Y2FsbE9wZXJhdGlvbihibG9ja0NvdW50ZXJEYXRhLCBpbnB1dFRleHQuZGF0YSgpICsgaSwgYmxv
Y2tJbnB1dFNpemUpOworICAgICAgICBpZiAoIWJsb2NrT3V0cHV0KQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBvdXRwdXQuYXBwZW5kVmVjdG9yKCpibG9ja091
dHB1dCk7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBjb3VudGVyLiBUaGUgbW9kdWx1cyBv
cGVyYXRpb24gdGFrZXMgY2FyZSBvZiBhbnkgd3JhcC1hcm91bmQuCisgICAgICAgIFBBTDo6R0Ny
eXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gY291bnRlckluY3JlbWVudE1QSShnY3J5X21waV9uZXco
MCkpOworICAgICAgICBnY3J5X21waV9hZGRfdWkoY291bnRlckluY3JlbWVudE1QSSwgY291bnRl
ck1QSSwgMSk7CisgICAgICAgIGdjcnlfbXBpX21vZChjb3VudGVyTVBJLCBjb3VudGVySW5jcmVt
ZW50TVBJLCBjb3VudGVyTGltaXRNUEkpOworICAgIH0KKworICAgIHJldHVybiBvdXRwdXQ7Cit9
CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlw
dG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNr
JiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQoreworICAg
IGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1l
dGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0
ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBt
dXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlw
dG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8m
IGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAgICAg
ICAgYXV0byBvdXRwdXQgPSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lwaGVyX2VuY3J5cHQsIGFlc0tl
eS5rZXkoKSwgYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVu
Z3RoLCBwbGFpblRleHQpOworICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcg
YmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29u
dGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayld
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91
bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9j
dW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAg
ICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0K
IAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZl
Y3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK3ZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0NUUjo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWlu
dDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25D
YWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1l
dGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4
dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgp
IG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENy
eXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0
byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAg
ICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZGVjcnlwdCwgYWVz
S2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5s
ZW5ndGgsIGNpcGhlclRleHQpOworICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFj
ayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUg
RG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAor
ICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0tleUVDR0NyeXB0LmNwcAppbmRleCA0MTRiMzc2ZTRmNi4uYzkyZDA3
MjRkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5
RUNHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5
RUNHQ3J5cHQuY3BwCkBAIC0yOSwxMCArMjksMTEgQEAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBU
TykKIAogI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKKyNpbmNsdWRlICJHQ3J5cHRVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJKc29uV2ViS2V5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KICNpbmNsdWRlIDxwYWwv
Y3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxwYWwvY3J5cHRvL3Rhc24xL1V0
aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0yMTEsMTggKzIxMiwyMTMgQEAgUmVmUHRyPENyeXB0b0tleUVDPiBDcnlwdG9L
ZXlFQzo6cGxhdGZvcm1JbXBvcnRKV0tQcml2YXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWYKICAg
ICByZXR1cm4gY3JlYXRlKGlkZW50aWZpZXIsIGN1cnZlLCBDcnlwdG9LZXlUeXBlOjpQcml2YXRl
LCBwbGF0Zm9ybUtleS5yZWxlYXNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogfQogCi1SZWZQ
dHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9ydFNwa2koQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciwgTmFtZWRDdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYsIGJvb2wsIENy
eXB0b0tleVVzYWdlQml0bWFwKQorc3RhdGljIGJvb2wgc3VwcG9ydGVkQWxnb3JpdGhtSWRlbnRp
ZmllcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGtleUlkZW50aWZpZXIsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgYWxnb3JpdGhtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3Rh
dGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMTg+IHNfaWRfZWNQdWJsaWNLZXkgeyB7ICIx
LjIuODQwLjEwMDQ1LjIuMSIgfSB9OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDEzPiBzX2lkX2VjREggeyB7ICIxLjMuMTMyLjEuMTIiIH0gfTsKKworICAgIHNpemVfdCBz
aXplID0gYWxnb3JpdGhtLnNpemUoKTsKKworICAgIHN3aXRjaCAoa2V5SWRlbnRpZmllcikgewor
ICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6RUNEU0E6CisgICAgICAgIGlmIChz
aXplID09IHNfaWRfZWNQdWJsaWNLZXkuc2l6ZSgpICYmICFzdGQ6Om1lbWNtcChhbGdvcml0aG0u
ZGF0YSgpLCBzX2lkX2VjUHVibGljS2V5LmRhdGEoKSwgc2l6ZSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6RUNESDoKKyAgICAgICAgaWYgKHNpemUgPT0gc19pZF9lY1B1YmxpY0tleS5z
aXplKCkgJiYgIXN0ZDo6bWVtY21wKGFsZ29yaXRobS5kYXRhKCksIHNfaWRfZWNQdWJsaWNLZXku
ZGF0YSgpLCBzaXplKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoc2l6
ZSA9PSBzX2lkX2VjREguc2l6ZSgpICYmICFzdGQ6Om1lbWNtcChhbGdvcml0aG0uZGF0YSgpLCBz
X2lkX2VjREguZGF0YSgpLCBzaXplKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVJlZlB0cjxDcnlwdG9LZXlFQz4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtSW1wb3J0
UGtjczgoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgTmFtZWRDdXJ2ZSwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIGJvb2wsIENyeXB0b0tleVVzYWdlQml0bWFwKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8
Q3J5cHRvS2V5RUM6Ok5hbWVkQ3VydmU+IGN1cnZlRm9ySWRlbnRpZmllcihjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDIwPiBzX3NlY3AyNTZyMSB7IHsgIjEuMi44NDAu
MTAwNDUuMy4xLjciIH0gfTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAx
Mz4gc19zZWNwMzg0cjEgeyB7ICIxLjMuMTMyLjAuMzQiIH0gfTsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAxMz4gc19zZWNwNTIxcjEgeyB7ICIxLjMuMTMyLjAuMzUiIH0g
fTsKKworICAgIGlmIChzaXplID09IHNfc2VjcDI1NnIxLnNpemUoKSAmJiAhc3RkOjptZW1jbXAo
ZGF0YSwgc19zZWNwMjU2cjEuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIENyeXB0b0tl
eUVDOjpOYW1lZEN1cnZlOjpQMjU2OworICAgIGlmIChzaXplID09IHNfc2VjcDM4NHIxLnNpemUo
KSAmJiAhc3RkOjptZW1jbXAoZGF0YSwgc19zZWNwMzg0cjEuZGF0YSgpLCBzaXplKSkKKyAgICAg
ICAgcmV0dXJuIENyeXB0b0tleUVDOjpOYW1lZEN1cnZlOjpQMzg0OworICAgIGlmIChzaXplID09
IHNfc2VjcDUyMXIxLnNpemUoKSAmJiAhc3RkOjptZW1jbXAoZGF0YSwgc19zZWNwNTIxcjEuZGF0
YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgLy8gTm90IHlldCBzdXBw
b3J0ZWQuCisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQogCi0gICAgcmV0dXJuIG51bGxw
dHI7CitSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUltcG9ydFNwa2ko
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBOYW1lZEN1cnZlIGN1cnZlLCBW
ZWN0b3I8dWludDhfdD4mJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2Fn
ZUJpdG1hcCB1c2FnZXMpCit7CisgICAgLy8gRGVjb2RlIHRoZSBgU3ViamVjdFB1YmxpY0tleUlu
Zm9gIHN0cnVjdHVyZSB1c2luZyB0aGUgcHJvdmlkZWQga2V5IGRhdGEuCisgICAgUEFMOjpUQVNO
MTo6U3RydWN0dXJlIHNwa2k7CisgICAgaWYgKCFQQUw6OlRBU04xOjpkZWNvZGVTdHJ1Y3R1cmUo
JnNwa2ksICJXZWJDcnlwdG8uU3ViamVjdFB1YmxpY0tleUluZm8iLCBrZXlEYXRhKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBWYWxpZGF0ZSBgYWxnb3JpdGhtLmFsZ29yaXRo
bWAuCisgICAgeworICAgICAgICBhdXRvIGFsZ29yaXRobSA9IFBBTDo6VEFTTjE6OmVsZW1lbnRE
YXRhKHNwa2ksICJhbGdvcml0aG0uYWxnb3JpdGhtIik7CisgICAgICAgIGlmICghYWxnb3JpdGht
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFzdXBwb3J0ZWRB
bGdvcml0aG1JZGVudGlmaWVyKGlkZW50aWZpZXIsICphbGdvcml0aG0pKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gVmFsaWRhdGUgYGFsZ29yaXRobS5wYXJh
bWV0ZXJzYCBhbmQgdGhlcmVpbiBlbWJlZGRlZCBgRUNQYXJhbWV0ZXJzYC4KKyAgICB7CisgICAg
ICAgIGF1dG8gcGFyYW1ldGVycyA9IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRhKHNwa2ksICJhbGdv
cml0aG0ucGFyYW1ldGVycyIpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnMpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBEZWNvZGUgdGhlIGBFQ1BhcmFtZXRlcnNg
IHN0cnVjdHVyZSB1c2luZyB0aGUgYGFsZ29yaXRobS5wYXJhbWV0ZXJzYCBkYXRhLgorICAgICAg
ICBQQUw6OlRBU04xOjpTdHJ1Y3R1cmUgZWNQYXJhbWV0ZXJzOworICAgICAgICBpZiAoIVBBTDo6
VEFTTjE6OmRlY29kZVN0cnVjdHVyZSgmZWNQYXJhbWV0ZXJzLCAiV2ViQ3J5cHRvLkVDUGFyYW1l
dGVycyIsICpwYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIGF1dG8gbmFtZWRDdXJ2ZSA9IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRhKGVjUGFyYW1ldGVy
cywgIm5hbWVkQ3VydmUiKTsKKyAgICAgICAgaWYgKCFuYW1lZEN1cnZlKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJDdXJ2ZSA9IGN1cnZlRm9y
SWRlbnRpZmllcihuYW1lZEN1cnZlLT5kYXRhKCksIG5hbWVkQ3VydmUtPnNpemUoKSk7CisgICAg
ICAgIGlmICghcGFyYW1ldGVyQ3VydmUgfHwgKnBhcmFtZXRlckN1cnZlICE9IGN1cnZlKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gUmV0cmlldmUgdGhlIGBz
dWJqZWN0UHVibGljS2V5YCBkYXRhIGFuZCBlbWJlZCBpdCBpbnRvIHRoZSBgcHVibGljLWtleWAg
cy1leHByZXNzaW9uLgorICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHBsYXRm
b3JtS2V5OworICAgIHsKKyAgICAgICAgYXV0byBzdWJqZWN0UHVibGljS2V5ID0gUEFMOjpUQVNO
MTo6ZWxlbWVudERhdGEoc3BraSwgInN1YmplY3RQdWJsaWNLZXkiKTsKKyAgICAgICAgaWYgKCFz
dWJqZWN0UHVibGljS2V5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
Ly8gQmFpbCBpZiB0aGUgYHN1YmplY3RQdWJsaWNLZXlgIGRhdGEgc2l6ZSBkb2Vzbid0IG1hdGNo
IHRoZSBzaXplIG9mIGFuIHVuY29tcHJlc3NlZCBwb2ludAorICAgICAgICAvLyBmb3IgdGhpcyBj
dXJ2ZSwgb3IgaWYgdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGBzdWJqZWN0UHVibGljS2V5YCBkYXRh
IGlzbid0IDB4MDQsIGFzIHJlcXVpcmVkCisgICAgICAgIC8vIGZvciBhbiB1bmNvbXByZXNzZWQg
RUMgcG9pbnQgZW5jb2RlZCBpbiBhbiBvY3RldCBzdHJpbmcuCisgICAgICAgIGlmICh1bmNvbXBy
ZXNzZWRQb2ludFNpemVGb3JDdXJ2ZShjdXJ2ZSkgIT0gc3ViamVjdFB1YmxpY0tleS0+c2l6ZSgp
IHx8IHN1YmplY3RQdWJsaWNLZXktPmF0KDApICE9IDB4MDQpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X3NleHBfYnVpbGQo
JnBsYXRmb3JtS2V5LCBudWxscHRyLCAiKHB1YmxpYy1rZXkoZWNjKGN1cnZlICVzKShxICViKSkp
IiwKKyAgICAgICAgICAgIGN1cnZlTmFtZShjdXJ2ZSksIHN1YmplY3RQdWJsaWNLZXktPnNpemUo
KSwgc3ViamVjdFB1YmxpY0tleS0+ZGF0YSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19F
UlJfTk9fRVJST1IpIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEZpbmFsbHkgY3JlYXRlIGEgbmV3IENyeXB0b0tleUVDIG9iamVjdCwgdHJhbnNmZXJyaW5nIHRv
IGl0IG93bmVyc2hpcCBvZiB0aGUgYHB1YmxpYy1rZXlgIHMtZXhwcmVzc2lvbi4KKyAgICByZXR1
cm4gY3JlYXRlKGlkZW50aWZpZXIsIGN1cnZlLCBDcnlwdG9LZXlUeXBlOjpQdWJsaWMsIHBsYXRm
b3JtS2V5LnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7Cit9CisKK1JlZlB0cjxDcnlw
dG9LZXlFQz4gQ3J5cHRvS2V5RUM6OnBsYXRmb3JtSW1wb3J0UGtjczgoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOYW1lZEN1cnZlIGN1cnZlLCBWZWN0b3I8dWludDhfdD4m
JiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMp
Cit7CisKKyAgICBQQUw6OlRBU04xOjpTdHJ1Y3R1cmUgcGtjczg7CisgICAgaWYgKCFQQUw6OlRB
U04xOjpkZWNvZGVTdHJ1Y3R1cmUoJnBrY3M4LCAiV2ViQ3J5cHRvLlByaXZhdGVLZXlJbmZvIiwg
a2V5RGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gVmFsaWRhdGUgYHZl
cnNpb25gLgorICAgIHsKKyAgICAgICAgYXV0byB2ZXJzaW9uID0gUEFMOjpUQVNOMTo6ZWxlbWVu
dERhdGEocGtjczgsICJ2ZXJzaW9uIik7CisgICAgICAgIGlmICghdmVyc2lvbikKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmICh2ZXJzaW9uLT5zaXplKCkgIT0gMSB8
fCB2ZXJzaW9uLT5hdCgwKSAhPSAweDAwKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgLy8gVmFsaWRhdGUgYHByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtYC4K
KyAgICB7CisgICAgICAgIGF1dG8gYWxnb3JpdGhtID0gUEFMOjpUQVNOMTo6ZWxlbWVudERhdGEo
cGtjczgsICJwcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSIpOworICAgICAgICBpZiAoIWFs
Z29yaXRobSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmICghc3Vw
cG9ydGVkQWxnb3JpdGhtSWRlbnRpZmllcihpZGVudGlmaWVyLCAqYWxnb3JpdGhtKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIGBwcml2YXRl
S2V5QWxnb3JpdGhtLnBhcmFtZXRlcnNgLgorICAgIHsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJz
ID0gUEFMOjpUQVNOMTo6ZWxlbWVudERhdGEocGtjczgsICJwcml2YXRlS2V5QWxnb3JpdGhtLnBh
cmFtZXRlcnMiKTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgUEFMOjpUQVNOMTo6U3RydWN0dXJlIGVjUGFyYW1ldGVyczsK
KyAgICAgICAgaWYgKCFQQUw6OlRBU04xOjpkZWNvZGVTdHJ1Y3R1cmUoJmVjUGFyYW1ldGVycywg
IldlYkNyeXB0by5FQ1BhcmFtZXRlcnMiLCAqcGFyYW1ldGVycykpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBhdXRvIG5hbWVkQ3VydmUgPSBQQUw6OlRBU04xOjplbGVt
ZW50RGF0YShlY1BhcmFtZXRlcnMsICJuYW1lZEN1cnZlIik7CisgICAgICAgIGlmICghbmFtZWRD
dXJ2ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGF1dG8gcGFyYW1l
dGVyQ3VydmUgPSBjdXJ2ZUZvcklkZW50aWZpZXIobmFtZWRDdXJ2ZS0+ZGF0YSgpLCBuYW1lZEN1
cnZlLT5zaXplKCkpOworICAgICAgICBpZiAoIXBhcmFtZXRlckN1cnZlIHx8ICpwYXJhbWV0ZXJD
dXJ2ZSAhPSBjdXJ2ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IFBBTDo6VEFTTjE6OlN0cnVjdHVyZSBlY1ByaXZhdGVLZXk7CisgICAgeworICAgICAgICBhdXRv
IHByaXZhdGVLZXkgPSBQQUw6OlRBU04xOjplbGVtZW50RGF0YShwa2NzOCwgInByaXZhdGVLZXki
KTsKKyAgICAgICAgaWYgKCFwcml2YXRlS2V5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgaWYgKCFQQUw6OlRBU04xOjpkZWNvZGVTdHJ1Y3R1cmUoJmVjUHJpdmF0ZUtl
eSwgIldlYkNyeXB0by5FQ1ByaXZhdGVLZXkiLCAqcHJpdmF0ZUtleSkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBgcHJpdmF0ZUtleS52ZXJz
aW9uYC4KKyAgICB7CisgICAgICAgIGF1dG8gdmVyc2lvbiA9IFBBTDo6VEFTTjE6OmVsZW1lbnRE
YXRhKGVjUHJpdmF0ZUtleSwgInZlcnNpb24iKTsKKyAgICAgICAgaWYgKCF2ZXJzaW9uKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKHZlcnNpb24tPnNpemUoKSAh
PSAxIHx8IHZlcnNpb24tPmF0KDApICE9IDB4MDEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBgcHJpdmF0ZUtleS5wYXJhbWV0ZXJzLm5hbWVk
Q3VydmVgLCBpZiBhbnkuCisgICAgeworICAgICAgICBhdXRvIG5hbWVkQ3VydmUgPSBQQUw6OlRB
U04xOjplbGVtZW50RGF0YShlY1ByaXZhdGVLZXksICJwYXJhbWV0ZXJzLm5hbWVkQ3VydmUiKTsK
KyAgICAgICAgaWYgKG5hbWVkQ3VydmUpIHsKKyAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVyQ3Vy
dmUgPSBjdXJ2ZUZvcklkZW50aWZpZXIobmFtZWRDdXJ2ZS0+ZGF0YSgpLCBuYW1lZEN1cnZlLT5z
aXplKCkpOworICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJDdXJ2ZSB8fCAqcGFyYW1ldGVyQ3Vy
dmUgIT0gY3VydmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBgcHJpdmF0ZUtleS5wdWJsaWNLZXlgLCBpZiBhbnku
CisgICAgeworICAgICAgICBhdXRvIHB1YmxpY0tleSA9IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRh
KGVjUHJpdmF0ZUtleSwgInB1YmxpY0tleSIpOworICAgICAgICBpZiAocHVibGljS2V5KSB7Cisg
ICAgICAgICAgICBpZiAocHVibGljS2V5LT5zaXplKCkgIT0gMiAqIChjdXJ2ZVNpemUoY3VydmUp
IC8gOCkgKyAxIHx8IHB1YmxpY0tleS0+YXQoMCkgIT0gMHgwNCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHJpZXZlIHRoZSBg
cHJpdmF0ZUtleS5wcml2YXRlS2V5YCBkYXRhLgorICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2Ny
eV9zZXhwX3Q+IHBsYXRmb3JtS2V5OworICAgIHsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5ID0g
UEFMOjpUQVNOMTo6ZWxlbWVudERhdGEoZWNQcml2YXRlS2V5LCAicHJpdmF0ZUtleSIpOworICAg
ICAgICBpZiAoIXByaXZhdGVLZXkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICBpZiAocHJpdmF0ZUtleS0+c2l6ZSgpICogOCAhPSBjdXJ2ZVNpemUoY3VydmUpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0g
Z2NyeV9zZXhwX2J1aWxkKCZwbGF0Zm9ybUtleSwgbnVsbHB0ciwgIihwcml2YXRlLWtleShlY2Mo
Y3VydmUgJXMpKGQgJWIpKSkiLAorICAgICAgICAgICAgY3VydmVOYW1lKGN1cnZlKSwgcHJpdmF0
ZUtleS0+c2l6ZSgpLCBwcml2YXRlS2V5LT5kYXRhKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0g
R1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGNyZWF0ZShpZGVudGlmaWVyLCBjdXJ2ZSwgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0
ZSwgcGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKIH0KIAogVmVj
dG9yPHVpbnQ4X3Q+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUV4cG9ydFJhdygpIGNvbnN0CkBAIC0y
ODIsMTYgKzQ3OCwxODkgQEAgdm9pZCBDcnlwdG9LZXlFQzo6cGxhdGZvcm1BZGRGaWVsZEVsZW1l
bnRzKEpzb25XZWJLZXkmIGp3aykgY29uc3QKIAogVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0tleUVD
OjpwbGF0Zm9ybUV4cG9ydFNwa2koKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGVjUGFyYW1ldGVyc0RhdGE7CisgICAgeworICAgICAgICBQQUw6
OlRBU04xOjpTdHJ1Y3R1cmUgZWNQYXJhbWV0ZXJzOworICAgICAgICBpbnQgcmV0ID0gYXNuMV9j
cmVhdGVfZWxlbWVudChQQUw6OlRBU04xOjphc24xRGVmaW5pdGlvbnMoKSwgIldlYkNyeXB0by5F
Q1BhcmFtZXRlcnMiLCAmZWNQYXJhbWV0ZXJzKTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NV
Q0NFU1MpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIHJldCA9IGFzbjFfd3Jp
dGVfdmFsdWUoZWNQYXJhbWV0ZXJzLCAiIiwgIm5hbWVkQ3VydmUiLCAxKTsKKyAgICAgICAgaWYg
KHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAg
IHN3aXRjaCAobV9jdXJ2ZSkgeworICAgICAgICBjYXNlIE5hbWVkQ3VydmU6OlAyNTY6CisgICAg
ICAgICAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlKGVjUGFyYW1ldGVycywgIm5hbWVkQ3VydmUi
LCAiMS4yLjg0MC4xMDA0NS4zLjEuNyIsIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTmFtZWRDdXJ2ZTo6UDM4NDoKKyAgICAgICAgICAgIHJldCA9IGFzbjFfd3JpdGVfdmFs
dWUoZWNQYXJhbWV0ZXJzLCAibmFtZWRDdXJ2ZSIsICIxLjMuMTMyLjAuMzQiLCAxKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNT
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBhdXRvIGRhdGEgPSBQQUw6OlRB
U04xOjplbmNvZGVkRGF0YShlY1BhcmFtZXRlcnMsICIiKTsKKyAgICAgICAgaWYgKCFkYXRhKQor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBlY1BhcmFtZXRlcnNEYXRhID0gV1RG
TW92ZShkYXRhLnZhbHVlKCkpOworICAgIH0KIAotICAgIHJldHVybiB7IH07CisgICAgUEFMOjpU
QVNOMTo6U3RydWN0dXJlIHNwa2k7CisgICAgeworICAgICAgICBpbnQgcmV0ID0gYXNuMV9jcmVh
dGVfZWxlbWVudChQQUw6OlRBU04xOjphc24xRGVmaW5pdGlvbnMoKSwgIldlYkNyeXB0by5TdWJq
ZWN0UHVibGljS2V5SW5mbyIsICZzcGtpKTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NF
U1MpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIHJldCA9IGFzbjFfd3JpdGVf
dmFsdWUoc3BraSwgImFsZ29yaXRobS5hbGdvcml0aG0iLCAiMS4yLjg0MC4xMDA0NS4yLjEiLCAx
KTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4g
eyB9OworCisgICAgICAgIHJldCA9IGFzbjFfd3JpdGVfdmFsdWUoc3BraSwgImFsZ29yaXRobS5w
YXJhbWV0ZXJzIiwgZWNQYXJhbWV0ZXJzRGF0YS5kYXRhKCksIGVjUGFyYW1ldGVyc0RhdGEuc2l6
ZSgpKTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1
cm4geyB9OworCisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHFTZXhw
KGdjcnlfc2V4cF9maW5kX3Rva2VuKG1fcGxhdGZvcm1LZXksICJxIiwgMCkpOworICAgICAgICBp
ZiAoIXFTZXhwKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBzaXplX3QgcG9p
bnRTaXplID0gMiAqIChjdXJ2ZVNpemUobV9jdXJ2ZSkgLyA4KTsKKyAgICAgICAgc2l6ZV90IGRh
dGFMZW5ndGggPSAwOworICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gZ2NyeV9zZXhwX250aF9k
YXRhKHFTZXhwLCAxLCAmZGF0YUxlbmd0aCk7CisgICAgICAgIGlmICghZGF0YSB8fCBkYXRhTGVu
Z3RoICE9IHBvaW50U2l6ZSArIDEgfHwgZGF0YVswXSAhPSAweDA0KQorICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgICAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlKHNwa2ksICJzdWJqZWN0
UHVibGljS2V5IiwgZGF0YSwgZGF0YUxlbmd0aCAqIDgpOworICAgICAgICBpZiAocmV0ICE9IEFT
TjFfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBy
ZXN1bHQgPSBQQUw6OlRBU04xOjplbmNvZGVkRGF0YShzcGtpLCAiIik7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQudmFs
dWUoKSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRQ
a2NzOCgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBWZWN0b3I8dWludDhf
dD4gZWNQYXJhbWV0ZXJzRGF0YTsKKyAgICB7CisgICAgICAgIFBBTDo6VEFTTjE6OlN0cnVjdHVy
ZSBlY1BhcmFtZXRlcnM7CisgICAgICAgIGludCByZXQgPSBhc24xX2NyZWF0ZV9lbGVtZW50KFBB
TDo6VEFTTjE6OmFzbjFEZWZpbml0aW9ucygpLCAiV2ViQ3J5cHRvLkVDUGFyYW1ldGVycyIsICZl
Y1BhcmFtZXRlcnMpOworICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShlY1BhcmFt
ZXRlcnMsICIiLCAibmFtZWRDdXJ2ZSIsIDEpOworICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VD
Q0VTUykKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgc3dpdGNoIChtX2N1cnZl
KSB7CisgICAgICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDI1NjoKKyAgICAgICAgICAgIHJldCA9IGFz
bjFfd3JpdGVfdmFsdWUoZWNQYXJhbWV0ZXJzLCAibmFtZWRDdXJ2ZSIsICIxLjIuODQwLjEwMDQ1
LjMuMS43IiwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOYW1lZEN1cnZl
OjpQMzg0OgorICAgICAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShlY1BhcmFtZXRlcnMs
ICJuYW1lZEN1cnZlIiwgIjEuMy4xMzIuMC4zNCIsIDEpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgICAgIGF1dG8gZGF0YSA9IFBBTDo6VEFTTjE6OmVuY29kZWREYXRh
KGVjUGFyYW1ldGVycywgIiIpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1
cm4geyB9OworCisgICAgICAgIGVjUGFyYW1ldGVyc0RhdGEgPSBXVEZNb3ZlKGRhdGEudmFsdWUo
KSk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVjUHJpdmF0ZUtleURhdGE7CisgICAg
eworICAgICAgICBQQUw6OlRBU04xOjpTdHJ1Y3R1cmUgZWNQcml2YXRlS2V5OworICAgICAgICBp
bnQgcmV0ID0gYXNuMV9jcmVhdGVfZWxlbWVudChQQUw6OlRBU04xOjphc24xRGVmaW5pdGlvbnMo
KSwgIldlYkNyeXB0by5FQ1ByaXZhdGVLZXkiLCAmZWNQcml2YXRlS2V5KTsKKyAgICAgICAgaWYg
KHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAg
IHJldCA9IGFzbjFfd3JpdGVfdmFsdWUoZWNQcml2YXRlS2V5LCAidmVyc2lvbiIsICIxIiwgMCk7
CisgICAgICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgICAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlKGVjUHJpdmF0ZUtleSwgInBhcmFt
ZXRlcnMiLCBudWxscHRyLCAwKTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisg
ICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2Ny
eV9jdHhfdD4gY29udGV4dDsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9tcGlf
ZWNfbmV3KCZjb250ZXh0LCBtX3BsYXRmb3JtS2V5LCBudWxscHRyKTsKKyAgICAgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gZE1QSShn
Y3J5X21waV9lY19nZXRfbXBpKCJkIiwgY29udGV4dCwgMCkpOworICAgICAgICAgICAgaWYgKCFk
TVBJKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgIGF1dG8gZGF0
YSA9IG1waURhdGEoZE1QSSk7CisgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShlY1By
aXZhdGVLZXksICJwcml2YXRlS2V5IiwgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAg
ICAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpI
YW5kbGU8Z2NyeV9tcGlfdD4gcU1QSShnY3J5X21waV9lY19nZXRfbXBpKCJxIiwgY29udGV4dCwg
MCkpOworICAgICAgICAgICAgaWYgKCFxTVBJKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07
CisKKyAgICAgICAgICAgIGF1dG8gZGF0YSA9IG1waURhdGEocU1QSSk7CisgICAgICAgICAgICBp
ZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgcmV0
ID0gYXNuMV93cml0ZV92YWx1ZShlY1ByaXZhdGVLZXksICJwdWJsaWNLZXkiLCBkYXRhLT5kYXRh
KCksIGRhdGEtPnNpemUoKSAqIDgpOworICAgICAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NF
U1MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gZGF0YSA9IFBBTDo6VEFTTjE6OmVuY29kZWREYXRhKGVjUHJpdmF0ZUtleSwgIiIpOworICAg
ICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIGVjUHJp
dmF0ZUtleURhdGEgPSBXVEZNb3ZlKGRhdGEudmFsdWUoKSk7CisgICAgfQorCisgICAgUEFMOjpU
QVNOMTo6U3RydWN0dXJlIHBrY3M4OworICAgIHsKKyAgICAgICAgaW50IHJldCA9IGFzbjFfY3Jl
YXRlX2VsZW1lbnQoUEFMOjpUQVNOMTo6YXNuMURlZmluaXRpb25zKCksICJXZWJDcnlwdG8uUHJp
dmF0ZUtleUluZm8iLCAmcGtjczgpOworICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykK
KyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1
ZShwa2NzOCwgInZlcnNpb24iLCAiMCIsIDApOworICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VD
Q0VTUykKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgcmV0ID0gYXNuMV93cml0
ZV92YWx1ZShwa2NzOCwgInByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtIiwgIjEuMi44NDAu
MTAwNDUuMi4xIiwgMSk7CisgICAgICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlKHBrY3M4
LCAicHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzIiwgZWNQYXJhbWV0ZXJzRGF0YS5kYXRh
KCksIGVjUGFyYW1ldGVyc0RhdGEuc2l6ZSgpKTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NV
Q0NFU1MpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIHJldCA9IGFzbjFfd3Jp
dGVfdmFsdWUocGtjczgsICJwcml2YXRlS2V5IiwgZWNQcml2YXRlS2V5RGF0YS5kYXRhKCksIGVj
UHJpdmF0ZUtleURhdGEuc2l6ZSgpKTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1Mp
CisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIHJldCA9IGFzbjFfd3JpdGVfdmFs
dWUocGtjczgsICJhdHRyaWJ1dGVzIiwgbnVsbHB0ciwgMCk7CisgICAgICAgIGlmIChyZXQgIT0g
QVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRv
IHJlc3VsdCA9IFBBTDo6VEFTTjE6OmVuY29kZWREYXRhKHBrY3M4LCAiIik7CisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4geyB9OworICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5
cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQu
Y3BwCmluZGV4IDI0NzgwZTZjY2ZkLi44OTE3ZjljN2U1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNwcApAQCAtMzIsMTAgKzMy
LDExIEBACiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaCIKICNpbmNsdWRl
ICJDcnlwdG9LZXlQYWlyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiR0NyeXB0VXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0
L0hhbmRsZS5oPgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgorI2lu
Y2x1ZGUgPHBhbC9jcnlwdG8vdGFzbjEvVXRpbGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMjY4LDMyICsyNjksMzg1IEBAIHZvaWQgQ3J5cHRvS2V5UlNBOjpnZW5lcmF0ZVBh
aXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIENyeXB0b0FsZ29yCiAgICAg
ICAgIH0pOwogfQogCi1SZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9ydFNw
a2koQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDxDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyPiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIGJvb2wsIENyeXB0b0tleVVzYWdlQml0
bWFwKQorc3RhdGljIGJvb2wgc3VwcG9ydGVkQWxnb3JpdGhtSWRlbnRpZmllcihjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0
YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDIxPiBzX2lkX3JzYUVuY3J5cHRpb24geyB7
ICIxLjIuODQwLjExMzU0OS4xLjEuMSIgfSB9OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDIxPiBzX2lkX1JTQUVTX09BRVAgeyB7ICIxLjIuODQwLjExMzU0OS4xLjEuNyIg
fSB9OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDIyPiBzX2lkX1JBU1NT
QV9QU1MgeyB7ICIxLjIuODQwLjExMzU0OS4xLjEuMTAiIH0gfTsKKworICAgIGlmIChzaXplID09
IHNfaWRfcnNhRW5jcnlwdGlvbi5zaXplKCkgJiYgIXN0ZDo6bWVtY21wKGRhdGEsIHNfaWRfcnNh
RW5jcnlwdGlvbi5kYXRhKCksIHNpemUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
c2l6ZSA9PSBzX2lkX1JTQUVTX09BRVAuc2l6ZSgpICYmICFzdGQ6Om1lbWNtcChkYXRhLCBzX2lk
X1JTQUVTX09BRVAuZGF0YSgpLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3Qg
eWV0IHN1cHBvcnRlZC4KKyAgICBpZiAoc2l6ZSA9PSBzX2lkX1JBU1NTQV9QU1Muc2l6ZSgpICYm
ICFzdGQ6Om1lbWNtcChkYXRhLCBzX2lkX1JBU1NTQV9QU1MuZGF0YSgpLCBzaXplKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgeWV0IHN1cHBvcnRlZC4KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1JlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcj4gaGFzaCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBl
eHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQoreworICAgIFBBTDo6VEFT
TjE6OlN0cnVjdHVyZSBzcGtpOworICAgIGlmICghUEFMOjpUQVNOMTo6ZGVjb2RlU3RydWN0dXJl
KCZzcGtpLCAiV2ViQ3J5cHRvLlN1YmplY3RQdWJsaWNLZXlJbmZvIiwga2V5RGF0YSkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gVmFsaWRhdGUgYGFsZ29yaXRobS5hbGdvcml0
aG1gLgorICAgIHsKKyAgICAgICAgYXV0byBhbGdvcml0aG0gPSBQQUw6OlRBU04xOjplbGVtZW50
RGF0YShzcGtpLCAiYWxnb3JpdGhtLmFsZ29yaXRobSIpOworICAgICAgICBpZiAoIWFsZ29yaXRo
bSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmICghc3VwcG9ydGVk
QWxnb3JpdGhtSWRlbnRpZmllcihhbGdvcml0aG0tPmRhdGEoKSwgYWxnb3JpdGhtLT5zaXplKCkp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUEFMOjpUQVNOMTo6
U3RydWN0dXJlIHJzYVB1YmxpY0tleTsKKyAgICB7CisgICAgICAgIGF1dG8gc3ViamVjdFB1Ymxp
Y0tleSA9IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRhKHNwa2ksICJzdWJqZWN0UHVibGljS2V5Iik7
CisgICAgICAgIGlmICghc3ViamVjdFB1YmxpY0tleSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIGlmICghUEFMOjpUQVNOMTo6ZGVjb2RlU3RydWN0dXJlKCZyc2FQdWJs
aWNLZXksICJXZWJDcnlwdG8uUlNBUHVibGljS2V5IiwgKnN1YmplY3RQdWJsaWNLZXkpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X3NleHBfdD4gcGxhdGZvcm1LZXk7CisgICAgeworICAgICAgICBhdXRvIG1vZHVsdXMg
PSBQQUw6OlRBU04xOjplbGVtZW50RGF0YShyc2FQdWJsaWNLZXksICJtb2R1bHVzIik7CisgICAg
ICAgIGF1dG8gcHVibGljRXhwb25lbnQgPSBQQUw6OlRBU04xOjplbGVtZW50RGF0YShyc2FQdWJs
aWNLZXksICJwdWJsaWNFeHBvbmVudCIpOworICAgICAgICBpZiAoIW1vZHVsdXMgfHwgIXB1Ymxp
Y0V4cG9uZW50KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZ2NyeV9l
cnJvcl90IGVycm9yID0gZ2NyeV9zZXhwX2J1aWxkKCZwbGF0Zm9ybUtleSwgbnVsbHB0ciwgIihw
dWJsaWMta2V5KHJzYShuICViKShlICViKSkpIiwKKyAgICAgICAgICAgIG1vZHVsdXMtPnNpemUo
KSwgbW9kdWx1cy0+ZGF0YSgpLCBwdWJsaWNFeHBvbmVudC0+c2l6ZSgpLCBwdWJsaWNFeHBvbmVu
dC0+ZGF0YSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAg
ICAgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5UlNBKGlkZW50aWZpZXIsIGhhc2gudmFsdWVf
b3IoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsIENyeXB0b0tleVR5
cGU6OlB1YmxpYywgcGxhdGZvcm1LZXkucmVsZWFzZSgpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7
CiB9CiAKLVJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDxDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyPiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIGJvb2wsIENyeXB0b0tleVVzYWdlQml0bWFwKQor
UmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcj4gaGFzaCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0
YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgUEFMOjpUQVNOMTo6U3RydWN0dXJlIHBrY3M4OworICAgIGlmICghUEFMOjpUQVNO
MTo6ZGVjb2RlU3RydWN0dXJlKCZwa2NzOCwgIldlYkNyeXB0by5Qcml2YXRlS2V5SW5mbyIsIGtl
eURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFZhbGlkYXRlIGB2ZXJz
aW9uYC4KKyAgICB7CisgICAgICAgIGF1dG8gdmVyc2lvbiA9IFBBTDo6VEFTTjE6OmVsZW1lbnRE
YXRhKHBrY3M4LCAidmVyc2lvbiIpOworICAgICAgICBpZiAoIXZlcnNpb24pCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAodmVyc2lvbi0+c2l6ZSgpICE9IDEgfHwg
dmVyc2lvbi0+YXQoMCkgIT0gMHgwMCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIC8vIFZhbGlkYXRlIGBwcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobWAuCisg
ICAgeworICAgICAgICBhdXRvIGFsZ29yaXRobSA9IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRhKHBr
Y3M4LCAicHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0iKTsKKyAgICAgICAgaWYgKCFhbGdv
cml0aG0pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoIXN1cHBv
cnRlZEFsZ29yaXRobUlkZW50aWZpZXIoYWxnb3JpdGhtLT5kYXRhKCksIGFsZ29yaXRobS0+c2l6
ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFBBTDo6VEFT
TjE6OlN0cnVjdHVyZSByc2FQcml2YXRlS2V5OworICAgIHsKKyAgICAgICAgYXV0byBwcml2YXRl
S2V5ID0gUEFMOjpUQVNOMTo6ZWxlbWVudERhdGEocGtjczgsICJwcml2YXRlS2V5Iik7CisgICAg
ICAgIGlmICghcHJpdmF0ZUtleSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIGlmICghUEFMOjpUQVNOMTo6ZGVjb2RlU3RydWN0dXJlKCZyc2FQcml2YXRlS2V5LCAiV2Vi
Q3J5cHRvLlJTQVByaXZhdGVLZXkiLCAqcHJpdmF0ZUtleSkpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBgcHJpdmF0ZUtleS52ZXJzaW9uYC4K
KyAgICB7CisgICAgICAgIGF1dG8gdmVyc2lvbiA9IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRhKHJz
YVByaXZhdGVLZXksICJ2ZXJzaW9uIik7CisgICAgICAgIGlmICghdmVyc2lvbikKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmICh2ZXJzaW9uLT5zaXplKCkgIT0gMSB8
fCB2ZXJzaW9uLT5hdCgwKSAhPSAweDAwKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4gcGxhdGZvcm1LZXk7
CisgICAgeworICAgICAgICBhdXRvIG1vZHVsdXMgPSBQQUw6OlRBU04xOjplbGVtZW50RGF0YShy
c2FQcml2YXRlS2V5LCAibW9kdWx1cyIpOworICAgICAgICBhdXRvIHB1YmxpY0V4cG9uZW50ID0g
UEFMOjpUQVNOMTo6ZWxlbWVudERhdGEocnNhUHJpdmF0ZUtleSwgInB1YmxpY0V4cG9uZW50Iik7
CisgICAgICAgIGF1dG8gcHJpdmF0ZUV4cG9uZW50ID0gUEFMOjpUQVNOMTo6ZWxlbWVudERhdGEo
cnNhUHJpdmF0ZUtleSwgInByaXZhdGVFeHBvbmVudCIpOworICAgICAgICBhdXRvIHByaW1lMSA9
IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRhKHJzYVByaXZhdGVLZXksICJwcmltZTEiKTsKKyAgICAg
ICAgYXV0byBwcmltZTIgPSBQQUw6OlRBU04xOjplbGVtZW50RGF0YShyc2FQcml2YXRlS2V5LCAi
cHJpbWUyIik7CisgICAgICAgIGF1dG8gZXhwb25lbnQxID0gUEFMOjpUQVNOMTo6ZWxlbWVudERh
dGEocnNhUHJpdmF0ZUtleSwgImV4cG9uZW50MSIpOworICAgICAgICBhdXRvIGV4cG9uZW50MiA9
IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRhKHJzYVByaXZhdGVLZXksICJleHBvbmVudDIiKTsKKyAg
ICAgICAgYXV0byBjb2VmZmljaWVudCA9IFBBTDo6VEFTTjE6OmVsZW1lbnREYXRhKHJzYVByaXZh
dGVLZXksICJjb2VmZmljaWVudCIpOworCisgICAgICAgIGlmICghbW9kdWx1cyB8fCAhcHVibGlj
RXhwb25lbnQgfHwgIXByaXZhdGVFeHBvbmVudCB8fCAhcHJpbWUxIHx8ICFwcmltZTIKKyAgICAg
ICAgICAgIHx8ICFleHBvbmVudDEgfHwgIWV4cG9uZW50MiB8fCAhY29lZmZpY2llbnQpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdj
cnlfbXBpX3Q+IHVNUEkoZ2NyeV9tcGlfbmV3KDApKTsKKyAgICAgICAgeworICAgICAgICAgICAg
UEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBwTVBJOworICAgICAgICAgICAgZ2NyeV9l
cnJvcl90IGVycm9yID0gZ2NyeV9tcGlfc2NhbigmcE1QSSwgR0NSWU1QSV9GTVRfVVNHLCBwcmlt
ZTEtPmRhdGEoKSwgcHJpbWUxLT5zaXplKCksIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8
Z2NyeV9tcGlfdD4gcU1QSTsKKyAgICAgICAgICAgIGVycm9yID0gZ2NyeV9tcGlfc2NhbigmcU1Q
SSwgR0NSWU1QSV9GTVRfVVNHLCBwcmltZTItPmRhdGEoKSwgcHJpbWUyLT5zaXplKCksIG51bGxw
dHIpOworICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5k
bGU8Z2NyeV9tcGlfdD4gcWlNUEkoZ2NyeV9tcGlfbmV3KDApKTsKKyAgICAgICAgICAgIGdjcnlf
bXBpX2ludm0odU1QSSwgcU1QSSwgcE1QSSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQQUw6
OkdDcnlwdDo6SGFuZGxlPGdjcnlfc2V4cF90PiBrZXlTZXhwOworICAgICAgICBnY3J5X2Vycm9y
X3QgZXJyb3IgPSBnY3J5X3NleHBfYnVpbGQoJnBsYXRmb3JtS2V5LCBudWxscHRyLCAiKHByaXZh
dGUta2V5KHJzYShuICViKShlICViKShkICViKShwICViKShxICViKSh1ICVNKSkpIiwKKyAgICAg
ICAgICAgIG1vZHVsdXMtPnNpemUoKSwgbW9kdWx1cy0+ZGF0YSgpLAorICAgICAgICAgICAgcHVi
bGljRXhwb25lbnQtPnNpemUoKSwgcHVibGljRXhwb25lbnQtPmRhdGEoKSwKKyAgICAgICAgICAg
IHByaXZhdGVFeHBvbmVudC0+c2l6ZSgpLCBwcml2YXRlRXhwb25lbnQtPmRhdGEoKSwKKyAgICAg
ICAgICAgIHByaW1lMi0+c2l6ZSgpLCBwcmltZTItPmRhdGEoKSwgcHJpbWUxLT5zaXplKCksIHBy
aW1lMS0+ZGF0YSgpLCB1TVBJLmhhbmRsZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19F
UlJfTk9fRVJST1IpIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5UlNBKGlkZW50aWZpZXIsIGhhc2gudmFsdWVfb3Io
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpLCAhIWhhc2gsIENyeXB0b0tleVR5cGU6
OlByaXZhdGUsIHBsYXRmb3JtS2V5LnJlbGVhc2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwog
fQogCiBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0U3Br
aSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAodHlwZSgpICE9IENy
eXB0b0tleVR5cGU6OlB1YmxpYykKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgSU5WQUxJRF9B
Q0NFU1NfRVJSIH07CiAKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIg
fTsKKyAgICBWZWN0b3I8dWludDhfdD4gcnNhUHVibGljS2V5RGF0YTsKKyAgICB7CisgICAgICAg
IFBBTDo6VEFTTjE6OlN0cnVjdHVyZSByc2FQdWJsaWNLZXk7CisgICAgICAgIGludCByZXQgPSBh
c24xX2NyZWF0ZV9lbGVtZW50KFBBTDo6VEFTTjE6OmFzbjFEZWZpbml0aW9ucygpLCAiV2ViQ3J5
cHRvLlJTQVB1YmxpY0tleSIsICZyc2FQdWJsaWNLZXkpOworICAgICAgICBpZiAocmV0ICE9IEFT
TjFfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb257IE9wZXJhdGlvbkVycm9y
IH07CisKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4gbW9kdWx1c1Nl
eHAoZ2NyeV9zZXhwX2ZpbmRfdG9rZW4obV9wbGF0Zm9ybUtleSwgIm4iLCAwKSk7CisgICAgICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9zZXhwX3Q+IHB1YmxpY0V4cG9uZW50U2V4cChnY3J5
X3NleHBfZmluZF90b2tlbihtX3BsYXRmb3JtS2V5LCAiZSIsIDApKTsKKyAgICAgICAgaWYgKCFt
b2R1bHVzU2V4cCB8fCAhcHVibGljRXhwb25lbnRTZXhwKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKworICAgICAgICBhdXRvIG1vZHVsdXMgPSBtcGlT
aWduZWREYXRhKG1vZHVsdXNTZXhwKTsKKyAgICAgICAgYXV0byBwdWJsaWNFeHBvbmVudCA9IG1w
aVNpZ25lZERhdGEocHVibGljRXhwb25lbnRTZXhwKTsKKyAgICAgICAgaWYgKCFtb2R1bHVzIHx8
ICFwdWJsaWNFeHBvbmVudCkKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb257IE9wZXJhdGlv
bkVycm9yIH07CisKKyAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShyc2FQdWJsaWNLZXks
ICJtb2R1bHVzIiwgbW9kdWx1cy0+ZGF0YSgpLCBtb2R1bHVzLT5zaXplKCkpOworICAgICAgICBp
ZiAocmV0ICE9ICBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9ueyBP
cGVyYXRpb25FcnJvciB9OworCisgICAgICAgIHJldCA9IGFzbjFfd3JpdGVfdmFsdWUocnNhUHVi
bGljS2V5LCAicHVibGljRXhwb25lbnQiLCBwdWJsaWNFeHBvbmVudC0+ZGF0YSgpLCBwdWJsaWNF
eHBvbmVudC0+c2l6ZSgpKTsKKyAgICAgICAgaWYgKHJldCAhPSAgQVNOMV9TVUNDRVNTKQorICAg
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKworICAgICAgICBh
dXRvIGRhdGEgPSBQQUw6OlRBU04xOjplbmNvZGVkRGF0YShyc2FQdWJsaWNLZXksICIiKTsKKyAg
ICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9u
RXJyb3IgfTsKKworICAgICAgICByc2FQdWJsaWNLZXlEYXRhID0gV1RGTW92ZShkYXRhLnZhbHVl
KCkpOworICAgIH0KKworICAgIFBBTDo6VEFTTjE6OlN0cnVjdHVyZSBzcGtpOworICAgIHsKKyAg
ICAgICAgaW50IHJldCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQoUEFMOjpUQVNOMTo6YXNuMURlZmlu
aXRpb25zKCksICJXZWJDcnlwdG8uU3ViamVjdFB1YmxpY0tleUluZm8iLCAmc3BraSk7CisgICAg
ICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
bnsgT3BlcmF0aW9uRXJyb3IgfTsKKworICAgICAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlKHNw
a2ksICJhbGdvcml0aG0uYWxnb3JpdGhtIiwgIjEuMi44NDAuMTEzNTQ5LjEuMS4xIiwgMSk7Cisg
ICAgICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJh
eTx1aW50OF90LCAyPiBzX251bGxWYWx1ZSA9IHsgeyAweDA1LCAweDAwIH0gfTsKKyAgICAgICAg
cmV0ID0gYXNuMV93cml0ZV92YWx1ZShzcGtpLCAiYWxnb3JpdGhtLnBhcmFtZXRlcnMiLCBzX251
bGxWYWx1ZS5kYXRhKCksIHNfbnVsbFZhbHVlLnNpemUoKSk7CisgICAgICAgIGlmIChyZXQgIT0g
QVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9uRXJy
b3IgfTsKKworICAgICAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlKHNwa2ksICJzdWJqZWN0UHVi
bGljS2V5IiwgcnNhUHVibGljS2V5RGF0YS5kYXRhKCksIHJzYVB1YmxpY0tleURhdGEuc2l6ZSgp
ICogOCk7CisgICAgICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICB9CisKKyAgICBhdXRvIHJlc3Vs
dCA9IFBBTDo6VEFTTjE6OmVuY29kZWREYXRhKHNwa2ksICIiKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKworICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKIH0KIAogRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4
X3Q+PiBDcnlwdG9LZXlSU0E6OmV4cG9ydFBrY3M4KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIGlmICh0eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSkKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbnsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisKKyAgICBWZWN0b3I8
dWludDhfdD4gcnNhUHJpdmF0ZUtleURhdGE7CisgICAgeworICAgICAgICBQQUw6OlRBU04xOjpT
dHJ1Y3R1cmUgcnNhUHJpdmF0ZUtleTsKKyAgICAgICAgaW50IHJldCA9IGFzbjFfY3JlYXRlX2Vs
ZW1lbnQoUEFMOjpUQVNOMTo6YXNuMURlZmluaXRpb25zKCksICJXZWJDcnlwdG8uUlNBUHJpdmF0
ZUtleSIsICZyc2FQcml2YXRlS2V5KTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1Mp
CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9ueyBPcGVyYXRpb25FcnJvciB9OworCisgICAg
ICAgIHJldCA9IGFzbjFfd3JpdGVfdmFsdWUocnNhUHJpdmF0ZUtleSwgInZlcnNpb24iLCAiMCIs
IDApOworICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb257IE9wZXJhdGlvbkVycm9yIH07CisKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJN
UEkgPQorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IGNoYXIqIG5hbWUpIC0+IGdjcnlfbXBpX3QK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlf
c2V4cF90PiBwYXJhbVNleHAoZ2NyeV9zZXhwX2ZpbmRfdG9rZW4obV9wbGF0Zm9ybUtleSwgbmFt
ZSwgMCkpOworICAgICAgICAgICAgICAgIGlmICghcGFyYW1TZXhwKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgICAgIHJldHVybiBnY3J5X3NleHBf
bnRoX21waShwYXJhbVNleHAsIDEsIEdDUllNUElfRk1UX1VTRyk7CisgICAgICAgICAgICB9Owor
CisgICAgICAgIGF1dG8gcGFyYW1ldGVyRGF0YSA9CisgICAgICAgICAgICBbdGhpc10oY29uc3Qg
Y2hhciogbmFtZSkgLT4gc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X3NleHBfdD4gcGFy
YW1TZXhwKGdjcnlfc2V4cF9maW5kX3Rva2VuKG1fcGxhdGZvcm1LZXksIG5hbWUsIDApKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXBhcmFtU2V4cCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgICAgICAgICAgICAgIHJldHVybiBtcGlTaWduZWREYXRhKHBh
cmFtU2V4cCk7CisgICAgICAgICAgICB9OworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
bW9kdWx1cyA9IHBhcmFtZXRlckRhdGEoIm4iKTsKKyAgICAgICAgICAgIGF1dG8gcHVibGljRXhw
b25lbnQgPSBwYXJhbWV0ZXJEYXRhKCJlIik7CisgICAgICAgICAgICBhdXRvIHByaXZhdGVFeHBv
bmVudCA9IHBhcmFtZXRlckRhdGEoImQiKTsKKyAgICAgICAgICAgIGF1dG8gcHJpbWUxID0gcGFy
YW1ldGVyRGF0YSgicSIpOworICAgICAgICAgICAgYXV0byBwcmltZTIgPSBwYXJhbWV0ZXJEYXRh
KCJwIik7CisgICAgICAgICAgICBpZiAoIW1vZHVsdXMgfHwgIXB1YmxpY0V4cG9uZW50IHx8ICFw
cml2YXRlRXhwb25lbnQgfHwgIXByaW1lMSB8fCAhcHJpbWUyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb257IE9wZXJhdGlvbkVycm9yIH07CisKKyAgICAgICAgICAgIHJldCA9IGFz
bjFfd3JpdGVfdmFsdWUocnNhUHJpdmF0ZUtleSwgIm1vZHVsdXMiLCBtb2R1bHVzLT5kYXRhKCks
IG1vZHVsdXMtPnNpemUoKSk7CisgICAgICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykK
KyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9ueyBPcGVyYXRpb25FcnJvciB9OworCisg
ICAgICAgICAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlKHJzYVByaXZhdGVLZXksICJwdWJsaWNF
eHBvbmVudCIsIHB1YmxpY0V4cG9uZW50LT5kYXRhKCksIHB1YmxpY0V4cG9uZW50LT5zaXplKCkp
OworICAgICAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKworICAgICAgICAgICAgcmV0ID0g
YXNuMV93cml0ZV92YWx1ZShyc2FQcml2YXRlS2V5LCAicHJpdmF0ZUV4cG9uZW50IiwgcHJpdmF0
ZUV4cG9uZW50LT5kYXRhKCksIHByaXZhdGVFeHBvbmVudC0+c2l6ZSgpKTsKKyAgICAgICAgICAg
IGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b257IE9wZXJhdGlvbkVycm9yIH07CisKKyAgICAgICAgICAgIHJldCA9IGFzbjFfd3JpdGVfdmFs
dWUocnNhUHJpdmF0ZUtleSwgInByaW1lMSIsIHByaW1lMS0+ZGF0YSgpLCBwcmltZTEtPnNpemUo
KSk7CisgICAgICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9ueyBPcGVyYXRpb25FcnJvciB9OworCisgICAgICAgICAgICByZXQg
PSBhc24xX3dyaXRlX3ZhbHVlKHJzYVByaXZhdGVLZXksICJwcmltZTIiLCBwcmltZTItPmRhdGEo
KSwgcHJpbWUyLT5zaXplKCkpOworICAgICAgICAgICAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1Mp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKyAg
ICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2Ny
eV9tcGlfdD4gZE1QSShwYXJhbWV0ZXJNUEkoImQiKSk7CisgICAgICAgICAgICBQQUw6OkdDcnlw
dDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHBNUEkocGFyYW1ldGVyTVBJKCJxIikpOworICAgICAgICAg
ICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBxTVBJKHBhcmFtZXRlck1QSSgicCIp
KTsKKyAgICAgICAgICAgIGlmICghZE1QSSB8fCAhcE1QSSB8fCAhcU1QSSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9ueyBPcGVyYXRpb25FcnJvciB9OworCisgICAgICAgICAgICAv
LyBkcAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8
Z2NyeV9tcGlfdD4gZHBNUEkoZ2NyeV9tcGlfc2V0X3VpKG51bGxwdHIsIDApKTsKKyAgICAgICAg
ICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IHBtMU1QSShnY3J5X21waV9z
ZXQobnVsbHB0ciwgcE1QSSkpOworICAgICAgICAgICAgICAgIGdjcnlfbXBpX3N1Yl91aShwbTFN
UEksIHBtMU1QSSwgMSk7CisgICAgICAgICAgICAgICAgZ2NyeV9tcGlfbW9kKGRwTVBJLCBkTVBJ
LCBwbTFNUEkpOworCisgICAgICAgICAgICAgICAgYXV0byBkcCA9IG1waVNpZ25lZERhdGEoZHBN
UEkpOworICAgICAgICAgICAgICAgIGlmICghZHApCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb257IE9wZXJhdGlvbkVycm9yIH07CisKKyAgICAgICAgICAgICAgICByZXQgPSBh
c24xX3dyaXRlX3ZhbHVlKHJzYVByaXZhdGVLZXksICJleHBvbmVudDEiLCBkcC0+ZGF0YSgpLCBk
cC0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZHEKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGRxTVBJKGdjcnlfbXBpX3Nl
dF91aShudWxscHRyLCAwKSk7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxn
Y3J5X21waV90PiBxbTFNUEkoZ2NyeV9tcGlfc2V0KG51bGxwdHIsIHFNUEkpKTsKKyAgICAgICAg
ICAgICAgICBnY3J5X21waV9zdWJfdWkocW0xTVBJLCBxbTFNUEksIDEpOworICAgICAgICAgICAg
ICAgIGdjcnlfbXBpX21vZChkcU1QSSwgZE1QSSwgcW0xTVBJKTsKKworICAgICAgICAgICAgICAg
IGF1dG8gZHEgPSBtcGlTaWduZWREYXRhKGRxTVBJKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRx
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9ueyBPcGVyYXRpb25FcnJvciB9
OworCisgICAgICAgICAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShyc2FQcml2YXRlS2V5
LCAiZXhwb25lbnQyIiwgZHEtPmRhdGEoKSwgZHEtPnNpemUoKSk7CisgICAgICAgICAgICAgICAg
aWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb257IE9wZXJhdGlvbkVycm9yIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IHFpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxn
Y3J5X21waV90PiBxaU1QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwgMCkpOworICAgICAgICAg
ICAgICAgIGdjcnlfbXBpX2ludm0ocWlNUEksIHFNUEksIHBNUEkpOworCisgICAgICAgICAgICAg
ICAgYXV0byBxaSA9IG1waVNpZ25lZERhdGEocWlNUEkpOworICAgICAgICAgICAgICAgIGlmICgh
cWkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb257IE9wZXJhdGlvbkVycm9y
IH07CisKKyAgICAgICAgICAgICAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlKHJzYVByaXZhdGVL
ZXksICJjb2VmZmljaWVudCIsIHFpLT5kYXRhKCksIHFpLT5zaXplKCkpOworICAgICAgICAgICAg
ICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9ueyBPcGVyYXRpb25FcnJvciB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShyc2FQcml2YXRlS2V5LCAib3RoZXJQcmlt
ZUluZm9zIiwgbnVsbHB0ciwgMCk7CisgICAgICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQor
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9uRXJyb3IgfTsKKworICAgICAg
ICBhdXRvIGRhdGEgPSBQQUw6OlRBU04xOjplbmNvZGVkRGF0YShyc2FQcml2YXRlS2V5LCAiIik7
CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb257IE9wZXJh
dGlvbkVycm9yIH07CisKKyAgICAgICAgcnNhUHJpdmF0ZUtleURhdGEgPSBXVEZNb3ZlKGRhdGEu
dmFsdWUoKSk7CisgICAgfQorCisgICAgUEFMOjpUQVNOMTo6U3RydWN0dXJlIHBrY3M4OworICAg
IHsKKyAgICAgICAgaW50IHJldCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQoUEFMOjpUQVNOMTo6YXNu
MURlZmluaXRpb25zKCksICJXZWJDcnlwdG8uUHJpdmF0ZUtleUluZm8iLCAmcGtjczgpOworICAg
ICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b257IE9wZXJhdGlvbkVycm9yIH07CisKKyAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShw
a2NzOCwgInZlcnNpb24iLCAiMCIsIDApOworICAgICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VT
UykKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb257IE9wZXJhdGlvbkVycm9yIH07CisKKyAg
ICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShwa2NzOCwgInByaXZhdGVLZXlBbGdvcml0aG0u
YWxnb3JpdGhtIiwgIjEuMi44NDAuMTEzNTQ5LjEuMS4xIiwgMSk7CisgICAgICAgIGlmIChyZXQg
IT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3BlcmF0aW9u
RXJyb3IgfTsKKworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyPiBz
X251bGxWYWx1ZSA9IHsgeyAweDA1LCAweDAwIH0gfTsKKyAgICAgICAgcmV0ID0gYXNuMV93cml0
ZV92YWx1ZShwa2NzOCwgInByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyIsIHNfbnVsbFZh
bHVlLmRhdGEoKSwgc19udWxsVmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04x
X1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9ueyBPcGVyYXRpb25FcnJvciB9
OworCisgICAgICAgIHJldCA9IGFzbjFfd3JpdGVfdmFsdWUocGtjczgsICJwcml2YXRlS2V5Iiwg
cnNhUHJpdmF0ZUtleURhdGEuZGF0YSgpLCByc2FQcml2YXRlS2V5RGF0YS5zaXplKCkpOworICAg
ICAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b257IE9wZXJhdGlvbkVycm9yIH07CisKKyAgICAgICAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZShw
a2NzOCwgImF0dHJpYnV0ZXMiLCBudWxscHRyLCAwKTsKKyAgICAgICAgaWYgKHJldCAhPSBBU04x
X1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9ueyBPcGVyYXRpb25FcnJvciB9
OworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gUEFMOjpUQVNOMTo6ZW5jb2RlZERhdGEocGtj
czgsICIiKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbnsgT3Bl
cmF0aW9uRXJyb3IgfTsKIAotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VS
UiB9OworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGll
cy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9HQ3J5cHRVdGlsaXRpZXMuaAppbmRl
eCA1NTE0MzllZTdhMy4uYWZlYWJmZTBhNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvR0NyeXB0VXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9HQ3J5cHRVdGlsaXRpZXMuaApAQCAtMTA1LDE2ICsxMDUsMTEgQEAgc3RhdGljIGlu
bGluZSBzdGQ6Om9wdGlvbmFsPFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG0+IGhhc2hDcnlw
dG9EaWdlc3RBbGdvcmkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IG1waURhdGEoZ2NyeV9zZXhwX3QgcGFyYW1TZXhwKQorc3RhdGljIGlu
bGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gbXBpRGF0YShnY3J5X21waV90IG1w
aSkKIHsKLSAgICAvLyBSZXRyaWV2ZSB0aGUgTVBJIHZhbHVlIHN0b3JlZCBpbiB0aGUgcy1leHBy
ZXNzaW9uOiAobmFtZSBtcGktZGF0YSkKLSAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBp
X3Q+IHBhcmFtTVBJKGdjcnlfc2V4cF9udGhfbXBpKHBhcmFtU2V4cCwgMSwgR0NSWU1QSV9GTVRf
VVNHKSk7Ci0gICAgaWYgKCFwYXJhbU1QSSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQogICAgIC8vIFF1ZXJ5IHRoZSBkYXRhIGxlbmd0aCBmaXJzdCB0byBwcm9wZXJseSBwcmVwYXJl
IHRoZSBidWZmZXIuCiAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAwOwotICAgIGdjcnlfZXJyb3Jf
dCBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgbnVsbHB0ciwgMCwgJmRh
dGFMZW5ndGgsIHBhcmFtTVBJKTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X21waV9w
cmludChHQ1JZTVBJX0ZNVF9VU0csIG51bGxwdHIsIDAsICZkYXRhTGVuZ3RoLCBtcGkpOwogICAg
IGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CiAgICAgICAgIFBBTDo6R0NyeXB0Ojps
b2dFcnJvcihlcnJvcik7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0xMjIsNyAr
MTE3LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gbXBp
RGF0YShnY3J5X3NleHBfdCBwYXJhbVNleHApCiAKICAgICAvLyBGaW5hbGx5LCBjb3B5IHRoZSBN
UEkgZGF0YSBpbnRvIGEgcHJvcGVybHktc2l6ZWQgYnVmZmVyLgogICAgIFZlY3Rvcjx1aW50OF90
PiBvdXRwdXQoZGF0YUxlbmd0aCk7Ci0gICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJ
X0ZNVF9VU0csIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIG51bGxwdHIsIHBhcmFtTVBJ
KTsKKyAgICBlcnJvciA9IGdjcnlfbXBpX3ByaW50KEdDUllNUElfRk1UX1VTRywgb3V0cHV0LmRh
dGEoKSwgb3V0cHV0LnNpemUoKSwgbnVsbHB0ciwgbXBpKTsKICAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikgewogICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOwog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpAQCAtMTMxLDQgKzEyNiwzOCBAQCBzdGF0aWMg
aW5saW5lIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBtcGlEYXRhKGdjcnlfc2V4cF90
IHBhcmFtU2V4cCkKICAgICByZXR1cm4gb3V0cHV0OwogfQogCitzdGF0aWMgaW5saW5lIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBtcGlEYXRhKGdjcnlfc2V4cF90IHBhcmFtU2V4cCkK
K3sKKyAgICAvLyBSZXRyaWV2ZSB0aGUgTVBJIHZhbHVlIHN0b3JlZCBpbiB0aGUgcy1leHByZXNz
aW9uOiAobmFtZSBtcGktZGF0YSkKKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+
IHBhcmFtTVBJKGdjcnlfc2V4cF9udGhfbXBpKHBhcmFtU2V4cCwgMSwgR0NSWU1QSV9GTVRfVVNH
KSk7CisgICAgaWYgKCFwYXJhbU1QSSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiBtcGlEYXRhKHBhcmFtTVBJKTsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gbXBpU2lnbmVkRGF0YShnY3J5X21waV90IG1waSkKK3sK
KyAgICBhdXRvIGRhdGEgPSBtcGlEYXRhKG1waSk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKGRhdGEtPmF0KDApICYgMHg4MCkKKyAgICAg
ICAgZGF0YS0+aW5zZXJ0KDAsIDB4MDApOworCisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRp
YyBpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IG1waVNpZ25lZERhdGEoZ2Ny
eV9zZXhwX3QgcGFyYW1TZXhwKQoreworICAgIGF1dG8gZGF0YSA9IG1waURhdGEocGFyYW1TZXhw
KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBp
ZiAoZGF0YS0+YXQoMCkgJiAweDgwKQorICAgICAgICBkYXRhLT5pbnNlcnQoMCwgMHgwMCk7CisK
KyAgICByZXR1cm4gZGF0YTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdD
cnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L1NlcmlhbGl6ZWRDcnlwdG9L
ZXlXcmFwR0NyeXB0LmNwcAppbmRleCA5NDk5ODlmOTRlMS4uNGUyZDQ1NDc2OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2VyaWFsaXplZENyeXB0b0tleVdyYXBH
Q3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvU2VyaWFsaXplZENy
eXB0b0tleVdyYXBHQ3J5cHQuY3BwCkBAIC0yOSwzNSArMjksMTUyIEBACiAjaWYgRU5BQkxFKFNV
QlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHBh
bC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0
aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KFZl
Y3Rvcjx1aW50OF90PiYgbWFzdGVyS2V5KQorYm9vbCBnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVy
S2V5KFZlY3Rvcjx1aW50OF90PiYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBVTlVT
RURfUEFSQU0obWFzdGVyS2V5KTsKLQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCB3cmFw
U2VyaWFsaXplZENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIG1hc3RlcktleSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc3RlcktleSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGtleSk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGtlaygxNik7CisgICAgZ2NyeV9yYW5kb21pemUoa2VrLmRhdGEoKSwga2VrLnNpemUo
KSwgR0NSWV9WRVJZX1NUUk9OR19SQU5ET00pOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIFZl
Y3Rvcjx1aW50OF90PiB3cmFwcGVkS0VLKDI0KTsKKyAgICB7CisgICAgICAgIGF1dG8gYWxnb3Jp
dGhtID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUobWFzdGVyS2V5LnNpemUo
KSAqIDgpOworICAgICAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRs
ZTsKKyAgICAgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFuZGxl
LCAqYWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0FFU1dSQVAsIDApOworICAgICAgICBpZiAo
ZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShoYW5kbGUsIG1hc3RlcktleS5kYXRh
KCksIG1hc3RlcktleS5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19F
UlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9IGdjcnlf
Y2lwaGVyX2VuY3J5cHQoaGFuZGxlLCB3cmFwcGVkS0VLLmRhdGEoKSwgd3JhcHBlZEtFSy5zaXpl
KCksIGtlay5kYXRhKCksIGtlay5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZW5jcnlwdGVkS2V5KGtleS5zaXplKCkpOworICAgIFZlY3Rvcjx1aW50OF90
PiB0YWcoMTYpOworICAgIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X2NpcGhl
cl9oZF90PiBoYW5kbGU7CisgICAgICAgIGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVy
X29wZW4oJmhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0dDTSwg
MCk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGhhbmRs
ZSwga2VrLmRhdGEoKSwga2VrLnNpemUoKSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJS
X05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVycm9yID0g
Z2NyeV9jaXBoZXJfZW5jcnlwdChoYW5kbGUsIGVuY3J5cHRlZEtleS5kYXRhKCksIGVuY3J5cHRl
ZEtleS5zaXplKCksIGtleS5kYXRhKCksIGtleS5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3Ig
IT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBlcnJvciA9IGdjcnlfY2lwaGVyX2dldHRhZyhoYW5kbGUsIHRhZy5kYXRhKCksIHRhZy5zaXpl
KCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBtYWdpY1szXSArIHZlcnNpb25bMV0gKyB3
cmFwcGVkS0VLWzI0XSArIGVuY3J5cHRlZEtleVtsZW5ndGgoa2V5KV0gKyB0YWdbMTZdICsgbWFn
aWNbM10KKyAgICBzaXplX3Qgc2VyaWFsaXplZExlbmd0aCA9IDMgKyAxICsgMjQgKyBlbmNyeXB0
ZWRLZXkuc2l6ZSgpICsgMTYgKyAzOworICAgIHJlc3VsdC5yZXNpemUoc2VyaWFsaXplZExlbmd0
aCk7CisgICAgcmVzdWx0WzBdID0gMHgwNDsKKyAgICByZXN1bHRbMV0gPSAweDA4OworICAgIHJl
c3VsdFsyXSA9IDB4MTU7CisgICAgcmVzdWx0WzNdID0gMHgwMTsKKyAgICBzdGQ6Om1lbWNweShy
ZXN1bHQuZGF0YSgpICsgNCwgd3JhcHBlZEtFSy5kYXRhKCksIDI0KTsKKyAgICBzdGQ6Om1lbWNw
eShyZXN1bHQuZGF0YSgpICsgMjgsIGVuY3J5cHRlZEtleS5kYXRhKCksIGVuY3J5cHRlZEtleS5z
aXplKCkpOworICAgIHN0ZDo6bWVtY3B5KHJlc3VsdC5kYXRhKCkgKyAyOCArIGVuY3J5cHRlZEtl
eS5zaXplKCksIHRhZy5kYXRhKCksIDE2KTsKKyAgICByZXN1bHRbc2VyaWFsaXplZExlbmd0aCAt
IDNdID0gMHgxNjsKKyAgICByZXN1bHRbc2VyaWFsaXplZExlbmd0aCAtIDJdID0gMHgyMzsKKyAg
ICByZXN1bHRbc2VyaWFsaXplZExlbmd0aCAtIDFdID0gMHg0MjsKKworICAgIHJldHVybiB0cnVl
OwogfQogCiBib29sIHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBtYXN0ZXJLZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXkpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBVTlVTRURfUEFS
QU0obWFzdGVyS2V5KTsKLSAgICBVTlVTRURfUEFSQU0od3JhcHBlZEtleSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGtleSk7CisgICAgLy8gbWFnaWNbM10gKyB2ZXJzaW9uWzFdICsgd3JhcHBlZEtFS1sy
NF0gKyBlbmNyeXB0ZWRLZXlbbGVuZ3RoKGtleSldICsgdGFnWzE2XSArIG1hZ2ljWzNdCisgICAg
c2l6ZV90IHNlcmlhbGl6ZWRMZW5ndGggPSB3cmFwcGVkS2V5LnNpemUoKTsKKyAgICBpZiAoc2Vy
aWFsaXplZExlbmd0aCA8IDMgKyAxICsgMjQgKyAxNiArIDMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICB1aW50OF90IG1hZ2ljMVszXSA9IHsgMHgwNCwg
MHgwOCwgMHgxNSB9OworICAgIGlmIChzdGQ6Om1lbWNtcCh3cmFwcGVkS2V5LmRhdGEoKSwgbWFn
aWMxLCAzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVpbnQ4X3QgbWFnaWMyWzNdID0g
eyAweDE2LCAweDIzLCAweDQyIH07CisgICAgaWYgKHN0ZDo6bWVtY21wKHdyYXBwZWRLZXkuZGF0
YSgpICsgc2VyaWFsaXplZExlbmd0aCAtIDMsIG1hZ2ljMiwgMykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAod3JhcHBlZEtleVszXSAhPSAweDAxKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBWZWN0b3I8dWludDhfdD4gd3JhcHBlZEtFSygyNCk7CisgICAgc3RkOjptZW1j
cHkod3JhcHBlZEtFSy5kYXRhKCksIHdyYXBwZWRLZXkuZGF0YSgpICsgNCwgMjQpOworCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGVuY3J5cHRlZEtleShzZXJpYWxpemVkTGVuZ3RoIC0gMyAtIDEgLSAy
NCAtIDE2IC0gMyk7CisgICAgc3RkOjptZW1jcHkoZW5jcnlwdGVkS2V5LmRhdGEoKSwgd3JhcHBl
ZEtleS5kYXRhKCkgKyAyOCwgZW5jcnlwdGVkS2V5LnNpemUoKSk7CisKKyAgICBWZWN0b3I8dWlu
dDhfdD4gdGFnKDE2KTsKKyAgICBzdGQ6Om1lbWNweSh0YWcuZGF0YSgpLCB3cmFwcGVkS2V5LmRh
dGEoKSArIDI4ICsgZW5jcnlwdGVkS2V5LnNpemUoKSwgMTYpOworCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGtlaygxNik7CisgICAgeworICAgICAgICBhdXRvIGFsZ29yaXRobSA9IFBBTDo6R0NyeXB0
OjphZXNBbGdvcml0aG1Gb3JLZXlTaXplKG1hc3RlcktleS5zaXplKCkgKiA4KTsKKyAgICAgICAg
aWYgKCFhbGdvcml0aG0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUEFM
OjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X2NpcGhlcl9oZF90PiBoYW5kbGU7CisgICAgICAgIGdjcnlf
ZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NS
WV9DSVBIRVJfTU9ERV9BRVNXUkFQLCAwKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJf
Tk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBn
Y3J5X2NpcGhlcl9zZXRrZXkoaGFuZGxlLCBtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6
ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KGhh
bmRsZSwga2VrLmRhdGEoKSwga2VrLnNpemUoKSwgd3JhcHBlZEtFSy5kYXRhKCksIHdyYXBwZWRL
RUsuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRlY3J5
cHRlZEtleShlbmNyeXB0ZWRLZXkuc2l6ZSgpKTsKKyAgICBWZWN0b3I8dWludDhfdD4gYWN0dWFs
VGFnKDE2KTsKKyAgICB7CisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJf
aGRfdD4gaGFuZGxlOworICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9v
cGVuKCZoYW5kbGUsIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9HQ00sIDAp
OworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShoYW5kbGUs
IGtlay5kYXRhKCksIGtlay5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBlcnJvciA9IGdj
cnlfY2lwaGVyX2RlY3J5cHQoaGFuZGxlLCBkZWNyeXB0ZWRLZXkuZGF0YSgpLCBkZWNyeXB0ZWRL
ZXkuc2l6ZSgpLCBlbmNyeXB0ZWRLZXkuZGF0YSgpLCBlbmNyeXB0ZWRLZXkuc2l6ZSgpKTsKKyAg
ICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9nZXR0YWcoaGFuZGxlLCBhY3R1
YWxUYWcuZGF0YSgpLGFjdHVhbFRhZy5zaXplKCkpOworICAgICAgICBpZiAoZXJyb3IgIT0gR1BH
X0VSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoY29uc3RhbnRUaW1lTWVtY21wKHRhZy5kYXRhKCksIGFjdHVhbFRhZy5kYXRhKCksIDE2KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAga2V5ID0gV1RGTW92ZShkZWNyeXB0ZWRLZXkp
OworICAgIHJldHVybiB0cnVlOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmlu
ZExpYnRhc24xLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRMaWJ0YXNuMS5jbWFrZQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGQ2NDMxZjIxOTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvY21ha2UvRmluZExpYnRhc24xLmNtYWtlCkBAIC0wLDAgKzEsNDQgQEAK
KyMgLSBUcnkgdG8gZmluZCBsaWJ0YXNuMS4KKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5l
CisjCisjICBMSUJUQVNOMV9JTkNMVURFX0RJUlMgLSB0aGUgbGlidGFzbjEgaW5jbHVkZSBkaXJl
Y3RvcmllcworIyAgTElCVEFTTjFfTElCUkFSSUVTIC0gdGhlIGxpYnRhc24xIGxpYnJhcmllcy4K
KyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisjIENvcHly
aWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworZmluZF9wYWNrYWdlKFBrZ0NvbmZpZykKK3BrZ19jaGVja19tb2R1bGVzKFBD
X0xJQlRBU04xIGxpYnRhc24xKQorCitmaW5kX3BhdGgoTElCVEFTTjFfSU5DTFVERV9ESVJTCisg
ICAgTkFNRVMgbGlidGFzbjEuaAorICAgIFBBVEhTICR7UENfTElCVEFTTjFfSU5DTFVERURJUn0g
JHtQQ19MSUJUQVNOMV9JTkNMVURFX0RJUlN9CispCisKK2ZpbmRfbGlicmFyeShMSUJUQVNOMV9M
SUJSQVJJRVMKKyAgICBOQU1FUyB0YXNuMQorICAgIFBBVEhTICR7UENfTElCVEFTTjFfTElCRElS
fSAke1BDX0xJQlRBU04xX0xJQlJBUllfRElSU30KKykKKworbWFya19hc19hZHZhbmNlZChMSUJU
QVNOMV9JTkNMVURFX0RJUlMgTElCVEFTTjFfTElCUkFSSUVTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L2NtYWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpp
bmRleCBkZjMwOTYyZTZmOS4uZjdhODAxODAyMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9P
cHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0y
NzEsNiArMjcxLDcgQEAgaWYgKEVOQUJMRV9NRURJQV9TVFJFQU0gT1IgRU5BQkxFX1dFQl9SVEMp
CiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX1NVQlRMRV9DUllQVE8pCisgICAgZmluZF9wYWNrYWdl
KExpYnRhc24xIFJFUVVJUkVEKQogICAgIGlmIChMSUJHQ1JZUFRfVkVSU0lPTiBWRVJTSU9OX0xF
U1MgMS43LjApCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImxpYmdjcnlwdCAxLjcuMCBp
cyByZXF1aXJlZCB0byBlbmFibGUgV2ViIENyeXB0byBBUEkgc3VwcG9ydC4iKQogICAgIGVuZGlm
ICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9PcHRpb25zV1BFLmNtYWtlCmluZGV4IGRjNWNhYWYzODgzLi5jNzk5NTM2OWIxMiAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNXUEUuY21ha2UKQEAgLTExOSw2ICsxMTksNyBAQCBpZiAoRU5BQkxFX0FDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfU1VCVExFX0NSWVBUTykKKyAg
ICBmaW5kX3BhY2thZ2UoTGlidGFzbjEgUkVRVUlSRUQpCiAgICAgaWYgKExJQkdDUllQVF9WRVJT
SU9OIFZFUlNJT05fTEVTUyAxLjcuMCkKICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAibGli
Z2NyeXB0IDEuNy4wIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBXZWIgQ3J5cHRvIEFQSSBzdXBwb3J0
LiIpCiAgICAgZW5kaWYgKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314466</attachid>
            <date>2017-07-03 01:59:18 -0700</date>
            <delta_ts>2017-07-03 01:59:18 -0700</delta_ts>
            <desc>Remaining changes</desc>
            <filename>crypto.patch</filename>
            <type>text/plain</type>
            <size>522</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zICAgICAgICAgIHwgIDgz
ICstLS0tCiBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by90YXNuMS9VdGlsaXRpZXMuY3Bw
ICB8ICAgNiArLQogU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vdGFzbjEvV2ViQ3J5cHRv
LmFzbiAgfCAgIDggKwogU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlFQ0dD
cnlwdC5jcHAgfCAyMzcgKysrKysrKysrKysrLQogLi4uL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9LZXlSU0FHQ3J5cHQuY3BwICAgfCAzNzggKysrKysrKysrKysrKysrKysrKystCiBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0dDcnlwdFV0aWxpdGllcy5oICAgICB8ICAyNCArKwog
Li4uL2djcnlwdC9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdDcnlwdC5jcHAgICAgICAgfCAxOTIg
KysrKysrKysrKy0KIDcgZmlsZXMgY2hhbmdlZCwgODIyIGluc2VydGlvbnMoKyksIDEwNiBkZWxl
dGlvbnMoLSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>