<?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>128748</bug_id>
          
          <creation_ts>2014-02-13 10:20:37 -0800</creation_ts>
          <short_desc>WebCrypto algorithms should be exposed via KeyAlgorithm interface</short_desc>
          <delta_ts>2016-09-14 17:23:13 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=160877</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>160877</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>980352</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-13 10:20:37 -0800</bug_when>
    <thetext>WebCrypto spec used to have Key.algorithm as dictionary, which is invalid per WebIDL.

Now it&apos;s a KeyAlgorithm interface, and there is going to be a better specification of what&apos;s exposed for each type of key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980360</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-13 10:31:52 -0800</bug_when>
    <thetext>See &lt;https://dvcs.w3.org/hg/webcrypto-api/rev/2fa3494f0179&gt; and &lt;https://dvcs.w3.org/hg/webcrypto-api/rev/2fa3494f0179&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211174</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-07-14 15:20:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/27359438&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226887</commentid>
    <comment_count>3</comment_count>
      <attachid>288055</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-06 15:46:05 -0700</bug_when>
    <thetext>Created attachment 288055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226889</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-06 15:47:45 -0700</bug_when>
    <thetext>Attachment 288055 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 in 16 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>1227626</commentid>
    <comment_count>5</comment_count>
      <attachid>288274</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-08 10:29:10 -0700</bug_when>
    <thetext>Created attachment 288274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227629</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 10:31:05 -0700</bug_when>
    <thetext>Attachment 288274 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 in 16 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>1227984</commentid>
    <comment_count>7</comment_count>
      <attachid>288274</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-08 18:36:37 -0700</bug_when>
    <thetext>Comment on attachment 288274
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288274&amp;action=review

Very nice! r=me. Please correct the typos I mentioned before landing.

&gt; Source/WebCore/ChangeLog:12
&gt; +        No change of behaviors.

No change in behavior, so no new tests.

&gt; Source/WebCore/ChangeLog:17
&gt; +        Remove CryptoAlgorithmDescriptionBuilder.cpp.

Do you know why this class existed? Seems like it might have been intended to be fleshed out later, but was never completed.

&gt; Source/WebCore/ChangeLog:25
&gt; +        Get ride of dependency on CryptoAlgorithmDescriptionBuilder.

Get rid of dependency ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228915</commentid>
    <comment_count>8</comment_count>
      <attachid>288274</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-12 14:54:13 -0700</bug_when>
    <thetext>Comment on attachment 288274
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288274&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:17
&gt;&gt; +        Remove CryptoAlgorithmDescriptionBuilder.cpp.
&gt; 
&gt; Do you know why this class existed? Seems like it might have been intended to be fleshed out later, but was never completed.

Previously, this is the base (virtual) class of JSCryptoAlgorithmBuilder, which is created to add information to the JSObject that describes algorithms binding to the key. I am not quite sure why it is needed, but I assume that Alexey did it before is try to separate codes relating to JS from non-JS ones. So, with this class, the callers, i.e. non-JS codes will not need the knowledge of underlying implementation, i.e. JS codes to add information to describe corresponding algorithms.
However, in the new implementation, I will only return the KeyAlgorithm object to JS codes and the JS codes itself convert the object to a JSObject. Therefore, this base class is not needed. The actual JSCryptoAlgorithmBuilder is therefore kept to do the conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228918</commentid>
    <comment_count>9</comment_count>
      <attachid>288274</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-12 14:59:50 -0700</bug_when>
    <thetext>Comment on attachment 288274
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288274&amp;action=review

Thanks Brent for reviewing my patch.

&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt; +        No change of behaviors.
&gt; 
&gt; No change in behavior, so no new tests.

Fixed.

&gt;&gt; Source/WebCore/ChangeLog:25
&gt;&gt; +        Get ride of dependency on CryptoAlgorithmDescriptionBuilder.
&gt; 
&gt; Get rid of dependency ...

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228920</commentid>
    <comment_count>10</comment_count>
      <attachid>288613</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-12 15:03:13 -0700</bug_when>
    <thetext>Created attachment 288613
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228923</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 15:04:58 -0700</bug_when>
    <thetext>Attachment 288613 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 in 16 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>1229037</commentid>
    <comment_count>12</comment_count>
      <attachid>288655</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-12 19:09:28 -0700</bug_when>
    <thetext>Created attachment 288655
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229038</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 19:12:24 -0700</bug_when>
    <thetext>Attachment 288655 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 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>1229040</commentid>
    <comment_count>14</comment_count>
      <attachid>288655</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-12 19:13:50 -0700</bug_when>
    <thetext>Comment on attachment 288655
Patch for landing

View in context: https://bugs.webkit.org/attachment.cgi?id=288655&amp;action=review

&gt; Source/WebCore/ChangeLog:10
&gt; +        defined by the spec.

Please link to the spec that define this interface in the Changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229041</commentid>
    <comment_count>15</comment_count>
      <attachid>288657</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-12 19:14:47 -0700</bug_when>
    <thetext>Created attachment 288657
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229044</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 19:18:11 -0700</bug_when>
    <thetext>Attachment 288657 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 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>1229046</commentid>
    <comment_count>17</comment_count>
      <attachid>288657</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-12 19:26:24 -0700</bug_when>
    <thetext>Comment on attachment 288657
Patch for landing

View in context: https://bugs.webkit.org/attachment.cgi?id=288657&amp;action=review

&gt; Source/WebCore/ChangeLog:3
&gt; +        WebCrypto algorithms should be exposed via KeyAlgorithm interface

KeyAlgorithm is a dictionary, not an interface

&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:48
&gt; +        AesKeyAlgorithm&amp; aesAlgorithm = downcast&lt;AesKeyAlgorithm&gt;(algorithm.get());

auto&amp;

&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:54
&gt; +        HmacKeyAlgorithm&amp; hmacAlgorithm = downcast&lt;HmacKeyAlgorithm&gt;(algorithm.get());

auto&amp;

&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:63
&gt; +        RsaHashedKeyAlgorithm&amp; rsaAlgorithm = downcast&lt;RsaHashedKeyAlgorithm&gt;(algorithm.get());

auto&amp;

&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:73
&gt; +        RsaKeyAlgorithm&amp; rsaAlgorithm = downcast&lt;RsaKeyAlgorithm&gt;(algorithm.get());

auto&amp;

&gt; Source/WebCore/crypto/CryptoKey.h:64
&gt; +    String name;

Why is this public?

&gt; Source/WebCore/crypto/CryptoKey.h:66
&gt; +    KeyAlgorithm(const String&amp; n)

RefCounted classes normally do not have a public constructor but a factory function that returns a Ref&lt;&gt; since we don&apos;t want those allocated on the stack.

&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:39
&gt; +    size_t length;

Why is this public?

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:38
&gt; +    KeyHashAlgorithm hash;

Why are those public?

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:52
&gt; +    size_t modulusLength;

Why are those public?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229047</commentid>
    <comment_count>18</comment_count>
      <attachid>288657</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-12 19:30:02 -0700</bug_when>
    <thetext>Comment on attachment 288657
Patch for landing

View in context: https://bugs.webkit.org/attachment.cgi?id=288657&amp;action=review

&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:81
&gt;      return builder.result();

The specification seems to say that we should return a *cached* JS Object. However, it seems you are returning a new object every time (or I am missing the caching?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229048</commentid>
    <comment_count>19</comment_count>
      <attachid>288657</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-12 19:35:15 -0700</bug_when>
    <thetext>Comment on attachment 288657
Patch for landing

View in context: https://bugs.webkit.org/attachment.cgi?id=288657&amp;action=review

&gt; Source/WebCore/crypto/CryptoKey.h:87
&gt; +    virtual Ref&lt;KeyAlgorithm&gt; algorithm() const = 0;

Given that this constructs a new object and transfers ownership, I think we need to choose a better name for this method, maybe buildAlgorithm() or createAlgorithm().

&gt; Source/WebCore/crypto/CryptoKey.h:104
&gt; +    CryptoAlgorithmIdentifier m_algorithmIdentifier;

I think subclasses should use the algorithmIdentifier() getter instead of making this member protected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229051</commentid>
    <comment_count>20</comment_count>
      <attachid>288657</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-12 19:50:46 -0700</bug_when>
    <thetext>Comment on attachment 288657
Patch for landing

View in context: https://bugs.webkit.org/attachment.cgi?id=288657&amp;action=review

&gt; Source/WebCore/crypto/CryptoKey.h:55
&gt; +    HRSA

Where is HRSA coming from? I do not see it in the spec. And this change is not mentioned in the Changelog unless I missed it.

&gt; Source/WebCore/crypto/CryptoKey.h:58
&gt; +struct KeyHashAlgorithm {

Do we really need a struct for this? Why don&apos;t we use a String instead?

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:66
&gt;&gt; +    KeyAlgorithm(const String&amp; n)
&gt; 
&gt; RefCounted classes normally do not have a public constructor but a factory function that returns a Ref&lt;&gt; since we don&apos;t want those allocated on the stack.

This constructor should be protected and marked as explicit. This base class does not need a factory function since it is pure virtual, only subclasses do. The constructors in the subclasses should be protected or private, depending if the subclass is final or not.

&gt; Source/WebCore/crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:86
&gt; +    Vector&lt;uint8_t&gt; publicExponent;

Not needed.

&gt; Source/WebCore/crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:87
&gt; +    return adoptRef(*new RsaKeyAlgorithm(emptyString(), 0, WTFMove(publicExponent)));

return adoptRef(*new RsaKeyAlgorithm(emptyString(), 0, {}));

&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:37
&gt; +class AesKeyAlgorithm : public KeyAlgorithm {

Should be final

&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:41
&gt; +    AesKeyAlgorithm(const String&amp; n, size_t l)

Bad parameter names. Should be private and there should be a public factory function instead.

&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:46
&gt; +    virtual ~AesKeyAlgorithm()

I don&apos;t need this destructor it seems.

&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:50
&gt; +    KeyAlgorithmClass keyAlgorithmClass() const override { return KeyAlgorithmClass::AES; }

override -&gt; final

&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:72
&gt; +    Ref&lt;KeyAlgorithm&gt; algorithm() const override;

override -&gt; final

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.cpp:71
&gt; +    KeyHashAlgorithm hashAlgorithm;

KeyHashAlgorithm hashAlgorithm { CryptoAlgorithmRegistry::singleton().nameForIdentifier(m_hash) };

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:36
&gt; +class HmacKeyAlgorithm : public KeyAlgorithm {

Should be final

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:41
&gt; +    HmacKeyAlgorithm(const String&amp; n, KeyHashAlgorithm&amp;&amp; h, size_t l)

Bad parameter names. Should be private.

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:47
&gt; +    virtual ~HmacKeyAlgorithm()

I don&apos;t need this destructor it seems.

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:51
&gt; +    KeyAlgorithmClass keyAlgorithmClass() const override { return KeyAlgorithmClass::HMAC; }

override -&gt; final

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:74
&gt; +    Ref&lt;KeyAlgorithm&gt; algorithm() const override;

override -&gt; final

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:55
&gt; +    RsaKeyAlgorithm(const String&amp; n, size_t m, Vector&lt;uint8_t&gt;&amp;&amp; p)

Bad parameter names. Should be protected.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:61
&gt; +    virtual ~RsaKeyAlgorithm()

I don&apos;t need this destructor it seems.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:68
&gt; +class RsaHashedKeyAlgorithm : public RsaKeyAlgorithm {

Should be final.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:70
&gt; +    KeyHashAlgorithm hash;

Why is this public?

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:72
&gt; +    RsaHashedKeyAlgorithm(const String&amp; n, size_t m, Vector&lt;uint8_t&gt;&amp;&amp; p, KeyHashAlgorithm&amp;&amp; h)

Those parameter names are really not great. We try to avoid abbreviations in WebKit.
Should be private.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:77
&gt; +    virtual ~RsaHashedKeyAlgorithm()

I don&apos;t need this destructor it seems.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:82
&gt; +    KeyAlgorithmClass keyAlgorithmClass() const override { return KeyAlgorithmClass::HRSA; }

override -&gt; final

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:109
&gt; +    Ref&lt;KeyAlgorithm&gt; algorithm() const override;

override -&gt; final</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229090</commentid>
    <comment_count>21</comment_count>
      <attachid>288657</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-12 22:33:38 -0700</bug_when>
    <thetext>Comment on attachment 288657
Patch for landing

View in context: https://bugs.webkit.org/attachment.cgi?id=288657&amp;action=review

&gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:81
&gt;&gt;      return builder.result();
&gt; 
&gt; The specification seems to say that we should return a *cached* JS Object. However, it seems you are returning a new object every time (or I am missing the caching?).

Thank you for pointing out. I forgot to implement it. Oops.

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:55
&gt;&gt; +    HRSA
&gt; 
&gt; Where is HRSA coming from? I do not see it in the spec. And this change is not mentioned in the Changelog unless I missed it.

There are two types of RSAs, one with hash, another without. So I name the one with hash as HRSA.

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:58
&gt;&gt; +struct KeyHashAlgorithm {
&gt; 
&gt; Do we really need a struct for this? Why don&apos;t we use a String instead?

I am struggling with this part. The hash is supposed to be of type KeyAlgorithm as well. However, according to the current spec, only SHA1, 256, 384, 512 could serve the purpose of digest, see https://www.w3.org/TR/WebCryptoAPI/#algorithm-overview. Therefore, according to https://www.w3.org/TR/WebCryptoAPI/#sha and https://www.w3.org/TR/WebCryptoAPI/#algorithm-normalization-normalize-an-algorithm, the KeyAlgorithm type will only have the name attribute which is the below KeyAlgorithm virtual class. But I can&apos;t initialize a virtual class. The reason why the below KeyAlgorithm class is virtual is because I want the type-check downcast trait. Hence, I make a struct here. However, I think a String will serve the purpose as well.

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:64
&gt;&gt; +    String name;
&gt; 
&gt; Why is this public?

I want a Struct initially, but later on realize that I would like to return a reference and use polymorphism as well. I can&apos;t think of any other approach to make it possible except inheriting RefCounted. Hence, those members are no needed to be private or protected. Do you have any better idea to achieve the same purpose with Struct only?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229159</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-13 07:44:59 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Comment on attachment 288657 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=288657&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:81
&gt; &gt;&gt;      return builder.result();
&gt; &gt; 
&gt; &gt; The specification seems to say that we should return a *cached* JS Object. However, it seems you are returning a new object every time (or I am missing the caching?).
&gt; 
&gt; Thank you for pointing out. I forgot to implement it. Oops.
&gt; 
&gt; &gt;&gt; Source/WebCore/crypto/CryptoKey.h:55
&gt; &gt;&gt; +    HRSA
&gt; &gt; 
&gt; &gt; Where is HRSA coming from? I do not see it in the spec. And this change is not mentioned in the Changelog unless I missed it.
&gt; 
&gt; There are two types of RSAs, one with hash, another without. So I name the
&gt; one with hash as HRSA.
&gt; 
&gt; &gt;&gt; Source/WebCore/crypto/CryptoKey.h:58
&gt; &gt;&gt; +struct KeyHashAlgorithm {
&gt; &gt; 
&gt; &gt; Do we really need a struct for this? Why don&apos;t we use a String instead?
&gt; 
&gt; I am struggling with this part. The hash is supposed to be of type
&gt; KeyAlgorithm as well. However, according to the current spec, only SHA1,
&gt; 256, 384, 512 could serve the purpose of digest, see
&gt; https://www.w3.org/TR/WebCryptoAPI/#algorithm-overview. Therefore, according
&gt; to https://www.w3.org/TR/WebCryptoAPI/#sha and
&gt; https://www.w3.org/TR/WebCryptoAPI/#algorithm-normalization-normalize-an-
&gt; algorithm, the KeyAlgorithm type will only have the name attribute which is
&gt; the below KeyAlgorithm virtual class. But I can&apos;t initialize a virtual
&gt; class. The reason why the below KeyAlgorithm class is virtual is because I
&gt; want the type-check downcast trait. Hence, I make a struct here. However, I
&gt; think a String will serve the purpose as well.
&gt; 
&gt; &gt;&gt; Source/WebCore/crypto/CryptoKey.h:64
&gt; &gt;&gt; +    String name;
&gt; &gt; 
&gt; &gt; Why is this public?
&gt; 
&gt; I want a Struct initially, but later on realize that I would like to return
&gt; a reference and use polymorphism as well. I can&apos;t think of any other
&gt; approach to make it possible except inheriting RefCounted. Hence, those
&gt; members are no needed to be private or protected. Do you have any better
&gt; idea to achieve the same purpose with Struct only?

Given how this is currently implemented, I still do not think they should be public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229160</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-13 07:47:31 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Comment on attachment 288657 [details]
&gt; &gt; Patch for landing
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=288657&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:81
&gt; &gt; &gt;&gt;      return builder.result();
&gt; &gt; &gt; 
&gt; &gt; &gt; The specification seems to say that we should return a *cached* JS Object. However, it seems you are returning a new object every time (or I am missing the caching?).
&gt; &gt; 
&gt; &gt; Thank you for pointing out. I forgot to implement it. Oops.
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/crypto/CryptoKey.h:55
&gt; &gt; &gt;&gt; +    HRSA
&gt; &gt; &gt; 
&gt; &gt; &gt; Where is HRSA coming from? I do not see it in the spec. And this change is not mentioned in the Changelog unless I missed it.
&gt; &gt; 
&gt; &gt; There are two types of RSAs, one with hash, another without. So I name the
&gt; &gt; one with hash as HRSA.
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/crypto/CryptoKey.h:58
&gt; &gt; &gt;&gt; +struct KeyHashAlgorithm {
&gt; &gt; &gt; 
&gt; &gt; &gt; Do we really need a struct for this? Why don&apos;t we use a String instead?
&gt; &gt; 
&gt; &gt; I am struggling with this part. The hash is supposed to be of type
&gt; &gt; KeyAlgorithm as well. However, according to the current spec, only SHA1,
&gt; &gt; 256, 384, 512 could serve the purpose of digest, see
&gt; &gt; https://www.w3.org/TR/WebCryptoAPI/#algorithm-overview. Therefore, according
&gt; &gt; to https://www.w3.org/TR/WebCryptoAPI/#sha and
&gt; &gt; https://www.w3.org/TR/WebCryptoAPI/#algorithm-normalization-normalize-an-
&gt; &gt; algorithm, the KeyAlgorithm type will only have the name attribute which is
&gt; &gt; the below KeyAlgorithm virtual class. But I can&apos;t initialize a virtual
&gt; &gt; class. The reason why the below KeyAlgorithm class is virtual is because I
&gt; &gt; want the type-check downcast trait. Hence, I make a struct here. However, I
&gt; &gt; think a String will serve the purpose as well.
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/crypto/CryptoKey.h:64
&gt; &gt; &gt;&gt; +    String name;
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this public?
&gt; &gt; 
&gt; &gt; I want a Struct initially, but later on realize that I would like to return
&gt; &gt; a reference and use polymorphism as well. I can&apos;t think of any other
&gt; &gt; approach to make it possible except inheriting RefCounted. Hence, those
&gt; &gt; members are no needed to be private or protected. Do you have any better
&gt; &gt; idea to achieve the same purpose with Struct only?
&gt; 
&gt; Given how this is currently implemented, I still do not think they should be
&gt; public.

I have not looked in too much details but if you do not need ref counting, the factory could return a unique_ptr instead of a Ref, and you would not need to subclass RefCounted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229365</commentid>
    <comment_count>24</comment_count>
      <attachid>288657</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-13 16:25:45 -0700</bug_when>
    <thetext>Comment on attachment 288657
Patch for landing

View in context: https://bugs.webkit.org/attachment.cgi?id=288657&amp;action=review

Thank you for reviewing my patch, Chris.

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +        WebCrypto algorithms should be exposed via KeyAlgorithm interface
&gt; 
&gt; KeyAlgorithm is a dictionary, not an interface

Fixed.

&gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:48
&gt;&gt; +        AesKeyAlgorithm&amp; aesAlgorithm = downcast&lt;AesKeyAlgorithm&gt;(algorithm.get());
&gt; 
&gt; auto&amp;

Fixed.

&gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:54
&gt;&gt; +        HmacKeyAlgorithm&amp; hmacAlgorithm = downcast&lt;HmacKeyAlgorithm&gt;(algorithm.get());
&gt; 
&gt; auto&amp;

Fixed.

&gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:63
&gt;&gt; +        RsaHashedKeyAlgorithm&amp; rsaAlgorithm = downcast&lt;RsaHashedKeyAlgorithm&gt;(algorithm.get());
&gt; 
&gt; auto&amp;

Fixed.

&gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:73
&gt;&gt; +        RsaKeyAlgorithm&amp; rsaAlgorithm = downcast&lt;RsaKeyAlgorithm&gt;(algorithm.get());
&gt; 
&gt; auto&amp;

Fixed.

&gt;&gt;&gt;&gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:81
&gt;&gt;&gt;&gt;&gt;      return builder.result();
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; The specification seems to say that we should return a *cached* JS Object. However, it seems you are returning a new object every time (or I am missing the caching?).
&gt;&gt;&gt; 
&gt;&gt;&gt; Thank you for pointing out. I forgot to implement it. Oops.
&gt;&gt; 
&gt;&gt; Given how this is currently implemented, I still do not think they should be public.
&gt; 
&gt; I have not looked in too much details but if you do not need ref counting, the factory could return a unique_ptr instead of a Ref, and you would not need to subclass RefCounted.

Fixed.

&gt;&gt;&gt; Source/WebCore/crypto/CryptoKey.h:66
&gt;&gt;&gt; +    KeyAlgorithm(const String&amp; n)
&gt;&gt; 
&gt;&gt; RefCounted classes normally do not have a public constructor but a factory function that returns a Ref&lt;&gt; since we don&apos;t want those allocated on the stack.
&gt; 
&gt; This constructor should be protected and marked as explicit. This base class does not need a factory function since it is pure virtual, only subclasses do. The constructors in the subclasses should be protected or private, depending if the subclass is final or not.

Now, I will be using a unique_ptr, in this case, probably there is no need to use a factory function there?

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:87
&gt;&gt; +    virtual Ref&lt;KeyAlgorithm&gt; algorithm() const = 0;
&gt; 
&gt; Given that this constructs a new object and transfers ownership, I think we need to choose a better name for this method, maybe buildAlgorithm() or createAlgorithm().

Changed it to buildAlgorithm().

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:104
&gt;&gt; +    CryptoAlgorithmIdentifier m_algorithmIdentifier;
&gt; 
&gt; I think subclasses should use the algorithmIdentifier() getter instead of making this member protected.

Fixed. I am kind of thinking both of them are okay.

&gt;&gt; Source/WebCore/crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:86
&gt;&gt; +    Vector&lt;uint8_t&gt; publicExponent;
&gt; 
&gt; Not needed.

Fixed.

&gt;&gt; Source/WebCore/crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:87
&gt;&gt; +    return adoptRef(*new RsaKeyAlgorithm(emptyString(), 0, WTFMove(publicExponent)));
&gt; 
&gt; return adoptRef(*new RsaKeyAlgorithm(emptyString(), 0, {}));

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:37
&gt;&gt; +class AesKeyAlgorithm : public KeyAlgorithm {
&gt; 
&gt; Should be final

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:39
&gt;&gt; +    size_t length;
&gt; 
&gt; Why is this public?

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:41
&gt;&gt; +    AesKeyAlgorithm(const String&amp; n, size_t l)
&gt; 
&gt; Bad parameter names. Should be private and there should be a public factory function instead.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:46
&gt;&gt; +    virtual ~AesKeyAlgorithm()
&gt; 
&gt; I don&apos;t need this destructor it seems.

Removed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:50
&gt;&gt; +    KeyAlgorithmClass keyAlgorithmClass() const override { return KeyAlgorithmClass::AES; }
&gt; 
&gt; override -&gt; final

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:72
&gt;&gt; +    Ref&lt;KeyAlgorithm&gt; algorithm() const override;
&gt; 
&gt; override -&gt; final

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:36
&gt;&gt; +class HmacKeyAlgorithm : public KeyAlgorithm {
&gt; 
&gt; Should be final

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:38
&gt;&gt; +    KeyHashAlgorithm hash;
&gt; 
&gt; Why are those public?

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:41
&gt;&gt; +    HmacKeyAlgorithm(const String&amp; n, KeyHashAlgorithm&amp;&amp; h, size_t l)
&gt; 
&gt; Bad parameter names. Should be private.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:47
&gt;&gt; +    virtual ~HmacKeyAlgorithm()
&gt; 
&gt; I don&apos;t need this destructor it seems.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:51
&gt;&gt; +    KeyAlgorithmClass keyAlgorithmClass() const override { return KeyAlgorithmClass::HMAC; }
&gt; 
&gt; override -&gt; final

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:74
&gt;&gt; +    Ref&lt;KeyAlgorithm&gt; algorithm() const override;
&gt; 
&gt; override -&gt; final

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:52
&gt;&gt; +    size_t modulusLength;
&gt; 
&gt; Why are those public?

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:55
&gt;&gt; +    RsaKeyAlgorithm(const String&amp; n, size_t m, Vector&lt;uint8_t&gt;&amp;&amp; p)
&gt; 
&gt; Bad parameter names. Should be protected.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:61
&gt;&gt; +    virtual ~RsaKeyAlgorithm()
&gt; 
&gt; I don&apos;t need this destructor it seems.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:68
&gt;&gt; +class RsaHashedKeyAlgorithm : public RsaKeyAlgorithm {
&gt; 
&gt; Should be final.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:70
&gt;&gt; +    KeyHashAlgorithm hash;
&gt; 
&gt; Why is this public?

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:72
&gt;&gt; +    RsaHashedKeyAlgorithm(const String&amp; n, size_t m, Vector&lt;uint8_t&gt;&amp;&amp; p, KeyHashAlgorithm&amp;&amp; h)
&gt; 
&gt; Those parameter names are really not great. We try to avoid abbreviations in WebKit.
&gt; Should be private.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:77
&gt;&gt; +    virtual ~RsaHashedKeyAlgorithm()
&gt; 
&gt; I don&apos;t need this destructor it seems.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:82
&gt;&gt; +    KeyAlgorithmClass keyAlgorithmClass() const override { return KeyAlgorithmClass::HRSA; }
&gt; 
&gt; override -&gt; final

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:109
&gt;&gt; +    Ref&lt;KeyAlgorithm&gt; algorithm() const override;
&gt; 
&gt; override -&gt; final

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229378</commentid>
    <comment_count>25</comment_count>
      <attachid>288747</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-13 16:56:11 -0700</bug_when>
    <thetext>Created attachment 288747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229379</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-13 16:57:51 -0700</bug_when>
    <thetext>Attachment 288747 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 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>1229403</commentid>
    <comment_count>27</comment_count>
      <attachid>288747</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-13 18:28:04 -0700</bug_when>
    <thetext>Comment on attachment 288747
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288747&amp;action=review

Looks like the patch does not build on ews.

&gt; Source/WebCore/crypto/CryptoKey.idl:50
&gt; +    [CachedAttribute, CustomGetter] readonly attribute object algorithm;

CachedAttribute does not do anything if you have a CustomGetter. You would have to do the caching yourself in the custom bindings.

An easy way to write a test for this is:
shouldBeTrue(&quot;key.algorithm === key.algorithm&quot;);
key.algorithm.foo = 1;
gc();
shouldBe(&quot;key.algorithm.foo&quot;, &quot;1&quot;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229407</commentid>
    <comment_count>28</comment_count>
      <attachid>288747</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-13 18:44:08 -0700</bug_when>
    <thetext>Comment on attachment 288747
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288747&amp;action=review

&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:33
&gt; +#include &quot;CryptoKeyRSA.h&quot;

Based on the build error, I think you&apos;ll need to include:
#include &lt;heap/HeapInlines.h&gt;

&gt; Source/WebCore/crypto/CryptoKey.h:60
&gt; +    KeyAlgorithm(const String&amp; name)

This one should be explicit.

&gt; Source/WebCore/crypto/CryptoKey.h:70
&gt; +    String name() const { return m_name; }

should return a const String&amp;.

&gt; Source/WebCore/crypto/CryptoKey.h:74
&gt; +

nit: extra line here.

&gt;&gt; Source/WebCore/crypto/CryptoKey.idl:50
&gt;&gt; +    [CachedAttribute, CustomGetter] readonly attribute object algorithm;
&gt; 
&gt; CachedAttribute does not do anything if you have a CustomGetter. You would have to do the caching yourself in the custom bindings.
&gt; 
&gt; An easy way to write a test for this is:
&gt; shouldBeTrue(&quot;key.algorithm === key.algorithm&quot;);
&gt; key.algorithm.foo = 1;
&gt; gc();
&gt; shouldBe(&quot;key.algorithm.foo&quot;, &quot;1&quot;);

Never mind, it does have the impact of generating the m_algorithm member and it will be fine as long as you do the caching in the custom bindings (which I think you do). We should still add the layout test to confirm this works (and keeps working in the future).

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:38
&gt; +    explicit HmacKeyAlgorithm(const String&amp; name, const String&amp; hash, size_t length)

explicit is not useful here.

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:47
&gt; +    String hash() const { return m_hash; }

should return a const String&amp;.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:52
&gt; +    explicit RsaKeyAlgorithm(const String&amp; name, size_t modulusLength, Vector&lt;uint8_t&gt;&amp;&amp; publicExponent)

explicit is not really useful here since there is more than 1 mandatory parameter.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:62
&gt; +    Vector&lt;uint8_t&gt; publicExponent() const { return m_publicExponent; }

nit: Should return a const Vector&lt;uint8_t&gt;&amp;.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:79
&gt; +    String hash() const { return m_hash; }

nit: should return a const String&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229408</commentid>
    <comment_count>29</comment_count>
      <attachid>288747</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-13 18:46:56 -0700</bug_when>
    <thetext>Comment on attachment 288747
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288747&amp;action=review

&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:43
&gt; +    if (m_algorithm)

Yeah, your caching code in this function looks good. [CachedAttribute] should work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229409</commentid>
    <comment_count>30</comment_count>
      <attachid>288747</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-13 18:51:10 -0700</bug_when>
    <thetext>Comment on attachment 288747
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288747&amp;action=review

&gt; Source/WebCore/ChangeLog:7
&gt; +        Reviewed by Brent Fulgham.

Oh, and please add my name since I reviewed too :)
Reviewed by Brent Fulgham and Chris Dumez.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229419</commentid>
    <comment_count>31</comment_count>
      <attachid>288747</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-13 19:22:39 -0700</bug_when>
    <thetext>Comment on attachment 288747
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288747&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:7
&gt;&gt; +        Reviewed by Brent Fulgham.
&gt; 
&gt; Oh, and please add my name since I reviewed too :)
&gt; Reviewed by Brent Fulgham and Chris Dumez.

Since you haven&apos;t r+, I didn&apos;t add you. Fixed now. :)

&gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:33
&gt;&gt; +#include &quot;CryptoKeyRSA.h&quot;
&gt; 
&gt; Based on the build error, I think you&apos;ll need to include:
&gt; #include &lt;heap/HeapInlines.h&gt;

Fixed.

&gt;&gt; Source/WebCore/bindings/js/JSCryptoKeyCustom.cpp:43
&gt;&gt; +    if (m_algorithm)
&gt; 
&gt; Yeah, your caching code in this function looks good. [CachedAttribute] should work.

:)

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:60
&gt;&gt; +    KeyAlgorithm(const String&amp; name)
&gt; 
&gt; This one should be explicit.

Fixed.

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:70
&gt;&gt; +    String name() const { return m_name; }
&gt; 
&gt; should return a const String&amp;.

Fixed.

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:74
&gt;&gt; +
&gt; 
&gt; nit: extra line here.

Fixed.

&gt;&gt;&gt; Source/WebCore/crypto/CryptoKey.idl:50
&gt;&gt;&gt; +    [CachedAttribute, CustomGetter] readonly attribute object algorithm;
&gt;&gt; 
&gt;&gt; CachedAttribute does not do anything if you have a CustomGetter. You would have to do the caching yourself in the custom bindings.
&gt;&gt; 
&gt;&gt; An easy way to write a test for this is:
&gt;&gt; shouldBeTrue(&quot;key.algorithm === key.algorithm&quot;);
&gt;&gt; key.algorithm.foo = 1;
&gt;&gt; gc();
&gt;&gt; shouldBe(&quot;key.algorithm.foo&quot;, &quot;1&quot;);
&gt; 
&gt; Never mind, it does have the impact of generating the m_algorithm member and it will be fine as long as you do the caching in the custom bindings (which I think you do). We should still add the layout test to confirm this works (and keeps working in the future).

Testcases are added.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:38
&gt;&gt; +    explicit HmacKeyAlgorithm(const String&amp; name, const String&amp; hash, size_t length)
&gt; 
&gt; explicit is not useful here.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.h:47
&gt;&gt; +    String hash() const { return m_hash; }
&gt; 
&gt; should return a const String&amp;.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:52
&gt;&gt; +    explicit RsaKeyAlgorithm(const String&amp; name, size_t modulusLength, Vector&lt;uint8_t&gt;&amp;&amp; publicExponent)
&gt; 
&gt; explicit is not really useful here since there is more than 1 mandatory parameter.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:62
&gt;&gt; +    Vector&lt;uint8_t&gt; publicExponent() const { return m_publicExponent; }
&gt; 
&gt; nit: Should return a const Vector&lt;uint8_t&gt;&amp;.

Fixed.

&gt;&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:79
&gt;&gt; +    String hash() const { return m_hash; }
&gt; 
&gt; nit: should return a const String&amp;.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229459</commentid>
    <comment_count>32</comment_count>
      <attachid>288775</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-13 23:37:32 -0700</bug_when>
    <thetext>Created attachment 288775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229460</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-13 23:39:16 -0700</bug_when>
    <thetext>Attachment 288775 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 in 21 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>1229470</commentid>
    <comment_count>34</comment_count>
      <attachid>288779</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-14 00:36:31 -0700</bug_when>
    <thetext>Created attachment 288779
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229472</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-14 00:37:30 -0700</bug_when>
    <thetext>Attachment 288779 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 in 21 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>1229574</commentid>
    <comment_count>36</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-14 09:12:45 -0700</bug_when>
    <thetext>Looks like the patch does not build on GTK/EFL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229579</commentid>
    <comment_count>37</comment_count>
      <attachid>288779</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-14 09:22:56 -0700</bug_when>
    <thetext>Comment on attachment 288779
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288779&amp;action=review

r=me with comments.

&gt; Source/WebCore/crypto/CryptoKey.h:60
&gt; +    explicit KeyAlgorithm(const String&amp; name)

nit: This should be protected, not public.

&gt; Source/WebCore/crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:86
&gt; +    return std::make_unique&lt;RsaKeyAlgorithm&gt;(emptyString(), 0, { });

Looks like EFL / GTK do not like the { } here :/

&gt; LayoutTests/crypto/subtle/crypto-key-algorithm-gc.html:11
&gt; +description(&quot;Test that CryptoKey.algoithm preserves custom properties.&quot;);

typo: algoithm

&gt; LayoutTests/crypto/subtle/crypto-key-algorithm-gc.html:16
&gt; +    key = result;

Is this async? If so, what guarantees that this completion handler has been called *before* startTest() is executed?

&gt; LayoutTests/crypto/subtle/crypto-key-algorithm-gc.html:36
&gt; +    shouldBe(&apos;key.algorithm.foo&apos;, &apos;&quot;bar&quot;&apos;);

shouldBeEqualToString(&apos;key.algorithm.foo&apos;, &apos;bar&apos;);

&gt; LayoutTests/crypto/subtle/crypto-key-usages-gc.html:11
&gt; +description(&quot;Test that CryptoKey.algoithm preserves custom properties.&quot;);

Typo but anyway, it should be &apos;usages&apos;

&gt; LayoutTests/crypto/subtle/crypto-key-usages-gc.html:16
&gt; +    key = result;

Same comment as earlier about the potential race.

&gt; LayoutTests/crypto/subtle/crypto-key-usages-gc.html:21
&gt; +    shouldBeTrue(&quot;key.algorithm === key.algorithm&quot;);

key.usages === key.usages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229661</commentid>
    <comment_count>38</comment_count>
      <attachid>288779</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-14 11:48:48 -0700</bug_when>
    <thetext>Comment on attachment 288779
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=288779&amp;action=review

&gt;&gt; Source/WebCore/crypto/CryptoKey.h:60
&gt;&gt; +    explicit KeyAlgorithm(const String&amp; name)
&gt; 
&gt; nit: This should be protected, not public.

Fixed.

&gt;&gt; Source/WebCore/crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:86
&gt;&gt; +    return std::make_unique&lt;RsaKeyAlgorithm&gt;(emptyString(), 0, { });
&gt; 
&gt; Looks like EFL / GTK do not like the { } here :/

Created a Vector instance instead.

&gt;&gt; LayoutTests/crypto/subtle/crypto-key-algorithm-gc.html:11
&gt;&gt; +description(&quot;Test that CryptoKey.algoithm preserves custom properties.&quot;);
&gt; 
&gt; typo: algoithm

Fixed.

&gt;&gt; LayoutTests/crypto/subtle/crypto-key-algorithm-gc.html:16
&gt;&gt; +    key = result;
&gt; 
&gt; Is this async? If so, what guarantees that this completion handler has been called *before* startTest() is executed?

Fixed.

&gt;&gt; LayoutTests/crypto/subtle/crypto-key-algorithm-gc.html:36
&gt;&gt; +    shouldBe(&apos;key.algorithm.foo&apos;, &apos;&quot;bar&quot;&apos;);
&gt; 
&gt; shouldBeEqualToString(&apos;key.algorithm.foo&apos;, &apos;bar&apos;);

Fixed.

&gt;&gt; LayoutTests/crypto/subtle/crypto-key-usages-gc.html:11
&gt;&gt; +description(&quot;Test that CryptoKey.algoithm preserves custom properties.&quot;);
&gt; 
&gt; Typo but anyway, it should be &apos;usages&apos;

Fixed.

&gt;&gt; LayoutTests/crypto/subtle/crypto-key-usages-gc.html:16
&gt;&gt; +    key = result;
&gt; 
&gt; Same comment as earlier about the potential race.

Fixed.

&gt;&gt; LayoutTests/crypto/subtle/crypto-key-usages-gc.html:21
&gt;&gt; +    shouldBeTrue(&quot;key.algorithm === key.algorithm&quot;);
&gt; 
&gt; key.usages === key.usages

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229663</commentid>
    <comment_count>39</comment_count>
      <attachid>288841</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-14 11:50:49 -0700</bug_when>
    <thetext>Created attachment 288841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229664</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-14 11:52:51 -0700</bug_when>
    <thetext>Attachment 288841 did not pass style-queue:


ERROR: Source/WebCore/crypto/CryptoKey.h:47:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:52:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:53:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:54:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/crypto/CryptoKey.h:55:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 5 in 21 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>1229842</commentid>
    <comment_count>41</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-09-14 17:21:40 -0700</bug_when>
    <thetext>Committed r205941: &lt;http://trac.webkit.org/changeset/205941&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288055</attachid>
            <date>2016-09-06 15:46:05 -0700</date>
            <delta_ts>2016-09-08 10:29:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128748-20160906154342.patch</filename>
            <type>text/plain</type>
            <size>35709</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0NjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzg3MGQ5MmM3NDkzZTY4
OTYxMGZkNmJjZGVhMDJhMGVmOTU5NjczNy4uMDNiMzc4YWU3ZWJiY2JiNGZlNDdkNmNjYTI2ZGI1
MGI2OGI3MTdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE2LTA5LTA2ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBpbnRlcmZhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODc0OAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjczNTk0Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBjdXN0b20gQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci9idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uIHdpdGggS2V5QWxnb3JpdGhtIGludGVyZmFjZSB3
aGljaCBpcworICAgICAgICBkZWZpbmVkIGJ5IHRoZSBzcGVjLgorCisgICAgICAgIE5vIGNoYW5n
ZSBvZiBiZWhhdmlvcnMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6Y3JlYXRlRW1wdHlDbG9u
ZSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1CdWls
ZGVyLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXk6OmFsZ29yaXRobSk6CisgICAgICAgIEdldCByaWRl
IG9mIGRlcGVuZGVuY3kgb24gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLgorICAg
ICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgUmVwbGFjZSBpdCB3aXRoIEtleUFsZ29yaXRobS4KKyAgICAg
ICAgKiBjcnlwdG8vQ3J5cHRvS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6
Q3J5cHRvS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1E
ZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5oOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5QWxnb3JpdGhtOjp+S2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0tleTo6YWxnb3JpdGhtSWRlbnRpZmllcik6CisgICAgICAgICogY3J5cHRvL0NyeXB0b0tl
eS5pZGw6CisgICAgICAgIEFkZCBLZXlBbGdvcml0aG0gaW50ZXJmYWNlIHdoaWNoIGlzIHJldHVy
bmVkIHZpYSBDcnlwdG9LZXkuYWxnb3JpdGhtKCkgbWV0aG9kLAorICAgICAgICBhbmQgcmVuYW1l
IG1fYWxnb3JpdGhtIHRvIG1fYWxnb3JpdGhtSWRlbnRpZmllciB0byBkaXN0aW5ndXNoIGl0IHdp
dGggbmV3bHkKKyAgICAgICAgYWRkZWQgS2V5QWxnb3JpdGhtIGludGVyZmFjZS4KKyAgICAgICAg
KiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
S2V5QUVTOjphbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpidWls
ZEFsZ29yaXRobURlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9D
cnlwdG9LZXlBRVMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFlc0tleUFsZ29yaXRobTo6QWVzS2V5
QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkFlc0tleUFsZ29yaXRobTo6fkFlc0tleUFs
Z29yaXRobSk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjphbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oOgorICAgICAgICAoV2ViQ29yZTo6
SG1hY0tleUFsZ29yaXRobTo6SG1hY0tleUFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpI
bWFjS2V5QWxnb3JpdGhtOjp+SG1hY0tleUFsZ29yaXRobSk6CisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5UlNBLmg6CisgICAgICAgIChXZWJDb3JlOjpSc2FLZXlBbGdvcml0aG06OlJz
YUtleUFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpSc2FLZXlBbGdvcml0aG06On5Sc2FL
ZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtOjpS
c2FIYXNoZWRLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6UnNhSGFzaGVkS2V5QWxn
b3JpdGhtOjp+UnNhSGFzaGVkS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKiBjcnlwdG8vbWFjL0Ny
eXB0b0tleVJTQU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29y
aXRobSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVz
Y3JpcHRpb24pOiBEZWxldGVkLgorCiAyMDE2LTA4LTE5ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVuZGVyT2JqZWN0Ojpjb250YWluaW5nQmxvY2soKSBjbGVh
bnVwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDgxMDBiZDljMzUxNzQ5M2QzMGE0YjU4YmUxNWVlNjAyMzBlZTEzYjkuLjZmNThk
NWY1YWE4MjQxOTA5YWUxMzk0YjAyMGQ3NDIyZjljNjkyNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYzMTEsOCArNjMxMSw2
IEBACiAJCUUxNTdBOEU0MTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RTIxODE3M0EzQTAw
OUY4MjFEIC8qIENyeXB0b0tleS5jcHAgKi87IH07CiAJCUUxNTdBOEU1MTgxNzNBM0EwMDlGODIx
RCAvKiBDcnlwdG9LZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxNTdBOEUzMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuaCAqLzsgfTsKIAkJ
RTE1N0E4RTgxODE4NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEU2MTgxODRDNjcw
MDlGODIxRCAvKiBKU0NyeXB0b0tleUN1c3RvbS5jcHAgKi87IH07Ci0JCUUxNTdBOEVDMTgxODUx
QUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RUExODE4NTFB
QzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi87IH07
Ci0JCUUxNTdBOEVEMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNTdBOEVCMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXIuaCAqLzsgfTsKIAkJRTE1N0E4RjAxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTU3QThFRTE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWls
ZGVyLmNwcCAqLzsgfTsKIAkJRTE1N0E4RjExODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTE1N0E4RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5oICovOyB9OwogCQlFMTVBMzZENzExMDQ1NzIwMDBCN0I2MzkgLyogWE1MTlNOYW1lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1QTM2RDYxMTA0
NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLzsgfTsKQEAgLTE0MjM5LDggKzE0MjM3LDYg
QEAKIAkJRTE1N0E4RTIxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tleS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9LZXkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTU3QThFMzE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0tleS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMTU3QThFNjE4MTg0QzY3MDA5RjgyMUQgLyogSlNDcnlwdG9L
ZXlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDcnlw
dG9LZXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTU3QThFQTE4
MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNTdBOEVC
MTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRp
b25CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTdBOEVFMTgxODU0
MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1N0E4RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MTlNOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjMyNDAsOCArMjMyMzYsNiBAQAogCQkJCUUxRkUxMzczMTg0MDJBNjcwMDg5MkYx
MyAvKiBDb21tb25DcnlwdG9VdGlsaXRpZXMuaCAqLywKIAkJCQlFMTcyQUY2QjE4MEYyNEM2MDBG
QkFEQjkgLyogQ3J5cHRvQWxnb3JpdGhtLmNwcCAqLywKIAkJCQlFMTcyQUY2QzE4MEYyNEM2MDBG
QkFEQjkgLyogQ3J5cHRvQWxnb3JpdGhtLmggKi8sCi0JCQkJRTE1N0E4RUExODE4NTFBQzAwOUY4
MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi8sCi0JCQkJRTE1
N0E4RUIxODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5oICovLAogCQkJCUUxQzY1NzI0MTgxNkU2OUQwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyLmggKi8sCiAJCQkJRTFDNjU3MjYxODE2RjlGRTAwMjU2Q0REIC8qIENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMuaCAqLywKIAkJCQlFMUZGOEY2QTE4MERCNUJFMDAxMzI2NzQgLyog
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwICovLApAQCAtMjUxMjQsNyArMjUxMTgsNiBAQAog
CQkJCUUxRkUxMzdCMTg0RDIxQkIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1cuaCBp
biBIZWFkZXJzICovLAogCQkJCUUxMjVGODNBMTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdv
cml0aG1BZXNDYmNQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOUFDM0Y3MTgyNEU1RDEw
MDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXMuaCBpbiBIZWFkZXJzICov
LAotCQkJCUUxNTdBOEVEMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjVGODMyMTgyMkYxMUIwMEQ4NENE
OSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlEQTI5QzE4
MTg5QUREMDAwODhCQzggLyogQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTFDNjU3MUYxODE2RTUwMzAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobUht
YWNQYXJhbXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjg5ODAsNyArMjg5NzMsNiBAQAogCQkJCUUx
MjVGODQ1MTgyNDI1QzkwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRkUxMzdBMTg0RDIxQkIwMDg5MkYxMyAvKiBDcnlwdG9BbGdv
cml0aG1BRVNfS1cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFGRTEzN0UxODREMjcwMjAwODky
RjEzIC8qIENyeXB0b0FsZ29yaXRobUFFU19LV01hYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlF
MTU3QThFQzE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjVGODMxMTgyMkYxMUIwMEQ4NENEOSAvKiBD
cnlwdG9BbGdvcml0aG1ITUFDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjVGODM4MTgyMkYx
RUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxRkY4RjZDMTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwCmluZGV4IGE5ZjM3MjY1NzBlMjg5NGFiYTYx
ZTg1Y2MwOWYwOWMxNDhiMThmOTguLmQ5OWMyN2FiZDk0YzRiNjEwZjBmZDgzNmUyMmI2ZDc2ZDk4
NGEzN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlw
dG9BbGdvcml0aG1CdWlsZGVyLmNwcApAQCAtNDgsMTEgKzQ4LDYgQEAgSlNDcnlwdG9BbGdvcml0
aG1CdWlsZGVyOjp+SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyKCkKIHsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcj4gSlNDcnlwdG9BbGdvcml0
aG1CdWlsZGVyOjpjcmVhdGVFbXB0eUNsb25lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI+KG1fZXhlYyk7Ci19Ci0KIHZvaWQg
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCB1bnNpZ25lZCB2
YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CkBAIC03NSwxMiArNzAsMTEgQEAg
dm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXksIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgYnVmZmUKICAgICBtX2RpY3Rpb25hcnktPnB1dERpcmVjdCh2bSwg
aWRlbnRpZmllciwgYXJyYXlWaWV3LT53cmFwKG1fZXhlYywgdm0uZW50cnlTY29wZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIAotdm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25z
dCBjaGFyKiBrZXksIGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgbmVz
dGVkQnVpbGRlcikKK3ZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hh
cioga2V5LCBjb25zdCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXImIG5lc3RlZEJ1aWxkZXIpCiB7
CiAgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOwogICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXkpOwotICAgIGNvbnN0IEpTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlciYganNCdWlsZGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyJj4obmVzdGVkQnVpbGRlcik7Ci0gICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJl
Y3Qodm0sIGlkZW50aWZpZXIsIGpzQnVpbGRlci5yZXN1bHQoKSk7CisgICAgbV9kaWN0aW9uYXJ5
LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIG5lc3RlZEJ1aWxkZXIucmVzdWx0KCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oCmluZGV4IGQ1MzdiNGM2NzcxYjk3YTEw
NzgyYTQ1ZmU5OWQ4YWE4NWIwMGVlZTkuLjI4NzNiZDFmNzI1NTY5YTc1ZTUxZWMzMmY0NTlhNTIw
MzljOWFlNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRv
QWxnb3JpdGhtQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlci5oCkBAIC0yNiw3ICsyNiwxMCBAQAogI2lmbmRlZiBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXJfaAogI2RlZmluZSBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXJfaAog
Ci0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBF
TkFCTEUoU1VCVExFX0NSWVBUTykKIApAQCAtMzcsMTkgKzQwLDE4IEBAIGNsYXNzIEpTT2JqZWN0
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ciBmaW5hbCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIgeworY2xh
c3MgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShK
U0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIpOwogcHVibGljOgogICAgIEpTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlcihKU0M6OkV4ZWNTdGF0ZSopOwogICAgIHZpcnR1YWwgfkpTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlcigpOwogCiAgICAgSlNDOjpKU09iamVjdCogcmVzdWx0KCkgY29uc3QgeyByZXR1cm4g
bV9kaWN0aW9uYXJ5OyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyPiBjcmVhdGVFbXB0eUNsb25lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRk
KGNvbnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZChjb25z
dCBjaGFyKiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGQo
Y29uc3QgY2hhciosIGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIG92
ZXJyaWRlOworICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBh
ZGQoY29uc3QgY2hhciosIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIq
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29u
c3QgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyJik7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpFeGVj
U3RhdGUqIG1fZXhlYzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3J5cHRvS2V5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRv
S2V5Q3VzdG9tLmNwcAppbmRleCA1ODU5NGJlZjJkYjI5YTJmMDk3NWVjOTlmZmNhZjg0MDUxZGI5
ZDUzLi5mMzg3NzRhZjBiMjZmN2Q4OTEzODk1MDgyM2I2Zjc1NjMwNmY1OGJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCkBAIC0yOCw2
ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAorI2luY2x1ZGUgIkNyeXB0
b0tleUFFUy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKKyNpbmNsdWRlICJDcnlwdG9L
ZXlSU0EuaCIKICNpbmNsdWRlICJKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCIKICNpbmNsdWRl
IDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKQEAgLTM4LDExICs0MSw0NiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBKU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVj
U3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWls
ZGVyKCZzdGF0ZSk7Ci0gICAgd3JhcHBlZCgpLmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVp
bGRlcik7CisKKyAgICBSZWY8S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0gPSB3cmFwcGVkKCkuYWxn
b3JpdGhtKCk7CisgICAgc3dpdGNoIChhbGdvcml0aG0tPmtleUFsZ29yaXRobUNsYXNzKCkpIHsK
KyAgICBjYXNlIEtleUFsZ29yaXRobUNsYXNzOjpBRVM6IHsKKyAgICAgICAgQWVzS2V5QWxnb3Jp
dGhtJiBhZXNBbGdvcml0aG0gPSBkb3duY2FzdDxBZXNLZXlBbGdvcml0aG0+KGFsZ29yaXRobS5n
ZXQoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJuYW1lIiwgYWVzQWxnb3JpdGhtLm5hbWUpOwor
ICAgICAgICBidWlsZGVyLmFkZCgibGVuZ3RoIiwgYWVzQWxnb3JpdGhtLmxlbmd0aCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEtleUFsZ29yaXRobUNsYXNzOjpITUFDOiB7Cisg
ICAgICAgIEhtYWNLZXlBbGdvcml0aG0mIGhtYWNBbGdvcml0aG0gPSBkb3duY2FzdDxIbWFjS2V5
QWxnb3JpdGhtPihhbGdvcml0aG0uZ2V0KCkpOworICAgICAgICBidWlsZGVyLmFkZCgibmFtZSIs
IGhtYWNBbGdvcml0aG0ubmFtZSk7CisgICAgICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBo
bWFjSGFzaCgmc3RhdGUpOworICAgICAgICBobWFjSGFzaC5hZGQoIm5hbWUiLCBobWFjQWxnb3Jp
dGhtLmhhc2gubmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgaG1hY0hhc2gpOwor
ICAgICAgICBidWlsZGVyLmFkZCgibGVuZ3RoIiwgaG1hY0FsZ29yaXRobS5sZW5ndGgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SFJTQTogewor
ICAgICAgICBSc2FIYXNoZWRLZXlBbGdvcml0aG0mIHJzYUFsZ29yaXRobSA9IGRvd25jYXN0PFJz
YUhhc2hlZEtleUFsZ29yaXRobT4oYWxnb3JpdGhtLmdldCgpKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoIm5hbWUiLCByc2FBbGdvcml0aG0ubmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJtb2R1
bHVzTGVuZ3RoIiwgcnNhQWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpOworICAgICAgICBidWlsZGVy
LmFkZCgicHVibGljRXhwb25lbnQiLCByc2FBbGdvcml0aG0ucHVibGljRXhwb25lbnQpOworICAg
ICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgcnNhSGFzaCgmc3RhdGUpOworICAgICAgICBy
c2FIYXNoLmFkZCgibmFtZSIsIHJzYUFsZ29yaXRobS5oYXNoLm5hbWUpOworICAgICAgICBidWls
ZGVyLmFkZCgiaGFzaCIsIHJzYUhhc2gpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBLZXlBbGdvcml0aG1DbGFzczo6UlNBOiB7CisgICAgICAgIFJzYUtleUFsZ29yaXRobSYgcnNh
QWxnb3JpdGhtID0gZG93bmNhc3Q8UnNhS2V5QWxnb3JpdGhtPihhbGdvcml0aG0uZ2V0KCkpOwor
ICAgICAgICBidWlsZGVyLmFkZCgibmFtZSIsIHJzYUFsZ29yaXRobS5uYW1lKTsKKyAgICAgICAg
YnVpbGRlci5hZGQoIm1vZHVsdXNMZW5ndGgiLCByc2FBbGdvcml0aG0ubW9kdWx1c0xlbmd0aCk7
CisgICAgICAgIGJ1aWxkZXIuYWRkKCJwdWJsaWNFeHBvbmVudCIsIHJzYUFsZ29yaXRobS5wdWJs
aWNFeHBvbmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKICAgICByZXR1cm4g
YnVpbGRlci5yZXN1bHQoKTsKIH0KIAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjI3N2U3NjhhNTI4ODAzOTI5ODgxOGI4MDE4ZGZkMmVk
YTU3NmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgot
Ci0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ3J5
cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOjpDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIoKQotewotfQotCi1DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI6On5D
cnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIoKQotewotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdmZTE0YmIwYzQ5YTQ0NjA3OTMx
MTIzYWM4NWE0YzRlMzdlZjg1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRp
b25CdWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXJfaAotI2RlZmluZSBDcnlw
dG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXJfaAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLSNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcik7Ci1wdWJsaWM6Ci0g
ICAgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCk7Ci0gICAgdmlydHVhbCB+Q3J5
cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+IGNyZWF0ZUVtcHR5Q2xv
bmUoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCB1bnNp
Z25lZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFN0cmlu
ZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgPSAwOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0jZW5kaWYg
Ly8gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleS5jcHAKaW5kZXggZDgyN2Y3Y2NlMjQ4MDJlYjFjNTlmYWRiZGNjZDFhYmFlOGVjNzU4
MS4uNjAwNzUwNjY3MWQ1OGYyMTI0NmFmZDI1ZTZiOWI3ZTQxODUxODViZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL0NyeXB0b0tleS5jcHAKQEAgLTI4LDE1ICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFNV
QlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNyeXB0b0tleTo6Q3J5cHRvS2V5
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBUeXBlIHR5cGUsIGJvb2wgZXh0
cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlcykKLSAgICA6IG1fYWxnb3JpdGhtKGFsZ29y
aXRobSkKK0NyeXB0b0tleTo6Q3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxn
b3JpdGhtSWRlbnRpZmllciwgVHlwZSB0eXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlV
c2FnZSB1c2FnZXMpCisgICAgOiBtX2FsZ29yaXRobUlkZW50aWZpZXIoYWxnb3JpdGhtSWRlbnRp
ZmllcikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9leHRyYWN0YWJsZShleHRyYWN0YWJs
ZSkKICAgICAsIG1fdXNhZ2VzKHVzYWdlcykKQEAgLTQ3LDEyICs0NSw2IEBAIENyeXB0b0tleTo6
fkNyeXB0b0tleSgpCiB7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRobURlc2Ny
aXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29uc3QK
LXsKLSAgICBidWlsZGVyLmFkZCgibmFtZSIsIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5n
bGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRobSkpOwotICAgIC8vIFN1YmNsYXNz
ZXMgd2lsbCBhZGQgb3RoZXIga2V5cy4KLX0KLQogYXV0byBDcnlwdG9LZXk6OnVzYWdlcygpIGNv
bnN0IC0+IFZlY3RvcjxVc2FnZT4KIHsKICAgICAvLyBUaGUgcmVzdWx0IGlzIG9yZGVyZWQgYWxw
aGFiZXRpY2FsbHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5
LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKaW5kZXggZWI2YjcwMTZkNzUx
YTk3MjFhMDlhYjVhMGQzMzMyOGIyZGYxZGRkZS4uOTdiMWI4NzJlZTdhYWJlNWJjNWVhMjc4ZWYw
ZjA3NjFmNjNjNTJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tl
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaApAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxMSArNDMsMzcgQEAgY2xhc3Mg
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwogY2xhc3MgQ3J5cHRvS2V5RGF0YTsK
IAogZW51bSBjbGFzcyBDcnlwdG9LZXlDbGFzcyB7Ci0gICAgSE1BQywKICAgICBBRVMsCisgICAg
SE1BQywKICAgICBSU0EKIH07CiAKK2VudW0gY2xhc3MgS2V5QWxnb3JpdGhtQ2xhc3MgeworICAg
IEFFUywKKyAgICBITUFDLAorICAgIFJTQSwKKyAgICBIUlNBCit9OworCitzdHJ1Y3QgS2V5SGFz
aEFsZ29yaXRobSB7CisgICAgU3RyaW5nIG5hbWU7Cit9OworCitjbGFzcyBLZXlBbGdvcml0aG0g
OiBwdWJsaWMgUmVmQ291bnRlZDxLZXlBbGdvcml0aG0+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmcg
bmFtZTsKKworICAgIEtleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG4pCisgICAgICAgIDogbmFt
ZShuKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+S2V5QWxnb3JpdGhtKCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygp
IGNvbnN0ID0gMDsKK307CisKIGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBSZWZDb3VudGVkPENy
eXB0b0tleT4gewogcHVibGljOgogICAgIHVzaW5nIFR5cGUgPSBDcnlwdG9LZXlUeXBlOwpAQCAt
NTcsNyArODQsNyBAQCBwdWJsaWM6CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBib29s
IGV4dHJhY3RhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYWN0YWJsZTsgfQotICAgIHZpcnR1
YWwgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0
aW9uQnVpbGRlciYpIGNvbnN0OworICAgIHZpcnR1YWwgUmVmPEtleUFsZ29yaXRobT4gYWxnb3Jp
dGhtKCkgY29uc3QgPSAwOwogCiAgICAgLy8gRklYTUU6IENvbmZ1c2luZyB0byBoYXZlIENyeXB0
b0tleVVzYWdlIGFuZCBDcnlwdG9LZXk6OlVzYWdlIG5hbWVkIGFsbW9zdCB0aGUgc2FtZSwgYnV0
IGJlIHNsaWdodGx5IGRpZmZlcmVudC4KICAgICAvLyBDcnlwdG9LZXlVc2FnZSB2YWx1ZXMgYXJl
IGJpdCBtYXNrcyBzbyB0aGV5IGNhbiBiZSBjb21iaW5lZCB3aXRoICJvciIsIHdoaWxlIHRoaXMg
aXMgYSBub3JtYWwgZW51bSB0aGF0IG11c3QKQEAgLTY1LDcgKzkyLDcgQEAgcHVibGljOgogICAg
IGVudW0gY2xhc3MgVXNhZ2UgeyBFbmNyeXB0LCBEZWNyeXB0LCBTaWduLCBWZXJpZnksIERlcml2
ZUtleSwgRGVyaXZlQml0cywgV3JhcEtleSwgVW53cmFwS2V5IH07CiAgICAgVmVjdG9yPFVzYWdl
PiB1c2FnZXMoKSBjb25zdDsKIAotICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3Jp
dGhtSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtOyB9CisgICAgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG1JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9hbGdvcml0aG1JZGVudGlmaWVyOyB9CiAgICAgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2VzQml0bWFw
KCkgY29uc3QgeyByZXR1cm4gbV91c2FnZXM7IH0KICAgICBib29sIGFsbG93cyhDcnlwdG9LZXlV
c2FnZSB1c2FnZSkgY29uc3QgeyByZXR1cm4gdXNhZ2UgPT0gKG1fdXNhZ2VzICYgdXNhZ2UpOyB9
CiAKQEAgLTczLDggKzEwMCwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgVmVjdG9yPHVpbnQ4
X3Q+IHJhbmRvbURhdGEoc2l6ZV90KTsKIAorcHJvdGVjdGVkOgorICAgIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgbV9hbGdvcml0aG1JZGVudGlmaWVyOworCiBwcml2YXRlOgotICAgIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgbV9hbGdvcml0aG07CiAgICAgVHlwZSBtX3R5cGU7CiAgICAg
Ym9vbCBtX2V4dHJhY3RhYmxlOwogICAgIENyeXB0b0tleVVzYWdlIG1fdXNhZ2VzOwpAQCAtOTIs
NSArMTIxLDEwIEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9DbGFz
c05hbWUpIFwKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q3J5cHRvS2V5
JiBrZXkpIHsgcmV0dXJuIGtleS5rZXlDbGFzcygpID09IFdlYkNvcmU6OktleUNsYXNzOyB9IFwK
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0tFWV9BTEdPUklUSE0oVG9DbGFzc05hbWUsIEtleUFsZ29yaXRobUNsYXNzKSBcCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvQ2xhc3NOYW1lKSBcCisgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OktleUFsZ29yaXRobSYgYWxnb3JpdGht
KSB7IHJldHVybiBhbGdvcml0aG0ua2V5QWxnb3JpdGhtQ2xhc3MoKSA9PSBXZWJDb3JlOjpLZXlB
bGdvcml0aG1DbGFzczsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKICNlbmRpZiAvLyBDcnlwdG9LZXlfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbAppbmRleCAxMjg5MjQwZmVkNjQwNzYzNzRjZjE3YWZiY2Uy
NTUyNWJjZGZhY2VjLi4zYTQxNmEyMTUyNDdlMzM0NGY4ZmM0NDc5OGQyNDM1MTJlYTAxZDQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbApAQCAtNDksNiArNDksNiBAQCBlbnVtIEtl
eVVzYWdlIHsKIF0gaW50ZXJmYWNlIENyeXB0b0tleSB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEtleVR5cGUgdHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBleHRyYWN0YWJs
ZTsKLSAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1dGUgQWxnb3JpdGhtIGFsZ29yaXRobTsK
KyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgb2JqZWN0IGFsZ29yaXRobTsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8S2V5VXNhZ2U+IHVzYWdlczsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAppbmRleCA0NGI1MDA3
YjkxMjc2NjdlZjJkNzU1ODk0ODliN2I5MWM2ZjU0YjVhLi5kMzI5NWM4OTZjZjY2MDA0YTU1OTYw
NDZjMGJhMTBhNDlhNTcxODI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlBRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUFFUy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRP
KQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRh
T2N0ZXRTZXF1ZW5jZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjMs
MTAgKzYyLDkgQEAgUmVmUHRyPENyeXB0b0tleUFFUz4gQ3J5cHRvS2V5QUVTOjpnZW5lcmF0ZShD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENyeXB0b0tleUFFUyhhbGdvcml0aG0sIHJhbmRvbURhdGEobGVuZ3RoQml0cyAvIDgpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKSk7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5QUVTOjpidWlsZEFsZ29y
aXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRl
cikgY29uc3QKK1JlZjxLZXlBbGdvcml0aG0+IENyeXB0b0tleUFFUzo6YWxnb3JpdGhtKCkgY29u
c3QKIHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7
Ci0gICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIG1fa2V5LnNpemUoKSAqIDgpOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEFlc0tleUFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6
c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9hbGdvcml0aG1JZGVudGlmaWVyKSwgbV9r
ZXkuc2l6ZSgpICogOCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gQ3J5
cHRvS2V5QUVTOjpleHBvcnREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmgKaW5kZXggNDVhNWJiODIzNjRlZWIxMWZkYzUzMDUxYjFkZjM1ZmEzNTMy
YWZmNy4uY2RhZWQ4M2U4YzA5MjAxMTBhOTQyNTRjYjJmNDg4ZjI1ZTAxNGVhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKQEAgLTM0LDYgKzM0LDIyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQWVzS2V5QWxnb3JpdGhtIDogcHVibGljIEtl
eUFsZ29yaXRobSB7CitwdWJsaWM6CisgICAgc2l6ZV90IGxlbmd0aDsKKworICAgIEFlc0tleUFs
Z29yaXRobShjb25zdCBTdHJpbmcmIG4sIHNpemVfdCBsKQorICAgICAgICA6IEtleUFsZ29yaXRo
bShuKQorICAgICAgICAsIGxlbmd0aChsKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QWVz
S2V5QWxnb3JpdGhtKCkKKyAgICB7CisgICAgfQorCisgICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5
QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFz
czo6QUVTOyB9Cit9OworCiBjbGFzcyBDcnlwdG9LZXlBRVMgZmluYWwgOiBwdWJsaWMgQ3J5cHRv
S2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleUFFUz4gY3JlYXRlKENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCkBAIC01Myw3ICs2OSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ3J5cHRvS2V5QUVTKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBib29sIGV4dHJhY3RhYmxlLCBD
cnlwdG9LZXlVc2FnZSk7CiAKLSAgICB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5
cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
PEtleUFsZ29yaXRobT4gYWxnb3JpdGhtKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0tleURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFZlY3Rvcjx1aW50OF90PiBtX2tleTsKQEAgLTYzLDYgKzc5LDggQEAgcHJpdmF0ZToKIAogU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUFFUywgQ3J5cHRvS2V5Q2xh
c3M6OkFFUykKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKEFlc0tleUFs
Z29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkFFUykKKwogI2VuZGlmIC8vIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQogCiAjZW5kaWYgLy8gQ3J5cHRvS2V5QUVTX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKaW5kZXggYWY2MDRmNGY3N2NlNDJkM2EyZGM0
ZjA2MmQyNTQ5NTU0MjI0YjBjMC4uODZhNDA5YmJhM2M0OTk4ZWFmMmM2Y2IyNzA2NDdjNjJlYWNi
MDExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1B
Qy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAK
QEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5j
ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjcsMTUgKzY2LDEzIEBA
IFJlZlB0cjxDcnlwdG9LZXlITUFDPiBDcnlwdG9LZXlITUFDOjpnZW5lcmF0ZShzaXplX3QgbGVu
Z3RoQnl0ZXMsIENyeXB0b0FsZ29yaXRoCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9L
ZXlITUFDKHJhbmRvbURhdGEobGVuZ3RoQnl0ZXMpLCBoYXNoLCBleHRyYWN0YWJsZSwgdXNhZ2Vz
KSk7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihD
cnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8S2V5
QWxnb3JpdGhtPiBDcnlwdG9LZXlITUFDOjphbGdvcml0aG0oKSBjb25zdAogewotICAgIENyeXB0
b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihidWlsZGVyKTsKKyAgICBLZXlIYXNoQWxn
b3JpdGhtIGhhc2hBbGdvcml0aG07CisgICAgaGFzaEFsZ29yaXRobS5uYW1lID0gQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCk7CiAK
LSAgICBhdXRvIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xv
bmUoKTsKLSAgICBoYXNoRGVzY3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7Ci0g
ICAgYnVpbGRlci5hZGQoImhhc2giLCAqaGFzaERlc2NyaXB0aW9uQnVpbGRlcik7Ci0KLSAgICBi
dWlsZGVyLmFkZCgibGVuZ3RoIiwgbV9rZXkuc2l6ZSgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBIbWFjS2V5QWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24o
KS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRobUlkZW50aWZpZXIpLAorICAgICAgICBXVEZN
b3ZlKGhhc2hBbGdvcml0aG0pLCBtX2tleS5zaXplKCkpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0tleURhdGE+IENyeXB0b0tleUhNQUM6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCmluZGV4IDQ2OGFkMDc3ZjE5NjFh
ZDhkYWQ3YjRiNDM5OThlYjE3MmNkMjMzMDcuLmQ5YmI1ZjE4N2Q4NTJkNjg5ZTBjMDdjMzk5NzQ0
NmU2ZGFhNGY2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUhNQUMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFD
LmgKQEAgLTMzLDYgKzMzLDI0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSG1h
Y0tleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdvcml0aG0geworcHVibGljOgorICAgIEtleUhh
c2hBbGdvcml0aG0gaGFzaDsKKyAgICBzaXplX3QgbGVuZ3RoOworCisgICAgSG1hY0tleUFsZ29y
aXRobShjb25zdCBTdHJpbmcmIG4sIEtleUhhc2hBbGdvcml0aG0mJiBoLCBzaXplX3QgbCkKKyAg
ICAgICAgOiBLZXlBbGdvcml0aG0obikKKyAgICAgICAgLCBoYXNoKFdURk1vdmUoaCkpCisgICAg
ICAgICwgbGVuZ3RoKGwpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5IbWFjS2V5QWxnb3Jp
dGhtKCkKKyAgICB7CisgICAgfQorCisgICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGht
Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6SE1BQzsg
fQorfTsKKwogY2xhc3MgQ3J5cHRvS2V5SE1BQyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9LZXkgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8Q3J5cHRvS2V5SE1BQz4gY3JlYXRlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0
cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQpAQCAtNTMsNyArNzEsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIENyeXB0b0tleUhNQUMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXks
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRv
S2V5VXNhZ2UpOwogCi0gICAgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxLZXlB
bGdvcml0aG0+IGFsZ29yaXRobSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIG1faGFzaDsKQEAgLTY0LDUgKzgyLDcgQEAgcHJpdmF0ZToK
IAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUhNQUMsIENyeXB0
b0tleUNsYXNzOjpITUFDKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0o
SG1hY0tleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUMpCisKICNlbmRpZiAvLyBF
TkFCTEUoU1VCVExFX0NSWVBUTykKICNlbmRpZiAvLyBDcnlwdG9LZXlITUFDX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKaW5kZXggNmVhMjAwYjhjMTcxZTgzMjAz
NGY0NmVmNDNkYzk2NWYwYzVkOWVlMC4uZTM5NGNlMzYyMDYxYmQ5ZDQwZDk1YWNiNTg3MjRiMGRj
YjkzMTk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5
UlNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKQEAg
LTQ3LDYgKzQ3LDQxIEBAIGNsYXNzIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOwogY2xhc3Mg
Q3J5cHRvS2V5UGFpcjsKIGNsYXNzIFByb21pc2VXcmFwcGVyOwogCitjbGFzcyBSc2FLZXlBbGdv
cml0aG0gOiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBzaXplX3QgbW9kdWx1
c0xlbmd0aDsKKyAgICBWZWN0b3I8dWludDhfdD4gcHVibGljRXhwb25lbnQ7CisKKyAgICBSc2FL
ZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuLCBzaXplX3QgbSwgVmVjdG9yPHVpbnQ4X3Q+JiYg
cCkKKyAgICAgICAgOiBLZXlBbGdvcml0aG0obikKKyAgICAgICAgLCBtb2R1bHVzTGVuZ3RoKG0p
CisgICAgICAgICwgcHVibGljRXhwb25lbnQoV1RGTW92ZShwKSkKKyAgICB7CisgICAgfQorICAg
IHZpcnR1YWwgflJzYUtleUFsZ29yaXRobSgpCisgICAgeworICAgIH0KKworICAgIEtleUFsZ29y
aXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2V5
QWxnb3JpdGhtQ2xhc3M6OlJTQTsgfQorfTsKKworY2xhc3MgUnNhSGFzaGVkS2V5QWxnb3JpdGht
IDogcHVibGljIFJzYUtleUFsZ29yaXRobSB7CitwdWJsaWM6CisgICAgS2V5SGFzaEFsZ29yaXRo
bSBoYXNoOworCisgICAgUnNhSGFzaGVkS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbiwgc2l6
ZV90IG0sIFZlY3Rvcjx1aW50OF90PiYmIHAsIEtleUhhc2hBbGdvcml0aG0mJiBoKQorICAgICAg
ICA6IFJzYUtleUFsZ29yaXRobShuLCBtLCBXVEZNb3ZlKHApKQorICAgICAgICAsIGhhc2goV1RG
TW92ZShoKSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflJzYUhhc2hlZEtleUFsZ29yaXRo
bSgpCisgICAgeworICAgIH0KKworCisgICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGht
Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6SFJTQTsg
fQorfTsKKwogY2xhc3MgQ3J5cHRvS2V5UlNBIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxDcnlwdG9LZXlSU0E+IGNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwg
Ym9vbCBoYXNIYXNoLCBDcnlwdG9LZXlUeXBlIHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBsYXRmb3Jt
S2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKQEAgLTcxLDcgKzEw
Niw3IEBAIHByaXZhdGU6CiAKICAgICBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpSU0E7IH0KIAotICAgIHZvaWQgYnVpbGRB
bGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWY8S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0oKSBjb25zdCBv
dmVycmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0RGF0YSgp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUGxhdGZvcm1SU0FLZXkgbV9wbGF0Zm9ybUtleTsKQEAg
LTg0LDUgKzExOSw5IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRP
X0tFWShDcnlwdG9LZXlSU0EsIENyeXB0b0tleUNsYXNzOjpSU0EpCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfS0VZX0FMR09SSVRITShSc2FLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNz
OjpSU0EpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShSc2FIYXNoZWRL
ZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpIUlNBKQorCiAjZW5kaWYgLy8gRU5BQkxF
KFNVQlRMRV9DUllQVE8pCiAjZW5kaWYgLy8gQ3J5cHRvS2V5UlNBX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAppbmRleCAxNDBjOWIzMTg4ZjliOGE0
YWY2NDlkZjQ4NzRmN2QwOTA5ZDBhMWEyLi5mZGE2YjEzOGM3ZGE3OTU5MDAzYTVlOTUzMjM5MmMz
N2IzZTk5YThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tl
eVJTQU1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FN
YWMuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNp
bmNsdWRlICJDb21tb25DcnlwdG9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0
aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAi
Q3J5cHRvS2V5UGFpci5oIgpAQCAtMTYwLDI2ICsxNTksMjYgQEAgc2l6ZV90IENyeXB0b0tleVJT
QTo6a2V5U2l6ZUluQml0cygpIGNvbnN0CiAgICAgcmV0dXJuIG1vZHVsdXMuc2l6ZSgpICogODsK
IH0KIAotdm9pZCBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPEtleUFsZ29y
aXRobT4gQ3J5cHRvS2V5UlNBOjphbGdvcml0aG0oKSBjb25zdAogewotICAgIENyeXB0b0tleTo6
YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihidWlsZGVyKTsKLQorICAgIFN0cmluZyBuYW1lID0g
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1f
YWxnb3JpdGhtSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZHVsdXM7CiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHB1YmxpY0V4cG9uZW50OwogICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0
dXMgPSBnZXRQdWJsaWNLZXlDb21wb25lbnRzKG1fcGxhdGZvcm1LZXksIG1vZHVsdXMsIHB1Ymxp
Y0V4cG9uZW50KTsKICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291
bGRuJ3QgZ2V0IFJTQSBrZXkgY29tcG9uZW50cywgc3RhdHVzICVkIiwgc3RhdHVzKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICBwdWJsaWNFeHBvbmVudC5jbGVhcigpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBSc2FLZXlBbGdvcml0aG0obmFtZSwgMCwgV1RGTW92ZShwdWJsaWNF
eHBvbmVudCkpKTsKICAgICB9CiAKLSAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xlbmd0aCIsIG1v
ZHVsdXMuc2l6ZSgpICogOCk7Ci0gICAgYnVpbGRlci5hZGQoInB1YmxpY0V4cG9uZW50IiwgcHVi
bGljRXhwb25lbnQpOwotCisgICAgc2l6ZV90IG1vZHVsdXNMZW5ndGggPSBtb2R1bHVzLnNpemUo
KSAqIDg7CiAgICAgaWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKSB7Ci0gICAgICAgIGF1
dG8gaGFzaERlc2NyaXB0aW9uQnVpbGRlciA9IGJ1aWxkZXIuY3JlYXRlRW1wdHlDbG9uZSgpOwot
ICAgICAgICBoYXNoRGVzY3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7Ci0gICAg
ICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIpOworICAgICAg
ICBLZXlIYXNoQWxnb3JpdGhtIGhhc2hBbGdvcml0aG07CisgICAgICAgIGhhc2hBbGdvcml0aG0u
bmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRp
ZmllcihtX2hhc2gpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJzYUhhc2hlZEtl
eUFsZ29yaXRobShuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSwg
V1RGTW92ZShoYXNoQWxnb3JpdGhtKSkpOwogICAgIH0KKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBSc2FLZXlBbGdvcml0aG0obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBv
bmVudCkpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IENyeXB0b0tleVJT
QTo6ZXhwb3J0RGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzhiYTMzNWQ1OGE1YWE1MmVlZjA0ZTA5NGJi
OTBhZjFiMTNjNzA0ZC4uMjlkODMxNmY4NDA2YmNhMDc1OWQwN2RhZDEzYTIyNzcwNmExZDVlMyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA5LTA2ICBKaWV3ZW4gVGFuICA8amlld2VuX3Rh
bkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29yaXRobXMgc2hvdWxkIGJlIGV4
cG9zZWQgdmlhIEtleUFsZ29yaXRobSBpbnRlcmZhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODc0OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MjczNTk0Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBjcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBjcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5Lmh0bWw6CisKIDIwMTYtMDgtMTkg
IERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBwcmVm
ZXJMb3dQb3dlclRvSGlnaFBlcmZvcm1hbmNlIGZvciBXZWJHTApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dAppbmRl
eCA1YmQzMWJkMGE3YTcyMTZmNmQ0MGIxZjZmNTU4OTBlMGFkMTNhY2U0Li41MzkyMWU0MjcwM2Zl
MTRiMmVlZWU2MjFhYTEyMTMwM2I2MDI4Y2JiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jcnlw
dG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dApAQCAtMTMsNiAr
MTMsNyBAQCBQQVNTIGtleS50eXBlIGlzICdzZWNyZXQnCiBQQVNTIGtleS5leHRyYWN0YWJsZSBp
cyB0cnVlCiBQQVNTIGtleS5hbGdvcml0aG0ubmFtZSBpcyAnSE1BQycKIFBBU1Mga2V5LmFsZ29y
aXRobS5sZW5ndGggaXMgNjQKK1BBU1Mga2V5LmFsZ29yaXRobS5oYXNoLm5hbWUgaXMgJ1NIQS0x
JwogUEFTUyBrZXkudXNhZ2VzIGlzIFsic2lnbiIsICJ2ZXJpZnkiXQogCiBHZW5lcmF0aW5nIGEg
a2V5IHdpdGggY3VzdG9tIGxlbmd0aC4uLgpAQCAtMjAsNiArMjEsNyBAQCBQQVNTIGtleS50eXBl
IGlzICdzZWNyZXQnCiBQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0cnVlCiBQQVNTIGtleS5hbGdv
cml0aG0ubmFtZSBpcyAnSE1BQycKIFBBU1Mga2V5LmFsZ29yaXRobS5sZW5ndGggaXMgNQorUEFT
UyBrZXkuYWxnb3JpdGhtLmhhc2gubmFtZSBpcyAnU0hBLTEnCiBQQVNTIGtleS51c2FnZXMgaXMg
WyJzaWduIl0KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5odG1sIGIvTGF5b3V0
VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5odG1sCmluZGV4IDNhZmM1Njg1
YzE3OGExMjM3YTZhOTM2MDBjNGYwOWEzYTkxODg4OWIuLjJiOWJmM2ExN2E3MThhYWYwNjc0Yjk3
OGRlMDA0MDBjNWY4N2QyZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
aG1hYy1nZW5lcmF0ZS1rZXkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2ht
YWMtZ2VuZXJhdGUta2V5Lmh0bWwKQEAgLTI4LDYgKzI4LDcgQEAgY3J5cHRvLnN1YnRsZS5nZW5l
cmF0ZUtleSh7bmFtZTogImhtYWMiLCBoYXNoOiAic2hhLTEifSwgZXh0cmFjdGFibGUsIFsic2ln
biIsICIKICAgICBzaG91bGRCZSgia2V5LmV4dHJhY3RhYmxlIiwgInRydWUiKTsKICAgICBzaG91
bGRCZSgia2V5LmFsZ29yaXRobS5uYW1lIiwgIidITUFDJyIpOwogICAgIHNob3VsZEJlKCJrZXku
YWxnb3JpdGhtLmxlbmd0aCIsICI2NCIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmhh
c2gubmFtZSIsICInU0hBLTEnIik7CiAgICAgc2hvdWxkQmUoImtleS51c2FnZXMiLCAnWyJzaWdu
IiwgInZlcmlmeSJdJyk7CiAKICAgICBkZWJ1ZygiXG5HZW5lcmF0aW5nIGEga2V5IHdpdGggY3Vz
dG9tIGxlbmd0aC4uLiIpOwpAQCAtMzksNiArNDAsNyBAQCBjcnlwdG8uc3VidGxlLmdlbmVyYXRl
S2V5KHtuYW1lOiAiaG1hYyIsIGhhc2g6ICJzaGEtMSJ9LCBleHRyYWN0YWJsZSwgWyJzaWduIiwg
IgogICAgIHNob3VsZEJlKCJrZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOwogICAgIHNob3VsZEJl
KCJrZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ0hNQUMnIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdv
cml0aG0ubGVuZ3RoIiwgIjUiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5oYXNoLm5h
bWUiLCAiJ1NIQS0xJyIpOwogICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgJ1sic2lnbiJdJyk7
CiAgICAgZmluaXNoSlNUZXN0KCk7CiB9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288274</attachid>
            <date>2016-09-08 10:29:10 -0700</date>
            <delta_ts>2016-09-13 16:56:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128748-20160908102644.patch</filename>
            <type>text/plain</type>
            <size>37459</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0NjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzg3MGQ5MmM3NDkzZTY4
OTYxMGZkNmJjZGVhMDJhMGVmOTU5NjczNy4uMWY1YjJjMmZiZjYwOTQ5ZmUwMTc2MDE0N2FkMDli
OTEyYWRmNjM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA5LTA2ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBpbnRlcmZhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODc0OAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjczNTk0Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBjdXN0b20gQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci9idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uIHdpdGggS2V5QWxnb3JpdGhtIGludGVyZmFjZSB3
aGljaCBpcworICAgICAgICBkZWZpbmVkIGJ5IHRoZSBzcGVjLgorCisgICAgICAgIE5vIGNoYW5n
ZSBvZiBiZWhhdmlvcnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAg
KiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAg
ICAgUmVtb3ZlIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAuCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXI6OmNyZWF0ZUVtcHR5Q2xvbmUpOiBEZWxldGVkLgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5
OjphbGdvcml0aG0pOgorICAgICAgICBHZXQgcmlkZSBvZiBkZXBlbmRlbmN5IG9uIENyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlci4KKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3Jp
dGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjcnlwdG8vQ3J5
cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmg6IFJlbW92ZWQuCisgICAgICAgIFJlcGxh
Y2UgaXQgd2l0aCBLZXlBbGdvcml0aG0uCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXk6OkNyeXB0b0tleSk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9DcnlwdG9LZXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleUFsZ29yaXRo
bTo6S2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OktleUFsZ29yaXRobTo6fktleUFs
Z29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXk6OmFsZ29yaXRobUlkZW50aWZp
ZXIpOgorICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXkuaWRsOgorICAgICAgICBBZGQgS2V5QWxn
b3JpdGhtIGludGVyZmFjZSB3aGljaCBpcyByZXR1cm5lZCB2aWEgQ3J5cHRvS2V5LmFsZ29yaXRo
bSgpIG1ldGhvZCwKKyAgICAgICAgYW5kIHJlbmFtZSBtX2FsZ29yaXRobSB0byBtX2FsZ29yaXRo
bUlkZW50aWZpZXIgdG8gZGlzdGluZ3VzaCBpdCB3aXRoIG5ld2x5CisgICAgICAgIGFkZGVkIEtl
eUFsZ29yaXRobSBpbnRlcmZhY2UuCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVT
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6YWxnb3JpdGhtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmg6CisgICAgICAgIChX
ZWJDb3JlOjpBZXNLZXlBbGdvcml0aG06OkFlc0tleUFsZ29yaXRobSk6CisgICAgICAgIChXZWJD
b3JlOjpBZXNLZXlBbGdvcml0aG06On5BZXNLZXlBbGdvcml0aG0pOgorICAgICAgICAqIGNyeXB0
by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1B
Qzo6YWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxn
b3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0
b0tleUhNQUMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhtYWNLZXlBbGdvcml0aG06OkhtYWNLZXlB
bGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6SG1hY0tleUFsZ29yaXRobTo6fkhtYWNLZXlB
bGdvcml0aG0pOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UnNhS2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOgorICAgICAgICAo
V2ViQ29yZTo6UnNhS2V5QWxnb3JpdGhtOjp+UnNhS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdl
YkNvcmU6OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6flJzYUhhc2hlZEtleUFsZ29y
aXRobSk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjphbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKTogRGVsZXRlZC4KKwogMjAx
Ni0wOC0xOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmRl
ck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkgY2xlYW51cC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggNjA4OWYyZGMyNjZkZTBmYWUxODFjM2NhNjgwZDNlMzQxMWU2ZTg3OS4uNTU5OTQ3
ODVlOWMwZjY5M2I3NGZlNmUzZWM4NDU4ZWM5NWQzNjNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UKQEAgLTQwMyw3ICs0MDMsNiBAQCBlbmRpZiAoKQogaWYgKEVOQUJMRV9TVUJUTEVfQ1JZ
UFRPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBjcnlwdG8vQ3J5
cHRvQWxnb3JpdGhtLmNwcAotICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRp
b25CdWlsZGVyLmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3Bw
CiAgICAgICAgIGNyeXB0by9DcnlwdG9LZXkuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9LZXlQ
YWlyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA5MzM0Y2ZiN2VlYzgwMzlhNzU4
YmJmZWZjZWNkNzU5NGYwMDk3MTVjLi44ODkzZjZmNTkyNTJkZTliM2ZjYmQzOTI5ODhhYWViOGUz
MzVjZjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtODAwLDcgKzgwMCw2IEBAIGVu
ZGlmICgpCiBpZiAoRU5BQkxFX1NVQlRMRV9DUllQVE8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgICAgIGNy
eXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCiAgICAgICAgIGNyeXB0
by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleS5j
cHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleVBhaXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCmluZGV4IGU3YThkYmZjMWQxYjBmZDA4ODA2ODM5NDhkYjllZTA3OTc0MGMxNjIuLjEyMWY5
MWQ1N2I0NzU4MWQxZWU4ZWE0ODZiZmVjY2Y1Y2NhMmM2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCkBAIC0zMDcsNyArMzA3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAK
ICAgICBjcnlwdG8vQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNwcAogICAgIGNyeXB0by9DcnlwdG9B
bGdvcml0aG0uY3BwCi0gICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHAKICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwCiAgICAgY3J5cHRv
L0NyeXB0b0tleS5jcHAKICAgICBjcnlwdG8vQ3J5cHRvS2V5UGFpci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MTAwYmQ5
YzM1MTc0OTNkMzBhNGI1OGJlMTVlZTYwMjMwZWUxM2I5Li42ZjU4ZDVmNWFhODI0MTkwOWFlMTM5
NGIwMjBkNzQyMmY5YzY5MjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzExLDggKzYzMTEsNiBAQAogCQlFMTU3QThFNDE4
MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEUyMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9L
ZXkuY3BwICovOyB9OwogCQlFMTU3QThFNTE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFMzE4
MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggKi87IH07CiAJCUUxNTdBOEU4MTgxODRDNjcw
MDlGODIxRCAvKiBKU0NyeXB0b0tleUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFNjE4MTg0QzY3MDA5RjgyMUQgLyogSlNDcnlw
dG9LZXlDdXN0b20uY3BwICovOyB9OwotCQlFMTU3QThFQzE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5
cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVBMTgxODUxQUMwMDlGODIxRCAvKiBDcnlw
dG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwICovOyB9OwotCQlFMTU3QThFRDE4MTg1
MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFQjE4MTg1MUFD
MDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggKi87IH07CiAJ
CUUxNTdBOEYwMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RUUx
ODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAgKi87IH07CiAJ
CUUxNTdBOEYxMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVGMTgx
ODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCAqLzsgfTsKIAkJRTE1
QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBY
TUxOU05hbWVzLmggKi87IH07CkBAIC0xNDIzOSw4ICsxNDIzNyw2IEBACiAJCUUxNTdBOEUyMTgx
NzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ3J5cHRvS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTE1N0E4RTMxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tleS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDcnlwdG9LZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTE1N0E4RTYxODE4NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE1N0E4RUExODE4NTFBQzAwOUY4MjFEIC8q
IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTU3QThFQjE4MTg1MUFDMDA5RjgyMUQg
LyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU3QThFRTE4MTg1NDI1MDA5RjgyMUQgLyogSlND
cnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0
aG1CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNUEzNkQ2MTEwNDU3
MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFhNTE5TTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMjQwLDgg
KzIzMjM2LDYgQEAKIAkJCQlFMUZFMTM3MzE4NDAyQTY3MDA4OTJGMTMgLyogQ29tbW9uQ3J5cHRv
VXRpbGl0aWVzLmggKi8sCiAJCQkJRTE3MkFGNkIxODBGMjRDNjAwRkJBREI5IC8qIENyeXB0b0Fs
Z29yaXRobS5jcHAgKi8sCiAJCQkJRTE3MkFGNkMxODBGMjRDNjAwRkJBREI5IC8qIENyeXB0b0Fs
Z29yaXRobS5oICovLAotCQkJCUUxNTdBOEVBMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdv
cml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwICovLAotCQkJCUUxNTdBOEVCMTgxODUxQUMwMDlG
ODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLywKIAkJCQlFMUM2
NTcyNDE4MTZFNjlEMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllci5oICovLAog
CQkJCUUxQzY1NzI2MTgxNkY5RkUwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
LmggKi8sCiAJCQkJRTFGRjhGNkExODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5LmNwcCAqLywKQEAgLTI1MTI0LDcgKzI1MTE4LDYgQEAKIAkJCQlFMUZFMTM3QjE4NEQy
MUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMTI1RjgzQTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlBQzNGNzE4MjRFNUQxMDAzNDk0MjYgLyogQ3J5cHRv
QWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zLmggaW4gSGVhZGVycyAqLywKLQkJCQlFMTU3QThFRDE4
MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMTI1RjgzMjE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3Jp
dGhtSE1BQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5REEyOUMxODE4OUFERDAwMDg4QkM4IC8q
IENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzY1
NzFGMTgxNkU1MDMwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI4OTgwLDcgKzI4OTczLDYgQEAKIAkJCQlFMTI1Rjg0NTE4MjQyNUM5MDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMUZFMTM3QTE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRkUxMzdFMTg0RDI3MDIwMDg5MkYxMyAvKiBDcnlwdG9BbGdv
cml0aG1BRVNfS1dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE1N0E4RUMxODE4NTFBQzAw
OUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMTI1RjgzMTE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1B
Qy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzODE4MjJGMUVCMDBEODRDRDkgLyogQ3J5
cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUZGOEY2QzE4MERC
NUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0
aG1CdWlsZGVyLmNwcAppbmRleCBhOWYzNzI2NTcwZTI4OTRhYmE2MWU4NWNjMDlmMDljMTQ4YjE4
Zjk4Li5kOTljMjdhYmQ5NGM0YjYxMGYwZmQ4MzZlMjJiNmQ3NmQ5ODRhMzdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5jcHAKQEAgLTQ4LDExICs0OCw2IEBAIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6fkpTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlcigpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6Y3JlYXRl
RW1wdHlDbG9uZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlw
dG9BbGdvcml0aG1CdWlsZGVyPihtX2V4ZWMpOwotfQotCiB2b2lkIEpTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIqIGtleSwgdW5zaWduZWQgdmFsdWUpCiB7CiAgICAgVk0m
IHZtID0gbV9leGVjLT52bSgpOwpAQCAtNzUsMTIgKzcwLDExIEBAIHZvaWQgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGJ1ZmZlCiAgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIGFycmF5
Vmlldy0+d3JhcChtX2V4ZWMsIHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAK
LXZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25z
dCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIG5lc3RlZEJ1aWxkZXIpCit2b2lk
IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIqIGtleSwgY29uc3QgSlND
cnlwdG9BbGdvcml0aG1CdWlsZGVyJiBuZXN0ZWRCdWlsZGVyKQogewogICAgIFZNJiB2bSA9IG1f
ZXhlYy0+dm0oKTsKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwga2V5KTsKLSAgICBjb25zdCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXImIGpz
QnVpbGRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciY+KG5l
c3RlZEJ1aWxkZXIpOwotICAgIG1fZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZtLCBpZGVudGlmaWVy
LCBqc0J1aWxkZXIucmVzdWx0KCkpOworICAgIG1fZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZtLCBp
ZGVudGlmaWVyLCBuZXN0ZWRCdWlsZGVyLnJlc3VsdCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9B
bGdvcml0aG1CdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuaAppbmRleCBkNTM3YjRjNjc3MWI5N2ExMDc4MmE0NWZlOTlkOGFhODVi
MDBlZWU5Li4yODczYmQxZjcyNTU2OWE3NWU1MWVjMzJmNDU5YTUyMDM5YzlhZTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxk
ZXIuaApAQCAtMjYsNyArMjYsMTAgQEAKICNpZm5kZWYgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVy
X2gKICNkZWZpbmUgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyX2gKIAotI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCiAKQEAgLTM3LDE5ICs0MCwxOCBAQCBjbGFzcyBKU09iamVjdDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgZmluYWwgOiBwdWJsaWMg
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyIHsKK2NsYXNzIEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNDcnlwdG9BbGdvcml0aG1C
dWlsZGVyKTsKIHB1YmxpYzoKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIoSlNDOjpFeGVj
U3RhdGUqKTsKICAgICB2aXJ0dWFsIH5KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIoKTsKIAogICAg
IEpTQzo6SlNPYmplY3QqIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGlvbmFyeTsgfQog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcj4g
Y3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGQoY29uc3Qg
Y2hhciosIHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25z
dCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBvdmVycmlkZTsKKyAgICB2b2lk
IGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOworICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBj
b25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+Jik7CisgICAgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlciYpOwogCiBwcml2YXRlOgogICAgIEpTQzo6RXhlY1N0YXRlKiBtX2V4ZWM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAKaW5k
ZXggNTg1OTRiZWYyZGIyOWEyZjA5NzVlYzk5ZmZjYWY4NDA1MWRiOWQ1My4uZjM4Nzc0YWYwYjI2
ZjdkODkxMzg5NTA4MjNiNmY3NTYzMDZmNThiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcApAQCAtMjgsNiArMjgsOSBAQAogCiAjaWYg
RU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNs
dWRlICJDcnlwdG9LZXlITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCiAjaW5jbHVk
ZSAiSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oPgogCkBAIC0zOCwxMSArNDEsNDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
SlNWYWx1ZSBKU0NyeXB0b0tleTo6YWxnb3JpdGhtKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29u
c3QKIHsKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgYnVpbGRlcigmc3RhdGUpOwotICAg
IHdyYXBwZWQoKS5idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOworCisgICAgUmVm
PEtleUFsZ29yaXRobT4gYWxnb3JpdGhtID0gd3JhcHBlZCgpLmFsZ29yaXRobSgpOworICAgIHN3
aXRjaCAoYWxnb3JpdGhtLT5rZXlBbGdvcml0aG1DbGFzcygpKSB7CisgICAgY2FzZSBLZXlBbGdv
cml0aG1DbGFzczo6QUVTOiB7CisgICAgICAgIEFlc0tleUFsZ29yaXRobSYgYWVzQWxnb3JpdGht
ID0gZG93bmNhc3Q8QWVzS2V5QWxnb3JpdGhtPihhbGdvcml0aG0uZ2V0KCkpOworICAgICAgICBi
dWlsZGVyLmFkZCgibmFtZSIsIGFlc0FsZ29yaXRobS5uYW1lKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoImxlbmd0aCIsIGFlc0FsZ29yaXRobS5sZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SE1BQzogeworICAgICAgICBIbWFjS2V5QWxn
b3JpdGhtJiBobWFjQWxnb3JpdGhtID0gZG93bmNhc3Q8SG1hY0tleUFsZ29yaXRobT4oYWxnb3Jp
dGhtLmdldCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQoIm5hbWUiLCBobWFjQWxnb3JpdGhtLm5h
bWUpOworICAgICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgaG1hY0hhc2goJnN0YXRlKTsK
KyAgICAgICAgaG1hY0hhc2guYWRkKCJuYW1lIiwgaG1hY0FsZ29yaXRobS5oYXNoLm5hbWUpOwor
ICAgICAgICBidWlsZGVyLmFkZCgiaGFzaCIsIGhtYWNIYXNoKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoImxlbmd0aCIsIGhtYWNBbGdvcml0aG0ubGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0E6IHsKKyAgICAgICAgUnNhSGFzaGVk
S2V5QWxnb3JpdGhtJiByc2FBbGdvcml0aG0gPSBkb3duY2FzdDxSc2FIYXNoZWRLZXlBbGdvcml0
aG0+KGFsZ29yaXRobS5nZXQoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJuYW1lIiwgcnNhQWxn
b3JpdGhtLm5hbWUpOworICAgICAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xlbmd0aCIsIHJzYUFs
Z29yaXRobS5tb2R1bHVzTGVuZ3RoKTsKKyAgICAgICAgYnVpbGRlci5hZGQoInB1YmxpY0V4cG9u
ZW50IiwgcnNhQWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KTsKKyAgICAgICAgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyIHJzYUhhc2goJnN0YXRlKTsKKyAgICAgICAgcnNhSGFzaC5hZGQoIm5hbWUi
LCByc2FBbGdvcml0aG0uaGFzaC5uYW1lKTsKKyAgICAgICAgYnVpbGRlci5hZGQoImhhc2giLCBy
c2FIYXNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xh
c3M6OlJTQTogeworICAgICAgICBSc2FLZXlBbGdvcml0aG0mIHJzYUFsZ29yaXRobSA9IGRvd25j
YXN0PFJzYUtleUFsZ29yaXRobT4oYWxnb3JpdGhtLmdldCgpKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoIm5hbWUiLCByc2FBbGdvcml0aG0ubmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJtb2R1
bHVzTGVuZ3RoIiwgcnNhQWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpOworICAgICAgICBidWlsZGVy
LmFkZCgicHVibGljRXhwb25lbnQiLCByc2FBbGdvcml0aG0ucHVibGljRXhwb25lbnQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIGJ1aWxkZXIucmVzdWx0KCk7
CiB9CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3Jp
dGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9B
bGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4YjIyNzdlNzY4YTUyODgwMzkyOTg4MThiODAxOGRmZDJlZGE1NzZjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCIKLQotI2lmIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlcjo6Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCkKLXsKLX0K
LQotQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOjp+Q3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmUxNGJiMGM0OWE0NDYwNzkzMTEyM2FjODVhNGM0ZTM3ZWY4
NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ3J5cHRvQWxn
b3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKLSNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtRGVzY3Jp
cHRpb25CdWlsZGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKFNV
QlRMRV9DUllQVE8pCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ3J5cHRvQWxnb3Jp
dGhtRGVzY3JpcHRpb25CdWlsZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDcnlwdG9B
bGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIpOwotcHVibGljOgotICAgIENyeXB0b0FsZ29yaXRo
bURlc2NyaXB0aW9uQnVpbGRlcigpOwotICAgIHZpcnR1YWwgfkNyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlcigpOwotCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyPiBjcmVhdGVFbXB0eUNsb25lKCkgY29uc3QgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IENyeXB0b0FsZ29yaXRobURl
c2NyaXB0aW9uQnVpbGRlciYpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotI2VuZGlmIC8vIENyeXB0b0FsZ29yaXRo
bURlc2NyaXB0aW9uQnVpbGRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Q3J5cHRvS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCmluZGV4
IGQ4MjdmN2NjZTI0ODAyZWIxYzU5ZmFkYmRjY2QxYWJhZThlYzc1ODEuLjYwMDc1MDY2NzFkNThm
MjEyNDZhZmQyNWU2YjliN2U0MTg1MTg1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXku
Y3BwCkBAIC0yOCwxNSArMjgsMTMgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0j
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9LZXk6OkNyeXB0b0tleShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGFsZ29yaXRobSwgVHlwZSB0eXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9L
ZXlVc2FnZSB1c2FnZXMpCi0gICAgOiBtX2FsZ29yaXRobShhbGdvcml0aG0pCitDcnlwdG9LZXk6
OkNyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXIs
IFR5cGUgdHlwZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2VzKQorICAg
IDogbV9hbGdvcml0aG1JZGVudGlmaWVyKGFsZ29yaXRobUlkZW50aWZpZXIpCiAgICAgLCBtX3R5
cGUodHlwZSkKICAgICAsIG1fZXh0cmFjdGFibGUoZXh0cmFjdGFibGUpCiAgICAgLCBtX3VzYWdl
cyh1c2FnZXMpCkBAIC00NywxMiArNDUsNiBAQCBDcnlwdG9LZXk6On5DcnlwdG9LZXkoKQogewog
fQogCi12b2lkIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdv
cml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Ci17Ci0gICAgYnVpbGRlci5h
ZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklk
ZW50aWZpZXIobV9hbGdvcml0aG0pKTsKLSAgICAvLyBTdWJjbGFzc2VzIHdpbGwgYWRkIG90aGVy
IGtleXMuCi19Ci0KIGF1dG8gQ3J5cHRvS2V5Ojp1c2FnZXMoKSBjb25zdCAtPiBWZWN0b3I8VXNh
Z2U+CiB7CiAgICAgLy8gVGhlIHJlc3VsdCBpcyBvcmRlcmVkIGFscGhhYmV0aWNhbGx5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0tleS5oCmluZGV4IGViNmI3MDE2ZDc1MWE5NzIxYTA5YWI1YTBkMzMz
MjhiMmRmMWRkZGUuLjk3YjFiODcyZWU3YWFiZTViYzVlYTI3OGVmMGYwNzYxZjYzYzUyYjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDIsMTEgKzQzLDM3IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobURl
c2NyaXB0aW9uQnVpbGRlcjsKIGNsYXNzIENyeXB0b0tleURhdGE7CiAKIGVudW0gY2xhc3MgQ3J5
cHRvS2V5Q2xhc3MgewotICAgIEhNQUMsCiAgICAgQUVTLAorICAgIEhNQUMsCiAgICAgUlNBCiB9
OwogCitlbnVtIGNsYXNzIEtleUFsZ29yaXRobUNsYXNzIHsKKyAgICBBRVMsCisgICAgSE1BQywK
KyAgICBSU0EsCisgICAgSFJTQQorfTsKKworc3RydWN0IEtleUhhc2hBbGdvcml0aG0geworICAg
IFN0cmluZyBuYW1lOworfTsKKworY2xhc3MgS2V5QWxnb3JpdGhtIDogcHVibGljIFJlZkNvdW50
ZWQ8S2V5QWxnb3JpdGhtPiB7CitwdWJsaWM6CisgICAgU3RyaW5nIG5hbWU7CisKKyAgICBLZXlB
bGdvcml0aG0oY29uc3QgU3RyaW5nJiBuKQorICAgICAgICA6IG5hbWUobikKKyAgICB7CisgICAg
fQorICAgIHZpcnR1YWwgfktleUFsZ29yaXRobSgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCA9IDA7Cit9Owor
CiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxDcnlwdG9LZXk+IHsKIHB1Ymxp
YzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRvS2V5VHlwZTsKQEAgLTU3LDcgKzg0LDcgQEAgcHVi
bGljOgogCiAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAgICAgYm9vbCBleHRyYWN0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXh0cmFjdGFibGU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYnVpbGRBbGdv
cml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFJlZjxLZXlBbGdvcml0aG0+IGFsZ29yaXRobSgpIGNvbnN0ID0gMDsK
IAogICAgIC8vIEZJWE1FOiBDb25mdXNpbmcgdG8gaGF2ZSBDcnlwdG9LZXlVc2FnZSBhbmQgQ3J5
cHRvS2V5OjpVc2FnZSBuYW1lZCBhbG1vc3QgdGhlIHNhbWUsIGJ1dCBiZSBzbGlnaHRseSBkaWZm
ZXJlbnQuCiAgICAgLy8gQ3J5cHRvS2V5VXNhZ2UgdmFsdWVzIGFyZSBiaXQgbWFza3Mgc28gdGhl
eSBjYW4gYmUgY29tYmluZWQgd2l0aCAib3IiLCB3aGlsZSB0aGlzIGlzIGEgbm9ybWFsIGVudW0g
dGhhdCBtdXN0CkBAIC02NSw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFVzYWdl
IHsgRW5jcnlwdCwgRGVjcnlwdCwgU2lnbiwgVmVyaWZ5LCBEZXJpdmVLZXksIERlcml2ZUJpdHMs
IFdyYXBLZXksIFVud3JhcEtleSB9OwogICAgIFZlY3RvcjxVc2FnZT4gdXNhZ2VzKCkgY29uc3Q7
CiAKLSAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2FsZ29yaXRobTsgfQorICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtSWRlbnRp
ZmllcjsgfQogICAgIENyeXB0b0tleVVzYWdlIHVzYWdlc0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNhZ2VzOyB9CiAgICAgYm9vbCBhbGxvd3MoQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpIGNvbnN0
IHsgcmV0dXJuIHVzYWdlID09IChtX3VzYWdlcyAmIHVzYWdlKTsgfQogCkBAIC03Myw4ICsxMDAs
MTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiByYW5kb21EYXRhKHNp
emVfdCk7CiAKK3Byb3RlY3RlZDoKKyAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIG1fYWxn
b3JpdGhtSWRlbnRpZmllcjsKKwogcHJpdmF0ZToKLSAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIG1fYWxnb3JpdGhtOwogICAgIFR5cGUgbV90eXBlOwogICAgIGJvb2wgbV9leHRyYWN0YWJs
ZTsKICAgICBDcnlwdG9LZXlVc2FnZSBtX3VzYWdlczsKQEAgLTkyLDUgKzEyMSwxMCBAQCBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvQ2xhc3NOYW1lKSBcCiAgICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNyeXB0b0tleSYga2V5KSB7IHJldHVybiBr
ZXkua2V5Q2xhc3MoKSA9PSBXZWJDb3JlOjpLZXlDbGFzczsgfSBcCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJ
VEhNKFRvQ2xhc3NOYW1lLCBLZXlBbGdvcml0aG1DbGFzcykgXAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlw
ZShjb25zdCBXZWJDb3JlOjpLZXlBbGdvcml0aG0mIGFsZ29yaXRobSkgeyByZXR1cm4gYWxnb3Jp
dGhtLmtleUFsZ29yaXRobUNsYXNzKCkgPT0gV2ViQ29yZTo6S2V5QWxnb3JpdGhtQ2xhc3M7IH0g
XAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCiAjZW5kaWYgLy8gQ3J5cHRvS2V5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9DcnlwdG9LZXkuaWRsIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tl
eS5pZGwKaW5kZXggMTI4OTI0MGZlZDY0MDc2Mzc0Y2YxN2FmYmNlMjU1MjViY2RmYWNlYy4uM2E0
MTZhMjE1MjQ3ZTMzNDRmOGZjNDQ3OThkMjQzNTEyZWEwMWQ0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L0NyeXB0b0tleS5pZGwKQEAgLTQ5LDYgKzQ5LDYgQEAgZW51bSBLZXlVc2FnZSB7CiBdIGludGVy
ZmFjZSBDcnlwdG9LZXkgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBLZXlUeXBlIHR5cGU7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gZXh0cmFjdGFibGU7Ci0gICAgW0N1c3RvbV0g
cmVhZG9ubHkgYXR0cmlidXRlIEFsZ29yaXRobSBhbGdvcml0aG07CisgICAgW0N1c3RvbUdldHRl
cl0gcmVhZG9ubHkgYXR0cmlidXRlIG9iamVjdCBhbGdvcml0aG07CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHNlcXVlbmNlPEtleVVzYWdlPiB1c2FnZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAKaW5kZXggNDRiNTAwN2I5MTI3NjY3ZWYyZDc1NTg5
NDg5YjdiOTFjNmY1NGI1YS4uZDMyOTVjODk2Y2Y2NjAwNGE1NTk2MDQ2YzBiYTEwYTQ5YTU3MTgy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYzLDEwICs2Miw5IEBAIFJlZlB0
cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6Z2VuZXJhdGUoQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllciBhbGdvcml0aG0sCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMo
YWxnb3JpdGhtLCByYW5kb21EYXRhKGxlbmd0aEJpdHMgLyA4KSwgZXh0cmFjdGFibGUsIHVzYWdl
cykpOwogfQogCi12b2lkIENyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihD
cnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8S2V5
QWxnb3JpdGhtPiBDcnlwdG9LZXlBRVM6OmFsZ29yaXRobSgpIGNvbnN0CiB7Ci0gICAgQ3J5cHRv
S2V5OjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOwotICAgIGJ1aWxkZXIuYWRk
KCJsZW5ndGgiLCBtX2tleS5zaXplKCkgKiA4KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBB
ZXNLZXlBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVG
b3JJZGVudGlmaWVyKG1fYWxnb3JpdGhtSWRlbnRpZmllciksIG1fa2V5LnNpemUoKSAqIDgpKTsK
IH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IENyeXB0b0tleUFFUzo6ZXhwb3J0
RGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9Dcnlw
dG9LZXlBRVMuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oCmlu
ZGV4IDQ1YTViYjgyMzY0ZWViMTFmZGM1MzA1MWIxZGYzNWZhMzUzMmFmZjcuLmNkYWVkODNlOGMw
OTIwMTEwYTk0MjU0Y2IyZjQ4OGYyNWUwMTRlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUFFUy5oCkBAIC0zNCw2ICszNCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEFlc0tleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdvcml0aG0geworcHVi
bGljOgorICAgIHNpemVfdCBsZW5ndGg7CisKKyAgICBBZXNLZXlBbGdvcml0aG0oY29uc3QgU3Ry
aW5nJiBuLCBzaXplX3QgbCkKKyAgICAgICAgOiBLZXlBbGdvcml0aG0obikKKyAgICAgICAgLCBs
ZW5ndGgobCkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfkFlc0tleUFsZ29yaXRobSgpCisg
ICAgeworICAgIH0KKworICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkFFUzsgfQorfTsKKwog
Y2xhc3MgQ3J5cHRvS2V5QUVTIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxDcnlwdG9LZXlBRVM+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGFsZ29yaXRobSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQpAQCAtNTMsNyArNjksNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIENyeXB0b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwog
Ci0gICAgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxLZXlBbGdvcml0aG0+IGFs
Z29yaXRobSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlE
YXRhPiBleHBvcnREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4g
bV9rZXk7CkBAIC02Myw2ICs3OSw4IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlBRVMsIENyeXB0b0tleUNsYXNzOjpBRVMpCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShBZXNLZXlBbGdvcml0aG0sIEtleUFsZ29y
aXRobUNsYXNzOjpBRVMpCisKICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAogI2Vu
ZGlmIC8vIENyeXB0b0tleUFFU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlITUFDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUhNQUMuY3BwCmluZGV4IGFmNjA0ZjRmNzdjZTQyZDNhMmRjNGYwNjJkMjU0OTU1NDIyNGIw
YzAuLjg2YTQwOWJiYTNjNDk5OGVhZjJjNmNiMjcwNjQ3YzYyZWFjYjAxMWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRo
bURlc2NyaXB0aW9uQnVpbGRlci5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTY3LDE1ICs2NiwxMyBAQCBSZWZQdHI8Q3J5cHRvS2V5
SE1BQz4gQ3J5cHRvS2V5SE1BQzo6Z2VuZXJhdGUoc2l6ZV90IGxlbmd0aEJ5dGVzLCBDcnlwdG9B
bGdvcml0aAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5SE1BQyhyYW5kb21EYXRh
KGxlbmd0aEJ5dGVzKSwgaGFzaCwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCi12b2lkIENy
eXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPEtleUFsZ29yaXRobT4gQ3J5cHRv
S2V5SE1BQzo6YWxnb3JpdGhtKCkgY29uc3QKIHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3Jp
dGhtRGVzY3JpcHRpb24oYnVpbGRlcik7CisgICAgS2V5SGFzaEFsZ29yaXRobSBoYXNoQWxnb3Jp
dGhtOworICAgIGhhc2hBbGdvcml0aG0ubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5Ojpz
aW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2hhc2gpOwogCi0gICAgYXV0byBoYXNoRGVz
Y3JpcHRpb25CdWlsZGVyID0gYnVpbGRlci5jcmVhdGVFbXB0eUNsb25lKCk7Ci0gICAgaGFzaERl
c2NyaXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNp
bmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOwotICAgIGJ1aWxkZXIuYWRkKCJo
YXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIpOwotCi0gICAgYnVpbGRlci5hZGQoImxlbmd0
aCIsIG1fa2V5LnNpemUoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSG1hY0tleUFsZ29y
aXRobShDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZp
ZXIobV9hbGdvcml0aG1JZGVudGlmaWVyKSwKKyAgICAgICAgV1RGTW92ZShoYXNoQWxnb3JpdGht
KSwgbV9rZXkuc2l6ZSgpKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBD
cnlwdG9LZXlITUFDOjpleHBvcnREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUhNQUMuaAppbmRleCA0NjhhZDA3N2YxOTYxYWQ4ZGFkN2I0YjQzOTk4ZWIx
NzJjZDIzMzA3Li5kOWJiNWYxODdkODUyZDY4OWUwYzA3YzM5OTc0NDZlNmRhYTRmNjlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCkBAIC0zMyw2ICszMywy
NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEhtYWNLZXlBbGdvcml0aG0gOiBw
dWJsaWMgS2V5QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBLZXlIYXNoQWxnb3JpdGhtIGhhc2g7
CisgICAgc2l6ZV90IGxlbmd0aDsKKworICAgIEhtYWNLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5n
JiBuLCBLZXlIYXNoQWxnb3JpdGhtJiYgaCwgc2l6ZV90IGwpCisgICAgICAgIDogS2V5QWxnb3Jp
dGhtKG4pCisgICAgICAgICwgaGFzaChXVEZNb3ZlKGgpKQorICAgICAgICAsIGxlbmd0aChsKQor
ICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+SG1hY0tleUFsZ29yaXRobSgpCisgICAgeworICAg
IH0KKworICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUM7IH0KK307CisKIGNsYXNzIENy
eXB0b0tleUhNQUMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPENyeXB0b0tleUhNQUM+IGNyZWF0ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwg
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9L
ZXlVc2FnZSB1c2FnZSkKQEAgLTUzLDcgKzcxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBD
cnlwdG9LZXlITUFDKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAg
IHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8S2V5QWxnb3JpdGhtPiBhbGdvcml0
aG0oKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4g
ZXhwb3J0RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBtX2hhc2g7CkBAIC02NCw1ICs4Miw3IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlITUFDLCBDcnlwdG9LZXlDbGFzczo6SE1BQykK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKEhtYWNLZXlBbGdvcml0aG0s
IEtleUFsZ29yaXRobUNsYXNzOjpITUFDKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCiAjZW5kaWYgLy8gQ3J5cHRvS2V5SE1BQ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleVJTQS5oCmluZGV4IDZlYTIwMGI4YzE3MWU4MzIwMzRmNDZlZjQzZGM5NjVmMGM1
ZDllZTAuLmUzOTRjZTM2MjA2MWJkOWQ0MGQ5NWFjYjU4NzI0YjBkY2I5MzE5ODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCkBAIC00Nyw2ICs0Nyw0MSBAQCBj
bGFzcyBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czsKIGNsYXNzIENyeXB0b0tleVBhaXI7CiBj
bGFzcyBQcm9taXNlV3JhcHBlcjsKIAorY2xhc3MgUnNhS2V5QWxnb3JpdGhtIDogcHVibGljIEtl
eUFsZ29yaXRobSB7CitwdWJsaWM6CisgICAgc2l6ZV90IG1vZHVsdXNMZW5ndGg7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHB1YmxpY0V4cG9uZW50OworCisgICAgUnNhS2V5QWxnb3JpdGhtKGNvbnN0
IFN0cmluZyYgbiwgc2l6ZV90IG0sIFZlY3Rvcjx1aW50OF90PiYmIHApCisgICAgICAgIDogS2V5
QWxnb3JpdGhtKG4pCisgICAgICAgICwgbW9kdWx1c0xlbmd0aChtKQorICAgICAgICAsIHB1Ymxp
Y0V4cG9uZW50KFdURk1vdmUocCkpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5Sc2FLZXlB
bGdvcml0aG0oKQorICAgIHsKKyAgICB9CisKKyAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdv
cml0aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpS
U0E7IH0KK307CisKK2NsYXNzIFJzYUhhc2hlZEtleUFsZ29yaXRobSA6IHB1YmxpYyBSc2FLZXlB
bGdvcml0aG0geworcHVibGljOgorICAgIEtleUhhc2hBbGdvcml0aG0gaGFzaDsKKworICAgIFJz
YUhhc2hlZEtleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG4sIHNpemVfdCBtLCBWZWN0b3I8dWlu
dDhfdD4mJiBwLCBLZXlIYXNoQWxnb3JpdGhtJiYgaCkKKyAgICAgICAgOiBSc2FLZXlBbGdvcml0
aG0obiwgbSwgV1RGTW92ZShwKSkKKyAgICAgICAgLCBoYXNoKFdURk1vdmUoaCkpCisgICAgewor
ICAgIH0KKyAgICB2aXJ0dWFsIH5Sc2FIYXNoZWRLZXlBbGdvcml0aG0oKQorICAgIHsKKyAgICB9
CisKKworICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0E7IH0KK307CisKIGNsYXNzIENy
eXB0b0tleVJTQSBmaW5hbCA6IHB1YmxpYyBDcnlwdG9LZXkgewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8Q3J5cHRvS2V5UlNBPiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgaGFzSGFzaCwgQ3J5
cHRvS2V5VHlwZSB0eXBlLCBQbGF0Zm9ybVJTQUtleSBwbGF0Zm9ybUtleSwgYm9vbCBleHRyYWN0
YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCkBAIC03MSw3ICsxMDYsNyBAQCBwcml2YXRlOgog
CiAgICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBD
cnlwdG9LZXlDbGFzczo6UlNBOyB9CiAKLSAgICB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRp
b24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgUmVmPEtleUFsZ29yaXRobT4gYWxnb3JpdGhtKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFBsYXRmb3JtUlNBS2V5IG1fcGxhdGZvcm1LZXk7CkBAIC04NCw1ICsxMTksOSBAQCBw
cml2YXRlOgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5UlNB
LCBDcnlwdG9LZXlDbGFzczo6UlNBKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdP
UklUSE0oUnNhS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6UlNBKQorCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBLZXlB
bGdvcml0aG1DbGFzczo6SFJTQSkKKwogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQog
I2VuZGlmIC8vIENyeXB0b0tleVJTQV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0Ny
eXB0b0tleVJTQU1hYy5jcHAKaW5kZXggMTQwYzliMzE4OGY5YjhhNGFmNjQ5ZGY0ODc0ZjdkMDkw
OWQwYTFhMi4uZmRhNmIxMzhjN2RhNzk1OTAwM2E1ZTk1MzIzOTJjMzdiM2U5OWE4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcApAQCAtMjksNyAr
MjksNiBAQAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ29tbW9uQ3J5
cHRvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJD
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIK
QEAgLTE2MCwyNiArMTU5LDI2IEBAIHNpemVfdCBDcnlwdG9LZXlSU0E6OmtleVNpemVJbkJpdHMo
KSBjb25zdAogICAgIHJldHVybiBtb2R1bHVzLnNpemUoKSAqIDg7CiB9CiAKLXZvaWQgQ3J5cHRv
S2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0
aW9uQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJT
QTo6YWxnb3JpdGhtKCkgY29uc3QKIHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVz
Y3JpcHRpb24oYnVpbGRlcik7Ci0KKyAgICBTdHJpbmcgbmFtZSA9IENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRobUlkZW50aWZp
ZXIpOwogICAgIFZlY3Rvcjx1aW50OF90PiBtb2R1bHVzOwogICAgIFZlY3Rvcjx1aW50OF90PiBw
dWJsaWNFeHBvbmVudDsKICAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gZ2V0UHVibGljS2V5
Q29tcG9uZW50cyhtX3BsYXRmb3JtS2V5LCBtb2R1bHVzLCBwdWJsaWNFeHBvbmVudCk7CiAgICAg
aWYgKHN0YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNvdWxkbid0IGdldCBSU0Ega2V5
IGNvbXBvbmVudHMsIHN0YXR1cyAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcHVibGljRXhwb25lbnQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UnNhS2V5QWxnb3JpdGhtKG5hbWUsIDAsIFdURk1vdmUocHVibGljRXhwb25lbnQpKSk7CiAgICAg
fQogCi0gICAgYnVpbGRlci5hZGQoIm1vZHVsdXNMZW5ndGgiLCBtb2R1bHVzLnNpemUoKSAqIDgp
OwotICAgIGJ1aWxkZXIuYWRkKCJwdWJsaWNFeHBvbmVudCIsIHB1YmxpY0V4cG9uZW50KTsKLQor
ICAgIHNpemVfdCBtb2R1bHVzTGVuZ3RoID0gbW9kdWx1cy5zaXplKCkgKiA4OwogICAgIGlmICht
X3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCkgewotICAgICAgICBhdXRvIGhhc2hEZXNjcmlwdGlv
bkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsKLSAgICAgICAgaGFzaERlc2Ny
aXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmds
ZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOwotICAgICAgICBidWlsZGVyLmFkZCgi
aGFzaCIsICpoYXNoRGVzY3JpcHRpb25CdWlsZGVyKTsKKyAgICAgICAgS2V5SGFzaEFsZ29yaXRo
bSBoYXNoQWxnb3JpdGhtOworICAgICAgICBoYXNoQWxnb3JpdGhtLm5hbWUgPSBDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKTsKKwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSc2FIYXNoZWRLZXlBbGdvcml0aG0obmFtZSwg
bW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCksIFdURk1vdmUoaGFzaEFsZ29y
aXRobSkpKTsKICAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUnNhS2V5QWxnb3JpdGht
KG5hbWUsIG1vZHVsdXNMZW5ndGgsIFdURk1vdmUocHVibGljRXhwb25lbnQpKSk7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBj
b25zdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDM4YmEzMzVkNThhNWFhNTJlZWYwNGUwOTRiYjkwYWYxYjEzYzcwNGQuLjI5
ZDgzMTZmODQwNmJjYTA3NTlkMDdkYWQxM2EyMjc3MDZhMWQ1ZTMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxNi0wOS0wNiAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYkNyeXB0byBhbGdvcml0aG1zIHNob3VsZCBiZSBleHBvc2VkIHZpYSBLZXlBbGdv
cml0aG0gaW50ZXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjg3NDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI3MzU5NDM4PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3J5cHRvL3N1YnRs
ZS9obWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQ6CisgICAgICAgICogY3J5cHRvL3N1YnRs
ZS9obWFjLWdlbmVyYXRlLWtleS5odG1sOgorCiAyMDE2LTA4LTE5ICBEZWFuIEphY2tzb24gIDxk
aW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgcHJlZmVyTG93UG93ZXJUb0hpZ2hQ
ZXJmb3JtYW5jZSBmb3IgV2ViR0wKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0
bGUvaG1hYy1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9obWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKaW5kZXggNWJkMzFiZDBhN2E3MjE2
ZjZkNDBiMWY2ZjU1ODkwZTBhZDEzYWNlNC4uNTM5MjFlNDI3MDNmZTE0YjJlZWVlNjIxYWExMjEz
MDNiNjAyOGNiYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdl
bmVyYXRlLWtleS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9o
bWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKQEAgLTEzLDYgKzEzLDcgQEAgUEFTUyBrZXku
dHlwZSBpcyAnc2VjcmV0JwogUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXku
YWxnb3JpdGhtLm5hbWUgaXMgJ0hNQUMnCiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDY0
CitQQVNTIGtleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdTSEEtMScKIFBBU1Mga2V5LnVzYWdl
cyBpcyBbInNpZ24iLCAidmVyaWZ5Il0KIAogR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBs
ZW5ndGguLi4KQEAgLTIwLDYgKzIxLDcgQEAgUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0JwogUEFT
UyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ0hN
QUMnCiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDUKK1BBU1Mga2V5LmFsZ29yaXRobS5o
YXNoLm5hbWUgaXMgJ1NIQS0xJwogUEFTUyBrZXkudXNhZ2VzIGlzIFsic2lnbiJdCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbCBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0
bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbAppbmRleCAzYWZjNTY4NWMxNzhhMTIzN2E2YTkzNjAw
YzRmMDlhM2E5MTg4ODliLi4yYjliZjNhMTdhNzE4YWFmMDY3NGI5NzhkZTAwNDAwYzVmODdkMmQw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5o
dG1sCkBAIC0yOCw2ICsyOCw3IEBAIGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoe25hbWU6ICJo
bWFjIiwgaGFzaDogInNoYS0xIn0sIGV4dHJhY3RhYmxlLCBbInNpZ24iLCAiCiAgICAgc2hvdWxk
QmUoImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0
aG0ubmFtZSIsICInSE1BQyciKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgi
LCAiNjQiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5oYXNoLm5hbWUiLCAiJ1NIQS0x
JyIpOwogICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgJ1sic2lnbiIsICJ2ZXJpZnkiXScpOwog
CiAgICAgZGVidWcoIlxuR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBsZW5ndGguLi4iKTsK
QEAgLTM5LDYgKzQwLDcgQEAgY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTogImhtYWMi
LCBoYXNoOiAic2hhLTEifSwgZXh0cmFjdGFibGUsIFsic2lnbiIsICIKICAgICBzaG91bGRCZSgi
a2V5LmV4dHJhY3RhYmxlIiwgInRydWUiKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5u
YW1lIiwgIidITUFDJyIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICI1
Iik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidTSEEtMSciKTsK
ICAgICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICdbInNpZ24iXScpOwogICAgIGZpbmlzaEpTVGVz
dCgpOwogfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288613</attachid>
            <date>2016-09-12 15:03:13 -0700</date>
            <delta_ts>2016-09-12 19:09:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-128748-20160912150039.patch</filename>
            <type>text/plain</type>
            <size>37499</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmQ4MWI3NWJjZGU1NDgz
NzJhZWMyYzNiY2UxZGYzMTRkYjVhN2E4ZC4uY2M0NzEwNTMxZTdmNDk4NDJjN2RhNGVmMjAyMTUw
Yjg2YmI1NTY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA5LTEyICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBpbnRlcmZhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODc0OAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjczNTk0Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQg
RnVsZ2hhbS4KKworICAgICAgICBSZXBsYWNlIGN1c3RvbSBDcnlwdG9BbGdvcml0aG1CdWlsZGVy
L2J1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24gd2l0aCBLZXlBbGdvcml0aG0gaW50ZXJmYWNlIHdo
aWNoIGlzCisgICAgICAgIGRlZmluZWQgYnkgdGhlIHNwZWMuCisKKyAgICAgICAgTm8gY2hhbmdl
IGluIGJlaGF2aW9yLCBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1h
Yy5jbWFrZToKKyAgICAgICAgUmVtb3ZlIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHAuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmNyZWF0ZUVtcHR5Q2xvbmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ3J5cHRvS2V5OjphbGdvcml0aG0pOgorICAgICAgICBHZXQgcmlkIG9mIGRlcGVuZGVu
Y3kgb24gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLgorICAgICAgICAqIGNyeXB0
by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaDogUmVtb3ZlZC4K
KyAgICAgICAgUmVwbGFjZSBpdCB3aXRoIEtleUFsZ29yaXRobS4KKyAgICAgICAgKiBjcnlwdG8v
Q3J5cHRvS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6Q3J5cHRvS2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6
IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5QWxnb3JpdGhtOjpLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxn
b3JpdGhtOjp+S2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YWxn
b3JpdGhtSWRlbnRpZmllcik6CisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5pZGw6CisgICAg
ICAgIEFkZCBLZXlBbGdvcml0aG0gaW50ZXJmYWNlIHdoaWNoIGlzIHJldHVybmVkIHZpYSBDcnlw
dG9LZXkuYWxnb3JpdGhtKCkgbWV0aG9kLAorICAgICAgICBhbmQgcmVuYW1lIG1fYWxnb3JpdGht
IHRvIG1fYWxnb3JpdGhtSWRlbnRpZmllciB0byBkaXN0aW5ndXNoIGl0IHdpdGggbmV3bHkKKyAg
ICAgICAgYWRkZWQgS2V5QWxnb3JpdGhtIGludGVyZmFjZS4KKyAgICAgICAgKiBjcnlwdG8va2V5
cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjphbGdv
cml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobURl
c2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkFlc0tleUFsZ29yaXRobTo6QWVzS2V5QWxnb3JpdGhtKToK
KyAgICAgICAgKFdlYkNvcmU6OkFlc0tleUFsZ29yaXRobTo6fkFlc0tleUFsZ29yaXRobSk6Cisg
ICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlITUFDOjphbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5
SE1BQzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogY3J5
cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oOgorICAgICAgICAoV2ViQ29yZTo6SG1hY0tleUFsZ29y
aXRobTo6SG1hY0tleUFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpIbWFjS2V5QWxnb3Jp
dGhtOjp+SG1hY0tleUFsZ29yaXRobSk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5
UlNBLmg6CisgICAgICAgIChXZWJDb3JlOjpSc2FLZXlBbGdvcml0aG06OlJzYUtleUFsZ29yaXRo
bSk6CisgICAgICAgIChXZWJDb3JlOjpSc2FLZXlBbGdvcml0aG06On5Sc2FLZXlBbGdvcml0aG0p
OgorICAgICAgICAoV2ViQ29yZTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtOjpSc2FIYXNoZWRLZXlB
bGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtOjp+UnNh
SGFzaGVkS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSk6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBE
ZWxldGVkLgorCiAyMDE2LTA5LTEyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBSZWR1Y2UgdXNlcyBvZiBDR0ZvbnRzIGluIGZhdm9y
IG9mIENURm9udHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMDIwMTA1MmE3MGZhMTUx
NDJjNGVlOTRjNGZkYTNjMGM1OTkyY2I3OS4uMDMyM2NmNTdhZjQ3M2I0N2M1NjA3ODU0NWFhOWQ4
ODMxZjU1NGYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTQwNCw3ICs0MDQsNiBA
QCBlbmRpZiAoKQogaWYgKEVOQUJMRV9TVUJUTEVfQ1JZUFRPKQogICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmNwcAotICAgICAg
ICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcAogICAgICAgICBj
cnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9L
ZXkuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9LZXlQYWlyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCA4YTM3ODg3NWRkMzU4YjYxY2I5N2M1NDJiODgzZTMzMTJhNWM3NGEzLi5h
NWZhYTZmNGZiOTQxNmUwZDVkODE2YTE2ZTM5OWRkNTdiYmQ3ZmM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQpAQCAtMzk2LDcgKzM5Niw2IEBAIGVuZGlmICgpCiBpZiAoRU5BQkxFX1NVQlRM
RV9DUllQVE8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIGNyeXB0
by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0
b0tleVBhaXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDRhOGY4NjIwZGIwMjBi
YzMyZGUzMzM3ZjEwMjE3ODhjOTVlZDM3YmUuLjM0YjhkYjI3MGJmNjk0YjJlMDdkMTg0OTFhYTg3
NDY3NDM1NjdmYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0xNzYsNyArMTc2LDYg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBjcnlwdG8vQ29tbW9uQ3J5cHRv
VXRpbGl0aWVzLmNwcAogICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgY3J5cHRv
L0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAKICAgICBjcnlwdG8vQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnkuY3BwCiAgICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKICAgICBjcnlw
dG8vQ3J5cHRvS2V5UGFpci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxYjJkZDU3NjNlZjdlNjg1YjVkNGFjMzRlMGUyNTc4
OWRlNDhiOGY5Li4yMmFkYjM5ZjQwNzk5NTEwODYwNjc1NjQ1Njk3ODUzZWIzNGY4NmU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC01OTcxLDggKzU5NzEsNiBAQAogCQlFMTU3QThFNDE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRv
S2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NTdBOEUyMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwICovOyB9OwogCQlFMTU3QThF
NTE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFMzE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRv
S2V5LmggKi87IH07CiAJCUUxNTdBOEU4MTgxODRDNjcwMDlGODIxRCAvKiBKU0NyeXB0b0tleUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTU3QThFNjE4MTg0QzY3MDA5RjgyMUQgLyogSlNDcnlwdG9LZXlDdXN0b20uY3BwICovOyB9Owot
CQlFMTU3QThFQzE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNTdBOEVBMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXIuY3BwICovOyB9OwotCQlFMTU3QThFRDE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxn
b3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFQjE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3Jp
dGhtRGVzY3JpcHRpb25CdWlsZGVyLmggKi87IH07CiAJCUUxNTdBOEYwMTgxODU0MjUwMDlGODIx
RCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RUUxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAgKi87IH07CiAJCUUxNTdBOEYxMTgxODU0MjUwMDlGODIx
RCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXIuaCAqLzsgfTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8q
IFhNTE5TTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CkBAIC0x
MzU0Nyw4ICsxMzU0NSw2IEBACiAJCUUxNTdBOEUyMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9L
ZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvS2V5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1N0E4RTMxODE3M0EzQTAwOUY4MjFE
IC8qIENyeXB0b0tleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9L
ZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1N0E4RTYxODE4NEM2NzAwOUY4
MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTE1N0E4RUExODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0
aW9uQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlw
dG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlFMTU3QThFQjE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3Jp
cHRpb25CdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMTU3QThFRTE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTdBOEVGMTgxODU0
MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMTgzLDggKzIyMTc5LDYgQEAKIAkJCQlFMUZFMTM3
MzE4NDAyQTY3MDA4OTJGMTMgLyogQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmggKi8sCiAJCQkJRTE3
MkFGNkIxODBGMjRDNjAwRkJBREI5IC8qIENyeXB0b0FsZ29yaXRobS5jcHAgKi8sCiAJCQkJRTE3
MkFGNkMxODBGMjRDNjAwRkJBREI5IC8qIENyeXB0b0FsZ29yaXRobS5oICovLAotCQkJCUUxNTdB
OEVBMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIu
Y3BwICovLAotCQkJCUUxNTdBOEVCMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1E
ZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLywKIAkJCQlFMUM2NTcyNDE4MTZFNjlEMDAyNTZDREQgLyog
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllci5oICovLAogCQkJCUUxQzY1NzI2MTgxNkY5RkUwMDI1
NkNERCAvKiBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggKi8sCiAJCQkJRTFGRjhGNkExODBE
QjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcCAqLywKQEAgLTI0MDc3
LDcgKzI0MDcxLDYgQEAKIAkJCQlFMUZFMTM3QjE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxn
b3JpdGhtQUVTX0tXLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTI1RjgzQTE4MjQxMDQ4MDBEODRD
RDkgLyogQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTlBQzNGNzE4MjRFNUQxMDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1z
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFMTU3QThFRDE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTI1Rjgz
MjE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTE5REEyOUMxODE4OUFERDAwMDg4QkM4IC8qIENyeXB0b0FsZ29yaXRobUhtYWNLZXlQ
YXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzY1NzFGMTgxNkU1MDMwMDI1NkNERCAvKiBD
cnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmggaW4gSGVhZGVycyAqLywKQEAgLTI3Nzg4LDcgKzI3
NzgxLDYgQEAKIAkJCQlFMTI1Rjg0NTE4MjQyNUM5MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUZFMTM3QTE4NEQyMUJCMDA4OTJG
MTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkUx
MzdFMTg0RDI3MDIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJRTE1N0E4RUMxODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRo
bURlc2NyaXB0aW9uQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzMTE4MjJG
MTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMTI1RjgzODE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMUZGOEY2QzE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcAppbmRleCBhOWYz
NzI2NTcwZTI4OTRhYmE2MWU4NWNjMDlmMDljMTQ4YjE4Zjk4Li5kOTljMjdhYmQ5NGM0YjYxMGYw
ZmQ4MzZlMjJiNmQ3NmQ5ODRhMzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAKQEAgLTQ4LDExICs0OCw2IEBA
IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6fkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcigpCiB7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+
IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6Y3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyPihtX2V4
ZWMpOwotfQotCiB2b2lkIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIq
IGtleSwgdW5zaWduZWQgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOwpAQCAt
NzUsMTIgKzcwLDExIEBAIHZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3Qg
Y2hhcioga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlCiAgICAgbV9kaWN0aW9uYXJ5
LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIGFycmF5Vmlldy0+d3JhcChtX2V4ZWMsIHZtLmVu
dHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLXZvaWQgSlNDcnlwdG9BbGdvcml0aG1C
dWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXImIG5lc3RlZEJ1aWxkZXIpCit2b2lkIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
cjo6YWRkKGNvbnN0IGNoYXIqIGtleSwgY29uc3QgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyJiBu
ZXN0ZWRCdWlsZGVyKQogewogICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAgICBJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5KTsKLSAgICBj
b25zdCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXImIGpzQnVpbGRlciA9IHN0YXRpY19jYXN0PGNv
bnN0IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciY+KG5lc3RlZEJ1aWxkZXIpOwotICAgIG1fZGlj
dGlvbmFyeS0+cHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBqc0J1aWxkZXIucmVzdWx0KCkpOwor
ICAgIG1fZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBuZXN0ZWRCdWlsZGVy
LnJlc3VsdCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAppbmRleCBk
NTM3YjRjNjc3MWI5N2ExMDc4MmE0NWZlOTlkOGFhODViMDBlZWU5Li4yODczYmQxZjcyNTU2OWE3
NWU1MWVjMzJmNDU5YTUyMDM5YzlhZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaApAQCAtMjYsNyArMjYsMTAgQEAK
ICNpZm5kZWYgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyX2gKICNkZWZpbmUgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyX2gKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVp
bGRlci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKQEAgLTM3LDE5ICs0MCwxOCBA
QCBjbGFzcyBKU09iamVjdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXIgZmluYWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRp
b25CdWlsZGVyIHsKK2NsYXNzIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyKTsKIHB1YmxpYzoKICAgICBK
U0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIoSlNDOjpFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIH5K
U0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIoKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJlc3VsdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGljdGlvbmFyeTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcj4gY3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGQoY29uc3QgY2hhciosIHVuc2lnbmVkKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWdu
ZWQpOworICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGFkZChjb25zdCBjaGFyKiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CisgICAgdm9pZCBhZGQo
Y29uc3QgY2hhciosIGNvbnN0IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciYpOwogCiBwcml2YXRl
OgogICAgIEpTQzo6RXhlY1N0YXRlKiBtX2V4ZWM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAKaW5kZXggNTg1OTRiZWYyZGIyOWEyZjA5NzVl
Yzk5ZmZjYWY4NDA1MWRiOWQ1My4uZjM4Nzc0YWYwYjI2ZjdkODkxMzg5NTA4MjNiNmY3NTYzMDZm
NThiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3Vz
dG9tLmNwcApAQCAtMjgsNiArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAK
KyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCisj
aW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCiAjaW5jbHVkZSAiSlNDcnlwdG9BbGdvcml0aG1CdWls
ZGVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCkBAIC0zOCwx
MSArNDEsNDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSlNWYWx1ZSBKU0NyeXB0b0tleTo6YWxn
b3JpdGhtKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBKU0NyeXB0b0FsZ29y
aXRobUJ1aWxkZXIgYnVpbGRlcigmc3RhdGUpOwotICAgIHdyYXBwZWQoKS5idWlsZEFsZ29yaXRo
bURlc2NyaXB0aW9uKGJ1aWxkZXIpOworCisgICAgUmVmPEtleUFsZ29yaXRobT4gYWxnb3JpdGht
ID0gd3JhcHBlZCgpLmFsZ29yaXRobSgpOworICAgIHN3aXRjaCAoYWxnb3JpdGhtLT5rZXlBbGdv
cml0aG1DbGFzcygpKSB7CisgICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6QUVTOiB7CisgICAg
ICAgIEFlc0tleUFsZ29yaXRobSYgYWVzQWxnb3JpdGhtID0gZG93bmNhc3Q8QWVzS2V5QWxnb3Jp
dGhtPihhbGdvcml0aG0uZ2V0KCkpOworICAgICAgICBidWlsZGVyLmFkZCgibmFtZSIsIGFlc0Fs
Z29yaXRobS5uYW1lKTsKKyAgICAgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGFlc0FsZ29yaXRo
bS5sZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBLZXlBbGdvcml0aG1D
bGFzczo6SE1BQzogeworICAgICAgICBIbWFjS2V5QWxnb3JpdGhtJiBobWFjQWxnb3JpdGhtID0g
ZG93bmNhc3Q8SG1hY0tleUFsZ29yaXRobT4oYWxnb3JpdGhtLmdldCgpKTsKKyAgICAgICAgYnVp
bGRlci5hZGQoIm5hbWUiLCBobWFjQWxnb3JpdGhtLm5hbWUpOworICAgICAgICBKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIgaG1hY0hhc2goJnN0YXRlKTsKKyAgICAgICAgaG1hY0hhc2guYWRkKCJu
YW1lIiwgaG1hY0FsZ29yaXRobS5oYXNoLm5hbWUpOworICAgICAgICBidWlsZGVyLmFkZCgiaGFz
aCIsIGhtYWNIYXNoKTsKKyAgICAgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGhtYWNBbGdvcml0
aG0ubGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5QWxnb3JpdGht
Q2xhc3M6OkhSU0E6IHsKKyAgICAgICAgUnNhSGFzaGVkS2V5QWxnb3JpdGhtJiByc2FBbGdvcml0
aG0gPSBkb3duY2FzdDxSc2FIYXNoZWRLZXlBbGdvcml0aG0+KGFsZ29yaXRobS5nZXQoKSk7Cisg
ICAgICAgIGJ1aWxkZXIuYWRkKCJuYW1lIiwgcnNhQWxnb3JpdGhtLm5hbWUpOworICAgICAgICBi
dWlsZGVyLmFkZCgibW9kdWx1c0xlbmd0aCIsIHJzYUFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKTsK
KyAgICAgICAgYnVpbGRlci5hZGQoInB1YmxpY0V4cG9uZW50IiwgcnNhQWxnb3JpdGhtLnB1Ymxp
Y0V4cG9uZW50KTsKKyAgICAgICAgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyIHJzYUhhc2goJnN0
YXRlKTsKKyAgICAgICAgcnNhSGFzaC5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0uaGFzaC5uYW1l
KTsKKyAgICAgICAgYnVpbGRlci5hZGQoImhhc2giLCByc2FIYXNoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OlJTQTogeworICAgICAgICBSc2FL
ZXlBbGdvcml0aG0mIHJzYUFsZ29yaXRobSA9IGRvd25jYXN0PFJzYUtleUFsZ29yaXRobT4oYWxn
b3JpdGhtLmdldCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0u
bmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJtb2R1bHVzTGVuZ3RoIiwgcnNhQWxnb3JpdGht
Lm1vZHVsdXNMZW5ndGgpOworICAgICAgICBidWlsZGVyLmFkZCgicHVibGljRXhwb25lbnQiLCBy
c2FBbGdvcml0aG0ucHVibGljRXhwb25lbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQorCiAgICAgcmV0dXJuIGJ1aWxkZXIucmVzdWx0KCk7CiB9CiAKLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjIyNzdlNzY4YTUyODgwMzky
OTg4MThiODAxOGRmZDJlZGE1NzZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXIuaCIKLQotI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjo6Q3J5cHRvQWxn
b3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCkKLXsKLX0KLQotQ3J5cHRvQWxnb3JpdGhtRGVzY3Jp
cHRpb25CdWlsZGVyOjp+Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCkKLXsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmUx
NGJiMGM0OWE0NDYwNzkzMTEyM2FjODVhNGM0ZTM3ZWY4NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
X2gKLSNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKLQotI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXIpOwotcHVibGljOgotICAgIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcigpOwot
ICAgIHZpcnR1YWwgfkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcigpOwotCi0gICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
PiBjcmVhdGVFbXB0eUNsb25lKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZChj
b25zdCBjaGFyKiwgdW5zaWduZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNo
YXIqLCBjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFy
KiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29u
c3QgY2hhciosIGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpID0gMDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQotI2VuZGlmIC8vIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCmluZGV4IGQ4MjdmN2NjZTI0ODAyZWIxYzU5ZmFk
YmRjY2QxYWJhZThlYzc1ODEuLjYwMDc1MDY2NzFkNThmMjEyNDZhZmQyNWU2YjliN2U0MTg1MTg1
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCkBAIC0yOCwxNSArMjgsMTMgQEAK
IAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
aCIKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Dcnlw
dG9LZXk6OkNyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgVHlw
ZSB0eXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZXMpCi0gICAgOiBt
X2FsZ29yaXRobShhbGdvcml0aG0pCitDcnlwdG9LZXk6OkNyeXB0b0tleShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXIsIFR5cGUgdHlwZSwgYm9vbCBleHRyYWN0
YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2VzKQorICAgIDogbV9hbGdvcml0aG1JZGVudGlmaWVy
KGFsZ29yaXRobUlkZW50aWZpZXIpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fZXh0cmFj
dGFibGUoZXh0cmFjdGFibGUpCiAgICAgLCBtX3VzYWdlcyh1c2FnZXMpCkBAIC00NywxMiArNDUs
NiBAQCBDcnlwdG9LZXk6On5DcnlwdG9LZXkoKQogewogfQogCi12b2lkIENyeXB0b0tleTo6YnVp
bGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIm
IGJ1aWxkZXIpIGNvbnN0Ci17Ci0gICAgYnVpbGRlci5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9hbGdvcml0aG0pKTsK
LSAgICAvLyBTdWJjbGFzc2VzIHdpbGwgYWRkIG90aGVyIGtleXMuCi19Ci0KIGF1dG8gQ3J5cHRv
S2V5Ojp1c2FnZXMoKSBjb25zdCAtPiBWZWN0b3I8VXNhZ2U+CiB7CiAgICAgLy8gVGhlIHJlc3Vs
dCBpcyBvcmRlcmVkIGFscGhhYmV0aWNhbGx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL0NyeXB0b0tleS5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCmlu
ZGV4IGViNmI3MDE2ZDc1MWE5NzIxYTA5YWI1YTBkMzMzMjhiMmRmMWRkZGUuLjk3YjFiODcyZWU3
YWFiZTViYzVlYTI3OGVmMGYwNzYxZjYzYzUyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9DcnlwdG9LZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5
LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTEg
KzQzLDM3IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjsKIGNsYXNz
IENyeXB0b0tleURhdGE7CiAKIGVudW0gY2xhc3MgQ3J5cHRvS2V5Q2xhc3MgewotICAgIEhNQUMs
CiAgICAgQUVTLAorICAgIEhNQUMsCiAgICAgUlNBCiB9OwogCitlbnVtIGNsYXNzIEtleUFsZ29y
aXRobUNsYXNzIHsKKyAgICBBRVMsCisgICAgSE1BQywKKyAgICBSU0EsCisgICAgSFJTQQorfTsK
Kworc3RydWN0IEtleUhhc2hBbGdvcml0aG0geworICAgIFN0cmluZyBuYW1lOworfTsKKworY2xh
c3MgS2V5QWxnb3JpdGhtIDogcHVibGljIFJlZkNvdW50ZWQ8S2V5QWxnb3JpdGhtPiB7CitwdWJs
aWM6CisgICAgU3RyaW5nIG5hbWU7CisKKyAgICBLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBu
KQorICAgICAgICA6IG5hbWUobikKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfktleUFsZ29y
aXRobSgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5
QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCA9IDA7Cit9OworCiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJs
aWMgUmVmQ291bnRlZDxDcnlwdG9LZXk+IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5
cHRvS2V5VHlwZTsKQEAgLTU3LDcgKzg0LDcgQEAgcHVibGljOgogCiAgICAgVHlwZSB0eXBlKCkg
Y29uc3Q7CiAgICAgYm9vbCBleHRyYWN0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0cmFjdGFi
bGU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9B
bGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlZjxLZXlB
bGdvcml0aG0+IGFsZ29yaXRobSgpIGNvbnN0ID0gMDsKIAogICAgIC8vIEZJWE1FOiBDb25mdXNp
bmcgdG8gaGF2ZSBDcnlwdG9LZXlVc2FnZSBhbmQgQ3J5cHRvS2V5OjpVc2FnZSBuYW1lZCBhbG1v
c3QgdGhlIHNhbWUsIGJ1dCBiZSBzbGlnaHRseSBkaWZmZXJlbnQuCiAgICAgLy8gQ3J5cHRvS2V5
VXNhZ2UgdmFsdWVzIGFyZSBiaXQgbWFza3Mgc28gdGhleSBjYW4gYmUgY29tYmluZWQgd2l0aCAi
b3IiLCB3aGlsZSB0aGlzIGlzIGEgbm9ybWFsIGVudW0gdGhhdCBtdXN0CkBAIC02NSw3ICs5Miw3
IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFVzYWdlIHsgRW5jcnlwdCwgRGVjcnlwdCwgU2ln
biwgVmVyaWZ5LCBEZXJpdmVLZXksIERlcml2ZUJpdHMsIFdyYXBLZXksIFVud3JhcEtleSB9Owog
ICAgIFZlY3RvcjxVc2FnZT4gdXNhZ2VzKCkgY29uc3Q7CiAKLSAgICBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2FsZ29yaXRo
bTsgfQorICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsgfQogICAgIENyeXB0b0tleVVz
YWdlIHVzYWdlc0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2VzOyB9CiAgICAgYm9vbCBh
bGxvd3MoQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpIGNvbnN0IHsgcmV0dXJuIHVzYWdlID09IChtX3Vz
YWdlcyAmIHVzYWdlKTsgfQogCkBAIC03Myw4ICsxMDAsMTAgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIFZlY3Rvcjx1aW50OF90PiByYW5kb21EYXRhKHNpemVfdCk7CiAKK3Byb3RlY3RlZDoKKyAg
ICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsKKwogcHJp
dmF0ZToKLSAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIG1fYWxnb3JpdGhtOwogICAgIFR5
cGUgbV90eXBlOwogICAgIGJvb2wgbV9leHRyYWN0YWJsZTsKICAgICBDcnlwdG9LZXlVc2FnZSBt
X3VzYWdlczsKQEAgLTkyLDUgKzEyMSwxMCBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OlRvQ2xhc3NOYW1lKSBcCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkNyeXB0b0tleSYga2V5KSB7IHJldHVybiBrZXkua2V5Q2xhc3MoKSA9PSBXZWJDb3Jl
OjpLZXlDbGFzczsgfSBcCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKKyNkZWZpbmUg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKFRvQ2xhc3NOYW1lLCBLZXlBbGdv
cml0aG1DbGFzcykgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0Ns
YXNzTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpLZXlBbGdv
cml0aG0mIGFsZ29yaXRobSkgeyByZXR1cm4gYWxnb3JpdGhtLmtleUFsZ29yaXRobUNsYXNzKCkg
PT0gV2ViQ29yZTo6S2V5QWxnb3JpdGhtQ2xhc3M7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAjZW5kaWYgLy8gQ3J5
cHRvS2V5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaWRs
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwKaW5kZXggYzRmMWMzYzUzMWIz
ZTE3ODgyYmMxMjczMDQ3MzFhNjRlMjQ5NmM4Yi4uMzY1MDM1NWUxNzJkMTYyNDgwMzk0MDMyNTY1
MWM0Mzk2OGQxMjI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tl
eS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwKQEAgLTQ3LDYg
KzQ3LDYgQEAgZW51bSBLZXlVc2FnZSB7CiBdIGludGVyZmFjZSBDcnlwdG9LZXkgewogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBLZXlUeXBlIHR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJv
b2xlYW4gZXh0cmFjdGFibGU7Ci0gICAgW0N1c3RvbV0gcmVhZG9ubHkgYXR0cmlidXRlIEFsZ29y
aXRobSBhbGdvcml0aG07CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIG9i
amVjdCBhbGdvcml0aG07CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHNlcXVlbmNlPEtleVVzYWdl
PiB1c2FnZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5QUVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5j
cHAKaW5kZXggNDRiNTAwN2I5MTI3NjY3ZWYyZDc1NTg5NDg5YjdiOTFjNmY1NGI1YS4uZDMyOTVj
ODk2Y2Y2NjAwNGE1NTk2MDQ2YzBiYTEwYTQ5YTU3MTgyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFC
TEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9u
QnVpbGRlci5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KQEAgLTYzLDEwICs2Miw5IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tl
eUFFUzo6Z2VuZXJhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCByYW5kb21EYXRhKGxl
bmd0aEJpdHMgLyA4KSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCi12b2lkIENyeXB0b0tl
eUFFUzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlBRVM6
OmFsZ29yaXRobSgpIGNvbnN0CiB7Ci0gICAgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRobURlc2Ny
aXB0aW9uKGJ1aWxkZXIpOwotICAgIGJ1aWxkZXIuYWRkKCJsZW5ndGgiLCBtX2tleS5zaXplKCkg
KiA4KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBZXNLZXlBbGdvcml0aG0oQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1fYWxnb3JpdGht
SWRlbnRpZmllciksIG1fa2V5LnNpemUoKSAqIDgpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGE+IENyeXB0b0tleUFFUzo6ZXhwb3J0RGF0YSgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oCmluZGV4IDQ1YTViYjgyMzY0ZWViMTFmZGM1
MzA1MWIxZGYzNWZhMzUzMmFmZjcuLmNkYWVkODNlOGMwOTIwMTEwYTk0MjU0Y2IyZjQ4OGYyNWUw
MTRlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFF
Uy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oCkBAIC0z
NCw2ICszNCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFlc0tleUFsZ29y
aXRobSA6IHB1YmxpYyBLZXlBbGdvcml0aG0geworcHVibGljOgorICAgIHNpemVfdCBsZW5ndGg7
CisKKyAgICBBZXNLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuLCBzaXplX3QgbCkKKyAgICAg
ICAgOiBLZXlBbGdvcml0aG0obikKKyAgICAgICAgLCBsZW5ndGgobCkKKyAgICB7CisgICAgfQor
ICAgIHZpcnR1YWwgfkFlc0tleUFsZ29yaXRobSgpCisgICAgeworICAgIH0KKworICAgIEtleUFs
Z29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
S2V5QWxnb3JpdGhtQ2xhc3M6OkFFUzsgfQorfTsKKwogY2xhc3MgQ3J5cHRvS2V5QUVTIGZpbmFs
IDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDcnlwdG9LZXlB
RVM+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdl
KQpAQCAtNTMsNyArNjksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENyeXB0b0tleUFFUyhD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgYm9v
bCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwogCi0gICAgdm9pZCBidWlsZEFsZ29yaXRo
bURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZjxLZXlBbGdvcml0aG0+IGFsZ29yaXRobSgpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gbV9rZXk7CkBAIC02Myw2ICs3OSw4IEBA
IHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlB
RVMsIENyeXB0b0tleUNsYXNzOjpBRVMpCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FM
R09SSVRITShBZXNLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpBRVMpCisKICNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAogI2VuZGlmIC8vIENyeXB0b0tleUFFU19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCmluZGV4IGFmNjA0
ZjRmNzdjZTQyZDNhMmRjNGYwNjJkMjU0OTU1NDIyNGIwYzAuLjg2YTQwOWJiYTNjNDk5OGVhZjJj
NmNiMjcwNjQ3YzYyZWFjYjAxMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUhNQUMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUhNQUMuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NS
WVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgog
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5
RGF0YU9jdGV0U2VxdWVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAg
LTY3LDE1ICs2NiwxMyBAQCBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gQ3J5cHRvS2V5SE1BQzo6Z2Vu
ZXJhdGUoc2l6ZV90IGxlbmd0aEJ5dGVzLCBDcnlwdG9BbGdvcml0aAogICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ3J5cHRvS2V5SE1BQyhyYW5kb21EYXRhKGxlbmd0aEJ5dGVzKSwgaGFzaCwgZXh0
cmFjdGFibGUsIHVzYWdlcykpOwogfQogCi12b2lkIENyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3Jp
dGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVy
KSBjb25zdAorUmVmPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5SE1BQzo6YWxnb3JpdGhtKCkgY29u
c3QKIHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7
CisgICAgS2V5SGFzaEFsZ29yaXRobSBoYXNoQWxnb3JpdGhtOworICAgIGhhc2hBbGdvcml0aG0u
bmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRp
ZmllcihtX2hhc2gpOwogCi0gICAgYXV0byBoYXNoRGVzY3JpcHRpb25CdWlsZGVyID0gYnVpbGRl
ci5jcmVhdGVFbXB0eUNsb25lKCk7Ci0gICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+YWRkKCJu
YW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlm
aWVyKG1faGFzaCkpOwotICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1
aWxkZXIpOwotCi0gICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIG1fa2V5LnNpemUoKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSG1hY0tleUFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9hbGdvcml0aG1JZGVudGlmaWVy
KSwKKyAgICAgICAgV1RGTW92ZShoYXNoQWxnb3JpdGhtKSwgbV9rZXkuc2l6ZSgpKSk7CiB9CiAK
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlITUFDOjpleHBvcnREYXRh
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eUhNQUMuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAppbmRl
eCA0NjhhZDA3N2YxOTYxYWQ4ZGFkN2I0YjQzOTk4ZWIxNzJjZDIzMzA3Li5kOWJiNWYxODdkODUy
ZDY4OWUwYzA3YzM5OTc0NDZlNmRhYTRmNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5SE1BQy5oCkBAIC0zMyw2ICszMywyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEhtYWNLZXlBbGdvcml0aG0gOiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsKK3B1
YmxpYzoKKyAgICBLZXlIYXNoQWxnb3JpdGhtIGhhc2g7CisgICAgc2l6ZV90IGxlbmd0aDsKKwor
ICAgIEhtYWNLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuLCBLZXlIYXNoQWxnb3JpdGhtJiYg
aCwgc2l6ZV90IGwpCisgICAgICAgIDogS2V5QWxnb3JpdGhtKG4pCisgICAgICAgICwgaGFzaChX
VEZNb3ZlKGgpKQorICAgICAgICAsIGxlbmd0aChsKQorICAgIHsKKyAgICB9CisgICAgdmlydHVh
bCB+SG1hY0tleUFsZ29yaXRobSgpCisgICAgeworICAgIH0KKworICAgIEtleUFsZ29yaXRobUNs
YXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2V5QWxnb3Jp
dGhtQ2xhc3M6OkhNQUM7IH0KK307CisKIGNsYXNzIENyeXB0b0tleUhNQUMgZmluYWwgOiBwdWJs
aWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleUhNQUM+IGNy
ZWF0ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKQEAgLTUzLDcg
KzcxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDcnlwdG9LZXlITUFDKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0
cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAgIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNj
cmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBSZWY8S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0oKSBjb25zdCBvdmVycmlkZTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0RGF0YSgpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBtX2hhc2g7CkBAIC02NCw1ICs4
Miw3IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlw
dG9LZXlITUFDLCBDcnlwdG9LZXlDbGFzczo6SE1BQykKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19LRVlfQUxHT1JJVEhNKEhtYWNLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpITUFD
KQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAjZW5kaWYgLy8gQ3J5cHRvS2V5
SE1BQ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlS
U0EuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCmluZGV4IDZl
YTIwMGI4YzE3MWU4MzIwMzRmNDZlZjQzZGM5NjVmMGM1ZDllZTAuLmUzOTRjZTM2MjA2MWJkOWQ0
MGQ5NWFjYjU4NzI0YjBkY2I5MzE5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleVJTQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleVJTQS5oCkBAIC00Nyw2ICs0Nyw0MSBAQCBjbGFzcyBDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50czsKIGNsYXNzIENyeXB0b0tleVBhaXI7CiBjbGFzcyBQcm9taXNlV3JhcHBlcjsKIAor
Y2xhc3MgUnNhS2V5QWxnb3JpdGhtIDogcHVibGljIEtleUFsZ29yaXRobSB7CitwdWJsaWM6Cisg
ICAgc2l6ZV90IG1vZHVsdXNMZW5ndGg7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1YmxpY0V4cG9u
ZW50OworCisgICAgUnNhS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbiwgc2l6ZV90IG0sIFZl
Y3Rvcjx1aW50OF90PiYmIHApCisgICAgICAgIDogS2V5QWxnb3JpdGhtKG4pCisgICAgICAgICwg
bW9kdWx1c0xlbmd0aChtKQorICAgICAgICAsIHB1YmxpY0V4cG9uZW50KFdURk1vdmUocCkpCisg
ICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5Sc2FLZXlBbGdvcml0aG0oKQorICAgIHsKKyAgICB9
CisKKyAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpSU0E7IH0KK307CisKK2NsYXNzIFJzYUhh
c2hlZEtleUFsZ29yaXRobSA6IHB1YmxpYyBSc2FLZXlBbGdvcml0aG0geworcHVibGljOgorICAg
IEtleUhhc2hBbGdvcml0aG0gaGFzaDsKKworICAgIFJzYUhhc2hlZEtleUFsZ29yaXRobShjb25z
dCBTdHJpbmcmIG4sIHNpemVfdCBtLCBWZWN0b3I8dWludDhfdD4mJiBwLCBLZXlIYXNoQWxnb3Jp
dGhtJiYgaCkKKyAgICAgICAgOiBSc2FLZXlBbGdvcml0aG0obiwgbSwgV1RGTW92ZShwKSkKKyAg
ICAgICAgLCBoYXNoKFdURk1vdmUoaCkpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5Sc2FI
YXNoZWRLZXlBbGdvcml0aG0oKQorICAgIHsKKyAgICB9CisKKworICAgIEtleUFsZ29yaXRobUNs
YXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2V5QWxnb3Jp
dGhtQ2xhc3M6OkhSU0E7IH0KK307CisKIGNsYXNzIENyeXB0b0tleVJTQSBmaW5hbCA6IHB1Ymxp
YyBDcnlwdG9LZXkgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q3J5cHRvS2V5UlNBPiBjcmVh
dGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGhhc2gsIGJvb2wgaGFzSGFzaCwgQ3J5cHRvS2V5VHlwZSB0eXBlLCBQbGF0Zm9y
bVJTQUtleSBwbGF0Zm9ybUtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNh
Z2UpCkBAIC03MSw3ICsxMDYsNyBAQCBwcml2YXRlOgogCiAgICAgQ3J5cHRvS2V5Q2xhc3Mga2V5
Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6UlNBOyB9CiAK
LSAgICB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3Jp
cHRpb25CdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEtleUFsZ29yaXRobT4gYWxn
b3JpdGhtKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURh
dGE+IGV4cG9ydERhdGEoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBsYXRmb3JtUlNBS2V5IG1f
cGxhdGZvcm1LZXk7CkBAIC04NCw1ICsxMTksOSBAQCBwcml2YXRlOgogCiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5UlNBLCBDcnlwdG9LZXlDbGFzczo6UlNBKQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oUnNhS2V5QWxnb3JpdGhtLCBL
ZXlBbGdvcml0aG1DbGFzczo6UlNBKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdP
UklUSE0oUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6SFJTQSkKKwog
I2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogI2VuZGlmIC8vIENyeXB0b0tleVJTQV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKaW5kZXgg
MTQwYzliMzE4OGY5YjhhNGFmNjQ5ZGY0ODc0ZjdkMDkwOWQwYTFhMi4uZmRhNmIxMzhjN2RhNzk1
OTAwM2E1ZTk1MzIzOTJjMzdiM2U5OWE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvS2V5UlNBTWFjLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50
cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKQEAgLTE2MCwyNiArMTU5LDI2IEBAIHNp
emVfdCBDcnlwdG9LZXlSU0E6OmtleVNpemVJbkJpdHMoKSBjb25zdAogICAgIHJldHVybiBtb2R1
bHVzLnNpemUoKSAqIDg7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURl
c2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29u
c3QKK1JlZjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YWxnb3JpdGhtKCkgY29uc3QKIHsK
LSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7Ci0KKyAg
ICBTdHJpbmcgbmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1l
Rm9ySWRlbnRpZmllcihtX2FsZ29yaXRobUlkZW50aWZpZXIpOwogICAgIFZlY3Rvcjx1aW50OF90
PiBtb2R1bHVzOwogICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNFeHBvbmVudDsKICAgICBDQ0Ny
eXB0b3JTdGF0dXMgc3RhdHVzID0gZ2V0UHVibGljS2V5Q29tcG9uZW50cyhtX3BsYXRmb3JtS2V5
LCBtb2R1bHVzLCBwdWJsaWNFeHBvbmVudCk7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBX
VEZMb2dBbHdheXMoIkNvdWxkbid0IGdldCBSU0Ega2V5IGNvbXBvbmVudHMsIHN0YXR1cyAlZCIs
IHN0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcHVibGljRXhwb25lbnQuY2xlYXIo
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUnNhS2V5QWxnb3JpdGhtKG5hbWUsIDAs
IFdURk1vdmUocHVibGljRXhwb25lbnQpKSk7CiAgICAgfQogCi0gICAgYnVpbGRlci5hZGQoIm1v
ZHVsdXNMZW5ndGgiLCBtb2R1bHVzLnNpemUoKSAqIDgpOwotICAgIGJ1aWxkZXIuYWRkKCJwdWJs
aWNFeHBvbmVudCIsIHB1YmxpY0V4cG9uZW50KTsKLQorICAgIHNpemVfdCBtb2R1bHVzTGVuZ3Ro
ID0gbW9kdWx1cy5zaXplKCkgKiA4OwogICAgIGlmIChtX3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFz
aCkgewotICAgICAgICBhdXRvIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0
ZUVtcHR5Q2xvbmUoKTsKLSAgICAgICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+YWRkKCJuYW1l
IiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVy
KG1faGFzaCkpOwotICAgICAgICBidWlsZGVyLmFkZCgiaGFzaCIsICpoYXNoRGVzY3JpcHRpb25C
dWlsZGVyKTsKKyAgICAgICAgS2V5SGFzaEFsZ29yaXRobSBoYXNoQWxnb3JpdGhtOworICAgICAg
ICBoYXNoQWxnb3JpdGhtLm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9u
KCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKTsKKworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSc2FIYXNoZWRLZXlBbGdvcml0aG0obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShw
dWJsaWNFeHBvbmVudCksIFdURk1vdmUoaGFzaEFsZ29yaXRobSkpKTsKICAgICB9CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUnNhS2V5QWxnb3JpdGhtKG5hbWUsIG1vZHVsdXNMZW5ndGgsIFdU
Rk1vdmUocHVibGljRXhwb25lbnQpKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlE
YXRhPiBDcnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJhZjkxMmY0ZDRj
MzBlNWNhMjVlMWNlMWNmNTU3YWFkN2YyN2VjZjcuLmJhODU2YzFhYTRhMjQzOTY4NjUzMzJlMDI1
NmI4MzQ4MjRjNzAzZDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wOS0xMiAgSmlld2Vu
IFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNyeXB0byBhbGdvcml0
aG1zIHNob3VsZCBiZSBleHBvc2VkIHZpYSBLZXlBbGdvcml0aG0gaW50ZXJmYWNlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg3NDgKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI3MzU5NDM4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50IEZ1
bGdoYW0uCisKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5LWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5Lmh0bWw6
CisKIDIwMTYtMDktMTIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICB3aW5kb3cucGVyZm9ybWFuY2Ugb2JqZWN0IHJlc2V0cyBzY3JpcHQtYXBwbGllZCBwcm9wZXJ0
aWVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUt
a2V5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0
ZS1rZXktZXhwZWN0ZWQudHh0CmluZGV4IDViZDMxYmQwYTdhNzIxNmY2ZDQwYjFmNmY1NTg5MGUw
YWQxM2FjZTQuLjUzOTIxZTQyNzAzZmUxNGIyZWVlZTYyMWFhMTIxMzAzYjYwMjhjYmIgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXktZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXkt
ZXhwZWN0ZWQudHh0CkBAIC0xMyw2ICsxMyw3IEBAIFBBU1Mga2V5LnR5cGUgaXMgJ3NlY3JldCcK
IFBBU1Mga2V5LmV4dHJhY3RhYmxlIGlzIHRydWUKIFBBU1Mga2V5LmFsZ29yaXRobS5uYW1lIGlz
ICdITUFDJwogUEFTUyBrZXkuYWxnb3JpdGhtLmxlbmd0aCBpcyA2NAorUEFTUyBrZXkuYWxnb3Jp
dGhtLmhhc2gubmFtZSBpcyAnU0hBLTEnCiBQQVNTIGtleS51c2FnZXMgaXMgWyJzaWduIiwgInZl
cmlmeSJdCiAKIEdlbmVyYXRpbmcgYSBrZXkgd2l0aCBjdXN0b20gbGVuZ3RoLi4uCkBAIC0yMCw2
ICsyMSw3IEBAIFBBU1Mga2V5LnR5cGUgaXMgJ3NlY3JldCcKIFBBU1Mga2V5LmV4dHJhY3RhYmxl
IGlzIHRydWUKIFBBU1Mga2V5LmFsZ29yaXRobS5uYW1lIGlzICdITUFDJwogUEFTUyBrZXkuYWxn
b3JpdGhtLmxlbmd0aCBpcyA1CitQQVNTIGtleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdTSEEt
MScKIFBBU1Mga2V5LnVzYWdlcyBpcyBbInNpZ24iXQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2Vu
ZXJhdGUta2V5Lmh0bWwgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUt
a2V5Lmh0bWwKaW5kZXggM2FmYzU2ODVjMTc4YTEyMzdhNmE5MzYwMGM0ZjA5YTNhOTE4ODg5Yi4u
MmI5YmYzYTE3YTcxOGFhZjA2NzRiOTc4ZGUwMDQwMGM1Zjg3ZDJkMCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5odG1sCisrKyBiL0xheW91
dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbApAQCAtMjgsNiArMjgs
NyBAQCBjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5KHtuYW1lOiAiaG1hYyIsIGhhc2g6ICJzaGEt
MSJ9LCBleHRyYWN0YWJsZSwgWyJzaWduIiwgIgogICAgIHNob3VsZEJlKCJrZXkuZXh0cmFjdGFi
bGUiLCAidHJ1ZSIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ0hNQUMn
Iik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubGVuZ3RoIiwgIjY0Iik7CisgICAgc2hv
dWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidTSEEtMSciKTsKICAgICBzaG91bGRC
ZSgia2V5LnVzYWdlcyIsICdbInNpZ24iLCAidmVyaWZ5Il0nKTsKIAogICAgIGRlYnVnKCJcbkdl
bmVyYXRpbmcgYSBrZXkgd2l0aCBjdXN0b20gbGVuZ3RoLi4uIik7CkBAIC0zOSw2ICs0MCw3IEBA
IGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoe25hbWU6ICJobWFjIiwgaGFzaDogInNoYS0xIn0s
IGV4dHJhY3RhYmxlLCBbInNpZ24iLCAiCiAgICAgc2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIs
ICJ0cnVlIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICInSE1BQyciKTsK
ICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiNSIpOworICAgIHNob3VsZEJl
KCJrZXkuYWxnb3JpdGhtLmhhc2gubmFtZSIsICInU0hBLTEnIik7CiAgICAgc2hvdWxkQmUoImtl
eS51c2FnZXMiLCAnWyJzaWduIl0nKTsKICAgICBmaW5pc2hKU1Rlc3QoKTsKIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288655</attachid>
            <date>2016-09-12 19:09:28 -0700</date>
            <delta_ts>2016-09-12 19:13:58 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-128748-20160912190655.patch</filename>
            <type>text/plain</type>
            <size>38648</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmQ4MWI3NWJjZGU1NDgz
NzJhZWMyYzNiY2UxZGYzMTRkYjVhN2E4ZC4uMDg2N2Q0ZjAwNTFhMWU1MmM1MjUwZWQ4NTU0NmU2
YzcwNmY0ODdmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE2LTA5LTEyICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBpbnRlcmZhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODc0OAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjczNTk0Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQg
RnVsZ2hhbS4KKworICAgICAgICBSZXBsYWNlIGN1c3RvbSBDcnlwdG9BbGdvcml0aG1CdWlsZGVy
L2J1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24gd2l0aCBLZXlBbGdvcml0aG0gaW50ZXJmYWNlIHdo
aWNoIGlzCisgICAgICAgIGRlZmluZWQgYnkgdGhlIHNwZWMuCisKKyAgICAgICAgTm8gY2hhbmdl
IGluIGJlaGF2aW9yLCBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1h
Yy5jbWFrZToKKyAgICAgICAgUmVtb3ZlIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHAuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmNyZWF0ZUVtcHR5Q2xvbmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ3J5cHRvS2V5OjphbGdvcml0aG0pOgorICAgICAgICBHZXQgcmlkIG9mIGRlcGVuZGVu
Y3kgb24gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLgorICAgICAgICAqIGNyeXB0
by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaDogUmVtb3ZlZC4K
KyAgICAgICAgUmVwbGFjZSBpdCB3aXRoIEtleUFsZ29yaXRobS4KKyAgICAgICAgKiBjcnlwdG8v
Q3J5cHRvS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6Q3J5cHRvS2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6
IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5QWxnb3JpdGhtOjpLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxn
b3JpdGhtOjp+S2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YWxn
b3JpdGhtSWRlbnRpZmllcik6CisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5pZGw6CisgICAg
ICAgIEFkZCBLZXlBbGdvcml0aG0gaW50ZXJmYWNlIHdoaWNoIGlzIHJldHVybmVkIHZpYSBDcnlw
dG9LZXkuYWxnb3JpdGhtKCkgbWV0aG9kLAorICAgICAgICBhbmQgcmVuYW1lIG1fYWxnb3JpdGht
IHRvIG1fYWxnb3JpdGhtSWRlbnRpZmllciB0byBkaXN0aW5ndXNoIGl0IHdpdGggbmV3bHkKKyAg
ICAgICAgYWRkZWQgS2V5QWxnb3JpdGhtIGludGVyZmFjZS4KKyAgICAgICAgKiBjcnlwdG8vZ251
dGxzL0NyeXB0b0tleVJTQUdudVRMUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphbGdvcml0aG0p
OgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXB0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjphbGdvcml0aG0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkFlc0tleUFsZ29yaXRobTo6QWVzS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkFl
c0tleUFsZ29yaXRobTo6fkFlc0tleUFsZ29yaXRobSk6CisgICAgICAgICogY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjphbGdv
cml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0aG1E
ZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1B
Qy5oOgorICAgICAgICAoV2ViQ29yZTo6SG1hY0tleUFsZ29yaXRobTo6SG1hY0tleUFsZ29yaXRo
bSk6CisgICAgICAgIChXZWJDb3JlOjpIbWFjS2V5QWxnb3JpdGhtOjp+SG1hY0tleUFsZ29yaXRo
bSk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmg6CisgICAgICAgIChXZWJD
b3JlOjpSc2FLZXlBbGdvcml0aG06OlJzYUtleUFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3Jl
OjpSc2FLZXlBbGdvcml0aG06On5Sc2FLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6
UnNhSGFzaGVkS2V5QWxnb3JpdGhtOjpSc2FIYXNoZWRLZXlBbGdvcml0aG0pOgorICAgICAgICAo
V2ViQ29yZTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtOjp+UnNhSGFzaGVkS2V5QWxnb3JpdGhtKToK
KyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9L
ZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorCiAyMDE2LTA5LTEy
ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0Nv
Y29hXSBSZWR1Y2UgdXNlcyBvZiBDR0ZvbnRzIGluIGZhdm9yIG9mIENURm9udHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggMDIwMTA1MmE3MGZhMTUxNDJjNGVlOTRjNGZkYTNjMGM1OTky
Y2I3OS4uMDMyM2NmNTdhZjQ3M2I0N2M1NjA3ODU0NWFhOWQ4ODMxZjU1NGYyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTQwNCw3ICs0MDQsNiBAQCBlbmRpZiAoKQogaWYgKEVOQUJM
RV9TVUJUTEVfQ1JZUFRPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAg
ICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmNwcAotICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3Jp
dGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnkuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9LZXkuY3BwCiAgICAgICAgIGNyeXB0
by9DcnlwdG9LZXlQYWlyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA4YTM3ODg3
NWRkMzU4YjYxY2I5N2M1NDJiODgzZTMzMTJhNWM3NGEzLi5hNWZhYTZmNGZiOTQxNmUwZDVkODE2
YTE2ZTM5OWRkNTdiYmQ3ZmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMzk2LDcg
KzM5Niw2IEBAIGVuZGlmICgpCiBpZiAoRU5BQkxFX1NVQlRMRV9DUllQVE8pCiAgICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG0uY3Bw
Ci0gICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCiAg
ICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKICAgICAgICAgY3J5cHRv
L0NyeXB0b0tleS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleVBhaXIuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDRhOGY4NjIwZGIwMjBiYzMyZGUzMzM3ZjEwMjE3ODhjOTVl
ZDM3YmUuLjM0YjhkYjI3MGJmNjk0YjJlMDdkMTg0OTFhYTg3NDY3NDM1NjdmYzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0xNzYsNyArMTc2LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBjcnlwdG8vQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNwcAogICAgIGNy
eXB0by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlci5jcHAKICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3Bw
CiAgICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKICAgICBjcnlwdG8vQ3J5cHRvS2V5UGFpci5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAxYjJkZDU3NjNlZjdlNjg1YjVkNGFjMzRlMGUyNTc4OWRlNDhiOGY5Li4yMmFkYjM5ZjQw
Nzk5NTEwODYwNjc1NjQ1Njk3ODUzZWIzNGY4NmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01OTcxLDggKzU5NzEsNiBAQAog
CQlFMTU3QThFNDE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEUyMTgxNzNBM0EwMDlGODIx
RCAvKiBDcnlwdG9LZXkuY3BwICovOyB9OwogCQlFMTU3QThFNTE4MTczQTNBMDA5RjgyMUQgLyog
Q3J5cHRvS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTU3QThFMzE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggKi87IH07CiAJCUUxNTdB
OEU4MTgxODRDNjcwMDlGODIxRCAvKiBKU0NyeXB0b0tleUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFNjE4MTg0QzY3MDA5Rjgy
MUQgLyogSlNDcnlwdG9LZXlDdXN0b20uY3BwICovOyB9OwotCQlFMTU3QThFQzE4MTg1MUFDMDA5
RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVBMTgxODUxQUMwMDlG
ODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwICovOyB9OwotCQlF
MTU3QThFRDE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3
QThFQjE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
LmggKi87IH07CiAJCUUxNTdBOEYwMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE1N0E4RUUxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5j
cHAgKi87IH07CiAJCUUxNTdBOEYxMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCAq
LzsgfTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAw
MEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CkBAIC0xMzU0Nyw4ICsxMzU0NSw2IEBACiAJ
CUUxNTdBOEUyMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTE1N0E4RTMxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9LZXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTE1N0E4RTYxODE4NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvS2V5
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE1N0E4RUExODE4NTFB
QzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTU3QThFQjE4MTg1
MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVp
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU3QThFRTE4MTg1NDI1MDA5
RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
cnlwdG9BbGdvcml0aG1CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
NUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMTgzLDggKzIyMTc5LDYgQEAKIAkJCQlFMUZFMTM3MzE4NDAyQTY3MDA4OTJGMTMgLyog
Q29tbW9uQ3J5cHRvVXRpbGl0aWVzLmggKi8sCiAJCQkJRTE3MkFGNkIxODBGMjRDNjAwRkJBREI5
IC8qIENyeXB0b0FsZ29yaXRobS5jcHAgKi8sCiAJCQkJRTE3MkFGNkMxODBGMjRDNjAwRkJBREI5
IC8qIENyeXB0b0FsZ29yaXRobS5oICovLAotCQkJCUUxNTdBOEVBMTgxODUxQUMwMDlGODIxRCAv
KiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwICovLAotCQkJCUUxNTdBOEVC
MTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAq
LywKIAkJCQlFMUM2NTcyNDE4MTZFNjlEMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllci5oICovLAogCQkJCUUxQzY1NzI2MTgxNkY5RkUwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzLmggKi8sCiAJCQkJRTFGRjhGNkExODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcCAqLywKQEAgLTI0MDc3LDcgKzI0MDcxLDYgQEAKIAkJCQlF
MUZFMTM3QjE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI1RjgzQTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGht
QWVzQ2JjUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlBQzNGNzE4MjRFNUQxMDAzNDk0
MjYgLyogQ3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlFMTU3QThFRDE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTI1RjgzMjE4MjJGMTFCMDBEODRDRDkgLyog
Q3J5cHRvQWxnb3JpdGhtSE1BQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5REEyOUMxODE4OUFE
RDAwMDg4QkM4IC8qIENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxQzY1NzFGMTgxNkU1MDMwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1IbWFjUGFy
YW1zLmggaW4gSGVhZGVycyAqLywKQEAgLTI3Nzg4LDcgKzI3NzgxLDYgQEAKIAkJCQlFMTI1Rjg0
NTE4MjQyNUM5MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMUZFMTM3QTE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGht
QUVTX0tXLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkUxMzdFMTg0RDI3MDIwMDg5MkYxMyAv
KiBDcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE1N0E4
RUMxODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzMTE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRv
QWxnb3JpdGhtSE1BQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzODE4MjJGMUVCMDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MUZGOEY2QzE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
cnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcAppbmRleCBhOWYzNzI2NTcwZTI4OTRhYmE2MWU4NWNj
MDlmMDljMTQ4YjE4Zjk4Li5kOTljMjdhYmQ5NGM0YjYxMGYwZmQ4MzZlMjJiNmQ3NmQ5ODRhMzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5jcHAKQEAgLTQ4LDExICs0OCw2IEBAIEpTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlcjo6fkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcigpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+IEpTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlcjo6Y3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyPihtX2V4ZWMpOwotfQotCiB2b2lkIEpTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIqIGtleSwgdW5zaWduZWQgdmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOwpAQCAtNzUsMTIgKzcwLDExIEBAIHZvaWQg
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIGJ1ZmZlCiAgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50
aWZpZXIsIGFycmF5Vmlldy0+d3JhcChtX2V4ZWMsIHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVj
dCgpKSk7CiB9CiAKLXZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hh
cioga2V5LCBjb25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIG5lc3RlZEJ1
aWxkZXIpCit2b2lkIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIqIGtl
eSwgY29uc3QgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyJiBuZXN0ZWRCdWlsZGVyKQogewogICAg
IFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5KTsKLSAgICBjb25zdCBKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXImIGpzQnVpbGRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEpTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlciY+KG5lc3RlZEJ1aWxkZXIpOwotICAgIG1fZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZt
LCBpZGVudGlmaWVyLCBqc0J1aWxkZXIucmVzdWx0KCkpOworICAgIG1fZGljdGlvbmFyeS0+cHV0
RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBuZXN0ZWRCdWlsZGVyLnJlc3VsdCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAppbmRleCBkNTM3YjRjNjc3MWI5N2ExMDc4MmE0
NWZlOTlkOGFhODViMDBlZWU5Li4yODczYmQxZjcyNTU2OWE3NWU1MWVjMzJmNDU5YTUyMDM5Yzlh
ZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29y
aXRobUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuaApAQCAtMjYsNyArMjYsMTAgQEAKICNpZm5kZWYgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyX2gKICNkZWZpbmUgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyX2gKIAotI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxF
KFNVQlRMRV9DUllQVE8pCiAKQEAgLTM3LDE5ICs0MCwxOCBAQCBjbGFzcyBKU09iamVjdDsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgZmlu
YWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyIHsKK2NsYXNzIEpT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNDcnlw
dG9BbGdvcml0aG1CdWlsZGVyKTsKIHB1YmxpYzoKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxk
ZXIoSlNDOjpFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIH5KU0NyeXB0b0FsZ29yaXRobUJ1aWxk
ZXIoKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlj
dGlvbmFyeTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobURlc2NyaXB0
aW9uQnVpbGRlcj4gY3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBhZGQoY29uc3QgY2hhciosIHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZChjb25z
dCBjaGFyKiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGQoY29uc3QgY2hh
ciosIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkKGNvbnN0
IGNoYXIqLCBjb25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOworICAgIHZvaWQgYWRkKGNv
bnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CisgICAgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IEpT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlciYpOwogCiBwcml2YXRlOgogICAgIEpTQzo6RXhlY1N0YXRl
KiBtX2V4ZWM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0
b0tleUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1
c3RvbS5jcHAKaW5kZXggNTg1OTRiZWYyZGIyOWEyZjA5NzVlYzk5ZmZjYWY4NDA1MWRiOWQ1My4u
ZjM4Nzc0YWYwYjI2ZjdkODkxMzg5NTA4MjNiNmY3NTYzMDZmNThiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcApAQCAtMjgsNiArMjgs
OSBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9LZXlB
RVMuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNB
LmgiCiAjaW5jbHVkZSAiSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCkBAIC0zOCwxMSArNDEsNDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogSlNWYWx1ZSBKU0NyeXB0b0tleTo6YWxnb3JpdGhtKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSkgY29uc3QKIHsKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgYnVpbGRlcigm
c3RhdGUpOwotICAgIHdyYXBwZWQoKS5idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIp
OworCisgICAgUmVmPEtleUFsZ29yaXRobT4gYWxnb3JpdGhtID0gd3JhcHBlZCgpLmFsZ29yaXRo
bSgpOworICAgIHN3aXRjaCAoYWxnb3JpdGhtLT5rZXlBbGdvcml0aG1DbGFzcygpKSB7CisgICAg
Y2FzZSBLZXlBbGdvcml0aG1DbGFzczo6QUVTOiB7CisgICAgICAgIEFlc0tleUFsZ29yaXRobSYg
YWVzQWxnb3JpdGhtID0gZG93bmNhc3Q8QWVzS2V5QWxnb3JpdGhtPihhbGdvcml0aG0uZ2V0KCkp
OworICAgICAgICBidWlsZGVyLmFkZCgibmFtZSIsIGFlc0FsZ29yaXRobS5uYW1lKTsKKyAgICAg
ICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGFlc0FsZ29yaXRobS5sZW5ndGgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SE1BQzogeworICAgICAg
ICBIbWFjS2V5QWxnb3JpdGhtJiBobWFjQWxnb3JpdGhtID0gZG93bmNhc3Q8SG1hY0tleUFsZ29y
aXRobT4oYWxnb3JpdGhtLmdldCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQoIm5hbWUiLCBobWFj
QWxnb3JpdGhtLm5hbWUpOworICAgICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgaG1hY0hh
c2goJnN0YXRlKTsKKyAgICAgICAgaG1hY0hhc2guYWRkKCJuYW1lIiwgaG1hY0FsZ29yaXRobS5o
YXNoLm5hbWUpOworICAgICAgICBidWlsZGVyLmFkZCgiaGFzaCIsIGhtYWNIYXNoKTsKKyAgICAg
ICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGhtYWNBbGdvcml0aG0ubGVuZ3RoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0E6IHsKKyAgICAg
ICAgUnNhSGFzaGVkS2V5QWxnb3JpdGhtJiByc2FBbGdvcml0aG0gPSBkb3duY2FzdDxSc2FIYXNo
ZWRLZXlBbGdvcml0aG0+KGFsZ29yaXRobS5nZXQoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJu
YW1lIiwgcnNhQWxnb3JpdGhtLm5hbWUpOworICAgICAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xl
bmd0aCIsIHJzYUFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKTsKKyAgICAgICAgYnVpbGRlci5hZGQo
InB1YmxpY0V4cG9uZW50IiwgcnNhQWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KTsKKyAgICAgICAg
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyIHJzYUhhc2goJnN0YXRlKTsKKyAgICAgICAgcnNhSGFz
aC5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0uaGFzaC5uYW1lKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoImhhc2giLCByc2FIYXNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5
QWxnb3JpdGhtQ2xhc3M6OlJTQTogeworICAgICAgICBSc2FLZXlBbGdvcml0aG0mIHJzYUFsZ29y
aXRobSA9IGRvd25jYXN0PFJzYUtleUFsZ29yaXRobT4oYWxnb3JpdGhtLmdldCgpKTsKKyAgICAg
ICAgYnVpbGRlci5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0ubmFtZSk7CisgICAgICAgIGJ1aWxk
ZXIuYWRkKCJtb2R1bHVzTGVuZ3RoIiwgcnNhQWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpOworICAg
ICAgICBidWlsZGVyLmFkZCgicHVibGljRXhwb25lbnQiLCByc2FBbGdvcml0aG0ucHVibGljRXhw
b25lbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIGJ1aWxk
ZXIucmVzdWx0KCk7CiB9CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4YjIyNzdlNzY4YTUyODgwMzkyOTg4MThiODAxOGRmZDJlZGE1NzZj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCIKLQotI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjo6Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyKCkKLXsKLX0KLQotQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOjp+Q3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmUxNGJiMGM0OWE0NDYwNzkzMTEyM2Fj
ODVhNGM0ZTM3ZWY4NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVp
bGRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKLSNkZWZpbmUgQ3J5cHRvQWxn
b3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0j
aWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIpOwotcHVibGljOgotICAgIENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcigpOwotICAgIHZpcnR1YWwgfkNyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlcigpOwotCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyPiBjcmVhdGVFbXB0eUNsb25lKCkg
Y29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotI2VuZGlmIC8vIENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9L
ZXkuY3BwCmluZGV4IGQ4MjdmN2NjZTI0ODAyZWIxYzU5ZmFkYmRjY2QxYWJhZThlYzc1ODEuLjYw
MDc1MDY2NzFkNThmMjEyNDZhZmQyNWU2YjliN2U0MTg1MTg1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9DcnlwdG9LZXkuY3BwCkBAIC0yOCwxNSArMjgsMTMgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgi
CiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlIDx3dGYvQ3J5
cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9LZXk6OkNyeXB0b0tleShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgVHlwZSB0eXBlLCBib29sIGV4dHJhY3Rh
YmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZXMpCi0gICAgOiBtX2FsZ29yaXRobShhbGdvcml0aG0p
CitDcnlwdG9LZXk6OkNyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRo
bUlkZW50aWZpZXIsIFR5cGUgdHlwZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2Ug
dXNhZ2VzKQorICAgIDogbV9hbGdvcml0aG1JZGVudGlmaWVyKGFsZ29yaXRobUlkZW50aWZpZXIp
CiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fZXh0cmFjdGFibGUoZXh0cmFjdGFibGUpCiAg
ICAgLCBtX3VzYWdlcyh1c2FnZXMpCkBAIC00NywxMiArNDUsNiBAQCBDcnlwdG9LZXk6On5Dcnlw
dG9LZXkoKQogewogfQogCi12b2lkIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlv
bihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Ci17Ci0g
ICAgYnVpbGRlci5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9u
KCkubmFtZUZvcklkZW50aWZpZXIobV9hbGdvcml0aG0pKTsKLSAgICAvLyBTdWJjbGFzc2VzIHdp
bGwgYWRkIG90aGVyIGtleXMuCi19Ci0KIGF1dG8gQ3J5cHRvS2V5Ojp1c2FnZXMoKSBjb25zdCAt
PiBWZWN0b3I8VXNhZ2U+CiB7CiAgICAgLy8gVGhlIHJlc3VsdCBpcyBvcmRlcmVkIGFscGhhYmV0
aWNhbGx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCmluZGV4IGViNmI3MDE2ZDc1MWE5NzIx
YTA5YWI1YTBkMzMzMjhiMmRmMWRkZGUuLjk3YjFiODcyZWU3YWFiZTViYzVlYTI3OGVmMGYwNzYx
ZjYzYzUyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTEgKzQzLDM3IEBAIGNsYXNzIENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjsKIGNsYXNzIENyeXB0b0tleURhdGE7CiAKIGVu
dW0gY2xhc3MgQ3J5cHRvS2V5Q2xhc3MgewotICAgIEhNQUMsCiAgICAgQUVTLAorICAgIEhNQUMs
CiAgICAgUlNBCiB9OwogCitlbnVtIGNsYXNzIEtleUFsZ29yaXRobUNsYXNzIHsKKyAgICBBRVMs
CisgICAgSE1BQywKKyAgICBSU0EsCisgICAgSFJTQQorfTsKKworc3RydWN0IEtleUhhc2hBbGdv
cml0aG0geworICAgIFN0cmluZyBuYW1lOworfTsKKworY2xhc3MgS2V5QWxnb3JpdGhtIDogcHVi
bGljIFJlZkNvdW50ZWQ8S2V5QWxnb3JpdGhtPiB7CitwdWJsaWM6CisgICAgU3RyaW5nIG5hbWU7
CisKKyAgICBLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuKQorICAgICAgICA6IG5hbWUobikK
KyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfktleUFsZ29yaXRobSgpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25z
dCA9IDA7Cit9OworCiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxDcnlwdG9L
ZXk+IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRvS2V5VHlwZTsKQEAgLTU3LDcg
Kzg0LDcgQEAgcHVibGljOgogCiAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAgICAgYm9vbCBleHRy
YWN0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0cmFjdGFibGU7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXImKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlZjxLZXlBbGdvcml0aG0+IGFsZ29yaXRobSgp
IGNvbnN0ID0gMDsKIAogICAgIC8vIEZJWE1FOiBDb25mdXNpbmcgdG8gaGF2ZSBDcnlwdG9LZXlV
c2FnZSBhbmQgQ3J5cHRvS2V5OjpVc2FnZSBuYW1lZCBhbG1vc3QgdGhlIHNhbWUsIGJ1dCBiZSBz
bGlnaHRseSBkaWZmZXJlbnQuCiAgICAgLy8gQ3J5cHRvS2V5VXNhZ2UgdmFsdWVzIGFyZSBiaXQg
bWFza3Mgc28gdGhleSBjYW4gYmUgY29tYmluZWQgd2l0aCAib3IiLCB3aGlsZSB0aGlzIGlzIGEg
bm9ybWFsIGVudW0gdGhhdCBtdXN0CkBAIC02NSw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICBlbnVt
IGNsYXNzIFVzYWdlIHsgRW5jcnlwdCwgRGVjcnlwdCwgU2lnbiwgVmVyaWZ5LCBEZXJpdmVLZXks
IERlcml2ZUJpdHMsIFdyYXBLZXksIFVud3JhcEtleSB9OwogICAgIFZlY3RvcjxVc2FnZT4gdXNh
Z2VzKCkgY29uc3Q7CiAKLSAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2FsZ29yaXRobTsgfQorICAgIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxn
b3JpdGhtSWRlbnRpZmllcjsgfQogICAgIENyeXB0b0tleVVzYWdlIHVzYWdlc0JpdG1hcCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNhZ2VzOyB9CiAgICAgYm9vbCBhbGxvd3MoQ3J5cHRvS2V5VXNhZ2Ug
dXNhZ2UpIGNvbnN0IHsgcmV0dXJuIHVzYWdlID09IChtX3VzYWdlcyAmIHVzYWdlKTsgfQogCkBA
IC03Myw4ICsxMDAsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBy
YW5kb21EYXRhKHNpemVfdCk7CiAKK3Byb3RlY3RlZDoKKyAgICBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsKKwogcHJpdmF0ZToKLSAgICBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIG1fYWxnb3JpdGhtOwogICAgIFR5cGUgbV90eXBlOwogICAgIGJvb2wg
bV9leHRyYWN0YWJsZTsKICAgICBDcnlwdG9LZXlVc2FnZSBtX3VzYWdlczsKQEAgLTkyLDUgKzEy
MSwxMCBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvQ2xhc3NOYW1l
KSBcCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNyeXB0b0tleSYga2V5
KSB7IHJldHVybiBrZXkua2V5Q2xhc3MoKSA9PSBXZWJDb3JlOjpLZXlDbGFzczsgfSBcCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19LRVlfQUxHT1JJVEhNKFRvQ2xhc3NOYW1lLCBLZXlBbGdvcml0aG1DbGFzcykgXAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpLZXlBbGdvcml0aG0mIGFsZ29yaXRobSkgeyBy
ZXR1cm4gYWxnb3JpdGhtLmtleUFsZ29yaXRobUNsYXNzKCkgPT0gV2ViQ29yZTo6S2V5QWxnb3Jp
dGhtQ2xhc3M7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYgLy8g
RU5BQkxFKFNVQlRMRV9DUllQVE8pCiAjZW5kaWYgLy8gQ3J5cHRvS2V5X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaWRsIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5pZGwKaW5kZXggYzRmMWMzYzUzMWIzZTE3ODgyYmMxMjczMDQ3MzFhNjRl
MjQ5NmM4Yi4uMzY1MDM1NWUxNzJkMTYyNDgwMzk0MDMyNTY1MWM0Mzk2OGQxMjI5OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwKQEAgLTQ3LDYgKzQ3LDYgQEAgZW51bSBLZXlVc2Fn
ZSB7CiBdIGludGVyZmFjZSBDcnlwdG9LZXkgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBLZXlU
eXBlIHR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gZXh0cmFjdGFibGU7Ci0g
ICAgW0N1c3RvbV0gcmVhZG9ubHkgYXR0cmlidXRlIEFsZ29yaXRobSBhbGdvcml0aG07CisgICAg
W0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIG9iamVjdCBhbGdvcml0aG07CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIHNlcXVlbmNlPEtleVVzYWdlPiB1c2FnZXM7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3BwCmlu
ZGV4IGQ3MDQ1YTViNjg0N2JhNzcwNmM2MWYzY2YwZjE3NzYxOWQwNmIzOWMuLjA2OWJiNmQ5MjFm
NzUyYTIzZGYzNmI2ZDJiNTViYWViMDA4NjE0YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nbnV0bHMvQ3J5cHRvS2V5UlNBR251VExTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ251dGxzL0NyeXB0b0tleVJTQUdudVRMUy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
aCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNy
eXB0b0tleVBhaXIuaCIKQEAgLTgxLDEwICs4MCwxMSBAQCBzaXplX3QgQ3J5cHRvS2V5UlNBOjpr
ZXlTaXplSW5CaXRzKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBDcnlwdG9LZXlS
U0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPEtleUFsZ29yaXRobT4gYWxnb3JpdGhtKCkgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShidWlsZGVyKTsK
KyAgICBWZWN0b3I8dWludDhfdD4gcHVibGljRXhwb25lbnQ7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUnNhS2V5QWxnb3JpdGhtKGVtcHR5U3RyaW5nKCksIDAsIFdURk1vdmUocHVibGljRXhw
b25lbnQpKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlS
U0E6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5QUVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUFFUy5jcHAKaW5kZXggNDRiNTAwN2I5MTI3NjY3ZWYyZDc1NTg5NDg5YjdiOTFjNmY1NGI1
YS4uZDMyOTVjODk2Y2Y2NjAwNGE1NTk2MDQ2YzBiYTEwYTQ5YTU3MTgyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAK
ICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURl
c2NyaXB0aW9uQnVpbGRlci5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYzLDEwICs2Miw5IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+
IENyeXB0b0tleUFFUzo6Z2VuZXJhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0
aG0sCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCByYW5k
b21EYXRhKGxlbmd0aEJpdHMgLyA4KSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCi12b2lk
IENyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1E
ZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8S2V5QWxnb3JpdGhtPiBDcnlw
dG9LZXlBRVM6OmFsZ29yaXRobSgpIGNvbnN0CiB7Ci0gICAgQ3J5cHRvS2V5OjpidWlsZEFsZ29y
aXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOwotICAgIGJ1aWxkZXIuYWRkKCJsZW5ndGgiLCBtX2tl
eS5zaXplKCkgKiA4KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBZXNLZXlBbGdvcml0aG0o
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1f
YWxnb3JpdGhtSWRlbnRpZmllciksIG1fa2V5LnNpemUoKSAqIDgpKTsKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0tleURhdGE+IENyeXB0b0tleUFFUzo6ZXhwb3J0RGF0YSgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oCmluZGV4IDQ1YTViYjgyMzY0
ZWViMTFmZGM1MzA1MWIxZGYzNWZhMzUzMmFmZjcuLmNkYWVkODNlOGMwOTIwMTEwYTk0MjU0Y2Iy
ZjQ4OGYyNWUwMTRlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUFFUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFF
Uy5oCkBAIC0zNCw2ICszNCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFl
c0tleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdvcml0aG0geworcHVibGljOgorICAgIHNpemVf
dCBsZW5ndGg7CisKKyAgICBBZXNLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuLCBzaXplX3Qg
bCkKKyAgICAgICAgOiBLZXlBbGdvcml0aG0obikKKyAgICAgICAgLCBsZW5ndGgobCkKKyAgICB7
CisgICAgfQorICAgIHZpcnR1YWwgfkFlc0tleUFsZ29yaXRobSgpCisgICAgeworICAgIH0KKwor
ICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkFFUzsgfQorfTsKKwogY2xhc3MgQ3J5cHRvS2V5
QUVTIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxD
cnlwdG9LZXlBRVM+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlIHVzYWdlKQpAQCAtNTMsNyArNjksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENyeXB0
b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwogCi0gICAgdm9pZCBidWls
ZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxLZXlBbGdvcml0aG0+IGFsZ29yaXRobSgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRh
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gbV9rZXk7CkBAIC02Myw2
ICs3OSw4IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShD
cnlwdG9LZXlBRVMsIENyeXB0b0tleUNsYXNzOjpBRVMpCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfS0VZX0FMR09SSVRITShBZXNLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpBRVMp
CisKICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAogI2VuZGlmIC8vIENyeXB0b0tl
eUFFU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlI
TUFDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCmlu
ZGV4IGFmNjA0ZjRmNzdjZTQyZDNhMmRjNGYwNjJkMjU0OTU1NDIyNGIwYzAuLjg2YTQwOWJiYTNj
NDk5OGVhZjJjNmNiMjcwNjQ3YzYyZWFjYjAxMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUo
U1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVp
bGRlci5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
Q3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KQEAgLTY3LDE1ICs2NiwxMyBAQCBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gQ3J5cHRvS2V5
SE1BQzo6Z2VuZXJhdGUoc2l6ZV90IGxlbmd0aEJ5dGVzLCBDcnlwdG9BbGdvcml0aAogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5SE1BQyhyYW5kb21EYXRhKGxlbmd0aEJ5dGVzKSwg
aGFzaCwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCi12b2lkIENyeXB0b0tleUhNQUM6OmJ1
aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
JiBidWlsZGVyKSBjb25zdAorUmVmPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5SE1BQzo6YWxnb3Jp
dGhtKCkgY29uc3QKIHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24o
YnVpbGRlcik7CisgICAgS2V5SGFzaEFsZ29yaXRobSBoYXNoQWxnb3JpdGhtOworICAgIGhhc2hB
bGdvcml0aG0ubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1l
Rm9ySWRlbnRpZmllcihtX2hhc2gpOwogCi0gICAgYXV0byBoYXNoRGVzY3JpcHRpb25CdWlsZGVy
ID0gYnVpbGRlci5jcmVhdGVFbXB0eUNsb25lKCk7Ci0gICAgaGFzaERlc2NyaXB0aW9uQnVpbGRl
ci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVG
b3JJZGVudGlmaWVyKG1faGFzaCkpOwotICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNj
cmlwdGlvbkJ1aWxkZXIpOwotCi0gICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIG1fa2V5LnNpemUo
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSG1hY0tleUFsZ29yaXRobShDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9hbGdvcml0aG1J
ZGVudGlmaWVyKSwKKyAgICAgICAgV1RGTW92ZShoYXNoQWxnb3JpdGhtKSwgbV9rZXkuc2l6ZSgp
KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlITUFDOjpl
eHBvcnREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleUhNQUMuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhN
QUMuaAppbmRleCA0NjhhZDA3N2YxOTYxYWQ4ZGFkN2I0YjQzOTk4ZWIxNzJjZDIzMzA3Li5kOWJi
NWYxODdkODUyZDY4OWUwYzA3YzM5OTc0NDZlNmRhYTRmNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCkBAIC0zMyw2ICszMywyNCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEhtYWNLZXlBbGdvcml0aG0gOiBwdWJsaWMgS2V5QWxnb3Jp
dGhtIHsKK3B1YmxpYzoKKyAgICBLZXlIYXNoQWxnb3JpdGhtIGhhc2g7CisgICAgc2l6ZV90IGxl
bmd0aDsKKworICAgIEhtYWNLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuLCBLZXlIYXNoQWxn
b3JpdGhtJiYgaCwgc2l6ZV90IGwpCisgICAgICAgIDogS2V5QWxnb3JpdGhtKG4pCisgICAgICAg
ICwgaGFzaChXVEZNb3ZlKGgpKQorICAgICAgICAsIGxlbmd0aChsKQorICAgIHsKKyAgICB9Cisg
ICAgdmlydHVhbCB+SG1hY0tleUFsZ29yaXRobSgpCisgICAgeworICAgIH0KKworICAgIEtleUFs
Z29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
S2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUM7IH0KK307CisKIGNsYXNzIENyeXB0b0tleUhNQUMgZmlu
YWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tl
eUhNQUM+IGNyZWF0ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkK
QEAgLTUzLDcgKzcxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDcnlwdG9LZXlITUFDKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gs
IGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAgIHZvaWQgYnVpbGRBbGdv
cml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWY8S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0oKSBjb25zdCBvdmVy
cmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0RGF0YSgpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBtX2hhc2g7CkBA
IC02NCw1ICs4Miw3IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRP
X0tFWShDcnlwdG9LZXlITUFDLCBDcnlwdG9LZXlDbGFzczo6SE1BQykKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKEhtYWNLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNs
YXNzOjpITUFDKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAjZW5kaWYgLy8g
Q3J5cHRvS2V5SE1BQ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9D
cnlwdG9LZXlSU0EuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5o
CmluZGV4IDZlYTIwMGI4YzE3MWU4MzIwMzRmNDZlZjQzZGM5NjVmMGM1ZDllZTAuLmUzOTRjZTM2
MjA2MWJkOWQ0MGQ5NWFjYjU4NzI0YjBkY2I5MzE5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleVJTQS5oCkBAIC00Nyw2ICs0Nyw0MSBAQCBjbGFzcyBDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czsKIGNsYXNzIENyeXB0b0tleVBhaXI7CiBjbGFzcyBQcm9taXNlV3Jh
cHBlcjsKIAorY2xhc3MgUnNhS2V5QWxnb3JpdGhtIDogcHVibGljIEtleUFsZ29yaXRobSB7Citw
dWJsaWM6CisgICAgc2l6ZV90IG1vZHVsdXNMZW5ndGg7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1
YmxpY0V4cG9uZW50OworCisgICAgUnNhS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbiwgc2l6
ZV90IG0sIFZlY3Rvcjx1aW50OF90PiYmIHApCisgICAgICAgIDogS2V5QWxnb3JpdGhtKG4pCisg
ICAgICAgICwgbW9kdWx1c0xlbmd0aChtKQorICAgICAgICAsIHB1YmxpY0V4cG9uZW50KFdURk1v
dmUocCkpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5Sc2FLZXlBbGdvcml0aG0oKQorICAg
IHsKKyAgICB9CisKKyAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpSU0E7IH0KK307CisKK2Ns
YXNzIFJzYUhhc2hlZEtleUFsZ29yaXRobSA6IHB1YmxpYyBSc2FLZXlBbGdvcml0aG0geworcHVi
bGljOgorICAgIEtleUhhc2hBbGdvcml0aG0gaGFzaDsKKworICAgIFJzYUhhc2hlZEtleUFsZ29y
aXRobShjb25zdCBTdHJpbmcmIG4sIHNpemVfdCBtLCBWZWN0b3I8dWludDhfdD4mJiBwLCBLZXlI
YXNoQWxnb3JpdGhtJiYgaCkKKyAgICAgICAgOiBSc2FLZXlBbGdvcml0aG0obiwgbSwgV1RGTW92
ZShwKSkKKyAgICAgICAgLCBoYXNoKFdURk1vdmUoaCkpCisgICAgeworICAgIH0KKyAgICB2aXJ0
dWFsIH5Sc2FIYXNoZWRLZXlBbGdvcml0aG0oKQorICAgIHsKKyAgICB9CisKKworICAgIEtleUFs
Z29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
S2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0E7IH0KK307CisKIGNsYXNzIENyeXB0b0tleVJTQSBmaW5h
bCA6IHB1YmxpYyBDcnlwdG9LZXkgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q3J5cHRvS2V5
UlNBPiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgaGFzSGFzaCwgQ3J5cHRvS2V5VHlwZSB0eXBl
LCBQbGF0Zm9ybVJTQUtleSBwbGF0Zm9ybUtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2UgdXNhZ2UpCkBAIC03MSw3ICsxMDYsNyBAQCBwcml2YXRlOgogCiAgICAgQ3J5cHRvS2V5
Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6
UlNBOyB9CiAKLSAgICB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3Jp
dGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEtleUFsZ29y
aXRobT4gYWxnb3JpdGhtKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBsYXRmb3Jt
UlNBS2V5IG1fcGxhdGZvcm1LZXk7CkBAIC04NCw1ICsxMTksOSBAQCBwcml2YXRlOgogCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5UlNBLCBDcnlwdG9LZXlDbGFz
czo6UlNBKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oUnNhS2V5QWxn
b3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6UlNBKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0tFWV9BTEdPUklUSE0oUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6
SFJTQSkKKwogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogI2VuZGlmIC8vIENyeXB0
b0tleVJTQV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tl
eVJTQU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5j
cHAKaW5kZXggMTQwYzliMzE4OGY5YjhhNGFmNjQ5ZGY0ODc0ZjdkMDkwOWQwYTFhMi4uZmRhNmIx
MzhjN2RhNzk1OTAwM2E1ZTk1MzIzOTJjMzdiM2U5OWE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lmIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKQEAgLTE2MCwyNiArMTU5
LDI2IEBAIHNpemVfdCBDcnlwdG9LZXlSU0E6OmtleVNpemVJbkJpdHMoKSBjb25zdAogICAgIHJl
dHVybiBtb2R1bHVzLnNpemUoKSAqIDg7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5UlNBOjpidWlsZEFs
Z29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVp
bGRlcikgY29uc3QKK1JlZjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YWxnb3JpdGhtKCkg
Y29uc3QKIHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRl
cik7Ci0KKyAgICBTdHJpbmcgbmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0
b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRobUlkZW50aWZpZXIpOwogICAgIFZlY3Rv
cjx1aW50OF90PiBtb2R1bHVzOwogICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNFeHBvbmVudDsK
ICAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gZ2V0UHVibGljS2V5Q29tcG9uZW50cyhtX3Bs
YXRmb3JtS2V5LCBtb2R1bHVzLCBwdWJsaWNFeHBvbmVudCk7CiAgICAgaWYgKHN0YXR1cykgewog
ICAgICAgICBXVEZMb2dBbHdheXMoIkNvdWxkbid0IGdldCBSU0Ega2V5IGNvbXBvbmVudHMsIHN0
YXR1cyAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcHVibGljRXhwb25l
bnQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUnNhS2V5QWxnb3JpdGht
KG5hbWUsIDAsIFdURk1vdmUocHVibGljRXhwb25lbnQpKSk7CiAgICAgfQogCi0gICAgYnVpbGRl
ci5hZGQoIm1vZHVsdXNMZW5ndGgiLCBtb2R1bHVzLnNpemUoKSAqIDgpOwotICAgIGJ1aWxkZXIu
YWRkKCJwdWJsaWNFeHBvbmVudCIsIHB1YmxpY0V4cG9uZW50KTsKLQorICAgIHNpemVfdCBtb2R1
bHVzTGVuZ3RoID0gbW9kdWx1cy5zaXplKCkgKiA4OwogICAgIGlmIChtX3Jlc3RyaWN0ZWRUb1Nw
ZWNpZmljSGFzaCkgewotICAgICAgICBhdXRvIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIgPSBidWls
ZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsKLSAgICAgICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+
YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJ
ZGVudGlmaWVyKG1faGFzaCkpOwotICAgICAgICBidWlsZGVyLmFkZCgiaGFzaCIsICpoYXNoRGVz
Y3JpcHRpb25CdWlsZGVyKTsKKyAgICAgICAgS2V5SGFzaEFsZ29yaXRobSBoYXNoQWxnb3JpdGht
OworICAgICAgICBoYXNoQWxnb3JpdGhtLm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6
c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKTsKKworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBSc2FIYXNoZWRLZXlBbGdvcml0aG0obmFtZSwgbW9kdWx1c0xlbmd0aCwg
V1RGTW92ZShwdWJsaWNFeHBvbmVudCksIFdURk1vdmUoaGFzaEFsZ29yaXRobSkpKTsKICAgICB9
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUnNhS2V5QWxnb3JpdGhtKG5hbWUsIG1vZHVsdXNM
ZW5ndGgsIFdURk1vdmUocHVibGljRXhwb25lbnQpKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJh
ZjkxMmY0ZDRjMzBlNWNhMjVlMWNlMWNmNTU3YWFkN2YyN2VjZjcuLmJhODU2YzFhYTRhMjQzOTY4
NjUzMzJlMDI1NmI4MzQ4MjRjNzAzZDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wOS0x
MiAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNyeXB0
byBhbGdvcml0aG1zIHNob3VsZCBiZSBleHBvc2VkIHZpYSBLZXlBbGdvcml0aG0gaW50ZXJmYWNl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg3NDgK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI3MzU5NDM4PgorCisgICAgICAgIFJldmlld2VkIGJ5
IEJyZW50IEZ1bGdoYW0uCisKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUt
a2V5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUt
a2V5Lmh0bWw6CisKIDIwMTYtMDktMTIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICB3aW5kb3cucGVyZm9ybWFuY2Ugb2JqZWN0IHJlc2V0cyBzY3JpcHQtYXBwbGll
ZCBwcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMt
Z2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1h
Yy1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQudHh0CmluZGV4IDViZDMxYmQwYTdhNzIxNmY2ZDQwYjFm
NmY1NTg5MGUwYWQxM2FjZTQuLjUzOTIxZTQyNzAzZmUxNGIyZWVlZTYyMWFhMTIxMzAzYjYwMjhj
YmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1r
ZXktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5l
cmF0ZS1rZXktZXhwZWN0ZWQudHh0CkBAIC0xMyw2ICsxMyw3IEBAIFBBU1Mga2V5LnR5cGUgaXMg
J3NlY3JldCcKIFBBU1Mga2V5LmV4dHJhY3RhYmxlIGlzIHRydWUKIFBBU1Mga2V5LmFsZ29yaXRo
bS5uYW1lIGlzICdITUFDJwogUEFTUyBrZXkuYWxnb3JpdGhtLmxlbmd0aCBpcyA2NAorUEFTUyBr
ZXkuYWxnb3JpdGhtLmhhc2gubmFtZSBpcyAnU0hBLTEnCiBQQVNTIGtleS51c2FnZXMgaXMgWyJz
aWduIiwgInZlcmlmeSJdCiAKIEdlbmVyYXRpbmcgYSBrZXkgd2l0aCBjdXN0b20gbGVuZ3RoLi4u
CkBAIC0yMCw2ICsyMSw3IEBAIFBBU1Mga2V5LnR5cGUgaXMgJ3NlY3JldCcKIFBBU1Mga2V5LmV4
dHJhY3RhYmxlIGlzIHRydWUKIFBBU1Mga2V5LmFsZ29yaXRobS5uYW1lIGlzICdITUFDJwogUEFT
UyBrZXkuYWxnb3JpdGhtLmxlbmd0aCBpcyA1CitQQVNTIGtleS5hbGdvcml0aG0uaGFzaC5uYW1l
IGlzICdTSEEtMScKIFBBU1Mga2V5LnVzYWdlcyBpcyBbInNpZ24iXQogUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2htYWMtZ2VuZXJhdGUta2V5Lmh0bWwgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMt
Z2VuZXJhdGUta2V5Lmh0bWwKaW5kZXggM2FmYzU2ODVjMTc4YTEyMzdhNmE5MzYwMGM0ZjA5YTNh
OTE4ODg5Yi4uMmI5YmYzYTE3YTcxOGFhZjA2NzRiOTc4ZGUwMDQwMGM1Zjg3ZDJkMCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5odG1sCisr
KyBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbApAQCAt
MjgsNiArMjgsNyBAQCBjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5KHtuYW1lOiAiaG1hYyIsIGhh
c2g6ICJzaGEtMSJ9LCBleHRyYWN0YWJsZSwgWyJzaWduIiwgIgogICAgIHNob3VsZEJlKCJrZXku
ZXh0cmFjdGFibGUiLCAidHJ1ZSIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLm5hbWUi
LCAiJ0hNQUMnIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubGVuZ3RoIiwgIjY0Iik7
CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidTSEEtMSciKTsKICAg
ICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICdbInNpZ24iLCAidmVyaWZ5Il0nKTsKIAogICAgIGRl
YnVnKCJcbkdlbmVyYXRpbmcgYSBrZXkgd2l0aCBjdXN0b20gbGVuZ3RoLi4uIik7CkBAIC0zOSw2
ICs0MCw3IEBAIGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoe25hbWU6ICJobWFjIiwgaGFzaDog
InNoYS0xIn0sIGV4dHJhY3RhYmxlLCBbInNpZ24iLCAiCiAgICAgc2hvdWxkQmUoImtleS5leHRy
YWN0YWJsZSIsICJ0cnVlIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICIn
SE1BQyciKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiNSIpOworICAg
IHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmhhc2gubmFtZSIsICInU0hBLTEnIik7CiAgICAgc2hv
dWxkQmUoImtleS51c2FnZXMiLCAnWyJzaWduIl0nKTsKICAgICBmaW5pc2hKU1Rlc3QoKTsKIH0p
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288657</attachid>
            <date>2016-09-12 19:14:47 -0700</date>
            <delta_ts>2016-09-13 16:56:07 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-128748-20160912191214.patch</filename>
            <type>text/plain</type>
            <size>38662</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmQ4MWI3NWJjZGU1NDgz
NzJhZWMyYzNiY2UxZGYzMTRkYjVhN2E4ZC4uMDg2N2Q0ZjAwNTFhMWU1MmM1MjUwZWQ4NTU0NmU2
YzcwNmY0ODdmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE2LTA5LTEyICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBpbnRlcmZhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODc0OAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjczNTk0Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQg
RnVsZ2hhbS4KKworICAgICAgICBSZXBsYWNlIGN1c3RvbSBDcnlwdG9BbGdvcml0aG1CdWlsZGVy
L2J1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24gd2l0aCBLZXlBbGdvcml0aG0gaW50ZXJmYWNlIHdo
aWNoIGlzCisgICAgICAgIGRlZmluZWQgYnkgdGhlIHNwZWMuCisKKyAgICAgICAgTm8gY2hhbmdl
IGluIGJlaGF2aW9yLCBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1h
Yy5jbWFrZToKKyAgICAgICAgUmVtb3ZlIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHAuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmNyZWF0ZUVtcHR5Q2xvbmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ3J5cHRvS2V5OjphbGdvcml0aG0pOgorICAgICAgICBHZXQgcmlkIG9mIGRlcGVuZGVu
Y3kgb24gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLgorICAgICAgICAqIGNyeXB0
by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaDogUmVtb3ZlZC4K
KyAgICAgICAgUmVwbGFjZSBpdCB3aXRoIEtleUFsZ29yaXRobS4KKyAgICAgICAgKiBjcnlwdG8v
Q3J5cHRvS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6Q3J5cHRvS2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6
IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5QWxnb3JpdGhtOjpLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxn
b3JpdGhtOjp+S2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YWxn
b3JpdGhtSWRlbnRpZmllcik6CisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5pZGw6CisgICAg
ICAgIEFkZCBLZXlBbGdvcml0aG0gaW50ZXJmYWNlIHdoaWNoIGlzIHJldHVybmVkIHZpYSBDcnlw
dG9LZXkuYWxnb3JpdGhtKCkgbWV0aG9kLAorICAgICAgICBhbmQgcmVuYW1lIG1fYWxnb3JpdGht
IHRvIG1fYWxnb3JpdGhtSWRlbnRpZmllciB0byBkaXN0aW5ndXNoIGl0IHdpdGggbmV3bHkKKyAg
ICAgICAgYWRkZWQgS2V5QWxnb3JpdGhtIGludGVyZmFjZS4KKyAgICAgICAgKiBjcnlwdG8vZ251
dGxzL0NyeXB0b0tleVJTQUdudVRMUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphbGdvcml0aG0p
OgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXB0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjphbGdvcml0aG0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkFlc0tleUFsZ29yaXRobTo6QWVzS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkFl
c0tleUFsZ29yaXRobTo6fkFlc0tleUFsZ29yaXRobSk6CisgICAgICAgICogY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjphbGdv
cml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0aG1E
ZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1B
Qy5oOgorICAgICAgICAoV2ViQ29yZTo6SG1hY0tleUFsZ29yaXRobTo6SG1hY0tleUFsZ29yaXRo
bSk6CisgICAgICAgIChXZWJDb3JlOjpIbWFjS2V5QWxnb3JpdGhtOjp+SG1hY0tleUFsZ29yaXRo
bSk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmg6CisgICAgICAgIChXZWJD
b3JlOjpSc2FLZXlBbGdvcml0aG06OlJzYUtleUFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3Jl
OjpSc2FLZXlBbGdvcml0aG06On5Sc2FLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6
UnNhSGFzaGVkS2V5QWxnb3JpdGhtOjpSc2FIYXNoZWRLZXlBbGdvcml0aG0pOgorICAgICAgICAo
V2ViQ29yZTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtOjp+UnNhSGFzaGVkS2V5QWxnb3JpdGhtKToK
KyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9L
ZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorCiAyMDE2LTA5LTEy
ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0Nv
Y29hXSBSZWR1Y2UgdXNlcyBvZiBDR0ZvbnRzIGluIGZhdm9yIG9mIENURm9udHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggMDIwMTA1MmE3MGZhMTUxNDJjNGVlOTRjNGZkYTNjMGM1OTky
Y2I3OS4uMDMyM2NmNTdhZjQ3M2I0N2M1NjA3ODU0NWFhOWQ4ODMxZjU1NGYyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTQwNCw3ICs0MDQsNiBAQCBlbmRpZiAoKQogaWYgKEVOQUJM
RV9TVUJUTEVfQ1JZUFRPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAg
ICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmNwcAotICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3Jp
dGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnkuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9LZXkuY3BwCiAgICAgICAgIGNyeXB0
by9DcnlwdG9LZXlQYWlyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA4YTM3ODg3
NWRkMzU4YjYxY2I5N2M1NDJiODgzZTMzMTJhNWM3NGEzLi5hNWZhYTZmNGZiOTQxNmUwZDVkODE2
YTE2ZTM5OWRkNTdiYmQ3ZmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMzk2LDcg
KzM5Niw2IEBAIGVuZGlmICgpCiBpZiAoRU5BQkxFX1NVQlRMRV9DUllQVE8pCiAgICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG0uY3Bw
Ci0gICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCiAg
ICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKICAgICAgICAgY3J5cHRv
L0NyeXB0b0tleS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleVBhaXIuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDRhOGY4NjIwZGIwMjBiYzMyZGUzMzM3ZjEwMjE3ODhjOTVl
ZDM3YmUuLjM0YjhkYjI3MGJmNjk0YjJlMDdkMTg0OTFhYTg3NDY3NDM1NjdmYzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0xNzYsNyArMTc2LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBjcnlwdG8vQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNwcAogICAgIGNy
eXB0by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlci5jcHAKICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3Bw
CiAgICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKICAgICBjcnlwdG8vQ3J5cHRvS2V5UGFpci5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAxYjJkZDU3NjNlZjdlNjg1YjVkNGFjMzRlMGUyNTc4OWRlNDhiOGY5Li4yMmFkYjM5ZjQw
Nzk5NTEwODYwNjc1NjQ1Njk3ODUzZWIzNGY4NmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01OTcxLDggKzU5NzEsNiBAQAog
CQlFMTU3QThFNDE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEUyMTgxNzNBM0EwMDlGODIx
RCAvKiBDcnlwdG9LZXkuY3BwICovOyB9OwogCQlFMTU3QThFNTE4MTczQTNBMDA5RjgyMUQgLyog
Q3J5cHRvS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTU3QThFMzE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggKi87IH07CiAJCUUxNTdB
OEU4MTgxODRDNjcwMDlGODIxRCAvKiBKU0NyeXB0b0tleUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFNjE4MTg0QzY3MDA5Rjgy
MUQgLyogSlNDcnlwdG9LZXlDdXN0b20uY3BwICovOyB9OwotCQlFMTU3QThFQzE4MTg1MUFDMDA5
RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVBMTgxODUxQUMwMDlG
ODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwICovOyB9OwotCQlF
MTU3QThFRDE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3
QThFQjE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
LmggKi87IH07CiAJCUUxNTdBOEYwMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE1N0E4RUUxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5j
cHAgKi87IH07CiAJCUUxNTdBOEYxMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCAq
LzsgfTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAw
MEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CkBAIC0xMzU0Nyw4ICsxMzU0NSw2IEBACiAJ
CUUxNTdBOEUyMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTE1N0E4RTMxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9LZXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTE1N0E4RTYxODE4NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvS2V5
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE1N0E4RUExODE4NTFB
QzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTU3QThFQjE4MTg1
MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVp
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU3QThFRTE4MTg1NDI1MDA5
RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
cnlwdG9BbGdvcml0aG1CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
NUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMTgzLDggKzIyMTc5LDYgQEAKIAkJCQlFMUZFMTM3MzE4NDAyQTY3MDA4OTJGMTMgLyog
Q29tbW9uQ3J5cHRvVXRpbGl0aWVzLmggKi8sCiAJCQkJRTE3MkFGNkIxODBGMjRDNjAwRkJBREI5
IC8qIENyeXB0b0FsZ29yaXRobS5jcHAgKi8sCiAJCQkJRTE3MkFGNkMxODBGMjRDNjAwRkJBREI5
IC8qIENyeXB0b0FsZ29yaXRobS5oICovLAotCQkJCUUxNTdBOEVBMTgxODUxQUMwMDlGODIxRCAv
KiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwICovLAotCQkJCUUxNTdBOEVC
MTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAq
LywKIAkJCQlFMUM2NTcyNDE4MTZFNjlEMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllci5oICovLAogCQkJCUUxQzY1NzI2MTgxNkY5RkUwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzLmggKi8sCiAJCQkJRTFGRjhGNkExODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcCAqLywKQEAgLTI0MDc3LDcgKzI0MDcxLDYgQEAKIAkJCQlF
MUZFMTM3QjE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI1RjgzQTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGht
QWVzQ2JjUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlBQzNGNzE4MjRFNUQxMDAzNDk0
MjYgLyogQ3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlFMTU3QThFRDE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTI1RjgzMjE4MjJGMTFCMDBEODRDRDkgLyog
Q3J5cHRvQWxnb3JpdGhtSE1BQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5REEyOUMxODE4OUFE
RDAwMDg4QkM4IC8qIENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxQzY1NzFGMTgxNkU1MDMwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1IbWFjUGFy
YW1zLmggaW4gSGVhZGVycyAqLywKQEAgLTI3Nzg4LDcgKzI3NzgxLDYgQEAKIAkJCQlFMTI1Rjg0
NTE4MjQyNUM5MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMUZFMTM3QTE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGht
QUVTX0tXLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkUxMzdFMTg0RDI3MDIwMDg5MkYxMyAv
KiBDcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE1N0E4
RUMxODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzMTE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRv
QWxnb3JpdGhtSE1BQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzODE4MjJGMUVCMDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MUZGOEY2QzE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
cnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcAppbmRleCBhOWYzNzI2NTcwZTI4OTRhYmE2MWU4NWNj
MDlmMDljMTQ4YjE4Zjk4Li5kOTljMjdhYmQ5NGM0YjYxMGYwZmQ4MzZlMjJiNmQ3NmQ5ODRhMzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5jcHAKQEAgLTQ4LDExICs0OCw2IEBAIEpTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlcjo6fkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcigpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+IEpTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlcjo6Y3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyPihtX2V4ZWMpOwotfQotCiB2b2lkIEpTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIqIGtleSwgdW5zaWduZWQgdmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOwpAQCAtNzUsMTIgKzcwLDExIEBAIHZvaWQg
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIGJ1ZmZlCiAgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50
aWZpZXIsIGFycmF5Vmlldy0+d3JhcChtX2V4ZWMsIHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVj
dCgpKSk7CiB9CiAKLXZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hh
cioga2V5LCBjb25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIG5lc3RlZEJ1
aWxkZXIpCit2b2lkIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIqIGtl
eSwgY29uc3QgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyJiBuZXN0ZWRCdWlsZGVyKQogewogICAg
IFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5KTsKLSAgICBjb25zdCBKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXImIGpzQnVpbGRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEpTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlciY+KG5lc3RlZEJ1aWxkZXIpOwotICAgIG1fZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZt
LCBpZGVudGlmaWVyLCBqc0J1aWxkZXIucmVzdWx0KCkpOworICAgIG1fZGljdGlvbmFyeS0+cHV0
RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBuZXN0ZWRCdWlsZGVyLnJlc3VsdCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAppbmRleCBkNTM3YjRjNjc3MWI5N2ExMDc4MmE0
NWZlOTlkOGFhODViMDBlZWU5Li4yODczYmQxZjcyNTU2OWE3NWU1MWVjMzJmNDU5YTUyMDM5Yzlh
ZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29y
aXRobUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuaApAQCAtMjYsNyArMjYsMTAgQEAKICNpZm5kZWYgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyX2gKICNkZWZpbmUgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyX2gKIAotI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxF
KFNVQlRMRV9DUllQVE8pCiAKQEAgLTM3LDE5ICs0MCwxOCBAQCBjbGFzcyBKU09iamVjdDsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgZmlu
YWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyIHsKK2NsYXNzIEpT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNDcnlw
dG9BbGdvcml0aG1CdWlsZGVyKTsKIHB1YmxpYzoKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxk
ZXIoSlNDOjpFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIH5KU0NyeXB0b0FsZ29yaXRobUJ1aWxk
ZXIoKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlj
dGlvbmFyeTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobURlc2NyaXB0
aW9uQnVpbGRlcj4gY3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBhZGQoY29uc3QgY2hhciosIHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZChjb25z
dCBjaGFyKiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGQoY29uc3QgY2hh
ciosIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkKGNvbnN0
IGNoYXIqLCBjb25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOworICAgIHZvaWQgYWRkKGNv
bnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CisgICAgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IEpT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlciYpOwogCiBwcml2YXRlOgogICAgIEpTQzo6RXhlY1N0YXRl
KiBtX2V4ZWM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0
b0tleUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1
c3RvbS5jcHAKaW5kZXggNTg1OTRiZWYyZGIyOWEyZjA5NzVlYzk5ZmZjYWY4NDA1MWRiOWQ1My4u
ZjM4Nzc0YWYwYjI2ZjdkODkxMzg5NTA4MjNiNmY3NTYzMDZmNThiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcApAQCAtMjgsNiArMjgs
OSBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9LZXlB
RVMuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNB
LmgiCiAjaW5jbHVkZSAiSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCkBAIC0zOCwxMSArNDEsNDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogSlNWYWx1ZSBKU0NyeXB0b0tleTo6YWxnb3JpdGhtKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSkgY29uc3QKIHsKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgYnVpbGRlcigm
c3RhdGUpOwotICAgIHdyYXBwZWQoKS5idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIp
OworCisgICAgUmVmPEtleUFsZ29yaXRobT4gYWxnb3JpdGhtID0gd3JhcHBlZCgpLmFsZ29yaXRo
bSgpOworICAgIHN3aXRjaCAoYWxnb3JpdGhtLT5rZXlBbGdvcml0aG1DbGFzcygpKSB7CisgICAg
Y2FzZSBLZXlBbGdvcml0aG1DbGFzczo6QUVTOiB7CisgICAgICAgIEFlc0tleUFsZ29yaXRobSYg
YWVzQWxnb3JpdGhtID0gZG93bmNhc3Q8QWVzS2V5QWxnb3JpdGhtPihhbGdvcml0aG0uZ2V0KCkp
OworICAgICAgICBidWlsZGVyLmFkZCgibmFtZSIsIGFlc0FsZ29yaXRobS5uYW1lKTsKKyAgICAg
ICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGFlc0FsZ29yaXRobS5sZW5ndGgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SE1BQzogeworICAgICAg
ICBIbWFjS2V5QWxnb3JpdGhtJiBobWFjQWxnb3JpdGhtID0gZG93bmNhc3Q8SG1hY0tleUFsZ29y
aXRobT4oYWxnb3JpdGhtLmdldCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQoIm5hbWUiLCBobWFj
QWxnb3JpdGhtLm5hbWUpOworICAgICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgaG1hY0hh
c2goJnN0YXRlKTsKKyAgICAgICAgaG1hY0hhc2guYWRkKCJuYW1lIiwgaG1hY0FsZ29yaXRobS5o
YXNoLm5hbWUpOworICAgICAgICBidWlsZGVyLmFkZCgiaGFzaCIsIGhtYWNIYXNoKTsKKyAgICAg
ICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGhtYWNBbGdvcml0aG0ubGVuZ3RoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0E6IHsKKyAgICAg
ICAgUnNhSGFzaGVkS2V5QWxnb3JpdGhtJiByc2FBbGdvcml0aG0gPSBkb3duY2FzdDxSc2FIYXNo
ZWRLZXlBbGdvcml0aG0+KGFsZ29yaXRobS5nZXQoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJu
YW1lIiwgcnNhQWxnb3JpdGhtLm5hbWUpOworICAgICAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xl
bmd0aCIsIHJzYUFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKTsKKyAgICAgICAgYnVpbGRlci5hZGQo
InB1YmxpY0V4cG9uZW50IiwgcnNhQWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KTsKKyAgICAgICAg
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyIHJzYUhhc2goJnN0YXRlKTsKKyAgICAgICAgcnNhSGFz
aC5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0uaGFzaC5uYW1lKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoImhhc2giLCByc2FIYXNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5
QWxnb3JpdGhtQ2xhc3M6OlJTQTogeworICAgICAgICBSc2FLZXlBbGdvcml0aG0mIHJzYUFsZ29y
aXRobSA9IGRvd25jYXN0PFJzYUtleUFsZ29yaXRobT4oYWxnb3JpdGhtLmdldCgpKTsKKyAgICAg
ICAgYnVpbGRlci5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0ubmFtZSk7CisgICAgICAgIGJ1aWxk
ZXIuYWRkKCJtb2R1bHVzTGVuZ3RoIiwgcnNhQWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpOworICAg
ICAgICBidWlsZGVyLmFkZCgicHVibGljRXhwb25lbnQiLCByc2FBbGdvcml0aG0ucHVibGljRXhw
b25lbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIGJ1aWxk
ZXIucmVzdWx0KCk7CiB9CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4YjIyNzdlNzY4YTUyODgwMzkyOTg4MThiODAxOGRmZDJlZGE1NzZj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCIKLQotI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjo6Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyKCkKLXsKLX0KLQotQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOjp+Q3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmUxNGJiMGM0OWE0NDYwNzkzMTEyM2Fj
ODVhNGM0ZTM3ZWY4NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVp
bGRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKLSNkZWZpbmUgQ3J5cHRvQWxn
b3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0j
aWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIpOwotcHVibGljOgotICAgIENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcigpOwotICAgIHZpcnR1YWwgfkNyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlcigpOwotCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyPiBjcmVhdGVFbXB0eUNsb25lKCkg
Y29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotI2VuZGlmIC8vIENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9L
ZXkuY3BwCmluZGV4IGQ4MjdmN2NjZTI0ODAyZWIxYzU5ZmFkYmRjY2QxYWJhZThlYzc1ODEuLjYw
MDc1MDY2NzFkNThmMjEyNDZhZmQyNWU2YjliN2U0MTg1MTg1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9DcnlwdG9LZXkuY3BwCkBAIC0yOCwxNSArMjgsMTMgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgi
CiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlIDx3dGYvQ3J5
cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9LZXk6OkNyeXB0b0tleShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgVHlwZSB0eXBlLCBib29sIGV4dHJhY3Rh
YmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZXMpCi0gICAgOiBtX2FsZ29yaXRobShhbGdvcml0aG0p
CitDcnlwdG9LZXk6OkNyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRo
bUlkZW50aWZpZXIsIFR5cGUgdHlwZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2Ug
dXNhZ2VzKQorICAgIDogbV9hbGdvcml0aG1JZGVudGlmaWVyKGFsZ29yaXRobUlkZW50aWZpZXIp
CiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fZXh0cmFjdGFibGUoZXh0cmFjdGFibGUpCiAg
ICAgLCBtX3VzYWdlcyh1c2FnZXMpCkBAIC00NywxMiArNDUsNiBAQCBDcnlwdG9LZXk6On5Dcnlw
dG9LZXkoKQogewogfQogCi12b2lkIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlv
bihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Ci17Ci0g
ICAgYnVpbGRlci5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9u
KCkubmFtZUZvcklkZW50aWZpZXIobV9hbGdvcml0aG0pKTsKLSAgICAvLyBTdWJjbGFzc2VzIHdp
bGwgYWRkIG90aGVyIGtleXMuCi19Ci0KIGF1dG8gQ3J5cHRvS2V5Ojp1c2FnZXMoKSBjb25zdCAt
PiBWZWN0b3I8VXNhZ2U+CiB7CiAgICAgLy8gVGhlIHJlc3VsdCBpcyBvcmRlcmVkIGFscGhhYmV0
aWNhbGx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCmluZGV4IGViNmI3MDE2ZDc1MWE5NzIx
YTA5YWI1YTBkMzMzMjhiMmRmMWRkZGUuLjk3YjFiODcyZWU3YWFiZTViYzVlYTI3OGVmMGYwNzYx
ZjYzYzUyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTEgKzQzLDM3IEBAIGNsYXNzIENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjsKIGNsYXNzIENyeXB0b0tleURhdGE7CiAKIGVu
dW0gY2xhc3MgQ3J5cHRvS2V5Q2xhc3MgewotICAgIEhNQUMsCiAgICAgQUVTLAorICAgIEhNQUMs
CiAgICAgUlNBCiB9OwogCitlbnVtIGNsYXNzIEtleUFsZ29yaXRobUNsYXNzIHsKKyAgICBBRVMs
CisgICAgSE1BQywKKyAgICBSU0EsCisgICAgSFJTQQorfTsKKworc3RydWN0IEtleUhhc2hBbGdv
cml0aG0geworICAgIFN0cmluZyBuYW1lOworfTsKKworY2xhc3MgS2V5QWxnb3JpdGhtIDogcHVi
bGljIFJlZkNvdW50ZWQ8S2V5QWxnb3JpdGhtPiB7CitwdWJsaWM6CisgICAgU3RyaW5nIG5hbWU7
CisKKyAgICBLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuKQorICAgICAgICA6IG5hbWUobikK
KyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfktleUFsZ29yaXRobSgpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25z
dCA9IDA7Cit9OworCiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxDcnlwdG9L
ZXk+IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRvS2V5VHlwZTsKQEAgLTU3LDcg
Kzg0LDcgQEAgcHVibGljOgogCiAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAgICAgYm9vbCBleHRy
YWN0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0cmFjdGFibGU7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXImKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlZjxLZXlBbGdvcml0aG0+IGFsZ29yaXRobSgp
IGNvbnN0ID0gMDsKIAogICAgIC8vIEZJWE1FOiBDb25mdXNpbmcgdG8gaGF2ZSBDcnlwdG9LZXlV
c2FnZSBhbmQgQ3J5cHRvS2V5OjpVc2FnZSBuYW1lZCBhbG1vc3QgdGhlIHNhbWUsIGJ1dCBiZSBz
bGlnaHRseSBkaWZmZXJlbnQuCiAgICAgLy8gQ3J5cHRvS2V5VXNhZ2UgdmFsdWVzIGFyZSBiaXQg
bWFza3Mgc28gdGhleSBjYW4gYmUgY29tYmluZWQgd2l0aCAib3IiLCB3aGlsZSB0aGlzIGlzIGEg
bm9ybWFsIGVudW0gdGhhdCBtdXN0CkBAIC02NSw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICBlbnVt
IGNsYXNzIFVzYWdlIHsgRW5jcnlwdCwgRGVjcnlwdCwgU2lnbiwgVmVyaWZ5LCBEZXJpdmVLZXks
IERlcml2ZUJpdHMsIFdyYXBLZXksIFVud3JhcEtleSB9OwogICAgIFZlY3RvcjxVc2FnZT4gdXNh
Z2VzKCkgY29uc3Q7CiAKLSAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2FsZ29yaXRobTsgfQorICAgIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxn
b3JpdGhtSWRlbnRpZmllcjsgfQogICAgIENyeXB0b0tleVVzYWdlIHVzYWdlc0JpdG1hcCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNhZ2VzOyB9CiAgICAgYm9vbCBhbGxvd3MoQ3J5cHRvS2V5VXNhZ2Ug
dXNhZ2UpIGNvbnN0IHsgcmV0dXJuIHVzYWdlID09IChtX3VzYWdlcyAmIHVzYWdlKTsgfQogCkBA
IC03Myw4ICsxMDAsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBy
YW5kb21EYXRhKHNpemVfdCk7CiAKK3Byb3RlY3RlZDoKKyAgICBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsKKwogcHJpdmF0ZToKLSAgICBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIG1fYWxnb3JpdGhtOwogICAgIFR5cGUgbV90eXBlOwogICAgIGJvb2wg
bV9leHRyYWN0YWJsZTsKICAgICBDcnlwdG9LZXlVc2FnZSBtX3VzYWdlczsKQEAgLTkyLDUgKzEy
MSwxMCBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvQ2xhc3NOYW1l
KSBcCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNyeXB0b0tleSYga2V5
KSB7IHJldHVybiBrZXkua2V5Q2xhc3MoKSA9PSBXZWJDb3JlOjpLZXlDbGFzczsgfSBcCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19LRVlfQUxHT1JJVEhNKFRvQ2xhc3NOYW1lLCBLZXlBbGdvcml0aG1DbGFzcykgXAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpLZXlBbGdvcml0aG0mIGFsZ29yaXRobSkgeyBy
ZXR1cm4gYWxnb3JpdGhtLmtleUFsZ29yaXRobUNsYXNzKCkgPT0gV2ViQ29yZTo6S2V5QWxnb3Jp
dGhtQ2xhc3M7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYgLy8g
RU5BQkxFKFNVQlRMRV9DUllQVE8pCiAjZW5kaWYgLy8gQ3J5cHRvS2V5X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaWRsIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5pZGwKaW5kZXggYzRmMWMzYzUzMWIzZTE3ODgyYmMxMjczMDQ3MzFhNjRl
MjQ5NmM4Yi4uMzY1MDM1NWUxNzJkMTYyNDgwMzk0MDMyNTY1MWM0Mzk2OGQxMjI5OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwKQEAgLTQ3LDYgKzQ3LDYgQEAgZW51bSBLZXlVc2Fn
ZSB7CiBdIGludGVyZmFjZSBDcnlwdG9LZXkgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBLZXlU
eXBlIHR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gZXh0cmFjdGFibGU7Ci0g
ICAgW0N1c3RvbV0gcmVhZG9ubHkgYXR0cmlidXRlIEFsZ29yaXRobSBhbGdvcml0aG07CisgICAg
W0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIG9iamVjdCBhbGdvcml0aG07CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIHNlcXVlbmNlPEtleVVzYWdlPiB1c2FnZXM7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3BwCmlu
ZGV4IGQ3MDQ1YTViNjg0N2JhNzcwNmM2MWYzY2YwZjE3NzYxOWQwNmIzOWMuLmM5YmQyMjFjYjk3
NWFjNWNkOTExN2M5ODcwZTM5MGQ2YTE5NjkzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nbnV0bHMvQ3J5cHRvS2V5UlNBR251VExTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ251dGxzL0NyeXB0b0tleVJTQUdudVRMUy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
aCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNy
eXB0b0tleVBhaXIuaCIKQEAgLTgxLDEwICs4MCwxMSBAQCBzaXplX3QgQ3J5cHRvS2V5UlNBOjpr
ZXlTaXplSW5CaXRzKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBDcnlwdG9LZXlS
U0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5UlNBOjph
bGdvcml0aG0oKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGJ1aWxkZXIpOworICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNFeHBvbmVudDsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBSc2FLZXlBbGdvcml0aG0oZW1wdHlTdHJpbmcoKSwgMCwgV1RG
TW92ZShwdWJsaWNFeHBvbmVudCkpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURh
dGE+IENyeXB0b0tleVJTQTo6ZXhwb3J0RGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAppbmRleCA0NGI1MDA3YjkxMjc2NjdlZjJkNzU1ODk0
ODliN2I5MWM2ZjU0YjVhLi5kMzI5NWM4OTZjZjY2MDA0YTU1OTYwNDZjMGJhMTBhNDlhNTcxODI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAKQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjMsMTAgKzYyLDkgQEAgUmVmUHRy
PENyeXB0b0tleUFFUz4gQ3J5cHRvS2V5QUVTOjpnZW5lcmF0ZShDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGFsZ29yaXRobSwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleUFFUyhh
bGdvcml0aG0sIHJhbmRvbURhdGEobGVuZ3RoQml0cyAvIDgpLCBleHRyYWN0YWJsZSwgdXNhZ2Vz
KSk7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxLZXlB
bGdvcml0aG0+IENyeXB0b0tleUFFUzo6YWxnb3JpdGhtKCkgY29uc3QKIHsKLSAgICBDcnlwdG9L
ZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7Ci0gICAgYnVpbGRlci5hZGQo
Imxlbmd0aCIsIG1fa2V5LnNpemUoKSAqIDgpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFl
c0tleUFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZv
cklkZW50aWZpZXIobV9hbGdvcml0aG1JZGVudGlmaWVyKSwgbV9rZXkuc2l6ZSgpICogOCkpOwog
fQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gQ3J5cHRvS2V5QUVTOjpleHBvcnRE
YXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUFFUy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKaW5k
ZXggNDVhNWJiODIzNjRlZWIxMWZkYzUzMDUxYjFkZjM1ZmEzNTMyYWZmNy4uY2RhZWQ4M2U4YzA5
MjAxMTBhOTQyNTRjYjJmNDg4ZjI1ZTAxNGVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmgKQEAgLTM0LDYgKzM0LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQWVzS2V5QWxnb3JpdGhtIDogcHVibGljIEtleUFsZ29yaXRobSB7CitwdWJs
aWM6CisgICAgc2l6ZV90IGxlbmd0aDsKKworICAgIEFlc0tleUFsZ29yaXRobShjb25zdCBTdHJp
bmcmIG4sIHNpemVfdCBsKQorICAgICAgICA6IEtleUFsZ29yaXRobShuKQorICAgICAgICAsIGxl
bmd0aChsKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QWVzS2V5QWxnb3JpdGhtKCkKKyAg
ICB7CisgICAgfQorCisgICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6QUVTOyB9Cit9OworCiBj
bGFzcyBDcnlwdG9LZXlBRVMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPENyeXB0b0tleUFFUz4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCkBAIC01Myw3ICs2OSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgQ3J5cHRvS2V5QUVTKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYga2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSk7CiAK
LSAgICB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3Jp
cHRpb25CdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEtleUFsZ29yaXRobT4gYWxn
b3JpdGhtKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURh
dGE+IGV4cG9ydERhdGEoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBt
X2tleTsKQEAgLTYzLDYgKzc5LDggQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19DUllQVE9fS0VZKENyeXB0b0tleUFFUywgQ3J5cHRvS2V5Q2xhc3M6OkFFUykKIAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKEFlc0tleUFsZ29yaXRobSwgS2V5QWxnb3Jp
dGhtQ2xhc3M6OkFFUykKKwogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjZW5k
aWYgLy8gQ3J5cHRvS2V5QUVTX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUhNQUMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5SE1BQy5jcHAKaW5kZXggYWY2MDRmNGY3N2NlNDJkM2EyZGM0ZjA2MmQyNTQ5NTU0MjI0YjBj
MC4uODZhNDA5YmJhM2M0OTk4ZWFmMmM2Y2IyNzA2NDdjNjJlYWNiMDExYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
aCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjcsMTUgKzY2LDEzIEBAIFJlZlB0cjxDcnlwdG9LZXlI
TUFDPiBDcnlwdG9LZXlITUFDOjpnZW5lcmF0ZShzaXplX3QgbGVuZ3RoQnl0ZXMsIENyeXB0b0Fs
Z29yaXRoCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlITUFDKHJhbmRvbURhdGEo
bGVuZ3RoQnl0ZXMpLCBoYXNoLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7CiB9CiAKLXZvaWQgQ3J5
cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8S2V5QWxnb3JpdGhtPiBDcnlwdG9L
ZXlITUFDOjphbGdvcml0aG0oKSBjb25zdAogewotICAgIENyeXB0b0tleTo6YnVpbGRBbGdvcml0
aG1EZXNjcmlwdGlvbihidWlsZGVyKTsKKyAgICBLZXlIYXNoQWxnb3JpdGhtIGhhc2hBbGdvcml0
aG07CisgICAgaGFzaEFsZ29yaXRobS5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNp
bmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCk7CiAKLSAgICBhdXRvIGhhc2hEZXNj
cmlwdGlvbkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsKLSAgICBoYXNoRGVz
Y3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2lu
Z2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7Ci0gICAgYnVpbGRlci5hZGQoImhh
c2giLCAqaGFzaERlc2NyaXB0aW9uQnVpbGRlcik7Ci0KLSAgICBidWlsZGVyLmFkZCgibGVuZ3Ro
IiwgbV9rZXkuc2l6ZSgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIbWFjS2V5QWxnb3Jp
dGhtKENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmll
cihtX2FsZ29yaXRobUlkZW50aWZpZXIpLAorICAgICAgICBXVEZNb3ZlKGhhc2hBbGdvcml0aG0p
LCBtX2tleS5zaXplKCkpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IENy
eXB0b0tleUhNQUM6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5SE1BQy5oCmluZGV4IDQ2OGFkMDc3ZjE5NjFhZDhkYWQ3YjRiNDM5OThlYjE3
MmNkMjMzMDcuLmQ5YmI1ZjE4N2Q4NTJkNjg5ZTBjMDdjMzk5NzQ0NmU2ZGFhNGY2OWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKQEAgLTMzLDYgKzMzLDI0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSG1hY0tleUFsZ29yaXRobSA6IHB1
YmxpYyBLZXlBbGdvcml0aG0geworcHVibGljOgorICAgIEtleUhhc2hBbGdvcml0aG0gaGFzaDsK
KyAgICBzaXplX3QgbGVuZ3RoOworCisgICAgSG1hY0tleUFsZ29yaXRobShjb25zdCBTdHJpbmcm
IG4sIEtleUhhc2hBbGdvcml0aG0mJiBoLCBzaXplX3QgbCkKKyAgICAgICAgOiBLZXlBbGdvcml0
aG0obikKKyAgICAgICAgLCBoYXNoKFdURk1vdmUoaCkpCisgICAgICAgICwgbGVuZ3RoKGwpCisg
ICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5IbWFjS2V5QWxnb3JpdGhtKCkKKyAgICB7CisgICAg
fQorCisgICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6SE1BQzsgfQorfTsKKwogY2xhc3MgQ3J5
cHRvS2V5SE1BQyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9LZXkgewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8Q3J5cHRvS2V5SE1BQz4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlIHVzYWdlKQpAQCAtNTMsNyArNzEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENy
eXB0b0tleUhNQUMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIgaGFzaCwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwogCi0gICAg
dm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9u
QnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxLZXlBbGdvcml0aG0+IGFsZ29yaXRo
bSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBl
eHBvcnREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIG1faGFzaDsKQEAgLTY0LDUgKzgyLDcgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUhNQUMsIENyeXB0b0tleUNsYXNzOjpITUFDKQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oSG1hY0tleUFsZ29yaXRobSwg
S2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUMpCisKICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBU
TykKICNlbmRpZiAvLyBDcnlwdG9LZXlITUFDX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5UlNBLmgKaW5kZXggNmVhMjAwYjhjMTcxZTgzMjAzNGY0NmVmNDNkYzk2NWYwYzVk
OWVlMC4uZTM5NGNlMzYyMDYxYmQ5ZDQwZDk1YWNiNTg3MjRiMGRjYjkzMTk4OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKQEAgLTQ3LDYgKzQ3LDQxIEBAIGNs
YXNzIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOwogY2xhc3MgQ3J5cHRvS2V5UGFpcjsKIGNs
YXNzIFByb21pc2VXcmFwcGVyOwogCitjbGFzcyBSc2FLZXlBbGdvcml0aG0gOiBwdWJsaWMgS2V5
QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBzaXplX3QgbW9kdWx1c0xlbmd0aDsKKyAgICBWZWN0
b3I8dWludDhfdD4gcHVibGljRXhwb25lbnQ7CisKKyAgICBSc2FLZXlBbGdvcml0aG0oY29uc3Qg
U3RyaW5nJiBuLCBzaXplX3QgbSwgVmVjdG9yPHVpbnQ4X3Q+JiYgcCkKKyAgICAgICAgOiBLZXlB
bGdvcml0aG0obikKKyAgICAgICAgLCBtb2R1bHVzTGVuZ3RoKG0pCisgICAgICAgICwgcHVibGlj
RXhwb25lbnQoV1RGTW92ZShwKSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflJzYUtleUFs
Z29yaXRobSgpCisgICAgeworICAgIH0KKworICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29y
aXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OlJT
QTsgfQorfTsKKworY2xhc3MgUnNhSGFzaGVkS2V5QWxnb3JpdGhtIDogcHVibGljIFJzYUtleUFs
Z29yaXRobSB7CitwdWJsaWM6CisgICAgS2V5SGFzaEFsZ29yaXRobSBoYXNoOworCisgICAgUnNh
SGFzaGVkS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbiwgc2l6ZV90IG0sIFZlY3Rvcjx1aW50
OF90PiYmIHAsIEtleUhhc2hBbGdvcml0aG0mJiBoKQorICAgICAgICA6IFJzYUtleUFsZ29yaXRo
bShuLCBtLCBXVEZNb3ZlKHApKQorICAgICAgICAsIGhhc2goV1RGTW92ZShoKSkKKyAgICB7Cisg
ICAgfQorICAgIHZpcnR1YWwgflJzYUhhc2hlZEtleUFsZ29yaXRobSgpCisgICAgeworICAgIH0K
KworCisgICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6SFJTQTsgfQorfTsKKwogY2xhc3MgQ3J5
cHRvS2V5UlNBIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxDcnlwdG9LZXlSU0E+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50
aWZpZXIsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBoYXNIYXNoLCBDcnlw
dG9LZXlUeXBlIHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBsYXRmb3JtS2V5LCBib29sIGV4dHJhY3Rh
YmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKQEAgLTcxLDcgKzEwNiw3IEBAIHByaXZhdGU6CiAK
ICAgICBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENy
eXB0b0tleUNsYXNzOjpSU0E7IH0KIAotICAgIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlv
bihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWY8S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0oKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgUGxhdGZvcm1SU0FLZXkgbV9wbGF0Zm9ybUtleTsKQEAgLTg0LDUgKzExOSw5IEBAIHBy
aXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlSU0Es
IENyeXB0b0tleUNsYXNzOjpSU0EpCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09S
SVRITShSc2FLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpSU0EpCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShSc2FIYXNoZWRLZXlBbGdvcml0aG0sIEtleUFs
Z29yaXRobUNsYXNzOjpIUlNBKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAj
ZW5kaWYgLy8gQ3J5cHRvS2V5UlNBX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvS2V5UlNBTWFjLmNwcAppbmRleCAxNDBjOWIzMTg4ZjliOGE0YWY2NDlkZjQ4NzRmN2QwOTA5
ZDBhMWEyLi5mZGE2YjEzOGM3ZGE3OTU5MDAzYTVlOTUzMjM5MmMzN2IzZTk5YThkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCkBAIC0yOSw3ICsy
OSw2IEBACiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJDb21tb25Dcnlw
dG9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNy
eXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5UGFpci5oIgpA
QCAtMTYwLDI2ICsxNTksMjYgQEAgc2l6ZV90IENyeXB0b0tleVJTQTo6a2V5U2l6ZUluQml0cygp
IGNvbnN0CiAgICAgcmV0dXJuIG1vZHVsdXMuc2l6ZSgpICogODsKIH0KIAotdm9pZCBDcnlwdG9L
ZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRp
b25CdWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5UlNB
OjphbGdvcml0aG0oKSBjb25zdAogewotICAgIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNj
cmlwdGlvbihidWlsZGVyKTsKLQorICAgIFN0cmluZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1fYWxnb3JpdGhtSWRlbnRpZmll
cik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZHVsdXM7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1
YmxpY0V4cG9uZW50OwogICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBnZXRQdWJsaWNLZXlD
b21wb25lbnRzKG1fcGxhdGZvcm1LZXksIG1vZHVsdXMsIHB1YmxpY0V4cG9uZW50KTsKICAgICBp
ZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGRuJ3QgZ2V0IFJTQSBrZXkg
Y29tcG9uZW50cywgc3RhdHVzICVkIiwgc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBwdWJsaWNFeHBvbmVudC5jbGVhcigpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBS
c2FLZXlBbGdvcml0aG0obmFtZSwgMCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpKTsKICAgICB9
CiAKLSAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xlbmd0aCIsIG1vZHVsdXMuc2l6ZSgpICogOCk7
Ci0gICAgYnVpbGRlci5hZGQoInB1YmxpY0V4cG9uZW50IiwgcHVibGljRXhwb25lbnQpOwotCisg
ICAgc2l6ZV90IG1vZHVsdXNMZW5ndGggPSBtb2R1bHVzLnNpemUoKSAqIDg7CiAgICAgaWYgKG1f
cmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKSB7Ci0gICAgICAgIGF1dG8gaGFzaERlc2NyaXB0aW9u
QnVpbGRlciA9IGJ1aWxkZXIuY3JlYXRlRW1wdHlDbG9uZSgpOwotICAgICAgICBoYXNoRGVzY3Jp
cHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xl
dG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7Ci0gICAgICAgIGJ1aWxkZXIuYWRkKCJo
YXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIpOworICAgICAgICBLZXlIYXNoQWxnb3JpdGht
IGhhc2hBbGdvcml0aG07CisgICAgICAgIGhhc2hBbGdvcml0aG0ubmFtZSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2hhc2gpOworCisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJzYUhhc2hlZEtleUFsZ29yaXRobShuYW1lLCBt
b2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSwgV1RGTW92ZShoYXNoQWxnb3Jp
dGhtKSkpOwogICAgIH0KKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSc2FLZXlBbGdvcml0aG0o
bmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpKTsKIH0KIAogc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IENyeXB0b0tleVJTQTo6ZXhwb3J0RGF0YSgpIGNv
bnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggYmFmOTEyZjRkNGMzMGU1Y2EyNWUxY2UxY2Y1NTdhYWQ3ZjI3ZWNmNy4uYmE4
NTZjMWFhNGEyNDM5Njg2NTMzMmUwMjU2YjgzNDgyNGM3MDNkOSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE2LTA5LTEyICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgV2ViQ3J5cHRvIGFsZ29yaXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29y
aXRobSBpbnRlcmZhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyODc0OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjczNTk0Mzg+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICAqIGNyeXB0by9zdWJ0bGUv
aG1hYy1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUv
aG1hYy1nZW5lcmF0ZS1rZXkuaHRtbDoKKwogMjAxNi0wOS0xMiAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIHdpbmRvdy5wZXJmb3JtYW5jZSBvYmplY3QgcmVzZXRz
IHNjcmlwdC1hcHBsaWVkIHByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3J5
cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKaW5kZXggNWJkMzFiZDBh
N2E3MjE2ZjZkNDBiMWY2ZjU1ODkwZTBhZDEzYWNlNC4uNTM5MjFlNDI3MDNmZTE0YjJlZWVlNjIx
YWExMjEzMDNiNjAyOGNiYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9o
bWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9obWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKQEAgLTEzLDYgKzEzLDcgQEAgUEFT
UyBrZXkudHlwZSBpcyAnc2VjcmV0JwogUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFT
UyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ0hNQUMnCiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3Ro
IGlzIDY0CitQQVNTIGtleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdTSEEtMScKIFBBU1Mga2V5
LnVzYWdlcyBpcyBbInNpZ24iLCAidmVyaWZ5Il0KIAogR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1
c3RvbSBsZW5ndGguLi4KQEAgLTIwLDYgKzIxLDcgQEAgUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0
JwogUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUg
aXMgJ0hNQUMnCiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDUKK1BBU1Mga2V5LmFsZ29y
aXRobS5oYXNoLm5hbWUgaXMgJ1NIQS0xJwogUEFTUyBrZXkudXNhZ2VzIGlzIFsic2lnbiJdCiBQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbCBiL0xheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbAppbmRleCAzYWZjNTY4NWMxNzhhMTIzN2E2
YTkzNjAwYzRmMDlhM2E5MTg4ODliLi4yYjliZjNhMTdhNzE4YWFmMDY3NGI5NzhkZTAwNDAwYzVm
ODdkMmQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJh
dGUta2V5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRl
LWtleS5odG1sCkBAIC0yOCw2ICsyOCw3IEBAIGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoe25h
bWU6ICJobWFjIiwgaGFzaDogInNoYS0xIn0sIGV4dHJhY3RhYmxlLCBbInNpZ24iLCAiCiAgICAg
c2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7CiAgICAgc2hvdWxkQmUoImtleS5h
bGdvcml0aG0ubmFtZSIsICInSE1BQyciKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5s
ZW5ndGgiLCAiNjQiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5oYXNoLm5hbWUiLCAi
J1NIQS0xJyIpOwogICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgJ1sic2lnbiIsICJ2ZXJpZnki
XScpOwogCiAgICAgZGVidWcoIlxuR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBsZW5ndGgu
Li4iKTsKQEAgLTM5LDYgKzQwLDcgQEAgY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTog
ImhtYWMiLCBoYXNoOiAic2hhLTEifSwgZXh0cmFjdGFibGUsIFsic2lnbiIsICIKICAgICBzaG91
bGRCZSgia2V5LmV4dHJhY3RhYmxlIiwgInRydWUiKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29y
aXRobS5uYW1lIiwgIidITUFDJyIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0
aCIsICI1Iik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidTSEEt
MSciKTsKICAgICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICdbInNpZ24iXScpOwogICAgIGZpbmlz
aEpTVGVzdCgpOwogfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288747</attachid>
            <date>2016-09-13 16:56:11 -0700</date>
            <delta_ts>2016-09-13 23:37:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128748-20160913165336.patch</filename>
            <type>text/plain</type>
            <size>40477</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZkYThkNTYxY2U2OTEz
OWUyZWE3MWNhZWJhMGIwM2MyOGYyYTcyZS4uOWRmM2I1ZjZmNzJkOTVkM2M4MGRhODllNDc2OWM0
MTQ3NjYyZGYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDE2LTA5LTEyICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg3NDgKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzI3MzU5NDM4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50
IEZ1bGdoYW0uCisKKyAgICAgICAgUmVwbGFjZSBjdXN0b20gQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci9idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uIHdpdGggS2V5QWxnb3JpdGhtIGludGVyZmFjZSB3
aGljaCBpcworICAgICAgICBkZWZpbmVkIGJ5IHRoZSBzcGVjOiBodHRwczovL3d3dy53My5vcmcv
VFIvV2ViQ3J5cHRvQVBJLyNrZXktYWxnb3JpdGhtLWRpY3Rpb25hcnkuIE1vcmVvdmVyLCBtYXJr
CisgICAgICAgIENyeXB0b0tleS51c2FnZXMgYXMgQ2FjaGVkQXR0cmlidXRlLgorCisgICAgICAg
IE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogUGxh
dGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICog
UGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgIFJlbW92ZSBDcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXIuY3BwLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjpjcmVhdGVFbXB0eUNsb25l
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxk
ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleTo6YWxnb3JpdGhtKToKKyAgICAgICAgR2V0IHJpZCBv
ZiBkZXBlbmRlbmN5IG9uIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci4KKyAgICAg
ICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmg6
IFJlbW92ZWQuCisgICAgICAgIFJlcGxhY2UgaXQgd2l0aCBLZXlBbGdvcml0aG0uCisgICAgICAg
ICogY3J5cHRvL0NyeXB0b0tleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXk6OkNy
eXB0b0tleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVz
Y3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXkuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OktleUFsZ29yaXRobTo6S2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNv
cmU6OktleUFsZ29yaXRobTo6fktleUFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXk6OmFsZ29yaXRobUlkZW50aWZpZXIpOgorICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXku
aWRsOgorICAgICAgICBBZGQgS2V5QWxnb3JpdGhtIGludGVyZmFjZSB3aGljaCBpcyByZXR1cm5l
ZCB2aWEgQ3J5cHRvS2V5LmFsZ29yaXRobSgpIG1ldGhvZCwKKyAgICAgICAgYW5kIHJlbmFtZSBt
X2FsZ29yaXRobSB0byBtX2FsZ29yaXRobUlkZW50aWZpZXIgdG8gZGlzdGluZ3VzaCBpdCB3aXRo
IG5ld2x5CisgICAgICAgIGFkZGVkIEtleUFsZ29yaXRobSBpbnRlcmZhY2UuCisgICAgICAgICog
Y3J5cHRvL2dudXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0
aG1EZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5
QUVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6YWxnb3JpdGhtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6
IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmg6CisgICAgICAg
IChXZWJDb3JlOjpBZXNLZXlBbGdvcml0aG06OkFlc0tleUFsZ29yaXRobSk6CisgICAgICAgIChX
ZWJDb3JlOjpBZXNLZXlBbGdvcml0aG06On5BZXNLZXlBbGdvcml0aG0pOgorICAgICAgICAqIGNy
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5
SE1BQzo6YWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxk
QWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0Ny
eXB0b0tleUhNQUMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhtYWNLZXlBbGdvcml0aG06OkhtYWNL
ZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6SG1hY0tleUFsZ29yaXRobTo6fkhtYWNL
ZXlBbGdvcml0aG0pOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UnNhS2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOgorICAgICAg
ICAoV2ViQ29yZTo6UnNhS2V5QWxnb3JpdGhtOjp+UnNhS2V5QWxnb3JpdGhtKToKKyAgICAgICAg
KFdlYkNvcmU6OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtKToK
KyAgICAgICAgKFdlYkNvcmU6OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6flJzYUhhc2hlZEtleUFs
Z29yaXRobSk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjphbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKTogRGVsZXRlZC4KKwog
MjAxNi0wOS0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBwb3N0LWxhbmRpbmcgcmV2aWV3IGNvbW1lbnRzIGFmdGVyIHIyMDU3ODcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1FZmwuY21ha2UKaW5kZXggYzUxZDFjMjcwMmY3MGE1YzY5ZDYzN2M4MDZjZWY4YzU3NWE2NmE5
ZC4uNmY2ODdlOGVjZDczZGE4OGI0OWQ4Nzk3NThjYWJkNTU2N2YwMzcyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTQwMyw3ICs0MDMsNiBAQCBlbmRpZiAoKQogaWYgKEVOQUJMRV9T
VUJUTEVfQ1JZUFRPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBj
cnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmNwcAotICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnkuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9LZXkuY3BwCiAgICAgICAgIGNyeXB0by9D
cnlwdG9LZXlQYWlyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBiNzkyM2YzOTIz
YjMwODFkMmUzYzhkYzEzYjIxZTA1MGI5ZWZmYzExLi43YjdiZTJmOTE0MjQ5NzM4MGFjNmQ5NzEx
YmUyOGUyNzY4ZTE1ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMzk2LDcgKzM5
Niw2IEBAIGVuZGlmICgpCiBpZiAoRU5BQkxFX1NVQlRMRV9DUllQVE8pCiAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG0uY3BwCi0g
ICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwCiAgICAg
ICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKICAgICAgICAgY3J5cHRvL0Ny
eXB0b0tleS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleVBhaXIuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCmluZGV4IDRhOGY4NjIwZGIwMjBiYzMyZGUzMzM3ZjEwMjE3ODhjOTVlZDM3
YmUuLjM0YjhkYjI3MGJmNjk0YjJlMDdkMTg0OTFhYTg3NDY3NDM1NjdmYzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCkBAIC0xNzYsNyArMTc2LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAKICAgICBjcnlwdG8vQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNwcAogICAgIGNyeXB0
by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0
aW9uQnVpbGRlci5jcHAKICAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwCiAg
ICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKICAgICBjcnlwdG8vQ3J5cHRvS2V5UGFpci5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBhYzA5MWFiYzQ4MTFkZDRhNDI2OTZjMWRlYzZjMWU1NjQzZDJmYjA5Li5mYjEwZDUwZTEwYzMy
MGI5YjlhZDZjMmIwOTA2MjEzMmI0ZDJlZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01OTcyLDggKzU5NzIsNiBAQAogCQlF
MTU3QThFNDE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEUyMTgxNzNBM0EwMDlGODIxRCAv
KiBDcnlwdG9LZXkuY3BwICovOyB9OwogCQlFMTU3QThFNTE4MTczQTNBMDA5RjgyMUQgLyogQ3J5
cHRvS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTU3QThFMzE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggKi87IH07CiAJCUUxNTdBOEU4
MTgxODRDNjcwMDlGODIxRCAvKiBKU0NyeXB0b0tleUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFNjE4MTg0QzY3MDA5RjgyMUQg
LyogSlNDcnlwdG9LZXlDdXN0b20uY3BwICovOyB9OwotCQlFMTU3QThFQzE4MTg1MUFDMDA5Rjgy
MUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVBMTgxODUxQUMwMDlGODIx
RCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwICovOyB9OwotCQlFMTU3
QThFRDE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThF
QjE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgg
Ki87IH07CiAJCUUxNTdBOEYwMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE1N0E4RUUxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAg
Ki87IH07CiAJCUUxNTdBOEYxMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCAqLzsg
fTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2MTEwNDU3MjAwMEI3
QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CkBAIC0xMzU0OSw4ICsxMzU0Nyw2IEBACiAJCUUx
NTdBOEUyMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTE1N0E4RTMxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9LZXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTE1N0E4RTYxODE4NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvS2V5Q3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE1N0E4RUExODE4NTFBQzAw
OUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTU3QThFQjE4MTg1MUFD
MDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU3QThFRTE4MTg1NDI1MDA5Rjgy
MUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDcnlw
dG9BbGdvcml0aG1CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNUEz
NkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIyMTg2LDggKzIyMTgyLDYgQEAKIAkJCQlFMUZFMTM3MzE4NDAyQTY3MDA4OTJGMTMgLyogQ29t
bW9uQ3J5cHRvVXRpbGl0aWVzLmggKi8sCiAJCQkJRTE3MkFGNkIxODBGMjRDNjAwRkJBREI5IC8q
IENyeXB0b0FsZ29yaXRobS5jcHAgKi8sCiAJCQkJRTE3MkFGNkMxODBGMjRDNjAwRkJBREI5IC8q
IENyeXB0b0FsZ29yaXRobS5oICovLAotCQkJCUUxNTdBOEVBMTgxODUxQUMwMDlGODIxRCAvKiBD
cnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwICovLAotCQkJCUUxNTdBOEVCMTgx
ODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLywK
IAkJCQlFMUM2NTcyNDE4MTZFNjlEMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ci5oICovLAogCQkJCUUxQzY1NzI2MTgxNkY5RkUwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzLmggKi8sCiAJCQkJRTFGRjhGNkExODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0Fs
Z29yaXRobVJlZ2lzdHJ5LmNwcCAqLywKQEAgLTI0MDgwLDcgKzI0MDc0LDYgQEAKIAkJCQlFMUZF
MTM3QjE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMTI1RjgzQTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQWVz
Q2JjUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlBQzNGNzE4MjRFNUQxMDAzNDk0MjYg
LyogQ3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zLmggaW4gSGVhZGVycyAqLywKLQkJCQlF
MTU3QThFRDE4MTg1MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTI1RjgzMjE4MjJGMTFCMDBEODRDRDkgLyogQ3J5
cHRvQWxnb3JpdGhtSE1BQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5REEyOUMxODE4OUFERDAw
MDg4QkM4IC8qIENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxQzY1NzFGMTgxNkU1MDMwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1z
LmggaW4gSGVhZGVycyAqLywKQEAgLTI3NzkyLDcgKzI3Nzg1LDYgQEAKIAkJCQlFMTI1Rjg0NTE4
MjQyNUM5MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMUZFMTM3QTE4NEQyMUJCMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtQUVT
X0tXLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkUxMzdFMTg0RDI3MDIwMDg5MkYxMyAvKiBD
cnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE1N0E4RUMx
ODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzMTE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxn
b3JpdGhtSE1BQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzODE4MjJGMUVCMDBEODRD
RDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUZG
OEY2QzE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlw
dG9BbGdvcml0aG1CdWlsZGVyLmNwcAppbmRleCBhOWYzNzI2NTcwZTI4OTRhYmE2MWU4NWNjMDlm
MDljMTQ4YjE4Zjk4Li5kOTljMjdhYmQ5NGM0YjYxMGYwZmQ4MzZlMjJiNmQ3NmQ5ODRhMzdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlci5jcHAKQEAgLTQ4LDExICs0OCw2IEBAIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
cjo6fkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcigpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
cjo6Y3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyPihtX2V4ZWMpOwotfQotCiB2b2lkIEpTQ3J5cHRv
QWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIqIGtleSwgdW5zaWduZWQgdmFsdWUpCiB7
CiAgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOwpAQCAtNzUsMTIgKzcwLDExIEBAIHZvaWQgSlND
cnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGJ1ZmZlCiAgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50aWZp
ZXIsIGFycmF5Vmlldy0+d3JhcChtX2V4ZWMsIHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgp
KSk7CiB9CiAKLXZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhciog
a2V5LCBjb25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIG5lc3RlZEJ1aWxk
ZXIpCit2b2lkIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0IGNoYXIqIGtleSwg
Y29uc3QgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyJiBuZXN0ZWRCdWlsZGVyKQogewogICAgIFZN
JiB2bSA9IG1fZXhlYy0+dm0oKTsKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5KTsKLSAgICBjb25zdCBKU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXImIGpzQnVpbGRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEpTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlciY+KG5lc3RlZEJ1aWxkZXIpOwotICAgIG1fZGljdGlvbmFyeS0+cHV0RGlyZWN0KHZtLCBp
ZGVudGlmaWVyLCBqc0J1aWxkZXIucmVzdWx0KCkpOworICAgIG1fZGljdGlvbmFyeS0+cHV0RGly
ZWN0KHZtLCBpZGVudGlmaWVyLCBuZXN0ZWRCdWlsZGVyLnJlc3VsdCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAppbmRleCBkNTM3YjRjNjc3MWI5N2ExMDc4MmE0NWZl
OTlkOGFhODViMDBlZWU5Li4yODczYmQxZjcyNTU2OWE3NWU1MWVjMzJmNDU5YTUyMDM5YzlhZTQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29y
aXRobUJ1aWxkZXIuaApAQCAtMjYsNyArMjYsMTAgQEAKICNpZm5kZWYgSlNDcnlwdG9BbGdvcml0
aG1CdWlsZGVyX2gKICNkZWZpbmUgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyX2gKIAotI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFNV
QlRMRV9DUllQVE8pCiAKQEAgLTM3LDE5ICs0MCwxOCBAQCBjbGFzcyBKU09iamVjdDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgZmluYWwg
OiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyIHsKK2NsYXNzIEpTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNDcnlwdG9B
bGdvcml0aG1CdWlsZGVyKTsKIHB1YmxpYzoKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIo
SlNDOjpFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIH5KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIo
KTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGlv
bmFyeTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9u
QnVpbGRlcj4gY3JlYXRlRW1wdHlDbG9uZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBh
ZGQoY29uc3QgY2hhciosIHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZChjb25zdCBj
aGFyKiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGQoY29uc3QgY2hhcios
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkKGNvbnN0IGNo
YXIqLCBjb25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBvdmVycmlkZTsK
KyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOworICAgIHZvaWQgYWRkKGNvbnN0
IGNoYXIqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+Jik7CisgICAgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IEpTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlciYpOwogCiBwcml2YXRlOgogICAgIEpTQzo6RXhlY1N0YXRlKiBt
X2V4ZWM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tl
eUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3Rv
bS5jcHAKaW5kZXggNTg1OTRiZWYyZGIyOWEyZjA5NzVlYzk5ZmZjYWY4NDA1MWRiOWQ1My4uZDUz
NDgxNTk4ODJmNjc1MzE3NzRjNzhmODYyNTA2ZmY0MWExODk5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcApAQCAtMjgsNiArMjgsOSBA
QAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMu
aCIKKyNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgi
CiAjaW5jbHVkZSAiSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCkBAIC0zNywxMSArNDAsNTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBKU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogeworICAgIGlmIChtX2FsZ29yaXRobSkKKyAgICAgICAgcmV0dXJuIG1f
YWxnb3JpdGhtLmdldCgpOworCiAgICAgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyIGJ1aWxkZXIo
JnN0YXRlKTsKLSAgICB3cmFwcGVkKCkuYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihidWlsZGVy
KTsKLSAgICByZXR1cm4gYnVpbGRlci5yZXN1bHQoKTsKLX0KIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxLZXlBbGdvcml0aG0+IGFsZ29yaXRobSA9IHdyYXBwZWQoKS5idWlsZEFsZ29yaXRobSgpOwor
ICAgIHN3aXRjaCAoYWxnb3JpdGhtLT5rZXlBbGdvcml0aG1DbGFzcygpKSB7CisgICAgY2FzZSBL
ZXlBbGdvcml0aG1DbGFzczo6QUVTOiB7CisgICAgICAgIGF1dG8mIGFlc0FsZ29yaXRobSA9IGRv
d25jYXN0PEFlc0tleUFsZ29yaXRobT4oKmFsZ29yaXRobSk7CisgICAgICAgIGJ1aWxkZXIuYWRk
KCJuYW1lIiwgYWVzQWxnb3JpdGhtLm5hbWUoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJsZW5n
dGgiLCBhZXNBbGdvcml0aG0ubGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SE1BQzogeworICAgICAgICBhdXRvJiBobWFjQWxnb3Jp
dGhtID0gZG93bmNhc3Q8SG1hY0tleUFsZ29yaXRobT4oKmFsZ29yaXRobSk7CisgICAgICAgIGJ1
aWxkZXIuYWRkKCJuYW1lIiwgaG1hY0FsZ29yaXRobS5uYW1lKCkpOworICAgICAgICBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXIgaG1hY0hhc2goJnN0YXRlKTsKKyAgICAgICAgaG1hY0hhc2guYWRk
KCJuYW1lIiwgaG1hY0FsZ29yaXRobS5oYXNoKCkpOworICAgICAgICBidWlsZGVyLmFkZCgiaGFz
aCIsIGhtYWNIYXNoKTsKKyAgICAgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGhtYWNBbGdvcml0
aG0ubGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBLZXlBbGdvcml0
aG1DbGFzczo6SFJTQTogeworICAgICAgICBhdXRvJiByc2FBbGdvcml0aG0gPSBkb3duY2FzdDxS
c2FIYXNoZWRLZXlBbGdvcml0aG0+KCphbGdvcml0aG0pOworICAgICAgICBidWlsZGVyLmFkZCgi
bmFtZSIsIHJzYUFsZ29yaXRobS5uYW1lKCkpOworICAgICAgICBidWlsZGVyLmFkZCgibW9kdWx1
c0xlbmd0aCIsIHJzYUFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKCkpOworICAgICAgICBidWlsZGVy
LmFkZCgicHVibGljRXhwb25lbnQiLCByc2FBbGdvcml0aG0ucHVibGljRXhwb25lbnQoKSk7Cisg
ICAgICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciByc2FIYXNoKCZzdGF0ZSk7CisgICAgICAg
IHJzYUhhc2guYWRkKCJuYW1lIiwgcnNhQWxnb3JpdGhtLmhhc2goKSk7CisgICAgICAgIGJ1aWxk
ZXIuYWRkKCJoYXNoIiwgcnNhSGFzaCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IEtleUFsZ29yaXRobUNsYXNzOjpSU0E6IHsKKyAgICAgICAgYXV0byYgcnNhQWxnb3JpdGhtID0g
ZG93bmNhc3Q8UnNhS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoIm5hbWUiLCByc2FBbGdvcml0aG0ubmFtZSgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQoIm1v
ZHVsdXNMZW5ndGgiLCByc2FBbGdvcml0aG0ubW9kdWx1c0xlbmd0aCgpKTsKKyAgICAgICAgYnVp
bGRlci5hZGQoInB1YmxpY0V4cG9uZW50IiwgcnNhQWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgbV9hbGdvcml0aG0uc2V0KHN0
YXRlLnZtKCksIHRoaXMsIGJ1aWxkZXIucmVzdWx0KCkpOworICAgIHJldHVybiBtX2FsZ29yaXRo
bS5nZXQoKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjIyNzdlNzY4YTUyODgwMzkyOTg4
MThiODAxOGRmZDJlZGE1NzZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuaCIKLQotI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjo6Q3J5cHRvQWxnb3Jp
dGhtRGVzY3JpcHRpb25CdWlsZGVyKCkKLXsKLX0KLQotQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRp
b25CdWlsZGVyOjp+Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCkKLXsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3Jp
cHRpb25CdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmUxNGJi
MGM0OWE0NDYwNzkzMTEyM2FjODVhNGM0ZTM3ZWY4NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29y
aXRobURlc2NyaXB0aW9uQnVpbGRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gK
LSNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKLQotI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIp
OwotcHVibGljOgotICAgIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcigpOwotICAg
IHZpcnR1YWwgfkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcigpOwotCi0gICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyPiBj
cmVhdGVFbXB0eUNsb25lKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZChjb25z
dCBjaGFyKiwgdW5zaWduZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIq
LCBjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3Qg
Y2hhciosIGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpID0gMDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZ
UFRPKQotI2VuZGlmIC8vIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCmluZGV4IGQ4MjdmN2NjZTI0ODAyZWIxYzU5ZmFkYmRj
Y2QxYWJhZThlYzc1ODEuLjYwMDc1MDY2NzFkNThmMjEyNDZhZmQyNWU2YjliN2U0MTg1MTg1YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCkBAIC0yOCwxNSArMjgsMTMgQEAKIAog
I2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIK
ICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9L
ZXk6OkNyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgVHlwZSB0
eXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZXMpCi0gICAgOiBtX2Fs
Z29yaXRobShhbGdvcml0aG0pCitDcnlwdG9LZXk6OkNyeXB0b0tleShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXIsIFR5cGUgdHlwZSwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2VzKQorICAgIDogbV9hbGdvcml0aG1JZGVudGlmaWVyKGFs
Z29yaXRobUlkZW50aWZpZXIpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fZXh0cmFjdGFi
bGUoZXh0cmFjdGFibGUpCiAgICAgLCBtX3VzYWdlcyh1c2FnZXMpCkBAIC00NywxMiArNDUsNiBA
QCBDcnlwdG9LZXk6On5DcnlwdG9LZXkoKQogewogfQogCi12b2lkIENyeXB0b0tleTo6YnVpbGRB
bGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1
aWxkZXIpIGNvbnN0Ci17Ci0gICAgYnVpbGRlci5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9hbGdvcml0aG0pKTsKLSAg
ICAvLyBTdWJjbGFzc2VzIHdpbGwgYWRkIG90aGVyIGtleXMuCi19Ci0KIGF1dG8gQ3J5cHRvS2V5
Ojp1c2FnZXMoKSBjb25zdCAtPiBWZWN0b3I8VXNhZ2U+CiB7CiAgICAgLy8gVGhlIHJlc3VsdCBp
cyBvcmRlcmVkIGFscGhhYmV0aWNhbGx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCmluZGV4
IGViNmI3MDE2ZDc1MWE5NzIxYTA5YWI1YTBkMzMzMjhiMmRmMWRkZGUuLmMwOTdmYzE1MmE4MTk1
MDQ2MDJjMzE4MGQ1YjJlNTAyZmI1YTc0YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTEgKzQz
LDM3IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjsKIGNsYXNzIENy
eXB0b0tleURhdGE7CiAKIGVudW0gY2xhc3MgQ3J5cHRvS2V5Q2xhc3MgewotICAgIEhNQUMsCiAg
ICAgQUVTLAorICAgIEhNQUMsCiAgICAgUlNBCiB9OwogCitlbnVtIGNsYXNzIEtleUFsZ29yaXRo
bUNsYXNzIHsKKyAgICBBRVMsCisgICAgSE1BQywKKyAgICBSU0EsCisgICAgSFJTQQorfTsKKwor
Y2xhc3MgS2V5QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBLZXlBbGdvcml0aG0oY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgICAgICA6IG1fbmFtZShuYW1lKQorICAgIHsKKyAgICB9CisgICAgdmly
dHVhbCB+S2V5QWxnb3JpdGhtKCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBLZXlBbGdv
cml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0ID0gMDsKKworICAgIFN0cmluZyBu
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1f
bmFtZTsKKworfTsKKwogY2xhc3MgQ3J5cHRvS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8Q3J5cHRv
S2V5PiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgVHlwZSA9IENyeXB0b0tleVR5cGU7CkBAIC01Nyw3
ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgIGJvb2wgZXh0
cmFjdGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4dHJhY3RhYmxlOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyJikgY29uc3Q7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGht
PiBidWlsZEFsZ29yaXRobSgpIGNvbnN0ID0gMDsKIAogICAgIC8vIEZJWE1FOiBDb25mdXNpbmcg
dG8gaGF2ZSBDcnlwdG9LZXlVc2FnZSBhbmQgQ3J5cHRvS2V5OjpVc2FnZSBuYW1lZCBhbG1vc3Qg
dGhlIHNhbWUsIGJ1dCBiZSBzbGlnaHRseSBkaWZmZXJlbnQuCiAgICAgLy8gQ3J5cHRvS2V5VXNh
Z2UgdmFsdWVzIGFyZSBiaXQgbWFza3Mgc28gdGhleSBjYW4gYmUgY29tYmluZWQgd2l0aCAib3Ii
LCB3aGlsZSB0aGlzIGlzIGEgbm9ybWFsIGVudW0gdGhhdCBtdXN0CkBAIC02NSw3ICs5Miw3IEBA
IHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFVzYWdlIHsgRW5jcnlwdCwgRGVjcnlwdCwgU2lnbiwg
VmVyaWZ5LCBEZXJpdmVLZXksIERlcml2ZUJpdHMsIFdyYXBLZXksIFVud3JhcEtleSB9OwogICAg
IFZlY3RvcjxVc2FnZT4gdXNhZ2VzKCkgY29uc3Q7CiAKLSAgICBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2FsZ29yaXRobTsg
fQorICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsgfQogICAgIENyeXB0b0tleVVzYWdl
IHVzYWdlc0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2VzOyB9CiAgICAgYm9vbCBhbGxv
d3MoQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpIGNvbnN0IHsgcmV0dXJuIHVzYWdlID09IChtX3VzYWdl
cyAmIHVzYWdlKTsgfQogCkBAIC03NCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZl
Y3Rvcjx1aW50OF90PiByYW5kb21EYXRhKHNpemVfdCk7CiAKIHByaXZhdGU6Ci0gICAgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBtX2FsZ29yaXRobTsKKyAgICBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsKICAgICBUeXBlIG1fdHlwZTsKICAgICBib29s
IG1fZXh0cmFjdGFibGU7CiAgICAgQ3J5cHRvS2V5VXNhZ2UgbV91c2FnZXM7CkBAIC05Miw1ICsx
MTksMTAgQEAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFt
ZSkgXAogICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpDcnlwdG9LZXkmIGtl
eSkgeyByZXR1cm4ga2V5LmtleUNsYXNzKCkgPT0gV2ViQ29yZTo6S2V5Q2xhc3M7IH0gXAogU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfS0VZX0FMR09SSVRITShUb0NsYXNzTmFtZSwgS2V5QWxnb3JpdGhtQ2xhc3MpIFwKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9DbGFzc05hbWUpIFwKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6S2V5QWxnb3JpdGhtJiBhbGdvcml0aG0pIHsg
cmV0dXJuIGFsZ29yaXRobS5rZXlBbGdvcml0aG1DbGFzcygpID09IFdlYkNvcmU6OktleUFsZ29y
aXRobUNsYXNzOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogI2VuZGlmIC8vIENyeXB0b0tleV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuaWRsCmluZGV4IGM0ZjFjM2M1MzFiM2UxNzg4MmJjMTI3MzA0NzMxYTY0
ZTI0OTZjOGIuLmRjNzU2ZTcyOGIwMjU3NzU2NWY2Y2U0ODZiMDBjNDhkOThmMzhkMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaWRsCkBAIC00Nyw2ICs0Nyw2IEBAIGVudW0gS2V5VXNh
Z2UgewogXSBpbnRlcmZhY2UgQ3J5cHRvS2V5IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgS2V5
VHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGV4dHJhY3RhYmxlOwot
ICAgIFtDdXN0b21dIHJlYWRvbmx5IGF0dHJpYnV0ZSBBbGdvcml0aG0gYWxnb3JpdGhtOwotICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBzZXF1ZW5jZTxLZXlVc2FnZT4gdXNhZ2VzOworICAgIFtDYWNo
ZWRBdHRyaWJ1dGUsIEN1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIG9iamVjdCBhbGdv
cml0aG07CisgICAgW0NhY2hlZEF0dHJpYnV0ZV0gcmVhZG9ubHkgYXR0cmlidXRlIHNlcXVlbmNl
PEtleVVzYWdlPiB1c2FnZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2dudXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2du
dXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3BwCmluZGV4IGQ3MDQ1YTViNjg0N2JhNzcwNmM2MWYz
Y2YwZjE3NzYxOWQwNmIzOWMuLjM1ODY5NjY2ZTRhMGExOTc2ZmJhY2E2MDliYWRiNzhiMzM1ZmRl
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvS2V5UlNB
R251VExTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0tleVJT
QUdudVRMUy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRP
KQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKQEAgLTgxLDEwICs4
MCwxMCBAQCBzaXplX3QgQ3J5cHRvS2V5UlNBOjprZXlTaXplSW5CaXRzKCkgY29uc3QKICAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRp
b24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBjb25zdAordW5p
cXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YWxnb3JpdGhtKCkgY29uc3QKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShidWlsZGVyKTsKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FLZXlBbGdvcml0aG0+KGVtcHR5U3RyaW5nKCksIDAs
IHsgfSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlSU0E6
OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eUFFUy5jcHAKaW5kZXggNDRiNTAwN2I5MTI3NjY3ZWYyZDc1NTg5NDg5YjdiOTFjNmY1NGI1YS4u
YTBhZjI1NDU3MGYxYzEyMjBiMDg5MWFkNGM2N2Q0MjYwYzU3ZDhmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlci5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KQEAgLTYzLDEwICs2Miw5IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENy
eXB0b0tleUFFUzo6Z2VuZXJhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0s
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCByYW5kb21E
YXRhKGxlbmd0aEJpdHMgLyA4KSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwogfQogCi12b2lkIENy
eXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3Jp
dGhtPiBDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QKIHsKLSAgICBDcnlwdG9L
ZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7Ci0gICAgYnVpbGRlci5hZGQo
Imxlbmd0aCIsIG1fa2V5LnNpemUoKSAqIDgpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PEFlc0tleUFsZ29yaXRobT4oQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5h
bWVGb3JJZGVudGlmaWVyKGFsZ29yaXRobUlkZW50aWZpZXIoKSksIG1fa2V5LnNpemUoKSAqIDgp
OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gQ3J5cHRvS2V5QUVTOjpleHBv
cnREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUFFUy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgK
aW5kZXggNDVhNWJiODIzNjRlZWIxMWZkYzUzMDUxYjFkZjM1ZmEzNTMyYWZmNy4uNTI3MDU5ZjBm
YTVhOTNjODUxODhlYTYxMDU1MDRhODM4ZGU1ZThiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5QUVTLmgKQEAgLTM0LDYgKzM0LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgQWVzS2V5QWxnb3JpdGhtIGZpbmFsIDogcHVibGljIEtleUFsZ29yaXRo
bSB7CitwdWJsaWM6CisgICAgQWVzS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbmFtZSwgc2l6
ZV90IGxlbmd0aCkKKyAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKKyAgICAgICAgLCBtX2xl
bmd0aChsZW5ndGgpCisgICAgeworICAgIH0KKworICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFs
Z29yaXRobUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkFF
UzsgfQorCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisK
K3ByaXZhdGU6CisgICAgc2l6ZV90IG1fbGVuZ3RoOworfTsKKwogY2xhc3MgQ3J5cHRvS2V5QUVT
IGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDcnlw
dG9LZXlBRVM+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdl
IHVzYWdlKQpAQCAtNDYsMTUgKzYyLDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZWZQdHI8
Q3J5cHRvS2V5QUVTPiBnZW5lcmF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBzaXplX3Qg
bGVuZ3RoQml0cywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwogCi0gICAgQ3J5
cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDcnlwdG9LZXlD
bGFzczo6QUVTOyB9CisgICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBDcnlwdG9LZXlDbGFzczo6QUVTOyB9CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKIHByaXZhdGU6CiAgICAgQ3J5cHRv
S2V5QUVTKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSk7CiAKLSAgICB2b2lkIGJ1aWxk
QWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IGV4cG9y
dERhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGht
PiBidWlsZEFsZ29yaXRobSgpIGNvbnN0IGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3QgZmluYWw7CiAKICAgICBWZWN0b3I8dWludDhf
dD4gbV9rZXk7CiB9OwpAQCAtNjMsNiArNzksOCBAQCBwcml2YXRlOgogCiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5QUVTLCBDcnlwdG9LZXlDbGFzczo6QUVTKQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oQWVzS2V5QWxnb3JpdGhtLCBL
ZXlBbGdvcml0aG1DbGFzczo6QUVTKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8p
CiAKICNlbmRpZiAvLyBDcnlwdG9LZXlBRVNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlITUFDLmNwcAppbmRleCBhZjYwNGY0Zjc3Y2U0MmQzYTJkYzRmMDYyZDI1NDk1
NTQyMjRiMGMwLi5jNTc0Zjc3MmY2OWZkOGMyNmM5NGM4ODFmYmE4NGMzMDA4NzE3Zjc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcApAQCAtMjgsNyAr
MjgsNiBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJDcnlwdG9B
bGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02NywxNSArNjYsMTAgQEAgUmVmUHRyPENy
eXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmdlbmVyYXRlKHNpemVfdCBsZW5ndGhCeXRlcywg
Q3J5cHRvQWxnb3JpdGgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleUhNQUMocmFu
ZG9tRGF0YShsZW5ndGhCeXRlcyksIGhhc2gsIGV4dHJhY3RhYmxlLCB1c2FnZXMpKTsKIH0KIAot
dm9pZCBDcnlwdG9LZXlITUFDOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29y
aXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxL
ZXlBbGdvcml0aG0+IENyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QKIHsKLSAg
ICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7Ci0KLSAgICBh
dXRvIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsK
LSAgICBoYXNoRGVzY3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7Ci0gICAgYnVp
bGRlci5hZGQoImhhc2giLCAqaGFzaERlc2NyaXB0aW9uQnVpbGRlcik7Ci0KLSAgICBidWlsZGVy
LmFkZCgibGVuZ3RoIiwgbV9rZXkuc2l6ZSgpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxIbWFjS2V5QWxnb3JpdGhtPihDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCku
bmFtZUZvcklkZW50aWZpZXIoYWxnb3JpdGhtSWRlbnRpZmllcigpKSwKKyAgICAgICAgQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCks
IG1fa2V5LnNpemUoKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlw
dG9LZXlITUFDOjpleHBvcnREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleUhNQUMuaAppbmRleCA0NjhhZDA3N2YxOTYxYWQ4ZGFkN2I0YjQzOTk4ZWIxNzJj
ZDIzMzA3Li5lYzE2NDg4MzI5MzhkOWNjNTQ4ZDUyNzJiMmY2OTQ4MDYzZDg5ZWZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCkBAIC0zMyw2ICszMywyNSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEhtYWNLZXlBbGdvcml0aG0gZmluYWwg
OiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBIbWFjS2V5QWxn
b3JpdGhtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoLCBzaXplX3QgbGVu
Z3RoKQorICAgICAgICA6IEtleUFsZ29yaXRobShuYW1lKQorICAgICAgICAsIG1faGFzaChoYXNo
KQorICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICB7CisgICAgfQorCisgICAgS2V5QWxn
b3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlB
bGdvcml0aG1DbGFzczo6SE1BQzsgfQorCisgICAgU3RyaW5nIGhhc2goKSBjb25zdCB7IHJldHVy
biBtX2hhc2g7IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7
IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9oYXNoOworICAgIHNpemVfdCBtX2xlbmd0aDsK
K307CisKIGNsYXNzIENyeXB0b0tleUhNQUMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleUhNQUM+IGNyZWF0ZShjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJh
Y3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKQEAgLTQ0LDcgKzYzLDcgQEAgcHVibGljOgog
ICAgIC8vIElmIGxlbmd0aEJ5dGVzIGlzIDAsIGEgcmVjb21tZW5kZWQgbGVuZ3RoIGlzIHVzZWQs
IHdoaWNoIGlzIHRoZSBzaXplIG9mIHRoZSBhc3NvY2lhdGVkIGhhc2ggZnVuY3Rpb24ncyBibG9j
ayBzaXplLgogICAgIHN0YXRpYyBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gZ2VuZXJhdGUoc2l6ZV90
IGxlbmd0aEJ5dGVzLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFj
dGFibGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAgIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OkhNQUM7IH0KKyAgICBDcnlw
dG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENyeXB0b0tleUNsYXNz
OjpITUFDOyB9CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5OyB9CiAKQEAgLTUzLDggKzcyLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBD
cnlwdG9LZXlITUFDKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAg
IHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5
RGF0YT4gZXhwb3J0RGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxL
ZXlBbGdvcml0aG0+IGJ1aWxkQWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CisgICAgc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0tleURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBmaW5hbDsKIAogICAgIENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXIgbV9oYXNoOwogICAgIFZlY3Rvcjx1aW50OF90PiBtX2tl
eTsKQEAgLTY0LDUgKzgzLDcgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
UllQVE9fS0VZKENyeXB0b0tleUhNQUMsIENyeXB0b0tleUNsYXNzOjpITUFDKQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oSG1hY0tleUFsZ29yaXRobSwgS2V5QWxnb3Jp
dGhtQ2xhc3M6OkhNQUMpCisKICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKICNlbmRp
ZiAvLyBDcnlwdG9LZXlITUFDX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleVJTQS5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5
UlNBLmgKaW5kZXggNmVhMjAwYjhjMTcxZTgzMjAzNGY0NmVmNDNkYzk2NWYwYzVkOWVlMC4uYmUy
NmQwOTRmNjc1YzQ3OTFiNTUxMDI1ZTk1MTNiYjUwMzI2NmViNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKQEAgLTQ3LDYgKzQ3LDQxIEBAIGNsYXNzIENyeXB0
b0tleURhdGFSU0FDb21wb25lbnRzOwogY2xhc3MgQ3J5cHRvS2V5UGFpcjsKIGNsYXNzIFByb21p
c2VXcmFwcGVyOwogCitjbGFzcyBSc2FLZXlBbGdvcml0aG0gOiBwdWJsaWMgS2V5QWxnb3JpdGht
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSc2FLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBu
YW1lLCBzaXplX3QgbW9kdWx1c0xlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgcHVibGljRXhwb25l
bnQpCisgICAgICAgIDogS2V5QWxnb3JpdGhtKG5hbWUpCisgICAgICAgICwgbV9tb2R1bHVzTGVu
Z3RoKG1vZHVsdXNMZW5ndGgpCisgICAgICAgICwgbV9wdWJsaWNFeHBvbmVudChXVEZNb3ZlKHB1
YmxpY0V4cG9uZW50KSkKKyAgICB7CisgICAgfQorCisgICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5
QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFz
czo6UlNBOyB9CisKKyAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kdWx1c0xlbmd0aDsgfQorICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNFeHBvbmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHVibGljRXhwb25lbnQ7IH0KKworcHJpdmF0ZToKKyAgICBzaXplX3Qg
bV9tb2R1bHVzTGVuZ3RoOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3B1YmxpY0V4cG9uZW50Owor
fTsKKworY2xhc3MgUnNhSGFzaGVkS2V5QWxnb3JpdGhtIGZpbmFsIDogcHVibGljIFJzYUtleUFs
Z29yaXRobSB7CitwdWJsaWM6CisgICAgUnNhSGFzaGVkS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgc2l6ZV90IG1vZHVsdXNMZW5ndGgsIFZlY3Rvcjx1aW50OF90PiYmIHB1YmxpY0V4
cG9uZW50LCBjb25zdCBTdHJpbmcmIGhhc2gpCisgICAgICAgIDogUnNhS2V5QWxnb3JpdGhtKG5h
bWUsIG1vZHVsdXNMZW5ndGgsIFdURk1vdmUocHVibGljRXhwb25lbnQpKQorICAgICAgICAsIG1f
aGFzaChoYXNoKQorICAgIHsKKyAgICB9CisKKyAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdv
cml0aG1DbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpIUlNB
OyB9CisKKyAgICBTdHJpbmcgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQorCitwcml2
YXRlOgorICAgIFN0cmluZyBtX2hhc2g7Cit9OworCiBjbGFzcyBDcnlwdG9LZXlSU0EgZmluYWwg
OiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleVJT
QT4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIENyeXB0b0tleVR5cGUgdHlwZSwg
UGxhdGZvcm1SU0FLZXkgcGxhdGZvcm1LZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlIHVzYWdlKQpAQCAtNjksMTAgKzEwNCwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENy
eXB0b0tleVJTQShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGhhc2gsIGJvb2wgaGFzSGFzaCwgQ3J5cHRvS2V5VHlwZSwgUGxhdGZvcm1SU0FLZXks
IGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAgIENyeXB0b0tleUNsYXNz
IGtleUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OlJTQTsg
fQorICAgIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5
cHRvS2V5Q2xhc3M6OlJTQTsgfQogCi0gICAgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9u
KENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYnVpbGRBbGdvcml0aG0oKSBj
b25zdCBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0RGF0
YSgpIGNvbnN0IGZpbmFsOwogCiAgICAgUGxhdGZvcm1SU0FLZXkgbV9wbGF0Zm9ybUtleTsKIApA
QCAtODQsNSArMTE5LDkgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DUllQ
VE9fS0VZKENyeXB0b0tleVJTQSwgQ3J5cHRvS2V5Q2xhc3M6OlJTQSkKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKFJzYUtleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xh
c3M6OlJTQSkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKFJzYUhhc2hl
ZEtleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0EpCisKICNlbmRpZiAvLyBFTkFC
TEUoU1VCVExFX0NSWVBUTykKICNlbmRpZiAvLyBDcnlwdG9LZXlSU0FfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCmluZGV4IDE0MGM5YjMxODhmOWI4
YTRhZjY0OWRmNDg3NGY3ZDA5MDlkMGExYTIuLmQ0ZGY2Y2E0YzYzOGIxZGI0OGE1ZmM1ZjllYjFj
ODIyOTBiOGM4MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
S2V5UlNBTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJT
QU1hYy5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAog
I2luY2x1ZGUgIkNvbW1vbkNyeXB0b1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNyeXB0b0FsZ29y
aXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaCIKICNpbmNsdWRl
ICJDcnlwdG9LZXlQYWlyLmgiCkBAIC0xNjAsMjYgKzE1OSwyMiBAQCBzaXplX3QgQ3J5cHRvS2V5
UlNBOjprZXlTaXplSW5CaXRzKCkgY29uc3QKICAgICByZXR1cm4gbW9kdWx1cy5zaXplKCkgKiA4
OwogfQogCi12b2lkIENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlw
dG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitzdGQ6OnVuaXF1
ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QK
IHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7Ci0K
KyAgICBTdHJpbmcgbmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5u
YW1lRm9ySWRlbnRpZmllcihhbGdvcml0aG1JZGVudGlmaWVyKCkpOwogICAgIFZlY3Rvcjx1aW50
OF90PiBtb2R1bHVzOwogICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNFeHBvbmVudDsKICAgICBD
Q0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gZ2V0UHVibGljS2V5Q29tcG9uZW50cyhtX3BsYXRmb3Jt
S2V5LCBtb2R1bHVzLCBwdWJsaWNFeHBvbmVudCk7CiAgICAgaWYgKHN0YXR1cykgewogICAgICAg
ICBXVEZMb2dBbHdheXMoIkNvdWxkbid0IGdldCBSU0Ega2V5IGNvbXBvbmVudHMsIHN0YXR1cyAl
ZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcHVibGljRXhwb25lbnQuY2xl
YXIoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihu
YW1lLCAwLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CiAgICAgfQogCi0gICAgYnVpbGRlci5h
ZGQoIm1vZHVsdXNMZW5ndGgiLCBtb2R1bHVzLnNpemUoKSAqIDgpOwotICAgIGJ1aWxkZXIuYWRk
KCJwdWJsaWNFeHBvbmVudCIsIHB1YmxpY0V4cG9uZW50KTsKLQotICAgIGlmIChtX3Jlc3RyaWN0
ZWRUb1NwZWNpZmljSGFzaCkgewotICAgICAgICBhdXRvIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIg
PSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsKLSAgICAgICAgaGFzaERlc2NyaXB0aW9uQnVp
bGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5h
bWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOwotICAgICAgICBidWlsZGVyLmFkZCgiaGFzaCIsICpo
YXNoRGVzY3JpcHRpb25CdWlsZGVyKTsKLSAgICB9CisgICAgc2l6ZV90IG1vZHVsdXNMZW5ndGgg
PSBtb2R1bHVzLnNpemUoKSAqIDg7CisgICAgaWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNo
KQorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FIYXNoZWRLZXlBbGdvcml0aG0+
KG5hbWUsIG1vZHVsdXNMZW5ndGgsIFdURk1vdmUocHVibGljRXhwb25lbnQpLCBDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7Cisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihuYW1lLCBtb2R1bHVz
TGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJk
ZjQxNzZiMzc0MjRiZTU3NjA3NDI4N2E4NThmNDM2ODQ0NzcxOGMuLmI4MGRkYzFkMjc2OWVmY2Ew
ZGM3OGJkZTAxMzg1YTJlODY2MTkyNTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wOS0x
MiAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkNyeXB0
byBhbGdvcml0aG1zIHNob3VsZCBiZSBleHBvc2VkIHZpYSBLZXlBbGdvcml0aG0gZGljdGlvbmFy
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NzQ4
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzM1OTQzOD4KKworICAgICAgICBSZXZpZXdlZCBi
eSBCcmVudCBGdWxnaGFtLgorCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRl
LWtleS1leHBlY3RlZC50eHQ6CisgICAgICAgICogY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRl
LWtleS5odG1sOgorCiAyMDE2LTA5LTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgogCiAgICAgICAgIFNwZWVkIHVwIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGEgYml0IGJ5IG1h
a2luZyBpdCBhIGJ1aWx0aW4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
aG1hYy1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9obWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKaW5kZXggNWJkMzFiZDBhN2E3MjE2ZjZk
NDBiMWY2ZjU1ODkwZTBhZDEzYWNlNC4uNTM5MjFlNDI3MDNmZTE0YjJlZWVlNjIxYWExMjEzMDNi
NjAyOGNiYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVy
YXRlLWtleS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFj
LWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKQEAgLTEzLDYgKzEzLDcgQEAgUEFTUyBrZXkudHlw
ZSBpcyAnc2VjcmV0JwogUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXkuYWxn
b3JpdGhtLm5hbWUgaXMgJ0hNQUMnCiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDY0CitQ
QVNTIGtleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdTSEEtMScKIFBBU1Mga2V5LnVzYWdlcyBp
cyBbInNpZ24iLCAidmVyaWZ5Il0KIAogR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBsZW5n
dGguLi4KQEAgLTIwLDYgKzIxLDcgQEAgUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0JwogUEFTUyBr
ZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ0hNQUMn
CiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDUKK1BBU1Mga2V5LmFsZ29yaXRobS5oYXNo
Lm5hbWUgaXMgJ1NIQS0xJwogUEFTUyBrZXkudXNhZ2VzIGlzIFsic2lnbiJdCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbCBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
aG1hYy1nZW5lcmF0ZS1rZXkuaHRtbAppbmRleCAzYWZjNTY4NWMxNzhhMTIzN2E2YTkzNjAwYzRm
MDlhM2E5MTg4ODliLi4yYjliZjNhMTdhNzE4YWFmMDY3NGI5NzhkZTAwNDAwYzVmODdkMmQwIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5Lmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5odG1s
CkBAIC0yOCw2ICsyOCw3IEBAIGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoe25hbWU6ICJobWFj
IiwgaGFzaDogInNoYS0xIn0sIGV4dHJhY3RhYmxlLCBbInNpZ24iLCAiCiAgICAgc2hvdWxkQmUo
ImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0u
bmFtZSIsICInSE1BQyciKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAi
NjQiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5oYXNoLm5hbWUiLCAiJ1NIQS0xJyIp
OwogICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgJ1sic2lnbiIsICJ2ZXJpZnkiXScpOwogCiAg
ICAgZGVidWcoIlxuR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBsZW5ndGguLi4iKTsKQEAg
LTM5LDYgKzQwLDcgQEAgY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTogImhtYWMiLCBo
YXNoOiAic2hhLTEifSwgZXh0cmFjdGFibGUsIFsic2lnbiIsICIKICAgICBzaG91bGRCZSgia2V5
LmV4dHJhY3RhYmxlIiwgInRydWUiKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1l
IiwgIidITUFDJyIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICI1Iik7
CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidTSEEtMSciKTsKICAg
ICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICdbInNpZ24iXScpOwogICAgIGZpbmlzaEpTVGVzdCgp
OwogfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288775</attachid>
            <date>2016-09-13 23:37:32 -0700</date>
            <delta_ts>2016-09-14 00:36:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128748-20160913233455.patch</filename>
            <type>text/plain</type>
            <size>44806</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZkYThkNTYxY2U2OTEz
OWUyZWE3MWNhZWJhMGIwM2MyOGYyYTcyZS4uMjE1ODJmOTY3OGE0ZGNlYThkY2I2NGZhMzBiYmE1
MTA0ODM4ZDAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE2LTA5LTEyICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg3NDgKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzI3MzU5NDM4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50
IEZ1bGdoYW0gYW5kIENocmlzIER1bWV6LgorCisgICAgICAgIFJlcGxhY2UgY3VzdG9tIENyeXB0
b0FsZ29yaXRobUJ1aWxkZXIvYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbiB3aXRoIEtleUFsZ29y
aXRobSBkaWN0aW9uYXJ5IHdoaWNoIGlzCisgICAgICAgIGRlZmluZWQgYnkgdGhlIHNwZWM6IGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9XZWJDcnlwdG9BUEkvI2tleS1hbGdvcml0aG0tZGljdGlvbmFy
eS4gTW9yZW92ZXIsIG1hcmsKKyAgICAgICAgQ3J5cHRvS2V5LnVzYWdlcyBhcyBDYWNoZWRBdHRy
aWJ1dGUuCisKKyAgICAgICAgVGVzdHM6IGNyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0
aG0tZ2MuaHRtbAorICAgICAgICAgICAgICAgY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LXVzYWdl
cy1nYy5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0
Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgUmVt
b3ZlIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAuCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXI6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXI6OmNyZWF0ZUVtcHR5Q2xvbmUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3J5cHRvS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5OjphbGdv
cml0aG0pOgorICAgICAgICBHZXQgcmlkIG9mIGRlcGVuZGVuY3kgb24gQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdv
cml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgUmVwbGFjZSBpdCB3
aXRoIEtleUFsZ29yaXRobS4KKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6Q3J5cHRvS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
Y3J5cHRvL0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpLZXlB
bGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjp+S2V5QWxnb3JpdGht
KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YWxnb3JpdGhtSWRlbnRpZmllcik6Cisg
ICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5pZGw6CisgICAgICAgIEFkZCBLZXlBbGdvcml0aG0g
ZGljdGlvbmFyeSB3aGljaCBpcyByZXR1cm5lZCB2aWEgQ3J5cHRvS2V5LmJ1aWxkQWxnb3JpdGht
KCkgbWV0aG9kLAorICAgICAgICBhbmQgcmVuYW1lIG1fYWxnb3JpdGhtIHRvIG1fYWxnb3JpdGht
SWRlbnRpZmllciB0byBkaXN0aW5ndXNoIGl0IHdpdGggbmV3bHkKKyAgICAgICAgYWRkZWQgS2V5
QWxnb3JpdGhtIGRpY3Rpb25hcnkuCisgICAgICAgICogY3J5cHRvL2dudXRscy9DcnlwdG9LZXlS
U0FHbnVUTFMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRBbGdvcml0aG0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAgICAoV2ViQ29yZTo6QWVz
S2V5QWxnb3JpdGhtOjpBZXNLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6QWVzS2V5
QWxnb3JpdGhtOjp+QWVzS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxn
b3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGht
RGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhN
QUMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhtYWNLZXlBbGdvcml0aG06OkhtYWNLZXlBbGdvcml0
aG0pOgorICAgICAgICAoV2ViQ29yZTo6SG1hY0tleUFsZ29yaXRobTo6fkhtYWNLZXlBbGdvcml0
aG0pOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UnNhS2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29y
ZTo6UnNhS2V5QWxnb3JpdGhtOjp+UnNhS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6
OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtKToKKyAgICAgICAg
KFdlYkNvcmU6OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6flJzYUhhc2hlZEtleUFsZ29yaXRobSk6
CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorCiAyMDE2
LTA5LTEyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHBv
c3QtbGFuZGluZyByZXZpZXcgY29tbWVudHMgYWZ0ZXIgcjIwNTc4NwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCBjNTFkMWMyNzAyZjcwYTVjNjlkNjM3YzgwNmNlZjhjNTc1YTY2YTlkLi42
ZjY4N2U4ZWNkNzNkYTg4YjQ5ZDg3OTc1OGNhYmQ1NTY3ZjAzNzJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtNDAzLDcgKzQwMyw2IEBAIGVuZGlmICgpCiBpZiAoRU5BQkxFX1NVQlRM
RV9DUllQVE8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIGNyeXB0
by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0
b0tleVBhaXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGI3OTIzZjM5MjNiMzA4
MWQyZTNjOGRjMTNiMjFlMDUwYjllZmZjMTEuLjdiN2JlMmY5MTQyNDk3MzgwYWM2ZDk3MTFiZTI4
ZTI3NjhlMTVkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zOTYsNyArMzk2LDYg
QEAgZW5kaWYgKCkKIGlmIChFTkFCTEVfU1VCVExFX0NSWVBUTykKICAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICAgICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5jcHAKLSAgICAg
ICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAKICAgICAgICAg
Y3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRv
S2V5LmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRvS2V5UGFpci5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKaW5kZXggNGE4Zjg2MjBkYjAyMGJjMzJkZTMzMzdmMTAyMTc4OGM5NWVkMzdiZS4u
MzRiOGRiMjcwYmY2OTRiMmUwN2QxODQ5MWFhODc0Njc0MzU2N2ZjOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UKQEAgLTE3Niw3ICsxNzYsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKIAogICAgIGNyeXB0by9Db21tb25DcnlwdG9VdGlsaXRpZXMuY3BwCiAgICAgY3J5cHRvL0Ny
eXB0b0FsZ29yaXRobS5jcHAKLSAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyLmNwcAogICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKICAgICBj
cnlwdG8vQ3J5cHRvS2V5LmNwcAogICAgIGNyeXB0by9DcnlwdG9LZXlQYWlyLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFj
MDkxYWJjNDgxMWRkNGE0MjY5NmMxZGVjNmMxZTU2NDNkMmZiMDkuLmZiMTBkNTBlMTBjMzIwYjli
OWFkNmMyYjA5MDYyMTMyYjRkMmVlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU5NzIsOCArNTk3Miw2IEBACiAJCUUxNTdB
OEU0MTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RTIxODE3M0EzQTAwOUY4MjFEIC8qIENy
eXB0b0tleS5jcHAgKi87IH07CiAJCUUxNTdBOEU1MTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9L
ZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdB
OEUzMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuaCAqLzsgfTsKIAkJRTE1N0E4RTgxODE4
NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEU2MTgxODRDNjcwMDlGODIxRCAvKiBK
U0NyeXB0b0tleUN1c3RvbS5jcHAgKi87IH07Ci0JCUUxNTdBOEVDMTgxODUxQUMwMDlGODIxRCAv
KiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RUExODE4NTFBQzAwOUY4MjFEIC8q
IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi87IH07Ci0JCUUxNTdBOEVE
MTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVCMTgx
ODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLzsg
fTsKIAkJRTE1N0E4RjAxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3
QThFRTE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLzsg
fTsKIAkJRTE1N0E4RjExODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4
RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oICovOyB9Owog
CQlFMTVBMzZENzExMDQ1NzIwMDBCN0I2MzkgLyogWE1MTlNOYW1lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5
IC8qIFhNTE5TTmFtZXMuaCAqLzsgfTsKQEAgLTEzNTQ5LDggKzEzNTQ3LDYgQEAKIAkJRTE1N0E4
RTIxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDcnlwdG9LZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMTU3QThFMzE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0tleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTU3QThFNjE4MTg0QzY3MDA5RjgyMUQgLyogSlNDcnlwdG9LZXlDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDcnlwdG9LZXlDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTU3QThFQTE4MTg1MUFDMDA5Rjgy
MUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNTdBOEVCMTgxODUxQUMwMDlG
ODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTdBOEVFMTgxODU0MjUwMDlGODIxRCAv
KiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTE1N0E4RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1QTM2RDYx
MTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gWE1MTlNOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIx
ODYsOCArMjIxODIsNiBAQAogCQkJCUUxRkUxMzczMTg0MDJBNjcwMDg5MkYxMyAvKiBDb21tb25D
cnlwdG9VdGlsaXRpZXMuaCAqLywKIAkJCQlFMTcyQUY2QjE4MEYyNEM2MDBGQkFEQjkgLyogQ3J5
cHRvQWxnb3JpdGhtLmNwcCAqLywKIAkJCQlFMTcyQUY2QzE4MEYyNEM2MDBGQkFEQjkgLyogQ3J5
cHRvQWxnb3JpdGhtLmggKi8sCi0JCQkJRTE1N0E4RUExODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi8sCi0JCQkJRTE1N0E4RUIxODE4NTFB
QzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oICovLAogCQkJ
CUUxQzY1NzI0MTgxNkU2OUQwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgg
Ki8sCiAJCQkJRTFDNjU3MjYxODE2RjlGRTAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMuaCAqLywKIAkJCQlFMUZGOEY2QTE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnkuY3BwICovLApAQCAtMjQwODAsNyArMjQwNzQsNiBAQAogCQkJCUUxRkUxMzdC
MTg0RDIxQkIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1cuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxMjVGODNBMTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQ
YXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOUFDM0Y3MTgyNEU1RDEwMDM0OTQyNiAvKiBD
cnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxNTdB
OEVEMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjVGODMyMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9B
bGdvcml0aG1ITUFDLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlEQTI5QzE4MTg5QUREMDAwODhC
QzggLyogQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFDNjU3MUYxODE2RTUwMzAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCBp
biBIZWFkZXJzICovLApAQCAtMjc3OTIsNyArMjc3ODUsNiBAQAogCQkJCUUxMjVGODQ1MTgyNDI1
QzkwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxRkUxMzdBMTg0RDIxQkIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFGRTEzN0UxODREMjcwMjAwODkyRjEzIC8qIENyeXB0
b0FsZ29yaXRobUFFU19LV01hYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMTU3QThFQzE4MTg1
MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxMjVGODMxMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1ITUFDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjVGODM4MTgyMkYxRUIwMEQ4NENEOSAv
KiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY4RjZD
MTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuY3BwCmluZGV4IGE5ZjM3MjY1NzBlMjg5NGFiYTYxZTg1Y2MwOWYwOWMx
NDhiMThmOTguLmQ5OWMyN2FiZDk0YzRiNjEwZjBmZDgzNmUyMmI2ZDc2ZDk4NGEzN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1C
dWlsZGVyLmNwcApAQCAtNDgsMTEgKzQ4LDYgQEAgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjp+
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyKCkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcj4gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjpj
cmVhdGVFbXB0eUNsb25lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxK
U0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI+KG1fZXhlYyk7Ci19Ci0KIHZvaWQgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCB1bnNpZ25lZCB2YWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CkBAIC03NSwxMiArNzAsMTEgQEAgdm9pZCBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgYnVmZmUKICAgICBtX2RpY3Rpb25hcnktPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
YXJyYXlWaWV3LT53cmFwKG1fZXhlYywgdm0uZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAotdm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXks
IGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgbmVzdGVkQnVpbGRlcikK
K3ZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25z
dCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXImIG5lc3RlZEJ1aWxkZXIpCiB7CiAgICAgVk0mIHZt
ID0gbV9leGVjLT52bSgpOwogICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBrZXkpOwotICAgIGNvbnN0IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ciYganNCdWlsZGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVy
Jj4obmVzdGVkQnVpbGRlcik7Ci0gICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50
aWZpZXIsIGpzQnVpbGRlci5yZXN1bHQoKSk7CisgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIG5lc3RlZEJ1aWxkZXIucmVzdWx0KCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlci5oCmluZGV4IGQ1MzdiNGM2NzcxYjk3YTEwNzgyYTQ1ZmU5OWQ4
YWE4NWIwMGVlZTkuLjI4NzNiZDFmNzI1NTY5YTc1ZTUxZWMzMmY0NTlhNTIwMzljOWFlNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlci5oCkBAIC0yNiw3ICsyNiwxMCBAQAogI2lmbmRlZiBKU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXJfaAogI2RlZmluZSBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXJfaAogCi0jaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKIApAQCAtMzcsMTkgKzQwLDE4IEBAIGNsYXNzIEpTT2JqZWN0OwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBmaW5hbCA6IHB1
YmxpYyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIgeworY2xhc3MgSlNDcnlwdG9B
bGdvcml0aG1CdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0NyeXB0b0FsZ29y
aXRobUJ1aWxkZXIpOwogcHVibGljOgogICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcihKU0M6
OkV4ZWNTdGF0ZSopOwogICAgIHZpcnR1YWwgfkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcigpOwog
CiAgICAgSlNDOjpKU09iamVjdCogcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9kaWN0aW9uYXJ5
OyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyPiBjcmVhdGVFbXB0eUNsb25lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkZChj
b25zdCBjaGFyKiwgdW5zaWduZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIq
LCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGQoY29uc3QgY2hhcios
IGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIG92ZXJyaWRlOworICAg
IHZvaWQgYWRkKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBhZGQoY29uc3QgY2hh
ciosIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mKTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgSlNDcnlwdG9B
bGdvcml0aG1CdWlsZGVyJik7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhl
YzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNw
cAppbmRleCA1ODU5NGJlZjJkYjI5YTJmMDk3NWVjOTlmZmNhZjg0MDUxZGI5ZDUzLi5lOTc1NDAw
ZGJlYWQ3NjUwMzc1NzRiNWJhYTM4Y2JhYjMwM2QwYTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAog
CiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIK
KyNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCiAj
aW5jbHVkZSAiSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKQEAgLTM3LDExICs0MSw1MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEpTVmFsdWUgSlNDcnlwdG9LZXk6OmFsZ29yaXRobShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUp
IGNvbnN0CiB7CisgICAgaWYgKG1fYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gbV9hbGdvcml0
aG0uZ2V0KCk7CisKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgYnVpbGRlcigmc3RhdGUp
OwotICAgIHdyYXBwZWQoKS5idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOwotICAg
IHJldHVybiBidWlsZGVyLnJlc3VsdCgpOwotfQogCisgICAgc3RkOjp1bmlxdWVfcHRyPEtleUFs
Z29yaXRobT4gYWxnb3JpdGhtID0gd3JhcHBlZCgpLmJ1aWxkQWxnb3JpdGhtKCk7CisgICAgc3dp
dGNoIChhbGdvcml0aG0tPmtleUFsZ29yaXRobUNsYXNzKCkpIHsKKyAgICBjYXNlIEtleUFsZ29y
aXRobUNsYXNzOjpBRVM6IHsKKyAgICAgICAgYXV0byYgYWVzQWxnb3JpdGhtID0gZG93bmNhc3Q8
QWVzS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5hZGQoIm5hbWUi
LCBhZXNBbGdvcml0aG0ubmFtZSgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGFl
c0FsZ29yaXRobS5sZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEtl
eUFsZ29yaXRobUNsYXNzOjpITUFDOiB7CisgICAgICAgIGF1dG8mIGhtYWNBbGdvcml0aG0gPSBk
b3duY2FzdDxIbWFjS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoIm5hbWUiLCBobWFjQWxnb3JpdGhtLm5hbWUoKSk7CisgICAgICAgIEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlciBobWFjSGFzaCgmc3RhdGUpOworICAgICAgICBobWFjSGFzaC5hZGQoIm5hbWUi
LCBobWFjQWxnb3JpdGhtLmhhc2goKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgaG1h
Y0hhc2gpOworICAgICAgICBidWlsZGVyLmFkZCgibGVuZ3RoIiwgaG1hY0FsZ29yaXRobS5sZW5n
dGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEtleUFsZ29yaXRobUNsYXNz
OjpIUlNBOiB7CisgICAgICAgIGF1dG8mIHJzYUFsZ29yaXRobSA9IGRvd25jYXN0PFJzYUhhc2hl
ZEtleUFsZ29yaXRobT4oKmFsZ29yaXRobSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJuYW1lIiwg
cnNhQWxnb3JpdGhtLm5hbWUoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJtb2R1bHVzTGVuZ3Ro
IiwgcnNhQWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJw
dWJsaWNFeHBvbmVudCIsIHJzYUFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCgpKTsKKyAgICAgICAg
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyIHJzYUhhc2goJnN0YXRlKTsKKyAgICAgICAgcnNhSGFz
aC5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0uaGFzaCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQo
Imhhc2giLCByc2FIYXNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5QWxn
b3JpdGhtQ2xhc3M6OlJTQTogeworICAgICAgICBhdXRvJiByc2FBbGdvcml0aG0gPSBkb3duY2Fz
dDxSc2FLZXlBbGdvcml0aG0+KCphbGdvcml0aG0pOworICAgICAgICBidWlsZGVyLmFkZCgibmFt
ZSIsIHJzYUFsZ29yaXRobS5uYW1lKCkpOworICAgICAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xl
bmd0aCIsIHJzYUFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKCkpOworICAgICAgICBidWlsZGVyLmFk
ZCgicHVibGljRXhwb25lbnQiLCByc2FBbGdvcml0aG0ucHVibGljRXhwb25lbnQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBtX2FsZ29yaXRobS5zZXQoc3RhdGUudm0o
KSwgdGhpcywgYnVpbGRlci5yZXN1bHQoKSk7CisgICAgcmV0dXJuIG1fYWxnb3JpdGhtLmdldCgp
OworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjI3N2U3NjhhNTI4ODAzOTI5ODgxOGI4MDE4
ZGZkMmVkYTU3NmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOjpDcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIoKQotewotfQotCi1DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXI6On5DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIoKQotewotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdmZTE0YmIwYzQ5YTQ0
NjA3OTMxMTIzYWM4NWE0YzRlMzdlZjg1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXJfaAotI2RlZmlu
ZSBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXJfaAotCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLSNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcik7Ci1wdWJs
aWM6Ci0gICAgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCk7Ci0gICAgdmlydHVh
bCB+Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+IGNyZWF0ZUVt
cHR5Q2xvbmUoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0
IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwg
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgPSAwOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0j
ZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5jcHAKaW5kZXggZDgyN2Y3Y2NlMjQ4MDJlYjFjNTlmYWRiZGNjZDFhYmFl
OGVjNzU4MS4uNjAwNzUwNjY3MWQ1OGYyMTI0NmFmZDI1ZTZiOWI3ZTQxODUxODViZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKQEAgLTI4LDE1ICsyOCwxMyBAQAogCiAjaWYgRU5B
QkxFKFNVQlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1
ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNyeXB0b0tleTo6Q3J5
cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBUeXBlIHR5cGUsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlcykKLSAgICA6IG1fYWxnb3JpdGht
KGFsZ29yaXRobSkKK0NyeXB0b0tleTo6Q3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtSWRlbnRpZmllciwgVHlwZSB0eXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZSB1c2FnZXMpCisgICAgOiBtX2FsZ29yaXRobUlkZW50aWZpZXIoYWxnb3JpdGht
SWRlbnRpZmllcikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9leHRyYWN0YWJsZShleHRy
YWN0YWJsZSkKICAgICAsIG1fdXNhZ2VzKHVzYWdlcykKQEAgLTQ3LDEyICs0NSw2IEBAIENyeXB0
b0tleTo6fkNyeXB0b0tleSgpCiB7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRo
bURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikg
Y29uc3QKLXsKLSAgICBidWlsZGVyLmFkZCgibmFtZSIsIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRobSkpOwotICAgIC8vIFN1
YmNsYXNzZXMgd2lsbCBhZGQgb3RoZXIga2V5cy4KLX0KLQogYXV0byBDcnlwdG9LZXk6OnVzYWdl
cygpIGNvbnN0IC0+IFZlY3RvcjxVc2FnZT4KIHsKICAgICAvLyBUaGUgcmVzdWx0IGlzIG9yZGVy
ZWQgYWxwaGFiZXRpY2FsbHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5
cHRvS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKaW5kZXggZWI2Yjcw
MTZkNzUxYTk3MjFhMDlhYjVhMGQzMzMyOGIyZGYxZGRkZS4uODc3ZjZiZjcxYmRiNTAxNzdjYTRl
NTMwNTg2ZWJmZWRjOTkzNjFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxMSArNDMsMzYgQEAg
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwogY2xhc3MgQ3J5cHRvS2V5
RGF0YTsKIAogZW51bSBjbGFzcyBDcnlwdG9LZXlDbGFzcyB7Ci0gICAgSE1BQywKICAgICBBRVMs
CisgICAgSE1BQywKICAgICBSU0EKIH07CiAKK2VudW0gY2xhc3MgS2V5QWxnb3JpdGhtQ2xhc3Mg
eworICAgIEFFUywKKyAgICBITUFDLAorICAgIFJTQSwKKyAgICBIUlNBCit9OworCitjbGFzcyBL
ZXlBbGdvcml0aG0geworcHVibGljOgorICAgIGV4cGxpY2l0IEtleUFsZ29yaXRobShjb25zdCBT
dHJpbmcmIG5hbWUpCisgICAgICAgIDogbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKyAgICB2
aXJ0dWFsIH5LZXlBbGdvcml0aG0oKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEtleUFs
Z29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgPSAwOworCisgICAgY29uc3Qg
U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKK3ByaXZhdGU6CisgICAg
U3RyaW5nIG1fbmFtZTsKK307CisKIGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBSZWZDb3VudGVk
PENyeXB0b0tleT4gewogcHVibGljOgogICAgIHVzaW5nIFR5cGUgPSBDcnlwdG9LZXlUeXBlOwpA
QCAtNTcsNyArODMsNyBAQCBwdWJsaWM6CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBi
b29sIGV4dHJhY3RhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYWN0YWJsZTsgfQotICAgIHZp
cnR1YWwgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlciYpIGNvbnN0OworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEtleUFs
Z29yaXRobT4gYnVpbGRBbGdvcml0aG0oKSBjb25zdCA9IDA7CiAKICAgICAvLyBGSVhNRTogQ29u
ZnVzaW5nIHRvIGhhdmUgQ3J5cHRvS2V5VXNhZ2UgYW5kIENyeXB0b0tleTo6VXNhZ2UgbmFtZWQg
YWxtb3N0IHRoZSBzYW1lLCBidXQgYmUgc2xpZ2h0bHkgZGlmZmVyZW50LgogICAgIC8vIENyeXB0
b0tleVVzYWdlIHZhbHVlcyBhcmUgYml0IG1hc2tzIHNvIHRoZXkgY2FuIGJlIGNvbWJpbmVkIHdp
dGggIm9yIiwgd2hpbGUgdGhpcyBpcyBhIG5vcm1hbCBlbnVtIHRoYXQgbXVzdApAQCAtNjUsNyAr
OTEsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBVc2FnZSB7IEVuY3J5cHQsIERlY3J5cHQs
IFNpZ24sIFZlcmlmeSwgRGVyaXZlS2V5LCBEZXJpdmVCaXRzLCBXcmFwS2V5LCBVbndyYXBLZXkg
fTsKICAgICBWZWN0b3I8VXNhZ2U+IHVzYWdlcygpIGNvbnN0OwogCi0gICAgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciBhbGdvcml0aG1JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9hbGdv
cml0aG07IH0KKyAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2FsZ29yaXRobUlkZW50aWZpZXI7IH0KICAgICBDcnlwdG9L
ZXlVc2FnZSB1c2FnZXNCaXRtYXAoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlczsgfQogICAgIGJv
b2wgYWxsb3dzKENyeXB0b0tleVVzYWdlIHVzYWdlKSBjb25zdCB7IHJldHVybiB1c2FnZSA9PSAo
bV91c2FnZXMgJiB1c2FnZSk7IH0KIApAQCAtNzQsNyArMTAwLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBWZWN0b3I8dWludDhfdD4gcmFuZG9tRGF0YShzaXplX3QpOwogCiBwcml2YXRlOgotICAg
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgbV9hbGdvcml0aG07CisgICAgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciBtX2FsZ29yaXRobUlkZW50aWZpZXI7CiAgICAgVHlwZSBtX3R5cGU7CiAg
ICAgYm9vbCBtX2V4dHJhY3RhYmxlOwogICAgIENyeXB0b0tleVVzYWdlIG1fdXNhZ2VzOwpAQCAt
OTIsNSArMTE4LDEwIEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9D
bGFzc05hbWUpIFwKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q3J5cHRv
S2V5JiBrZXkpIHsgcmV0dXJuIGtleS5rZXlDbGFzcygpID09IFdlYkNvcmU6OktleUNsYXNzOyB9
IFwKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oVG9DbGFzc05hbWUsIEtleUFsZ29yaXRobUNsYXNzKSBc
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvQ2xhc3NOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OktleUFsZ29yaXRobSYgYWxnb3Jp
dGhtKSB7IHJldHVybiBhbGdvcml0aG0ua2V5QWxnb3JpdGhtQ2xhc3MoKSA9PSBXZWJDb3JlOjpL
ZXlBbGdvcml0aG1DbGFzczsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNl
bmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKICNlbmRpZiAvLyBDcnlwdG9LZXlfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbAppbmRleCBjNGYxYzNjNTMxYjNlMTc4ODJiYzEyNzMw
NDczMWE2NGUyNDk2YzhiLi5kYzc1NmU3MjhiMDI1Nzc1NjVmNmNlNDg2YjAwYzQ4ZDk4ZjM4ZDAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbApAQCAtNDcsNiArNDcsNiBAQCBlbnVt
IEtleVVzYWdlIHsKIF0gaW50ZXJmYWNlIENyeXB0b0tleSB7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEtleVR5cGUgdHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBleHRyYWN0
YWJsZTsKLSAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1dGUgQWxnb3JpdGhtIGFsZ29yaXRo
bTsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8S2V5VXNhZ2U+IHVzYWdlczsKKyAg
ICBbQ2FjaGVkQXR0cmlidXRlLCBDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBvYmpl
Y3QgYWxnb3JpdGhtOworICAgIFtDYWNoZWRBdHRyaWJ1dGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBz
ZXF1ZW5jZTxLZXlVc2FnZT4gdXNhZ2VzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nbnV0bHMvQ3J5cHRvS2V5UlNBR251VExTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nbnV0bHMvQ3J5cHRvS2V5UlNBR251VExTLmNwcAppbmRleCBkNzA0NWE1YjY4NDdiYTc3
MDZjNjFmM2NmMGYxNzc2MTlkMDZiMzljLi5iZmUwMGRiNzlkYWYwYjczMzdjNThiZWExOGNjN2M3
NDA4ZjE0NjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0
b0tleVJTQUdudVRMUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9Dcnlw
dG9LZXlSU0FHbnVUTFMuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5o
IgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRv
S2V5RGF0YVJTQUNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlQYWlyLmgiCkBAIC04
MSwxMCArODAsMTAgQEAgc2l6ZV90IENyeXB0b0tleVJTQTo6a2V5U2l6ZUluQml0cygpIGNvbnN0
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURl
c2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29u
c3QKK3N0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YWxnb3JpdGht
KCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShidWls
ZGVyKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FLZXlBbGdvcml0aG0+KGVtcHR5
U3RyaW5nKCksIDAsIHsgfSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBD
cnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUFFUy5jcHAKaW5kZXggNDRiNTAwN2I5MTI3NjY3ZWYyZDc1NTg5NDg5Yjdi
OTFjNmY1NGI1YS4uYTBhZjI1NDU3MGYxYzEyMjBiMDg5MWFkNGM2N2Q0MjYwYzU3ZDhmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCkBAIC0yOCw3ICsy
OCw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYzLDEwICs2Miw5IEBAIFJlZlB0cjxDcnlw
dG9LZXlBRVM+IENyeXB0b0tleUFFUzo6Z2VuZXJhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBhbGdvcml0aG0sCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlBRVMoYWxnb3Jp
dGhtLCByYW5kb21EYXRhKGxlbmd0aEJpdHMgLyA4KSwgZXh0cmFjdGFibGUsIHVzYWdlcykpOwog
fQogCi12b2lkIENyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9B
bGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitzdGQ6OnVuaXF1ZV9w
dHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QKIHsK
LSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7Ci0gICAg
YnVpbGRlci5hZGQoImxlbmd0aCIsIG1fa2V5LnNpemUoKSAqIDgpOworICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPEFlc0tleUFsZ29yaXRobT4oQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNp
bmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKGFsZ29yaXRobUlkZW50aWZpZXIoKSksIG1fa2V5
LnNpemUoKSAqIDgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gQ3J5cHRv
S2V5QUVTOjpleHBvcnREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUFFUy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5QUVTLmgKaW5kZXggNDVhNWJiODIzNjRlZWIxMWZkYzUzMDUxYjFkZjM1ZmEzNTMyYWZm
Ny4uNTI3MDU5ZjBmYTVhOTNjODUxODhlYTYxMDU1MDRhODM4ZGU1ZThiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKQEAgLTM0LDYgKzM0LDIyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQWVzS2V5QWxnb3JpdGhtIGZpbmFsIDogcHVibGlj
IEtleUFsZ29yaXRobSB7CitwdWJsaWM6CisgICAgQWVzS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgc2l6ZV90IGxlbmd0aCkKKyAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKKyAg
ICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgeworICAgIH0KKworICAgIEtleUFsZ29yaXRo
bUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gS2V5QWxnb3Jp
dGhtQ2xhc3M6OkFFUzsgfQorCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVuZ3RoOyB9CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fbGVuZ3RoOworfTsKKwogY2xhc3Mg
Q3J5cHRvS2V5QUVTIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxDcnlwdG9LZXlBRVM+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFs
Z29yaXRobSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENy
eXB0b0tleVVzYWdlIHVzYWdlKQpAQCAtNDYsMTUgKzYyLDE1IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBnZW5lcmF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyLCBzaXplX3QgbGVuZ3RoQml0cywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2Up
OwogCi0gICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBDcnlwdG9LZXlDbGFzczo6QUVTOyB9CisgICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6QUVTOyB9CiAKICAgICBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKIHByaXZhdGU6
CiAgICAgQ3J5cHRvS2V5QUVTKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSk7CiAKLSAg
ICB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRp
b25CdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tl
eURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0IGZpbmFsOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3QgZmluYWw7CiAKICAgICBW
ZWN0b3I8dWludDhfdD4gbV9rZXk7CiB9OwpAQCAtNjMsNiArNzksOCBAQCBwcml2YXRlOgogCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5QUVTLCBDcnlwdG9LZXlD
bGFzczo6QUVTKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oQWVzS2V5
QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6QUVTKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNV
QlRMRV9DUllQVE8pCiAKICNlbmRpZiAvLyBDcnlwdG9LZXlBRVNfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAppbmRleCBhZjYwNGY0Zjc3Y2U0MmQzYTJk
YzRmMDYyZDI1NDk1NTQyMjRiMGMwLi5jNTc0Zjc3MmY2OWZkOGMyNmM5NGM4ODFmYmE4NGMzMDA4
NzE3Zjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlI
TUFDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNw
cApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKLSNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCIKICNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleURhdGFPY3RldFNlcXVl
bmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02NywxNSArNjYsMTAg
QEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmdlbmVyYXRlKHNpemVfdCBs
ZW5ndGhCeXRlcywgQ3J5cHRvQWxnb3JpdGgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0
b0tleUhNQUMocmFuZG9tRGF0YShsZW5ndGhCeXRlcyksIGhhc2gsIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMpKTsKIH0KIAotdm9pZCBDcnlwdG9LZXlITUFDOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9u
KENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK3N0ZDo6
dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtKCkg
Y29uc3QKIHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRl
cik7Ci0KLSAgICBhdXRvIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVt
cHR5Q2xvbmUoKTsKLSAgICBoYXNoRGVzY3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNo
KSk7Ci0gICAgYnVpbGRlci5hZGQoImhhc2giLCAqaGFzaERlc2NyaXB0aW9uQnVpbGRlcik7Ci0K
LSAgICBidWlsZGVyLmFkZCgibGVuZ3RoIiwgbV9rZXkuc2l6ZSgpKTsKKyAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxIbWFjS2V5QWxnb3JpdGhtPihDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6
c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIoYWxnb3JpdGhtSWRlbnRpZmllcigpKSwKKyAg
ICAgICAgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlm
aWVyKG1faGFzaCksIG1fa2V5LnNpemUoKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9L
ZXlEYXRhPiBDcnlwdG9LZXlITUFDOjpleHBvcnREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAppbmRleCA0NjhhZDA3N2YxOTYxYWQ4ZGFkN2I0
YjQzOTk4ZWIxNzJjZDIzMzA3Li41MjQyMDdlMWJkNTkyNzZjZDVjZTgwYTQ5ZTVlYjM2YmRhMzNi
MWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFD
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCkBAIC0z
Myw2ICszMywyNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEhtYWNLZXlBbGdv
cml0aG0gZmluYWwgOiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBIbWFjS2V5
QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoLCBzaXplX3Qg
bGVuZ3RoKQorICAgICAgICA6IEtleUFsZ29yaXRobShuYW1lKQorICAgICAgICAsIG1faGFzaCho
YXNoKQorICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICB7CisgICAgfQorCisgICAgS2V5
QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBL
ZXlBbGdvcml0aG1DbGFzczo6SE1BQzsgfQorCisgICAgY29uc3QgU3RyaW5nJiBoYXNoKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNoOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1faGFzaDsKKyAgICBzaXplX3Qg
bV9sZW5ndGg7Cit9OworCiBjbGFzcyBDcnlwdG9LZXlITUFDIGZpbmFsIDogcHVibGljIENyeXB0
b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDcnlwdG9LZXlITUFDPiBjcmVhdGUoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwg
Ym9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCkBAIC00NCw3ICs2Myw3IEBA
IHB1YmxpYzoKICAgICAvLyBJZiBsZW5ndGhCeXRlcyBpcyAwLCBhIHJlY29tbWVuZGVkIGxlbmd0
aCBpcyB1c2VkLCB3aGljaCBpcyB0aGUgc2l6ZSBvZiB0aGUgYXNzb2NpYXRlZCBoYXNoIGZ1bmN0
aW9uJ3MgYmxvY2sgc2l6ZS4KICAgICBzdGF0aWMgUmVmUHRyPENyeXB0b0tleUhNQUM+IGdlbmVy
YXRlKHNpemVfdCBsZW5ndGhCeXRlcywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSk7CiAKLSAgICBDcnlwdG9LZXlDbGFzcyBr
ZXlDbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpITUFDOyB9
CisgICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDcnlw
dG9LZXlDbGFzczo6SE1BQzsgfQogCiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXkoKSBj
b25zdCB7IHJldHVybiBtX2tleTsgfQogCkBAIC01Myw4ICs3Miw4IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgQ3J5cHRvS2V5SE1BQyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2Fn
ZSk7CiAKLSAgICB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0tleURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0IGZpbmFsOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3QgZmluYWw7
CiAKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIG1faGFzaDsKICAgICBWZWN0b3I8dWlu
dDhfdD4gbV9rZXk7CkBAIC02NCw1ICs4Myw3IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlITUFDLCBDcnlwdG9LZXlDbGFzczo6SE1BQykK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKEhtYWNLZXlBbGdvcml0aG0s
IEtleUFsZ29yaXRobUNsYXNzOjpITUFDKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCiAjZW5kaWYgLy8gQ3J5cHRvS2V5SE1BQ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleVJTQS5oCmluZGV4IDZlYTIwMGI4YzE3MWU4MzIwMzRmNDZlZjQzZGM5NjVmMGM1
ZDllZTAuLjcyNmM5YmYzMGY5NWIwZjM2NGM0OGY1ZTY5NGYzNjZhOWJhMmViOTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCkBAIC00Nyw2ICs0Nyw0MSBAQCBj
bGFzcyBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czsKIGNsYXNzIENyeXB0b0tleVBhaXI7CiBj
bGFzcyBQcm9taXNlV3JhcHBlcjsKIAorY2xhc3MgUnNhS2V5QWxnb3JpdGhtIDogcHVibGljIEtl
eUFsZ29yaXRobSB7CitwdWJsaWM6CisgICAgUnNhS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYg
bmFtZSwgc2l6ZV90IG1vZHVsdXNMZW5ndGgsIFZlY3Rvcjx1aW50OF90PiYmIHB1YmxpY0V4cG9u
ZW50KQorICAgICAgICA6IEtleUFsZ29yaXRobShuYW1lKQorICAgICAgICAsIG1fbW9kdWx1c0xl
bmd0aChtb2R1bHVzTGVuZ3RoKQorICAgICAgICAsIG1fcHVibGljRXhwb25lbnQoV1RGTW92ZShw
dWJsaWNFeHBvbmVudCkpCisgICAgeworICAgIH0KKworICAgIEtleUFsZ29yaXRobUNsYXNzIGtl
eUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xh
c3M6OlJTQTsgfQorCisgICAgc2l6ZV90IG1vZHVsdXNMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X21vZHVsdXNMZW5ndGg7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHB1YmxpY0V4cG9u
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9wdWJsaWNFeHBvbmVudDsgfQorCitwcml2YXRlOgorICAg
IHNpemVfdCBtX21vZHVsdXNMZW5ndGg7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcHVibGljRXhw
b25lbnQ7Cit9OworCitjbGFzcyBSc2FIYXNoZWRLZXlBbGdvcml0aG0gZmluYWwgOiBwdWJsaWMg
UnNhS2V5QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBSc2FIYXNoZWRLZXlBbGdvcml0aG0oY29u
c3QgU3RyaW5nJiBuYW1lLCBzaXplX3QgbW9kdWx1c0xlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYg
cHVibGljRXhwb25lbnQsIGNvbnN0IFN0cmluZyYgaGFzaCkKKyAgICAgICAgOiBSc2FLZXlBbGdv
cml0aG0obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpCisgICAg
ICAgICwgbV9oYXNoKGhhc2gpCisgICAgeworICAgIH0KKworICAgIEtleUFsZ29yaXRobUNsYXNz
IGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xh
c3M6OkhSU0E7IH0KKworICAgIGNvbnN0IFN0cmluZyYgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzaDsgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX2hhc2g7Cit9OworCiBjbGFzcyBDcnlw
dG9LZXlSU0EgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPENyeXB0b0tleVJTQT4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIENyeXB0
b0tleVR5cGUgdHlwZSwgUGxhdGZvcm1SU0FLZXkgcGxhdGZvcm1LZXksIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQpAQCAtNjksMTAgKzEwNCwxMCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIENyeXB0b0tleVJTQShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgaGFzSGFzaCwgQ3J5cHRvS2V5VHlwZSwg
UGxhdGZvcm1SU0FLZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAg
IENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ3J5cHRv
S2V5Q2xhc3M6OlJTQTsgfQorICAgIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OlJTQTsgfQogCi0gICAgdm9pZCBidWlsZEFsZ29y
aXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRh
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYnVp
bGRBbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5
RGF0YT4gZXhwb3J0RGF0YSgpIGNvbnN0IGZpbmFsOwogCiAgICAgUGxhdGZvcm1SU0FLZXkgbV9w
bGF0Zm9ybUtleTsKIApAQCAtODQsNSArMTE5LDkgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleVJTQSwgQ3J5cHRvS2V5Q2xhc3M6OlJTQSkK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKFJzYUtleUFsZ29yaXRobSwg
S2V5QWxnb3JpdGhtQ2xhc3M6OlJTQSkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxH
T1JJVEhNKFJzYUhhc2hlZEtleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0EpCisK
ICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKICNlbmRpZiAvLyBDcnlwdG9LZXlSU0Ff
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCmluZGV4
IDE0MGM5YjMxODhmOWI4YTRhZjY0OWRmNDg3NGY3ZDA5MDlkMGExYTIuLmQ0ZGY2Y2E0YzYzOGIx
ZGI0OGE1ZmM1ZjllYjFjODIyOTBiOGM4MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoU1VC
VExFX0NSWVBUTykKIAogI2luY2x1ZGUgIkNvbW1vbkNyeXB0b1V0aWxpdGllcy5oIgotI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgogI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlQYWlyLmgiCkBAIC0xNjAsMjYgKzE1OSwyMiBAQCBz
aXplX3QgQ3J5cHRvS2V5UlNBOjprZXlTaXplSW5CaXRzKCkgY29uc3QKICAgICByZXR1cm4gbW9k
dWx1cy5zaXplKCkgKiA4OwogfQogCi12b2lkIENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG1E
ZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNv
bnN0CitzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxn
b3JpdGhtKCkgY29uc3QKIHsKLSAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRp
b24oYnVpbGRlcik7Ci0KKyAgICBTdHJpbmcgbmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihhbGdvcml0aG1JZGVudGlmaWVyKCkpOwog
ICAgIFZlY3Rvcjx1aW50OF90PiBtb2R1bHVzOwogICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNF
eHBvbmVudDsKICAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gZ2V0UHVibGljS2V5Q29tcG9u
ZW50cyhtX3BsYXRmb3JtS2V5LCBtb2R1bHVzLCBwdWJsaWNFeHBvbmVudCk7CiAgICAgaWYgKHN0
YXR1cykgewogICAgICAgICBXVEZMb2dBbHdheXMoIkNvdWxkbid0IGdldCBSU0Ega2V5IGNvbXBv
bmVudHMsIHN0YXR1cyAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcHVi
bGljRXhwb25lbnQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNh
S2V5QWxnb3JpdGhtPihuYW1lLCAwLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CiAgICAgfQog
Ci0gICAgYnVpbGRlci5hZGQoIm1vZHVsdXNMZW5ndGgiLCBtb2R1bHVzLnNpemUoKSAqIDgpOwot
ICAgIGJ1aWxkZXIuYWRkKCJwdWJsaWNFeHBvbmVudCIsIHB1YmxpY0V4cG9uZW50KTsKLQotICAg
IGlmIChtX3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCkgewotICAgICAgICBhdXRvIGhhc2hEZXNj
cmlwdGlvbkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsKLSAgICAgICAgaGFz
aERlc2NyaXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6
OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOwotICAgICAgICBidWlsZGVy
LmFkZCgiaGFzaCIsICpoYXNoRGVzY3JpcHRpb25CdWlsZGVyKTsKLSAgICB9CisgICAgc2l6ZV90
IG1vZHVsdXNMZW5ndGggPSBtb2R1bHVzLnNpemUoKSAqIDg7CisgICAgaWYgKG1fcmVzdHJpY3Rl
ZFRvU3BlY2lmaWNIYXNoKQorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FIYXNo
ZWRLZXlBbGdvcml0aG0+KG5hbWUsIG1vZHVsdXNMZW5ndGgsIFdURk1vdmUocHVibGljRXhwb25l
bnQpLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZp
ZXIobV9oYXNoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGht
PihuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBDcnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBj
b25zdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGJkZjQxNzZiMzc0MjRiZTU3NjA3NDI4N2E4NThmNDM2ODQ0NzcxOGMuLmJh
ODRlMWIyODhiMzM4MGI1ODZmMTgxMzI2MWRlOTlmMTU4ODJlYjcgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAxNi0wOS0xMyAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYkNyeXB0byBhbGdvcml0aG1zIHNob3VsZCBiZSBleHBvc2VkIHZpYSBLZXlBbGdv
cml0aG0gZGljdGlvbmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI4NzQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzM1OTQzOD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBCcmVudCBGdWxnaGFtIGFuZCBDaHJpcyBEdW1lei4KKworICAgICAg
ICAqIGNyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0aG0tZ2MtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdjLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS11c2FnZXMtZ2Mt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2NyeXB0by1rZXkt
dXNhZ2VzLWdjLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvaG1hYy1nZW5l
cmF0ZS1rZXktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvaG1hYy1nZW5l
cmF0ZS1rZXkuaHRtbDoKKwogMjAxNi0wOS0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBTcGVlZCB1cCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBhIGJpdCBi
eSBtYWtpbmcgaXQgYSBidWlsdGluCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdjLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0aG0tZ2MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmZkMjhmZmM3ZWM5NjBmODYzNWEzMDA3ZDA1NjUwN2M1ZDE0NmE4YWMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdj
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0IHRoYXQgQ3J5cHRvS2V5LmFsZ29p
dGhtIHByZXNlcnZlcyBjdXN0b20gcHJvcGVydGllcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKKworR2VuZXJhdGluZyBhIEhNQUMga2V5IHdpdGggZGVmYXVsdCBsZW5ndGguLi4K
K1BBU1Mga2V5LmFsZ29yaXRobSA9PT0ga2V5LmFsZ29yaXRobSBpcyB0cnVlCitQQVNTIGtleS5h
bGdvcml0aG0uZm9vIGlzICJiYXIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9j
cnlwdG8ta2V5LWFsZ29yaXRobS1nYy5odG1sIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9j
cnlwdG8ta2V5LWFsZ29yaXRobS1nYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYzM5YzhiYjM5NTc3NmRi
MGQ3MmE2NTkxYjgwMzljZjQxNTFkODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9j
cnlwdG8vc3VidGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdjLmh0bWwKQEAgLTAsMCArMSw0NSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgQ3J5cHRvS2V5LmFsZ29p
dGhtIHByZXNlcnZlcyBjdXN0b20gcHJvcGVydGllcy4iKTsKK2pzVGVzdElzQXN5bmMgPSB0cnVl
OworCitkZWJ1ZygiXG5HZW5lcmF0aW5nIGEgSE1BQyBrZXkgd2l0aCBkZWZhdWx0IGxlbmd0aC4u
LiIpOworY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTogImhtYWMiLCBoYXNoOiAic2hh
LTEifSwgdHJ1ZSwgWyJzaWduIiwgInZlcmlmeSJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgewor
ICAgIGtleSA9IHJlc3VsdDsKK30pOworCitmdW5jdGlvbiBzdGFydFRlc3QoKQoreworICAgIHNo
b3VsZEJlVHJ1ZSgia2V5LmFsZ29yaXRobSA9PT0ga2V5LmFsZ29yaXRobSIpOworICAgIGtleS5h
bGdvcml0aG0uZm9vID0gImJhciI7CisgICAgZ2MoKTsKKyAgICBzZXRUaW1lb3V0KGNvbnRpbnVl
VGVzdCwgMTApOworfQorCitmdW5jdGlvbiBjb250aW51ZVRlc3QoKQoreworICAgIGdjKCk7Cisg
ICAgc2V0VGltZW91dChmaW5pc2hUZXN0LCAxMCk7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaFRlc3Qo
KQoreworICAgIGdjKCk7CisgICAgc2hvdWxkQmUoJ2tleS5hbGdvcml0aG0uZm9vJywgJyJiYXIi
Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3dpbmRvdy5vbmxvYWQgPSBzdGFydFRlc3Q7
CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LXVzYWdlcy1nYy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9jcnlwdG8vc3VidGxlL2NyeXB0by1rZXktdXNhZ2VzLWdjLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZTEzNTBkZGZhMjNhYjY3MjQ2ZDUzZjhkZjNhNDAwZmFlNmZhNWQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LXVzYWdlcy1n
Yy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdCB0aGF0IENyeXB0b0tleS5hbGdv
aXRobSBwcmVzZXJ2ZXMgY3VzdG9tIHByb3BlcnRpZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCisKK0dlbmVyYXRpbmcgYSBITUFDIGtleSB3aXRoIGRlZmF1bHQgbGVuZ3RoLi4u
CitQQVNTIGtleS5hbGdvcml0aG0gPT09IGtleS5hbGdvcml0aG0gaXMgdHJ1ZQorUEFTUyBrZXku
dXNhZ2VzLmZvbyBpcyAiYmFyIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvY3J5
cHRvLWtleS11c2FnZXMtZ2MuaHRtbCBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvY3J5cHRv
LWtleS11c2FnZXMtZ2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmJkNGNiNTA4ZDdhOWVhMWYzZTQyYjA5
MWY1NWJlZDA3ZDRkYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9jcnlwdG8ta2V5LXVzYWdlcy1nYy5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IENyeXB0b0tleS5hbGdvaXRobSBwcmVzZXJ2
ZXMgY3VzdG9tIHByb3BlcnRpZXMuIik7Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZGVidWco
IlxuR2VuZXJhdGluZyBhIEhNQUMga2V5IHdpdGggZGVmYXVsdCBsZW5ndGguLi4iKTsKK2NyeXB0
by5zdWJ0bGUuZ2VuZXJhdGVLZXkoe25hbWU6ICJobWFjIiwgaGFzaDogInNoYS0xIn0sIHRydWUs
IFsic2lnbiIsICJ2ZXJpZnkiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSBy
ZXN1bHQ7Cit9KTsKKworZnVuY3Rpb24gc3RhcnRUZXN0KCkKK3sKKyAgICBzaG91bGRCZVRydWUo
ImtleS5hbGdvcml0aG0gPT09IGtleS5hbGdvcml0aG0iKTsKKyAgICBrZXkudXNhZ2VzLmZvbyA9
ICJiYXIiOworICAgIGdjKCk7CisgICAgc2V0VGltZW91dChjb250aW51ZVRlc3QsIDEwKTsKK30K
KworZnVuY3Rpb24gY29udGludWVUZXN0KCkKK3sKKyAgICBnYygpOworICAgIHNldFRpbWVvdXQo
ZmluaXNoVGVzdCwgMTApOworfQorCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkKK3sKKyAgICBnYygp
OworICAgIHNob3VsZEJlKCdrZXkudXNhZ2VzLmZvbycsICciYmFyIicpOworICAgIGZpbmlzaEpT
VGVzdCgpOworfQorCit3aW5kb3cub25sb2FkID0gc3RhcnRUZXN0OworCis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1h
Yy1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9o
bWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKaW5kZXggNWJkMzFiZDBhN2E3MjE2ZjZkNDBi
MWY2ZjU1ODkwZTBhZDEzYWNlNC4uNTM5MjFlNDI3MDNmZTE0YjJlZWVlNjIxYWExMjEzMDNiNjAy
OGNiYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRl
LWtleS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdl
bmVyYXRlLWtleS1leHBlY3RlZC50eHQKQEAgLTEzLDYgKzEzLDcgQEAgUEFTUyBrZXkudHlwZSBp
cyAnc2VjcmV0JwogUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXkuYWxnb3Jp
dGhtLm5hbWUgaXMgJ0hNQUMnCiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDY0CitQQVNT
IGtleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdTSEEtMScKIFBBU1Mga2V5LnVzYWdlcyBpcyBb
InNpZ24iLCAidmVyaWZ5Il0KIAogR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBsZW5ndGgu
Li4KQEAgLTIwLDYgKzIxLDcgQEAgUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0JwogUEFTUyBrZXku
ZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ0hNQUMnCiBQ
QVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDUKK1BBU1Mga2V5LmFsZ29yaXRobS5oYXNoLm5h
bWUgaXMgJ1NIQS0xJwogUEFTUyBrZXkudXNhZ2VzIGlzIFsic2lnbiJdCiBQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0
bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbCBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1h
Yy1nZW5lcmF0ZS1rZXkuaHRtbAppbmRleCAzYWZjNTY4NWMxNzhhMTIzN2E2YTkzNjAwYzRmMDlh
M2E5MTg4ODliLi4yYjliZjNhMTdhNzE4YWFmMDY3NGI5NzhkZTAwNDAwYzVmODdkMmQwIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5Lmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5odG1sCkBA
IC0yOCw2ICsyOCw3IEBAIGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoe25hbWU6ICJobWFjIiwg
aGFzaDogInNoYS0xIn0sIGV4dHJhY3RhYmxlLCBbInNpZ24iLCAiCiAgICAgc2hvdWxkQmUoImtl
eS5leHRyYWN0YWJsZSIsICJ0cnVlIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFt
ZSIsICInSE1BQyciKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiNjQi
KTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5oYXNoLm5hbWUiLCAiJ1NIQS0xJyIpOwog
ICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgJ1sic2lnbiIsICJ2ZXJpZnkiXScpOwogCiAgICAg
ZGVidWcoIlxuR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBsZW5ndGguLi4iKTsKQEAgLTM5
LDYgKzQwLDcgQEAgY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTogImhtYWMiLCBoYXNo
OiAic2hhLTEifSwgZXh0cmFjdGFibGUsIFsic2lnbiIsICIKICAgICBzaG91bGRCZSgia2V5LmV4
dHJhY3RhYmxlIiwgInRydWUiKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1lIiwg
IidITUFDJyIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICI1Iik7Cisg
ICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidTSEEtMSciKTsKICAgICBz
aG91bGRCZSgia2V5LnVzYWdlcyIsICdbInNpZ24iXScpOwogICAgIGZpbmlzaEpTVGVzdCgpOwog
fSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288779</attachid>
            <date>2016-09-14 00:36:31 -0700</date>
            <delta_ts>2016-09-14 11:50:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128748-20160914003355.patch</filename>
            <type>text/plain</type>
            <size>44811</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZkYThkNTYxY2U2OTEz
OWUyZWE3MWNhZWJhMGIwM2MyOGYyYTcyZS4uMjE1ODJmOTY3OGE0ZGNlYThkY2I2NGZhMzBiYmE1
MTA0ODM4ZDAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE2LTA5LTEyICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg3NDgKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzI3MzU5NDM4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50
IEZ1bGdoYW0gYW5kIENocmlzIER1bWV6LgorCisgICAgICAgIFJlcGxhY2UgY3VzdG9tIENyeXB0
b0FsZ29yaXRobUJ1aWxkZXIvYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbiB3aXRoIEtleUFsZ29y
aXRobSBkaWN0aW9uYXJ5IHdoaWNoIGlzCisgICAgICAgIGRlZmluZWQgYnkgdGhlIHNwZWM6IGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9XZWJDcnlwdG9BUEkvI2tleS1hbGdvcml0aG0tZGljdGlvbmFy
eS4gTW9yZW92ZXIsIG1hcmsKKyAgICAgICAgQ3J5cHRvS2V5LnVzYWdlcyBhcyBDYWNoZWRBdHRy
aWJ1dGUuCisKKyAgICAgICAgVGVzdHM6IGNyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0
aG0tZ2MuaHRtbAorICAgICAgICAgICAgICAgY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LXVzYWdl
cy1nYy5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0
Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgUmVt
b3ZlIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAuCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXI6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXI6OmNyZWF0ZUVtcHR5Q2xvbmUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3J5cHRvS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5OjphbGdv
cml0aG0pOgorICAgICAgICBHZXQgcmlkIG9mIGRlcGVuZGVuY3kgb24gQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdv
cml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgUmVwbGFjZSBpdCB3
aXRoIEtleUFsZ29yaXRobS4KKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6Q3J5cHRvS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
Y3J5cHRvL0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpLZXlB
bGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjp+S2V5QWxnb3JpdGht
KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YWxnb3JpdGhtSWRlbnRpZmllcik6Cisg
ICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5pZGw6CisgICAgICAgIEFkZCBLZXlBbGdvcml0aG0g
ZGljdGlvbmFyeSB3aGljaCBpcyByZXR1cm5lZCB2aWEgQ3J5cHRvS2V5LmJ1aWxkQWxnb3JpdGht
KCkgbWV0aG9kLAorICAgICAgICBhbmQgcmVuYW1lIG1fYWxnb3JpdGhtIHRvIG1fYWxnb3JpdGht
SWRlbnRpZmllciB0byBkaXN0aW5ndXNoIGl0IHdpdGggbmV3bHkKKyAgICAgICAgYWRkZWQgS2V5
QWxnb3JpdGhtIGRpY3Rpb25hcnkuCisgICAgICAgICogY3J5cHRvL2dudXRscy9DcnlwdG9LZXlS
U0FHbnVUTFMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRBbGdvcml0aG0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAgICAoV2ViQ29yZTo6QWVz
S2V5QWxnb3JpdGhtOjpBZXNLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6QWVzS2V5
QWxnb3JpdGhtOjp+QWVzS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxn
b3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGht
RGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhN
QUMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhtYWNLZXlBbGdvcml0aG06OkhtYWNLZXlBbGdvcml0
aG0pOgorICAgICAgICAoV2ViQ29yZTo6SG1hY0tleUFsZ29yaXRobTo6fkhtYWNLZXlBbGdvcml0
aG0pOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UnNhS2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29y
ZTo6UnNhS2V5QWxnb3JpdGhtOjp+UnNhS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6
OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtKToKKyAgICAgICAg
KFdlYkNvcmU6OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6flJzYUhhc2hlZEtleUFsZ29yaXRobSk6
CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorCiAyMDE2
LTA5LTEyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHBv
c3QtbGFuZGluZyByZXZpZXcgY29tbWVudHMgYWZ0ZXIgcjIwNTc4NwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCBjNTFkMWMyNzAyZjcwYTVjNjlkNjM3YzgwNmNlZjhjNTc1YTY2YTlkLi42
ZjY4N2U4ZWNkNzNkYTg4YjQ5ZDg3OTc1OGNhYmQ1NTY3ZjAzNzJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtNDAzLDcgKzQwMyw2IEBAIGVuZGlmICgpCiBpZiAoRU5BQkxFX1NVQlRM
RV9DUllQVE8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIGNyeXB0
by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0
b0tleVBhaXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGI3OTIzZjM5MjNiMzA4
MWQyZTNjOGRjMTNiMjFlMDUwYjllZmZjMTEuLjdiN2JlMmY5MTQyNDk3MzgwYWM2ZDk3MTFiZTI4
ZTI3NjhlMTVkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zOTYsNyArMzk2LDYg
QEAgZW5kaWYgKCkKIGlmIChFTkFCTEVfU1VCVExFX0NSWVBUTykKICAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICAgICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5jcHAKLSAgICAg
ICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAKICAgICAgICAg
Y3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRv
S2V5LmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRvS2V5UGFpci5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKaW5kZXggNGE4Zjg2MjBkYjAyMGJjMzJkZTMzMzdmMTAyMTc4OGM5NWVkMzdiZS4u
MzRiOGRiMjcwYmY2OTRiMmUwN2QxODQ5MWFhODc0Njc0MzU2N2ZjOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UKQEAgLTE3Niw3ICsxNzYsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKIAogICAgIGNyeXB0by9Db21tb25DcnlwdG9VdGlsaXRpZXMuY3BwCiAgICAgY3J5cHRvL0Ny
eXB0b0FsZ29yaXRobS5jcHAKLSAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyLmNwcAogICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKICAgICBj
cnlwdG8vQ3J5cHRvS2V5LmNwcAogICAgIGNyeXB0by9DcnlwdG9LZXlQYWlyLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFj
MDkxYWJjNDgxMWRkNGE0MjY5NmMxZGVjNmMxZTU2NDNkMmZiMDkuLmZiMTBkNTBlMTBjMzIwYjli
OWFkNmMyYjA5MDYyMTMyYjRkMmVlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU5NzIsOCArNTk3Miw2IEBACiAJCUUxNTdB
OEU0MTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RTIxODE3M0EzQTAwOUY4MjFEIC8qIENy
eXB0b0tleS5jcHAgKi87IH07CiAJCUUxNTdBOEU1MTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9L
ZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdB
OEUzMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuaCAqLzsgfTsKIAkJRTE1N0E4RTgxODE4
NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEU2MTgxODRDNjcwMDlGODIxRCAvKiBK
U0NyeXB0b0tleUN1c3RvbS5jcHAgKi87IH07Ci0JCUUxNTdBOEVDMTgxODUxQUMwMDlGODIxRCAv
KiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RUExODE4NTFBQzAwOUY4MjFEIC8q
IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi87IH07Ci0JCUUxNTdBOEVE
MTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVCMTgx
ODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLzsg
fTsKIAkJRTE1N0E4RjAxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3
QThFRTE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLzsg
fTsKIAkJRTE1N0E4RjExODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4
RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oICovOyB9Owog
CQlFMTVBMzZENzExMDQ1NzIwMDBCN0I2MzkgLyogWE1MTlNOYW1lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5
IC8qIFhNTE5TTmFtZXMuaCAqLzsgfTsKQEAgLTEzNTQ5LDggKzEzNTQ3LDYgQEAKIAkJRTE1N0E4
RTIxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDcnlwdG9LZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMTU3QThFMzE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0tleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTU3QThFNjE4MTg0QzY3MDA5RjgyMUQgLyogSlNDcnlwdG9LZXlDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDcnlwdG9LZXlDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTU3QThFQTE4MTg1MUFDMDA5Rjgy
MUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNTdBOEVCMTgxODUxQUMwMDlG
ODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTdBOEVFMTgxODU0MjUwMDlGODIxRCAv
KiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTE1N0E4RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1QTM2RDYx
MTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gWE1MTlNOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIx
ODYsOCArMjIxODIsNiBAQAogCQkJCUUxRkUxMzczMTg0MDJBNjcwMDg5MkYxMyAvKiBDb21tb25D
cnlwdG9VdGlsaXRpZXMuaCAqLywKIAkJCQlFMTcyQUY2QjE4MEYyNEM2MDBGQkFEQjkgLyogQ3J5
cHRvQWxnb3JpdGhtLmNwcCAqLywKIAkJCQlFMTcyQUY2QzE4MEYyNEM2MDBGQkFEQjkgLyogQ3J5
cHRvQWxnb3JpdGhtLmggKi8sCi0JCQkJRTE1N0E4RUExODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi8sCi0JCQkJRTE1N0E4RUIxODE4NTFB
QzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oICovLAogCQkJ
CUUxQzY1NzI0MTgxNkU2OUQwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgg
Ki8sCiAJCQkJRTFDNjU3MjYxODE2RjlGRTAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMuaCAqLywKIAkJCQlFMUZGOEY2QTE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnkuY3BwICovLApAQCAtMjQwODAsNyArMjQwNzQsNiBAQAogCQkJCUUxRkUxMzdC
MTg0RDIxQkIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1cuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxMjVGODNBMTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQ
YXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOUFDM0Y3MTgyNEU1RDEwMDM0OTQyNiAvKiBD
cnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxNTdB
OEVEMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjVGODMyMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9B
bGdvcml0aG1ITUFDLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlEQTI5QzE4MTg5QUREMDAwODhC
QzggLyogQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFDNjU3MUYxODE2RTUwMzAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCBp
biBIZWFkZXJzICovLApAQCAtMjc3OTIsNyArMjc3ODUsNiBAQAogCQkJCUUxMjVGODQ1MTgyNDI1
QzkwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxRkUxMzdBMTg0RDIxQkIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFGRTEzN0UxODREMjcwMjAwODkyRjEzIC8qIENyeXB0
b0FsZ29yaXRobUFFU19LV01hYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMTU3QThFQzE4MTg1
MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxMjVGODMxMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1ITUFDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjVGODM4MTgyMkYxRUIwMEQ4NENEOSAv
KiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY4RjZD
MTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuY3BwCmluZGV4IGE5ZjM3MjY1NzBlMjg5NGFiYTYxZTg1Y2MwOWYwOWMx
NDhiMThmOTguLmQ5OWMyN2FiZDk0YzRiNjEwZjBmZDgzNmUyMmI2ZDc2ZDk4NGEzN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1C
dWlsZGVyLmNwcApAQCAtNDgsMTEgKzQ4LDYgQEAgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjp+
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyKCkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcj4gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjpj
cmVhdGVFbXB0eUNsb25lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxK
U0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI+KG1fZXhlYyk7Ci19Ci0KIHZvaWQgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCB1bnNpZ25lZCB2YWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CkBAIC03NSwxMiArNzAsMTEgQEAgdm9pZCBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgYnVmZmUKICAgICBtX2RpY3Rpb25hcnktPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
YXJyYXlWaWV3LT53cmFwKG1fZXhlYywgdm0uZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAotdm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXks
IGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgbmVzdGVkQnVpbGRlcikK
K3ZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25z
dCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXImIG5lc3RlZEJ1aWxkZXIpCiB7CiAgICAgVk0mIHZt
ID0gbV9leGVjLT52bSgpOwogICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBrZXkpOwotICAgIGNvbnN0IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ciYganNCdWlsZGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVy
Jj4obmVzdGVkQnVpbGRlcik7Ci0gICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50
aWZpZXIsIGpzQnVpbGRlci5yZXN1bHQoKSk7CisgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIG5lc3RlZEJ1aWxkZXIucmVzdWx0KCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlci5oCmluZGV4IGQ1MzdiNGM2NzcxYjk3YTEwNzgyYTQ1ZmU5OWQ4
YWE4NWIwMGVlZTkuLjI4NzNiZDFmNzI1NTY5YTc1ZTUxZWMzMmY0NTlhNTIwMzljOWFlNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlci5oCkBAIC0yNiw3ICsyNiwxMCBAQAogI2lmbmRlZiBKU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXJfaAogI2RlZmluZSBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXJfaAogCi0jaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKIApAQCAtMzcsMTkgKzQwLDE4IEBAIGNsYXNzIEpTT2JqZWN0OwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBmaW5hbCA6IHB1
YmxpYyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIgeworY2xhc3MgSlNDcnlwdG9B
bGdvcml0aG1CdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0NyeXB0b0FsZ29y
aXRobUJ1aWxkZXIpOwogcHVibGljOgogICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcihKU0M6
OkV4ZWNTdGF0ZSopOwogICAgIHZpcnR1YWwgfkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcigpOwog
CiAgICAgSlNDOjpKU09iamVjdCogcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9kaWN0aW9uYXJ5
OyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyPiBjcmVhdGVFbXB0eUNsb25lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkZChj
b25zdCBjaGFyKiwgdW5zaWduZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIq
LCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGQoY29uc3QgY2hhcios
IGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIG92ZXJyaWRlOworICAg
IHZvaWQgYWRkKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBhZGQoY29uc3QgY2hh
ciosIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mKTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgSlNDcnlwdG9B
bGdvcml0aG1CdWlsZGVyJik7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhl
YzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNw
cAppbmRleCA1ODU5NGJlZjJkYjI5YTJmMDk3NWVjOTlmZmNhZjg0MDUxZGI5ZDUzLi5lOTc1NDAw
ZGJlYWQ3NjUwMzc1NzRiNWJhYTM4Y2JhYjMwM2QwYTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAog
CiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIK
KyNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCiAj
aW5jbHVkZSAiSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKQEAgLTM3LDExICs0MSw1MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEpTVmFsdWUgSlNDcnlwdG9LZXk6OmFsZ29yaXRobShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUp
IGNvbnN0CiB7CisgICAgaWYgKG1fYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gbV9hbGdvcml0
aG0uZ2V0KCk7CisKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgYnVpbGRlcigmc3RhdGUp
OwotICAgIHdyYXBwZWQoKS5idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOwotICAg
IHJldHVybiBidWlsZGVyLnJlc3VsdCgpOwotfQogCisgICAgc3RkOjp1bmlxdWVfcHRyPEtleUFs
Z29yaXRobT4gYWxnb3JpdGhtID0gd3JhcHBlZCgpLmJ1aWxkQWxnb3JpdGhtKCk7CisgICAgc3dp
dGNoIChhbGdvcml0aG0tPmtleUFsZ29yaXRobUNsYXNzKCkpIHsKKyAgICBjYXNlIEtleUFsZ29y
aXRobUNsYXNzOjpBRVM6IHsKKyAgICAgICAgYXV0byYgYWVzQWxnb3JpdGhtID0gZG93bmNhc3Q8
QWVzS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5hZGQoIm5hbWUi
LCBhZXNBbGdvcml0aG0ubmFtZSgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGFl
c0FsZ29yaXRobS5sZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEtl
eUFsZ29yaXRobUNsYXNzOjpITUFDOiB7CisgICAgICAgIGF1dG8mIGhtYWNBbGdvcml0aG0gPSBk
b3duY2FzdDxIbWFjS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoIm5hbWUiLCBobWFjQWxnb3JpdGhtLm5hbWUoKSk7CisgICAgICAgIEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlciBobWFjSGFzaCgmc3RhdGUpOworICAgICAgICBobWFjSGFzaC5hZGQoIm5hbWUi
LCBobWFjQWxnb3JpdGhtLmhhc2goKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgaG1h
Y0hhc2gpOworICAgICAgICBidWlsZGVyLmFkZCgibGVuZ3RoIiwgaG1hY0FsZ29yaXRobS5sZW5n
dGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEtleUFsZ29yaXRobUNsYXNz
OjpIUlNBOiB7CisgICAgICAgIGF1dG8mIHJzYUFsZ29yaXRobSA9IGRvd25jYXN0PFJzYUhhc2hl
ZEtleUFsZ29yaXRobT4oKmFsZ29yaXRobSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJuYW1lIiwg
cnNhQWxnb3JpdGhtLm5hbWUoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJtb2R1bHVzTGVuZ3Ro
IiwgcnNhQWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJw
dWJsaWNFeHBvbmVudCIsIHJzYUFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCgpKTsKKyAgICAgICAg
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyIHJzYUhhc2goJnN0YXRlKTsKKyAgICAgICAgcnNhSGFz
aC5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0uaGFzaCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQo
Imhhc2giLCByc2FIYXNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5QWxn
b3JpdGhtQ2xhc3M6OlJTQTogeworICAgICAgICBhdXRvJiByc2FBbGdvcml0aG0gPSBkb3duY2Fz
dDxSc2FLZXlBbGdvcml0aG0+KCphbGdvcml0aG0pOworICAgICAgICBidWlsZGVyLmFkZCgibmFt
ZSIsIHJzYUFsZ29yaXRobS5uYW1lKCkpOworICAgICAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xl
bmd0aCIsIHJzYUFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKCkpOworICAgICAgICBidWlsZGVyLmFk
ZCgicHVibGljRXhwb25lbnQiLCByc2FBbGdvcml0aG0ucHVibGljRXhwb25lbnQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBtX2FsZ29yaXRobS5zZXQoc3RhdGUudm0o
KSwgdGhpcywgYnVpbGRlci5yZXN1bHQoKSk7CisgICAgcmV0dXJuIG1fYWxnb3JpdGhtLmdldCgp
OworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjI3N2U3NjhhNTI4ODAzOTI5ODgxOGI4MDE4
ZGZkMmVkYTU3NmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOjpDcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIoKQotewotfQotCi1DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXI6On5DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIoKQotewotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdmZTE0YmIwYzQ5YTQ0
NjA3OTMxMTIzYWM4NWE0YzRlMzdlZjg1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXJfaAotI2RlZmlu
ZSBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXJfaAotCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLSNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcik7Ci1wdWJs
aWM6Ci0gICAgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCk7Ci0gICAgdmlydHVh
bCB+Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+IGNyZWF0ZUVt
cHR5Q2xvbmUoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0
IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwg
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgPSAwOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0j
ZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5jcHAKaW5kZXggZDgyN2Y3Y2NlMjQ4MDJlYjFjNTlmYWRiZGNjZDFhYmFl
OGVjNzU4MS4uNjAwNzUwNjY3MWQ1OGYyMTI0NmFmZDI1ZTZiOWI3ZTQxODUxODViZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKQEAgLTI4LDE1ICsyOCwxMyBAQAogCiAjaWYgRU5B
QkxFKFNVQlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1
ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNyeXB0b0tleTo6Q3J5
cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBUeXBlIHR5cGUsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlcykKLSAgICA6IG1fYWxnb3JpdGht
KGFsZ29yaXRobSkKK0NyeXB0b0tleTo6Q3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtSWRlbnRpZmllciwgVHlwZSB0eXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZSB1c2FnZXMpCisgICAgOiBtX2FsZ29yaXRobUlkZW50aWZpZXIoYWxnb3JpdGht
SWRlbnRpZmllcikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9leHRyYWN0YWJsZShleHRy
YWN0YWJsZSkKICAgICAsIG1fdXNhZ2VzKHVzYWdlcykKQEAgLTQ3LDEyICs0NSw2IEBAIENyeXB0
b0tleTo6fkNyeXB0b0tleSgpCiB7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRo
bURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikg
Y29uc3QKLXsKLSAgICBidWlsZGVyLmFkZCgibmFtZSIsIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRobSkpOwotICAgIC8vIFN1
YmNsYXNzZXMgd2lsbCBhZGQgb3RoZXIga2V5cy4KLX0KLQogYXV0byBDcnlwdG9LZXk6OnVzYWdl
cygpIGNvbnN0IC0+IFZlY3RvcjxVc2FnZT4KIHsKICAgICAvLyBUaGUgcmVzdWx0IGlzIG9yZGVy
ZWQgYWxwaGFiZXRpY2FsbHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5
cHRvS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKaW5kZXggZWI2Yjcw
MTZkNzUxYTk3MjFhMDlhYjVhMGQzMzMyOGIyZGYxZGRkZS4uODc3ZjZiZjcxYmRiNTAxNzdjYTRl
NTMwNTg2ZWJmZWRjOTkzNjFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxMSArNDMsMzYgQEAg
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwogY2xhc3MgQ3J5cHRvS2V5
RGF0YTsKIAogZW51bSBjbGFzcyBDcnlwdG9LZXlDbGFzcyB7Ci0gICAgSE1BQywKICAgICBBRVMs
CisgICAgSE1BQywKICAgICBSU0EKIH07CiAKK2VudW0gY2xhc3MgS2V5QWxnb3JpdGhtQ2xhc3Mg
eworICAgIEFFUywKKyAgICBITUFDLAorICAgIFJTQSwKKyAgICBIUlNBCit9OworCitjbGFzcyBL
ZXlBbGdvcml0aG0geworcHVibGljOgorICAgIGV4cGxpY2l0IEtleUFsZ29yaXRobShjb25zdCBT
dHJpbmcmIG5hbWUpCisgICAgICAgIDogbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKyAgICB2
aXJ0dWFsIH5LZXlBbGdvcml0aG0oKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEtleUFs
Z29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgPSAwOworCisgICAgY29uc3Qg
U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKK3ByaXZhdGU6CisgICAg
U3RyaW5nIG1fbmFtZTsKK307CisKIGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBSZWZDb3VudGVk
PENyeXB0b0tleT4gewogcHVibGljOgogICAgIHVzaW5nIFR5cGUgPSBDcnlwdG9LZXlUeXBlOwpA
QCAtNTcsNyArODMsNyBAQCBwdWJsaWM6CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBi
b29sIGV4dHJhY3RhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYWN0YWJsZTsgfQotICAgIHZp
cnR1YWwgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlciYpIGNvbnN0OworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEtleUFs
Z29yaXRobT4gYnVpbGRBbGdvcml0aG0oKSBjb25zdCA9IDA7CiAKICAgICAvLyBGSVhNRTogQ29u
ZnVzaW5nIHRvIGhhdmUgQ3J5cHRvS2V5VXNhZ2UgYW5kIENyeXB0b0tleTo6VXNhZ2UgbmFtZWQg
YWxtb3N0IHRoZSBzYW1lLCBidXQgYmUgc2xpZ2h0bHkgZGlmZmVyZW50LgogICAgIC8vIENyeXB0
b0tleVVzYWdlIHZhbHVlcyBhcmUgYml0IG1hc2tzIHNvIHRoZXkgY2FuIGJlIGNvbWJpbmVkIHdp
dGggIm9yIiwgd2hpbGUgdGhpcyBpcyBhIG5vcm1hbCBlbnVtIHRoYXQgbXVzdApAQCAtNjUsNyAr
OTEsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBVc2FnZSB7IEVuY3J5cHQsIERlY3J5cHQs
IFNpZ24sIFZlcmlmeSwgRGVyaXZlS2V5LCBEZXJpdmVCaXRzLCBXcmFwS2V5LCBVbndyYXBLZXkg
fTsKICAgICBWZWN0b3I8VXNhZ2U+IHVzYWdlcygpIGNvbnN0OwogCi0gICAgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciBhbGdvcml0aG1JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9hbGdv
cml0aG07IH0KKyAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2FsZ29yaXRobUlkZW50aWZpZXI7IH0KICAgICBDcnlwdG9L
ZXlVc2FnZSB1c2FnZXNCaXRtYXAoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlczsgfQogICAgIGJv
b2wgYWxsb3dzKENyeXB0b0tleVVzYWdlIHVzYWdlKSBjb25zdCB7IHJldHVybiB1c2FnZSA9PSAo
bV91c2FnZXMgJiB1c2FnZSk7IH0KIApAQCAtNzQsNyArMTAwLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBWZWN0b3I8dWludDhfdD4gcmFuZG9tRGF0YShzaXplX3QpOwogCiBwcml2YXRlOgotICAg
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgbV9hbGdvcml0aG07CisgICAgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciBtX2FsZ29yaXRobUlkZW50aWZpZXI7CiAgICAgVHlwZSBtX3R5cGU7CiAg
ICAgYm9vbCBtX2V4dHJhY3RhYmxlOwogICAgIENyeXB0b0tleVVzYWdlIG1fdXNhZ2VzOwpAQCAt
OTIsNSArMTE4LDEwIEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9D
bGFzc05hbWUpIFwKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q3J5cHRv
S2V5JiBrZXkpIHsgcmV0dXJuIGtleS5rZXlDbGFzcygpID09IFdlYkNvcmU6OktleUNsYXNzOyB9
IFwKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oVG9DbGFzc05hbWUsIEtleUFsZ29yaXRobUNsYXNzKSBc
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvQ2xhc3NOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OktleUFsZ29yaXRobSYgYWxnb3Jp
dGhtKSB7IHJldHVybiBhbGdvcml0aG0ua2V5QWxnb3JpdGhtQ2xhc3MoKSA9PSBXZWJDb3JlOjpL
ZXlBbGdvcml0aG1DbGFzczsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNl
bmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKICNlbmRpZiAvLyBDcnlwdG9LZXlfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbAppbmRleCBjNGYxYzNjNTMxYjNlMTc4ODJiYzEyNzMw
NDczMWE2NGUyNDk2YzhiLi5kYzc1NmU3MjhiMDI1Nzc1NjVmNmNlNDg2YjAwYzQ4ZDk4ZjM4ZDAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmlkbApAQCAtNDcsNiArNDcsNiBAQCBlbnVt
IEtleVVzYWdlIHsKIF0gaW50ZXJmYWNlIENyeXB0b0tleSB7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEtleVR5cGUgdHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBleHRyYWN0
YWJsZTsKLSAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1dGUgQWxnb3JpdGhtIGFsZ29yaXRo
bTsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8S2V5VXNhZ2U+IHVzYWdlczsKKyAg
ICBbQ2FjaGVkQXR0cmlidXRlLCBDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBvYmpl
Y3QgYWxnb3JpdGhtOworICAgIFtDYWNoZWRBdHRyaWJ1dGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBz
ZXF1ZW5jZTxLZXlVc2FnZT4gdXNhZ2VzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nbnV0bHMvQ3J5cHRvS2V5UlNBR251VExTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nbnV0bHMvQ3J5cHRvS2V5UlNBR251VExTLmNwcAppbmRleCBkNzA0NWE1YjY4NDdiYTc3
MDZjNjFmM2NmMGYxNzc2MTlkMDZiMzljLi5iMWI5MDc5NTdhM2Y4NTU1MTEzZjZkZjg2MTNkN2E2
ZTI5Y2NjZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ251dGxzL0NyeXB0
b0tleVJTQUdudVRMUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9Dcnlw
dG9LZXlSU0FHbnVUTFMuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5o
IgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRv
S2V5RGF0YVJTQUNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlQYWlyLmgiCkBAIC04
MSwxMCArODAsMTAgQEAgc2l6ZV90IENyeXB0b0tleVJTQTo6a2V5U2l6ZUluQml0cygpIGNvbnN0
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURl
c2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29u
c3QKK3N0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVpbGRBbGdv
cml0aG0oKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGJ1aWxkZXIpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRobT4o
ZW1wdHlTdHJpbmcoKSwgMCwgeyB9KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURh
dGE+IENyeXB0b0tleVJTQTo6ZXhwb3J0RGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAppbmRleCA0NGI1MDA3YjkxMjc2NjdlZjJkNzU1ODk0
ODliN2I5MWM2ZjU0YjVhLi5hMGFmMjU0NTcwZjFjMTIyMGIwODkxYWQ0YzY3ZDQyNjBjNTdkOGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAKQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjMsMTAgKzYyLDkgQEAgUmVmUHRy
PENyeXB0b0tleUFFUz4gQ3J5cHRvS2V5QUVTOjpnZW5lcmF0ZShDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGFsZ29yaXRobSwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleUFFUyhh
bGdvcml0aG0sIHJhbmRvbURhdGEobGVuZ3RoQml0cyAvIDgpLCBleHRyYWN0YWJsZSwgdXNhZ2Vz
KSk7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK3N0ZDo6dW5p
cXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG0oKSBjb25z
dAogewotICAgIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihidWlsZGVyKTsK
LSAgICBidWlsZGVyLmFkZCgibGVuZ3RoIiwgbV9rZXkuc2l6ZSgpICogOCk7CisgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8QWVzS2V5QWxnb3JpdGhtPihDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIoYWxnb3JpdGhtSWRlbnRpZmllcigpKSwg
bV9rZXkuc2l6ZSgpICogOCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBD
cnlwdG9LZXlBRVM6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlBRVMuaAppbmRleCA0NWE1YmI4MjM2NGVlYjExZmRjNTMwNTFiMWRmMzVmYTM1
MzJhZmY3Li41MjcwNTlmMGZhNWE5M2M4NTE4OGVhNjEwNTUwNGE4MzhkZTVlOGJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaApAQCAtMzQsNiArMzQsMjIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBZXNLZXlBbGdvcml0aG0gZmluYWwgOiBw
dWJsaWMgS2V5QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBBZXNLZXlBbGdvcml0aG0oY29uc3Qg
U3RyaW5nJiBuYW1lLCBzaXplX3QgbGVuZ3RoKQorICAgICAgICA6IEtleUFsZ29yaXRobShuYW1l
KQorICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICB7CisgICAgfQorCisgICAgS2V5QWxn
b3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlB
bGdvcml0aG1DbGFzczo6QUVTOyB9CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KKworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9sZW5ndGg7Cit9OworCiBj
bGFzcyBDcnlwdG9LZXlBRVMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPENyeXB0b0tleUFFUz4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCkBAIC00NiwxNSArNjIsMTUgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIFJlZlB0cjxDcnlwdG9LZXlBRVM+IGdlbmVyYXRlKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIsIHNpemVfdCBsZW5ndGhCaXRzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlV
c2FnZSk7CiAKLSAgICBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIENyeXB0b0tleUNsYXNzOjpBRVM7IH0KKyAgICBDcnlwdG9LZXlDbGFzcyBrZXlDbGFz
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpBRVM7IH0KIAogICAgIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KIAogcHJp
dmF0ZToKICAgICBDcnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsK
IAotICAgIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvS2V5RGF0YT4gZXhwb3J0RGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxLZXlBbGdvcml0aG0+IGJ1aWxkQWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBmaW5hbDsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBtX2tleTsKIH07CkBAIC02Myw2ICs3OSw4IEBAIHByaXZhdGU6
CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlBRVMsIENyeXB0
b0tleUNsYXNzOjpBRVMpCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShB
ZXNLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpBRVMpCisKICNlbmRpZiAvLyBFTkFC
TEUoU1VCVExFX0NSWVBUTykKIAogI2VuZGlmIC8vIENyeXB0b0tleUFFU19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCmluZGV4IGFmNjA0ZjRmNzdjZTQy
ZDNhMmRjNGYwNjJkMjU0OTU1NDIyNGIwYzAuLmM1NzRmNzcyZjY5ZmQ4YzI2Yzk0Yzg4MWZiYTg0
YzMwMDg3MTdmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUhNQUMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhN
QUMuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAot
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgogI2luY2x1ZGUg
IkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0
U2VxdWVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTY3LDE1ICs2
NiwxMCBAQCBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gQ3J5cHRvS2V5SE1BQzo6Z2VuZXJhdGUoc2l6
ZV90IGxlbmd0aEJ5dGVzLCBDcnlwdG9BbGdvcml0aAogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q3J5cHRvS2V5SE1BQyhyYW5kb21EYXRhKGxlbmd0aEJ5dGVzKSwgaGFzaCwgZXh0cmFjdGFibGUs
IHVzYWdlcykpOwogfQogCi12b2lkIENyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtRGVzY3Jp
cHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBjb25zdAor
c3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0
aG0oKSBjb25zdAogewotICAgIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihi
dWlsZGVyKTsKLQotICAgIGF1dG8gaGFzaERlc2NyaXB0aW9uQnVpbGRlciA9IGJ1aWxkZXIuY3Jl
YXRlRW1wdHlDbG9uZSgpOwotICAgIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXItPmFkZCgibmFtZSIs
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllciht
X2hhc2gpKTsKLSAgICBidWlsZGVyLmFkZCgiaGFzaCIsICpoYXNoRGVzY3JpcHRpb25CdWlsZGVy
KTsKLQotICAgIGJ1aWxkZXIuYWRkKCJsZW5ndGgiLCBtX2tleS5zaXplKCkpOworICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEhtYWNLZXlBbGdvcml0aG0+KENyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihhbGdvcml0aG1JZGVudGlmaWVyKCkp
LAorICAgICAgICBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklk
ZW50aWZpZXIobV9oYXNoKSwgbV9rZXkuc2l6ZSgpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGE+IENyeXB0b0tleUhNQUM6OmV4cG9ydERhdGEoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCmluZGV4IDQ2OGFkMDc3ZjE5NjFhZDhk
YWQ3YjRiNDM5OThlYjE3MmNkMjMzMDcuLjUyNDIwN2UxYmQ1OTI3NmNkNWNlODBhNDllNWViMzZi
ZGEzM2IxZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eUhNQUMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgK
QEAgLTMzLDYgKzMzLDI1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSG1hY0tl
eUFsZ29yaXRobSBmaW5hbCA6IHB1YmxpYyBLZXlBbGdvcml0aG0geworcHVibGljOgorICAgIEht
YWNLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGhhc2gsIHNp
emVfdCBsZW5ndGgpCisgICAgICAgIDogS2V5QWxnb3JpdGhtKG5hbWUpCisgICAgICAgICwgbV9o
YXNoKGhhc2gpCisgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgIHsKKyAgICB9CisKKyAg
ICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIEtleUFsZ29yaXRobUNsYXNzOjpITUFDOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGhhc2go
KSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9oYXNoOworICAgIHNp
emVfdCBtX2xlbmd0aDsKK307CisKIGNsYXNzIENyeXB0b0tleUhNQUMgZmluYWwgOiBwdWJsaWMg
Q3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleUhNQUM+IGNyZWF0
ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBo
YXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKQEAgLTQ0LDcgKzYz
LDcgQEAgcHVibGljOgogICAgIC8vIElmIGxlbmd0aEJ5dGVzIGlzIDAsIGEgcmVjb21tZW5kZWQg
bGVuZ3RoIGlzIHVzZWQsIHdoaWNoIGlzIHRoZSBzaXplIG9mIHRoZSBhc3NvY2lhdGVkIGhhc2gg
ZnVuY3Rpb24ncyBibG9jayBzaXplLgogICAgIHN0YXRpYyBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4g
Z2VuZXJhdGUoc2l6ZV90IGxlbmd0aEJ5dGVzLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhh
c2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAgIENyeXB0b0tleUNs
YXNzIGtleUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OkhN
QUM7IH0KKyAgICBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IENyeXB0b0tleUNsYXNzOjpITUFDOyB9CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKQEAgLTUzLDggKzcyLDggQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBDcnlwdG9LZXlITUFDKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlKTsKIAotICAgIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdv
cml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0RGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IGJ1aWxkQWxnb3JpdGhtKCkgY29uc3QgZmluYWw7
CisgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBm
aW5hbDsKIAogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgbV9oYXNoOwogICAgIFZlY3Rv
cjx1aW50OF90PiBtX2tleTsKQEAgLTY0LDUgKzgzLDcgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUhNQUMsIENyeXB0b0tleUNsYXNzOjpI
TUFDKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oSG1hY0tleUFsZ29y
aXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUMpCisKICNlbmRpZiAvLyBFTkFCTEUoU1VCVExF
X0NSWVBUTykKICNlbmRpZiAvLyBDcnlwdG9LZXlITUFDX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5UlNBLmgKaW5kZXggNmVhMjAwYjhjMTcxZTgzMjAzNGY0NmVmNDNkYzk2
NWYwYzVkOWVlMC4uNzI2YzliZjMwZjk1YjBmMzY0YzQ4ZjVlNjk0ZjM2NmE5YmEyZWI5MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKQEAgLTQ3LDYgKzQ3LDQx
IEBAIGNsYXNzIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOwogY2xhc3MgQ3J5cHRvS2V5UGFp
cjsKIGNsYXNzIFByb21pc2VXcmFwcGVyOwogCitjbGFzcyBSc2FLZXlBbGdvcml0aG0gOiBwdWJs
aWMgS2V5QWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBSc2FLZXlBbGdvcml0aG0oY29uc3QgU3Ry
aW5nJiBuYW1lLCBzaXplX3QgbW9kdWx1c0xlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgcHVibGlj
RXhwb25lbnQpCisgICAgICAgIDogS2V5QWxnb3JpdGhtKG5hbWUpCisgICAgICAgICwgbV9tb2R1
bHVzTGVuZ3RoKG1vZHVsdXNMZW5ndGgpCisgICAgICAgICwgbV9wdWJsaWNFeHBvbmVudChXVEZN
b3ZlKHB1YmxpY0V4cG9uZW50KSkKKyAgICB7CisgICAgfQorCisgICAgS2V5QWxnb3JpdGhtQ2xh
c3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLZXlBbGdvcml0
aG1DbGFzczo6UlNBOyB9CisKKyAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kdWx1c0xlbmd0aDsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcHVibGlj
RXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3B1YmxpY0V4cG9uZW50OyB9CisKK3ByaXZhdGU6
CisgICAgc2l6ZV90IG1fbW9kdWx1c0xlbmd0aDsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9wdWJs
aWNFeHBvbmVudDsKK307CisKK2NsYXNzIFJzYUhhc2hlZEtleUFsZ29yaXRobSBmaW5hbCA6IHB1
YmxpYyBSc2FLZXlBbGdvcml0aG0geworcHVibGljOgorICAgIFJzYUhhc2hlZEtleUFsZ29yaXRo
bShjb25zdCBTdHJpbmcmIG5hbWUsIHNpemVfdCBtb2R1bHVzTGVuZ3RoLCBWZWN0b3I8dWludDhf
dD4mJiBwdWJsaWNFeHBvbmVudCwgY29uc3QgU3RyaW5nJiBoYXNoKQorICAgICAgICA6IFJzYUtl
eUFsZ29yaXRobShuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSkK
KyAgICAgICAgLCBtX2hhc2goaGFzaCkKKyAgICB7CisgICAgfQorCisgICAgS2V5QWxnb3JpdGht
Q2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlBbGdvcml0
aG1DbGFzczo6SFJTQTsgfQorCisgICAgY29uc3QgU3RyaW5nJiBoYXNoKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNoOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1faGFzaDsKK307CisKIGNsYXNz
IENyeXB0b0tleVJTQSBmaW5hbCA6IHB1YmxpYyBDcnlwdG9LZXkgewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8Q3J5cHRvS2V5UlNBPiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgaGFzSGFzaCwg
Q3J5cHRvS2V5VHlwZSB0eXBlLCBQbGF0Zm9ybVJTQUtleSBwbGF0Zm9ybUtleSwgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCkBAIC02OSwxMCArMTA0LDEwIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgQ3J5cHRvS2V5UlNBKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIs
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBoYXNIYXNoLCBDcnlwdG9LZXlU
eXBlLCBQbGF0Zm9ybVJTQUtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwog
Ci0gICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBD
cnlwdG9LZXlDbGFzczo6UlNBOyB9CisgICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6UlNBOyB9CiAKLSAgICB2b2lkIGJ1aWxk
QWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IGV4cG9y
dERhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGht
PiBidWlsZEFsZ29yaXRobSgpIGNvbnN0IGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3QgZmluYWw7CiAKICAgICBQbGF0Zm9ybVJTQUtl
eSBtX3BsYXRmb3JtS2V5OwogCkBAIC04NCw1ICsxMTksOSBAQCBwcml2YXRlOgogCiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5UlNBLCBDcnlwdG9LZXlDbGFzczo6
UlNBKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oUnNhS2V5QWxnb3Jp
dGhtLCBLZXlBbGdvcml0aG1DbGFzczo6UlNBKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tF
WV9BTEdPUklUSE0oUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6SFJT
QSkKKwogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogI2VuZGlmIC8vIENyeXB0b0tl
eVJTQV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJT
QU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAK
aW5kZXggMTQwYzliMzE4OGY5YjhhNGFmNjQ5ZGY0ODc0ZjdkMDkwOWQwYTFhMi4uZDRkZjZjYTRj
NjM4YjFkYjQ4YTVmYzVmOWViMWM4MjI5MGI4YzgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKQEAgLTE2MCwyNiArMTU5LDIy
IEBAIHNpemVfdCBDcnlwdG9LZXlSU0E6OmtleVNpemVJbkJpdHMoKSBjb25zdAogICAgIHJldHVy
biBtb2R1bHVzLnNpemUoKSAqIDg7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29y
aXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRl
cikgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVp
bGRBbGdvcml0aG0oKSBjb25zdAogewotICAgIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNj
cmlwdGlvbihidWlsZGVyKTsKLQorICAgIFN0cmluZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKGFsZ29yaXRobUlkZW50aWZpZXIo
KSk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZHVsdXM7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1
YmxpY0V4cG9uZW50OwogICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBnZXRQdWJsaWNLZXlD
b21wb25lbnRzKG1fcGxhdGZvcm1LZXksIG1vZHVsdXMsIHB1YmxpY0V4cG9uZW50KTsKICAgICBp
ZiAoc3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGRuJ3QgZ2V0IFJTQSBrZXkg
Y29tcG9uZW50cywgc3RhdHVzICVkIiwgc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBwdWJsaWNFeHBvbmVudC5jbGVhcigpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxSc2FLZXlBbGdvcml0aG0+KG5hbWUsIDAsIFdURk1vdmUocHVibGljRXhwb25lbnQpKTsKICAg
ICB9CiAKLSAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xlbmd0aCIsIG1vZHVsdXMuc2l6ZSgpICog
OCk7Ci0gICAgYnVpbGRlci5hZGQoInB1YmxpY0V4cG9uZW50IiwgcHVibGljRXhwb25lbnQpOwot
Ci0gICAgaWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKSB7Ci0gICAgICAgIGF1dG8gaGFz
aERlc2NyaXB0aW9uQnVpbGRlciA9IGJ1aWxkZXIuY3JlYXRlRW1wdHlDbG9uZSgpOwotICAgICAg
ICBoYXNoRGVzY3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7Ci0gICAgICAgIGJ1
aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIpOwotICAgIH0KKyAgICBz
aXplX3QgbW9kdWx1c0xlbmd0aCA9IG1vZHVsdXMuc2l6ZSgpICogODsKKyAgICBpZiAobV9yZXN0
cmljdGVkVG9TcGVjaWZpY0hhc2gpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJz
YUhhc2hlZEtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNF
eHBvbmVudCksIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRl
bnRpZmllcihtX2hhc2gpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FLZXlBbGdv
cml0aG0+KG5hbWUsIG1vZHVsdXNMZW5ndGgsIFdURk1vdmUocHVibGljRXhwb25lbnQpKTsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IENyeXB0b0tleVJTQTo6ZXhwb3J0RGF0
YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYmRmNDE3NmIzNzQyNGJlNTc2MDc0Mjg3YTg1OGY0MzY4NDQ3NzE4
Yy4uYmE4NGUxYjI4OGIzMzgwYjU4NmYxODEzMjYxZGU5OWYxNTg4MmViNyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDE2LTA5LTEzICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29yaXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtl
eUFsZ29yaXRobSBkaWN0aW9uYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjg3NDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI3MzU5NDM4Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50IEZ1bGdoYW0gYW5kIENocmlzIER1bWV6LgorCisg
ICAgICAgICogY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LWFsZ29yaXRobS1nYy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0aG0t
Z2MuaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LXVzYWdl
cy1nYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvY3J5cHRv
LWtleS11c2FnZXMtZ2MuaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9obWFj
LWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQ6CisgICAgICAgICogY3J5cHRvL3N1YnRsZS9obWFj
LWdlbmVyYXRlLWtleS5odG1sOgorCiAyMDE2LTA5LTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFNwZWVkIHVwIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGEg
Yml0IGJ5IG1ha2luZyBpdCBhIGJ1aWx0aW4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0aG0tZ2MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LWFsZ29yaXRobS1nYy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmQyOGZmYzdlYzk2MGY4NjM1YTMwMDdkMDU2NTA3YzVkMTQ2YThhYwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0
aG0tZ2MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgdGhhdCBDcnlwdG9LZXku
YWxnb2l0aG0gcHJlc2VydmVzIGN1c3RvbSBwcm9wZXJ0aWVzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworCitHZW5lcmF0aW5nIGEgSE1BQyBrZXkgd2l0aCBkZWZhdWx0IGxlbmd0
aC4uLgorUEFTUyBrZXkuYWxnb3JpdGhtID09PSBrZXkuYWxnb3JpdGhtIGlzIHRydWUKK1BBU1Mg
a2V5LmFsZ29yaXRobS5mb28gaXMgImJhciIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdjLmh0bWwgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNjMzljOGJiMzk1
Nzc2ZGIwZDcyYTY1OTFiODAzOWNmNDE1MWQ4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2NyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0aG0tZ2MuaHRtbApAQCAtMCwwICsx
LDQ1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBDcnlwdG9LZXku
YWxnb2l0aG0gcHJlc2VydmVzIGN1c3RvbSBwcm9wZXJ0aWVzLiIpOworanNUZXN0SXNBc3luYyA9
IHRydWU7CisKK2RlYnVnKCJcbkdlbmVyYXRpbmcgYSBITUFDIGtleSB3aXRoIGRlZmF1bHQgbGVu
Z3RoLi4uIik7CitjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5KHtuYW1lOiAiaG1hYyIsIGhhc2g6
ICJzaGEtMSJ9LCB0cnVlLCBbInNpZ24iLCAidmVyaWZ5Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0
KSB7CisgICAga2V5ID0gcmVzdWx0OworfSk7CisKK2Z1bmN0aW9uIHN0YXJ0VGVzdCgpCit7Cisg
ICAgc2hvdWxkQmVUcnVlKCJrZXkuYWxnb3JpdGhtID09PSBrZXkuYWxnb3JpdGhtIik7CisgICAg
a2V5LmFsZ29yaXRobS5mb28gPSAiYmFyIjsKKyAgICBnYygpOworICAgIHNldFRpbWVvdXQoY29u
dGludWVUZXN0LCAxMCk7Cit9CisKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdCgpCit7CisgICAgZ2Mo
KTsKKyAgICBzZXRUaW1lb3V0KGZpbmlzaFRlc3QsIDEwKTsKK30KKworZnVuY3Rpb24gZmluaXNo
VGVzdCgpCit7CisgICAgZ2MoKTsKKyAgICBzaG91bGRCZSgna2V5LmFsZ29yaXRobS5mb28nLCAn
ImJhciInKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKword2luZG93Lm9ubG9hZCA9IHN0YXJ0
VGVzdDsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9jcnlwdG8vc3VidGxlL2NyeXB0by1rZXktdXNhZ2VzLWdjLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS11c2FnZXMtZ2MtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJlMTM1MGRkZmEyM2FiNjcyNDZkNTNmOGRmM2E0MDBmYWU2ZmE1ZDkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2NyeXB0by1rZXktdXNh
Z2VzLWdjLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0IHRoYXQgQ3J5cHRvS2V5
LmFsZ29pdGhtIHByZXNlcnZlcyBjdXN0b20gcHJvcGVydGllcy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKKworR2VuZXJhdGluZyBhIEhNQUMga2V5IHdpdGggZGVmYXVsdCBsZW5n
dGguLi4KK1BBU1Mga2V5LmFsZ29yaXRobSA9PT0ga2V5LmFsZ29yaXRobSBpcyB0cnVlCitQQVNT
IGtleS51c2FnZXMuZm9vIGlzICJiYXIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9jcnlwdG8ta2V5LXVzYWdlcy1nYy5odG1sIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9j
cnlwdG8ta2V5LXVzYWdlcy1nYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2YmQ0Y2I1MDhkN2E5ZWExZjNl
NDJiMDkxZjU1YmVkMDdkNGRiODkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jcnlw
dG8vc3VidGxlL2NyeXB0by1rZXktdXNhZ2VzLWdjLmh0bWwKQEAgLTAsMCArMSw0NSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgQ3J5cHRvS2V5LmFsZ29pdGhtIHBy
ZXNlcnZlcyBjdXN0b20gcHJvcGVydGllcy4iKTsKK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitk
ZWJ1ZygiXG5HZW5lcmF0aW5nIGEgSE1BQyBrZXkgd2l0aCBkZWZhdWx0IGxlbmd0aC4uLiIpOwor
Y3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTogImhtYWMiLCBoYXNoOiAic2hhLTEifSwg
dHJ1ZSwgWyJzaWduIiwgInZlcmlmeSJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtl
eSA9IHJlc3VsdDsKK30pOworCitmdW5jdGlvbiBzdGFydFRlc3QoKQoreworICAgIHNob3VsZEJl
VHJ1ZSgia2V5LmFsZ29yaXRobSA9PT0ga2V5LmFsZ29yaXRobSIpOworICAgIGtleS51c2FnZXMu
Zm9vID0gImJhciI7CisgICAgZ2MoKTsKKyAgICBzZXRUaW1lb3V0KGNvbnRpbnVlVGVzdCwgMTAp
OworfQorCitmdW5jdGlvbiBjb250aW51ZVRlc3QoKQoreworICAgIGdjKCk7CisgICAgc2V0VGlt
ZW91dChmaW5pc2hUZXN0LCAxMCk7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKQoreworICAg
IGdjKCk7CisgICAgc2hvdWxkQmUoJ2tleS51c2FnZXMuZm9vJywgJyJiYXIiJyk7CisgICAgZmlu
aXNoSlNUZXN0KCk7Cit9CisKK3dpbmRvdy5vbmxvYWQgPSBzdGFydFRlc3Q7CisKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9obWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL2htYWMtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dAppbmRleCA1YmQzMWJkMGE3YTcyMTZm
NmQ0MGIxZjZmNTU4OTBlMGFkMTNhY2U0Li41MzkyMWU0MjcwM2ZlMTRiMmVlZWU2MjFhYTEyMTMw
M2I2MDI4Y2JiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2Vu
ZXJhdGUta2V5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2ht
YWMtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dApAQCAtMTMsNiArMTMsNyBAQCBQQVNTIGtleS50
eXBlIGlzICdzZWNyZXQnCiBQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0cnVlCiBQQVNTIGtleS5h
bGdvcml0aG0ubmFtZSBpcyAnSE1BQycKIFBBU1Mga2V5LmFsZ29yaXRobS5sZW5ndGggaXMgNjQK
K1BBU1Mga2V5LmFsZ29yaXRobS5oYXNoLm5hbWUgaXMgJ1NIQS0xJwogUEFTUyBrZXkudXNhZ2Vz
IGlzIFsic2lnbiIsICJ2ZXJpZnkiXQogCiBHZW5lcmF0aW5nIGEga2V5IHdpdGggY3VzdG9tIGxl
bmd0aC4uLgpAQCAtMjAsNiArMjEsNyBAQCBQQVNTIGtleS50eXBlIGlzICdzZWNyZXQnCiBQQVNT
IGtleS5leHRyYWN0YWJsZSBpcyB0cnVlCiBQQVNTIGtleS5hbGdvcml0aG0ubmFtZSBpcyAnSE1B
QycKIFBBU1Mga2V5LmFsZ29yaXRobS5sZW5ndGggaXMgNQorUEFTUyBrZXkuYWxnb3JpdGhtLmhh
c2gubmFtZSBpcyAnU0hBLTEnCiBQQVNTIGtleS51c2FnZXMgaXMgWyJzaWduIl0KIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3J5cHRv
L3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5odG1sIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9obWFjLWdlbmVyYXRlLWtleS5odG1sCmluZGV4IDNhZmM1Njg1YzE3OGExMjM3YTZhOTM2MDBj
NGYwOWEzYTkxODg4OWIuLjJiOWJmM2ExN2E3MThhYWYwNjc0Yjk3OGRlMDA0MDBjNWY4N2QyZDAg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXku
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5Lmh0
bWwKQEAgLTI4LDYgKzI4LDcgQEAgY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTogImht
YWMiLCBoYXNoOiAic2hhLTEifSwgZXh0cmFjdGFibGUsIFsic2lnbiIsICIKICAgICBzaG91bGRC
ZSgia2V5LmV4dHJhY3RhYmxlIiwgInRydWUiKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRo
bS5uYW1lIiwgIidITUFDJyIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIs
ICI2NCIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmhhc2gubmFtZSIsICInU0hBLTEn
Iik7CiAgICAgc2hvdWxkQmUoImtleS51c2FnZXMiLCAnWyJzaWduIiwgInZlcmlmeSJdJyk7CiAK
ICAgICBkZWJ1ZygiXG5HZW5lcmF0aW5nIGEga2V5IHdpdGggY3VzdG9tIGxlbmd0aC4uLiIpOwpA
QCAtMzksNiArNDAsNyBAQCBjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5KHtuYW1lOiAiaG1hYyIs
IGhhc2g6ICJzaGEtMSJ9LCBleHRyYWN0YWJsZSwgWyJzaWduIiwgIgogICAgIHNob3VsZEJlKCJr
ZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLm5h
bWUiLCAiJ0hNQUMnIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubGVuZ3RoIiwgIjUi
KTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5oYXNoLm5hbWUiLCAiJ1NIQS0xJyIpOwog
ICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgJ1sic2lnbiJdJyk7CiAgICAgZmluaXNoSlNUZXN0
KCk7CiB9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288841</attachid>
            <date>2016-09-14 11:50:49 -0700</date>
            <delta_ts>2016-09-14 17:23:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128748-20160914114812.patch</filename>
            <type>text/plain</type>
            <size>44866</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZkYThkNTYxY2U2OTEz
OWUyZWE3MWNhZWJhMGIwM2MyOGYyYTcyZS4uMjE1ODJmOTY3OGE0ZGNlYThkY2I2NGZhMzBiYmE1
MTA0ODM4ZDAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE2LTA5LTEyICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ3J5cHRvIGFsZ29y
aXRobXMgc2hvdWxkIGJlIGV4cG9zZWQgdmlhIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg3NDgKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzI3MzU5NDM4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50
IEZ1bGdoYW0gYW5kIENocmlzIER1bWV6LgorCisgICAgICAgIFJlcGxhY2UgY3VzdG9tIENyeXB0
b0FsZ29yaXRobUJ1aWxkZXIvYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbiB3aXRoIEtleUFsZ29y
aXRobSBkaWN0aW9uYXJ5IHdoaWNoIGlzCisgICAgICAgIGRlZmluZWQgYnkgdGhlIHNwZWM6IGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9XZWJDcnlwdG9BUEkvI2tleS1hbGdvcml0aG0tZGljdGlvbmFy
eS4gTW9yZW92ZXIsIG1hcmsKKyAgICAgICAgQ3J5cHRvS2V5LnVzYWdlcyBhcyBDYWNoZWRBdHRy
aWJ1dGUuCisKKyAgICAgICAgVGVzdHM6IGNyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0
aG0tZ2MuaHRtbAorICAgICAgICAgICAgICAgY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LXVzYWdl
cy1nYy5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0
Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgUmVt
b3ZlIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAuCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXI6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXI6OmNyZWF0ZUVtcHR5Q2xvbmUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3J5cHRvS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5OjphbGdv
cml0aG0pOgorICAgICAgICBHZXQgcmlkIG9mIGRlcGVuZGVuY3kgb24gQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdv
cml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgUmVwbGFjZSBpdCB3
aXRoIEtleUFsZ29yaXRobS4KKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6Q3J5cHRvS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
Y3J5cHRvL0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpLZXlB
bGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjp+S2V5QWxnb3JpdGht
KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleTo6YWxnb3JpdGhtSWRlbnRpZmllcik6Cisg
ICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5pZGw6CisgICAgICAgIEFkZCBLZXlBbGdvcml0aG0g
ZGljdGlvbmFyeSB3aGljaCBpcyByZXR1cm5lZCB2aWEgQ3J5cHRvS2V5LmJ1aWxkQWxnb3JpdGht
KCkgbWV0aG9kLAorICAgICAgICBhbmQgcmVuYW1lIG1fYWxnb3JpdGhtIHRvIG1fYWxnb3JpdGht
SWRlbnRpZmllciB0byBkaXN0aW5ndXNoIGl0IHdpdGggbmV3bHkKKyAgICAgICAgYWRkZWQgS2V5
QWxnb3JpdGhtIGRpY3Rpb25hcnkuCisgICAgICAgICogY3J5cHRvL2dudXRscy9DcnlwdG9LZXlS
U0FHbnVUTFMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRBbGdvcml0aG0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAgICAoV2ViQ29yZTo6QWVz
S2V5QWxnb3JpdGhtOjpBZXNLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6QWVzS2V5
QWxnb3JpdGhtOjp+QWVzS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxn
b3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGht
RGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhN
QUMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhtYWNLZXlBbGdvcml0aG06OkhtYWNLZXlBbGdvcml0
aG0pOgorICAgICAgICAoV2ViQ29yZTo6SG1hY0tleUFsZ29yaXRobTo6fkhtYWNLZXlBbGdvcml0
aG0pOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UnNhS2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29y
ZTo6UnNhS2V5QWxnb3JpdGhtOjp+UnNhS2V5QWxnb3JpdGhtKToKKyAgICAgICAgKFdlYkNvcmU6
OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6UnNhSGFzaGVkS2V5QWxnb3JpdGhtKToKKyAgICAgICAg
KFdlYkNvcmU6OlJzYUhhc2hlZEtleUFsZ29yaXRobTo6flJzYUhhc2hlZEtleUFsZ29yaXRobSk6
CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOiBEZWxldGVkLgorCiAyMDE2
LTA5LTEyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHBv
c3QtbGFuZGluZyByZXZpZXcgY29tbWVudHMgYWZ0ZXIgcjIwNTc4NwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCBjNTFkMWMyNzAyZjcwYTVjNjlkNjM3YzgwNmNlZjhjNTc1YTY2YTlkLi42
ZjY4N2U4ZWNkNzNkYTg4YjQ5ZDg3OTc1OGNhYmQ1NTY3ZjAzNzJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtNDAzLDcgKzQwMyw2IEBAIGVuZGlmICgpCiBpZiAoRU5BQkxFX1NVQlRM
RV9DUllQVE8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIGNyeXB0
by9DcnlwdG9BbGdvcml0aG0uY3BwCi0gICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIuY3BwCiAgICAgICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0b0tleS5jcHAKICAgICAgICAgY3J5cHRvL0NyeXB0
b0tleVBhaXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGI3OTIzZjM5MjNiMzA4
MWQyZTNjOGRjMTNiMjFlMDUwYjllZmZjMTEuLjdiN2JlMmY5MTQyNDk3MzgwYWM2ZDk3MTFiZTI4
ZTI3NjhlMTVkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zOTYsNyArMzk2LDYg
QEAgZW5kaWYgKCkKIGlmIChFTkFCTEVfU1VCVExFX0NSWVBUTykKICAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICAgICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5jcHAKLSAgICAg
ICAgY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAKICAgICAgICAg
Y3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRv
S2V5LmNwcAogICAgICAgICBjcnlwdG8vQ3J5cHRvS2V5UGFpci5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKaW5kZXggNGE4Zjg2MjBkYjAyMGJjMzJkZTMzMzdmMTAyMTc4OGM5NWVkMzdiZS4u
MzRiOGRiMjcwYmY2OTRiMmUwN2QxODQ5MWFhODc0Njc0MzU2N2ZjOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UKQEAgLTE3Niw3ICsxNzYsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKIAogICAgIGNyeXB0by9Db21tb25DcnlwdG9VdGlsaXRpZXMuY3BwCiAgICAgY3J5cHRvL0Ny
eXB0b0FsZ29yaXRobS5jcHAKLSAgICBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyLmNwcAogICAgIGNyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKICAgICBj
cnlwdG8vQ3J5cHRvS2V5LmNwcAogICAgIGNyeXB0by9DcnlwdG9LZXlQYWlyLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFj
MDkxYWJjNDgxMWRkNGE0MjY5NmMxZGVjNmMxZTU2NDNkMmZiMDkuLmZiMTBkNTBlMTBjMzIwYjli
OWFkNmMyYjA5MDYyMTMyYjRkMmVlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU5NzIsOCArNTk3Miw2IEBACiAJCUUxNTdB
OEU0MTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RTIxODE3M0EzQTAwOUY4MjFEIC8qIENy
eXB0b0tleS5jcHAgKi87IH07CiAJCUUxNTdBOEU1MTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9L
ZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdB
OEUzMTgxNzNBM0EwMDlGODIxRCAvKiBDcnlwdG9LZXkuaCAqLzsgfTsKIAkJRTE1N0E4RTgxODE4
NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEU2MTgxODRDNjcwMDlGODIxRCAvKiBK
U0NyeXB0b0tleUN1c3RvbS5jcHAgKi87IH07Ci0JCUUxNTdBOEVDMTgxODUxQUMwMDlGODIxRCAv
KiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RUExODE4NTFBQzAwOUY4MjFEIC8q
IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi87IH07Ci0JCUUxNTdBOEVE
MTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTdBOEVCMTgx
ODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLzsg
fTsKIAkJRTE1N0E4RjAxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3
QThFRTE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLzsg
fTsKIAkJRTE1N0E4RjExODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4
RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oICovOyB9Owog
CQlFMTVBMzZENzExMDQ1NzIwMDBCN0I2MzkgLyogWE1MTlNOYW1lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5
IC8qIFhNTE5TTmFtZXMuaCAqLzsgfTsKQEAgLTEzNTQ5LDggKzEzNTQ3LDYgQEAKIAkJRTE1N0E4
RTIxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDcnlwdG9LZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMTU3QThFMzE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0tleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTU3QThFNjE4MTg0QzY3MDA5RjgyMUQgLyogSlNDcnlwdG9LZXlDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDcnlwdG9LZXlDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTU3QThFQTE4MTg1MUFDMDA5Rjgy
MUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNTdBOEVCMTgxODUxQUMwMDlG
ODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTdBOEVFMTgxODU0MjUwMDlGODIxRCAv
KiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTE1N0E4RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1QTM2RDYx
MTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gWE1MTlNOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIx
ODYsOCArMjIxODIsNiBAQAogCQkJCUUxRkUxMzczMTg0MDJBNjcwMDg5MkYxMyAvKiBDb21tb25D
cnlwdG9VdGlsaXRpZXMuaCAqLywKIAkJCQlFMTcyQUY2QjE4MEYyNEM2MDBGQkFEQjkgLyogQ3J5
cHRvQWxnb3JpdGhtLmNwcCAqLywKIAkJCQlFMTcyQUY2QzE4MEYyNEM2MDBGQkFEQjkgLyogQ3J5
cHRvQWxnb3JpdGhtLmggKi8sCi0JCQkJRTE1N0E4RUExODE4NTFBQzAwOUY4MjFEIC8qIENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAgKi8sCi0JCQkJRTE1N0E4RUIxODE4NTFB
QzAwOUY4MjFEIC8qIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oICovLAogCQkJ
CUUxQzY1NzI0MTgxNkU2OUQwMDI1NkNERCAvKiBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgg
Ki8sCiAJCQkJRTFDNjU3MjYxODE2RjlGRTAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMuaCAqLywKIAkJCQlFMUZGOEY2QTE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnkuY3BwICovLApAQCAtMjQwODAsNyArMjQwNzQsNiBAQAogCQkJCUUxRkUxMzdC
MTg0RDIxQkIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1cuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxMjVGODNBMTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQ
YXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOUFDM0Y3MTgyNEU1RDEwMDM0OTQyNiAvKiBD
cnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxNTdB
OEVEMTgxODUxQUMwMDlGODIxRCAvKiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjVGODMyMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9B
bGdvcml0aG1ITUFDLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlEQTI5QzE4MTg5QUREMDAwODhC
QzggLyogQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFDNjU3MUYxODE2RTUwMzAwMjU2Q0REIC8qIENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCBp
biBIZWFkZXJzICovLApAQCAtMjc3OTIsNyArMjc3ODUsNiBAQAogCQkJCUUxMjVGODQ1MTgyNDI1
QzkwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxRkUxMzdBMTg0RDIxQkIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1BRVNfS1cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFGRTEzN0UxODREMjcwMjAwODkyRjEzIC8qIENyeXB0
b0FsZ29yaXRobUFFU19LV01hYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMTU3QThFQzE4MTg1
MUFDMDA5RjgyMUQgLyogQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxMjVGODMxMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1ITUFDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjVGODM4MTgyMkYxRUIwMEQ4NENEOSAv
KiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY4RjZD
MTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0Fs
Z29yaXRobUJ1aWxkZXIuY3BwCmluZGV4IGE5ZjM3MjY1NzBlMjg5NGFiYTYxZTg1Y2MwOWYwOWMx
NDhiMThmOTguLmQ5OWMyN2FiZDk0YzRiNjEwZjBmZDgzNmUyMmI2ZDc2ZDk4NGEzN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1C
dWlsZGVyLmNwcApAQCAtNDgsMTEgKzQ4LDYgQEAgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjp+
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyKCkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcj4gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjpj
cmVhdGVFbXB0eUNsb25lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxK
U0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI+KG1fZXhlYyk7Ci19Ci0KIHZvaWQgSlNDcnlwdG9BbGdv
cml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCB1bnNpZ25lZCB2YWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CkBAIC03NSwxMiArNzAsMTEgQEAgdm9pZCBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgYnVmZmUKICAgICBtX2RpY3Rpb25hcnktPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
YXJyYXlWaWV3LT53cmFwKG1fZXhlYywgdm0uZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAotdm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXks
IGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgbmVzdGVkQnVpbGRlcikK
K3ZvaWQgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQoY29uc3QgY2hhcioga2V5LCBjb25z
dCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXImIG5lc3RlZEJ1aWxkZXIpCiB7CiAgICAgVk0mIHZt
ID0gbV9leGVjLT52bSgpOwogICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBrZXkpOwotICAgIGNvbnN0IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ciYganNCdWlsZGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVy
Jj4obmVzdGVkQnVpbGRlcik7Ci0gICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50
aWZpZXIsIGpzQnVpbGRlci5yZXN1bHQoKSk7CisgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIG5lc3RlZEJ1aWxkZXIucmVzdWx0KCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQWxnb3JpdGhtQnVpbGRlci5oCmluZGV4IGQ1MzdiNGM2NzcxYjk3YTEwNzgyYTQ1ZmU5OWQ4
YWE4NWIwMGVlZTkuLjI4NzNiZDFmNzI1NTY5YTc1ZTUxZWMzMmY0NTlhNTIwMzljOWFlNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGht
QnVpbGRlci5oCkBAIC0yNiw3ICsyNiwxMCBAQAogI2lmbmRlZiBKU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXJfaAogI2RlZmluZSBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXJfaAogCi0jaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKIApAQCAtMzcsMTkgKzQwLDE4IEBAIGNsYXNzIEpTT2JqZWN0OwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBmaW5hbCA6IHB1
YmxpYyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIgeworY2xhc3MgSlNDcnlwdG9B
bGdvcml0aG1CdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0NyeXB0b0FsZ29y
aXRobUJ1aWxkZXIpOwogcHVibGljOgogICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcihKU0M6
OkV4ZWNTdGF0ZSopOwogICAgIHZpcnR1YWwgfkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcigpOwog
CiAgICAgSlNDOjpKU09iamVjdCogcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9kaWN0aW9uYXJ5
OyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWls
ZGVyPiBjcmVhdGVFbXB0eUNsb25lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkZChj
b25zdCBjaGFyKiwgdW5zaWduZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIq
LCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGQoY29uc3QgY2hhcios
IGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIG92ZXJyaWRlOworICAg
IHZvaWQgYWRkKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBhZGQoY29uc3QgY2hh
ciosIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mKTsKKyAgICB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgSlNDcnlwdG9B
bGdvcml0aG1CdWlsZGVyJik7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhl
YzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNw
cAppbmRleCA1ODU5NGJlZjJkYjI5YTJmMDk3NWVjOTlmZmNhZjg0MDUxZGI5ZDUzLi5lOTc1NDAw
ZGJlYWQ3NjUwMzc1NzRiNWJhYTM4Y2JhYjMwM2QwYTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAog
CiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIK
KyNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCiAj
aW5jbHVkZSAiSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKQEAgLTM3LDExICs0MSw1MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEpTVmFsdWUgSlNDcnlwdG9LZXk6OmFsZ29yaXRobShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUp
IGNvbnN0CiB7CisgICAgaWYgKG1fYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gbV9hbGdvcml0
aG0uZ2V0KCk7CisKICAgICBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIgYnVpbGRlcigmc3RhdGUp
OwotICAgIHdyYXBwZWQoKS5idWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOwotICAg
IHJldHVybiBidWlsZGVyLnJlc3VsdCgpOwotfQogCisgICAgc3RkOjp1bmlxdWVfcHRyPEtleUFs
Z29yaXRobT4gYWxnb3JpdGhtID0gd3JhcHBlZCgpLmJ1aWxkQWxnb3JpdGhtKCk7CisgICAgc3dp
dGNoIChhbGdvcml0aG0tPmtleUFsZ29yaXRobUNsYXNzKCkpIHsKKyAgICBjYXNlIEtleUFsZ29y
aXRobUNsYXNzOjpBRVM6IHsKKyAgICAgICAgYXV0byYgYWVzQWxnb3JpdGhtID0gZG93bmNhc3Q8
QWVzS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5hZGQoIm5hbWUi
LCBhZXNBbGdvcml0aG0ubmFtZSgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIGFl
c0FsZ29yaXRobS5sZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEtl
eUFsZ29yaXRobUNsYXNzOjpITUFDOiB7CisgICAgICAgIGF1dG8mIGhtYWNBbGdvcml0aG0gPSBk
b3duY2FzdDxIbWFjS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKTsKKyAgICAgICAgYnVpbGRlci5h
ZGQoIm5hbWUiLCBobWFjQWxnb3JpdGhtLm5hbWUoKSk7CisgICAgICAgIEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlciBobWFjSGFzaCgmc3RhdGUpOworICAgICAgICBobWFjSGFzaC5hZGQoIm5hbWUi
LCBobWFjQWxnb3JpdGhtLmhhc2goKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgaG1h
Y0hhc2gpOworICAgICAgICBidWlsZGVyLmFkZCgibGVuZ3RoIiwgaG1hY0FsZ29yaXRobS5sZW5n
dGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEtleUFsZ29yaXRobUNsYXNz
OjpIUlNBOiB7CisgICAgICAgIGF1dG8mIHJzYUFsZ29yaXRobSA9IGRvd25jYXN0PFJzYUhhc2hl
ZEtleUFsZ29yaXRobT4oKmFsZ29yaXRobSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJuYW1lIiwg
cnNhQWxnb3JpdGhtLm5hbWUoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJtb2R1bHVzTGVuZ3Ro
IiwgcnNhQWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJw
dWJsaWNFeHBvbmVudCIsIHJzYUFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCgpKTsKKyAgICAgICAg
SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyIHJzYUhhc2goJnN0YXRlKTsKKyAgICAgICAgcnNhSGFz
aC5hZGQoIm5hbWUiLCByc2FBbGdvcml0aG0uaGFzaCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGQo
Imhhc2giLCByc2FIYXNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgS2V5QWxn
b3JpdGhtQ2xhc3M6OlJTQTogeworICAgICAgICBhdXRvJiByc2FBbGdvcml0aG0gPSBkb3duY2Fz
dDxSc2FLZXlBbGdvcml0aG0+KCphbGdvcml0aG0pOworICAgICAgICBidWlsZGVyLmFkZCgibmFt
ZSIsIHJzYUFsZ29yaXRobS5uYW1lKCkpOworICAgICAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xl
bmd0aCIsIHJzYUFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKCkpOworICAgICAgICBidWlsZGVyLmFk
ZCgicHVibGljRXhwb25lbnQiLCByc2FBbGdvcml0aG0ucHVibGljRXhwb25lbnQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBtX2FsZ29yaXRobS5zZXQoc3RhdGUudm0o
KSwgdGhpcywgYnVpbGRlci5yZXN1bHQoKSk7CisgICAgcmV0dXJuIG1fYWxnb3JpdGhtLmdldCgp
OworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjI3N2U3NjhhNTI4ODAzOTI5ODgxOGI4MDE4
ZGZkMmVkYTU3NmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOjpDcnlwdG9BbGdvcml0aG1EZXNj
cmlwdGlvbkJ1aWxkZXIoKQotewotfQotCi1DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXI6On5DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIoKQotewotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdmZTE0YmIwYzQ5YTQ0
NjA3OTMxMTIzYWM4NWE0YzRlMzdlZjg1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVz
Y3JpcHRpb25CdWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXJfaAotI2RlZmlu
ZSBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXJfaAotCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLSNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcik7Ci1wdWJs
aWM6Ci0gICAgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCk7Ci0gICAgdmlydHVh
bCB+Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI+IGNyZWF0ZUVt
cHR5Q2xvbmUoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0
IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwg
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgPSAwOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0j
ZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5jcHAKaW5kZXggZDgyN2Y3Y2NlMjQ4MDJlYjFjNTlmYWRiZGNjZDFhYmFl
OGVjNzU4MS4uNjAwNzUwNjY3MWQ1OGYyMTI0NmFmZDI1ZTZiOWI3ZTQxODUxODViZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKQEAgLTI4LDE1ICsyOCwxMyBAQAogCiAjaWYgRU5B
QkxFKFNVQlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXIuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1
ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNyeXB0b0tleTo6Q3J5
cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBUeXBlIHR5cGUsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlcykKLSAgICA6IG1fYWxnb3JpdGht
KGFsZ29yaXRobSkKK0NyeXB0b0tleTo6Q3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtSWRlbnRpZmllciwgVHlwZSB0eXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZSB1c2FnZXMpCisgICAgOiBtX2FsZ29yaXRobUlkZW50aWZpZXIoYWxnb3JpdGht
SWRlbnRpZmllcikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9leHRyYWN0YWJsZShleHRy
YWN0YWJsZSkKICAgICAsIG1fdXNhZ2VzKHVzYWdlcykKQEAgLTQ3LDEyICs0NSw2IEBAIENyeXB0
b0tleTo6fkNyeXB0b0tleSgpCiB7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRo
bURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikg
Y29uc3QKLXsKLSAgICBidWlsZGVyLmFkZCgibmFtZSIsIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRobSkpOwotICAgIC8vIFN1
YmNsYXNzZXMgd2lsbCBhZGQgb3RoZXIga2V5cy4KLX0KLQogYXV0byBDcnlwdG9LZXk6OnVzYWdl
cygpIGNvbnN0IC0+IFZlY3RvcjxVc2FnZT4KIHsKICAgICAvLyBUaGUgcmVzdWx0IGlzIG9yZGVy
ZWQgYWxwaGFiZXRpY2FsbHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5
cHRvS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKaW5kZXggZWI2Yjcw
MTZkNzUxYTk3MjFhMDlhYjVhMGQzMzMyOGIyZGYxZGRkZS4uMDBiOGIxMzY4MDM1OGU3NTFiNjZm
YWI4M2M0ZjdmM2RlMjMwNjAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxMSArNDMsMzggQEAg
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwogY2xhc3MgQ3J5cHRvS2V5
RGF0YTsKIAogZW51bSBjbGFzcyBDcnlwdG9LZXlDbGFzcyB7Ci0gICAgSE1BQywKICAgICBBRVMs
CisgICAgSE1BQywKICAgICBSU0EKIH07CiAKK2VudW0gY2xhc3MgS2V5QWxnb3JpdGhtQ2xhc3Mg
eworICAgIEFFUywKKyAgICBITUFDLAorICAgIFJTQSwKKyAgICBIUlNBCit9OworCitjbGFzcyBL
ZXlBbGdvcml0aG0geworcHVibGljOgorICAgIHZpcnR1YWwgfktleUFsZ29yaXRobSgpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xh
c3MoKSBjb25zdCA9IDA7CisKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IEtleUFsZ29yaXRobShjb25z
dCBTdHJpbmcmIG5hbWUpCisgICAgICAgIDogbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKwogY2xhc3MgQ3J5cHRvS2V5IDogcHVi
bGljIFJlZkNvdW50ZWQ8Q3J5cHRvS2V5PiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgVHlwZSA9IENy
eXB0b0tleVR5cGU7CkBAIC01Nyw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIFR5cGUgdHlwZSgp
IGNvbnN0OwogICAgIGJvb2wgZXh0cmFjdGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4dHJhY3Rh
YmxlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3Q7CisgICAgdmlydHVhbCBzdGQ6OnVu
aXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0ID0gMDsKIAogICAg
IC8vIEZJWE1FOiBDb25mdXNpbmcgdG8gaGF2ZSBDcnlwdG9LZXlVc2FnZSBhbmQgQ3J5cHRvS2V5
OjpVc2FnZSBuYW1lZCBhbG1vc3QgdGhlIHNhbWUsIGJ1dCBiZSBzbGlnaHRseSBkaWZmZXJlbnQu
CiAgICAgLy8gQ3J5cHRvS2V5VXNhZ2UgdmFsdWVzIGFyZSBiaXQgbWFza3Mgc28gdGhleSBjYW4g
YmUgY29tYmluZWQgd2l0aCAib3IiLCB3aGlsZSB0aGlzIGlzIGEgbm9ybWFsIGVudW0gdGhhdCBt
dXN0CkBAIC02NSw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFVzYWdlIHsgRW5j
cnlwdCwgRGVjcnlwdCwgU2lnbiwgVmVyaWZ5LCBEZXJpdmVLZXksIERlcml2ZUJpdHMsIFdyYXBL
ZXksIFVud3JhcEtleSB9OwogICAgIFZlY3RvcjxVc2FnZT4gdXNhZ2VzKCkgY29uc3Q7CiAKLSAg
ICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2FsZ29yaXRobTsgfQorICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxn
b3JpdGhtSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsg
fQogICAgIENyeXB0b0tleVVzYWdlIHVzYWdlc0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNh
Z2VzOyB9CiAgICAgYm9vbCBhbGxvd3MoQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpIGNvbnN0IHsgcmV0
dXJuIHVzYWdlID09IChtX3VzYWdlcyAmIHVzYWdlKTsgfQogCkBAIC03NCw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiByYW5kb21EYXRhKHNpemVfdCk7CiAK
IHByaXZhdGU6Ci0gICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBtX2FsZ29yaXRobTsKKyAg
ICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsKICAgICBU
eXBlIG1fdHlwZTsKICAgICBib29sIG1fZXh0cmFjdGFibGU7CiAgICAgQ3J5cHRvS2V5VXNhZ2Ug
bV91c2FnZXM7CkBAIC05Miw1ICsxMjAsMTAgQEAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAogICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpDcnlwdG9LZXkmIGtleSkgeyByZXR1cm4ga2V5LmtleUNsYXNzKCkgPT0gV2ViQ29y
ZTo6S2V5Q2xhc3M7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCisjZGVmaW5l
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShUb0NsYXNzTmFtZSwgS2V5QWxn
b3JpdGhtQ2xhc3MpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9D
bGFzc05hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6S2V5QWxn
b3JpdGhtJiBhbGdvcml0aG0pIHsgcmV0dXJuIGFsZ29yaXRobS5rZXlBbGdvcml0aG1DbGFzcygp
ID09IFdlYkNvcmU6OktleUFsZ29yaXRobUNsYXNzOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKKwogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogI2VuZGlmIC8vIENy
eXB0b0tleV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaWRsCmluZGV4IGM0ZjFjM2M1MzFi
M2UxNzg4MmJjMTI3MzA0NzMxYTY0ZTI0OTZjOGIuLmRjNzU2ZTcyOGIwMjU3NzU2NWY2Y2U0ODZi
MDBjNDhkOThmMzhkMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9L
ZXkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaWRsCkBAIC00Nyw2
ICs0Nyw2IEBAIGVudW0gS2V5VXNhZ2UgewogXSBpbnRlcmZhY2UgQ3J5cHRvS2V5IHsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgS2V5VHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBi
b29sZWFuIGV4dHJhY3RhYmxlOwotICAgIFtDdXN0b21dIHJlYWRvbmx5IGF0dHJpYnV0ZSBBbGdv
cml0aG0gYWxnb3JpdGhtOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBzZXF1ZW5jZTxLZXlVc2Fn
ZT4gdXNhZ2VzOworICAgIFtDYWNoZWRBdHRyaWJ1dGUsIEN1c3RvbUdldHRlcl0gcmVhZG9ubHkg
YXR0cmlidXRlIG9iamVjdCBhbGdvcml0aG07CisgICAgW0NhY2hlZEF0dHJpYnV0ZV0gcmVhZG9u
bHkgYXR0cmlidXRlIHNlcXVlbmNlPEtleVVzYWdlPiB1c2FnZXM7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2dudXRscy9DcnlwdG9LZXlSU0FHbnVUTFMuY3BwCmluZGV4IGQ3
MDQ1YTViNjg0N2JhNzcwNmM2MWYzY2YwZjE3NzYxOWQwNmIzOWMuLjE2ZjZkYjM4NTkwMjZlMjdm
ZjgxOWFjNjdlYTBmMmIxOWIxMjZhOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9nbnV0bHMvQ3J5cHRvS2V5UlNBR251VExTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ251dGxzL0NyeXB0b0tleVJTQUdudVRMUy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3Jp
cHRpb25CdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tl
eVBhaXIuaCIKQEAgLTgxLDEwICs4MCwxMSBAQCBzaXplX3QgQ3J5cHRvS2V5UlNBOjprZXlTaXpl
SW5CaXRzKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBDcnlwdG9LZXlSU0E6OmJ1
aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
JiBidWlsZGVyKSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5
UlNBOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICBVTlVTRURfUEFSQU0oYnVpbGRlcik7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1YmxpY0V4cG9u
ZW50OworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRobT4oZW1wdHlT
dHJpbmcoKSwgMCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvS2V5RGF0YT4gQ3J5cHRvS2V5UlNBOjpleHBvcnREYXRhKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCmluZGV4IDQ0YjUwMDdiOTEy
NzY2N2VmMmQ3NTU4OTQ4OWI3YjkxYzZmNTRiNWEuLmEwYWYyNTQ1NzBmMWMxMjIwYjA4OTFhZDRj
NjdkNDI2MGM1N2Q4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUFFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5
QUVTLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAK
LSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaCIKICNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleURhdGFPY3Rl
dFNlcXVlbmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02MywxMCAr
NjIsOSBAQCBSZWZQdHI8Q3J5cHRvS2V5QUVTPiBDcnlwdG9LZXlBRVM6OmdlbmVyYXRlKENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLAogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q3J5cHRvS2V5QUVTKGFsZ29yaXRobSwgcmFuZG9tRGF0YShsZW5ndGhCaXRzIC8gOCksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpKTsKIH0KIAotdm9pZCBDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGht
RGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBj
b25zdAorc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5QUVTOjpidWlsZEFs
Z29yaXRobSgpIGNvbnN0CiB7Ci0gICAgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRobURlc2NyaXB0
aW9uKGJ1aWxkZXIpOwotICAgIGJ1aWxkZXIuYWRkKCJsZW5ndGgiLCBtX2tleS5zaXplKCkgKiA4
KTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBZXNLZXlBbGdvcml0aG0+KENyeXB0b0Fs
Z29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihhbGdvcml0aG1J
ZGVudGlmaWVyKCkpLCBtX2tleS5zaXplKCkgKiA4KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGE+IENyeXB0b0tleUFFUzo6ZXhwb3J0RGF0YSgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oCmluZGV4IDQ1YTViYjgyMzY0ZWViMTFmZGM1
MzA1MWIxZGYzNWZhMzUzMmFmZjcuLjUyNzA1OWYwZmE1YTkzYzg1MTg4ZWE2MTA1NTA0YTgzOGRl
NWU4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFF
Uy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oCkBAIC0z
NCw2ICszNCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFlc0tleUFsZ29y
aXRobSBmaW5hbCA6IHB1YmxpYyBLZXlBbGdvcml0aG0geworcHVibGljOgorICAgIEFlc0tleUFs
Z29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUsIHNpemVfdCBsZW5ndGgpCisgICAgICAgIDogS2V5
QWxnb3JpdGhtKG5hbWUpCisgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgIHsKKyAgICB9
CisKKyAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpBRVM7IH0KKworICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCitwcml2YXRlOgorICAgIHNpemVfdCBtX2xl
bmd0aDsKK307CisKIGNsYXNzIENyeXB0b0tleUFFUyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9LZXkg
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q3J5cHRvS2V5QUVTPiBjcmVhdGUoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKQEAgLTQ2LDE1ICs2MiwxNSBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVmUHRyPENyeXB0b0tleUFFUz4gZ2VuZXJhdGUoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgc2l6ZV90IGxlbmd0aEJpdHMsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlKTsKIAotICAgIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OkFFUzsgfQorICAgIENyeXB0b0tl
eUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OkFF
UzsgfQogCiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXkoKSBjb25zdCB7IHJldHVybiBt
X2tleTsgfQogCiBwcml2YXRlOgogICAgIENyeXB0b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5
cHRvS2V5VXNhZ2UpOwogCi0gICAgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYnVpbGRBbGdvcml0aG0oKSBjb25zdCBm
aW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0RGF0YSgpIGNv
bnN0IGZpbmFsOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fa2V5OwogfTsKQEAgLTYzLDYgKzc5
LDggQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0
b0tleUFFUywgQ3J5cHRvS2V5Q2xhc3M6OkFFUykKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19L
RVlfQUxHT1JJVEhNKEFlc0tleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkFFUykKKwog
I2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjZW5kaWYgLy8gQ3J5cHRvS2V5QUVT
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKaW5kZXgg
YWY2MDRmNGY3N2NlNDJkM2EyZGM0ZjA2MmQyNTQ5NTU0MjI0YjBjMC4uYzU3NGY3NzJmNjlmZDhj
MjZjOTRjODgxZmJhODRjMzAwODcxN2Y3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5SE1BQy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
LmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDcnlw
dG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgpAQCAtNjcsMTUgKzY2LDEwIEBAIFJlZlB0cjxDcnlwdG9LZXlITUFDPiBDcnlwdG9LZXlITUFD
OjpnZW5lcmF0ZShzaXplX3QgbGVuZ3RoQnl0ZXMsIENyeXB0b0FsZ29yaXRoCiAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlITUFDKHJhbmRvbURhdGEobGVuZ3RoQnl0ZXMpLCBoYXNo
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKSk7CiB9CiAKLXZvaWQgQ3J5cHRvS2V5SE1BQzo6YnVpbGRB
bGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1
aWxkZXIpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlITUFD
OjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CiB7Ci0gICAgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRo
bURlc2NyaXB0aW9uKGJ1aWxkZXIpOwotCi0gICAgYXV0byBoYXNoRGVzY3JpcHRpb25CdWlsZGVy
ID0gYnVpbGRlci5jcmVhdGVFbXB0eUNsb25lKCk7Ci0gICAgaGFzaERlc2NyaXB0aW9uQnVpbGRl
ci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVG
b3JJZGVudGlmaWVyKG1faGFzaCkpOwotICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNj
cmlwdGlvbkJ1aWxkZXIpOwotCi0gICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIG1fa2V5LnNpemUo
KSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SG1hY0tleUFsZ29yaXRobT4oQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKGFsZ29yaXRo
bUlkZW50aWZpZXIoKSksCisgICAgICAgIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0
b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2hhc2gpLCBtX2tleS5zaXplKCkpOwogfQogCiBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gQ3J5cHRvS2V5SE1BQzo6ZXhwb3J0RGF0YSgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFD
LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKaW5kZXggNDY4
YWQwNzdmMTk2MWFkOGRhZDdiNGI0Mzk5OGViMTcyY2QyMzMwNy4uNTI0MjA3ZTFiZDU5Mjc2Y2Q1
Y2U4MGE0OWU1ZWIzNmJkYTMzYjFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5SE1BQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUhNQUMuaApAQCAtMzMsNiArMzMsMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBIbWFjS2V5QWxnb3JpdGhtIGZpbmFsIDogcHVibGljIEtleUFsZ29yaXRobSB7Citw
dWJsaWM6CisgICAgSG1hY0tleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgaGFzaCwgc2l6ZV90IGxlbmd0aCkKKyAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkK
KyAgICAgICAgLCBtX2hhc2goaGFzaCkKKyAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAg
eworICAgIH0KKworICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUM7IH0KKworICAgIGNvbnN0
IFN0cmluZyYgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQorICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBt
X2hhc2g7CisgICAgc2l6ZV90IG1fbGVuZ3RoOworfTsKKwogY2xhc3MgQ3J5cHRvS2V5SE1BQyBm
aW5hbCA6IHB1YmxpYyBDcnlwdG9LZXkgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q3J5cHRv
S2V5SE1BQz4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdl
KQpAQCAtNDQsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgLy8gSWYgbGVuZ3RoQnl0ZXMgaXMgMCwg
YSByZWNvbW1lbmRlZCBsZW5ndGggaXMgdXNlZCwgd2hpY2ggaXMgdGhlIHNpemUgb2YgdGhlIGFz
c29jaWF0ZWQgaGFzaCBmdW5jdGlvbidzIGJsb2NrIHNpemUuCiAgICAgc3RhdGljIFJlZlB0cjxD
cnlwdG9LZXlITUFDPiBnZW5lcmF0ZShzaXplX3QgbGVuZ3RoQnl0ZXMsIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgaGFzaCwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwogCi0g
ICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDcnlw
dG9LZXlDbGFzczo6SE1BQzsgfQorICAgIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OkhNQUM7IH0KIAogICAgIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KIApAQCAtNTMsOCArNzIs
OCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENyeXB0b0tleUhNQUMoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXksIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBleHRyYWN0
YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwogCi0gICAgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0
aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYnVpbGRBbGdvcml0aG0o
KSBjb25zdCBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0
RGF0YSgpIGNvbnN0IGZpbmFsOwogCiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBtX2hh
c2g7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fa2V5OwpAQCAtNjQsNSArODMsNyBAQCBwcml2YXRl
OgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5SE1BQywgQ3J5
cHRvS2V5Q2xhc3M6OkhNQUMpCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRI
TShIbWFjS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6SE1BQykKKwogI2VuZGlmIC8v
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogI2VuZGlmIC8vIENyeXB0b0tleUhNQUNfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuaAppbmRleCA2ZWEyMDBiOGMxNzFlODMy
MDM0ZjQ2ZWY0M2RjOTY1ZjBjNWQ5ZWUwLi43MjZjOWJmMzBmOTViMGYzNjRjNDhmNWU2OTRmMzY2
YTliYTJlYjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlSU0EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuaApA
QCAtNDcsNiArNDcsNDEgQEAgY2xhc3MgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM7CiBjbGFz
cyBDcnlwdG9LZXlQYWlyOwogY2xhc3MgUHJvbWlzZVdyYXBwZXI7CiAKK2NsYXNzIFJzYUtleUFs
Z29yaXRobSA6IHB1YmxpYyBLZXlBbGdvcml0aG0geworcHVibGljOgorICAgIFJzYUtleUFsZ29y
aXRobShjb25zdCBTdHJpbmcmIG5hbWUsIHNpemVfdCBtb2R1bHVzTGVuZ3RoLCBWZWN0b3I8dWlu
dDhfdD4mJiBwdWJsaWNFeHBvbmVudCkKKyAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKKyAg
ICAgICAgLCBtX21vZHVsdXNMZW5ndGgobW9kdWx1c0xlbmd0aCkKKyAgICAgICAgLCBtX3B1Ymxp
Y0V4cG9uZW50KFdURk1vdmUocHVibGljRXhwb25lbnQpKQorICAgIHsKKyAgICB9CisKKyAgICBL
ZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIEtleUFsZ29yaXRobUNsYXNzOjpSU0E7IH0KKworICAgIHNpemVfdCBtb2R1bHVzTGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bHVzTGVuZ3RoOyB9CisgICAgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBwdWJsaWNFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHVibGljRXhwb25lbnQ7
IH0KKworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9tb2R1bHVzTGVuZ3RoOworICAgIFZlY3Rvcjx1
aW50OF90PiBtX3B1YmxpY0V4cG9uZW50OworfTsKKworY2xhc3MgUnNhSGFzaGVkS2V5QWxnb3Jp
dGhtIGZpbmFsIDogcHVibGljIFJzYUtleUFsZ29yaXRobSB7CitwdWJsaWM6CisgICAgUnNhSGFz
aGVkS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbmFtZSwgc2l6ZV90IG1vZHVsdXNMZW5ndGgs
IFZlY3Rvcjx1aW50OF90PiYmIHB1YmxpY0V4cG9uZW50LCBjb25zdCBTdHJpbmcmIGhhc2gpCisg
ICAgICAgIDogUnNhS2V5QWxnb3JpdGhtKG5hbWUsIG1vZHVsdXNMZW5ndGgsIFdURk1vdmUocHVi
bGljRXhwb25lbnQpKQorICAgICAgICAsIG1faGFzaChoYXNoKQorICAgIHsKKyAgICB9CisKKyAg
ICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIEtleUFsZ29yaXRobUNsYXNzOjpIUlNBOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGhhc2go
KSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9oYXNo
OworfTsKKwogY2xhc3MgQ3J5cHRvS2V5UlNBIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxDcnlwdG9LZXlSU0E+IGNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwg
Ym9vbCBoYXNIYXNoLCBDcnlwdG9LZXlUeXBlIHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBsYXRmb3Jt
S2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKQEAgLTY5LDEwICsx
MDQsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDcnlwdG9LZXlSU0EoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGhhc0hh
c2gsIENyeXB0b0tleVR5cGUsIFBsYXRmb3JtUlNBS2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZSk7CiAKLSAgICBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpSU0E7IH0KKyAgICBDcnlwdG9LZXlDbGFzcyBr
ZXlDbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpSU0E7IH0KIAot
ICAgIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
S2V5RGF0YT4gZXhwb3J0RGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxLZXlBbGdvcml0aG0+IGJ1aWxkQWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CisgICAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IGV4cG9ydERhdGEoKSBjb25zdCBmaW5hbDsKIAogICAg
IFBsYXRmb3JtUlNBS2V5IG1fcGxhdGZvcm1LZXk7CiAKQEAgLTg0LDUgKzExOSw5IEBAIHByaXZh
dGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlSU0EsIENy
eXB0b0tleUNsYXNzOjpSU0EpCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRI
TShSc2FLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpSU0EpCisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShSc2FIYXNoZWRLZXlBbGdvcml0aG0sIEtleUFsZ29y
aXRobUNsYXNzOjpIUlNBKQorCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAjZW5k
aWYgLy8gQ3J5cHRvS2V5UlNBX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvS2V5UlNBTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
S2V5UlNBTWFjLmNwcAppbmRleCAxNDBjOWIzMTg4ZjliOGE0YWY2NDlkZjQ4NzRmN2QwOTA5ZDBh
MWEyLi5kNGRmNmNhNGM2MzhiMWRiNDhhNWZjNWY5ZWIxYzgyMjkwYjhjODM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCkBAIC0yOSw3ICsyOSw2
IEBACiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJDb21tb25DcnlwdG9V
dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIu
aCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNyeXB0
b0tleURhdGFSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5UGFpci5oIgpAQCAt
MTYwLDI2ICsxNTksMjIgQEAgc2l6ZV90IENyeXB0b0tleVJTQTo6a2V5U2l6ZUluQml0cygpIGNv
bnN0CiAgICAgcmV0dXJuIG1vZHVsdXMuc2l6ZSgpICogODsKIH0KIAotdm9pZCBDcnlwdG9LZXlS
U0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyJiBidWlsZGVyKSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gQ3J5
cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CiB7Ci0gICAgQ3J5cHRvS2V5OjpidWls
ZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOwotCisgICAgU3RyaW5nIG5hbWUgPSBDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIoYWxnb3Jp
dGhtSWRlbnRpZmllcigpKTsKICAgICBWZWN0b3I8dWludDhfdD4gbW9kdWx1czsKICAgICBWZWN0
b3I8dWludDhfdD4gcHVibGljRXhwb25lbnQ7CiAgICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9
IGdldFB1YmxpY0tleUNvbXBvbmVudHMobV9wbGF0Zm9ybUtleSwgbW9kdWx1cywgcHVibGljRXhw
b25lbnQpOwogICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZG4n
dCBnZXQgUlNBIGtleSBjb21wb25lbnRzLCBzdGF0dXMgJWQiLCBzdGF0dXMpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHB1YmxpY0V4cG9uZW50LmNsZWFyKCk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRobT4obmFtZSwgMCwgV1RGTW92ZShwdWJsaWNF
eHBvbmVudCkpOwogICAgIH0KIAotICAgIGJ1aWxkZXIuYWRkKCJtb2R1bHVzTGVuZ3RoIiwgbW9k
dWx1cy5zaXplKCkgKiA4KTsKLSAgICBidWlsZGVyLmFkZCgicHVibGljRXhwb25lbnQiLCBwdWJs
aWNFeHBvbmVudCk7Ci0KLSAgICBpZiAobV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpIHsKLSAg
ICAgICAgYXV0byBoYXNoRGVzY3JpcHRpb25CdWlsZGVyID0gYnVpbGRlci5jcmVhdGVFbXB0eUNs
b25lKCk7Ci0gICAgICAgIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXItPmFkZCgibmFtZSIsIENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2hhc2gp
KTsKLSAgICAgICAgYnVpbGRlci5hZGQoImhhc2giLCAqaGFzaERlc2NyaXB0aW9uQnVpbGRlcik7
Ci0gICAgfQorICAgIHNpemVfdCBtb2R1bHVzTGVuZ3RoID0gbW9kdWx1cy5zaXplKCkgKiA4Owor
ICAgIGlmIChtX3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8UnNhSGFzaGVkS2V5QWxnb3JpdGhtPihuYW1lLCBtb2R1bHVzTGVuZ3RoLCBX
VEZNb3ZlKHB1YmxpY0V4cG9uZW50KSwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRv
bigpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFJzYUtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNF
eHBvbmVudCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gQ3J5cHRvS2V5
UlNBOjpleHBvcnREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiZGY0MTc2YjM3NDI0YmU1NzYwNzQyODdh
ODU4ZjQzNjg0NDc3MThjLi5iYTg0ZTFiMjg4YjMzODBiNTg2ZjE4MTMyNjFkZTk5ZjE1ODgyZWI3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDktMTMgIEppZXdlbiBUYW4gIDxqaWV3ZW5f
dGFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJDcnlwdG8gYWxnb3JpdGhtcyBzaG91bGQgYmUg
ZXhwb3NlZCB2aWEgS2V5QWxnb3JpdGhtIGRpY3Rpb25hcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODc0OAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjczNTk0Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVsZ2hhbSBhbmQgQ2hy
aXMgRHVtZXouCisKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2NyeXB0by1rZXktYWxnb3JpdGht
LWdjLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9jcnlwdG8t
a2V5LWFsZ29yaXRobS1nYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Ny
eXB0by1rZXktdXNhZ2VzLWdjLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5cHRv
L3N1YnRsZS9jcnlwdG8ta2V5LXVzYWdlcy1nYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjcnlw
dG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBjcnlw
dG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5Lmh0bWw6CisKIDIwMTYtMDktMTIgIFNhYW0gQmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgU3BlZWQgdXAgRnVuY3Rpb24ucHJv
dG90eXBlLmJpbmQgYSBiaXQgYnkgbWFraW5nIGl0IGEgYnVpbHRpbgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LWFsZ29yaXRobS1nYy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdjLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2QxNzY2OTJjZGUzNGY1YzA2NmM5MWZiNzVhYWQ1YjQ0
MDFjYTJjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9jcnlw
dG8ta2V5LWFsZ29yaXRobS1nYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdCB0
aGF0IENyeXB0b0tleS5hbGdvcml0aG0gcHJlc2VydmVzIGN1c3RvbSBwcm9wZXJ0aWVzLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitHZW5lcmF0aW5nIGEgSE1BQyBrZXkgd2l0
aCBkZWZhdWx0IGxlbmd0aC4uLgorUEFTUyBrZXkuYWxnb3JpdGhtID09PSBrZXkuYWxnb3JpdGht
IGlzIHRydWUKK1BBU1Mga2V5LmFsZ29yaXRobS5mb28gaXMgImJhciIKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9jcnlwdG8vc3VidGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdjLmh0bWwgYi9MYXlvdXRU
ZXN0cy9jcnlwdG8vc3VidGxlL2NyeXB0by1rZXktYWxnb3JpdGhtLWdjLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODEwZGM3NGM3YWQ1ZTQ3MzJkM2E0MGNlZmQ3NWY1NDY5NGY2ZTkxZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS1hbGdvcml0aG0tZ2Mu
aHRtbApAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3Qg
dGhhdCBDcnlwdG9LZXkuYWxnb3JpdGhtIHByZXNlcnZlcyBjdXN0b20gcHJvcGVydGllcy4iKTsK
K2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitkZWJ1ZygiXG5HZW5lcmF0aW5nIGEgSE1BQyBrZXkg
d2l0aCBkZWZhdWx0IGxlbmd0aC4uLiIpOworY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFt
ZTogImhtYWMiLCBoYXNoOiAic2hhLTEifSwgdHJ1ZSwgWyJzaWduIiwgInZlcmlmeSJdKS50aGVu
KGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtleSA9IHJlc3VsdDsKKyAgICBzdGFydFRlc3QoKTsK
K30pOworCitmdW5jdGlvbiBzdGFydFRlc3QoKQoreworICAgIHNob3VsZEJlVHJ1ZSgia2V5LmFs
Z29yaXRobSA9PT0ga2V5LmFsZ29yaXRobSIpOworICAgIGtleS5hbGdvcml0aG0uZm9vID0gImJh
ciI7CisgICAgZ2MoKTsKKyAgICBzZXRUaW1lb3V0KGNvbnRpbnVlVGVzdCwgMTApOworfQorCitm
dW5jdGlvbiBjb250aW51ZVRlc3QoKQoreworICAgIGdjKCk7CisgICAgc2V0VGltZW91dChmaW5p
c2hUZXN0LCAxMCk7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKQoreworICAgIGdjKCk7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdrZXkuYWxnb3JpdGhtLmZvbycsICdiYXInKTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2NyeXB0by1rZXktdXNhZ2VzLWdjLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvY3J5cHRvLWtleS11c2FnZXMt
Z2MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkMTU1ZjA3NGM3NjdiMjUzNTk1MzM3MTllM2Jj
NmRkYmZiMzQ1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2NyeXB0by1rZXktdXNhZ2VzLWdjLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0
IHRoYXQgQ3J5cHRvS2V5LnVzYWdlcyBwcmVzZXJ2ZXMgY3VzdG9tIHByb3BlcnRpZXMuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK0dlbmVyYXRpbmcgYSBITUFDIGtleSB3aXRo
IGRlZmF1bHQgbGVuZ3RoLi4uCitQQVNTIGtleS51c2FnZXMgPT09IGtleS51c2FnZXMgaXMgdHJ1
ZQorUEFTUyBrZXkudXNhZ2VzLmZvbyBpcyAiYmFyIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvY3J5cHRvLWtleS11c2FnZXMtZ2MuaHRtbCBiL0xheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvY3J5cHRvLWtleS11c2FnZXMtZ2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzI3NzM3NWE4YTJh
NTdkOTgxNjlhMmU0ZmFmNGE3MTg1YjA2YThiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvY3J5cHRvL3N1YnRsZS9jcnlwdG8ta2V5LXVzYWdlcy1nYy5odG1sCkBAIC0wLDAgKzEsNDQg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IENyeXB0b0tleS51c2Fn
ZXMgcHJlc2VydmVzIGN1c3RvbSBwcm9wZXJ0aWVzLiIpOworanNUZXN0SXNBc3luYyA9IHRydWU7
CisKK2RlYnVnKCJcbkdlbmVyYXRpbmcgYSBITUFDIGtleSB3aXRoIGRlZmF1bHQgbGVuZ3RoLi4u
Iik7CitjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5KHtuYW1lOiAiaG1hYyIsIGhhc2g6ICJzaGEt
MSJ9LCB0cnVlLCBbInNpZ24iLCAidmVyaWZ5Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7Cisg
ICAga2V5ID0gcmVzdWx0OworICAgIHN0YXJ0VGVzdCgpOworfSk7CisKK2Z1bmN0aW9uIHN0YXJ0
VGVzdCgpCit7CisgICAgc2hvdWxkQmVUcnVlKCJrZXkudXNhZ2VzID09PSBrZXkudXNhZ2VzIik7
CisgICAga2V5LnVzYWdlcy5mb28gPSAiYmFyIjsKKyAgICBnYygpOworICAgIHNldFRpbWVvdXQo
Y29udGludWVUZXN0LCAxMCk7Cit9CisKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdCgpCit7CisgICAg
Z2MoKTsKKyAgICBzZXRUaW1lb3V0KGZpbmlzaFRlc3QsIDEwKTsKK30KKworZnVuY3Rpb24gZmlu
aXNoVGVzdCgpCit7CisgICAgZ2MoKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2tleS51
c2FnZXMuZm9vJywgJ2JhcicpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCis8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
aG1hYy1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9obWFjLWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKaW5kZXggNWJkMzFiZDBhN2E3MjE2ZjZk
NDBiMWY2ZjU1ODkwZTBhZDEzYWNlNC4uNTM5MjFlNDI3MDNmZTE0YjJlZWVlNjIxYWExMjEzMDNi
NjAyOGNiYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVy
YXRlLWtleS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFj
LWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKQEAgLTEzLDYgKzEzLDcgQEAgUEFTUyBrZXkudHlw
ZSBpcyAnc2VjcmV0JwogUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXkuYWxn
b3JpdGhtLm5hbWUgaXMgJ0hNQUMnCiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDY0CitQ
QVNTIGtleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdTSEEtMScKIFBBU1Mga2V5LnVzYWdlcyBp
cyBbInNpZ24iLCAidmVyaWZ5Il0KIAogR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBsZW5n
dGguLi4KQEAgLTIwLDYgKzIxLDcgQEAgUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0JwogUEFTUyBr
ZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQogUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ0hNQUMn
CiBQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDUKK1BBU1Mga2V5LmFsZ29yaXRobS5oYXNo
Lm5hbWUgaXMgJ1NIQS0xJwogUEFTUyBrZXkudXNhZ2VzIGlzIFsic2lnbiJdCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvaG1hYy1nZW5lcmF0ZS1rZXkuaHRtbCBiL0xheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
aG1hYy1nZW5lcmF0ZS1rZXkuaHRtbAppbmRleCAzYWZjNTY4NWMxNzhhMTIzN2E2YTkzNjAwYzRm
MDlhM2E5MTg4ODliLi4yYjliZjNhMTdhNzE4YWFmMDY3NGI5NzhkZTAwNDAwYzVmODdkMmQwIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtZ2VuZXJhdGUta2V5Lmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWtleS5odG1s
CkBAIC0yOCw2ICsyOCw3IEBAIGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoe25hbWU6ICJobWFj
IiwgaGFzaDogInNoYS0xIn0sIGV4dHJhY3RhYmxlLCBbInNpZ24iLCAiCiAgICAgc2hvdWxkQmUo
ImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7CiAgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0u
bmFtZSIsICInSE1BQyciKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAi
NjQiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5oYXNoLm5hbWUiLCAiJ1NIQS0xJyIp
OwogICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgJ1sic2lnbiIsICJ2ZXJpZnkiXScpOwogCiAg
ICAgZGVidWcoIlxuR2VuZXJhdGluZyBhIGtleSB3aXRoIGN1c3RvbSBsZW5ndGguLi4iKTsKQEAg
LTM5LDYgKzQwLDcgQEAgY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTogImhtYWMiLCBo
YXNoOiAic2hhLTEifSwgZXh0cmFjdGFibGUsIFsic2lnbiIsICIKICAgICBzaG91bGRCZSgia2V5
LmV4dHJhY3RhYmxlIiwgInRydWUiKTsKICAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1l
IiwgIidITUFDJyIpOwogICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICI1Iik7
CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidTSEEtMSciKTsKICAg
ICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICdbInNpZ24iXScpOwogICAgIGZpbmlzaEpTVGVzdCgp
OwogfSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>